ding-react-admin 2.5.0 → 2.5.2
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/index.js +524 -520
- package/dist/src/crud/fields/ReferenceField.d.ts.map +1 -1
- package/dist/src/layouts/AdminLayout.d.ts.map +1 -1
- package/dist/src/layouts/navFilter.d.ts +2 -0
- package/dist/src/layouts/navFilter.d.ts.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/package.json +1 -1
- package/src/crud/fields/FileField.tsx +1 -1
- package/src/crud/fields/ImageField.tsx +1 -1
- package/src/crud/fields/ReferenceField.tsx +5 -3
- package/src/crud/fields/ReferenceManyField.tsx +2 -2
- package/src/crud/fields/SelectField.tsx +1 -1
- package/src/crud/filters/ReferenceFilter.tsx +1 -1
- package/src/layouts/AdminLayout.tsx +2 -1
- package/src/layouts/navFilter.ts +6 -1
- package/src/layouts/navMenuItems.tsx +2 -2
- package/src/types.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferenceField.d.ts","sourceRoot":"","sources":["../../../../src/crud/fields/ReferenceField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAC;AAWlB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAChD,cAAc,GAAG;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,wEAAwE;IACxE,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KACnB,IAAI,CAAC;IACV,4EAA4E;IAC5E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"ReferenceField.d.ts","sourceRoot":"","sources":["../../../../src/crud/fields/ReferenceField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAC;AAWlB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAChD,cAAc,GAAG;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,wEAAwE;IACxE,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KACnB,IAAI,CAAC;IACV,4EAA4E;IAC5E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAwIJ,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,SAAS,EACT,OAAO,EACP,WAAoB,EACpB,WAAkB,EAClB,QAAQ,EACR,KAAK,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EAAE,YAAY,EACtB,SAAS,EACT,MAAM,EACN,UAAU,EACV,aAAa,EACb,IAAW,EACX,YAAY,EACZ,aAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,gBAAuB,EACvB,qBAAqB,EACrB,aAAa,GACd,EAAE,mBAAmB,2CA6CrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AdminLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AdminLayout.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,UAAU,CAAC;AAC9E,OAAO,2BAA2B,CAAC;AAuKnC,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAe,EACf,cAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,SAAoB,EACpB,wBAA4C,EAC5C,SAAgB,EAChB,OAAO,EACP,SAAiB,GAClB,EAAE,gBAAgB,2CAmWlB"}
|
|
@@ -13,5 +13,7 @@ export declare function flattenNavLeaves(items: NavItem[], options?: {
|
|
|
13
13
|
group?: string;
|
|
14
14
|
}): FlatNavItem[];
|
|
15
15
|
export declare function filterFlatNavItems(items: FlatNavItem[], query: string): FlatNavItem[];
|
|
16
|
+
/** Menu key for a parent row so it never collides with a child that shares `path`. */
|
|
17
|
+
export declare function navSubmenuKey(path: string): string;
|
|
16
18
|
export declare function collectSubmenuKeys(items: NavItem[]): string[];
|
|
17
19
|
//# sourceMappingURL=navFilter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navFilter.d.ts","sourceRoot":"","sources":["../../../src/layouts/navFilter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,CAKpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAyBzE;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,WAAW,EAAE,CAqBf;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,MAAM,GACZ,WAAW,EAAE,CASf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAY7D"}
|
|
1
|
+
{"version":3,"file":"navFilter.d.ts","sourceRoot":"","sources":["../../../src/layouts/navFilter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,CAKpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAyBzE;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,WAAW,EAAE,CAqBf;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,MAAM,GACZ,WAAW,EAAE,CASf;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAY7D"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type ThemeDensity = "comfortable" | "compact";
|
|
|
5
5
|
/**
|
|
6
6
|
* Sidebar / app-hub navigation row. Maps to Ant Design `Menu` items.
|
|
7
7
|
*
|
|
8
|
-
* - **`children`** — nested submenu
|
|
8
|
+
* - **`children`** — nested submenu. The menu key is `${path}__submenu` so it does not collide with a child that reuses `path`.
|
|
9
9
|
* - **`label`** — string or any React node (badges, extra markup).
|
|
10
10
|
* - **`Icon`** — optional; omit on group-only rows if you prefer text-only labels.
|
|
11
11
|
*/
|
package/package.json
CHANGED
|
@@ -38,7 +38,7 @@ function FileFieldInput({
|
|
|
38
38
|
const showClear = clearable && hasUploadValue(value);
|
|
39
39
|
|
|
40
40
|
return (
|
|
41
|
-
<Space
|
|
41
|
+
<Space orientation="vertical" size="middle" style={{ width: "100%" }}>
|
|
42
42
|
{fileName ? (
|
|
43
43
|
<Space>
|
|
44
44
|
<PaperClipOutlined />
|
|
@@ -38,7 +38,7 @@ function ImageFieldInput({
|
|
|
38
38
|
const showClear = clearable && hasUploadValue(value);
|
|
39
39
|
|
|
40
40
|
return (
|
|
41
|
-
<Space
|
|
41
|
+
<Space orientation="vertical" size="middle" style={{ width: "100%" }}>
|
|
42
42
|
{previewUrl ? (
|
|
43
43
|
<Image
|
|
44
44
|
src={previewUrl}
|
|
@@ -142,8 +142,10 @@ function ReferenceFieldSelect({
|
|
|
142
142
|
{...referenceSelectDropdownProps({ popupMatchSelectWidth, popupMinWidth })}
|
|
143
143
|
value={referenceSelectDisplayValue(selectedLoading, selectValue, undefined)}
|
|
144
144
|
onChange={(next) => {
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
// Ant Design clear emits undefined; RHF Controller ignores that.
|
|
146
|
+
const value = next ?? null;
|
|
147
|
+
onChange(value);
|
|
148
|
+
onValueChange?.(value, optionForValue(next), { name: fieldName });
|
|
147
149
|
}}
|
|
148
150
|
options={selectOptions}
|
|
149
151
|
loading={selectState.loading}
|
|
@@ -151,7 +153,7 @@ function ReferenceFieldSelect({
|
|
|
151
153
|
showSearch={search}
|
|
152
154
|
filterOption={search ? false : undefined}
|
|
153
155
|
onSearch={search ? setSearchText : undefined}
|
|
154
|
-
|
|
156
|
+
onOpenChange={(open) => {
|
|
155
157
|
setDropdownOpen(open);
|
|
156
158
|
if (!open) setSearchText(undefined);
|
|
157
159
|
}}
|
|
@@ -106,14 +106,14 @@ function ReferenceManyFieldSelect({
|
|
|
106
106
|
{...referenceSelectDropdownProps({ popupMatchSelectWidth, popupMinWidth })}
|
|
107
107
|
mode="multiple"
|
|
108
108
|
value={referenceSelectDisplayValue(selectedLoading, selectValue, [])}
|
|
109
|
-
onChange={onChange}
|
|
109
|
+
onChange={(next) => onChange(next ?? [])}
|
|
110
110
|
options={selectOptions}
|
|
111
111
|
loading={selectState.loading}
|
|
112
112
|
notFoundContent={referenceSelectNotFoundContent(selectState.loading)}
|
|
113
113
|
showSearch={search}
|
|
114
114
|
filterOption={search ? false : undefined}
|
|
115
115
|
onSearch={search ? setSearchText : undefined}
|
|
116
|
-
|
|
116
|
+
onOpenChange={(open) => {
|
|
117
117
|
setDropdownOpen(open);
|
|
118
118
|
if (!open) setSearchText(undefined);
|
|
119
119
|
}}
|
|
@@ -37,7 +37,7 @@ export function SelectField({
|
|
|
37
37
|
{({ value, onChange, disabled }) => (
|
|
38
38
|
<Select
|
|
39
39
|
value={value as string | number | (string | number)[] | undefined}
|
|
40
|
-
onChange={onChange}
|
|
40
|
+
onChange={(next) => onChange(next ?? null)}
|
|
41
41
|
options={choices}
|
|
42
42
|
mode={mode}
|
|
43
43
|
allowClear={allowClear}
|
|
@@ -139,7 +139,7 @@ function ReferenceFilterInput({
|
|
|
139
139
|
showSearch={search}
|
|
140
140
|
filterOption={search ? false : undefined}
|
|
141
141
|
onSearch={search ? setSearchText : undefined}
|
|
142
|
-
|
|
142
|
+
onOpenChange={(open) => {
|
|
143
143
|
setDropdownOpen(open);
|
|
144
144
|
if (!open) setSearchText(undefined);
|
|
145
145
|
}}
|
|
@@ -26,6 +26,7 @@ import { useThemeMode } from "../context/AppThemeProvider";
|
|
|
26
26
|
import {
|
|
27
27
|
collectSubmenuKeys,
|
|
28
28
|
filterNavItems,
|
|
29
|
+
navSubmenuKey,
|
|
29
30
|
} from "./navFilter";
|
|
30
31
|
import { navItemsToAntdItems } from "./navMenuItems";
|
|
31
32
|
import { filterNavByPermission } from "../permissions/resourcePermissions";
|
|
@@ -70,7 +71,7 @@ function ancestorKeysForActivePath(
|
|
|
70
71
|
for (const node of nodes) {
|
|
71
72
|
if (node.children?.length) {
|
|
72
73
|
const sub = dfs(node.children);
|
|
73
|
-
if (sub !== null) return [node.path, ...sub];
|
|
74
|
+
if (sub !== null) return [navSubmenuKey(node.path), ...sub];
|
|
74
75
|
} else if (node.path === pathname) {
|
|
75
76
|
return [];
|
|
76
77
|
}
|
package/src/layouts/navFilter.ts
CHANGED
|
@@ -83,12 +83,17 @@ export function filterFlatNavItems(
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
/** Menu key for a parent row so it never collides with a child that shares `path`. */
|
|
87
|
+
export function navSubmenuKey(path: string): string {
|
|
88
|
+
return `${path}__submenu`;
|
|
89
|
+
}
|
|
90
|
+
|
|
86
91
|
export function collectSubmenuKeys(items: NavItem[]): string[] {
|
|
87
92
|
const keys: string[] = [];
|
|
88
93
|
function walk(nodes: NavItem[]) {
|
|
89
94
|
for (const node of nodes) {
|
|
90
95
|
if (node.children?.length) {
|
|
91
|
-
keys.push(node.path);
|
|
96
|
+
keys.push(navSubmenuKey(node.path));
|
|
92
97
|
walk(node.children);
|
|
93
98
|
}
|
|
94
99
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MenuProps } from "antd";
|
|
2
2
|
import { NavMenuLabel } from "../components/NavMenuLabel";
|
|
3
3
|
import type { NavItem } from "../types";
|
|
4
|
-
import { getNavItemLabel } from "./navFilter";
|
|
4
|
+
import { getNavItemLabel, navSubmenuKey } from "./navFilter";
|
|
5
5
|
|
|
6
6
|
export function navItemsToAntdItems(
|
|
7
7
|
items: NavItem[],
|
|
@@ -36,7 +36,7 @@ export function navItemsToAntdItems(
|
|
|
36
36
|
|
|
37
37
|
if (item.children?.length) {
|
|
38
38
|
return {
|
|
39
|
-
key: item.path,
|
|
39
|
+
key: navSubmenuKey(item.path),
|
|
40
40
|
icon,
|
|
41
41
|
label,
|
|
42
42
|
...itemTitle,
|
package/src/types.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type ThemeDensity = "comfortable" | "compact";
|
|
|
8
8
|
/**
|
|
9
9
|
* Sidebar / app-hub navigation row. Maps to Ant Design `Menu` items.
|
|
10
10
|
*
|
|
11
|
-
* - **`children`** — nested submenu
|
|
11
|
+
* - **`children`** — nested submenu. The menu key is `${path}__submenu` so it does not collide with a child that reuses `path`.
|
|
12
12
|
* - **`label`** — string or any React node (badges, extra markup).
|
|
13
13
|
* - **`Icon`** — optional; omit on group-only rows if you prefer text-only labels.
|
|
14
14
|
*/
|