dify/web/contract/router.ts
yyh 806ece9a67
refactor!: replace Zustand global store with TanStack Query for systemFeatures
Follow-up to SSR prefetch migration (2833965). Eliminates the Zustand
middleman that was syncing TanStack Query data into a separate store.

- Remove useGlobalPublicStore Zustand store entirely
- Create hooks/use-global-public.ts with useSystemFeatures,
  useSystemFeaturesQuery, useIsSystemFeaturesPending, useSetupStatusQuery
- Migrate all 93 consumers to import from @/hooks/use-global-public
- Simplify global-public-context.tsx to a thin provider component
- Update 18 test files to mock the new hook interface
- Fix SetupStatusResponse.setup_at type from Date to string (JSON)
- Fix setup-status.spec.ts mock target to match consoleClient

BREAKING CHANGE: useGlobalPublicStore is removed. Use useSystemFeatures()
from @/hooks/use-global-public instead.
2026-02-01 19:06:08 +08:00

103 lines
3.6 KiB
TypeScript

import type { InferContractRouterInputs } from '@orpc/contract'
import { accountAvatarContract } from './console/account'
import {
batchUploadContract,
createFolderContract,
deleteNodeContract,
getFileContentContract,
getFileDownloadUrlContract,
getFileUploadUrlContract,
moveNodeContract,
publishContract,
renameNodeContract,
reorderNodeContract,
treeContract,
updateFileContentContract,
} from './console/app-asset'
import { workflowOnlineUsersContract } from './console/apps'
import { bindPartnerStackContract, invoicesContract } from './console/billing'
import {
downloadFileContract,
listFilesContract,
} from './console/sandbox-file'
import {
activateSandboxProviderContract,
deleteSandboxProviderConfigContract,
getSandboxProviderListContract,
saveSandboxProviderConfigContract,
} from './console/sandbox-provider'
import { setupStatusContract, systemFeaturesContract } from './console/system'
import { trialAppDatasetsContract, trialAppInfoContract, trialAppParametersContract, trialAppWorkflowsContract } from './console/try-app'
import {
workflowDraftEnvironmentVariablesContract,
workflowDraftNodeSkillsContract,
workflowDraftUpdateConversationVariablesContract,
workflowDraftUpdateEnvironmentVariablesContract,
workflowDraftUpdateFeaturesContract,
} from './console/workflow'
import { workflowCommentContracts } from './console/workflow-comment'
import { collectionPluginsContract, collectionsContract, searchAdvancedContract } from './marketplace'
export const marketplaceRouterContract = {
collections: collectionsContract,
collectionPlugins: collectionPluginsContract,
searchAdvanced: searchAdvancedContract,
}
export type MarketPlaceInputs = InferContractRouterInputs<typeof marketplaceRouterContract>
export const consoleRouterContract = {
account: {
avatar: accountAvatarContract,
},
systemFeatures: systemFeaturesContract,
setupStatus: setupStatusContract,
trialApps: {
info: trialAppInfoContract,
datasets: trialAppDatasetsContract,
parameters: trialAppParametersContract,
workflows: trialAppWorkflowsContract,
},
billing: {
invoices: invoicesContract,
bindPartnerStack: bindPartnerStackContract,
},
sandboxProvider: {
getSandboxProviderList: getSandboxProviderListContract,
saveSandboxProviderConfig: saveSandboxProviderConfigContract,
deleteSandboxProviderConfig: deleteSandboxProviderConfigContract,
activateSandboxProvider: activateSandboxProviderContract,
},
sandboxFile: {
listFiles: listFilesContract,
downloadFile: downloadFileContract,
},
appAsset: {
tree: treeContract,
createFolder: createFolderContract,
getFileContent: getFileContentContract,
getFileDownloadUrl: getFileDownloadUrlContract,
updateFileContent: updateFileContentContract,
deleteNode: deleteNodeContract,
renameNode: renameNodeContract,
moveNode: moveNodeContract,
reorderNode: reorderNodeContract,
publish: publishContract,
getFileUploadUrl: getFileUploadUrlContract,
batchUpload: batchUploadContract,
},
apps: {
workflowOnlineUsers: workflowOnlineUsersContract,
},
workflowDraft: {
environmentVariables: workflowDraftEnvironmentVariablesContract,
nodeSkills: workflowDraftNodeSkillsContract,
updateEnvironmentVariables: workflowDraftUpdateEnvironmentVariablesContract,
updateConversationVariables: workflowDraftUpdateConversationVariablesContract,
updateFeatures: workflowDraftUpdateFeaturesContract,
},
workflowComments: workflowCommentContracts,
}
export type ConsoleInputs = InferContractRouterInputs<typeof consoleRouterContract>