@nocobase/flow-engine 2.1.0-alpha.4 → 2.1.0-alpha.40
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/LICENSE +201 -661
- package/README.md +79 -10
- package/lib/JSRunner.d.ts +10 -1
- package/lib/JSRunner.js +50 -5
- package/lib/ViewScopedFlowEngine.js +5 -1
- package/lib/components/FieldModelRenderer.js +2 -2
- package/lib/components/FlowModelRenderer.d.ts +3 -1
- package/lib/components/FlowModelRenderer.js +12 -6
- package/lib/components/FormItem.d.ts +6 -0
- package/lib/components/FormItem.js +11 -3
- package/lib/components/MobilePopup.js +6 -5
- package/lib/components/dnd/gridDragPlanner.d.ts +59 -2
- package/lib/components/dnd/gridDragPlanner.js +613 -21
- package/lib/components/dnd/index.d.ts +31 -2
- package/lib/components/dnd/index.js +244 -23
- package/lib/components/settings/wrappers/component/SelectWithTitle.d.ts +2 -1
- package/lib/components/settings/wrappers/component/SelectWithTitle.js +14 -12
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.d.ts +3 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +68 -10
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +23 -43
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +352 -295
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +16 -2
- package/lib/components/settings/wrappers/contextual/useFloatToolbarPortal.d.ts +36 -0
- package/lib/components/settings/wrappers/contextual/useFloatToolbarPortal.js +274 -0
- package/lib/components/settings/wrappers/contextual/useFloatToolbarVisibility.d.ts +30 -0
- package/lib/components/settings/wrappers/contextual/useFloatToolbarVisibility.js +315 -0
- package/lib/components/subModel/AddSubModelButton.js +27 -1
- package/lib/components/subModel/LazyDropdown.js +96 -39
- package/lib/components/subModel/index.d.ts +1 -0
- package/lib/components/subModel/index.js +19 -0
- package/lib/components/subModel/utils.d.ts +1 -1
- package/lib/components/subModel/utils.js +9 -3
- package/lib/components/variables/VariableHybridInput.d.ts +27 -0
- package/lib/components/variables/VariableHybridInput.js +499 -0
- package/lib/components/variables/index.d.ts +2 -0
- package/lib/components/variables/index.js +3 -0
- package/lib/data-source/index.d.ts +75 -0
- package/lib/data-source/index.js +247 -5
- package/lib/executor/FlowExecutor.js +32 -9
- package/lib/flow-registry/DetachedFlowRegistry.d.ts +21 -0
- package/lib/flow-registry/DetachedFlowRegistry.js +80 -0
- package/lib/flow-registry/index.d.ts +1 -0
- package/lib/flow-registry/index.js +3 -1
- package/lib/flowContext.d.ts +3 -0
- package/lib/flowContext.js +43 -1
- package/lib/flowEngine.d.ts +151 -1
- package/lib/flowEngine.js +389 -15
- package/lib/flowI18n.js +2 -1
- package/lib/flowSettings.d.ts +14 -6
- package/lib/flowSettings.js +34 -6
- package/lib/index.d.ts +2 -0
- package/lib/index.js +7 -0
- package/lib/lazy-helper.d.ts +14 -0
- package/lib/lazy-helper.js +71 -0
- package/lib/locale/en-US.json +1 -0
- package/lib/locale/index.d.ts +2 -0
- package/lib/locale/zh-CN.json +1 -0
- package/lib/models/DisplayItemModel.d.ts +1 -1
- package/lib/models/EditableItemModel.d.ts +1 -1
- package/lib/models/FilterableItemModel.d.ts +1 -1
- package/lib/models/flowModel.d.ts +13 -10
- package/lib/models/flowModel.js +78 -18
- package/lib/provider.js +38 -23
- package/lib/reactive/observer.js +46 -16
- package/lib/runjs-context/registry.d.ts +1 -1
- package/lib/runjs-context/setup.js +20 -12
- package/lib/runjs-context/snippets/index.js +13 -2
- package/lib/runjs-context/snippets/scene/detail/set-field-style.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/set-field-style.snippet.js +50 -0
- package/lib/runjs-context/snippets/scene/table/set-cell-style.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/set-cell-style.snippet.js +54 -0
- package/lib/scheduler/ModelOperationScheduler.d.ts +5 -1
- package/lib/scheduler/ModelOperationScheduler.js +3 -2
- package/lib/types.d.ts +50 -2
- package/lib/types.js +1 -0
- package/lib/utils/createCollectionContextMeta.js +6 -2
- package/lib/utils/index.d.ts +3 -2
- package/lib/utils/index.js +7 -0
- package/lib/utils/parsePathnameToViewParams.js +1 -1
- package/lib/utils/randomId.d.ts +39 -0
- package/lib/utils/randomId.js +45 -0
- package/lib/utils/runjsTemplateCompat.js +1 -1
- package/lib/utils/runjsValue.js +41 -11
- package/lib/utils/schema-utils.d.ts +7 -1
- package/lib/utils/schema-utils.js +19 -0
- package/lib/views/FlowView.d.ts +7 -1
- package/lib/views/FlowView.js +11 -1
- package/lib/views/PageComponent.js +8 -6
- package/lib/views/ViewNavigation.js +6 -2
- package/lib/views/runViewBeforeClose.d.ts +10 -0
- package/lib/views/runViewBeforeClose.js +45 -0
- package/lib/views/useDialog.d.ts +2 -1
- package/lib/views/useDialog.js +20 -3
- package/lib/views/useDrawer.d.ts +2 -1
- package/lib/views/useDrawer.js +20 -3
- package/lib/views/usePage.d.ts +5 -11
- package/lib/views/usePage.js +302 -144
- package/package.json +6 -5
- package/src/JSRunner.ts +68 -4
- package/src/ViewScopedFlowEngine.ts +4 -0
- package/src/__tests__/JSRunner.test.ts +27 -1
- package/src/__tests__/flow-engine.test.ts +166 -0
- package/src/__tests__/flowContext.test.ts +82 -1
- package/src/__tests__/flowEngine.modelLoaders.test.ts +245 -0
- package/src/__tests__/flowSettings.test.ts +94 -15
- package/src/__tests__/objectVariable.test.ts +24 -0
- package/src/__tests__/provider.test.tsx +24 -2
- package/src/__tests__/renderHiddenInConfig.test.tsx +6 -6
- package/src/__tests__/runjsContext.test.ts +16 -0
- package/src/__tests__/runjsContextRuntime.test.ts +2 -0
- package/src/__tests__/runjsPreprocessDefault.test.ts +23 -0
- package/src/__tests__/runjsSnippets.test.ts +21 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
- package/src/components/FieldModelRenderer.tsx +2 -1
- package/src/components/FlowModelRenderer.tsx +18 -6
- package/src/components/FormItem.tsx +7 -1
- package/src/components/MobilePopup.tsx +4 -2
- package/src/components/__tests__/FlowModelRenderer.test.tsx +65 -2
- package/src/components/__tests__/FormItem.test.tsx +25 -0
- package/src/components/__tests__/dnd.test.ts +44 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +20 -10
- package/src/components/__tests__/gridDragPlanner.test.ts +558 -3
- package/src/components/dnd/__tests__/DndProvider.test.tsx +98 -0
- package/src/components/dnd/gridDragPlanner.ts +758 -19
- package/src/components/dnd/index.tsx +305 -28
- package/src/components/settings/wrappers/component/SelectWithTitle.tsx +21 -9
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +88 -10
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +487 -440
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +18 -2
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +189 -3
- package/src/components/settings/wrappers/contextual/__tests__/FlowsFloatContextMenu.test.tsx +778 -0
- package/src/components/settings/wrappers/contextual/useFloatToolbarPortal.ts +360 -0
- package/src/components/settings/wrappers/contextual/useFloatToolbarVisibility.ts +361 -0
- package/src/components/subModel/AddSubModelButton.tsx +32 -2
- package/src/components/subModel/LazyDropdown.tsx +107 -43
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +319 -36
- package/src/components/subModel/__tests__/utils.test.ts +24 -0
- package/src/components/subModel/index.ts +1 -0
- package/src/components/subModel/utils.ts +7 -1
- package/src/components/variables/VariableHybridInput.tsx +531 -0
- package/src/components/variables/index.ts +2 -0
- package/src/data-source/__tests__/collection.test.ts +41 -2
- package/src/data-source/__tests__/index.test.ts +68 -1
- package/src/data-source/index.ts +304 -6
- package/src/executor/FlowExecutor.ts +35 -10
- package/src/executor/__tests__/flowExecutor.test.ts +57 -0
- package/src/flow-registry/DetachedFlowRegistry.ts +46 -0
- package/src/flow-registry/__tests__/detachedFlowRegistry.test.ts +47 -0
- package/src/flow-registry/index.ts +1 -0
- package/src/flowContext.ts +47 -3
- package/src/flowEngine.ts +445 -11
- package/src/flowI18n.ts +2 -1
- package/src/flowSettings.ts +40 -6
- package/src/index.ts +2 -0
- package/src/lazy-helper.tsx +57 -0
- package/src/locale/en-US.json +1 -0
- package/src/locale/zh-CN.json +1 -0
- package/src/models/DisplayItemModel.tsx +1 -1
- package/src/models/EditableItemModel.tsx +1 -1
- package/src/models/FilterableItemModel.tsx +1 -1
- package/src/models/__tests__/dispatchEvent.when.test.ts +214 -0
- package/src/models/__tests__/flowModel.test.ts +47 -3
- package/src/models/flowModel.tsx +119 -33
- package/src/provider.tsx +41 -25
- package/src/reactive/__tests__/observer.test.tsx +82 -0
- package/src/reactive/observer.tsx +87 -25
- package/src/runjs-context/registry.ts +1 -1
- package/src/runjs-context/setup.ts +22 -12
- package/src/runjs-context/snippets/index.ts +12 -1
- package/src/runjs-context/snippets/scene/detail/set-field-style.snippet.ts +30 -0
- package/src/runjs-context/snippets/scene/table/set-cell-style.snippet.ts +34 -0
- package/src/scheduler/ModelOperationScheduler.ts +14 -3
- package/src/types.ts +62 -0
- package/src/utils/__tests__/createCollectionContextMeta.test.ts +48 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +7 -0
- package/src/utils/__tests__/runjsValue.test.ts +11 -0
- package/src/utils/__tests__/utils.test.ts +62 -0
- package/src/utils/createCollectionContextMeta.ts +6 -2
- package/src/utils/index.ts +5 -1
- package/src/utils/parsePathnameToViewParams.ts +2 -2
- package/src/utils/randomId.ts +48 -0
- package/src/utils/runjsTemplateCompat.ts +1 -1
- package/src/utils/runjsValue.ts +50 -11
- package/src/utils/schema-utils.ts +30 -1
- package/src/views/FlowView.tsx +22 -2
- package/src/views/PageComponent.tsx +7 -4
- package/src/views/ViewNavigation.ts +6 -2
- package/src/views/__tests__/FlowView.usePage.test.tsx +243 -3
- package/src/views/__tests__/runViewBeforeClose.test.ts +30 -0
- package/src/views/__tests__/useDialog.closeDestroy.test.tsx +13 -12
- package/src/views/runViewBeforeClose.ts +19 -0
- package/src/views/useDialog.tsx +25 -3
- package/src/views/useDrawer.tsx +25 -3
- package/src/views/usePage.tsx +365 -179
|
@@ -31,6 +31,7 @@ __export(schema_utils_exports, {
|
|
|
31
31
|
resolveStepDisabledInSettings: () => resolveStepDisabledInSettings,
|
|
32
32
|
resolveStepUiSchema: () => resolveStepUiSchema,
|
|
33
33
|
resolveUiMode: () => resolveUiMode,
|
|
34
|
+
shouldHideEventInSettings: () => shouldHideEventInSettings,
|
|
34
35
|
shouldHideStepInSettings: () => shouldHideStepInSettings
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(schema_utils_exports);
|
|
@@ -195,6 +196,23 @@ async function resolveStepUiSchema(model, flow, step) {
|
|
|
195
196
|
return resolvedStepUiSchema;
|
|
196
197
|
}
|
|
197
198
|
__name(resolveStepUiSchema, "resolveStepUiSchema");
|
|
199
|
+
async function shouldHideEventInSettings(model, flow, event) {
|
|
200
|
+
if (!event) return true;
|
|
201
|
+
const { hideInSettings } = event;
|
|
202
|
+
if (typeof hideInSettings === "function") {
|
|
203
|
+
try {
|
|
204
|
+
const ctx = new import_flowContext.FlowRuntimeContext(model, flow.key, "settings");
|
|
205
|
+
(0, import_setupRuntimeContextSteps.setupRuntimeContextSteps)(ctx, flow.steps || {}, model, flow.key);
|
|
206
|
+
const result = await hideInSettings(ctx);
|
|
207
|
+
return !!result;
|
|
208
|
+
} catch (error) {
|
|
209
|
+
console.warn(`Error evaluating hideInSettings for event '${event.name || ""}' in flow '${flow.key}':`, error);
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return !!hideInSettings;
|
|
214
|
+
}
|
|
215
|
+
__name(shouldHideEventInSettings, "shouldHideEventInSettings");
|
|
198
216
|
async function shouldHideStepInSettings(model, flow, step) {
|
|
199
217
|
var _a;
|
|
200
218
|
if (!step) return true;
|
|
@@ -283,5 +301,6 @@ __name(resolveStepDisabledInSettings, "resolveStepDisabledInSettings");
|
|
|
283
301
|
resolveStepDisabledInSettings,
|
|
284
302
|
resolveStepUiSchema,
|
|
285
303
|
resolveUiMode,
|
|
304
|
+
shouldHideEventInSettings,
|
|
286
305
|
shouldHideStepInSettings
|
|
287
306
|
});
|
package/lib/views/FlowView.d.ts
CHANGED
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
import { PopoverProps as AntdPopoverProps } from 'antd';
|
|
11
11
|
import { FlowContext } from '../flowContext';
|
|
12
12
|
import { ViewNavigation } from './ViewNavigation';
|
|
13
|
+
export type FlowViewBeforeClosePayload = {
|
|
14
|
+
result?: any;
|
|
15
|
+
force?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type FlowViewBeforeCloseHandler = (payload: FlowViewBeforeClosePayload) => Promise<boolean | void> | boolean | void;
|
|
13
18
|
export type FlowView = {
|
|
14
19
|
type: 'drawer' | 'popover' | 'dialog' | 'embed';
|
|
15
20
|
inputArgs: any;
|
|
@@ -20,8 +25,9 @@ export type FlowView = {
|
|
|
20
25
|
Footer: React.FC<{
|
|
21
26
|
children?: React.ReactNode;
|
|
22
27
|
}> | null;
|
|
23
|
-
close: (result?: any, force?: boolean) => void;
|
|
28
|
+
close: (result?: any, force?: boolean) => Promise<boolean | void> | boolean | void;
|
|
24
29
|
update: (newConfig: any) => void;
|
|
30
|
+
beforeClose?: FlowViewBeforeCloseHandler;
|
|
25
31
|
navigation?: ViewNavigation;
|
|
26
32
|
/** 页面的销毁方法 */
|
|
27
33
|
destroy?: () => void;
|
package/lib/views/FlowView.js
CHANGED
|
@@ -47,11 +47,21 @@ const _FlowViewer = class _FlowViewer {
|
|
|
47
47
|
if (this.types[type]) {
|
|
48
48
|
zIndex += 1;
|
|
49
49
|
const onClose = others.onClose;
|
|
50
|
+
let zIndexReleased = false;
|
|
51
|
+
const releaseZIndex = /* @__PURE__ */ __name(() => {
|
|
52
|
+
if (!zIndexReleased) {
|
|
53
|
+
zIndexReleased = true;
|
|
54
|
+
zIndex -= 1;
|
|
55
|
+
}
|
|
56
|
+
}, "releaseZIndex");
|
|
50
57
|
const _zIndex = others.zIndex;
|
|
51
58
|
others.onClose = (...args) => {
|
|
52
59
|
onClose == null ? void 0 : onClose(...args);
|
|
53
|
-
|
|
60
|
+
releaseZIndex();
|
|
54
61
|
};
|
|
62
|
+
if (type === "embed") {
|
|
63
|
+
others.onOpenCancelled = releaseZIndex;
|
|
64
|
+
}
|
|
55
65
|
if (type !== "embed") {
|
|
56
66
|
others.zIndex = _zIndex ?? this.getNextZIndex();
|
|
57
67
|
}
|
|
@@ -55,8 +55,9 @@ const PageComponent = (0, import_react.forwardRef)((props, ref) => {
|
|
|
55
55
|
hidden,
|
|
56
56
|
title: _title,
|
|
57
57
|
styles = {},
|
|
58
|
-
zIndex = 4
|
|
58
|
+
zIndex = 4,
|
|
59
59
|
// 这个默认值是为了防止表格的阴影显示到子页面上面
|
|
60
|
+
onClose
|
|
60
61
|
} = mergedProps;
|
|
61
62
|
const closedRef = (0, import_react.useRef)(false);
|
|
62
63
|
const flowEngine = (0, import_provider.useFlowEngine)();
|
|
@@ -114,11 +115,12 @@ const PageComponent = (0, import_react.forwardRef)((props, ref) => {
|
|
|
114
115
|
type: "text",
|
|
115
116
|
size: "small",
|
|
116
117
|
icon: /* @__PURE__ */ import_react.default.createElement(import_icons.CloseOutlined, null),
|
|
117
|
-
onClick: () => {
|
|
118
|
-
var _a;
|
|
118
|
+
onClick: async () => {
|
|
119
119
|
if (!closedRef.current) {
|
|
120
|
-
|
|
121
|
-
(
|
|
120
|
+
const closed = await (onClose == null ? void 0 : onClose());
|
|
121
|
+
if (closed !== false) {
|
|
122
|
+
closedRef.current = true;
|
|
123
|
+
}
|
|
122
124
|
}
|
|
123
125
|
},
|
|
124
126
|
style: {
|
|
@@ -138,7 +140,7 @@ const PageComponent = (0, import_react.forwardRef)((props, ref) => {
|
|
|
138
140
|
)),
|
|
139
141
|
extra && /* @__PURE__ */ import_react.default.createElement("div", null, extra)
|
|
140
142
|
);
|
|
141
|
-
}, [header, _title, flowEngine.context.themeToken, styles.header,
|
|
143
|
+
}, [header, _title, flowEngine.context.themeToken, styles.header, onClose]);
|
|
142
144
|
const FooterComponent = (0, import_react.useMemo)(() => {
|
|
143
145
|
if (!footer) return null;
|
|
144
146
|
const token = flowEngine.context.themeToken;
|
|
@@ -43,6 +43,10 @@ function encodeFilterByTk(val) {
|
|
|
43
43
|
return encodeURIComponent(String(val));
|
|
44
44
|
}
|
|
45
45
|
__name(encodeFilterByTk, "encodeFilterByTk");
|
|
46
|
+
function hasUsableSourceId(sourceId) {
|
|
47
|
+
return sourceId !== void 0 && sourceId !== null && String(sourceId) !== "";
|
|
48
|
+
}
|
|
49
|
+
__name(hasUsableSourceId, "hasUsableSourceId");
|
|
46
50
|
function generatePathnameFromViewParams(viewParams) {
|
|
47
51
|
if (!viewParams || viewParams.length === 0) {
|
|
48
52
|
return "/admin";
|
|
@@ -62,8 +66,8 @@ function generatePathnameFromViewParams(viewParams) {
|
|
|
62
66
|
segments.push("filterbytk", encoded);
|
|
63
67
|
}
|
|
64
68
|
}
|
|
65
|
-
if (viewParam.sourceId) {
|
|
66
|
-
segments.push("sourceid", viewParam.sourceId);
|
|
69
|
+
if (hasUsableSourceId(viewParam.sourceId)) {
|
|
70
|
+
segments.push("sourceid", String(viewParam.sourceId));
|
|
67
71
|
}
|
|
68
72
|
});
|
|
69
73
|
return "/" + segments.join("/");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import type { FlowView, FlowViewBeforeClosePayload } from './FlowView';
|
|
10
|
+
export declare function runViewBeforeClose(view: FlowView, payload: FlowViewBeforeClosePayload): Promise<boolean>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
var __export = (target, all) => {
|
|
16
|
+
for (var name in all)
|
|
17
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (let key of __getOwnPropNames(from))
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
+
}
|
|
25
|
+
return to;
|
|
26
|
+
};
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var runViewBeforeClose_exports = {};
|
|
29
|
+
__export(runViewBeforeClose_exports, {
|
|
30
|
+
runViewBeforeClose: () => runViewBeforeClose
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(runViewBeforeClose_exports);
|
|
33
|
+
async function runViewBeforeClose(view, payload) {
|
|
34
|
+
var _a;
|
|
35
|
+
if (payload.force) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
const result = await ((_a = view.beforeClose) == null ? void 0 : _a.call(view, payload));
|
|
39
|
+
return result !== false;
|
|
40
|
+
}
|
|
41
|
+
__name(runViewBeforeClose, "runViewBeforeClose");
|
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
+
0 && (module.exports = {
|
|
44
|
+
runViewBeforeClose
|
|
45
|
+
});
|
package/lib/views/useDialog.d.ts
CHANGED
|
@@ -12,9 +12,10 @@ export declare function useDialog(): (React.JSX.Element | {
|
|
|
12
12
|
type: "dialog";
|
|
13
13
|
inputArgs: any;
|
|
14
14
|
preventClose: boolean;
|
|
15
|
+
beforeClose: any;
|
|
15
16
|
destroy: (result?: any) => void;
|
|
16
17
|
update: (newConfig: any) => void;
|
|
17
|
-
close: (result?: any, force?: boolean) =>
|
|
18
|
+
close: (result?: any, force?: boolean) => Promise<boolean>;
|
|
18
19
|
Footer: React.FC<{
|
|
19
20
|
children?: React.ReactNode;
|
|
20
21
|
}>;
|
package/lib/views/useDialog.js
CHANGED
|
@@ -52,6 +52,7 @@ var import_viewEvents = require("./viewEvents");
|
|
|
52
52
|
var import_provider = require("../provider");
|
|
53
53
|
var import_ViewScopedFlowEngine = require("../ViewScopedFlowEngine");
|
|
54
54
|
var import_variablesParams = require("../utils/variablesParams");
|
|
55
|
+
var import_runViewBeforeClose = require("./runViewBeforeClose");
|
|
55
56
|
let uuid = 0;
|
|
56
57
|
function useDialog() {
|
|
57
58
|
const holderRef = React.useRef(null);
|
|
@@ -103,12 +104,16 @@ function useDialog() {
|
|
|
103
104
|
} else {
|
|
104
105
|
ctx.addDelegate(flowContext.engine.context);
|
|
105
106
|
}
|
|
107
|
+
let destroyed = false;
|
|
106
108
|
const currentDialog = {
|
|
107
109
|
type: "dialog",
|
|
108
110
|
inputArgs: config.inputArgs || {},
|
|
109
111
|
preventClose: !!config.preventClose,
|
|
112
|
+
beforeClose: void 0,
|
|
110
113
|
destroy: /* @__PURE__ */ __name((result) => {
|
|
111
114
|
var _a2, _b2, _c2, _d;
|
|
115
|
+
if (destroyed) return;
|
|
116
|
+
destroyed = true;
|
|
112
117
|
(_a2 = config.onClose) == null ? void 0 : _a2.call(config);
|
|
113
118
|
(_b2 = dialogRef.current) == null ? void 0 : _b2.destroy();
|
|
114
119
|
closeFunc == null ? void 0 : closeFunc();
|
|
@@ -122,16 +127,21 @@ function useDialog() {
|
|
|
122
127
|
var _a2;
|
|
123
128
|
return (_a2 = dialogRef.current) == null ? void 0 : _a2.update(newConfig);
|
|
124
129
|
}, "update"),
|
|
125
|
-
close: /* @__PURE__ */ __name((result, force) => {
|
|
130
|
+
close: /* @__PURE__ */ __name(async (result, force) => {
|
|
126
131
|
var _a2, _b2;
|
|
127
132
|
if (config.preventClose && !force) {
|
|
128
|
-
return;
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const shouldClose = await (0, import_runViewBeforeClose.runViewBeforeClose)(currentDialog, { result, force });
|
|
136
|
+
if (!shouldClose) {
|
|
137
|
+
return false;
|
|
129
138
|
}
|
|
130
139
|
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
131
140
|
config.inputArgs.navigation.back();
|
|
132
|
-
return;
|
|
141
|
+
return true;
|
|
133
142
|
}
|
|
134
143
|
currentDialog.destroy(result);
|
|
144
|
+
return true;
|
|
135
145
|
}, "close"),
|
|
136
146
|
Footer: FooterComponent,
|
|
137
147
|
Header: HeaderComponent,
|
|
@@ -154,6 +164,13 @@ function useDialog() {
|
|
|
154
164
|
get: /* @__PURE__ */ __name(() => currentDialog, "get"),
|
|
155
165
|
resolveOnServer: (0, import_variablesParams.createViewRecordResolveOnServer)(ctx, () => (0, import_variablesParams.getViewRecordFromParent)(flowContext, ctx))
|
|
156
166
|
});
|
|
167
|
+
scopedEngine.setDestroyView(() => {
|
|
168
|
+
var _a2, _b2;
|
|
169
|
+
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
170
|
+
config.inputArgs.navigation.back();
|
|
171
|
+
}
|
|
172
|
+
currentDialog.destroy();
|
|
173
|
+
});
|
|
157
174
|
(0, import_createViewMeta.registerPopupVariable)(ctx, currentDialog);
|
|
158
175
|
const DialogWithContext = (0, import__.observer)(
|
|
159
176
|
() => {
|
package/lib/views/useDrawer.d.ts
CHANGED
|
@@ -13,9 +13,10 @@ export declare function useDrawer(): (React.JSX.Element | {
|
|
|
13
13
|
type: "drawer";
|
|
14
14
|
inputArgs: any;
|
|
15
15
|
preventClose: boolean;
|
|
16
|
+
beforeClose: any;
|
|
16
17
|
destroy: (result?: any) => void;
|
|
17
18
|
update: (newConfig: any) => void;
|
|
18
|
-
close: (result?: any, force?: boolean) =>
|
|
19
|
+
close: (result?: any, force?: boolean) => Promise<boolean>;
|
|
19
20
|
Footer: React.FC<{
|
|
20
21
|
children?: React.ReactNode;
|
|
21
22
|
}>;
|
package/lib/views/useDrawer.js
CHANGED
|
@@ -52,6 +52,7 @@ var import_viewEvents = require("./viewEvents");
|
|
|
52
52
|
var import_provider = require("../provider");
|
|
53
53
|
var import_ViewScopedFlowEngine = require("../ViewScopedFlowEngine");
|
|
54
54
|
var import_variablesParams = require("../utils/variablesParams");
|
|
55
|
+
var import_runViewBeforeClose = require("./runViewBeforeClose");
|
|
55
56
|
function useDrawer() {
|
|
56
57
|
const holderRef = React.useRef(null);
|
|
57
58
|
const drawerList = React.useMemo(() => import__.observable.shallow({ value: [] }), []);
|
|
@@ -122,12 +123,16 @@ function useDrawer() {
|
|
|
122
123
|
} else {
|
|
123
124
|
ctx.addDelegate(flowContext.engine.context);
|
|
124
125
|
}
|
|
126
|
+
let destroyed = false;
|
|
125
127
|
const currentDrawer = {
|
|
126
128
|
type: "drawer",
|
|
127
129
|
inputArgs: config.inputArgs || {},
|
|
128
130
|
preventClose: !!config.preventClose,
|
|
131
|
+
beforeClose: void 0,
|
|
129
132
|
destroy: /* @__PURE__ */ __name((result) => {
|
|
130
133
|
var _a2, _b2, _c, _d;
|
|
134
|
+
if (destroyed) return;
|
|
135
|
+
destroyed = true;
|
|
131
136
|
(_a2 = config.onClose) == null ? void 0 : _a2.call(config);
|
|
132
137
|
(_b2 = drawerRef.current) == null ? void 0 : _b2.destroy();
|
|
133
138
|
closeFunc == null ? void 0 : closeFunc();
|
|
@@ -141,16 +146,21 @@ function useDrawer() {
|
|
|
141
146
|
var _a2;
|
|
142
147
|
return (_a2 = drawerRef.current) == null ? void 0 : _a2.update(newConfig);
|
|
143
148
|
}, "update"),
|
|
144
|
-
close: /* @__PURE__ */ __name((result, force) => {
|
|
149
|
+
close: /* @__PURE__ */ __name(async (result, force) => {
|
|
145
150
|
var _a2, _b2;
|
|
146
151
|
if (config.preventClose && !force) {
|
|
147
|
-
return;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
const shouldClose = await (0, import_runViewBeforeClose.runViewBeforeClose)(currentDrawer, { result, force });
|
|
155
|
+
if (!shouldClose) {
|
|
156
|
+
return false;
|
|
148
157
|
}
|
|
149
158
|
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
150
159
|
config.inputArgs.navigation.back();
|
|
151
|
-
return;
|
|
160
|
+
return true;
|
|
152
161
|
}
|
|
153
162
|
currentDrawer.destroy(result);
|
|
163
|
+
return true;
|
|
154
164
|
}, "close"),
|
|
155
165
|
Footer: FooterComponent,
|
|
156
166
|
Header: HeaderComponent,
|
|
@@ -173,6 +183,13 @@ function useDrawer() {
|
|
|
173
183
|
get: /* @__PURE__ */ __name(() => currentDrawer, "get"),
|
|
174
184
|
resolveOnServer: (0, import_variablesParams.createViewRecordResolveOnServer)(ctx, () => (0, import_variablesParams.getViewRecordFromParent)(flowContext, ctx))
|
|
175
185
|
});
|
|
186
|
+
scopedEngine.setDestroyView(() => {
|
|
187
|
+
var _a2, _b2;
|
|
188
|
+
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
189
|
+
config.inputArgs.navigation.back();
|
|
190
|
+
}
|
|
191
|
+
currentDrawer.destroy();
|
|
192
|
+
});
|
|
176
193
|
(0, import_createViewMeta.registerPopupVariable)(ctx, currentDrawer);
|
|
177
194
|
const DrawerWithContext = React.memo(
|
|
178
195
|
(0, import__.observer)((props) => {
|
package/lib/views/usePage.d.ts
CHANGED
|
@@ -12,26 +12,20 @@ export declare const GLOBAL_EMBED_CONTAINER_ID = "nocobase-embed-container";
|
|
|
12
12
|
/** Dataset key used to signal embed replacement in progress (skip style reset on close) */
|
|
13
13
|
export declare const EMBED_REPLACING_DATA_KEY = "nocobaseEmbedReplacing";
|
|
14
14
|
export declare function usePage(): (React.JSX.Element | {
|
|
15
|
-
open: (config: any, flowContext: any) => Promise<
|
|
15
|
+
open: (config: any, flowContext: any) => Promise<any> & {
|
|
16
16
|
type: "embed";
|
|
17
17
|
inputArgs: any;
|
|
18
18
|
preventClose: boolean;
|
|
19
|
+
Header: any;
|
|
20
|
+
Footer: any;
|
|
21
|
+
beforeClose: any;
|
|
22
|
+
close: (result?: any, force?: boolean) => Promise<any>;
|
|
19
23
|
destroy: (result?: any) => void;
|
|
20
24
|
update: (newConfig: any) => void;
|
|
21
|
-
close: (result?: any, force?: boolean) => void;
|
|
22
|
-
Header: React.FC<{
|
|
23
|
-
title?: React.ReactNode;
|
|
24
|
-
extra?: React.ReactNode;
|
|
25
|
-
}>;
|
|
26
|
-
Footer: React.FC<{
|
|
27
|
-
children?: React.ReactNode;
|
|
28
|
-
}>;
|
|
29
25
|
setFooter: (footer: React.ReactNode) => void;
|
|
30
26
|
setHeader: (header: {
|
|
31
27
|
title?: React.ReactNode;
|
|
32
28
|
extra?: React.ReactNode;
|
|
33
29
|
}) => void;
|
|
34
|
-
navigation: any;
|
|
35
|
-
readonly record: unknown;
|
|
36
30
|
};
|
|
37
31
|
})[];
|