@hkyhy/marsun-components-core 0.1.100 → 0.1.101
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/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.d.ts +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js +3 -3
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +160 -145
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.d.ts +2 -2
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js +129 -120
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.d.ts +2 -2
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js +78 -78
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +2 -2
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +26 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +47 -19
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -1
- package/dist/components/Tools/MessageCenter/index.d.ts +2 -1
- package/dist/components/Tools/index.d.ts +2 -2
- package/dist/index.js +229 -227
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { message as i, Tag as
|
|
3
|
-
import { useState as
|
|
4
|
-
import { canDeleteTenantVariable as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import { Input as
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
fetchVariables:
|
|
16
|
-
saveVariable:
|
|
17
|
-
deleteVariable:
|
|
18
|
-
createNonce:
|
|
1
|
+
import { jsx as a, jsxs as F } from "react/jsx-runtime";
|
|
2
|
+
import { message as i, Tag as j, Space as _, Button as B } from "antd";
|
|
3
|
+
import { useState as c, useCallback as K, useEffect as M, useMemo as f } from "react";
|
|
4
|
+
import { canDeleteTenantVariable as L } from "../../utils/adminGuards.js";
|
|
5
|
+
import N from "../style.module.scss.js";
|
|
6
|
+
import Q from "../../../../Alert/Alert.js";
|
|
7
|
+
import U from "../../../../Layout/PageSpin/index.js";
|
|
8
|
+
import R from "../../../../Empty/Empty.js";
|
|
9
|
+
import W from "../../../../Table/Table.js";
|
|
10
|
+
import q from "../../../../FormInfo/FormModal.js";
|
|
11
|
+
import G from "../../../../FormInfo/FormInfo.js";
|
|
12
|
+
import { Input as H, Select as J } from "../../../../FormInfo/fields.js";
|
|
13
|
+
const O = J, T = H, le = ({
|
|
14
|
+
crud: m,
|
|
15
|
+
fetchVariables: k,
|
|
16
|
+
saveVariable: b,
|
|
17
|
+
deleteVariable: l,
|
|
18
|
+
createNonce: g = 0
|
|
19
19
|
}) => {
|
|
20
|
-
const [
|
|
21
|
-
|
|
20
|
+
const y = m.create, p = m.update, h = m.delete, A = m.read, u = (t) => t ? y : p, [w, S] = c([]), [E, C] = c(!1), [I, x] = c(""), [e, d] = c(null), [r, v] = c(!1), o = K(async () => {
|
|
21
|
+
C(!0), x("");
|
|
22
22
|
try {
|
|
23
|
-
const t = await
|
|
24
|
-
|
|
23
|
+
const t = await k();
|
|
24
|
+
S(Array.isArray(t) ? t : []);
|
|
25
25
|
} catch (t) {
|
|
26
|
-
|
|
26
|
+
x(t instanceof Error ? t.message : String(t)), S([]);
|
|
27
27
|
} finally {
|
|
28
|
-
|
|
28
|
+
C(!1);
|
|
29
29
|
}
|
|
30
|
-
}, [
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}, [
|
|
34
|
-
!
|
|
35
|
-
}, [
|
|
36
|
-
const
|
|
30
|
+
}, [k]);
|
|
31
|
+
M(() => {
|
|
32
|
+
o();
|
|
33
|
+
}, [o]), M(() => {
|
|
34
|
+
!g || !y || (v(!0), d({ key: "", label: "", type: "string", source: "tenant" }));
|
|
35
|
+
}, [g, y]);
|
|
36
|
+
const z = f(
|
|
37
37
|
() => ({
|
|
38
38
|
key: e == null ? void 0 : e.key,
|
|
39
39
|
label: e == null ? void 0 : e.label,
|
|
40
40
|
type: (e == null ? void 0 : e.type) || "string"
|
|
41
41
|
}),
|
|
42
42
|
[e]
|
|
43
|
-
),
|
|
43
|
+
), D = f(
|
|
44
44
|
() => ({
|
|
45
|
-
data:
|
|
45
|
+
data: z,
|
|
46
46
|
onSubmit: async (t) => {
|
|
47
|
-
if (!
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
47
|
+
if (!u(r) || !e) return !1;
|
|
48
|
+
const n = String(t.key || e.key || "").trim();
|
|
49
|
+
if (!n)
|
|
50
50
|
return i.warning("请填写变量 key"), !1;
|
|
51
51
|
try {
|
|
52
|
-
await
|
|
52
|
+
await b({
|
|
53
53
|
...e,
|
|
54
|
-
key:
|
|
54
|
+
key: n,
|
|
55
55
|
label: String(t.label || "").trim(),
|
|
56
56
|
type: String(t.type || "string"),
|
|
57
57
|
source: "tenant"
|
|
58
|
-
}), i.success("已保存"),
|
|
59
|
-
} catch (
|
|
60
|
-
return i.error(
|
|
58
|
+
}), i.success("已保存"), d(null), await o();
|
|
59
|
+
} catch (s) {
|
|
60
|
+
return i.error(s instanceof Error ? s.message : String(s)), !1;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
}),
|
|
64
|
-
[
|
|
65
|
-
),
|
|
64
|
+
[y, p, e, z, r, o, b]
|
|
65
|
+
), P = f(
|
|
66
66
|
() => [
|
|
67
67
|
{ title: "key", dataIndex: "key", key: "key", width: 140 },
|
|
68
68
|
{ title: "中文", dataIndex: "label", key: "label", ellipsis: !0 },
|
|
@@ -72,38 +72,38 @@ const G = q, z = Q, se = ({
|
|
|
72
72
|
dataIndex: "source",
|
|
73
73
|
key: "source",
|
|
74
74
|
width: 100,
|
|
75
|
-
render: (t,
|
|
75
|
+
render: (t, n) => /* @__PURE__ */ a(j, { children: n.source === "tenant" ? n.baseline ? "覆盖基线" : "租户" : "基线" })
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
title: "操作",
|
|
79
79
|
key: "actions",
|
|
80
80
|
width: 140,
|
|
81
|
-
render: (t,
|
|
82
|
-
/* @__PURE__ */
|
|
83
|
-
|
|
81
|
+
render: (t, n) => /* @__PURE__ */ F(_, { size: 4, children: [
|
|
82
|
+
/* @__PURE__ */ a(
|
|
83
|
+
B,
|
|
84
84
|
{
|
|
85
85
|
type: "link",
|
|
86
86
|
size: "small",
|
|
87
|
-
disabled: !
|
|
87
|
+
disabled: !p,
|
|
88
88
|
onClick: () => {
|
|
89
|
-
|
|
89
|
+
v(!1), d({ ...n });
|
|
90
90
|
},
|
|
91
91
|
children: "编辑"
|
|
92
92
|
}
|
|
93
93
|
),
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
|
|
94
|
+
/* @__PURE__ */ a(
|
|
95
|
+
B,
|
|
96
96
|
{
|
|
97
97
|
type: "link",
|
|
98
98
|
size: "small",
|
|
99
99
|
danger: !0,
|
|
100
|
-
disabled: !
|
|
100
|
+
disabled: !h || !l || !L(n),
|
|
101
101
|
onClick: () => {
|
|
102
102
|
(async () => {
|
|
103
103
|
try {
|
|
104
|
-
await (
|
|
105
|
-
} catch (
|
|
106
|
-
i.error(
|
|
104
|
+
await (l == null ? void 0 : l(n)), i.success("已删除"), await o();
|
|
105
|
+
} catch (s) {
|
|
106
|
+
i.error(s instanceof Error ? s.message : String(s));
|
|
107
107
|
}
|
|
108
108
|
})();
|
|
109
109
|
},
|
|
@@ -113,56 +113,56 @@ const G = q, z = Q, se = ({
|
|
|
113
113
|
] })
|
|
114
114
|
}
|
|
115
115
|
],
|
|
116
|
-
[
|
|
116
|
+
[p, h, l, o]
|
|
117
117
|
);
|
|
118
|
-
return /* @__PURE__ */
|
|
119
|
-
|
|
120
|
-
/* @__PURE__ */
|
|
121
|
-
|
|
118
|
+
return /* @__PURE__ */ F("div", { className: N.pane, children: [
|
|
119
|
+
I ? /* @__PURE__ */ a(Q, { type: "error", showIcon: !0, message: I, style: { marginBottom: 12 } }) : null,
|
|
120
|
+
/* @__PURE__ */ a(U, { spinning: E, children: A ? w.length === 0 && !E ? /* @__PURE__ */ a(R, { description: "暂无变量。基线来自 catalog;可新建租户变量。catalog 为空时模板「插入变量」不可用。" }) : /* @__PURE__ */ a(
|
|
121
|
+
W,
|
|
122
122
|
{
|
|
123
123
|
rowKey: (t) => t.key,
|
|
124
124
|
tableName: "msg-center-variables",
|
|
125
125
|
columnConfigEnabled: !1,
|
|
126
126
|
columnResizeEnabled: !1,
|
|
127
|
-
columns:
|
|
128
|
-
dataSource:
|
|
127
|
+
columns: P,
|
|
128
|
+
dataSource: w,
|
|
129
129
|
pagination: !1,
|
|
130
130
|
size: "small"
|
|
131
131
|
}
|
|
132
|
-
) }),
|
|
133
|
-
/* @__PURE__ */
|
|
134
|
-
|
|
132
|
+
) : /* @__PURE__ */ a(R, { description: "无消息变量读取权限" }) }),
|
|
133
|
+
/* @__PURE__ */ a(
|
|
134
|
+
q,
|
|
135
135
|
{
|
|
136
|
-
title:
|
|
136
|
+
title: r ? "新建变量" : "编辑变量",
|
|
137
137
|
open: !!e,
|
|
138
|
-
onCancel: () =>
|
|
138
|
+
onCancel: () => d(null),
|
|
139
139
|
width: 480,
|
|
140
140
|
okText: "保存",
|
|
141
141
|
autoClose: !1,
|
|
142
|
-
formProps:
|
|
143
|
-
children: /* @__PURE__ */
|
|
144
|
-
|
|
142
|
+
formProps: D,
|
|
143
|
+
children: /* @__PURE__ */ a(
|
|
144
|
+
G,
|
|
145
145
|
{
|
|
146
146
|
column: 1,
|
|
147
147
|
list: [
|
|
148
|
-
/* @__PURE__ */
|
|
149
|
-
|
|
148
|
+
/* @__PURE__ */ a(
|
|
149
|
+
T,
|
|
150
150
|
{
|
|
151
151
|
name: "key",
|
|
152
152
|
label: "key",
|
|
153
153
|
rule: "REQ",
|
|
154
|
-
disabled: !
|
|
154
|
+
disabled: !u(r) || !r && !!(e != null && e.key),
|
|
155
155
|
placeholder: "如 customField"
|
|
156
156
|
},
|
|
157
157
|
"key"
|
|
158
158
|
),
|
|
159
|
-
/* @__PURE__ */
|
|
160
|
-
/* @__PURE__ */
|
|
161
|
-
|
|
159
|
+
/* @__PURE__ */ a(T, { name: "label", label: "中文名", disabled: !u(r) }, "label"),
|
|
160
|
+
/* @__PURE__ */ a(
|
|
161
|
+
O,
|
|
162
162
|
{
|
|
163
163
|
name: "type",
|
|
164
164
|
label: "类型",
|
|
165
|
-
disabled: !
|
|
165
|
+
disabled: !u(r),
|
|
166
166
|
options: [
|
|
167
167
|
{ value: "string", label: "string" },
|
|
168
168
|
{ value: "number", label: "number" }
|
|
@@ -178,6 +178,6 @@ const G = q, z = Q, se = ({
|
|
|
178
178
|
] });
|
|
179
179
|
};
|
|
180
180
|
export {
|
|
181
|
-
|
|
181
|
+
le as VariablesPanel
|
|
182
182
|
};
|
|
183
183
|
//# sourceMappingURL=index.js.map
|
package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.tsx"],"sourcesContent":["import { FormInfo, FormModal, Input, Select } from '@/components/FormInfo';\nimport { Alert } from '@/components/Alert';\nimport { Empty } from '@/components/Empty';\nimport { PageSpin } from '@/components/Layout';\nimport { Table } from '@/components/Table';\nimport { Button, Space, Tag, message } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { MessageTemplateVariableAdmin } from '../types';\nimport { canDeleteTenantVariable } from '../../utils/adminGuards';\nimport styles from '../style.module.scss';\n\n/** CI tsc:kne Field 重载误匹配 FormItem children */\nconst FiSelect = Select as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInput = Input as unknown as React.ComponentType<Record<string, unknown>>;\n\nexport type VariablesPanelProps = {\n canWrite: boolean;\n fetchVariables: () => Promise<MessageTemplateVariableAdmin[]>;\n saveVariable: (item: MessageTemplateVariableAdmin) => Promise<void>;\n deleteVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n createNonce?: number;\n};\n\ntype FormShape = { key?: string; label?: string; type?: string };\n\n/**\n * 租户变量管理:可增改;基线 key 不可删(source=catalog 或 baseline)。\n */\nexport const VariablesPanel: React.FC<VariablesPanelProps> = ({\n canWrite,\n fetchVariables,\n saveVariable,\n deleteVariable,\n createNonce = 0,\n}) => {\n const [rows, setRows] = useState<MessageTemplateVariableAdmin[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [editing, setEditing] = useState<MessageTemplateVariableAdmin | null>(null);\n const [isCreate, setIsCreate] = useState(false);\n\n const reload = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const list = await fetchVariables();\n setRows(Array.isArray(list) ? list : []);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n setRows([]);\n } finally {\n setLoading(false);\n }\n }, [fetchVariables]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n useEffect(() => {\n if (!createNonce || !canWrite) return;\n setIsCreate(true);\n setEditing({ key: '', label: '', type: 'string', source: 'tenant' });\n }, [createNonce, canWrite]);\n\n const formData = useMemo(\n () => ({\n key: editing?.key,\n label: editing?.label,\n type: editing?.type || 'string',\n }),\n [editing],\n );\n\n const formProps = useMemo(\n () => ({\n data: formData,\n onSubmit: async (data: FormShape) => {\n if (!canWrite || !editing) return false;\n const key = String(data.key || editing.key || '').trim();\n if (!key) {\n message.warning('请填写变量 key');\n return false;\n }\n try {\n await saveVariable({\n ...editing,\n key,\n label: String(data.label || '').trim(),\n type: String(data.type || 'string'),\n source: 'tenant',\n });\n message.success('已保存');\n setEditing(null);\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n return false;\n }\n },\n }),\n [canWrite, editing, formData, reload, saveVariable],\n );\n\n const columns = useMemo(\n () => [\n { title: 'key', dataIndex: 'key', key: 'key', width: 140 },\n { title: '中文', dataIndex: 'label', key: 'label', ellipsis: true },\n { title: '类型', dataIndex: 'type', key: 'type', width: 90 },\n {\n title: '来源',\n dataIndex: 'source',\n key: 'source',\n width: 100,\n render: (_: unknown, r: MessageTemplateVariableAdmin) => (\n <Tag>{r.source === 'tenant' ? (r.baseline ? '覆盖基线' : '租户') : '基线'}</Tag>\n ),\n },\n {\n title: '操作',\n key: 'actions',\n width: 140,\n render: (_: unknown, r: MessageTemplateVariableAdmin) => (\n <Space size={4}>\n <Button\n type=\"link\"\n size=\"small\"\n disabled={!canWrite}\n onClick={() => {\n setIsCreate(false);\n setEditing({ ...r });\n }}\n >\n 编辑\n </Button>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n disabled={!canWrite || !deleteVariable || !canDeleteTenantVariable(r)}\n onClick={() => {\n void (async () => {\n try {\n await deleteVariable?.(r);\n message.success('已删除');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n >\n 删除\n </Button>\n </Space>\n ),\n },\n ],\n [canWrite, deleteVariable, reload],\n );\n\n return (\n <div className={styles.pane}>\n {error ? <Alert type=\"error\" showIcon message={error} style={{ marginBottom: 12 }} /> : null}\n <PageSpin spinning={loading}>\n {rows.length === 0 && !loading ? (\n <Empty description=\"暂无变量。基线来自 catalog;可新建租户变量。catalog 为空时模板「插入变量」不可用。\" />\n ) : (\n <Table<MessageTemplateVariableAdmin>\n rowKey={(r) => r.key}\n tableName=\"msg-center-variables\"\n columnConfigEnabled={false}\n columnResizeEnabled={false}\n columns={columns}\n dataSource={rows}\n pagination={false}\n size=\"small\"\n />\n )}\n </PageSpin>\n <FormModal\n title={isCreate ? '新建变量' : '编辑变量'}\n open={Boolean(editing)}\n onCancel={() => setEditing(null)}\n width={480}\n okText=\"保存\"\n autoClose={false}\n formProps={formProps}\n >\n <FormInfo\n column={1}\n list={[\n <FiInput\n key=\"key\"\n name=\"key\"\n label=\"key\"\n rule=\"REQ\"\n disabled={!canWrite || (!isCreate && Boolean(editing?.key))}\n placeholder=\"如 customField\"\n />,\n <FiInput key=\"label\" name=\"label\" label=\"中文名\" disabled={!canWrite} />,\n <FiSelect\n key=\"type\"\n name=\"type\"\n label=\"类型\"\n disabled={!canWrite}\n options={[\n { value: 'string', label: 'string' },\n { value: 'number', label: 'number' },\n ]}\n />,\n ]}\n />\n </FormModal>\n </div>\n );\n};\n\nexport default VariablesPanel;\n"],"names":["FiSelect","Select","FiInput","Input","VariablesPanel","canWrite","fetchVariables","saveVariable","deleteVariable","createNonce","rows","setRows","useState","loading","setLoading","error","setError","editing","setEditing","isCreate","setIsCreate","reload","useCallback","list","e","useEffect","formData","useMemo","formProps","data","key","message","columns","_","jsx","Tag","jsxs","Space","Button","canDeleteTenantVariable","styles","Alert","PageSpin","Empty","Table","r","FormModal","FormInfo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.tsx"],"sourcesContent":["import { FormInfo, FormModal, Input, Select } from '@/components/FormInfo';\nimport { Alert } from '@/components/Alert';\nimport { Empty } from '@/components/Empty';\nimport { PageSpin } from '@/components/Layout';\nimport { Table } from '@/components/Table';\nimport { Button, Space, Tag, message } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { MessageCrudFlags, MessageTemplateVariableAdmin } from '../types';\nimport { canDeleteTenantVariable } from '../../utils/adminGuards';\nimport styles from '../style.module.scss';\n\n/** CI tsc:kne Field 重载误匹配 FormItem children */\nconst FiSelect = Select as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInput = Input as unknown as React.ComponentType<Record<string, unknown>>;\n\nexport type VariablesPanelProps = {\n crud: MessageCrudFlags;\n fetchVariables: () => Promise<MessageTemplateVariableAdmin[]>;\n saveVariable: (item: MessageTemplateVariableAdmin) => Promise<void>;\n deleteVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n createNonce?: number;\n};\n\ntype FormShape = { key?: string; label?: string; type?: string };\n\n/**\n * 租户变量管理:可增改;基线 key 不可删(source=catalog 或 baseline)。\n */\nexport const VariablesPanel: React.FC<VariablesPanelProps> = ({\n crud,\n fetchVariables,\n saveVariable,\n deleteVariable,\n createNonce = 0,\n}) => {\n const canCreate = crud.create;\n const canUpdate = crud.update;\n const canDelete = crud.delete;\n const canRead = crud.read;\n const formWritable = (creating: boolean) => (creating ? canCreate : canUpdate);\n\n const [rows, setRows] = useState<MessageTemplateVariableAdmin[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [editing, setEditing] = useState<MessageTemplateVariableAdmin | null>(null);\n const [isCreate, setIsCreate] = useState(false);\n\n const reload = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const list = await fetchVariables();\n setRows(Array.isArray(list) ? list : []);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n setRows([]);\n } finally {\n setLoading(false);\n }\n }, [fetchVariables]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n useEffect(() => {\n if (!createNonce || !canCreate) return;\n setIsCreate(true);\n setEditing({ key: '', label: '', type: 'string', source: 'tenant' });\n }, [createNonce, canCreate]);\n\n const formData = useMemo(\n () => ({\n key: editing?.key,\n label: editing?.label,\n type: editing?.type || 'string',\n }),\n [editing],\n );\n\n const formProps = useMemo(\n () => ({\n data: formData,\n onSubmit: async (data: FormShape) => {\n if (!formWritable(isCreate) || !editing) return false;\n const key = String(data.key || editing.key || '').trim();\n if (!key) {\n message.warning('请填写变量 key');\n return false;\n }\n try {\n await saveVariable({\n ...editing,\n key,\n label: String(data.label || '').trim(),\n type: String(data.type || 'string'),\n source: 'tenant',\n });\n message.success('已保存');\n setEditing(null);\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n return false;\n }\n },\n }),\n [canCreate, canUpdate, editing, formData, isCreate, reload, saveVariable],\n );\n\n const columns = useMemo(\n () => [\n { title: 'key', dataIndex: 'key', key: 'key', width: 140 },\n { title: '中文', dataIndex: 'label', key: 'label', ellipsis: true },\n { title: '类型', dataIndex: 'type', key: 'type', width: 90 },\n {\n title: '来源',\n dataIndex: 'source',\n key: 'source',\n width: 100,\n render: (_: unknown, r: MessageTemplateVariableAdmin) => (\n <Tag>{r.source === 'tenant' ? (r.baseline ? '覆盖基线' : '租户') : '基线'}</Tag>\n ),\n },\n {\n title: '操作',\n key: 'actions',\n width: 140,\n render: (_: unknown, r: MessageTemplateVariableAdmin) => (\n <Space size={4}>\n <Button\n type=\"link\"\n size=\"small\"\n disabled={!canUpdate}\n onClick={() => {\n setIsCreate(false);\n setEditing({ ...r });\n }}\n >\n 编辑\n </Button>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n disabled={!canDelete || !deleteVariable || !canDeleteTenantVariable(r)}\n onClick={() => {\n void (async () => {\n try {\n await deleteVariable?.(r);\n message.success('已删除');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n >\n 删除\n </Button>\n </Space>\n ),\n },\n ],\n [canUpdate, canDelete, deleteVariable, reload],\n );\n\n return (\n <div className={styles.pane}>\n {error ? <Alert type=\"error\" showIcon message={error} style={{ marginBottom: 12 }} /> : null}\n <PageSpin spinning={loading}>\n {!canRead ? (\n <Empty description=\"无消息变量读取权限\" />\n ) : rows.length === 0 && !loading ? (\n <Empty description=\"暂无变量。基线来自 catalog;可新建租户变量。catalog 为空时模板「插入变量」不可用。\" />\n ) : (\n <Table<MessageTemplateVariableAdmin>\n rowKey={(r) => r.key}\n tableName=\"msg-center-variables\"\n columnConfigEnabled={false}\n columnResizeEnabled={false}\n columns={columns}\n dataSource={rows}\n pagination={false}\n size=\"small\"\n />\n )}\n </PageSpin>\n <FormModal\n title={isCreate ? '新建变量' : '编辑变量'}\n open={Boolean(editing)}\n onCancel={() => setEditing(null)}\n width={480}\n okText=\"保存\"\n autoClose={false}\n formProps={formProps}\n >\n <FormInfo\n column={1}\n list={[\n <FiInput\n key=\"key\"\n name=\"key\"\n label=\"key\"\n rule=\"REQ\"\n disabled={!formWritable(isCreate) || (!isCreate && Boolean(editing?.key))}\n placeholder=\"如 customField\"\n />,\n <FiInput key=\"label\" name=\"label\" label=\"中文名\" disabled={!formWritable(isCreate)} />,\n <FiSelect\n key=\"type\"\n name=\"type\"\n label=\"类型\"\n disabled={!formWritable(isCreate)}\n options={[\n { value: 'string', label: 'string' },\n { value: 'number', label: 'number' },\n ]}\n />,\n ]}\n />\n </FormModal>\n </div>\n );\n};\n\nexport default VariablesPanel;\n"],"names":["FiSelect","Select","FiInput","Input","VariablesPanel","crud","fetchVariables","saveVariable","deleteVariable","createNonce","canCreate","canUpdate","canDelete","canRead","formWritable","creating","rows","setRows","useState","loading","setLoading","error","setError","editing","setEditing","isCreate","setIsCreate","reload","useCallback","list","e","useEffect","formData","useMemo","formProps","data","key","message","columns","_","r","jsx","Tag","jsxs","Space","Button","canDeleteTenantVariable","styles","Alert","PageSpin","Empty","Table","FormModal","FormInfo"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { MessageTemplateAdmin } from './MessageTemplateAdmin';
|
|
2
|
-
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, } from './types';
|
|
3
|
-
export { variablesFromCatalog, previewVarsFromVariables } from './types';
|
|
2
|
+
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, MessageCrudFlags, MessageAdminPermissions, } from './types';
|
|
3
|
+
export { variablesFromCatalog, previewVarsFromVariables, resolveMessageAdminPermissions, } from './types';
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
+
export type MessageCrudFlags = {
|
|
3
|
+
create: boolean;
|
|
4
|
+
read: boolean;
|
|
5
|
+
update: boolean;
|
|
6
|
+
delete: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type MessageAdminPermissions = {
|
|
9
|
+
template?: Partial<MessageCrudFlags>;
|
|
10
|
+
push?: Partial<MessageCrudFlags>;
|
|
11
|
+
variable?: Partial<MessageCrudFlags>;
|
|
12
|
+
};
|
|
13
|
+
/** 解析 Admin 门禁:有 permissions 用细粒度;否则 canWrite 作 Showcase 全开/全关。 */
|
|
14
|
+
export declare function resolveMessageAdminPermissions(permissions: MessageAdminPermissions | undefined, canWrite: boolean | undefined): {
|
|
15
|
+
template: MessageCrudFlags;
|
|
16
|
+
push: MessageCrudFlags;
|
|
17
|
+
variable: MessageCrudFlags;
|
|
18
|
+
};
|
|
2
19
|
export type MessageTemplateAdminItem = {
|
|
3
20
|
id?: string;
|
|
4
21
|
code?: string;
|
|
@@ -79,7 +96,16 @@ export type MessageTemplateAdminProps = {
|
|
|
79
96
|
templateVariables?: MessageTemplateVariable[];
|
|
80
97
|
/** 预览用示例值;未传则按 variables 生成 */
|
|
81
98
|
previewVars?: Record<string, string>;
|
|
99
|
+
/**
|
|
100
|
+
* Showcase 快捷:true→十二项全开,false→全关。
|
|
101
|
+
* 业务仓须传 permissions,禁止只靠 canWrite 当真门禁。
|
|
102
|
+
*/
|
|
82
103
|
canWrite?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* 细粒度 CRUD 门禁(模板 / 推送 / 变量 × create|read|update|delete)。
|
|
106
|
+
* 传入后优先于 canWrite。
|
|
107
|
+
*/
|
|
108
|
+
permissions?: MessageAdminPermissions;
|
|
83
109
|
renderAudienceField?: (ctx: {
|
|
84
110
|
roles: string[];
|
|
85
111
|
onChange: (roles: string[]) => void;
|
|
@@ -1,28 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
const u = {
|
|
2
|
+
create: !1,
|
|
3
|
+
read: !1,
|
|
4
|
+
update: !1,
|
|
5
|
+
delete: !1
|
|
6
|
+
}, c = {
|
|
7
|
+
create: !0,
|
|
8
|
+
read: !0,
|
|
9
|
+
update: !0,
|
|
10
|
+
delete: !0
|
|
11
|
+
};
|
|
12
|
+
function s(e, r) {
|
|
13
|
+
return {
|
|
14
|
+
create: (e == null ? void 0 : e.create) ?? r.create,
|
|
15
|
+
read: (e == null ? void 0 : e.read) ?? r.read,
|
|
16
|
+
update: (e == null ? void 0 : e.update) ?? r.update,
|
|
17
|
+
delete: (e == null ? void 0 : e.delete) ?? r.delete
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function o(e, r) {
|
|
21
|
+
const t = r ? c : u;
|
|
22
|
+
return e ? {
|
|
23
|
+
template: s(e.template, u),
|
|
24
|
+
push: s(e.push, u),
|
|
25
|
+
variable: s(e.variable, u)
|
|
26
|
+
} : { template: t, push: t, variable: t };
|
|
27
|
+
}
|
|
28
|
+
function f(e) {
|
|
29
|
+
if (!e) return [];
|
|
30
|
+
if (Array.isArray(e.variables) && e.variables.length)
|
|
31
|
+
return e.variables.map((t) => ({
|
|
32
|
+
key: String(t.key || "").trim(),
|
|
33
|
+
label: t.label,
|
|
34
|
+
type: t.type,
|
|
35
|
+
source: t.source,
|
|
36
|
+
baseline: t.baseline
|
|
37
|
+
})).filter((t) => t.key);
|
|
38
|
+
const r = e.contextSchema;
|
|
39
|
+
return !r || typeof r != "object" ? [] : Object.entries(r).map(([t, n]) => typeof n == "string" ? { key: t, type: n } : n && typeof n == "object" ? {
|
|
40
|
+
key: t,
|
|
14
41
|
type: n.type || "string",
|
|
15
42
|
label: n.label
|
|
16
|
-
} : { key:
|
|
43
|
+
} : { key: t }).filter((t) => t.key);
|
|
17
44
|
}
|
|
18
|
-
function
|
|
45
|
+
function b(e) {
|
|
19
46
|
const r = {};
|
|
20
|
-
for (const
|
|
21
|
-
r[
|
|
47
|
+
for (const t of e)
|
|
48
|
+
r[t.key] = t.type === "number" ? "1" : t.label || t.key;
|
|
22
49
|
return r;
|
|
23
50
|
}
|
|
24
51
|
export {
|
|
25
|
-
|
|
26
|
-
|
|
52
|
+
b as previewVarsFromVariables,
|
|
53
|
+
o as resolveMessageAdminPermissions,
|
|
54
|
+
f as variablesFromCatalog
|
|
27
55
|
};
|
|
28
56
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/types.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport type MessageTemplateAdminItem = {\n id?: string;\n code?: string;\n eventKey?: string;\n scenario?: string;\n label?: string;\n messageType?: string;\n titleTemplate?: string;\n titlePreview?: string;\n bodyTemplate?: string;\n audienceRoles?: string[];\n roles?: string[];\n enabled?: boolean;\n channel?: string;\n};\n\nexport type MessageEventCatalogItem = {\n eventKey: string;\n label: string;\n messageType?: string;\n};\n\n/** catalog API 完整载荷(含变量 SSOT) */\nexport type MessageEventCatalogPayload = {\n events: MessageEventCatalogItem[];\n /** 原始 schema;优先用 variables */\n contextSchema?: Record<string, string | { type?: string; label?: string }>;\n variables?: MessageTemplateVariable[];\n};\n\nexport type MessageAudienceRoleOption = {\n /** 写入模板的角色码 */\n code: string;\n /** 展示名(来自 SSO / fixture) */\n name: string;\n};\n\nexport type MessageTemplateVariable = {\n key: string;\n /** 可选中文说明;无则下拉只显示 code */\n label?: string;\n type?: string;\n source?: 'catalog' | 'tenant';\n baseline?: boolean;\n};\n\n/** 变量管理行 */\nexport type MessageTemplateVariableAdmin = MessageTemplateVariable;\n\nexport type PushRuleAdminItem = {\n id?: string;\n code?: string;\n label?: string;\n eventKey?: string;\n levels?: string[];\n templateCode?: string;\n audienceRoles?: string[];\n audienceUserIds?: string[];\n channels?: string[];\n slaHours?: number;\n scanLookbackDays?: number;\n enabled?: boolean;\n};\n\nexport type MessageTemplateAdminProps = {\n fetchTemplates: () => Promise<MessageTemplateAdminItem[]>;\n saveTemplate?: (item: MessageTemplateAdminItem) => Promise<void>;\n /**\n * 事件目录。可返回数组(仅 events)或完整 payload(含 variables / contextSchema)。\n * 变量优先取 payload.variables,否则从 contextSchema 推导;**禁止** FE 平行 DEFAULT_VARS。\n */\n fetchEventCatalog?: () => Promise<MessageEventCatalogItem[] | MessageEventCatalogPayload>;\n /** 列表行切换启用(不经新建表单) */\n setTemplateEnabled?: (item: MessageTemplateAdminItem, enabled: boolean) => Promise<void>;\n /**\n * 受众角色选项(SSO 本系统角色)。未传且无 renderAudienceField 时用空 Select(禁 tags 手输码)。\n */\n fetchAudienceRoles?: () => Promise<MessageAudienceRoleOption[]>;\n /**\n * @deprecated 变量须来自 catalog;仅联调 fixture 可传。业务页勿硬编码平行表。\n */\n templateVariables?: MessageTemplateVariable[];\n /** 预览用示例值;未传则按 variables 生成 */\n previewVars?: Record<string, string>;\n canWrite?: boolean;\n renderAudienceField?: (ctx: {\n roles: string[];\n onChange: (roles: string[]) => void;\n }) => ReactNode;\n /** @deprecated 优先传 fetchPushRules */\n pushRulesSlot?: ReactNode;\n fetchPushRules?: () => Promise<PushRuleAdminItem[]>;\n savePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n setPushRuleEnabled?: (item: PushRuleAdminItem, enabled: boolean) => Promise<void>;\n deletePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n fetchVariables?: () => Promise<MessageTemplateVariableAdmin[]>;\n saveVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n deleteVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n emptyText?: string;\n className?: string;\n /** 自动编号前缀,默认 MEQ */\n codePrefix?: string;\n};\n\nexport function variablesFromCatalog(\n payload: MessageEventCatalogPayload | null | undefined,\n): MessageTemplateVariable[] {\n if (!payload) return [];\n if (Array.isArray(payload.variables) && payload.variables.length) {\n return payload.variables\n .map((v) => ({\n key: String(v.key || '').trim(),\n label: v.label,\n type: v.type,\n source: v.source,\n baseline: v.baseline,\n }))\n .filter((v) => v.key);\n }\n const schema = payload.contextSchema;\n if (!schema || typeof schema !== 'object') return [];\n return Object.entries(schema)\n .map(([key, raw]) => {\n if (typeof raw === 'string') return { key, type: raw };\n if (raw && typeof raw === 'object') {\n return {\n key,\n type: raw.type || 'string',\n label: raw.label,\n };\n }\n return { key };\n })\n .filter((v) => v.key);\n}\n\nexport function previewVarsFromVariables(vars: MessageTemplateVariable[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const v of vars) {\n out[v.key] = v.type === 'number' ? '1' : v.label || v.key;\n }\n return out;\n}\n"],"names":["variablesFromCatalog","payload","v","schema","key","raw","previewVarsFromVariables","vars","out"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/types.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport type MessageCrudFlags = {\n create: boolean;\n read: boolean;\n update: boolean;\n delete: boolean;\n};\n\nexport type MessageAdminPermissions = {\n template?: Partial<MessageCrudFlags>;\n push?: Partial<MessageCrudFlags>;\n variable?: Partial<MessageCrudFlags>;\n};\n\nconst ALL_CRUD_OFF: MessageCrudFlags = {\n create: false,\n read: false,\n update: false,\n delete: false,\n};\n\nconst ALL_CRUD_ON: MessageCrudFlags = {\n create: true,\n read: true,\n update: true,\n delete: true,\n};\n\nfunction mergeCrud(\n partial: Partial<MessageCrudFlags> | undefined,\n fallback: MessageCrudFlags,\n): MessageCrudFlags {\n return {\n create: partial?.create ?? fallback.create,\n read: partial?.read ?? fallback.read,\n update: partial?.update ?? fallback.update,\n delete: partial?.delete ?? fallback.delete,\n };\n}\n\n/** 解析 Admin 门禁:有 permissions 用细粒度;否则 canWrite 作 Showcase 全开/全关。 */\nexport function resolveMessageAdminPermissions(\n permissions: MessageAdminPermissions | undefined,\n canWrite: boolean | undefined,\n): { template: MessageCrudFlags; push: MessageCrudFlags; variable: MessageCrudFlags } {\n const fallback = canWrite ? ALL_CRUD_ON : ALL_CRUD_OFF;\n if (!permissions) {\n return { template: fallback, push: fallback, variable: fallback };\n }\n return {\n template: mergeCrud(permissions.template, ALL_CRUD_OFF),\n push: mergeCrud(permissions.push, ALL_CRUD_OFF),\n variable: mergeCrud(permissions.variable, ALL_CRUD_OFF),\n };\n}\n\nexport type MessageTemplateAdminItem = {\n id?: string;\n code?: string;\n eventKey?: string;\n scenario?: string;\n label?: string;\n messageType?: string;\n titleTemplate?: string;\n titlePreview?: string;\n bodyTemplate?: string;\n audienceRoles?: string[];\n roles?: string[];\n enabled?: boolean;\n channel?: string;\n};\n\nexport type MessageEventCatalogItem = {\n eventKey: string;\n label: string;\n messageType?: string;\n};\n\n/** catalog API 完整载荷(含变量 SSOT) */\nexport type MessageEventCatalogPayload = {\n events: MessageEventCatalogItem[];\n /** 原始 schema;优先用 variables */\n contextSchema?: Record<string, string | { type?: string; label?: string }>;\n variables?: MessageTemplateVariable[];\n};\n\nexport type MessageAudienceRoleOption = {\n /** 写入模板的角色码 */\n code: string;\n /** 展示名(来自 SSO / fixture) */\n name: string;\n};\n\nexport type MessageTemplateVariable = {\n key: string;\n /** 可选中文说明;无则下拉只显示 code */\n label?: string;\n type?: string;\n source?: 'catalog' | 'tenant';\n baseline?: boolean;\n};\n\n/** 变量管理行 */\nexport type MessageTemplateVariableAdmin = MessageTemplateVariable;\n\nexport type PushRuleAdminItem = {\n id?: string;\n code?: string;\n label?: string;\n eventKey?: string;\n levels?: string[];\n templateCode?: string;\n audienceRoles?: string[];\n audienceUserIds?: string[];\n channels?: string[];\n slaHours?: number;\n scanLookbackDays?: number;\n enabled?: boolean;\n};\n\nexport type MessageTemplateAdminProps = {\n fetchTemplates: () => Promise<MessageTemplateAdminItem[]>;\n saveTemplate?: (item: MessageTemplateAdminItem) => Promise<void>;\n /**\n * 事件目录。可返回数组(仅 events)或完整 payload(含 variables / contextSchema)。\n * 变量优先取 payload.variables,否则从 contextSchema 推导;**禁止** FE 平行 DEFAULT_VARS。\n */\n fetchEventCatalog?: () => Promise<MessageEventCatalogItem[] | MessageEventCatalogPayload>;\n /** 列表行切换启用(不经新建表单) */\n setTemplateEnabled?: (item: MessageTemplateAdminItem, enabled: boolean) => Promise<void>;\n /**\n * 受众角色选项(SSO 本系统角色)。未传且无 renderAudienceField 时用空 Select(禁 tags 手输码)。\n */\n fetchAudienceRoles?: () => Promise<MessageAudienceRoleOption[]>;\n /**\n * @deprecated 变量须来自 catalog;仅联调 fixture 可传。业务页勿硬编码平行表。\n */\n templateVariables?: MessageTemplateVariable[];\n /** 预览用示例值;未传则按 variables 生成 */\n previewVars?: Record<string, string>;\n /**\n * Showcase 快捷:true→十二项全开,false→全关。\n * 业务仓须传 permissions,禁止只靠 canWrite 当真门禁。\n */\n canWrite?: boolean;\n /**\n * 细粒度 CRUD 门禁(模板 / 推送 / 变量 × create|read|update|delete)。\n * 传入后优先于 canWrite。\n */\n permissions?: MessageAdminPermissions;\n renderAudienceField?: (ctx: {\n roles: string[];\n onChange: (roles: string[]) => void;\n }) => ReactNode;\n /** @deprecated 优先传 fetchPushRules */\n pushRulesSlot?: ReactNode;\n fetchPushRules?: () => Promise<PushRuleAdminItem[]>;\n savePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n setPushRuleEnabled?: (item: PushRuleAdminItem, enabled: boolean) => Promise<void>;\n deletePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n fetchVariables?: () => Promise<MessageTemplateVariableAdmin[]>;\n saveVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n deleteVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;\n emptyText?: string;\n className?: string;\n /** 自动编号前缀,默认 MEQ */\n codePrefix?: string;\n};\n\nexport function variablesFromCatalog(\n payload: MessageEventCatalogPayload | null | undefined,\n): MessageTemplateVariable[] {\n if (!payload) return [];\n if (Array.isArray(payload.variables) && payload.variables.length) {\n return payload.variables\n .map((v) => ({\n key: String(v.key || '').trim(),\n label: v.label,\n type: v.type,\n source: v.source,\n baseline: v.baseline,\n }))\n .filter((v) => v.key);\n }\n const schema = payload.contextSchema;\n if (!schema || typeof schema !== 'object') return [];\n return Object.entries(schema)\n .map(([key, raw]) => {\n if (typeof raw === 'string') return { key, type: raw };\n if (raw && typeof raw === 'object') {\n return {\n key,\n type: raw.type || 'string',\n label: raw.label,\n };\n }\n return { key };\n })\n .filter((v) => v.key);\n}\n\nexport function previewVarsFromVariables(vars: MessageTemplateVariable[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const v of vars) {\n out[v.key] = v.type === 'number' ? '1' : v.label || v.key;\n }\n return out;\n}\n"],"names":["ALL_CRUD_OFF","ALL_CRUD_ON","mergeCrud","partial","fallback","resolveMessageAdminPermissions","permissions","canWrite","variablesFromCatalog","payload","v","schema","key","raw","previewVarsFromVariables","vars","out"],"mappings":"AAeA,MAAMA,IAAiC;AAAA,EACrC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV,GAEMC,IAAgC;AAAA,EACpC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,SAASC,EACPC,GACAC,GACkB;AAClB,SAAO;AAAA,IACL,SAAQD,KAAA,gBAAAA,EAAS,WAAUC,EAAS;AAAA,IACpC,OAAMD,KAAA,gBAAAA,EAAS,SAAQC,EAAS;AAAA,IAChC,SAAQD,KAAA,gBAAAA,EAAS,WAAUC,EAAS;AAAA,IACpC,SAAQD,KAAA,gBAAAA,EAAS,WAAUC,EAAS;AAAA,EAAA;AAExC;AAGO,SAASC,EACdC,GACAC,GACoF;AACpF,QAAMH,IAAWG,IAAWN,IAAcD;AAC1C,SAAKM,IAGE;AAAA,IACL,UAAUJ,EAAUI,EAAY,UAAUN,CAAY;AAAA,IACtD,MAAME,EAAUI,EAAY,MAAMN,CAAY;AAAA,IAC9C,UAAUE,EAAUI,EAAY,UAAUN,CAAY;AAAA,EAAA,IAL/C,EAAE,UAAUI,GAAU,MAAMA,GAAU,UAAUA,EAAA;AAO3D;AAmHO,SAASI,EACdC,GAC2B;AAC3B,MAAI,CAACA,EAAS,QAAO,CAAA;AACrB,MAAI,MAAM,QAAQA,EAAQ,SAAS,KAAKA,EAAQ,UAAU;AACxD,WAAOA,EAAQ,UACZ,IAAI,CAACC,OAAO;AAAA,MACX,KAAK,OAAOA,EAAE,OAAO,EAAE,EAAE,KAAA;AAAA,MACzB,OAAOA,EAAE;AAAA,MACT,MAAMA,EAAE;AAAA,MACR,QAAQA,EAAE;AAAA,MACV,UAAUA,EAAE;AAAA,IAAA,EACZ,EACD,OAAO,CAACA,MAAMA,EAAE,GAAG;AAExB,QAAMC,IAASF,EAAQ;AACvB,SAAI,CAACE,KAAU,OAAOA,KAAW,WAAiB,CAAA,IAC3C,OAAO,QAAQA,CAAM,EACzB,IAAI,CAAC,CAACC,GAAKC,CAAG,MACT,OAAOA,KAAQ,WAAiB,EAAE,KAAAD,GAAK,MAAMC,EAAA,IAC7CA,KAAO,OAAOA,KAAQ,WACjB;AAAA,IACL,KAAAD;AAAA,IACA,MAAMC,EAAI,QAAQ;AAAA,IAClB,OAAOA,EAAI;AAAA,EAAA,IAGR,EAAE,KAAAD,EAAA,CACV,EACA,OAAO,CAACF,MAAMA,EAAE,GAAG;AACxB;AAEO,SAASI,EAAyBC,GAAyD;AAChG,QAAMC,IAA8B,CAAA;AACpC,aAAWN,KAAKK;AACd,IAAAC,EAAIN,EAAE,GAAG,IAAIA,EAAE,SAAS,WAAW,MAAMA,EAAE,SAASA,EAAE;AAExD,SAAOM;AACT;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { MessageTemplateAdmin } from './MessageTemplateAdmin';
|
|
2
|
-
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, } from './MessageTemplateAdmin';
|
|
2
|
+
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, MessageCrudFlags, MessageAdminPermissions, } from './MessageTemplateAdmin';
|
|
3
3
|
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, stripHtmlToText, } from './utils/templateCode';
|
|
4
|
+
export { resolveMessageAdminPermissions } from './MessageTemplateAdmin';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { InboxBell } from './Inbox';
|
|
2
2
|
export type { InboxBellItem, InboxBellListResult, InboxBellListParams, InboxBellProps, InboxBellMessageType, } from './Inbox';
|
|
3
3
|
export { MessageTemplateAdmin } from './MessageCenter';
|
|
4
|
-
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageAudienceRoleOption, MessageTemplateVariable, } from './MessageCenter';
|
|
5
|
-
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, } from './MessageCenter';
|
|
4
|
+
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, MessageCrudFlags, MessageAdminPermissions, } from './MessageCenter';
|
|
5
|
+
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, resolveMessageAdminPermissions, } from './MessageCenter';
|