0d4fe4575b
## Summary - **Refactor frontend metadata loading architecture**: Split the monolithic `EagerMetadataLoadEffect` into focused provider effects (`UserMetadataProviderEffect`, `ObjectMetadataProviderEffect`, `ViewMetadataProviderEffect`) orchestrated by `MetadataProviderEffects`. Replaced `UserProvider` + `ObjectMetadataItemsProvider` with a single `MetadataGater` that gates rendering on `isAppMetadataReadyState`. The metadata store now validates view-object consistency before promoting views, and `updateDraft` skips no-op updates via deep equality checks. - **SDK CLI improvements**: Added `app:typecheck` command, improved error handling in API sync (extracts GraphQL error messages), added `serializeError` utility for human-readable error output, added `error` file status to dev mode orchestrator with UI support, and fixed ClickHouse migration/seed commands to use `transpile-only`.
96 lines
5.4 KiB
TypeScript
96 lines
5.4 KiB
TypeScript
import { AgentChatProvider } from '@/ai/components/AgentChatProvider';
|
|
import { ApolloProvider } from '@/apollo/components/ApolloProvider';
|
|
import { MetadataGater } from '@/metadata-store/components/MetadataGater';
|
|
import { IsAppMetadataReadyEffect } from '@/metadata-store/effect-components/IsAppMetadataReadyEffect';
|
|
import { GotoHotkeysEffectsProvider } from '@/app/effect-components/GotoHotkeysEffectsProvider';
|
|
import { MetadataProviderInitialEffects } from '@/metadata-store/effect-components/MetadataProviderInitialEffects';
|
|
import { PageChangeEffect } from '@/app/effect-components/PageChangeEffect';
|
|
import { AuthProvider } from '@/auth/components/AuthProvider';
|
|
import { CaptchaProvider } from '@/captcha/components/CaptchaProvider';
|
|
import { ChromeExtensionSidecarEffect } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect';
|
|
import { ChromeExtensionSidecarProvider } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider';
|
|
import { ClientConfigProvider } from '@/client-config/components/ClientConfigProvider';
|
|
import { ClientConfigProviderEffect } from '@/client-config/components/ClientConfigProviderEffect';
|
|
import { MainContextStoreProvider } from '@/context-store/components/MainContextStoreProvider';
|
|
import { ErrorMessageEffect } from '@/error-handler/components/ErrorMessageEffect';
|
|
import { PromiseRejectionEffect } from '@/error-handler/components/PromiseRejectionEffect';
|
|
import { HeadlessFrontComponentMountRoot } from '@/front-components/components/HeadlessFrontComponentMountRoot';
|
|
import { ApolloCoreProvider } from '@/object-metadata/components/ApolloCoreProvider';
|
|
import { PreComputedChipGeneratorsProvider } from '@/object-metadata/components/PreComputedChipGeneratorsProvider';
|
|
import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider';
|
|
import { SSEProvider } from '@/sse-db-event/components/SSEProvider';
|
|
import { SupportChatEffect } from '@/support/components/SupportChatEffect';
|
|
import { DialogManager } from '@/ui/feedback/dialog-manager/components/DialogManager';
|
|
import { DialogComponentInstanceContext } from '@/ui/feedback/dialog-manager/contexts/DialogComponentInstanceContext';
|
|
import { SnackBarProvider } from '@/ui/feedback/snack-bar-manager/components/SnackBarProvider';
|
|
import { GlobalFilePreviewModal } from '@/ui/field/display/components/GlobalFilePreviewModal';
|
|
import { BaseThemeProvider } from '@/ui/theme/components/BaseThemeProvider';
|
|
import { UserThemeProviderEffect } from '@/ui/theme/components/UserThemeProviderEffect';
|
|
import { PageFavicon } from '@/ui/utilities/page-favicon/components/PageFavicon';
|
|
import { PageTitle } from '@/ui/utilities/page-title/components/PageTitle';
|
|
import { LazyMetadataLoadEffect } from '@/users/components/LazyMetadataLoadEffect';
|
|
import { WorkspaceProviderEffect } from '@/workspace/components/WorkspaceProviderEffect';
|
|
import { StrictMode } from 'react';
|
|
import { Outlet, useLocation } from 'react-router-dom';
|
|
import { getPageTitleFromPath } from '~/utils/title-utils';
|
|
|
|
export const AppRouterProviders = () => {
|
|
const { pathname } = useLocation();
|
|
const pageTitle = getPageTitleFromPath(pathname);
|
|
|
|
return (
|
|
<ApolloProvider>
|
|
<BaseThemeProvider>
|
|
<ClientConfigProviderEffect />
|
|
<MetadataProviderInitialEffects />
|
|
<LazyMetadataLoadEffect />
|
|
<IsAppMetadataReadyEffect />
|
|
<WorkspaceProviderEffect />
|
|
<ClientConfigProvider>
|
|
<CaptchaProvider>
|
|
<ChromeExtensionSidecarEffect />
|
|
<ChromeExtensionSidecarProvider>
|
|
<MetadataGater>
|
|
<AuthProvider>
|
|
<ApolloCoreProvider>
|
|
<SSEProvider>
|
|
<PreComputedChipGeneratorsProvider>
|
|
<PrefetchDataProvider>
|
|
<UserThemeProviderEffect />
|
|
<SnackBarProvider>
|
|
<ErrorMessageEffect />
|
|
<AgentChatProvider>
|
|
<DialogComponentInstanceContext.Provider
|
|
value={{ instanceId: 'dialog-manager' }}
|
|
>
|
|
<DialogManager>
|
|
<StrictMode>
|
|
<PromiseRejectionEffect />
|
|
<GotoHotkeysEffectsProvider />
|
|
<PageTitle title={pageTitle} />
|
|
<PageFavicon />
|
|
<Outlet />
|
|
<GlobalFilePreviewModal />
|
|
<HeadlessFrontComponentMountRoot />
|
|
</StrictMode>
|
|
</DialogManager>
|
|
</DialogComponentInstanceContext.Provider>
|
|
</AgentChatProvider>
|
|
</SnackBarProvider>
|
|
<MainContextStoreProvider />
|
|
<SupportChatEffect />
|
|
</PrefetchDataProvider>
|
|
<PageChangeEffect />
|
|
</PreComputedChipGeneratorsProvider>
|
|
</SSEProvider>
|
|
</ApolloCoreProvider>
|
|
</AuthProvider>
|
|
</MetadataGater>
|
|
</ChromeExtensionSidecarProvider>
|
|
</CaptchaProvider>
|
|
</ClientConfigProvider>
|
|
</BaseThemeProvider>
|
|
</ApolloProvider>
|
|
);
|
|
};
|