@tmagic/editor 1.8.0-beta.0 → 1.8.0-beta.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/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +16 -3
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/es/layouts/sidebar/layer/use-node-status.js +37 -3
- package/dist/es/utils/editor.js +1 -1
- package/dist/tmagic-editor.umd.cjs +140 -24
- package/package.json +7 -7
- package/src/fields/DataSourceFieldSelect/Index.vue +8 -1
- package/src/fields/StyleSetter/Index.vue +6 -0
- package/src/fields/StyleSetter/components/Border.vue +15 -1
- package/src/fields/StyleSetter/components/Box.vue +2 -0
- package/src/fields/StyleSetter/pro/Background.vue +15 -1
- package/src/fields/StyleSetter/pro/Border.vue +24 -2
- package/src/fields/StyleSetter/pro/Font.vue +15 -1
- package/src/fields/StyleSetter/pro/Layout.vue +17 -1
- package/src/fields/StyleSetter/pro/Position.vue +15 -1
- package/src/fields/StyleSetter/pro/Transform.vue +15 -1
- package/src/layouts/sidebar/layer/use-node-status.ts +55 -6
- package/src/utils/editor.ts +4 -1
- package/types/index.d.ts +2 -0
|
@@ -95,6 +95,10 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
95
95
|
emit("change", [dsId], eventData);
|
|
96
96
|
}
|
|
97
97
|
};
|
|
98
|
+
const onToggleDataSourceFieldSelectHandler = () => {
|
|
99
|
+
if (props.disabled || mForm?.isCompare) return;
|
|
100
|
+
showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value;
|
|
101
|
+
};
|
|
98
102
|
return (_ctx, _cache) => {
|
|
99
103
|
return openBlock(), createElementBlock("div", _hoisted_1, [!disabledDataSource.value && (showDataSourceFieldSelect.value || !__props.config.fieldConfig) ? (openBlock(), createBlock(FieldSelect_default, {
|
|
100
104
|
key: 0,
|
|
@@ -144,11 +148,16 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
144
148
|
default: withCtx(() => [createVNode(unref(TMagicButton), {
|
|
145
149
|
type: showDataSourceFieldSelect.value ? "primary" : "default",
|
|
146
150
|
size: __props.size,
|
|
147
|
-
|
|
151
|
+
disabled: __props.disabled || unref(mForm)?.isCompare,
|
|
152
|
+
onClick: onToggleDataSourceFieldSelectHandler
|
|
148
153
|
}, {
|
|
149
154
|
default: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
|
|
150
155
|
_: 1
|
|
151
|
-
}, 8, [
|
|
156
|
+
}, 8, [
|
|
157
|
+
"type",
|
|
158
|
+
"size",
|
|
159
|
+
"disabled"
|
|
160
|
+
])]),
|
|
152
161
|
_: 1
|
|
153
162
|
}, 8, ["disabled"])) : createCommentVNode("v-if", true)]);
|
|
154
163
|
};
|
|
@@ -24,7 +24,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
24
24
|
lastValues: {},
|
|
25
25
|
isCompare: { type: Boolean }
|
|
26
26
|
},
|
|
27
|
-
emits: ["change"],
|
|
27
|
+
emits: ["change", "addDiffCount"],
|
|
28
28
|
setup(__props, { emit: __emit }) {
|
|
29
29
|
const props = __props;
|
|
30
30
|
const emit = __emit;
|
|
@@ -63,6 +63,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
63
63
|
});
|
|
64
64
|
emit("change", v, eventData);
|
|
65
65
|
};
|
|
66
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
66
67
|
return (_ctx, _cache) => {
|
|
67
68
|
return openBlock(), createBlock(unref(TMagicCollapse), {
|
|
68
69
|
class: "m-fields-style-setter",
|
|
@@ -78,11 +79,16 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
78
79
|
default: withCtx(() => [item.component ? (openBlock(), createBlock(resolveDynamicComponent(item.component), {
|
|
79
80
|
key: 0,
|
|
80
81
|
values: __props.model[__props.name],
|
|
82
|
+
"last-values": __props.lastValues?.[__props.name],
|
|
83
|
+
"is-compare": __props.isCompare,
|
|
81
84
|
size: __props.size,
|
|
82
85
|
disabled: __props.disabled,
|
|
83
|
-
onChange: change
|
|
86
|
+
onChange: change,
|
|
87
|
+
onAddDiffCount
|
|
84
88
|
}, null, 40, [
|
|
85
89
|
"values",
|
|
90
|
+
"last-values",
|
|
91
|
+
"is-compare",
|
|
86
92
|
"size",
|
|
87
93
|
"disabled"
|
|
88
94
|
])) : createCommentVNode("v-if", true)]),
|
|
@@ -11,10 +11,12 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
11
11
|
__name: "Border",
|
|
12
12
|
props: {
|
|
13
13
|
model: {},
|
|
14
|
+
lastValues: {},
|
|
15
|
+
isCompare: { type: Boolean },
|
|
14
16
|
disabled: { type: Boolean },
|
|
15
17
|
size: {}
|
|
16
18
|
},
|
|
17
|
-
emits: ["change"],
|
|
19
|
+
emits: ["change", "addDiffCount"],
|
|
18
20
|
setup(__props, { emit: __emit }) {
|
|
19
21
|
const direction = ref("");
|
|
20
22
|
const config = computed(() => defineFormItem({ items: [
|
|
@@ -57,6 +59,7 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
57
59
|
emit("change", record.value, { modifyKey: record.propPath });
|
|
58
60
|
});
|
|
59
61
|
};
|
|
62
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
60
63
|
return (_ctx, _cache) => {
|
|
61
64
|
return openBlock(), createElementBlock("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [
|
|
62
65
|
createElementVNode("div", _hoisted_3, [createElementVNode("div", {
|
|
@@ -84,12 +87,17 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
84
87
|
]), createElementVNode("div", _hoisted_6, [createVNode(unref(MContainer), {
|
|
85
88
|
config: config.value,
|
|
86
89
|
model: __props.model,
|
|
90
|
+
"last-values": __props.lastValues,
|
|
91
|
+
"is-compare": __props.isCompare,
|
|
87
92
|
size: __props.size,
|
|
88
93
|
disabled: __props.disabled,
|
|
89
|
-
onChange: change
|
|
94
|
+
onChange: change,
|
|
95
|
+
onAddDiffCount
|
|
90
96
|
}, null, 8, [
|
|
91
97
|
"config",
|
|
92
98
|
"model",
|
|
99
|
+
"last-values",
|
|
100
|
+
"is-compare",
|
|
93
101
|
"size",
|
|
94
102
|
"disabled"
|
|
95
103
|
])])]);
|
|
@@ -17,7 +17,9 @@ var Box_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComp
|
|
|
17
17
|
props: {
|
|
18
18
|
disabled: { type: Boolean },
|
|
19
19
|
size: {},
|
|
20
|
-
model: {}
|
|
20
|
+
model: {},
|
|
21
|
+
lastValues: {},
|
|
22
|
+
isCompare: { type: Boolean }
|
|
21
23
|
},
|
|
22
24
|
emits: ["change"],
|
|
23
25
|
setup(__props, { emit: __emit }) {
|
|
@@ -10,10 +10,12 @@ var Background_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
10
10
|
__name: "Background",
|
|
11
11
|
props: {
|
|
12
12
|
values: {},
|
|
13
|
+
lastValues: {},
|
|
14
|
+
isCompare: { type: Boolean },
|
|
13
15
|
disabled: { type: Boolean },
|
|
14
16
|
size: {}
|
|
15
17
|
},
|
|
16
|
-
emits: ["change"],
|
|
18
|
+
emits: ["change", "addDiffCount"],
|
|
17
19
|
setup(__props, { emit: __emit }) {
|
|
18
20
|
const emit = __emit;
|
|
19
21
|
const config = defineFormItem({ items: [
|
|
@@ -95,16 +97,22 @@ var Background_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
95
97
|
const change = (value, eventData) => {
|
|
96
98
|
emit("change", value, eventData);
|
|
97
99
|
};
|
|
100
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
98
101
|
return (_ctx, _cache) => {
|
|
99
102
|
return openBlock(), createBlock(unref(MContainer), {
|
|
100
103
|
config: unref(config),
|
|
101
104
|
model: __props.values,
|
|
105
|
+
"last-values": __props.lastValues,
|
|
106
|
+
"is-compare": __props.isCompare,
|
|
102
107
|
size: __props.size,
|
|
103
108
|
disabled: __props.disabled,
|
|
104
|
-
onChange: change
|
|
109
|
+
onChange: change,
|
|
110
|
+
onAddDiffCount
|
|
105
111
|
}, null, 8, [
|
|
106
112
|
"config",
|
|
107
113
|
"model",
|
|
114
|
+
"last-values",
|
|
115
|
+
"is-compare",
|
|
108
116
|
"size",
|
|
109
117
|
"disabled"
|
|
110
118
|
]);
|
|
@@ -6,10 +6,12 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
6
6
|
__name: "Border",
|
|
7
7
|
props: {
|
|
8
8
|
values: {},
|
|
9
|
+
lastValues: {},
|
|
10
|
+
isCompare: { type: Boolean },
|
|
9
11
|
disabled: { type: Boolean },
|
|
10
12
|
size: {}
|
|
11
13
|
},
|
|
12
|
-
emits: ["change"],
|
|
14
|
+
emits: ["change", "addDiffCount"],
|
|
13
15
|
setup(__props, { emit: __emit }) {
|
|
14
16
|
const emit = __emit;
|
|
15
17
|
const config = defineFormItem({ items: [{
|
|
@@ -22,25 +24,36 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
22
24
|
const change = (value, eventData) => {
|
|
23
25
|
emit("change", value, eventData);
|
|
24
26
|
};
|
|
27
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
25
28
|
return (_ctx, _cache) => {
|
|
26
29
|
return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(MContainer), {
|
|
27
30
|
config: unref(config),
|
|
28
31
|
model: __props.values,
|
|
32
|
+
"last-values": __props.lastValues,
|
|
33
|
+
"is-compare": __props.isCompare,
|
|
29
34
|
size: __props.size,
|
|
30
35
|
disabled: __props.disabled,
|
|
31
|
-
onChange: change
|
|
36
|
+
onChange: change,
|
|
37
|
+
onAddDiffCount
|
|
32
38
|
}, null, 8, [
|
|
33
39
|
"config",
|
|
34
40
|
"model",
|
|
41
|
+
"last-values",
|
|
42
|
+
"is-compare",
|
|
35
43
|
"size",
|
|
36
44
|
"disabled"
|
|
37
45
|
]), createVNode(Border_default, {
|
|
38
46
|
model: __props.values,
|
|
47
|
+
"last-values": __props.lastValues,
|
|
48
|
+
"is-compare": __props.isCompare,
|
|
39
49
|
size: __props.size,
|
|
40
50
|
disabled: __props.disabled,
|
|
41
|
-
onChange: change
|
|
51
|
+
onChange: change,
|
|
52
|
+
onAddDiffCount
|
|
42
53
|
}, null, 8, [
|
|
43
54
|
"model",
|
|
55
|
+
"last-values",
|
|
56
|
+
"is-compare",
|
|
44
57
|
"size",
|
|
45
58
|
"disabled"
|
|
46
59
|
])], 64);
|
|
@@ -8,10 +8,12 @@ var Font_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
|
|
|
8
8
|
__name: "Font",
|
|
9
9
|
props: {
|
|
10
10
|
values: {},
|
|
11
|
+
lastValues: {},
|
|
12
|
+
isCompare: { type: Boolean },
|
|
11
13
|
disabled: { type: Boolean },
|
|
12
14
|
size: {}
|
|
13
15
|
},
|
|
14
|
-
emits: ["change"],
|
|
16
|
+
emits: ["change", "addDiffCount"],
|
|
15
17
|
setup(__props, { emit: __emit }) {
|
|
16
18
|
const emit = __emit;
|
|
17
19
|
const config = defineFormItem({ items: [
|
|
@@ -79,16 +81,22 @@ var Font_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
|
|
|
79
81
|
const change = (value, eventData) => {
|
|
80
82
|
emit("change", value, eventData);
|
|
81
83
|
};
|
|
84
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
82
85
|
return (_ctx, _cache) => {
|
|
83
86
|
return openBlock(), createBlock(unref(MContainer), {
|
|
84
87
|
config: unref(config),
|
|
85
88
|
model: __props.values,
|
|
89
|
+
"last-values": __props.lastValues,
|
|
90
|
+
"is-compare": __props.isCompare,
|
|
86
91
|
size: __props.size,
|
|
87
92
|
disabled: __props.disabled,
|
|
88
|
-
onChange: change
|
|
93
|
+
onChange: change,
|
|
94
|
+
onAddDiffCount
|
|
89
95
|
}, null, 8, [
|
|
90
96
|
"config",
|
|
91
97
|
"model",
|
|
98
|
+
"last-values",
|
|
99
|
+
"is-compare",
|
|
92
100
|
"size",
|
|
93
101
|
"disabled"
|
|
94
102
|
]);
|
|
@@ -20,10 +20,12 @@ var Layout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
20
20
|
__name: "Layout",
|
|
21
21
|
props: {
|
|
22
22
|
values: {},
|
|
23
|
+
lastValues: {},
|
|
24
|
+
isCompare: { type: Boolean },
|
|
23
25
|
disabled: { type: Boolean },
|
|
24
26
|
size: {}
|
|
25
27
|
},
|
|
26
|
-
emits: ["change"],
|
|
28
|
+
emits: ["change", "addDiffCount"],
|
|
27
29
|
setup(__props, { emit: __emit }) {
|
|
28
30
|
const emit = __emit;
|
|
29
31
|
const config = defineFormItem({ items: [
|
|
@@ -259,25 +261,35 @@ var Layout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
259
261
|
const change = (value, eventData) => {
|
|
260
262
|
emit("change", value, eventData);
|
|
261
263
|
};
|
|
264
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
262
265
|
return (_ctx, _cache) => {
|
|
263
266
|
return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(MContainer), {
|
|
264
267
|
config: unref(config),
|
|
265
268
|
model: __props.values,
|
|
269
|
+
"last-values": __props.lastValues,
|
|
270
|
+
"is-compare": __props.isCompare,
|
|
266
271
|
size: __props.size,
|
|
267
272
|
disabled: __props.disabled,
|
|
268
|
-
onChange: change
|
|
273
|
+
onChange: change,
|
|
274
|
+
onAddDiffCount
|
|
269
275
|
}, null, 8, [
|
|
270
276
|
"config",
|
|
271
277
|
"model",
|
|
278
|
+
"last-values",
|
|
279
|
+
"is-compare",
|
|
272
280
|
"size",
|
|
273
281
|
"disabled"
|
|
274
282
|
]), withDirectives(createVNode(Box_default, {
|
|
275
283
|
model: __props.values,
|
|
284
|
+
"last-values": __props.lastValues,
|
|
285
|
+
"is-compare": __props.isCompare,
|
|
276
286
|
size: __props.size,
|
|
277
287
|
disabled: __props.disabled,
|
|
278
288
|
onChange: change
|
|
279
289
|
}, null, 8, [
|
|
280
290
|
"model",
|
|
291
|
+
"last-values",
|
|
292
|
+
"is-compare",
|
|
281
293
|
"size",
|
|
282
294
|
"disabled"
|
|
283
295
|
]), [[vShow, !["fixed", "absolute"].includes(__props.values.position)]])], 64);
|
|
@@ -5,10 +5,12 @@ var Position_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
5
5
|
__name: "Position",
|
|
6
6
|
props: {
|
|
7
7
|
values: {},
|
|
8
|
+
lastValues: {},
|
|
9
|
+
isCompare: { type: Boolean },
|
|
8
10
|
disabled: { type: Boolean },
|
|
9
11
|
size: {}
|
|
10
12
|
},
|
|
11
|
-
emits: ["change"],
|
|
13
|
+
emits: ["change", "addDiffCount"],
|
|
12
14
|
setup(__props, { emit: __emit }) {
|
|
13
15
|
const props = __props;
|
|
14
16
|
const emit = __emit;
|
|
@@ -76,16 +78,22 @@ var Position_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
76
78
|
const change = (value, eventData) => {
|
|
77
79
|
emit("change", value, eventData);
|
|
78
80
|
};
|
|
81
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
79
82
|
return (_ctx, _cache) => {
|
|
80
83
|
return openBlock(), createBlock(unref(MContainer), {
|
|
81
84
|
config: unref(config),
|
|
82
85
|
model: __props.values,
|
|
86
|
+
"last-values": __props.lastValues,
|
|
87
|
+
"is-compare": __props.isCompare,
|
|
83
88
|
size: __props.size,
|
|
84
89
|
disabled: __props.disabled,
|
|
85
|
-
onChange: change
|
|
90
|
+
onChange: change,
|
|
91
|
+
onAddDiffCount
|
|
86
92
|
}, null, 8, [
|
|
87
93
|
"config",
|
|
88
94
|
"model",
|
|
95
|
+
"last-values",
|
|
96
|
+
"is-compare",
|
|
89
97
|
"size",
|
|
90
98
|
"disabled"
|
|
91
99
|
]);
|
|
@@ -5,10 +5,12 @@ var Transform_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
5
5
|
__name: "Transform",
|
|
6
6
|
props: {
|
|
7
7
|
values: {},
|
|
8
|
+
lastValues: {},
|
|
9
|
+
isCompare: { type: Boolean },
|
|
8
10
|
disabled: { type: Boolean },
|
|
9
11
|
size: {}
|
|
10
12
|
},
|
|
11
|
-
emits: ["change"],
|
|
13
|
+
emits: ["change", "addDiffCount"],
|
|
12
14
|
setup(__props, { emit: __emit }) {
|
|
13
15
|
const emit = __emit;
|
|
14
16
|
const config = defineFormItem({ items: [{
|
|
@@ -34,16 +36,22 @@ var Transform_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
34
36
|
const change = (value, eventData) => {
|
|
35
37
|
emit("change", value, eventData);
|
|
36
38
|
};
|
|
39
|
+
const onAddDiffCount = () => emit("addDiffCount");
|
|
37
40
|
return (_ctx, _cache) => {
|
|
38
41
|
return openBlock(), createBlock(unref(MContainer), {
|
|
39
42
|
config: unref(config),
|
|
40
43
|
model: __props.values,
|
|
44
|
+
"last-values": __props.lastValues,
|
|
45
|
+
"is-compare": __props.isCompare,
|
|
41
46
|
size: __props.size,
|
|
42
47
|
disabled: __props.disabled,
|
|
43
|
-
onChange: change
|
|
48
|
+
onChange: change,
|
|
49
|
+
onAddDiffCount
|
|
44
50
|
}, null, 8, [
|
|
45
51
|
"config",
|
|
46
52
|
"model",
|
|
53
|
+
"last-values",
|
|
54
|
+
"is-compare",
|
|
47
55
|
"size",
|
|
48
56
|
"disabled"
|
|
49
57
|
]);
|
|
@@ -27,10 +27,43 @@ var useNodeStatus = ({ editorService }) => {
|
|
|
27
27
|
const nodeStatusMaps = ref(/* @__PURE__ */ new Map());
|
|
28
28
|
/** 当前页面的节点状态 */
|
|
29
29
|
const nodeStatusMap = computed(() => page.value ? nodeStatusMaps.value.get(page.value.id) : /* @__PURE__ */ new Map());
|
|
30
|
-
watch(
|
|
31
|
-
if (!
|
|
32
|
-
nodeStatusMaps.value.set(
|
|
30
|
+
watch(page, (newPage) => {
|
|
31
|
+
if (!newPage?.id) return;
|
|
32
|
+
nodeStatusMaps.value.set(newPage.id, createPageNodeStatus(newPage, nodeStatusMaps.value.get(newPage.id)));
|
|
33
33
|
}, { immediate: true });
|
|
34
|
+
/**
|
|
35
|
+
* root 整体被替换时(外部 modelValue 变化、历史版本恢复、套件编辑模式进入/退出等):
|
|
36
|
+
* - 仅 watch page 引用还不够,因为 root-change 同步触发时 page 还是旧引用,
|
|
37
|
+
* 等 initService 的异步 IIFE 跑完 editorService.select(...) 后 page 才会
|
|
38
|
+
* 被替换为新 dsl 中的 page;此时上面的 page watch 才会触发重建。
|
|
39
|
+
* - 但若直接同步清空 nodeStatusMaps,会让 nodeStatusMap (computed) 立刻变
|
|
40
|
+
* undefined。上层 LayerPanel 用 `v-if="page && nodeStatusMap"` 渲染组件树,
|
|
41
|
+
* 会瞬间销毁整个面板;若紧接着的异步 select 链路(套件退出等场景)发生
|
|
42
|
+
* 竞态、page 引用未变 / 解析失败,watch(page) 不触发重建,组件树就再也回
|
|
43
|
+
* 不来。
|
|
44
|
+
* - 此外「污染」问题本质来自 createPageNodeStatus 用旧 status 作为新节点
|
|
45
|
+
* initial 值:只要新 root 的 page 是新引用,watch(page) 会触发重建,重建
|
|
46
|
+
* 时基于新 page.items 生成的 map 只会包含新节点 id;旧节点 id 即便残留在
|
|
47
|
+
* initialLayerNodeStatus 中也不会被写入新 map。真正的风险只有「同一 page
|
|
48
|
+
* id 下,新旧 dsl 都存在同一节点 id 但其实是不同节点」这种极端情况——这
|
|
49
|
+
* 在常规业务中不会发生(id 是 uuid)。
|
|
50
|
+
*
|
|
51
|
+
* 综合:root-change 时仅清理「在新 root 中已不存在的 page id」对应缓存,
|
|
52
|
+
* 保留仍然有效的 page status 不动;既避免 v-if 闪断,也不会保留无关 page 的
|
|
53
|
+
* 死缓存。同 page id 的重建交给下方 watch(page) 触发。
|
|
54
|
+
*/
|
|
55
|
+
const rootChangeHandler = (value) => {
|
|
56
|
+
if (!value) {
|
|
57
|
+
nodeStatusMaps.value = /* @__PURE__ */ new Map();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const validPageIds = /* @__PURE__ */ new Set();
|
|
61
|
+
(value.items || []).forEach((p) => {
|
|
62
|
+
if (p?.id !== void 0) validPageIds.add(p.id);
|
|
63
|
+
});
|
|
64
|
+
for (const cachedPageId of Array.from(nodeStatusMaps.value.keys())) if (!validPageIds.has(cachedPageId)) nodeStatusMaps.value.delete(cachedPageId);
|
|
65
|
+
};
|
|
66
|
+
editorService.on("root-change", rootChangeHandler);
|
|
34
67
|
watch(nodes, (nodes) => {
|
|
35
68
|
if (!nodeStatusMap.value) return;
|
|
36
69
|
for (const [id, status] of nodeStatusMap.value.entries()) {
|
|
@@ -63,6 +96,7 @@ var useNodeStatus = ({ editorService }) => {
|
|
|
63
96
|
};
|
|
64
97
|
editorService.on("remove", removeHandler);
|
|
65
98
|
onBeforeUnmount(() => {
|
|
99
|
+
editorService.off("root-change", rootChangeHandler);
|
|
66
100
|
editorService.off("remove", removeHandler);
|
|
67
101
|
editorService.off("add", addHandler);
|
|
68
102
|
});
|
package/dist/es/utils/editor.js
CHANGED
|
@@ -196,7 +196,7 @@ var fixNodePosition = (config, parent, stage) => {
|
|
|
196
196
|
var serializeConfig = (config) => serialize(config, {
|
|
197
197
|
space: 2,
|
|
198
198
|
unsafe: true
|
|
199
|
-
}).replace(/"(\w+)":\s/g, "$1: ");
|
|
199
|
+
}).replace(/(^|\n)(\s*)"(\w+)":\s/g, "$1$2$3: ");
|
|
200
200
|
var moveItemsInContainer = (sourceIndices, parent, targetIndex) => {
|
|
201
201
|
sourceIndices.sort((a, b) => a - b);
|
|
202
202
|
for (let i = sourceIndices.length - 1; i >= 0; i--) {
|