ding-react-admin 2.0.9 → 2.2.0

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.
@@ -0,0 +1,15 @@
1
+ import { FlatNavItem } from '../layouts/navFilter';
2
+ import { NavItem } from '../types';
3
+ export type AppHubProps = {
4
+ apps: NavItem[];
5
+ /** Flattened leaf menus from all apps — enables cross-app search when set. */
6
+ menuItems?: FlatNavItem[];
7
+ onAppClick?: (app: NavItem) => void;
8
+ onMenuClick?: (item: FlatNavItem) => void;
9
+ menuSearchPlaceholder?: string;
10
+ className?: string;
11
+ /** Max width of the centered hub content. Default `960`. */
12
+ maxWidth?: number;
13
+ };
14
+ export declare function AppHub({ apps, menuItems, onAppClick, onMenuClick, menuSearchPlaceholder, className, maxWidth, }: AppHubProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=AppHub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHub.d.ts","sourceRoot":"","sources":["../../../src/components/AppHub.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,WAAW,EACX,qBAAmD,EACnD,SAAS,EACT,QAAc,GACf,EAAE,WAAW,2CA2Gb"}
@@ -0,0 +1,7 @@
1
+ export type AppLauncherButtonProps = {
2
+ hubPath?: string;
3
+ label?: string;
4
+ onClick?: () => void;
5
+ };
6
+ export declare function AppLauncherButton({ hubPath, label, onClick, }: AppLauncherButtonProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AppLauncherButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppLauncherButton.d.ts","sourceRoot":"","sources":["../../../src/components/AppLauncherButton.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,OAAa,EACb,KAAc,EACd,OAAO,GACR,EAAE,sBAAsB,2CAkBxB"}
@@ -1,3 +1,5 @@
1
+ export { AppHub } from './AppHub';
2
+ export { AppLauncherButton } from './AppLauncherButton';
1
3
  export { AuthAlternateLink } from './AuthAlternateLink';
2
4
  export { NavMenuLabel } from './NavMenuLabel';
3
5
  export { NavMenuSearch } from './NavMenuSearch';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -17,16 +17,18 @@ export { applyInMemoryListParams, filterRows, getById as getRowById, } from './d
17
17
  export type { CombineResourceHandlersOptions, ResourceAction, ResourceGuard, ResourceHandlerEntry, ResourceHandlerMap, ResourceHandlers, } from './data/resourceHandlers';
18
18
  export type { ResourcePermissions } from './permissions/resourcePermissions';
19
19
  export { filterNavByPermission } from './permissions/resourcePermissions';
20
+ export { flattenNavLeaves, filterFlatNavItems, filterNavItems, getNavItemLabel, } from './layouts/navFilter';
21
+ export type { FlatNavItem } from './layouts/navFilter';
20
22
  export type { MemoryResourceHandlersConfig } from './data/createMemoryResourceHandlers';
21
23
  export type { PermissionsChecker } from './context/PermissionsProvider';
22
24
  export { LoginPage } from './pages/LoginPage';
23
25
  export { PlaceholderPage } from './pages/PlaceholderPage';
24
26
  export { AuthPageLayout } from './layouts/AuthPageLayout';
25
- export { AuthAlternateLink, DensitySwitch, ThemeSwitch, ThemeToolbar, } from './components';
27
+ export { AppHub, AppLauncherButton, AuthAlternateLink, DensitySwitch, ThemeSwitch, ThemeToolbar, } from './components';
26
28
  export { Guard, GuestOnly, Protected, RequirePermission } from './router/guards';
27
29
  export { createAdminRouter } from './router/createAdminRouter';
28
30
  export { deriveAuthPaths, getRouteAccess, partitionAdminRoutes, } from './router/routeAccess';
29
- export type { AdminAppProps, AdminLayoutProps, AdminRouteChild, AppThemeProviderProps, AuthAdapter, LoginCredentials, AuthRedirects, CreateAdminRouterOptions, AuthAlternateLinkProps, AuthPageLayoutProps, LoginPageProps, NavItem, NavMenuItemDivider, RouteAccess, ThemeDensity, ThemeMode, } from './types';
31
+ export type { AdminAppProps, AdminLayoutProps, AdminRouteChild, AppThemeProviderProps, AuthAdapter, LoginCredentials, AuthRedirects, CreateAdminRouterOptions, AppHubProps, AppLauncherButtonProps, AuthAlternateLinkProps, AuthPageLayoutProps, LoginPageProps, NavItem, NavMenuItemDivider, RouteAccess, ThemeDensity, ThemeMode, } from './types';
30
32
  export { ResourceList, FilterBar, ResourceForm, ResourceFormModal, InlineFormSet, InlineFormSetStacked, FormTabs, FormTab, FormSteps, FormStep, TextField, TextAreaField, NumberField, BooleanField, DateField, DateTimeField, TimeField, SelectField, PasswordField, ReferenceField, ReferenceManyField, ImageField, FileField, FieldWrapper, TextColumn, NumberColumn, BooleanColumn, DateColumn, ReferenceColumn, ReferenceManyColumn, ImageColumn, CustomColumn, TextFilter, DEFAULT_TEXT_FILTER_DEBOUNCE_MS, NumberFilter, BooleanFilter, DateFilter, SelectFilter, ReferenceFilter, ReferenceManyFilter, useListQueryState, useChoices, useAbortableEffect, getFormValue, setFormValue, buildFormPayload, buildInlineRowsPayload, buildResourceFormSubmitBody, prepareFormSubmitBody, toFormData, hasUploadValues, nestedFieldPath, useResourceListContext, useRegisterPayloadField, useRegisterSectionField, } from './crud';
31
33
  export type { ResourceFormProps, ResourceFormModalProps, InlineFormSetProps, InlineFormSetStackedProps, FormTabsProps, FormTabProps, FormStepsProps, FormStepProps, InlineFormSetLayout, ResourceListProps, TextFilterProps, BaseSourceProps, ChoiceOption, ChoicesLoader, UseChoicesOptions, ReferenceFieldProps, ReferenceManyFieldProps, DisplayProps, EditMode, FieldRules, InlineCellContext, InlineColumnDef, InlineFormSetBaseProps, InlineRowContext, InlineFieldRegistration, TextAreaFieldProps, FieldWrapperProps, ImageFieldProps, FileFieldProps, UploadFieldValue, ToFormDataOptions, PrepareFormSubmitBodyOptions, ResourceListBuiltInActions, ResourceListBulkAction, ResourceListBulkActionHelpers, ResourceListRowActionsHelpers, ListQueryState, ListQueryActions, } from './crud';
32
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { AdminLayoutProps } from '../types';
2
- export declare function AdminLayout({ navItems, brand, collapsedBrand, mobileDrawerTitle, headerExtras, userMenuItems, onUserMenuClick, loginPath, siderCollapsedStorageKey, navSearch, navMenu, }: AdminLayoutProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AdminLayout({ navItems, brand, collapsedBrand, mobileDrawerTitle, headerExtras, userMenuItems, onUserMenuClick, loginPath, siderCollapsedStorageKey, navSearch, navMenu, hideSider, }: AdminLayoutProps): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=AdminLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AdminLayout.tsx"],"names":[],"mappings":"AA+BA,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,GACR,EAAE,gBAAgB,2CAmWlB"}
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/layouts/AdminLayout.tsx"],"names":[],"mappings":"AA+BA,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"}
@@ -1,5 +1,17 @@
1
+ import { ReactNode } from 'react';
1
2
  import { NavItem } from '../types';
2
- export declare function getNavItemLabel(item: NavItem): string;
3
+ export type FlatNavItem = {
4
+ path: string;
5
+ label: ReactNode;
6
+ group?: string;
7
+ Icon?: NavItem["Icon"];
8
+ };
9
+ export declare function getNavItemLabel(item: Pick<NavItem, "label">): string;
3
10
  export declare function filterNavItems(items: NavItem[], query: string): NavItem[];
11
+ /** Leaf menu rows from a nav tree, optionally tagged with an app/group name. */
12
+ export declare function flattenNavLeaves(items: NavItem[], options?: {
13
+ group?: string;
14
+ }): FlatNavItem[];
15
+ export declare function filterFlatNavItems(items: FlatNavItem[], query: string): FlatNavItem[];
4
16
  export declare function collectSubmenuKeys(items: NavItem[]): string[];
5
17
  //# 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,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAKrD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAyBzE;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,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAY7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"createAdminRouter.d.ts","sourceRoot":"","sources":["../../../src/router/createAdminRouter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AASzD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE,wBAAwB,qCA+C1B"}
1
+ {"version":3,"file":"createAdminRouter.d.ts","sourceRoot":"","sources":["../../../src/router/createAdminRouter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AASzD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE,wBAAwB,qCAiD1B"}
@@ -96,8 +96,15 @@ export type AdminLayoutProps = {
96
96
  */
97
97
  itemDivider?: NavMenuItemDivider;
98
98
  };
99
+ /**
100
+ * Hide the sidebar and mobile nav drawer (e.g. on an Odoo-style app hub home).
101
+ * Default **`false`**.
102
+ */
103
+ hideSider?: boolean;
99
104
  };
100
105
  export type { AuthPageLayoutProps } from './layouts/AuthPageLayout';
106
+ export type { AppHubProps } from './components/AppHub';
107
+ export type { AppLauncherButtonProps } from './components/AppLauncherButton';
101
108
  export type { AuthAlternateLinkProps } from './components/AuthAlternateLink';
102
109
  export type LoginPageProps = {
103
110
  title?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ding-react-admin",
3
- "version": "2.0.9",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Composable admin shell (Ant Design + React Router): quick-start AdminApp or build your own layout.",
@@ -0,0 +1,139 @@
1
+ import { Card, Col, List, Row, Space, Typography, theme } from "antd";
2
+ import { useMemo, useState } from "react";
3
+ import { useNavigate } from "react-router-dom";
4
+ import {
5
+ filterFlatNavItems,
6
+ getNavItemLabel,
7
+ } from "../layouts/navFilter";
8
+ import type { FlatNavItem } from "../layouts/navFilter";
9
+ import type { NavItem } from "../types";
10
+ import { NavMenuSearch } from "./NavMenuSearch";
11
+
12
+ export type AppHubProps = {
13
+ apps: NavItem[];
14
+ /** Flattened leaf menus from all apps — enables cross-app search when set. */
15
+ menuItems?: FlatNavItem[];
16
+ onAppClick?: (app: NavItem) => void;
17
+ onMenuClick?: (item: FlatNavItem) => void;
18
+ menuSearchPlaceholder?: string;
19
+ className?: string;
20
+ /** Max width of the centered hub content. Default `960`. */
21
+ maxWidth?: number;
22
+ };
23
+
24
+ export function AppHub({
25
+ apps,
26
+ menuItems,
27
+ onAppClick,
28
+ onMenuClick,
29
+ menuSearchPlaceholder = "Search menus across apps…",
30
+ className,
31
+ maxWidth = 960,
32
+ }: AppHubProps) {
33
+ const navigate = useNavigate();
34
+ const { token } = theme.useToken();
35
+ const [query, setQuery] = useState("");
36
+
37
+ const handleAppClick = (app: NavItem) => {
38
+ if (onAppClick) {
39
+ onAppClick(app);
40
+ return;
41
+ }
42
+ navigate(app.path);
43
+ };
44
+
45
+ const handleMenuClick = (item: FlatNavItem) => {
46
+ if (onMenuClick) {
47
+ onMenuClick(item);
48
+ return;
49
+ }
50
+ navigate(item.path);
51
+ };
52
+
53
+ const trimmedQuery = query.trim();
54
+ const menuResults = useMemo(
55
+ () =>
56
+ menuItems && trimmedQuery
57
+ ? filterFlatNavItems(menuItems, trimmedQuery)
58
+ : [],
59
+ [menuItems, trimmedQuery],
60
+ );
61
+ const isSearching = Boolean(menuItems && trimmedQuery);
62
+
63
+ return (
64
+ <div
65
+ className={className}
66
+ style={{
67
+ width: "100%",
68
+ maxWidth,
69
+ marginInline: "auto",
70
+ paddingInline: token.paddingMD,
71
+ }}
72
+ >
73
+ {menuItems?.length ? (
74
+ <div style={{ maxWidth: 480, margin: "0 auto 24px" }}>
75
+ <NavMenuSearch
76
+ value={query}
77
+ onChange={setQuery}
78
+ placeholder={menuSearchPlaceholder}
79
+ variant="app"
80
+ />
81
+ </div>
82
+ ) : null}
83
+
84
+ {isSearching ? (
85
+ <List
86
+ bordered
87
+ dataSource={menuResults}
88
+ locale={{ emptyText: "No menus match your search." }}
89
+ style={{ background: token.colorBgContainer, borderRadius: token.borderRadiusLG }}
90
+ renderItem={(item) => {
91
+ const Icon = item.Icon;
92
+ return (
93
+ <List.Item
94
+ style={{ cursor: "pointer" }}
95
+ onClick={() => handleMenuClick(item)}
96
+ >
97
+ <List.Item.Meta
98
+ avatar={
99
+ Icon ? (
100
+ <span style={{ fontSize: 20, lineHeight: 1 }}>
101
+ <Icon />
102
+ </span>
103
+ ) : undefined
104
+ }
105
+ title={getNavItemLabel(item)}
106
+ description={item.group}
107
+ />
108
+ </List.Item>
109
+ );
110
+ }}
111
+ />
112
+ ) : (
113
+ <Row gutter={[16, 16]} justify="center">
114
+ {apps.map((app) => {
115
+ const Icon = app.Icon;
116
+ return (
117
+ <Col key={app.path} xs={12} sm={8} md={6} lg={4} style={{ maxWidth: 200 }}>
118
+ <Card
119
+ hoverable
120
+ onClick={() => handleAppClick(app)}
121
+ styles={{ body: { textAlign: "center", padding: token.paddingLG } }}
122
+ >
123
+ <Space orientation="vertical" size="middle">
124
+ {Icon ? (
125
+ <span style={{ fontSize: 40, lineHeight: 1 }}>
126
+ <Icon />
127
+ </span>
128
+ ) : null}
129
+ <Typography.Text strong>{app.label}</Typography.Text>
130
+ </Space>
131
+ </Card>
132
+ </Col>
133
+ );
134
+ })}
135
+ </Row>
136
+ )}
137
+ </div>
138
+ );
139
+ }
@@ -0,0 +1,33 @@
1
+ import { AppstoreOutlined } from "@ant-design/icons";
2
+ import { Button } from "antd";
3
+ import { useNavigate } from "react-router-dom";
4
+
5
+ export type AppLauncherButtonProps = {
6
+ hubPath?: string;
7
+ label?: string;
8
+ onClick?: () => void;
9
+ };
10
+
11
+ export function AppLauncherButton({
12
+ hubPath = "/",
13
+ label = "Apps",
14
+ onClick,
15
+ }: AppLauncherButtonProps) {
16
+ const navigate = useNavigate();
17
+
18
+ return (
19
+ <Button
20
+ type="text"
21
+ icon={<AppstoreOutlined />}
22
+ onClick={() => {
23
+ if (onClick) {
24
+ onClick();
25
+ return;
26
+ }
27
+ navigate(hubPath);
28
+ }}
29
+ >
30
+ {label}
31
+ </Button>
32
+ );
33
+ }
@@ -1,3 +1,5 @@
1
+ export { AppHub } from "./AppHub";
2
+ export { AppLauncherButton } from "./AppLauncherButton";
1
3
  export { AuthAlternateLink } from "./AuthAlternateLink";
2
4
  export { NavMenuLabel } from "./NavMenuLabel";
3
5
  export { NavMenuSearch } from "./NavMenuSearch";
package/src/index.ts CHANGED
@@ -83,12 +83,21 @@ export type {
83
83
  } from "./data/resourceHandlers";
84
84
  export type { ResourcePermissions } from "./permissions/resourcePermissions";
85
85
  export { filterNavByPermission } from "./permissions/resourcePermissions";
86
+ export {
87
+ flattenNavLeaves,
88
+ filterFlatNavItems,
89
+ filterNavItems,
90
+ getNavItemLabel,
91
+ } from "./layouts/navFilter";
92
+ export type { FlatNavItem } from "./layouts/navFilter";
86
93
  export type { MemoryResourceHandlersConfig } from "./data/createMemoryResourceHandlers";
87
94
  export type { PermissionsChecker } from "./context/PermissionsProvider";
88
95
  export { LoginPage } from "./pages/LoginPage";
89
96
  export { PlaceholderPage } from "./pages/PlaceholderPage";
90
97
  export { AuthPageLayout } from "./layouts/AuthPageLayout";
91
98
  export {
99
+ AppHub,
100
+ AppLauncherButton,
92
101
  AuthAlternateLink,
93
102
  DensitySwitch,
94
103
  ThemeSwitch,
@@ -110,6 +119,8 @@ export type {
110
119
  LoginCredentials,
111
120
  AuthRedirects,
112
121
  CreateAdminRouterOptions,
122
+ AppHubProps,
123
+ AppLauncherButtonProps,
113
124
  AuthAlternateLinkProps,
114
125
  AuthPageLayoutProps,
115
126
  LoginPageProps,
@@ -209,6 +209,7 @@ export function AdminLayout({
209
209
  siderCollapsedStorageKey = DEFAULT_SIDER_KEY,
210
210
  navSearch = true,
211
211
  navMenu,
212
+ hideSider = false,
212
213
  }: AdminLayoutProps) {
213
214
  const navigate = useNavigate();
214
215
  const location = useLocation();
@@ -368,7 +369,7 @@ export function AdminLayout({
368
369
  background: token.colorBgLayout,
369
370
  }}
370
371
  >
371
- {!isMobile && (
372
+ {!hideSider && !isMobile && (
372
373
  <Layout.Sider
373
374
  collapsible
374
375
  collapsed={collapsed}
@@ -427,7 +428,7 @@ export function AdminLayout({
427
428
  </div>
428
429
  </Layout.Sider>
429
430
  )}
430
- {isMobile && (
431
+ {!hideSider && isMobile && (
431
432
  <Drawer
432
433
  title={
433
434
  <Typography.Text
@@ -498,7 +499,7 @@ export function AdminLayout({
498
499
  flexShrink: 0,
499
500
  }}
500
501
  >
501
- {isMobile && (
502
+ {!hideSider && isMobile && (
502
503
  <Button
503
504
  type="text"
504
505
  icon={<MenuOutlined />}
@@ -1,6 +1,14 @@
1
+ import type { ReactNode } from "react";
1
2
  import type { NavItem } from "../types";
2
3
 
3
- export function getNavItemLabel(item: NavItem): string {
4
+ export type FlatNavItem = {
5
+ path: string;
6
+ label: ReactNode;
7
+ group?: string;
8
+ Icon?: NavItem["Icon"];
9
+ };
10
+
11
+ export function getNavItemLabel(item: Pick<NavItem, "label">): string {
4
12
  const { label } = item;
5
13
  if (typeof label === "string") return label;
6
14
  if (typeof label === "number") return String(label);
@@ -34,6 +42,47 @@ export function filterNavItems(items: NavItem[], query: string): NavItem[] {
34
42
  return walk(items);
35
43
  }
36
44
 
45
+ /** Leaf menu rows from a nav tree, optionally tagged with an app/group name. */
46
+ export function flattenNavLeaves(
47
+ items: NavItem[],
48
+ options?: { group?: string },
49
+ ): FlatNavItem[] {
50
+ const group = options?.group;
51
+ const result: FlatNavItem[] = [];
52
+
53
+ function walk(nodes: NavItem[]) {
54
+ for (const node of nodes) {
55
+ if (node.children?.length) {
56
+ walk(node.children);
57
+ } else {
58
+ result.push({
59
+ path: node.path,
60
+ label: node.label,
61
+ Icon: node.Icon,
62
+ group,
63
+ });
64
+ }
65
+ }
66
+ }
67
+
68
+ walk(items);
69
+ return result;
70
+ }
71
+
72
+ export function filterFlatNavItems(
73
+ items: FlatNavItem[],
74
+ query: string,
75
+ ): FlatNavItem[] {
76
+ const q = query.trim().toLowerCase();
77
+ if (!q) return [];
78
+
79
+ return items.filter((item) => {
80
+ const label = getNavItemLabel(item).toLowerCase();
81
+ const group = (item.group ?? "").toLowerCase();
82
+ return label.includes(q) || group.includes(q);
83
+ });
84
+ }
85
+
37
86
  export function collectSubmenuKeys(items: NavItem[]): string[] {
38
87
  const keys: string[] = [];
39
88
  function walk(nodes: NavItem[]) {
@@ -60,5 +60,7 @@ export function createAdminRouter({
60
60
  element: <Navigate to={homePath} replace />,
61
61
  });
62
62
 
63
- return createBrowserRouter(routerRoutes);
63
+ return createBrowserRouter(routerRoutes, {
64
+ basename: import.meta.env.BASE_URL.replace(/\/$/, "") || undefined,
65
+ });
64
66
  }
package/src/types.ts CHANGED
@@ -104,9 +104,16 @@ export type AdminLayoutProps = {
104
104
  */
105
105
  itemDivider?: NavMenuItemDivider;
106
106
  };
107
+ /**
108
+ * Hide the sidebar and mobile nav drawer (e.g. on an Odoo-style app hub home).
109
+ * Default **`false`**.
110
+ */
111
+ hideSider?: boolean;
107
112
  };
108
113
 
109
114
  export type { AuthPageLayoutProps } from "./layouts/AuthPageLayout";
115
+ export type { AppHubProps } from "./components/AppHub";
116
+ export type { AppLauncherButtonProps } from "./components/AppLauncherButton";
110
117
  export type { AuthAlternateLinkProps } from "./components/AuthAlternateLink";
111
118
 
112
119
  export type LoginPageProps = {