|
|
|
@@ -25,6 +25,7 @@ import { fetchAppDetail, fetchAppSSO } from '@/service/apps' |
|
|
|
import AppContext, { useAppContext } from '@/context/app-context' |
|
|
|
import Loading from '@/app/components/base/loading' |
|
|
|
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' |
|
|
|
import type { App } from '@/types/app' |
|
|
|
|
|
|
|
export type IAppDetailLayoutProps = { |
|
|
|
children: React.ReactNode |
|
|
|
@@ -41,12 +42,14 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => { |
|
|
|
const pathname = usePathname() |
|
|
|
const media = useBreakpoints() |
|
|
|
const isMobile = media === MediaType.mobile |
|
|
|
const { isCurrentWorkspaceEditor } = useAppContext() |
|
|
|
const { isCurrentWorkspaceEditor, isLoadingCurrentWorkspace } = useAppContext() |
|
|
|
const { appDetail, setAppDetail, setAppSiderbarExpand } = useStore(useShallow(state => ({ |
|
|
|
appDetail: state.appDetail, |
|
|
|
setAppDetail: state.setAppDetail, |
|
|
|
setAppSiderbarExpand: state.setAppSiderbarExpand, |
|
|
|
}))) |
|
|
|
const [isLoadingAppDetail, setIsLoadingAppDetail] = useState(false) |
|
|
|
const [appDetailRes, setAppDetailRes] = useState<App | null>(null) |
|
|
|
const [navigation, setNavigation] = useState<Array<{ |
|
|
|
name: string |
|
|
|
href: string |
|
|
|
@@ -107,33 +110,43 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => { |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
setAppDetail() |
|
|
|
setIsLoadingAppDetail(true) |
|
|
|
fetchAppDetail({ url: '/apps', id: appId }).then((res) => { |
|
|
|
// redirection |
|
|
|
const canIEditApp = isCurrentWorkspaceEditor |
|
|
|
if (!canIEditApp && (pathname.endsWith('configuration') || pathname.endsWith('workflow') || pathname.endsWith('logs'))) { |
|
|
|
router.replace(`/app/${appId}/overview`) |
|
|
|
return |
|
|
|
} |
|
|
|
if ((res.mode === 'workflow' || res.mode === 'advanced-chat') && (pathname).endsWith('configuration')) { |
|
|
|
router.replace(`/app/${appId}/workflow`) |
|
|
|
} |
|
|
|
else if ((res.mode !== 'workflow' && res.mode !== 'advanced-chat') && (pathname).endsWith('workflow')) { |
|
|
|
router.replace(`/app/${appId}/configuration`) |
|
|
|
} |
|
|
|
else { |
|
|
|
setAppDetail({ ...res, enable_sso: false }) |
|
|
|
setNavigation(getNavigations(appId, isCurrentWorkspaceEditor, res.mode)) |
|
|
|
if (systemFeatures.enable_web_sso_switch_component && canIEditApp) { |
|
|
|
fetchAppSSO({ appId }).then((ssoRes) => { |
|
|
|
setAppDetail({ ...res, enable_sso: ssoRes.enabled }) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
setAppDetailRes(res) |
|
|
|
}).catch((e: any) => { |
|
|
|
if (e.status === 404) |
|
|
|
router.replace('/apps') |
|
|
|
}).finally(() => { |
|
|
|
setIsLoadingAppDetail(false) |
|
|
|
}) |
|
|
|
}, [appId, isCurrentWorkspaceEditor, systemFeatures, getNavigations, pathname, router, setAppDetail]) |
|
|
|
}, [appId, router, setAppDetail]) |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
if (!appDetailRes || isLoadingCurrentWorkspace || isLoadingAppDetail) |
|
|
|
return |
|
|
|
const res = appDetailRes |
|
|
|
// redirection |
|
|
|
const canIEditApp = isCurrentWorkspaceEditor |
|
|
|
if (!canIEditApp && (pathname.endsWith('configuration') || pathname.endsWith('workflow') || pathname.endsWith('logs'))) { |
|
|
|
router.replace(`/app/${appId}/overview`) |
|
|
|
return |
|
|
|
} |
|
|
|
if ((res.mode === 'workflow' || res.mode === 'advanced-chat') && (pathname).endsWith('configuration')) { |
|
|
|
router.replace(`/app/${appId}/workflow`) |
|
|
|
} |
|
|
|
else if ((res.mode !== 'workflow' && res.mode !== 'advanced-chat') && (pathname).endsWith('workflow')) { |
|
|
|
router.replace(`/app/${appId}/configuration`) |
|
|
|
} |
|
|
|
else { |
|
|
|
setAppDetail({ ...res, enable_sso: false }) |
|
|
|
setNavigation(getNavigations(appId, isCurrentWorkspaceEditor, res.mode)) |
|
|
|
if (systemFeatures.enable_web_sso_switch_component && canIEditApp) { |
|
|
|
fetchAppSSO({ appId }).then((ssoRes) => { |
|
|
|
setAppDetail({ ...res, enable_sso: ssoRes.enabled }) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
}, [appDetailRes, appId, getNavigations, isCurrentWorkspaceEditor, isLoadingAppDetail, isLoadingCurrentWorkspace, pathname, router, setAppDetail, systemFeatures.enable_web_sso_switch_component]) |
|
|
|
|
|
|
|
useUnmount(() => { |
|
|
|
setAppDetail() |