@nocobase/flow-engine 2.1.0-alpha.4 → 2.1.0-alpha.45
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/FlowContextProvider.d.ts +5 -1
- package/lib/FlowContextProvider.js +9 -2
- 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 +76 -11
- 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 +293 -52
- 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 +84 -0
- package/lib/data-source/index.js +259 -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 +46 -1
- package/lib/flowEngine.d.ts +151 -1
- package/lib/flowEngine.js +392 -18
- 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 +81 -21
- 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.d.ts +5 -1
- package/lib/utils/parsePathnameToViewParams.js +29 -5
- 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.d.ts +12 -2
- package/lib/views/ViewNavigation.js +28 -9
- package/lib/views/createViewMeta.js +114 -50
- package/lib/views/inheritLayoutContext.d.ts +10 -0
- package/lib/views/inheritLayoutContext.js +50 -0
- 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 +22 -3
- package/lib/views/useDrawer.d.ts +2 -1
- package/lib/views/useDrawer.js +22 -3
- package/lib/views/usePage.d.ts +5 -11
- package/lib/views/usePage.js +304 -144
- package/package.json +6 -5
- package/src/FlowContextProvider.tsx +9 -1
- package/src/JSRunner.ts +68 -4
- package/src/ViewScopedFlowEngine.ts +4 -0
- package/src/__tests__/JSRunner.test.ts +27 -1
- package/src/__tests__/createViewMeta.popup.test.ts +115 -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__/flowEngine.removeModel.test.ts +47 -3
- 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 +99 -11
- 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 +194 -5
- 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 +332 -56
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +522 -37
- 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 +322 -6
- package/src/executor/FlowExecutor.ts +35 -10
- package/src/executor/__tests__/flowExecutor.test.ts +85 -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 +50 -3
- package/src/flowEngine.ts +449 -14
- 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__/flowEngine.resolveUse.test.ts +0 -15
- package/src/models/__tests__/flowModel.test.ts +80 -37
- package/src/models/flowModel.tsx +122 -36
- 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 +28 -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 +47 -7
- 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 +46 -9
- package/src/views/__tests__/FlowView.usePage.test.tsx +243 -3
- package/src/views/__tests__/ViewNavigation.test.ts +52 -0
- package/src/views/__tests__/inheritLayoutContext.test.ts +53 -0
- package/src/views/__tests__/runViewBeforeClose.test.ts +30 -0
- package/src/views/__tests__/useDialog.closeDestroy.test.tsx +13 -12
- package/src/views/createViewMeta.ts +106 -34
- package/src/views/inheritLayoutContext.ts +26 -0
- package/src/views/runViewBeforeClose.ts +19 -0
- package/src/views/useDialog.tsx +27 -3
- package/src/views/useDrawer.tsx +27 -3
- package/src/views/usePage.tsx +367 -179
|
@@ -0,0 +1,50 @@
|
|
|
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 inheritLayoutContext_exports = {};
|
|
29
|
+
__export(inheritLayoutContext_exports, {
|
|
30
|
+
inheritLayoutContextForDetachedView: () => inheritLayoutContextForDetachedView
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(inheritLayoutContext_exports);
|
|
33
|
+
var import_flowContext = require("../flowContext");
|
|
34
|
+
function inheritLayoutContextForDetachedView(viewContext, sourceContext) {
|
|
35
|
+
var _a;
|
|
36
|
+
const layoutContext = sourceContext == null ? void 0 : sourceContext.layoutContext;
|
|
37
|
+
const engineContext = (_a = sourceContext == null ? void 0 : sourceContext.engine) == null ? void 0 : _a.context;
|
|
38
|
+
if (!(layoutContext instanceof import_flowContext.FlowContext)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (layoutContext === sourceContext || layoutContext === engineContext) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
viewContext.addDelegate(layoutContext);
|
|
45
|
+
}
|
|
46
|
+
__name(inheritLayoutContextForDetachedView, "inheritLayoutContextForDetachedView");
|
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
48
|
+
0 && (module.exports = {
|
|
49
|
+
inheritLayoutContextForDetachedView
|
|
50
|
+
});
|
|
@@ -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,8 @@ 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");
|
|
56
|
+
var import_inheritLayoutContext = require("./inheritLayoutContext");
|
|
55
57
|
let uuid = 0;
|
|
56
58
|
function useDialog() {
|
|
57
59
|
const holderRef = React.useRef(null);
|
|
@@ -102,13 +104,18 @@ function useDialog() {
|
|
|
102
104
|
ctx.addDelegate(flowContext);
|
|
103
105
|
} else {
|
|
104
106
|
ctx.addDelegate(flowContext.engine.context);
|
|
107
|
+
(0, import_inheritLayoutContext.inheritLayoutContextForDetachedView)(ctx, flowContext);
|
|
105
108
|
}
|
|
109
|
+
let destroyed = false;
|
|
106
110
|
const currentDialog = {
|
|
107
111
|
type: "dialog",
|
|
108
112
|
inputArgs: config.inputArgs || {},
|
|
109
113
|
preventClose: !!config.preventClose,
|
|
114
|
+
beforeClose: void 0,
|
|
110
115
|
destroy: /* @__PURE__ */ __name((result) => {
|
|
111
116
|
var _a2, _b2, _c2, _d;
|
|
117
|
+
if (destroyed) return;
|
|
118
|
+
destroyed = true;
|
|
112
119
|
(_a2 = config.onClose) == null ? void 0 : _a2.call(config);
|
|
113
120
|
(_b2 = dialogRef.current) == null ? void 0 : _b2.destroy();
|
|
114
121
|
closeFunc == null ? void 0 : closeFunc();
|
|
@@ -122,16 +129,21 @@ function useDialog() {
|
|
|
122
129
|
var _a2;
|
|
123
130
|
return (_a2 = dialogRef.current) == null ? void 0 : _a2.update(newConfig);
|
|
124
131
|
}, "update"),
|
|
125
|
-
close: /* @__PURE__ */ __name((result, force) => {
|
|
132
|
+
close: /* @__PURE__ */ __name(async (result, force) => {
|
|
126
133
|
var _a2, _b2;
|
|
127
134
|
if (config.preventClose && !force) {
|
|
128
|
-
return;
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const shouldClose = await (0, import_runViewBeforeClose.runViewBeforeClose)(currentDialog, { result, force });
|
|
138
|
+
if (!shouldClose) {
|
|
139
|
+
return false;
|
|
129
140
|
}
|
|
130
141
|
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
131
142
|
config.inputArgs.navigation.back();
|
|
132
|
-
return;
|
|
143
|
+
return true;
|
|
133
144
|
}
|
|
134
145
|
currentDialog.destroy(result);
|
|
146
|
+
return true;
|
|
135
147
|
}, "close"),
|
|
136
148
|
Footer: FooterComponent,
|
|
137
149
|
Header: HeaderComponent,
|
|
@@ -154,6 +166,13 @@ function useDialog() {
|
|
|
154
166
|
get: /* @__PURE__ */ __name(() => currentDialog, "get"),
|
|
155
167
|
resolveOnServer: (0, import_variablesParams.createViewRecordResolveOnServer)(ctx, () => (0, import_variablesParams.getViewRecordFromParent)(flowContext, ctx))
|
|
156
168
|
});
|
|
169
|
+
scopedEngine.setDestroyView(() => {
|
|
170
|
+
var _a2, _b2;
|
|
171
|
+
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
172
|
+
config.inputArgs.navigation.back();
|
|
173
|
+
}
|
|
174
|
+
currentDialog.destroy();
|
|
175
|
+
});
|
|
157
176
|
(0, import_createViewMeta.registerPopupVariable)(ctx, currentDialog);
|
|
158
177
|
const DialogWithContext = (0, import__.observer)(
|
|
159
178
|
() => {
|
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,8 @@ 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");
|
|
56
|
+
var import_inheritLayoutContext = require("./inheritLayoutContext");
|
|
55
57
|
function useDrawer() {
|
|
56
58
|
const holderRef = React.useRef(null);
|
|
57
59
|
const drawerList = React.useMemo(() => import__.observable.shallow({ value: [] }), []);
|
|
@@ -121,13 +123,18 @@ function useDrawer() {
|
|
|
121
123
|
ctx.addDelegate(flowContext);
|
|
122
124
|
} else {
|
|
123
125
|
ctx.addDelegate(flowContext.engine.context);
|
|
126
|
+
(0, import_inheritLayoutContext.inheritLayoutContextForDetachedView)(ctx, flowContext);
|
|
124
127
|
}
|
|
128
|
+
let destroyed = false;
|
|
125
129
|
const currentDrawer = {
|
|
126
130
|
type: "drawer",
|
|
127
131
|
inputArgs: config.inputArgs || {},
|
|
128
132
|
preventClose: !!config.preventClose,
|
|
133
|
+
beforeClose: void 0,
|
|
129
134
|
destroy: /* @__PURE__ */ __name((result) => {
|
|
130
135
|
var _a2, _b2, _c, _d;
|
|
136
|
+
if (destroyed) return;
|
|
137
|
+
destroyed = true;
|
|
131
138
|
(_a2 = config.onClose) == null ? void 0 : _a2.call(config);
|
|
132
139
|
(_b2 = drawerRef.current) == null ? void 0 : _b2.destroy();
|
|
133
140
|
closeFunc == null ? void 0 : closeFunc();
|
|
@@ -141,16 +148,21 @@ function useDrawer() {
|
|
|
141
148
|
var _a2;
|
|
142
149
|
return (_a2 = drawerRef.current) == null ? void 0 : _a2.update(newConfig);
|
|
143
150
|
}, "update"),
|
|
144
|
-
close: /* @__PURE__ */ __name((result, force) => {
|
|
151
|
+
close: /* @__PURE__ */ __name(async (result, force) => {
|
|
145
152
|
var _a2, _b2;
|
|
146
153
|
if (config.preventClose && !force) {
|
|
147
|
-
return;
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
const shouldClose = await (0, import_runViewBeforeClose.runViewBeforeClose)(currentDrawer, { result, force });
|
|
157
|
+
if (!shouldClose) {
|
|
158
|
+
return false;
|
|
148
159
|
}
|
|
149
160
|
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
150
161
|
config.inputArgs.navigation.back();
|
|
151
|
-
return;
|
|
162
|
+
return true;
|
|
152
163
|
}
|
|
153
164
|
currentDrawer.destroy(result);
|
|
165
|
+
return true;
|
|
154
166
|
}, "close"),
|
|
155
167
|
Footer: FooterComponent,
|
|
156
168
|
Header: HeaderComponent,
|
|
@@ -173,6 +185,13 @@ function useDrawer() {
|
|
|
173
185
|
get: /* @__PURE__ */ __name(() => currentDrawer, "get"),
|
|
174
186
|
resolveOnServer: (0, import_variablesParams.createViewRecordResolveOnServer)(ctx, () => (0, import_variablesParams.getViewRecordFromParent)(flowContext, ctx))
|
|
175
187
|
});
|
|
188
|
+
scopedEngine.setDestroyView(() => {
|
|
189
|
+
var _a2, _b2;
|
|
190
|
+
if (config.triggerByRouter && ((_b2 = (_a2 = config.inputArgs) == null ? void 0 : _a2.navigation) == null ? void 0 : _b2.back)) {
|
|
191
|
+
config.inputArgs.navigation.back();
|
|
192
|
+
}
|
|
193
|
+
currentDrawer.destroy();
|
|
194
|
+
});
|
|
176
195
|
(0, import_createViewMeta.registerPopupVariable)(ctx, currentDrawer);
|
|
177
196
|
const DrawerWithContext = React.memo(
|
|
178
197
|
(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
|
})[];
|