2026-02-24 20:44:16 +00:00
|
|
|
|
import { RouteDto } from '@/proxy/routes/models'
|
2026-10-17 18:51:10 +00:00
|
|
|
|
import React, { useCallback, useEffect, useState } from 'react'
|
2026-02-24 20:44:16 +00:00
|
|
|
|
import { useStoreState } from '@/store/store'
|
2026-10-17 18:51:10 +00:00
|
|
|
|
import { DynamicRoutesContext } from './dynamicRoutes.context'
|
2026-02-24 20:44:16 +00:00
|
|
|
|
|
|
|
|
|
|
export const DynamicRoutesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
|
|
|
|
|
const extraProperties = useStoreState((state) => state.abpConfig?.config?.extraProperties)
|
2026-04-23 10:36:51 +00:00
|
|
|
|
const setupMode = useStoreState((state) => state.base.common.setupMode)
|
2026-08-09 08:52:28 +00:00
|
|
|
|
const bootstrapFailed = useStoreState((state) => state.base.common.bootstrapFailed)
|
2026-02-24 20:44:16 +00:00
|
|
|
|
const [routes, setRoutes] = useState<RouteDto[]>([])
|
|
|
|
|
|
const [loading, setLoading] = useState(true)
|
|
|
|
|
|
const [error, setError] = useState<string | null>(null)
|
|
|
|
|
|
|
2026-10-17 18:51:10 +00:00
|
|
|
|
const loadRoutesFromConfig = useCallback(() => {
|
2026-02-24 20:44:16 +00:00
|
|
|
|
setLoading(true)
|
|
|
|
|
|
setError(null)
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
// Get routes from extraProperties instead of API call
|
|
|
|
|
|
const configRoutes = extraProperties?.routes as RouteDto[]
|
|
|
|
|
|
|
|
|
|
|
|
if (configRoutes && Array.isArray(configRoutes)) {
|
|
|
|
|
|
setRoutes(configRoutes)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setRoutes([])
|
|
|
|
|
|
setError('No routes found in configuration')
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (e: any) {
|
|
|
|
|
|
setError(e.message || 'Error loading routes from configuration')
|
|
|
|
|
|
setRoutes([])
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
setLoading(false)
|
|
|
|
|
|
}
|
2026-10-17 18:51:10 +00:00
|
|
|
|
}, [extraProperties])
|
2026-02-24 20:44:16 +00:00
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (extraProperties) {
|
|
|
|
|
|
loadRoutesFromConfig()
|
2026-08-09 08:52:28 +00:00
|
|
|
|
} else if (setupMode || bootstrapFailed) {
|
|
|
|
|
|
// Config hiç gelmeyecek (sunucu kurulum modunda veya erişilemiyor).
|
|
|
|
|
|
// Loading gate'i kapat ki kullanıcı sonsuz spinner yerine ilgili ekranı görsün.
|
2026-04-23 10:36:51 +00:00
|
|
|
|
setLoading(false)
|
|
|
|
|
|
setRoutes([])
|
2026-02-24 20:44:16 +00:00
|
|
|
|
}
|
2026-10-17 18:51:10 +00:00
|
|
|
|
}, [extraProperties, setupMode, bootstrapFailed, loadRoutesFromConfig])
|
2026-02-24 20:44:16 +00:00
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<DynamicRoutesContext.Provider value={{ routes, loading, error, reload: loadRoutesFromConfig }}>
|
|
|
|
|
|
{children}
|
|
|
|
|
|
</DynamicRoutesContext.Provider>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|