@ximatai/muyun-web-app 0.26.12 → 0.26.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BusinessActivityLogView-UC4rH4Fn.js +16 -0
- package/dist/BusinessLogListDrawer-BtaXVJKz.js +564 -0
- package/dist/LoginAuditLogView-Cjrp8MKX.js +16 -0
- package/dist/{ModuleActionManagementView-BHEooZ5L.js → ModuleActionManagementView-Dkb35QXc.js} +139 -138
- package/dist/{ModuleGovernanceView-DB3TWlMy.js → ModuleGovernanceView-Dx43QvGf.js} +2878 -2748
- package/dist/RequestErrorLogView-WnGvMWiF.js +16 -0
- package/dist/RoleDetailWorkspaceView-DPDb_QOn.js +1397 -0
- package/dist/RuntimeLogView-BRl4ZDkU.js +330 -0
- package/dist/http-B0TC0pJB.js +157 -0
- package/dist/index.css +1 -1
- package/dist/index.js +505 -475
- package/dist/{moduleGovernanceWorkspaceView-C5pqJOEJ.js → moduleGovernanceWorkspaceView-4V_UW-Bt.js} +2 -2
- package/dist/platform-components-1cvOeHmo.js +17854 -0
- package/dist/platform-workbench-Cu14Xd9d.js +10299 -0
- package/dist/types/consumer/index.d.ts +7 -0
- package/dist/types/dynamic-page-runtime/ModulePageBusinessSession.d.ts +2208 -0
- package/dist/types/dynamic-page-runtime/ModulePageBusinessState.vue.d.ts +11 -0
- package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +20 -4
- package/dist/types/dynamic-page-runtime/ModulePageHostRuntime.vue.d.ts +4431 -0
- package/dist/types/dynamic-page-runtime/ModulePageHostSession.vue.d.ts +43 -0
- package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +2 -2
- package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +3 -0
- package/dist/types/dynamic-page-runtime/ModuleReferenceRecordDetailBrowser.vue.d.ts +42 -0
- package/dist/types/dynamic-page-runtime/RecordFormSurface.vue.d.ts +2 -2
- package/dist/types/dynamic-page-runtime/TenantScopeExplorer.vue.d.ts +21 -0
- package/dist/types/dynamic-page-runtime/composables/useModulePageActions.d.ts +1 -1
- package/dist/types/dynamic-page-runtime/composables/useModulePageDetailActionRuntime.d.ts +5 -0
- package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +1 -0
- package/dist/types/dynamic-page-runtime/formActionResult.d.ts +2 -0
- package/dist/types/dynamic-page-runtime/index.d.ts +2 -0
- package/dist/types/dynamic-page-runtime/inputValidationActionStatus.d.ts +20 -0
- package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +7 -3
- package/dist/types/dynamic-page-runtime/modulePageUnsavedState.d.ts +10 -0
- package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +1 -0
- package/dist/types/dynamic-page-runtime/recordMutationPayload.d.ts +3 -2
- package/dist/types/dynamic-page-runtime/referenceRecordProjection.d.ts +6 -0
- package/dist/types/dynamic-page-runtime/sessionViewBindings.d.ts +3 -0
- package/dist/types/dynamic-page-runtime/sourceReferencePickerConfig.d.ts +26 -0
- package/dist/types/dynamic-page-runtime/useModulePageSession.d.ts +1728 -0
- package/dist/types/dynamic-page-runtime/useTenantScopeController.d.ts +18 -0
- package/dist/types/platform-admin-runtime/WorkspaceViewDrawer.vue.d.ts +5 -0
- package/dist/types/platform-admin-runtime/role/roleScopeSelectionClient.d.ts +52 -0
- package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +5 -2
- package/dist/types/platform-components/DictionaryOptionDialog.vue.d.ts +37 -0
- package/dist/types/platform-components/DictionaryOptionDialogChoiceList.vue.d.ts +21 -0
- package/dist/types/platform-components/DictionaryPicker.vue.d.ts +47 -0
- package/dist/types/platform-components/DictionaryRadioGroup.vue.d.ts +20 -0
- package/dist/types/platform-components/EmployeePicker.vue.d.ts +40 -0
- package/dist/types/platform-components/FileTransferUploader.vue.d.ts +1 -1
- package/dist/types/platform-components/ObjectPickerInput.vue.d.ts +34 -0
- package/dist/types/platform-components/QueryCriteriaComposer.vue.d.ts +29 -0
- package/dist/types/platform-components/QueryCriteriaGroupEditor.vue.d.ts +36 -0
- package/dist/types/platform-components/QueryValueEditor.vue.d.ts +33 -0
- package/dist/types/platform-components/ReadonlyReferenceValue.vue.d.ts +11 -0
- package/dist/types/platform-components/RecordContentSectionHeading.vue.d.ts +4 -2
- package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +8 -3
- package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +7 -3
- package/dist/types/platform-components/RecordDetailFields.vue.d.ts +3 -5
- package/dist/types/platform-components/RecordFormFields.vue.d.ts +5 -5
- package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +11 -3
- package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +2 -2
- package/dist/types/platform-components/RecordPicker.vue.d.ts +2 -2
- package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +18 -4
- package/dist/types/platform-components/RecordQueryListSurface.vue.d.ts +20 -0
- package/dist/types/platform-components/ReferencePicker.vue.d.ts +47 -0
- package/dist/types/platform-components/ReferenceRecordDetailBrowser.vue.d.ts +55 -0
- package/dist/types/platform-components/ScopedTreePicker.vue.d.ts +31 -0
- package/dist/types/platform-components/UserPicker.vue.d.ts +47 -0
- package/dist/types/platform-components/dictionaryOptionDialogModel.d.ts +23 -0
- package/dist/types/platform-components/employeePickerModel.d.ts +19 -0
- package/dist/types/platform-components/identityPickerModel.d.ts +18 -0
- package/dist/types/platform-components/index.d.ts +28 -1
- package/dist/types/platform-components/optionFieldOptionCache.d.ts +1 -1
- package/dist/types/platform-components/queryCriteriaDraft.d.ts +24 -0
- package/dist/types/platform-components/queryReferencePickerProvider.d.ts +19 -0
- package/dist/types/platform-components/readonlyReferenceDisplay.d.ts +19 -0
- package/dist/types/platform-components/recordEditorSessionState.d.ts +11 -4
- package/dist/types/platform-components/recordFormFieldModel.d.ts +28 -2
- package/dist/types/platform-components/recordQueryListColumnModel.d.ts +3 -1
- package/dist/types/platform-components/referencePickerModel.d.ts +103 -0
- package/dist/types/platform-components/referencePickerReadError.d.ts +24 -0
- package/dist/types/platform-components/referenceRecordDetailBrowser.d.ts +48 -0
- package/dist/types/platform-components/scopedTreePickerModel.d.ts +46 -0
- package/dist/types/platform-components/sourceReferencePickerProvider.d.ts +26 -0
- package/dist/types/platform-components/staticCrudManagementState.d.ts +7 -6
- package/dist/types/platform-components/userPickerModel.d.ts +45 -0
- package/dist/types/platform-components/userReferencePicker.d.ts +17 -0
- package/dist/types/platform-workbench/useWorkspaceViewUnsavedState.d.ts +1 -1
- package/dist/types/platform-workbench/workspaceViewHost.d.ts +1 -1
- package/dist/types/platform-workbench/workspaceViewUnsavedState.d.ts +3 -1
- package/dist/types/views/BusinessActivityLogView.vue.d.ts +3 -0
- package/dist/types/views/BusinessLogListDrawer.vue.d.ts +9 -0
- package/dist/types/views/LoginAuditLogView.vue.d.ts +3 -0
- package/dist/types/views/RequestErrorLogView.vue.d.ts +3 -0
- package/dist/types/views/RuntimeLogView.vue.d.ts +3 -0
- package/dist/types/views/businessLogClient.d.ts +85 -0
- package/dist/types/views/dictionaryRadioEligibility.d.ts +18 -0
- package/dist/types/views/dictionaryRadioFactRequestEpoch.d.ts +10 -0
- package/dist/types/views/metadataModelEditSession.d.ts +10 -1
- package/dist/types/views/pageCompositionDraftState.d.ts +29 -0
- package/dist/types/views/roleDetailWorkspaceSession.d.ts +1 -0
- package/dist/types/views/roleGrantClient.d.ts +0 -1
- package/dist/types/views/runtimeLogClient.d.ts +12 -0
- package/dist/types/views/runtimeLogSse.d.ts +13 -0
- package/dist/types/vue-ui-antdv/components/UiDataTable.vue.d.ts +15 -0
- package/dist/types/vue-ui-antdv/components/UiSearchInput.vue.d.ts +16 -2
- package/dist/types/vue-ui-antdv/components/UiSelect.vue.d.ts +23 -1
- package/dist/types/vue-ui-antdv/components/UiSidePanel.vue.d.ts +9 -2
- package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +1 -1
- package/dist/types/vue-ui-antdv/components/UiTreeSelect.vue.d.ts +23 -1
- package/dist/types/vue-ui-antdv/drawerDismissal.d.ts +18 -0
- package/dist/types/vue-ui-antdv/drawerWidth.d.ts +22 -0
- package/dist/types/vue-ui-antdv/index.d.ts +4 -0
- package/dist/types/web-contracts/index.d.ts +66 -6
- package/dist/types/web-core/http.d.ts +2 -0
- package/dist/types/web-core/module/moduleContext.d.ts +15 -2
- package/dist/types/web-core/module/runtimeContext.d.ts +3 -2
- package/dist/types/web-core/module/staticModuleClient.d.ts +5 -1
- package/dist/{workspaceViews-DI_1vYX9.js → workspaceViews-CCg6V0pr.js} +1245 -1140
- package/package.json +1 -1
- package/dist/RoleDetailWorkspaceView-D6X7pAj5.js +0 -1379
- package/dist/platform-workbench-DJj42YQP.js +0 -22911
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
1
2
|
import { type WebDataChange } from '../web-contracts/index';
|
|
3
|
+
/**
|
|
4
|
+
* Produces a stable value snapshot for a record draft. Editor sessions use it
|
|
5
|
+
* as a local baseline: returning every edited field to its starting value is
|
|
6
|
+
* not an unsaved change.
|
|
7
|
+
*/
|
|
8
|
+
export declare function recordDraftFingerprint(value: unknown): string;
|
|
2
9
|
export interface RecordEditorSessionOptions<TRecord, TMode extends string> {
|
|
3
10
|
viewMode: TMode;
|
|
4
11
|
createMode: TMode;
|
|
@@ -18,12 +25,12 @@ export interface RecordExternalChangeOptions {
|
|
|
18
25
|
changeTypes?: string[];
|
|
19
26
|
}
|
|
20
27
|
export declare function createRecordEditorSessionState<TRecord, TMode extends string>(options: RecordEditorSessionOptions<TRecord, TMode>): {
|
|
21
|
-
selected:
|
|
22
|
-
draft:
|
|
23
|
-
mode:
|
|
28
|
+
selected: Ref<TRecord | undefined, TRecord | undefined>;
|
|
29
|
+
draft: Ref<TRecord, TRecord>;
|
|
30
|
+
mode: Ref<TMode, TMode>;
|
|
24
31
|
readonly: import("vue").ComputedRef<boolean>;
|
|
25
32
|
externallyChanged: import("vue").ComputedRef<boolean>;
|
|
26
|
-
externalChangedRecordId:
|
|
33
|
+
externalChangedRecordId: Ref<string | undefined, string | undefined>;
|
|
27
34
|
select: (record: TRecord) => void;
|
|
28
35
|
replaceSelected: (record: TRecord | undefined) => void;
|
|
29
36
|
clearSelection: () => void;
|
|
@@ -3,6 +3,8 @@ import type { ModuleContext } from '../web-core/index';
|
|
|
3
3
|
import type { PickerConstraint, RecordPickerRecord } from './recordPickerConstraints';
|
|
4
4
|
import type { WebTreeNode } from '../web-contracts/index';
|
|
5
5
|
import type { RecordPickerMode } from './recordPickerModel';
|
|
6
|
+
import type { ScopedTreePickerProvider } from './scopedTreePickerModel';
|
|
7
|
+
import type { ReferencePickerColumn, ReferencePickerProvider } from './referencePickerModel';
|
|
6
8
|
export type RecordFormFieldDescriptor = (ViewFieldDefinition | ResolvedViewFieldDescriptor) & {
|
|
7
9
|
/** Optional during the protocol migration; resolved descriptors take precedence over legacy uiType. */
|
|
8
10
|
fieldControl?: ResolvedFieldControlDescriptor;
|
|
@@ -36,7 +38,9 @@ export type JsonValue = null | boolean | number | string | JsonValue[] | {
|
|
|
36
38
|
};
|
|
37
39
|
/** A business boolean does not inherit the lifecycle field's implicit enabled default. */
|
|
38
40
|
export type RecordBooleanStatusValue = boolean | undefined;
|
|
39
|
-
export type RecordFormFieldControlType = 'input' | 'numberInput' | 'dateInput' | 'dateTimeInput' | 'textarea' | 'colorPicker' | 'select' | 'enabledStatus' | 'booleanStatus' | 'switch' | 'recordPicker' | 'recordMultiPicker' | 'fileTransfer' | 'imageFileTransfer' | 'unsupported';
|
|
41
|
+
export type RecordFormFieldControlType = 'input' | 'numberInput' | 'dateInput' | 'dateTimeInput' | 'textarea' | 'colorPicker' | 'select' | 'enabledStatus' | 'booleanStatus' | 'switch' | 'recordPicker' | 'recordMultiPicker' | 'dictionaryPicker' | 'dictionaryRadioGroup' | 'fileTransfer' | 'imageFileTransfer' | 'unsupported';
|
|
42
|
+
/** The only source-field reference presentations implemented by the common picker. */
|
|
43
|
+
export type RecordFormReferencePickerPresentation = 'dropdown' | 'dialog';
|
|
40
44
|
export interface RecordFieldRenderer {
|
|
41
45
|
rendererType: string;
|
|
42
46
|
controlType: Exclude<RecordFormFieldControlType, 'unsupported'>;
|
|
@@ -60,10 +64,14 @@ export interface RecordFormFieldFallback {
|
|
|
60
64
|
}
|
|
61
65
|
export interface RecordFormFieldPickerConfig {
|
|
62
66
|
context: ModuleContext<RecordPickerRecord>;
|
|
67
|
+
/** Source-authorized, paged reference delivery for the common picker. */
|
|
68
|
+
provider?: ReferencePickerProvider;
|
|
69
|
+
/** Candidate columns are presentation only; identity and authorization stay with the provider. */
|
|
70
|
+
columns?: readonly ReferencePickerColumn[];
|
|
63
71
|
loadOptions?: (keyword: string) => Promise<RecordPickerRecord[]>;
|
|
64
72
|
loadTree?: () => Promise<WebTreeNode<RecordPickerRecord>[]>;
|
|
65
73
|
resolveOptions?: (values: string[]) => Promise<RecordPickerRecord[]>;
|
|
66
|
-
reloadKey?: number;
|
|
74
|
+
reloadKey?: string | number;
|
|
67
75
|
mode?: RecordPickerMode;
|
|
68
76
|
placeholder?: string;
|
|
69
77
|
allowClear?: boolean;
|
|
@@ -71,6 +79,17 @@ export interface RecordFormFieldPickerConfig {
|
|
|
71
79
|
titleOf?: (record: RecordPickerRecord) => string;
|
|
72
80
|
descriptionOf?: (record: RecordPickerRecord) => string | undefined;
|
|
73
81
|
filterOption?: (record: RecordPickerRecord, keyword: string) => boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Optional expanded tree navigation for a reference that keeps its ordinary compact picker.
|
|
84
|
+
* The host owns whether its declared effective scope is ready; this generic form model does
|
|
85
|
+
* not infer tenant or organization rules from field names.
|
|
86
|
+
*/
|
|
87
|
+
scopedTree?: {
|
|
88
|
+
title?: string;
|
|
89
|
+
disabled?: boolean;
|
|
90
|
+
unavailableMessage?: string;
|
|
91
|
+
provider: ScopedTreePickerProvider;
|
|
92
|
+
};
|
|
74
93
|
}
|
|
75
94
|
export interface RecordFormFieldState {
|
|
76
95
|
fieldName: string;
|
|
@@ -93,6 +112,13 @@ export interface RecordFormFieldState {
|
|
|
93
112
|
optionTitleField?: string;
|
|
94
113
|
optionItems?: import('../web-contracts/index').OptionItemDescriptor[];
|
|
95
114
|
referenceTitleField?: string;
|
|
115
|
+
/** The compiled reference contract remains available to read-only detail and list renderers. */
|
|
116
|
+
reference?: ResolvedReferenceFieldDescriptor;
|
|
117
|
+
/**
|
|
118
|
+
* Source-neutral presentation resolved from the field control. It is intentionally separate
|
|
119
|
+
* from the provider: the descriptor chooses presentation while the host owns transport.
|
|
120
|
+
*/
|
|
121
|
+
referencePickerPresentation?: RecordFormReferencePickerPresentation;
|
|
96
122
|
/** Title for the standard TreeAbility root sentinel when this field is a tree parent reference. */
|
|
97
123
|
treeRootTitle?: string;
|
|
98
124
|
fileReference?: ResolvedFileReferenceFieldDescriptor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OptionItemDescriptor, QuerySchemaField, ResolvedViewDescriptor, ResolvedViewFieldDescriptor } from '../web-contracts/index';
|
|
1
|
+
import type { OptionItemDescriptor, QuerySchemaField, ResolvedViewDescriptor, ResolvedViewFieldDescriptor, ResolvedReferenceFieldDescriptor } from '../web-contracts/index';
|
|
2
2
|
import type { Component } from 'vue';
|
|
3
3
|
export type QueryListRecord = Record<string, unknown> & {
|
|
4
4
|
id?: string;
|
|
@@ -18,6 +18,8 @@ export interface RecordQueryListColumn {
|
|
|
18
18
|
width?: string;
|
|
19
19
|
align?: 'left' | 'center' | 'right';
|
|
20
20
|
titleField?: string;
|
|
21
|
+
/** Compiled reference facts for pure read-side title/summary rendering. */
|
|
22
|
+
reference?: ResolvedReferenceFieldDescriptor;
|
|
21
23
|
/** Only descriptor-declared option fields load a runtime option catalog. */
|
|
22
24
|
optionBinding?: boolean;
|
|
23
25
|
/** Dynamic child entity whose declared option binding owns this field. */
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-neutral candidate contract for records selected through an authorized
|
|
3
|
+
* reference source. IDs are the only persisted value; projections are display
|
|
4
|
+
* data and affectPatch remains an explicit, host-owned extension.
|
|
5
|
+
*/
|
|
6
|
+
export type ReferencePickerId = string;
|
|
7
|
+
/** Whether the compact entry still represents the persisted reference selection. */
|
|
8
|
+
export interface ReferencePickerValidity {
|
|
9
|
+
valid: boolean;
|
|
10
|
+
status: 'ready' | 'editing' | 'resolving' | 'unmatched' | 'error';
|
|
11
|
+
message?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ReferencePickerSourceIdentity {
|
|
14
|
+
targetModuleAlias: string;
|
|
15
|
+
source: {
|
|
16
|
+
kind: 'sourceField' | 'businessPurpose' | 'targetReference';
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
/** A source-controlled authorization/range revision when it is available. */
|
|
20
|
+
authorizationScope?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ReferencePickerCandidate {
|
|
23
|
+
id: ReferencePickerId;
|
|
24
|
+
title: string;
|
|
25
|
+
subtitle?: string;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
unavailable?: boolean;
|
|
28
|
+
projections?: Readonly<Record<string, unknown>>;
|
|
29
|
+
affectPatch?: Readonly<Record<string, unknown>>;
|
|
30
|
+
}
|
|
31
|
+
export interface ReferencePickerAxisSelection {
|
|
32
|
+
axisId: string;
|
|
33
|
+
itemId: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ReferencePickerBrowseScope {
|
|
36
|
+
selections: readonly ReferencePickerAxisSelection[];
|
|
37
|
+
}
|
|
38
|
+
export interface ReferencePickerNavigationItem {
|
|
39
|
+
id: string;
|
|
40
|
+
title: string;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** A declared browse axis. The picker clears dependent selections on an upstream change. */
|
|
44
|
+
export interface ReferencePickerNavigationAxis {
|
|
45
|
+
id: string;
|
|
46
|
+
title: string;
|
|
47
|
+
dependsOn?: readonly string[];
|
|
48
|
+
items: readonly ReferencePickerNavigationItem[];
|
|
49
|
+
}
|
|
50
|
+
export interface ReferencePickerPageRequest {
|
|
51
|
+
keyword: string;
|
|
52
|
+
pageNum: number;
|
|
53
|
+
pageSize: number;
|
|
54
|
+
scope: ReferencePickerBrowseScope;
|
|
55
|
+
}
|
|
56
|
+
export interface ReferencePickerPage<TCandidate extends ReferencePickerCandidate = ReferencePickerCandidate> {
|
|
57
|
+
records: TCandidate[];
|
|
58
|
+
total: number;
|
|
59
|
+
navigation?: readonly ReferencePickerNavigationAxis[];
|
|
60
|
+
}
|
|
61
|
+
/** A complete, source-authorized browse tree. It is never synthesized from paged query results. */
|
|
62
|
+
export interface ReferencePickerTreeNode<TCandidate extends ReferencePickerCandidate = ReferencePickerCandidate> {
|
|
63
|
+
record: TCandidate;
|
|
64
|
+
children?: ReferencePickerTreeNode<TCandidate>[];
|
|
65
|
+
}
|
|
66
|
+
export interface ReferencePickerProvider<TCandidate extends ReferencePickerCandidate = ReferencePickerCandidate> {
|
|
67
|
+
identity: ReferencePickerSourceIdentity;
|
|
68
|
+
searchPage(request: ReferencePickerPageRequest): Promise<ReferencePickerPage<TCandidate>>;
|
|
69
|
+
/**
|
|
70
|
+
* Reads the complete tree under the source's authorization scope. Dialog browse uses this only
|
|
71
|
+
* without a keyword; keyword search remains server-paged through searchPage.
|
|
72
|
+
*/
|
|
73
|
+
loadTree?: (request: {
|
|
74
|
+
scope: ReferencePickerBrowseScope;
|
|
75
|
+
}) => Promise<ReferencePickerTreeNode<TCandidate>[]>;
|
|
76
|
+
/** Resolves persisted IDs under the source's authorized historical-display scope. */
|
|
77
|
+
resolve(ids: ReferencePickerId[]): Promise<TCandidate[]>;
|
|
78
|
+
}
|
|
79
|
+
export interface ReferencePickerColumn {
|
|
80
|
+
key: string;
|
|
81
|
+
title: string;
|
|
82
|
+
width?: number;
|
|
83
|
+
}
|
|
84
|
+
/** Compiled page/query configuration for a standard reference interaction. */
|
|
85
|
+
export interface ReferencePickerConfig {
|
|
86
|
+
provider: ReferencePickerProvider;
|
|
87
|
+
mode?: 'dialog' | 'dropdown';
|
|
88
|
+
columns?: readonly ReferencePickerColumn[];
|
|
89
|
+
title?: string;
|
|
90
|
+
placeholder?: string;
|
|
91
|
+
searchPlaceholder?: string;
|
|
92
|
+
maxSelection?: number;
|
|
93
|
+
reloadKey?: string | number;
|
|
94
|
+
}
|
|
95
|
+
export interface ReferencePickerSelectionSummary {
|
|
96
|
+
id: ReferencePickerId;
|
|
97
|
+
title: string;
|
|
98
|
+
subtitle?: string;
|
|
99
|
+
unavailable?: boolean;
|
|
100
|
+
}
|
|
101
|
+
export declare function normalizeReferencePickerIds(value: ReferencePickerId | readonly ReferencePickerId[] | undefined, multiple: boolean): ReferencePickerId[];
|
|
102
|
+
export declare function referencePickerValue(ids: readonly ReferencePickerId[], multiple: boolean): ReferencePickerId | ReferencePickerId[] | undefined;
|
|
103
|
+
export declare function referencePickerSummary(candidate: ReferencePickerCandidate): ReferencePickerSelectionSummary;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AppError } from '../web-core/index';
|
|
2
|
+
export type ReferencePickerReadErrorKind = 'accessDenied' | 'missingDependencies' | 'unsupportedConfiguration' | 'temporaryFailure';
|
|
3
|
+
/**
|
|
4
|
+
* The picker only classifies facts carried by AppError or facts its source can
|
|
5
|
+
* prove locally. It deliberately never derives a category from an error message.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ReferencePickerReadError extends AppError {
|
|
8
|
+
readonly kind: ReferencePickerReadErrorKind;
|
|
9
|
+
readonly retryable: boolean;
|
|
10
|
+
readonly missingDependencyFields: readonly string[];
|
|
11
|
+
readonly original: AppError;
|
|
12
|
+
constructor(kind: ReferencePickerReadErrorKind, message: string, options: {
|
|
13
|
+
retryable: boolean;
|
|
14
|
+
missingDependencyFields?: readonly string[];
|
|
15
|
+
original?: AppError;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns undefined for 401 so the request client's authentication lifecycle
|
|
20
|
+
* remains the sole owner of login recovery and redirect behavior.
|
|
21
|
+
*/
|
|
22
|
+
export declare function referencePickerReadErrorOf(cause: unknown, fallbackMessage: string): ReferencePickerReadError | undefined;
|
|
23
|
+
export declare function missingReferencePickerDependencies(sourceFields: readonly string[]): ReferencePickerReadError;
|
|
24
|
+
export declare function unsupportedReferencePickerConfiguration(message: string): ReferencePickerReadError;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type InjectionKey } from 'vue';
|
|
2
|
+
import { type HttpClient, type ModuleContext } from '../web-core/index';
|
|
3
|
+
import type { QueryListRecord } from './recordQueryListColumnModel';
|
|
4
|
+
import { type RecordFormFieldDescriptor } from './recordFormFieldModel';
|
|
5
|
+
export type ActiveReferenceRecord = {
|
|
6
|
+
targetModuleAlias: string;
|
|
7
|
+
recordId: string;
|
|
8
|
+
record?: QueryListRecord;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
/** A record-only editor owns an in-flight target mutation. */
|
|
11
|
+
busy?: boolean;
|
|
12
|
+
failed: boolean;
|
|
13
|
+
failureKind?: 'notFound' | 'temporary';
|
|
14
|
+
};
|
|
15
|
+
export type ReferenceRecordDetailMutation = {
|
|
16
|
+
targetModuleAlias: string;
|
|
17
|
+
recordId: string;
|
|
18
|
+
type: 'saved' | 'deleted' | 'unavailable';
|
|
19
|
+
record?: QueryListRecord;
|
|
20
|
+
};
|
|
21
|
+
export interface ReferenceRecordDetailBrowser {
|
|
22
|
+
revision: {
|
|
23
|
+
value: number;
|
|
24
|
+
};
|
|
25
|
+
active: {
|
|
26
|
+
value: ActiveReferenceRecord | undefined;
|
|
27
|
+
};
|
|
28
|
+
activeContext: {
|
|
29
|
+
value: ModuleContext<QueryListRecord> | undefined;
|
|
30
|
+
};
|
|
31
|
+
fields: {
|
|
32
|
+
value: Map<string, RecordFormFieldDescriptor>;
|
|
33
|
+
};
|
|
34
|
+
title: {
|
|
35
|
+
value: string;
|
|
36
|
+
};
|
|
37
|
+
canBrowse(targetModuleAlias: string, recordId: string): boolean;
|
|
38
|
+
open(targetModuleAlias: string, recordId: string): void;
|
|
39
|
+
setBusy(targetModuleAlias: string, recordId: string, busy: boolean): void;
|
|
40
|
+
reportMutation(mutation: ReferenceRecordDetailMutation): void;
|
|
41
|
+
close(): void;
|
|
42
|
+
/** Component teardown bypasses the user-facing busy close gate. */
|
|
43
|
+
dispose(): void;
|
|
44
|
+
}
|
|
45
|
+
export declare const referenceRecordDetailBrowserKey: InjectionKey<ReferenceRecordDetailBrowser | undefined>;
|
|
46
|
+
export declare function createReferenceRecordDetailBrowser(http: HttpClient): ReferenceRecordDetailBrowser;
|
|
47
|
+
export declare function provideReferenceRecordDetailBrowser(browser: ReferenceRecordDetailBrowser): void;
|
|
48
|
+
export declare function useReferenceRecordDetailBrowser(): ReferenceRecordDetailBrowser | undefined;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An authorized, source-owned record projection for a lazily loaded tree selector.
|
|
3
|
+
* The component deliberately does not infer a parent, tenant, or module from this shape.
|
|
4
|
+
*/
|
|
5
|
+
export interface ScopedTreePickerCandidate {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
/** A provider may return a path, code, or scope summary to disambiguate equal titles. */
|
|
9
|
+
subtitle?: string;
|
|
10
|
+
/** False keeps the item expandable and asks the provider for children when it is expanded. */
|
|
11
|
+
isLeaf?: boolean;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
unavailable?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ScopedTreePickerRootRequest {
|
|
16
|
+
/** Provider-defined search text. An empty string requests the current scope roots. */
|
|
17
|
+
keyword: string;
|
|
18
|
+
signal: AbortSignal;
|
|
19
|
+
}
|
|
20
|
+
export interface ScopedTreePickerChildrenRequest extends ScopedTreePickerRootRequest {
|
|
21
|
+
parent: ScopedTreePickerCandidate;
|
|
22
|
+
/** Opaque continuation supplied by an earlier child response when the provider supports paging. */
|
|
23
|
+
cursor?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ScopedTreePickerPage {
|
|
26
|
+
records: ScopedTreePickerCandidate[];
|
|
27
|
+
hasMore?: boolean;
|
|
28
|
+
nextCursor?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A source-owned delivery boundary. The caller may use a static reference resolver, a dedicated
|
|
32
|
+
* candidate endpoint, or another authorized source; this component has no module-path knowledge.
|
|
33
|
+
*/
|
|
34
|
+
export interface ScopedTreePickerProvider {
|
|
35
|
+
loadRoot: (request: ScopedTreePickerRootRequest) => Promise<ScopedTreePickerPage>;
|
|
36
|
+
loadChildren: (request: ScopedTreePickerChildrenRequest) => Promise<ScopedTreePickerPage>;
|
|
37
|
+
/** Resolves persisted IDs through the same authorization and effective-scope rule. */
|
|
38
|
+
resolve: (ids: string[]) => Promise<ScopedTreePickerCandidate[]>;
|
|
39
|
+
}
|
|
40
|
+
export interface ScopedTreePickerConfig {
|
|
41
|
+
title?: string;
|
|
42
|
+
placeholder?: string;
|
|
43
|
+
searchPlaceholder?: string;
|
|
44
|
+
provider: ScopedTreePickerProvider;
|
|
45
|
+
}
|
|
46
|
+
export declare function scopedTreePickerValue(value: string | undefined): string | undefined;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ResolvedReferenceFieldDescriptor } from '../web-contracts/index';
|
|
2
|
+
import type { ReferenceResolveClient } from '../web-core/index';
|
|
3
|
+
import type { ReferencePickerProvider } from './referencePickerModel';
|
|
4
|
+
export interface SourceReferencePickerProviderOptions {
|
|
5
|
+
sourceModuleAlias: string;
|
|
6
|
+
fieldName: string;
|
|
7
|
+
reference: ResolvedReferenceFieldDescriptor;
|
|
8
|
+
/** Obtained at request time so a retained provider does not capture a replaced module context. */
|
|
9
|
+
resolver: () => ReferenceResolveClient;
|
|
10
|
+
/** Read at request time so a stable provider always uses the current draft. */
|
|
11
|
+
formValues: () => Record<string, unknown>;
|
|
12
|
+
source: () => {
|
|
13
|
+
recordId: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Adapts the source-field resolver to the neutral picker contract. It deliberately carries no
|
|
18
|
+
* target-module query fallback: the declaring source field remains the authority for candidate
|
|
19
|
+
* eligibility, projections and patches.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSourceReferencePickerProvider({ sourceModuleAlias, fieldName, reference, resolver, formValues, source, }: SourceReferencePickerProviderOptions): ReferencePickerProvider;
|
|
22
|
+
/**
|
|
23
|
+
* Only source identity, persisted record scope and declared candidate dependencies invalidate a
|
|
24
|
+
* picker. This avoids resetting pagination or re-querying for unrelated form edits.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sourceReferencePickerReloadKey(sourceModuleAlias: string, fieldName: string, reference: ResolvedReferenceFieldDescriptor, record: Record<string, unknown> | undefined): string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
1
2
|
import { type ModuleContext } from '../web-core/index';
|
|
2
3
|
import type { UiConfirmOptions } from '../vue-ui-antdv/index';
|
|
3
4
|
import { type PlatformActionResultReactionHandler } from './platformActionResultFeedback';
|
|
@@ -41,12 +42,12 @@ export interface StaticCrudManagementOptions<TRecord extends StaticCrudRecord> {
|
|
|
41
42
|
actionResultReactionHandlers?: Record<string, PlatformActionResultReactionHandler | undefined>;
|
|
42
43
|
}
|
|
43
44
|
export declare function useFlatCrudManagementState<TRecord extends StaticCrudRecord>(options: StaticCrudManagementOptions<TRecord>): {
|
|
44
|
-
selected:
|
|
45
|
-
draft:
|
|
46
|
-
mode:
|
|
47
|
-
reloadKey:
|
|
48
|
-
saving:
|
|
49
|
-
actionError:
|
|
45
|
+
selected: Ref<TRecord | undefined, TRecord | undefined>;
|
|
46
|
+
draft: Ref<TRecord, TRecord>;
|
|
47
|
+
mode: Ref<StaticCrudCardMode, StaticCrudCardMode>;
|
|
48
|
+
reloadKey: Ref<number, number>;
|
|
49
|
+
saving: Ref<boolean, boolean>;
|
|
50
|
+
actionError: Ref<string | undefined, string | undefined>;
|
|
50
51
|
cardTitle: import("vue").ComputedRef<string>;
|
|
51
52
|
readonly: import("vue").ComputedRef<boolean>;
|
|
52
53
|
canCreate: import("vue").ComputedRef<boolean>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { IdentityPickerCandidate, IdentityPickerResolver } from './identityPickerModel';
|
|
2
|
+
/** A user selection always persists an IAM user account ID, never an employee ID. */
|
|
3
|
+
export type UserAccountId = string;
|
|
4
|
+
/** An authorized user-account projection returned by the selection provider. */
|
|
5
|
+
export interface UserPickerCandidate extends IdentityPickerCandidate<UserAccountId> {
|
|
6
|
+
/** Account snapshot or current account, as defined by the source. */
|
|
7
|
+
account?: string;
|
|
8
|
+
employeeName?: string;
|
|
9
|
+
organizationId?: string;
|
|
10
|
+
organizationName?: string;
|
|
11
|
+
departmentId?: string;
|
|
12
|
+
departmentName?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UserPickerNavigationScope {
|
|
15
|
+
tenantId?: string;
|
|
16
|
+
organizationId?: string;
|
|
17
|
+
departmentId?: string;
|
|
18
|
+
}
|
|
19
|
+
/** A source-provided progressive browse axis. IDs remain source-owned and are never inferred by the picker. */
|
|
20
|
+
export interface UserPickerNavigationItem {
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
tenantId?: string;
|
|
24
|
+
/** Parent organization for a department item, when the source has that hierarchy. */
|
|
25
|
+
organizationId?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface UserPickerNavigation {
|
|
28
|
+
showTenantNavigation: boolean;
|
|
29
|
+
tenants: UserPickerNavigationItem[];
|
|
30
|
+
organizations: UserPickerNavigationItem[];
|
|
31
|
+
departments: UserPickerNavigationItem[];
|
|
32
|
+
}
|
|
33
|
+
export interface UserPickerPage {
|
|
34
|
+
records: UserPickerCandidate[];
|
|
35
|
+
total: number;
|
|
36
|
+
navigation?: UserPickerNavigation;
|
|
37
|
+
}
|
|
38
|
+
export interface UserPickerPageRequest {
|
|
39
|
+
keyword: string;
|
|
40
|
+
pageNum: number;
|
|
41
|
+
pageSize: number;
|
|
42
|
+
scope?: UserPickerNavigationScope;
|
|
43
|
+
}
|
|
44
|
+
export type UserPickerPageSearch = (request: UserPickerPageRequest) => Promise<UserPickerPage>;
|
|
45
|
+
export type UserPickerResolver = IdentityPickerResolver<UserAccountId>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReferencePickerCandidate, ReferencePickerColumn, ReferencePickerProvider, ReferencePickerSourceIdentity } from './referencePickerModel';
|
|
2
|
+
import type { UserPickerCandidate, UserPickerPageSearch, UserPickerResolver } from './userPickerModel';
|
|
3
|
+
/** Identity-specific presentation stays here; the common picker only consumes projections. */
|
|
4
|
+
export declare const userReferencePickerColumns: readonly ReferencePickerColumn[];
|
|
5
|
+
export interface UserReferencePickerConfig {
|
|
6
|
+
sourceIdentity: ReferencePickerSourceIdentity;
|
|
7
|
+
searchPage: UserPickerPageSearch;
|
|
8
|
+
resolveUsers: UserPickerResolver;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Maps the authorized IAM delivery into the source-neutral picker contract.
|
|
12
|
+
* It does not infer any tenant/organization/department relationship: old
|
|
13
|
+
* source-owned IDs are simply returned to the same source as typed axes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createUserReferencePickerProvider(config: UserReferencePickerConfig): ReferencePickerProvider;
|
|
16
|
+
export declare function toReferenceCandidate(candidate: UserPickerCandidate): ReferencePickerCandidate;
|
|
17
|
+
export declare function toUserPickerCandidate(candidate: ReferencePickerCandidate): UserPickerCandidate;
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Lets a workspace panel declare unsaved local state without exposing or
|
|
3
3
|
* duplicating its draft in the workbench shell.
|
|
4
4
|
*/
|
|
5
|
-
export declare function useWorkspaceViewUnsavedState(source: string, isDirty: () => boolean): void;
|
|
5
|
+
export declare function useWorkspaceViewUnsavedState(source: string, isDirty: () => boolean, isBusy?: () => boolean): void;
|
|
@@ -6,7 +6,7 @@ export interface WorkspaceViewHost {
|
|
|
6
6
|
/** Replaces URL-restorable state without creating another workbench tab. */
|
|
7
7
|
replaceQuery(query: Record<string, RouteQueryValue | undefined>): void;
|
|
8
8
|
/** Registers a local draft signal used only when the owning workbench tab closes. */
|
|
9
|
-
registerUnsavedState(source: string, isDirty: () => boolean): () => void;
|
|
9
|
+
registerUnsavedState(source: string, isDirty: () => boolean, isBusy?: () => boolean): () => void;
|
|
10
10
|
dismiss(): void;
|
|
11
11
|
/** Closes the current independent workbench view. */
|
|
12
12
|
close(): void;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export declare function registerWorkspaceViewUnsavedState(pageKey: string, source: string, isDirty: () => boolean): () => void;
|
|
1
|
+
export declare function registerWorkspaceViewUnsavedState(pageKey: string, source: string, isDirty: () => boolean, isBusy?: () => boolean): () => void;
|
|
2
2
|
export declare function workspaceViewUnsavedStateSources(pageKey: string): string[];
|
|
3
|
+
/** Sources with an in-flight mutation cannot be destroyed until their work completes. */
|
|
4
|
+
export declare function workspaceViewBusyStateSources(pageKey: string): string[];
|
|
3
5
|
export declare function clearWorkspaceViewUnsavedState(pageKey: string): void;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type BusinessLogSurface } from './businessLogClient';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
surface: BusinessLogSurface;
|
|
4
|
+
moduleAlias: string;
|
|
5
|
+
title: string;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
8
|
+
declare const _default: typeof __VLS_export;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { HttpClient } from '../web-core/index';
|
|
2
|
+
import type { WebQueryRequest } from '../web-contracts/index';
|
|
3
|
+
export type BusinessLogSurface = 'activity' | 'request-error' | 'login';
|
|
4
|
+
export interface BusinessLogOperatorIdentity {
|
|
5
|
+
employeeName?: string;
|
|
6
|
+
username?: string;
|
|
7
|
+
organizationId?: string;
|
|
8
|
+
organizationName?: string;
|
|
9
|
+
departmentId?: string;
|
|
10
|
+
departmentName?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BusinessLogEventView {
|
|
13
|
+
eventId: string;
|
|
14
|
+
eventType: string;
|
|
15
|
+
occurredAt?: string;
|
|
16
|
+
capturedAt?: string;
|
|
17
|
+
traceId?: string;
|
|
18
|
+
tenantId?: string;
|
|
19
|
+
operatorId?: string;
|
|
20
|
+
operatorOrganizationId?: string;
|
|
21
|
+
operatorIdentity?: BusinessLogOperatorIdentity;
|
|
22
|
+
moduleAlias?: string;
|
|
23
|
+
actionCode?: string;
|
|
24
|
+
outcome?: string;
|
|
25
|
+
/** The authentication account, independent from the event's authenticated operator identity. */
|
|
26
|
+
loginAccount?: string;
|
|
27
|
+
summary?: string;
|
|
28
|
+
details?: Record<string, unknown>;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface BusinessLogStatisticItem {
|
|
32
|
+
key: string;
|
|
33
|
+
title: string;
|
|
34
|
+
count: number;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
}
|
|
37
|
+
export interface BusinessLogStatistics {
|
|
38
|
+
items: BusinessLogStatisticItem[];
|
|
39
|
+
complete?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface BusinessLogOperatorCandidate {
|
|
42
|
+
id: string;
|
|
43
|
+
title: string;
|
|
44
|
+
account?: string;
|
|
45
|
+
employeeName?: string;
|
|
46
|
+
organizationId?: string;
|
|
47
|
+
organizationName?: string;
|
|
48
|
+
departmentId?: string;
|
|
49
|
+
departmentName?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface BusinessLogOperatorNavigationItem {
|
|
52
|
+
id: string;
|
|
53
|
+
title: string;
|
|
54
|
+
tenantId?: string;
|
|
55
|
+
organizationId?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface BusinessLogOperatorNavigation {
|
|
58
|
+
showTenantNavigation: boolean;
|
|
59
|
+
tenants: BusinessLogOperatorNavigationItem[];
|
|
60
|
+
organizations: BusinessLogOperatorNavigationItem[];
|
|
61
|
+
departments: BusinessLogOperatorNavigationItem[];
|
|
62
|
+
}
|
|
63
|
+
export interface BusinessLogOperatorCandidateQuery {
|
|
64
|
+
keyword?: string;
|
|
65
|
+
pageNum?: number;
|
|
66
|
+
pageSize?: number;
|
|
67
|
+
selectedIds?: string[];
|
|
68
|
+
tenantId?: string;
|
|
69
|
+
organizationId?: string;
|
|
70
|
+
departmentId?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface BusinessLogOperatorCandidatePage {
|
|
73
|
+
records: BusinessLogOperatorCandidate[];
|
|
74
|
+
selectedRecords: BusinessLogOperatorCandidate[];
|
|
75
|
+
total: number;
|
|
76
|
+
navigation?: BusinessLogOperatorNavigation;
|
|
77
|
+
}
|
|
78
|
+
export interface BusinessLogClient {
|
|
79
|
+
detail(eventId: string): Promise<BusinessLogEventView>;
|
|
80
|
+
operatorCandidates(input: BusinessLogOperatorCandidateQuery): Promise<BusinessLogOperatorCandidatePage>;
|
|
81
|
+
actionStatistics?(request: WebQueryRequest): Promise<BusinessLogStatistics>;
|
|
82
|
+
pageAccessStatistics?(request: WebQueryRequest): Promise<BusinessLogStatistics>;
|
|
83
|
+
diagnostic?(eventId: string): Promise<Record<string, unknown>>;
|
|
84
|
+
}
|
|
85
|
+
export declare function createBusinessLogClient(http: HttpClient, surface: BusinessLogSurface): BusinessLogClient;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Facts loaded from the dictionary candidate endpoint for radio presentation preflight. */
|
|
2
|
+
export interface DictionaryRadioCandidateFacts {
|
|
3
|
+
enabledCandidateCount: number;
|
|
4
|
+
hasHierarchy: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface DictionaryRadioEligibilityInput {
|
|
7
|
+
optionSourceType?: string;
|
|
8
|
+
optionSelectionMode?: 'SINGLE' | 'MULTIPLE';
|
|
9
|
+
facts?: DictionaryRadioCandidateFacts;
|
|
10
|
+
loadError?: string;
|
|
11
|
+
maxOptions: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Radio is a presentation choice over a single, flat and small dictionary. Keep this decision
|
|
15
|
+
* independent from the composer view so selected-field hints, preview guards and publish guards
|
|
16
|
+
* all enforce the same rule.
|
|
17
|
+
*/
|
|
18
|
+
export declare function dictionaryRadioEligibilityIssue(input: DictionaryRadioEligibilityInput): string | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guards asynchronous candidate reads while a kept-alive composer reloads its metadata directory.
|
|
3
|
+
* A field name is stable across a dictionary rebind, so the directory generation—not the name—is
|
|
4
|
+
* the authority for whether an in-flight response may still update radio eligibility.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createDictionaryRadioFactRequestEpoch(): {
|
|
7
|
+
invalidate(): void;
|
|
8
|
+
capture(): number;
|
|
9
|
+
isCurrent(capturedGeneration: number): boolean;
|
|
10
|
+
};
|
|
@@ -9,7 +9,16 @@ export interface MetadataFieldChangeSetDraft {
|
|
|
9
9
|
/** JSON-facing command contract; projection mappings remain an ordered string array. */
|
|
10
10
|
property?: MetadataFieldPropertyChangeSetPayload;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* The editor uses stable upper-case cardinality labels, while the public HTTP contract for
|
|
14
|
+
* CodeTitleEnum writes their lower-case codes. Keep that translation at the change-set boundary
|
|
15
|
+
* rather than leaking transport values into the editor and form renderer.
|
|
16
|
+
*/
|
|
17
|
+
export type MetadataFieldPropertyChangeSetPayload = Omit<MetadataFieldPropertyDraft, 'dictionaryConfig'> & {
|
|
18
|
+
dictionaryConfig?: Omit<NonNullable<MetadataFieldPropertyDraft['dictionaryConfig']>, 'selectionMode'> & {
|
|
19
|
+
selectionMode?: 'single' | 'multiple';
|
|
20
|
+
};
|
|
21
|
+
};
|
|
13
22
|
export declare function toFieldPropertyChangeSetPayload(property: MetadataFieldPropertyDraft): MetadataFieldPropertyChangeSetPayload;
|
|
14
23
|
export interface MetadataRelationChangeSetProposal {
|
|
15
24
|
expectedMetadataVersion: number;
|