import type { AppFrontendRouteContract } from 'openxiangda-contracts/browser'; import { type ComponentType, type ReactNode } from 'react'; import type { ApplicationAuthenticationSurfaceContribution, ApplicationLoginSurfaceComponent, GeneratedApplicationAuthenticationSurface } from './authentication'; import type { ResourceFormDrawerState } from './components/resource/ResourceFormFrame'; import type { GeneratedResourceDefinition } from './components/resource/generated-resource-definition'; import type { GeneratedResourceRoutePaths } from './components/resource/resource-page-helpers'; import type { StandardUserSurfaceContributions } from './standard-user-surfaces'; declare const ADMIN_CONTRIBUTIONS_BRAND: unique symbol; export type AdminContributionAccess = Pick; export interface ApplicationRoutePageProps { route: Readonly; } export type ApplicationRoutePageComponent = ComponentType; export interface AdminOperationPageProps extends ApplicationRoutePageProps { } export type AdminOperationPageComponent = ComponentType; interface AdminResourceActionContext { resource: string; refresh(): Promise; } export interface AdminToolbarActionContext extends AdminResourceActionContext { selectedRecords: readonly Readonly>[]; } export interface AdminRowActionContext> extends AdminResourceActionContext { record: Readonly; } export interface AdminDetailActionContext> extends AdminRowActionContext { } interface AdminActionContribution extends AdminContributionAccess { code: string; label: string; order?: number; render(context: Context): ReactNode; } export type AdminToolbarActionContribution = AdminActionContribution & { requiresSelection?: boolean; }; export type AdminRowActionContribution> = AdminActionContribution>; export type AdminDetailActionContribution> = AdminActionContribution>; export interface AdminResourceContributions> { toolbar?: readonly AdminToolbarActionContribution[]; row?: readonly AdminRowActionContribution[]; detail?: readonly AdminDetailActionContribution[]; } export interface ApplicationRoutePageContribution { route: Readonly; component: ApplicationRoutePageComponent; } export interface AdminOperationPageContribution extends ApplicationRoutePageContribution { component: AdminOperationPageComponent; } export interface ResourcePageProps { definition: GeneratedResourceDefinition; paths: GeneratedResourceRoutePaths; mode: 'list' | 'create' | 'edit' | 'detail'; variant: 'desktop' | 'mobile'; recordId?: string; onDismiss?(): void; onSaved?(id: string): void; onEdit?(): void; drawerState?: ResourceFormDrawerState; embedded?: boolean; } export type ResourcePageComponent = ComponentType; export interface ResourceViewPageContributions { list?: ResourcePageComponent; detail?: ResourcePageComponent; form?: ResourcePageComponent; } export type ResourcePageContributions = Readonly>>>>; export interface OpenXiangdaApplicationContributions { readonly [ADMIN_CONTRIBUTIONS_BRAND]: true; routes: readonly ApplicationRoutePageContribution[]; resources: Readonly>>; resourcePages?: ResourcePageContributions; authentication: readonly ApplicationAuthenticationSurfaceContribution[]; standardUserSurfaces?: Readonly; } export interface OpenXiangdaAdminContributions extends OpenXiangdaApplicationContributions { routes: readonly AdminOperationPageContribution[]; } type RouteContracts = Readonly>>; type PagesFor = { readonly [Key in keyof Routes]: ApplicationRoutePageComponent; }; type AuthenticationSurfaceContracts = Readonly>>; type AuthenticationPagesFor = { readonly [Key in keyof Surfaces]: ApplicationLoginSurfaceComponent; }; export interface ApplicationContributionContracts { routes: Routes; authenticationSurfaces: Surfaces; } export interface DefineAdminContributionsInput { pages: PagesFor; resources?: Readonly>; resourcePages?: ResourcePageContributions; } export interface DefineApplicationContributionsInput extends DefineAdminContributionsInput { standardUserSurfaces?: StandardUserSurfaceContributions; } export interface DefineAuthenticatedApplicationContributionsInput extends DefineApplicationContributionsInput { authentication: AuthenticationPagesFor; } export declare function defineApplicationContributions(contracts: ApplicationContributionContracts, input: DefineAuthenticatedApplicationContributionsInput): OpenXiangdaApplicationContributions; export declare function defineApplicationContributions(routeContracts: Routes, input: DefineApplicationContributionsInput): OpenXiangdaApplicationContributions; export declare function defineAdminContributions(routeContracts: Routes, input: DefineAdminContributionsInput): OpenXiangdaAdminContributions; export declare function isAdminContributionAllowed(contribution: AdminContributionAccess, hasCapability: (capability: string) => boolean): boolean; export declare function isAdminRouteAllowed(contribution: AdminOperationPageContribution, allRoutes: readonly AdminOperationPageContribution[], hasCapability: (capability: string) => boolean): boolean; export declare function isApplicationRouteAllowed(contribution: ApplicationRoutePageContribution, allRoutes: readonly ApplicationRoutePageContribution[], hasCapability: (capability: string) => boolean): boolean; export declare function AdminContributionsProvider({ children, contributions, }: { children: ReactNode; contributions?: OpenXiangdaApplicationContributions; }): import("react/jsx-runtime").JSX.Element; export declare function useAdminContributions(): OpenXiangdaApplicationContributions; export declare function useAdminResourceContributions(resource: string): Readonly | undefined; /** Presentation extension only; the route still owns authorization. */ export declare function useResourcePageContributions(resource: string, view?: string): Readonly | undefined; export {}; //# sourceMappingURL=admin-contributions.d.ts.map