openxiangda 2.48.2 → 2.59.1
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/README.md +1 -0
- package/dist/browser/AuthoritativeSelector.d.ts +4 -2
- package/dist/browser/AuthoritativeSelector.d.ts.map +1 -1
- package/dist/browser/AuthoritativeSelector.js +42 -12
- package/dist/browser/AuthoritativeSelector.js.map +1 -1
- package/dist/browser/FilePreviewPage.d.ts.map +1 -1
- package/dist/browser/FilePreviewPage.js +4 -0
- package/dist/browser/FilePreviewPage.js.map +1 -1
- package/dist/browser/components/administration/RoleMembershipManager.d.ts.map +1 -1
- package/dist/browser/components/administration/RoleMembershipManager.js +5 -5
- package/dist/browser/components/administration/RoleMembershipManager.js.map +1 -1
- package/dist/browser/components/administration/scope-applicability.d.ts +3 -0
- package/dist/browser/components/administration/scope-applicability.d.ts.map +1 -0
- package/dist/browser/components/administration/scope-applicability.js +7 -0
- package/dist/browser/components/administration/scope-applicability.js.map +1 -0
- package/dist/browser/components/platform-fields/ConstrainedUserField.d.ts +16 -0
- package/dist/browser/components/platform-fields/ConstrainedUserField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/ConstrainedUserField.js +140 -0
- package/dist/browser/components/platform-fields/ConstrainedUserField.js.map +1 -0
- package/dist/browser/components/platform-fields/DateTimeField.d.ts +1 -1
- package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/DateTimeField.js +15 -8
- package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/ManagedMediaPlayer.d.ts +19 -0
- package/dist/browser/components/platform-fields/ManagedMediaPlayer.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/ManagedMediaPlayer.js +42 -0
- package/dist/browser/components/platform-fields/ManagedMediaPlayer.js.map +1 -0
- package/dist/browser/components/platform-fields/MobileDateTimeField.d.ts +1 -1
- package/dist/browser/components/platform-fields/MobileDateTimeField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileDateTimeField.js +5 -3
- package/dist/browser/components/platform-fields/MobileDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileSelection.d.ts +3 -1
- package/dist/browser/components/platform-fields/MobileSelection.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileSelection.js +2 -2
- package/dist/browser/components/platform-fields/MobileSelection.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js +2 -2
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +4 -2
- package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/ResourceReferenceField.js +3 -3
- package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.d.ts +11 -2
- package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.js +55 -24
- package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
- package/dist/browser/components/platform-fields/ZonedDateTimeField.js +2 -2
- package/dist/browser/components/platform-fields/ZonedDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/managed-media-read.d.ts +19 -0
- package/dist/browser/components/platform-fields/managed-media-read.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/managed-media-read.js +32 -0
- package/dist/browser/components/platform-fields/managed-media-read.js.map +1 -0
- package/dist/browser/components/platform-fields/reference-binding-change.d.ts +6 -0
- package/dist/browser/components/platform-fields/reference-binding-change.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/reference-binding-change.js +32 -0
- package/dist/browser/components/platform-fields/reference-binding-change.js.map +1 -0
- package/dist/browser/components/platform-fields/user-candidate-context.d.ts +54 -0
- package/dist/browser/components/platform-fields/user-candidate-context.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/user-candidate-context.js +70 -0
- package/dist/browser/components/platform-fields/user-candidate-context.js.map +1 -0
- package/dist/browser/components/platform-fields/zoned-date-time.d.ts +4 -0
- package/dist/browser/components/platform-fields/zoned-date-time.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/zoned-date-time.js +9 -1
- package/dist/browser/components/platform-fields/zoned-date-time.js.map +1 -1
- package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -1
- package/dist/browser/components/resource/GeneratedResourceCrud.js +28 -4
- package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -1
- package/dist/browser/components/resource/GeneratedResourceForm.js +3 -3
- package/dist/browser/components/resource/GeneratedResourceForm.js.map +1 -1
- package/dist/browser/components/resource/RecordDetailFrame.d.ts +3 -1
- package/dist/browser/components/resource/RecordDetailFrame.d.ts.map +1 -1
- package/dist/browser/components/resource/RecordDetailFrame.js +2 -2
- package/dist/browser/components/resource/RecordDetailFrame.js.map +1 -1
- package/dist/browser/components/resource/ResourceFormFrame.d.ts +3 -2
- package/dist/browser/components/resource/ResourceFormFrame.d.ts.map +1 -1
- package/dist/browser/components/resource/ResourceFormFrame.js +13 -2
- package/dist/browser/components/resource/ResourceFormFrame.js.map +1 -1
- package/dist/browser/components/resource/ResourceRecordComments.d.ts +13 -0
- package/dist/browser/components/resource/ResourceRecordComments.d.ts.map +1 -0
- package/dist/browser/components/resource/ResourceRecordComments.js +75 -0
- package/dist/browser/components/resource/ResourceRecordComments.js.map +1 -0
- package/dist/browser/components/resource/ResourceRecordDeletion.d.ts +7 -0
- package/dist/browser/components/resource/ResourceRecordDeletion.d.ts.map +1 -0
- package/dist/browser/components/resource/ResourceRecordDeletion.js +53 -0
- package/dist/browser/components/resource/ResourceRecordDeletion.js.map +1 -0
- package/dist/browser/components/resource/ResourceRecordPrintPreview.d.ts +16 -0
- package/dist/browser/components/resource/ResourceRecordPrintPreview.d.ts.map +1 -0
- package/dist/browser/components/resource/ResourceRecordPrintPreview.js +92 -0
- package/dist/browser/components/resource/ResourceRecordPrintPreview.js.map +1 -0
- package/dist/browser/components/resource/SurfaceFields.d.ts +12 -3
- package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
- package/dist/browser/components/resource/SurfaceFields.js +24 -8
- package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
- package/dist/browser/components/resource/generated-resource-definition.d.ts +13 -0
- package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -1
- package/dist/browser/components/resource/record-comment-session.d.ts +17 -0
- package/dist/browser/components/resource/record-comment-session.d.ts.map +1 -0
- package/dist/browser/components/resource/record-comment-session.js +64 -0
- package/dist/browser/components/resource/record-comment-session.js.map +1 -0
- package/dist/browser/components/resource/record-deletion-session.d.ts +19 -0
- package/dist/browser/components/resource/record-deletion-session.d.ts.map +1 -0
- package/dist/browser/components/resource/record-deletion-session.js +64 -0
- package/dist/browser/components/resource/record-deletion-session.js.map +1 -0
- package/dist/browser/components/resource/record-print-session.d.ts +12 -0
- package/dist/browser/components/resource/record-print-session.d.ts.map +1 -0
- package/dist/browser/components/resource/record-print-session.js +32 -0
- package/dist/browser/components/resource/record-print-session.js.map +1 -0
- package/dist/browser/components/resource/resource-field-selection.d.ts +2 -0
- package/dist/browser/components/resource/resource-field-selection.d.ts.map +1 -1
- package/dist/browser/components/resource/useResourceFormDrafts.d.ts.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts +28 -5
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.js +143 -51
- package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowDelegationManager.js +13 -8
- package/dist/browser/components/workflow/WorkflowDelegationManager.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowDiagram.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowDiagram.js +5 -2
- package/dist/browser/components/workflow/WorkflowDiagram.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowFlowCanvas.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowFlowCanvas.js +2 -1
- package/dist/browser/components/workflow/WorkflowFlowCanvas.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeCard.d.ts +1 -1
- package/dist/browser/components/workflow/WorkflowNodeCard.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeCard.js +7 -5
- package/dist/browser/components/workflow/WorkflowNodeCard.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js +14 -11
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowRecordEditor.js +1 -1
- package/dist/browser/components/workflow/WorkflowRecordEditor.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.d.ts +9 -0
- package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.d.ts.map +1 -0
- package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.js +50 -0
- package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.js.map +1 -0
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts +4 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.js +34 -10
- package/dist/browser/components/workflow/WorkflowTaskForm.js.map +1 -1
- package/dist/browser/components/workflow/standard-process-values.d.ts +10 -2
- package/dist/browser/components/workflow/standard-process-values.d.ts.map +1 -1
- package/dist/browser/components/workflow/standard-process-values.js +22 -1
- package/dist/browser/components/workflow/standard-process-values.js.map +1 -1
- package/dist/browser/components/workflow/workflow-flow-layout.d.ts.map +1 -1
- package/dist/browser/components/workflow/workflow-flow-layout.js +33 -3
- package/dist/browser/components/workflow/workflow-flow-layout.js.map +1 -1
- package/dist/browser/components/workflow/workflow-submission-form.d.ts +22 -0
- package/dist/browser/components/workflow/workflow-submission-form.d.ts.map +1 -0
- package/dist/browser/components/workflow/workflow-submission-form.js +64 -0
- package/dist/browser/components/workflow/workflow-submission-form.js.map +1 -0
- package/dist/browser/components/workflow/workflow-task-required-errors.d.ts +10 -0
- package/dist/browser/components/workflow/workflow-task-required-errors.d.ts.map +1 -0
- package/dist/browser/components/workflow/workflow-task-required-errors.js +28 -0
- package/dist/browser/components/workflow/workflow-task-required-errors.js.map +1 -0
- package/dist/browser/durable-command.d.ts.map +1 -1
- package/dist/browser/durable-command.js +7 -2
- package/dist/browser/durable-command.js.map +1 -1
- package/dist/browser/managed-read-recovery.d.ts +2 -0
- package/dist/browser/managed-read-recovery.d.ts.map +1 -1
- package/dist/browser/managed-read-recovery.js +6 -1
- package/dist/browser/managed-read-recovery.js.map +1 -1
- package/dist/browser/platform-client.d.ts +37 -1
- package/dist/browser/platform-client.d.ts.map +1 -1
- package/dist/browser/platform-client.js +199 -6
- package/dist/browser/platform-client.js.map +1 -1
- package/dist/browser/record-comments.css +14 -0
- package/dist/browser/record-deletion.css +11 -0
- package/dist/browser/record-print.css +31 -0
- package/dist/browser/runtime-authorization-recovery.d.ts.map +1 -1
- package/dist/browser/runtime-authorization-recovery.js +34 -9
- package/dist/browser/runtime-authorization-recovery.js.map +1 -1
- package/dist/browser/runtime.d.ts +3 -1
- package/dist/browser/runtime.d.ts.map +1 -1
- package/dist/browser/runtime.js.map +1 -1
- package/dist/browser/styles.css +30 -0
- package/dist/browser/workflow-operation-input.d.ts +15 -0
- package/dist/browser/workflow-operation-input.d.ts.map +1 -0
- package/dist/browser/workflow-operation-input.js +64 -0
- package/dist/browser/workflow-operation-input.js.map +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/core.d.ts +6 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -1
- package/dist/core.js.map +1 -1
- package/dist/expressions.d.ts +4 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +3 -0
- package/dist/expressions.js.map +1 -0
- package/dist/field-kit.d.ts +3 -0
- package/dist/field-kit.d.ts.map +1 -1
- package/dist/field-kit.js +3 -0
- package/dist/field-kit.js.map +1 -1
- package/dist/nest.d.ts +1 -1
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js.map +1 -1
- package/dist/react.d.ts +6 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +5 -1
- package/dist/react.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/documentation/administration.md +40 -1
- package/documentation/backend.md +189 -3
- package/documentation/data-authz.md +72 -2
- package/documentation/declarations-cheatsheet.md +11 -1
- package/documentation/development.md +7 -0
- package/documentation/field-components.md +80 -0
- package/documentation/frontend.md +8 -0
- package/documentation/getting-started.md +60 -7
- package/documentation/managed-concurrency-frontend.md +10 -4
- package/documentation/manifest.json +12 -12
- package/documentation/testing.md +17 -0
- package/documentation/workflow-events.md +403 -9
- package/package.json +32 -20
- package/releases/2.51.0.json +32 -0
- package/releases/2.54.4.json +30 -0
- package/releases/2.54.6.json +30 -0
- package/releases/2.55.0.json +34 -0
- package/releases/2.55.1.json +32 -0
- package/releases/2.55.5.json +30 -0
- package/releases/2.55.6.json +32 -0
- package/releases/2.57.1.json +31 -0
- package/releases/2.58.0.json +37 -0
- package/releases/2.58.1.json +31 -0
- package/releases/2.59.0.json +36 -0
- package/releases/2.59.1.json +37 -0
- package/skills/manifest.json +1 -1
- package/skills/openxiangda-v2/SKILL.md +4 -4
- package/skills/openxiangda-v2/references/administration.md +40 -1
- package/skills/openxiangda-v2/references/backend.md +189 -3
- package/skills/openxiangda-v2/references/data-authz.md +72 -2
- package/skills/openxiangda-v2/references/declarations-cheatsheet.md +11 -1
- package/skills/openxiangda-v2/references/development.md +7 -0
- package/skills/openxiangda-v2/references/field-components.md +80 -0
- package/skills/openxiangda-v2/references/frontend.md +8 -0
- package/skills/openxiangda-v2/references/getting-started.md +60 -7
- package/skills/openxiangda-v2/references/managed-concurrency-frontend.md +10 -4
- package/skills/openxiangda-v2/references/testing.md +17 -0
- package/skills/openxiangda-v2/references/workflow-events.md +403 -9
- package/releases/2.48.1.json +0 -30
- package/releases/2.48.2.json +0 -29
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** One mounted player owns one transient read. Cancellation prevents late
|
|
2
|
+
* content from creating a URL; every created URL has exactly one disposer. */
|
|
3
|
+
export function startManagedMediaRead(deps) {
|
|
4
|
+
let active = true, url = '';
|
|
5
|
+
const completion = (async () => {
|
|
6
|
+
try {
|
|
7
|
+
const preview = await deps.preview();
|
|
8
|
+
if (!active)
|
|
9
|
+
return;
|
|
10
|
+
if (!preview.canPreview || preview.renderMode !== 'inline' || !['video', 'audio'].includes(preview.previewType))
|
|
11
|
+
throw new Error(preview.unsupportedReason || '当前文件无法播放,请使用附件下载');
|
|
12
|
+
if (!Number.isSafeInteger(preview.file.size) || preview.file.size < 1 || preview.file.size > deps.maxBytes)
|
|
13
|
+
throw new Error('媒体超出当前播放器容量,请下载后播放');
|
|
14
|
+
const blob = await deps.content();
|
|
15
|
+
if (!active)
|
|
16
|
+
return;
|
|
17
|
+
if (blob.size !== preview.file.size)
|
|
18
|
+
throw new Error('媒体内容与平台文件大小不一致,请重新读取');
|
|
19
|
+
url = deps.createUrl(blob);
|
|
20
|
+
deps.ready({ src: url, preview });
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (active)
|
|
24
|
+
deps.failed(error);
|
|
25
|
+
}
|
|
26
|
+
})();
|
|
27
|
+
return { completion, dispose() { active = false; if (url) {
|
|
28
|
+
deps.revokeUrl(url);
|
|
29
|
+
url = '';
|
|
30
|
+
} } };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=managed-media-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-media-read.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/managed-media-read.ts"],"names":[],"mappings":"AAEA;8EAC8E;AAC9E,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACC,IAAI,MAAM,GAAC,IAAI,EAAC,GAAG,GAAC,EAAE,CAAC;IACvB,MAAM,UAAU,GAAC,CAAC,KAAK,IAAE,EAAE;QACzB,IAAG,CAAC;YACF,MAAM,OAAO,GAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAA,IAAG,CAAC,MAAM;gBAAC,OAAO;YACrD,IAAG,CAAC,OAAO,CAAC,UAAU,IAAE,OAAO,CAAC,UAAU,KAAG,QAAQ,IAAE,CAAC,CAAC,OAAO,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAE,kBAAkB,CAAC,CAAC;YACvK,IAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,IAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,QAAQ;gBAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxI,MAAM,IAAI,GAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAA,IAAG,CAAC,MAAM;gBAAC,OAAO;YAClD,IAAG,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,IAAI,CAAC,IAAI;gBAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzE,GAAG,GAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAA,IAAI,CAAC,KAAK,CAAC,EAAC,GAAG,EAAC,GAAG,EAAC,OAAO,EAAC,CAAC,CAAC;QACzD,CAAC;QAAA,OAAM,KAAK,EAAC,CAAC;YAAA,IAAG,MAAM;gBAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,EAAC,UAAU,EAAC,OAAO,KAAG,MAAM,GAAC,KAAK,CAAC,CAAA,IAAG,GAAG,EAAC,CAAC;YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAAA,GAAG,GAAC,EAAE,CAAC;QAAA,CAAC,CAAA,CAAC,EAAC,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SurfaceField } from '../resource/SurfaceFields';
|
|
2
|
+
type Values = Readonly<Record<string, unknown>>;
|
|
3
|
+
/** User-event-only patch. Callers supply the already visible and writable fields. */
|
|
4
|
+
export declare function resourceReferenceBindingPatch(fields: readonly SurfaceField[], changed: Values, values: Values, previous: Values): Record<string, unknown>;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=reference-binding-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-binding-change.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/reference-binding-change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAQhD,qFAAqF;AACrF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,2BAmB/H"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Source queries use reference identities, not convenience display labels.
|
|
2
|
+
function bindingIdentity(value) {
|
|
3
|
+
if (Array.isArray(value))
|
|
4
|
+
return value.map(bindingIdentity).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
|
|
5
|
+
if (value && typeof value === 'object' && Object.hasOwn(value, 'value'))
|
|
6
|
+
return value.value;
|
|
7
|
+
return value ?? null;
|
|
8
|
+
}
|
|
9
|
+
/** User-event-only patch. Callers supply the already visible and writable fields. */
|
|
10
|
+
export function resourceReferenceBindingPatch(fields, changed, values, previous) {
|
|
11
|
+
const changedCodes = new Set(Object.keys(changed).filter(code => JSON.stringify(bindingIdentity(values[code])) !== JSON.stringify(bindingIdentity(previous[code]))));
|
|
12
|
+
const patch = {};
|
|
13
|
+
// Each field is cleared at most once, including any downstream dependency.
|
|
14
|
+
for (let pass = 0; pass < fields.length; pass++) {
|
|
15
|
+
let added = false;
|
|
16
|
+
for (const field of fields) {
|
|
17
|
+
if (Object.hasOwn(patch, field.key) || field.source?.clearOnBindingChange !== true ||
|
|
18
|
+
!field.source.filters?.some(filter => 'binding' in filter && changedCodes.has(filter.binding.field)))
|
|
19
|
+
continue;
|
|
20
|
+
const cleared = field.type.endsWith('.multiple') ? [] : undefined;
|
|
21
|
+
patch[field.key] = cleared;
|
|
22
|
+
if (JSON.stringify(bindingIdentity(values[field.key])) !== JSON.stringify(bindingIdentity(cleared))) {
|
|
23
|
+
changedCodes.add(field.key);
|
|
24
|
+
added = true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!added)
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
return patch;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=reference-binding-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-binding-change.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/reference-binding-change.ts"],"names":[],"mappings":"AAGA,2EAA2E;AAC3E,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/H,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAQ,KAA4B,CAAC,KAAK,CAAC;IACpH,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,6BAA6B,CAAC,MAA+B,EAAE,OAAe,EAAE,MAAc,EAAE,QAAgB;IAC9H,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC9D,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,2EAA2E;IAC3E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAChD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI;gBAChF,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,IAAI,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAE,SAAS;YACjH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACpG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,MAAM;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { DataFieldSourceLaunchBinding, DataRecordEditInput, UserCandidatePage, UserCandidateSearch } from 'openxiangda-contracts/browser';
|
|
2
|
+
export interface WorkflowCandidateBinding {
|
|
3
|
+
taskId: string;
|
|
4
|
+
expectedTaskVersion: number | undefined;
|
|
5
|
+
}
|
|
6
|
+
export type UserCandidateFieldContext = {
|
|
7
|
+
kind: 'native';
|
|
8
|
+
resourceCode: string;
|
|
9
|
+
fieldCode: string;
|
|
10
|
+
operation: 'create';
|
|
11
|
+
launch?: DataFieldSourceLaunchBinding;
|
|
12
|
+
scopeValue?: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'native';
|
|
15
|
+
resourceCode: string;
|
|
16
|
+
fieldCode: string;
|
|
17
|
+
operation: 'update';
|
|
18
|
+
recordId: string;
|
|
19
|
+
expectedRevision: number;
|
|
20
|
+
action?: DataRecordEditInput;
|
|
21
|
+
launch?: DataFieldSourceLaunchBinding;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'workflow-task';
|
|
24
|
+
taskId: string;
|
|
25
|
+
fieldCode: string;
|
|
26
|
+
expectedRevision: number;
|
|
27
|
+
expectedTaskVersion: number;
|
|
28
|
+
};
|
|
29
|
+
export declare function userCandidateFieldContext(input: {
|
|
30
|
+
resourceCode?: string;
|
|
31
|
+
fieldCode: string;
|
|
32
|
+
operation: 'create' | 'update';
|
|
33
|
+
recordId?: string;
|
|
34
|
+
expectedRevision?: number;
|
|
35
|
+
workflowCandidateBinding?: WorkflowCandidateBinding;
|
|
36
|
+
action?: DataRecordEditInput;
|
|
37
|
+
launch?: DataFieldSourceLaunchBinding;
|
|
38
|
+
requiresSavedScope?: boolean;
|
|
39
|
+
prospectiveScope?: boolean;
|
|
40
|
+
scopeValue?: unknown;
|
|
41
|
+
}): {
|
|
42
|
+
context?: UserCandidateFieldContext;
|
|
43
|
+
error?: string;
|
|
44
|
+
};
|
|
45
|
+
export declare function queryUserCandidateField(context: UserCandidateFieldContext, search: Omit<UserCandidateSearch, 'schemaVersion'>): Promise<UserCandidatePage>;
|
|
46
|
+
export type CandidateSelection = {
|
|
47
|
+
value: string;
|
|
48
|
+
label: string;
|
|
49
|
+
status?: 'valid' | 'invalid';
|
|
50
|
+
};
|
|
51
|
+
/** Invalid names come only from the existing value, never another directory. */
|
|
52
|
+
export declare function reconcileUserCandidateSelection(selected: CandidateSelection[], inspected: UserCandidatePage['selected']): CandidateSelection[];
|
|
53
|
+
export declare function userCandidateError(error: unknown): string;
|
|
54
|
+
//# sourceMappingURL=user-candidate-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-candidate-context.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/user-candidate-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAI/I,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5I;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,4BAA4B,CAAA;CAAE,GACjM;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAAC;AAIxH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IAClG,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAClG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAClD,GAAG;IAAE,OAAO,CAAC,EAAE,yBAAyB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8B1D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAY1J;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhG,gFAAgF;AAChF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,SAAS,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,kBAAkB,EAAE,CAM9I;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOzD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { SCHEMA_VERSIONS } from 'openxiangda-contracts/browser';
|
|
2
|
+
import { queryFieldUserCandidates, queryWorkflowTaskUserCandidates } from '../../platform-client';
|
|
3
|
+
const revision = (value) => Number.isSafeInteger(value) && Number(value) > 0;
|
|
4
|
+
export function userCandidateFieldContext(input) {
|
|
5
|
+
if (input.action && (input.operation !== 'update' || input.launch || input.workflowCandidateBinding ||
|
|
6
|
+
input.action.recordId !== input.recordId || input.action.expectedRevision !== input.expectedRevision))
|
|
7
|
+
return { error: '当前修改资料上下文已变化,请重新打开页面。' };
|
|
8
|
+
const task = input.workflowCandidateBinding;
|
|
9
|
+
if (task) {
|
|
10
|
+
if (!task.taskId || !revision(task.expectedTaskVersion) || !revision(input.expectedRevision))
|
|
11
|
+
return { error: '请刷新任务资料后再选择人员,当前输入已保留。' };
|
|
12
|
+
return { context: { kind: 'workflow-task', taskId: task.taskId, fieldCode: input.fieldCode,
|
|
13
|
+
expectedTaskVersion: task.expectedTaskVersion, expectedRevision: input.expectedRevision } };
|
|
14
|
+
}
|
|
15
|
+
if (!input.resourceCode)
|
|
16
|
+
return { error: '当前字段缺少选人上下文,请重新打开页面。' };
|
|
17
|
+
if (input.operation === 'create') {
|
|
18
|
+
let scopeValue;
|
|
19
|
+
if (input.requiresSavedScope) {
|
|
20
|
+
if (!input.prospectiveScope || !input.launch)
|
|
21
|
+
return { error: '请先保存资料,再选择人员。' };
|
|
22
|
+
const raw = input.scopeValue && typeof input.scopeValue === 'object' && !Array.isArray(input.scopeValue)
|
|
23
|
+
? input.scopeValue.value : input.scopeValue;
|
|
24
|
+
if (typeof raw !== 'string' || !raw || raw.trim() !== raw || raw.length > 255)
|
|
25
|
+
return { error: '请先完成所属范围资料,再选择人员。' };
|
|
26
|
+
scopeValue = raw;
|
|
27
|
+
}
|
|
28
|
+
return { context: { kind: 'native', operation: 'create', resourceCode: input.resourceCode,
|
|
29
|
+
fieldCode: input.fieldCode, ...(input.launch ? { launch: input.launch } : {}), ...(scopeValue ? { scopeValue } : {}) } };
|
|
30
|
+
}
|
|
31
|
+
if (!input.recordId || !revision(input.expectedRevision))
|
|
32
|
+
return { error: '请刷新已保存的资料后再选择人员,当前输入已保留。' };
|
|
33
|
+
return { context: { kind: 'native', operation: 'update', resourceCode: input.resourceCode,
|
|
34
|
+
fieldCode: input.fieldCode, recordId: input.recordId, expectedRevision: input.expectedRevision,
|
|
35
|
+
...(input.action ? { action: input.action } : {}),
|
|
36
|
+
...(input.launch ? { launch: input.launch } : {}) } };
|
|
37
|
+
}
|
|
38
|
+
export function queryUserCandidateField(context, search) {
|
|
39
|
+
const query = { schemaVersion: SCHEMA_VERSIONS.userCandidatesQuery,
|
|
40
|
+
...(search.keyword ? { keyword: search.keyword } : {}), ...(search.cursor ? { cursor: search.cursor } : {}),
|
|
41
|
+
...(search.selectedIds ? { selectedIds: search.selectedIds } : {}) };
|
|
42
|
+
if (context.kind === 'workflow-task')
|
|
43
|
+
return queryWorkflowTaskUserCandidates(context.taskId, context.fieldCode, {
|
|
44
|
+
...query, expectedRevision: context.expectedRevision, expectedTaskVersion: context.expectedTaskVersion,
|
|
45
|
+
});
|
|
46
|
+
return queryFieldUserCandidates(context.resourceCode, context.fieldCode, context.operation === 'create'
|
|
47
|
+
? { ...query, operation: 'create', ...(context.launch ? { launch: context.launch } : {}), ...(context.scopeValue ? { scopeValue: context.scopeValue } : {}) }
|
|
48
|
+
: { ...query, operation: 'update', recordId: context.recordId, expectedRevision: context.expectedRevision,
|
|
49
|
+
...(context.action ? { action: context.action } : {}),
|
|
50
|
+
...(context.launch ? { launch: context.launch } : {}) });
|
|
51
|
+
}
|
|
52
|
+
/** Invalid names come only from the existing value, never another directory. */
|
|
53
|
+
export function reconcileUserCandidateSelection(selected, inspected) {
|
|
54
|
+
const byId = new Map(inspected.map(item => [item.value, item]));
|
|
55
|
+
return selected.map(item => {
|
|
56
|
+
const current = byId.get(item.value);
|
|
57
|
+
return current ? { value: item.value, label: current.status === 'valid' ? current.label : item.label, status: current.status } : item;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function userCandidateError(error) {
|
|
61
|
+
const code = error && typeof error === 'object' ? String(error.code || '') : '';
|
|
62
|
+
if (/REVISION|TASK_VERSION|TASK_CONTEXT_CHANGED|HEAD_CHANGED|CURSOR|OWNER|TASK_NOT|NOT_ASSIGNED|CONFLICT/.test(code))
|
|
63
|
+
return '资料或任务已更新,请关闭选择页并刷新资料。当前输入已保留。';
|
|
64
|
+
if (/SAVED_SCOPE|SCOPE_VALUE_REQUIRED/.test(code))
|
|
65
|
+
return '请先保存完整的所属范围,再选择人员。';
|
|
66
|
+
if (/FORBIDDEN|DENIED|UNAUTHORIZED/.test(code))
|
|
67
|
+
return '当前没有读取这些候选人的权限,请刷新页面或联系管理员。';
|
|
68
|
+
return '候选人员读取失败,请重试。当前选择已保留。';
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=user-candidate-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-candidate-context.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/user-candidate-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { Temporal } from '@js-temporal/polyfill';
|
|
2
2
|
import { type Dayjs } from 'dayjs';
|
|
3
|
+
import type { DataFieldSurface } from 'openxiangda-contracts/browser';
|
|
3
4
|
export interface DateTimeConstraints {
|
|
4
5
|
timeZone?: string;
|
|
5
6
|
min?: string;
|
|
6
7
|
max?: string;
|
|
7
8
|
minuteStep?: number;
|
|
9
|
+
/** Derived from the field declaration, independent of the wall-time step. */
|
|
10
|
+
instantPrecision?: 'minute';
|
|
8
11
|
}
|
|
12
|
+
export declare function fieldDateTimeConstraints(field: Pick<DataFieldSurface, 'type' | 'timePrecision'>, input: DateTimeConstraints): DateTimeConstraints;
|
|
9
13
|
export declare function instantText(value: unknown): string;
|
|
10
14
|
export declare function validateDateTimeConstraints(input: DateTimeConstraints): DateTimeConstraints;
|
|
11
15
|
export declare function instantToWall(value: unknown, timeZone: string): Temporal.PlainDateTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoned-date-time.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/zoned-date-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAc,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"zoned-date-time.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/zoned-date-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAc,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,QAAQ,CAAC;CAC7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,eAAe,CAAC,EAC9F,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,CAIjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,mBAAmB,uBAYrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAE7D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAE5E;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,CAEhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,0BAEvC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAC9E,WAAW,EAAE,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBtE;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,mBAAwB,0BAS9E;AAED;2EAC2E;AAC3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB;;yBAsBhF,MAAM;yBACN,MAAM,KAAK,MAAM;EAEzC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;;;IAkBnG"}
|
|
@@ -5,6 +5,11 @@ import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
|
5
5
|
import { validatePresentationTimeZone } from '../../presentation-time';
|
|
6
6
|
dayjs.extend(utc);
|
|
7
7
|
dayjs.extend(customParseFormat);
|
|
8
|
+
export function fieldDateTimeConstraints(field, input) {
|
|
9
|
+
const minute = ['datetime', 'datetime-range'].includes(field.type) && field.timePrecision === 'minute';
|
|
10
|
+
return { ...input, minuteStep: input.minuteStep ?? (minute ? 1 : undefined),
|
|
11
|
+
...(minute ? { instantPrecision: 'minute' } : {}) };
|
|
12
|
+
}
|
|
8
13
|
export function instantText(value) {
|
|
9
14
|
return dayjs.isDayjs(value) ? value.toISOString() : String(value);
|
|
10
15
|
}
|
|
@@ -50,6 +55,8 @@ export function zonedInputResult(value, timeZone, constraints) {
|
|
|
50
55
|
value.microsecond !== 0 || value.nanosecond !== 0)) {
|
|
51
56
|
return { error: `请选择整 ${constraints.minuteStep} 分钟的时间` };
|
|
52
57
|
}
|
|
58
|
+
if (constraints.instantPrecision === 'minute' && instant.epochNanoseconds % 60000000000n !== 0n)
|
|
59
|
+
return { error: '此时区的时间不能表示精确整分钟,请选择其他日期或时区' };
|
|
53
60
|
if (constraints.min && Temporal.Instant.compare(instant, Temporal.Instant.from(constraints.min)) < 0)
|
|
54
61
|
return { error: '时间早于允许的最早时间' };
|
|
55
62
|
if (constraints.max && Temporal.Instant.compare(instant, Temporal.Instant.from(constraints.max)) > 0)
|
|
@@ -81,7 +88,8 @@ export function disabledZonedTime(day, zone, constraints) {
|
|
|
81
88
|
if (constraints.minuteStep === undefined || minute % constraints.minuteStep === 0) {
|
|
82
89
|
try {
|
|
83
90
|
const at = wallToInstant(day.toPlainDateTime({ hour, minute }), zone).epochNanoseconds;
|
|
84
|
-
|
|
91
|
+
if (constraints.instantPrecision !== 'minute' || at % 60000000000n === 0n)
|
|
92
|
+
result = [Math.max(0, min === undefined ? -Infinity : Math.ceil(Number(min - at) / 1e9)), Math.min(constraints.minuteStep === undefined ? 59 : 0, max === undefined ? Infinity : Math.floor(Number(max - at) / 1e9))];
|
|
85
93
|
}
|
|
86
94
|
catch { /* A DST gap or repeated minute is not selectable. */ }
|
|
87
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoned-date-time.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/zoned-date-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"zoned-date-time.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/zoned-date-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAGvE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAWhC,MAAM,UAAU,wBAAwB,CAAC,KAAuD,EAC9F,KAA0B;IAC1B,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC;IACvG,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAA0B;IACpE,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;YACxE,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QACzG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnF,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpF,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,QAAgB;IAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA6B,EAAE,QAAgB;IAC3E,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACnF,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,KAA6B;IACvD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA6B,EAAE,QAAgB,EAC9E,WAAgC;IAChC,IAAI,OAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS;QACtC,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;YAC3F,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,QAAQ,WAAW,CAAC,UAAU,QAAQ,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,WAAW,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB,GAAG,YAAe,KAAK,EAAE;QAChG,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACjD,IAAI,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QAClG,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAClC,IAAI,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QAClG,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAgB,EAAE,cAAmC,EAAE;IAC7E,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QAClG,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QAClG,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,CAAC;IACpE,OAAO,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,GAAuB,EAAE,IAAY,EAAE,WAAgC;IACvG,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAc,EAAoB,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,MAAM,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,GAAG,WAAW,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAClF,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,gBAAgB,CAAC;gBACvF,IAAI,WAAW,CAAC,gBAAgB,KAAK,QAAQ,IAAI,EAAE,GAAG,YAAe,KAAK,EAAE;oBAC1E,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1N,CAAC;YAAC,MAAM,CAAC,CAAC,qDAAqD,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7G,OAAO;QACL,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzI,eAAe,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,eAAe,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KAC7J,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA8B,EAAE,IAAY,EAAE,GAAY,EAAE,GAAY;IAClG,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC;IAClE,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,KAAK,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratedResourceCrud.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/GeneratedResourceCrud.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GeneratedResourceCrud.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/GeneratedResourceCrud.tsx"],"names":[],"mappings":"AAmFA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAUnF,OAAO,EAAyI,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAClN,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AA2C3E,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAMvG;AAiDD,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,QAAQ,EACR,IAAa,EACb,OAAmB,EACnB,UAAU,EAAE,kBAAkB,EAC9B,KAAK,GACN,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,UAAU,CAAC,EAAE,2BAA2B,CAAC;IACzC,KAAK,EAAE,2BAA2B,CAAC;CACpC,2CA2BA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { ResourceRecordDeletion } from './ResourceRecordDeletion';
|
|
2
3
|
import { PresentationTime, usePresentationTimeZone } from '../../presentation-time';
|
|
3
4
|
import { DATA_AUDIT_METADATA_FIELDS, DATA_SYSTEM_SORT_FIELD_CODES, isDataSystemSortField, projectDataResourceView } from 'openxiangda-contracts/browser';
|
|
4
5
|
import { ExportOutlined, FilterOutlined, PlusOutlined, ReloadOutlined, SearchOutlined, SettingOutlined, SortAscendingOutlined, } from '@ant-design/icons';
|
|
@@ -8,12 +9,14 @@ import { Fragment, useEffect, useMemo, useState } from 'react';
|
|
|
8
9
|
import { useHref, useNavigate, useParams } from 'react-router-dom';
|
|
9
10
|
import { MobileResourceListPage, ResourceListPage, } from './StandardResourcePages';
|
|
10
11
|
import { SurfaceFieldValue, } from './SurfaceFields';
|
|
11
|
-
import { createNativeResourceClient, loadResourceListPreference, resetResourceListPreference, saveResourceListPreference, } from '../../platform-client';
|
|
12
|
+
import { createNativeResourceClient, loadResourceListPreference, platformReadErrorMessage, resetResourceListPreference, saveResourceListPreference, } from '../../platform-client';
|
|
12
13
|
import { useRuntime } from '../../runtime';
|
|
13
14
|
import { ResourceBatchActions, ResourceImportButton, WorkflowResourceImportButton, } from './ResourceBatchActions';
|
|
14
15
|
import { isAdminContributionAllowed, useAdminResourceContributions, } from '../../admin-contributions';
|
|
15
16
|
import { SubtableValueDisplay, } from '../platform-fields/SubtableField';
|
|
16
17
|
import { selectedSurfaceFields } from './resource-field-selection';
|
|
18
|
+
import { ResourceRecordComments } from './ResourceRecordComments';
|
|
19
|
+
import { ResourceRecordPrintPreview } from './ResourceRecordPrintPreview';
|
|
17
20
|
import { isGeneratedDetailFieldVisible } from './detail-field-visibility';
|
|
18
21
|
import { GeneratedResourceFormPage } from './GeneratedResourceForm';
|
|
19
22
|
import { ResourceListSettings } from './ResourceListSettings';
|
|
@@ -26,6 +29,7 @@ import { WorkflowRecordDetailPage, WorkflowSubmissionPage } from '../workflow/St
|
|
|
26
29
|
import { RecordDetailFrame, RecordDetailSections, detailTime } from './RecordDetailFrame';
|
|
27
30
|
import { RecordChangeHistory } from './RecordChangeHistory';
|
|
28
31
|
import { WorkflowRecordEditor } from '../workflow/WorkflowRecordEditor';
|
|
32
|
+
import { WorkflowRecordHistoryPanel } from '../workflow/WorkflowRecordHistoryPanel';
|
|
29
33
|
async function exportResourceRows(code, name, surface, fields, query, sorts) {
|
|
30
34
|
const client = createNativeResourceClient(code, surface);
|
|
31
35
|
const exported = await client.exportCsv({
|
|
@@ -592,6 +596,25 @@ function NativeResourceDetailPage({ definition, paths, variant, recordId, onDism
|
|
|
592
596
|
const record = hasReadCapability(definition.capabilities.read) ? query.result : undefined;
|
|
593
597
|
const detailContributions = (contributions?.detail || []).filter((item) => isAdminContributionAllowed(item, hasCapability));
|
|
594
598
|
const [auditExpanded, setAuditExpanded] = useState(false);
|
|
599
|
+
const [workflowHistoryExpanded, setWorkflowHistoryExpanded] = useState(false);
|
|
600
|
+
const [commentsExpanded, setCommentsExpanded] = useState(false);
|
|
601
|
+
const commentsRead = definition.recordComments?.read;
|
|
602
|
+
const commentsCreate = definition.recordComments?.create;
|
|
603
|
+
const canReadComments = Boolean(commentsRead?.length &&
|
|
604
|
+
(identity.isAppSuperAdmin || commentsRead.every(code => hasReadCapability(code))));
|
|
605
|
+
const canCreateComments = Boolean(commentsCreate?.length &&
|
|
606
|
+
(identity.isAppSuperAdmin || commentsCreate.every(code => hasCapability(code))));
|
|
607
|
+
const [deleting, setDeleting] = useState(false);
|
|
608
|
+
const deletePolicy = definition.recordDeletion?.delete;
|
|
609
|
+
const deletionVisible = Boolean(record && deletePolicy?.length &&
|
|
610
|
+
(identity.isAppSuperAdmin || hasCapability(definition.capabilities.read) && hasCapability(definition.capabilities.delete) && deletePolicy.every(code => hasCapability(code))));
|
|
611
|
+
const [printing, setPrinting] = useState(false);
|
|
612
|
+
const printRead = definition.recordPrint?.read;
|
|
613
|
+
const printVisible = Boolean(record && printRead?.length &&
|
|
614
|
+
(identity.isAppSuperAdmin || printRead.every(code => hasReadCapability(code))));
|
|
615
|
+
const historyRead = definition.workflowHistory?.read;
|
|
616
|
+
const workflowHistoryVisible = Boolean(record && historyRead?.length &&
|
|
617
|
+
(identity.isAppSuperAdmin || historyRead.every(code => hasReadCapability(code))));
|
|
595
618
|
const auditVisible = Boolean(record && DATA_AUDIT_METADATA_FIELDS.every(code => Object.prototype.hasOwnProperty.call(record, code)));
|
|
596
619
|
const readable = (field) => fieldReadable(field, hasReadCapability, identity.isAppSuperAdmin);
|
|
597
620
|
const fields = selectedSurfaceFields(definition.surface, 'detail').filter(readable);
|
|
@@ -606,10 +629,11 @@ function NativeResourceDetailPage({ definition, paths, variant, recordId, onDism
|
|
|
606
629
|
const creatorLabel = creator && typeof creator === 'object' ? String(creator.label || creator.displayName || '') : '';
|
|
607
630
|
const timeZone = usePresentationTimeZone();
|
|
608
631
|
const createdTime = detailTime(record?.created_at, timeZone);
|
|
609
|
-
return _jsx(RecordDetailFrame, { title: `${definition.name}详情`, heading: record && recordTitle, status: statusField && record && record[statusField.key] != null && record[statusField.key] !== '' ? _jsx(Tag, { color: "processing", children: _jsx(SurfaceFieldValue, { field: statusField, value: record[statusField.key] }) }) : undefined, metadata: [creatorLabel, createdTime ? `${createdTime} 创建` : ''].filter(Boolean).join(' · '), updatedAt: record?.updated_at, variant: variant, drawer: Boolean(onDismiss), drawerState: drawerState, newPageHref: newPageHref, onClose: close, onEdit: record ? edit : undefined, busy: editBusy, editing: editing && record ? _jsx(GeneratedResourceFormPage, { definition: definition, paths: paths, variant: variant, recordId: id, mode: "edit", embedded: true, onBusyChange: setEditBusy, onDismiss: () => setEditing(false), onSaved: () => { setEditing(false); void query.query.refetch(); } }) : undefined, children: !hasReadCapability(definition.capabilities.read) ? _jsx(Result, { status: "403", title: "\u5F53\u524D\u5E73\u53F0\u7528\u6237\u65E0\u6B64\u9875\u9762\u6743\u9650" })
|
|
632
|
+
return _jsx(RecordDetailFrame, { title: `${definition.name}详情`, heading: record && recordTitle, status: statusField && record && record[statusField.key] != null && record[statusField.key] !== '' ? _jsx(Tag, { color: "processing", children: _jsx(SurfaceFieldValue, { field: statusField, value: record[statusField.key] }) }) : undefined, metadata: [creatorLabel, createdTime ? `${createdTime} 创建` : ''].filter(Boolean).join(' · '), updatedAt: record?.updated_at, variant: variant, drawer: Boolean(onDismiss), drawerState: drawerState, newPageHref: newPageHref, onClose: close, onEdit: record ? edit : undefined, busy: editBusy, onPrint: printVisible ? () => setPrinting(true) : undefined, onDelete: deletionVisible ? () => setDeleting(true) : undefined, editing: editing && record ? _jsx(GeneratedResourceFormPage, { definition: definition, paths: paths, variant: variant, recordId: id, mode: "edit", embedded: true, onBusyChange: setEditBusy, onDismiss: () => setEditing(false), onSaved: () => { setEditing(false); void query.query.refetch(); } }) : undefined, children: !hasReadCapability(definition.capabilities.read) ? _jsx(Result, { status: "403", title: "\u5F53\u524D\u5E73\u53F0\u7528\u6237\u65E0\u6B64\u9875\u9762\u6743\u9650" })
|
|
610
633
|
: query.query.isFetching && !record ? _jsx(Spin, {})
|
|
611
|
-
: query.query.isError || !record ? _jsx(Alert, { type: "error", title: "\u6570\u636E\u8BFB\u53D6\u5931\u8D25", description: query.query.error
|
|
634
|
+
: query.query.isError || !record ? _jsx(Alert, { type: "error", title: "\u6570\u636E\u8BFB\u53D6\u5931\u8D25", description: platformReadErrorMessage(query.query.error, '记录不存在,可能已被删除或当前账号无权查看。'), action: _jsx(Button, { onClick: () => void query.query.refetch(), children: "\u91CD\u8BD5" }) })
|
|
612
635
|
: _jsxs(_Fragment, { children: [_jsx(RecordDetailSections, { groups: fieldsBySection(definition.surface, 'detail').map(group => ({ ...group, fields: group.fields.filter(readable) })), renderValue: field => field.type === 'subtable' ? _jsx(SubtableValueDisplay, { field: field, mobile: variant === 'mobile', parentRecordId: record.id })
|
|
613
|
-
: _jsx(SurfaceFieldValue, { field: field, mobile: variant === 'mobile', resourceCode: definition.code, value: record[field.key] }) }), auditVisible && _jsx(Collapse, { className: "oxa-audit-collapse", activeKey: auditExpanded ? ['audit'] : [], expandIconPlacement: "end", onChange: keys => setAuditExpanded((Array.isArray(keys) ? keys : [keys]).includes('audit')), items: [{ key: 'audit', label: '变更记录', children: auditExpanded ? _jsx(RecordChangeHistory, { resourceCode: definition.code, recordId: record.id, surface: definition.surface, readable: readable }) : null }] }),
|
|
636
|
+
: _jsx(SurfaceFieldValue, { field: field, mobile: variant === 'mobile', resourceCode: definition.code, value: record[field.key] }) }), deleting && deletionVisible && _jsx(ResourceRecordDeletion, { resourceCode: definition.code, recordId: id, onClose: () => setDeleting(false), onDeleted: () => { onDismiss?.(); navigate(paths.list || paths.fallback); } }), printing && printVisible && _jsx(ResourceRecordPrintPreview, { resourceCode: definition.code, recordId: id, viewCode: definition.viewCode, onClose: () => setPrinting(false) }, id), auditVisible && _jsx(Collapse, { className: "oxa-audit-collapse", activeKey: auditExpanded ? ['audit'] : [], expandIconPlacement: "end", onChange: keys => setAuditExpanded((Array.isArray(keys) ? keys : [keys]).includes('audit')), items: [{ key: 'audit', label: '变更记录', children: auditExpanded ? _jsx(RecordChangeHistory, { resourceCode: definition.code, recordId: record.id, surface: definition.surface, readable: readable }) : null }] }), workflowHistoryVisible && _jsx(Collapse, { className: "oxa-workflow-history-collapse", activeKey: workflowHistoryExpanded ? ['history'] : [], expandIconPlacement: "end", onChange: keys => setWorkflowHistoryExpanded((Array.isArray(keys) ? keys : [keys]).includes('history')), items: [{ key: 'history', label: '流程办理记录', children: workflowHistoryExpanded
|
|
637
|
+
? _jsx(WorkflowRecordHistoryPanel, { resourceCode: definition.code, recordId: record.id, variant: variant }) : null }] }), (canReadComments || canCreateComments) && _jsx(Collapse, { className: "oxa-record-comments-collapse", activeKey: commentsExpanded ? ['comments'] : [], expandIconPlacement: "end", onChange: keys => setCommentsExpanded((Array.isArray(keys) ? keys : [keys]).includes('comments')), items: [{ key: 'comments', label: '评论', children: _jsx(ResourceRecordComments, { resourceCode: definition.code, recordId: record.id, canRead: canReadComments, canCreate: canCreateComments }) }] }), detailContributions.map(contribution => _jsx(Fragment, { children: contribution.render({ record, resource: definition.code, refresh: () => query.query.refetch() }) }, contribution.code))] }) });
|
|
614
638
|
}
|
|
615
639
|
//# sourceMappingURL=GeneratedResourceCrud.js.map
|