@simplysm/solid 13.0.23 → 13.0.25
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/layout/sidebar/SidebarUser.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarUser.js +13 -9
- package/dist/components/layout/sidebar/SidebarUser.js.map +2 -2
- package/dist/helpers/createAppStructure.d.ts +1 -0
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +16 -1
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/docs/hooks.md +19 -0
- package/package.json +3 -3
- package/src/components/layout/sidebar/SidebarUser.tsx +5 -3
- package/src/helpers/createAppStructure.ts +22 -0
- package/tailwind.config.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarUser.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sidebar/SidebarUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAoB,MAAM,UAAU,CAAC;AAGzF,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarUser.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sidebar/SidebarUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAoB,MAAM,UAAU,CAAC;AAGzF,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6B1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3F;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAuDnD,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { className as _$className } from "solid-js/web";
|
|
|
9
9
|
import { use as _$use } from "solid-js/web";
|
|
10
10
|
import { spread as _$spread } from "solid-js/web";
|
|
11
11
|
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
12
|
-
var _tmpl$ = /* @__PURE__ */ _$template(`<div class="flex flex-col"><span class=font-semibold></span><span>`), _tmpl$2 = /* @__PURE__ */ _$template(`<div><button type=button><div class="relative flex flex-1 items-center gap-3"><div>`), _tmpl$
|
|
12
|
+
var _tmpl$ = /* @__PURE__ */ _$template(`<div class="flex flex-col"><span class=font-semibold></span><span>`), _tmpl$2 = /* @__PURE__ */ _$template(`<hr>`), _tmpl$3 = /* @__PURE__ */ _$template(`<div><button type=button><div class="relative flex flex-1 items-center gap-3"><div>`), _tmpl$4 = /* @__PURE__ */ _$template(`<span class=font-semibold>`);
|
|
13
13
|
import { createSignal, For, Show, splitProps } from "solid-js";
|
|
14
14
|
import clsx from "clsx";
|
|
15
15
|
import { twMerge } from "tailwind-merge";
|
|
@@ -21,7 +21,7 @@ import { ListItem } from "../../data/list/ListItem.js";
|
|
|
21
21
|
import { Icon } from "../../display/Icon.js";
|
|
22
22
|
void ripple;
|
|
23
23
|
const containerClass = clsx("m-2 flex flex-col overflow-hidden rounded bg-white dark:bg-base-800");
|
|
24
|
-
const headerClass = clsx("flex", "items-center", "p-2", "text-left", "cursor-pointer", "transition-colors", "hover:bg-base-
|
|
24
|
+
const headerClass = clsx("flex", "items-center", "p-2", "m-1", "rounded-md", "text-left", "cursor-pointer", "transition-colors", "hover:bg-base-500/10", "dark:hover:bg-base-700");
|
|
25
25
|
const headerReadonlyClass = clsx("cursor-default hover:bg-transparent dark:hover:bg-transparent");
|
|
26
26
|
const avatarClass = clsx("flex size-10 items-center justify-center rounded-full", "bg-primary-500 text-white");
|
|
27
27
|
const SidebarUser = (props) => {
|
|
@@ -37,10 +37,10 @@ const SidebarUser = (props) => {
|
|
|
37
37
|
setOpen(false);
|
|
38
38
|
menu.onClick();
|
|
39
39
|
};
|
|
40
|
-
const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass
|
|
40
|
+
const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass);
|
|
41
41
|
const getContainerClassName = () => twMerge(containerClass, local.class);
|
|
42
42
|
return (() => {
|
|
43
|
-
var _el$ = _tmpl$
|
|
43
|
+
var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
44
44
|
_$spread(_el$, _$mergeProps(rest, {
|
|
45
45
|
"data-sidebar-user": "",
|
|
46
46
|
get ["class"]() {
|
|
@@ -62,9 +62,9 @@ const SidebarUser = (props) => {
|
|
|
62
62
|
},
|
|
63
63
|
get fallback() {
|
|
64
64
|
return (() => {
|
|
65
|
-
var _el$
|
|
66
|
-
_$insert(_el$
|
|
67
|
-
return _el$
|
|
65
|
+
var _el$9 = _tmpl$4();
|
|
66
|
+
_$insert(_el$9, () => local.name);
|
|
67
|
+
return _el$9;
|
|
68
68
|
})();
|
|
69
69
|
},
|
|
70
70
|
get children() {
|
|
@@ -85,7 +85,11 @@ const SidebarUser = (props) => {
|
|
|
85
85
|
return open();
|
|
86
86
|
},
|
|
87
87
|
get children() {
|
|
88
|
-
return
|
|
88
|
+
return [(() => {
|
|
89
|
+
var _el$8 = _tmpl$2();
|
|
90
|
+
_$effect(() => _$className(_el$8, clsx("border-base-200 dark:border-base-700")));
|
|
91
|
+
return _el$8;
|
|
92
|
+
})(), _$createComponent(List, {
|
|
89
93
|
inset: true,
|
|
90
94
|
get children() {
|
|
91
95
|
return _$createComponent(For, {
|
|
@@ -100,7 +104,7 @@ const SidebarUser = (props) => {
|
|
|
100
104
|
})
|
|
101
105
|
});
|
|
102
106
|
}
|
|
103
|
-
});
|
|
107
|
+
})];
|
|
104
108
|
}
|
|
105
109
|
});
|
|
106
110
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/layout/sidebar/SidebarUser.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;AAAA,SAAyBA,cAAcC,KAAeC,MAAMC,kBAAkB;AAC9E,OAAOC,UAAU;AACjB,SAASC,eAAe;AAExB,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,gBAAgB;AACzB,SAASC,YAAY;AACrB,SAASC,gBAAgB;AACzB,SAASC,YAAY;AAErB,KAAKJ;AAEL,MAAMK,iBAAiBR,KAAK,qEAAqE;AAEjG,MAAMS,cAAcT,KAClB,QACA,gBACA,OACA,aACA,kBACA,qBACA,
|
|
5
|
-
"names": ["createSignal", "For", "Show", "splitProps", "clsx", "twMerge", "IconUser", "ripple", "Collapse", "List", "ListItem", "Icon", "containerClass", "headerClass", "headerReadonlyClass", "avatarClass", "SidebarUser", "props", "local", "rest", "open", "setOpen", "hasMenus", "menus", "undefined", "length", "handleClick", "v", "handleMenuClick", "menu", "onClick", "getHeaderClassName", "getContainerClassName", "class", "_el$", "_tmpl$
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["createSignal", "For", "Show", "splitProps", "clsx", "twMerge", "IconUser", "ripple", "Collapse", "List", "ListItem", "Icon", "containerClass", "headerClass", "headerReadonlyClass", "avatarClass", "SidebarUser", "props", "local", "rest", "open", "setOpen", "hasMenus", "menus", "undefined", "length", "handleClick", "v", "handleMenuClick", "menu", "onClick", "getHeaderClassName", "getContainerClassName", "class", "_el$", "_tmpl$3", "_el$2", "firstChild", "_el$3", "_el$4", "_$spread", "_$mergeProps", "$$click", "_$use", "_$className", "_$insert", "_$createComponent", "icon", "when", "description", "fallback", "_el$9", "_tmpl$4", "name", "children", "_el$5", "_tmpl$", "_el$6", "_el$7", "nextSibling", "_$effect", "_el$8", "_tmpl$2", "inset", "each", "title", "_p$", "_v$", "_v$2", "e", "t", "_$setAttribute", "_$delegateEvents"]
|
|
6
6
|
}
|
|
@@ -43,6 +43,7 @@ export interface AppStructure<TModule> {
|
|
|
43
43
|
usableMenus: Accessor<SidebarMenuItem[]>;
|
|
44
44
|
usableFlatMenus: Accessor<AppFlatMenu[]>;
|
|
45
45
|
permRecord: Accessor<Record<string, boolean>>;
|
|
46
|
+
getTitleChainByHref(href: string): string[];
|
|
46
47
|
}
|
|
47
48
|
export declare function createAppStructure<TModule>(opts: {
|
|
48
49
|
items: AppStructureItem<TModule>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAppStructure.d.ts","sourceRoot":"","sources":["../../src/helpers/createAppStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAIhF,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAEvG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,OAAO;IACnC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"createAppStructure.d.ts","sourceRoot":"","sources":["../../src/helpers/createAppStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAIhF,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAEvG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,OAAO;IACnC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7C;AAmHD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAChD,GAAG,YAAY,CAAC,OAAO,CAAC,CA4BxB"}
|
|
@@ -65,6 +65,17 @@ function flattenMenus(menus, titleChain = []) {
|
|
|
65
65
|
}
|
|
66
66
|
return result;
|
|
67
67
|
}
|
|
68
|
+
function findItemChainByCodes(items, codes) {
|
|
69
|
+
const result = [];
|
|
70
|
+
let currentItems = items;
|
|
71
|
+
for (const code of codes) {
|
|
72
|
+
const found = currentItems.find((item) => item.code === code);
|
|
73
|
+
if (found === void 0) break;
|
|
74
|
+
result.push(found);
|
|
75
|
+
currentItems = isGroupItem(found) ? found.children : [];
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
68
79
|
function createAppStructure(opts) {
|
|
69
80
|
const permRecord = () => {
|
|
70
81
|
var _a;
|
|
@@ -87,7 +98,11 @@ function createAppStructure(opts) {
|
|
|
87
98
|
routes,
|
|
88
99
|
usableMenus,
|
|
89
100
|
usableFlatMenus,
|
|
90
|
-
permRecord
|
|
101
|
+
permRecord,
|
|
102
|
+
getTitleChainByHref(href) {
|
|
103
|
+
const codes = href.split("/").filter(Boolean);
|
|
104
|
+
return findItemChainByCodes(opts.items, codes).map((item) => item.title);
|
|
105
|
+
}
|
|
91
106
|
};
|
|
92
107
|
}
|
|
93
108
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/helpers/createAppStructure.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAwB,kBAAkB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/docs/hooks.md
CHANGED
|
@@ -311,3 +311,22 @@ interface AppStructureLeafItem<TModule> {
|
|
|
311
311
|
|
|
312
312
|
type AppStructureItem<TModule> = AppStructureGroupItem<TModule> | AppStructureLeafItem<TModule>;
|
|
313
313
|
```
|
|
314
|
+
|
|
315
|
+
#### getTitleChainByHref
|
|
316
|
+
|
|
317
|
+
Retrieves the breadcrumb title chain for a given href path. Works on raw items (including `isNotMenu` items).
|
|
318
|
+
|
|
319
|
+
```tsx
|
|
320
|
+
import { createAppStructure } from "@simplysm/solid";
|
|
321
|
+
|
|
322
|
+
const appStructure = createAppStructure({ items });
|
|
323
|
+
|
|
324
|
+
// Returns ["Sales", "Invoice"] for /home/sales/invoice
|
|
325
|
+
const titles = appStructure.getTitleChainByHref("/home/sales/invoice");
|
|
326
|
+
|
|
327
|
+
// Use with router for dynamic breadcrumb
|
|
328
|
+
import { useLocation } from "@solidjs/router";
|
|
329
|
+
|
|
330
|
+
const location = useLocation();
|
|
331
|
+
const breadcrumb = () => appStructure.getTitleChainByHref(location.pathname);
|
|
332
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/solid",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.25",
|
|
4
4
|
"description": "심플리즘 패키지 - SolidJS 라이브러리",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"solid-tiptap": "^0.8.0",
|
|
50
50
|
"tailwind-merge": "^3.4.1",
|
|
51
51
|
"tailwindcss": "^3.4.19",
|
|
52
|
-
"@simplysm/core-browser": "13.0.
|
|
53
|
-
"@simplysm/core-common": "13.0.
|
|
52
|
+
"@simplysm/core-browser": "13.0.25",
|
|
53
|
+
"@simplysm/core-common": "13.0.25"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@solidjs/testing-library": "^0.8.10"
|
|
@@ -17,10 +17,12 @@ const headerClass = clsx(
|
|
|
17
17
|
"flex",
|
|
18
18
|
"items-center",
|
|
19
19
|
"p-2",
|
|
20
|
+
"m-1",
|
|
21
|
+
"rounded-md",
|
|
20
22
|
"text-left",
|
|
21
23
|
"cursor-pointer",
|
|
22
24
|
"transition-colors",
|
|
23
|
-
"hover:bg-base-
|
|
25
|
+
"hover:bg-base-500/10",
|
|
24
26
|
"dark:hover:bg-base-700",
|
|
25
27
|
);
|
|
26
28
|
|
|
@@ -95,8 +97,7 @@ export const SidebarUser: Component<SidebarUserProps> = (props) => {
|
|
|
95
97
|
menu.onClick();
|
|
96
98
|
};
|
|
97
99
|
|
|
98
|
-
const getHeaderClassName = () =>
|
|
99
|
-
twMerge(headerClass, !hasMenus() && headerReadonlyClass, open() && "border-b border-b-base-50");
|
|
100
|
+
const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass);
|
|
100
101
|
|
|
101
102
|
const getContainerClassName = () => twMerge(containerClass, local.class);
|
|
102
103
|
|
|
@@ -123,6 +124,7 @@ export const SidebarUser: Component<SidebarUserProps> = (props) => {
|
|
|
123
124
|
</button>
|
|
124
125
|
<Show when={hasMenus()}>
|
|
125
126
|
<Collapse open={open()}>
|
|
127
|
+
<hr class={clsx("border-base-200 dark:border-base-700")} />
|
|
126
128
|
<List inset>
|
|
127
129
|
<For each={local.menus}>
|
|
128
130
|
{(menu) => <ListItem onClick={() => handleMenuClick(menu)}>{menu.title}</ListItem>}
|
|
@@ -54,6 +54,7 @@ export interface AppStructure<TModule> {
|
|
|
54
54
|
usableMenus: Accessor<SidebarMenuItem[]>;
|
|
55
55
|
usableFlatMenus: Accessor<AppFlatMenu[]>;
|
|
56
56
|
permRecord: Accessor<Record<string, boolean>>;
|
|
57
|
+
getTitleChainByHref(href: string): string[];
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
// ── 내부 헬퍼 ──
|
|
@@ -150,6 +151,23 @@ function flattenMenus(menus: SidebarMenuItem[], titleChain: string[] = []): AppF
|
|
|
150
151
|
return result;
|
|
151
152
|
}
|
|
152
153
|
|
|
154
|
+
function findItemChainByCodes<TModule>(
|
|
155
|
+
items: AppStructureItem<TModule>[],
|
|
156
|
+
codes: string[],
|
|
157
|
+
): AppStructureItem<TModule>[] {
|
|
158
|
+
const result: AppStructureItem<TModule>[] = [];
|
|
159
|
+
|
|
160
|
+
let currentItems = items;
|
|
161
|
+
for (const code of codes) {
|
|
162
|
+
const found = currentItems.find((item) => item.code === code);
|
|
163
|
+
if (found === undefined) break;
|
|
164
|
+
result.push(found);
|
|
165
|
+
currentItems = isGroupItem(found) ? found.children : [];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
|
|
153
171
|
// ── 메인 함수 ──
|
|
154
172
|
|
|
155
173
|
export function createAppStructure<TModule>(opts: {
|
|
@@ -179,5 +197,9 @@ export function createAppStructure<TModule>(opts: {
|
|
|
179
197
|
usableMenus,
|
|
180
198
|
usableFlatMenus,
|
|
181
199
|
permRecord,
|
|
200
|
+
getTitleChainByHref(href: string): string[] {
|
|
201
|
+
const codes = href.split("/").filter(Boolean);
|
|
202
|
+
return findItemChainByCodes(opts.items, codes).map((item) => item.title);
|
|
203
|
+
},
|
|
182
204
|
};
|
|
183
205
|
}
|