@headless-adminapp/fluent 1.1.8 → 1.1.10
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/App/AppHeaderContianer.js +7 -1
- package/App/AppUI.js +4 -3
- package/App/Navigation/NavItemComponent.d.ts +1 -0
- package/App/Navigation/NavItemComponent.js +3 -3
- package/App/Navigation/NavMiniCategoryMenu.d.ts +9 -0
- package/App/Navigation/NavMiniCategoryMenu.js +19 -0
- package/App/Navigation/NavigationContainer.d.ts +1 -0
- package/App/Navigation/NavigationContainer.js +9 -5
- package/DataGrid/GridColumnHeader/TableHeaderFilterCell.js +5 -2
- package/DataGrid/useTableColumns.js +4 -1
- package/components/DialogLogin.d.ts +4 -1
- package/components/DialogLogin.js +1 -1
- package/form/controls/useLookupData.js +2 -9
- package/package.json +2 -2
|
@@ -23,6 +23,7 @@ const AppHeaderContainer = ({ onNavToggle, }) => {
|
|
|
23
23
|
const strings = (0, AppStringContext_1.useAppStrings)();
|
|
24
24
|
const { language } = (0, locale_1.useLocale)();
|
|
25
25
|
const isMobile = (0, hooks_2.useIsMobile)();
|
|
26
|
+
const isTablet = (0, hooks_2.useIsTablet)();
|
|
26
27
|
const initials = (0, react_1.useMemo)(() => {
|
|
27
28
|
return authSession?.fullName
|
|
28
29
|
.split(' ')
|
|
@@ -42,8 +43,13 @@ const AppHeaderContainer = ({ onNavToggle, }) => {
|
|
|
42
43
|
background: react_components_1.tokens.colorBrandBackground,
|
|
43
44
|
paddingInline: 8,
|
|
44
45
|
gap: 8,
|
|
45
|
-
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flex: 1, alignItems: 'center', gap: 8 }, children: [
|
|
46
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flex: 1, alignItems: 'center', gap: 8 }, children: [isTablet && ((0, jsx_runtime_1.jsx)("div", { role: "button", style: {
|
|
46
47
|
cursor: 'pointer',
|
|
48
|
+
width: !isMobile ? 44 : undefined,
|
|
49
|
+
display: 'flex',
|
|
50
|
+
flexDirection: 'row',
|
|
51
|
+
justifyContent: 'center',
|
|
52
|
+
alignItems: 'center',
|
|
47
53
|
}, onClick: onNavToggle, children: (0, jsx_runtime_1.jsx)(react_nav_preview_1.Hamburger, { style: { color: 'white' } }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
48
54
|
display: 'flex',
|
|
49
55
|
alignItems: 'center',
|
package/App/AppUI.js
CHANGED
|
@@ -9,11 +9,12 @@ const AppHeaderContianer_1 = require("./AppHeaderContianer");
|
|
|
9
9
|
const Navigation_1 = require("./Navigation");
|
|
10
10
|
const AppUI = ({ children }) => {
|
|
11
11
|
const isMobile = (0, hooks_1.useIsMobile)();
|
|
12
|
+
const isTablet = (0, hooks_1.useIsTablet)();
|
|
12
13
|
const [isNavOpen, setIsNavOpen] = (0, react_1.useState)(!isMobile);
|
|
13
14
|
const navType = (0, react_1.useMemo)(() => (isMobile ? 'overlay' : 'inline'), [isMobile]);
|
|
14
15
|
(0, react_1.useEffect)(() => {
|
|
15
|
-
setIsNavOpen(!
|
|
16
|
-
}, [isMobile]);
|
|
16
|
+
setIsNavOpen(!isTablet);
|
|
17
|
+
}, [isMobile, isTablet]);
|
|
17
18
|
return ((0, jsx_runtime_1.jsxs)("main", { style: {
|
|
18
19
|
display: 'flex',
|
|
19
20
|
flexDirection: 'column',
|
|
@@ -24,7 +25,7 @@ const AppUI = ({ children }) => {
|
|
|
24
25
|
flex: 1,
|
|
25
26
|
overflow: 'hidden',
|
|
26
27
|
background: react_components_1.tokens.colorNeutralBackground1,
|
|
27
|
-
}, children: [(0, jsx_runtime_1.jsx)(Navigation_1.NavigationContainer, { open: isNavOpen, type: navType, onOpenChange: (open) => setIsNavOpen(open) }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
28
|
+
}, children: [(0, jsx_runtime_1.jsx)(Navigation_1.NavigationContainer, { open: isNavOpen, type: navType, isMini: !isMobile && isTablet && !isNavOpen, onOpenChange: (open) => setIsNavOpen(open) }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
28
29
|
display: 'flex',
|
|
29
30
|
flexDirection: 'column',
|
|
30
31
|
flex: 1,
|
|
@@ -4,8 +4,8 @@ exports.NavItemComponent = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_components_1 = require("@fluentui/react-components");
|
|
6
6
|
const react_nav_preview_1 = require("@fluentui/react-nav-preview");
|
|
7
|
-
const NavItemComponent = ({ item, onClick, }) => {
|
|
8
|
-
return ((0, jsx_runtime_1.
|
|
7
|
+
const NavItemComponent = ({ item, onClick, isMini, }) => {
|
|
8
|
+
return ((0, jsx_runtime_1.jsx)(react_nav_preview_1.NavItem, { href: item.link, onClick: (event) => {
|
|
9
9
|
event.preventDefault();
|
|
10
10
|
onClick(item);
|
|
11
11
|
}, style: {
|
|
@@ -14,6 +14,6 @@ const NavItemComponent = ({ item, onClick, }) => {
|
|
|
14
14
|
: undefined,
|
|
15
15
|
}, icon: (0, jsx_runtime_1.jsx)(item.Icon, { size: 20, filled: item.active, color: item.active
|
|
16
16
|
? 'var(--colorNeutralForeground2BrandSelected)'
|
|
17
|
-
: undefined }), value: item.active ? 'active' : '', children: [item.label, !!item.RightComponent && ((0, jsx_runtime_1.jsx)("span", { style: { flex: 1, justifyContent: 'flex-end', display: 'flex' }, children: (0, jsx_runtime_1.jsx)(item.RightComponent, {}) }))] }));
|
|
17
|
+
: undefined }), value: item.active ? 'active' : '', children: !isMini && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [item.label, !!item.RightComponent && ((0, jsx_runtime_1.jsx)("span", { style: { flex: 1, justifyContent: 'flex-end', display: 'flex' }, children: (0, jsx_runtime_1.jsx)(item.RightComponent, {}) }))] })) }));
|
|
18
18
|
};
|
|
19
19
|
exports.NavItemComponent = NavItemComponent;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { NavCategoryInfo, NavSubItemInfo } from './types';
|
|
3
|
+
interface NavMiniCategoryMenuProps {
|
|
4
|
+
item: NavCategoryInfo;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
onSelect: (item: NavSubItemInfo) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const NavMiniCategoryMenu: FC<NavMiniCategoryMenuProps>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NavMiniCategoryMenu = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_components_1 = require("@fluentui/react-components");
|
|
6
|
+
const NavItemComponent_1 = require("./NavItemComponent");
|
|
7
|
+
const NavMiniCategoryMenu = ({ item, isActive, onSelect, }) => {
|
|
8
|
+
return ((0, jsx_runtime_1.jsxs)(react_components_1.Menu, { positioning: "after-top", children: [(0, jsx_runtime_1.jsx)(react_components_1.MenuTrigger, { children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(NavItemComponent_1.NavItemComponent, { item: {
|
|
9
|
+
key: item.key,
|
|
10
|
+
active: isActive,
|
|
11
|
+
Icon: item.Icon,
|
|
12
|
+
label: item.label,
|
|
13
|
+
link: '',
|
|
14
|
+
isExternal: false,
|
|
15
|
+
RightComponent: undefined,
|
|
16
|
+
type: 'item',
|
|
17
|
+
}, onClick: () => { }, isMini: true }, item.key) }) }), (0, jsx_runtime_1.jsx)(react_components_1.MenuPopover, { children: (0, jsx_runtime_1.jsx)(react_components_1.MenuList, { children: item.items.map((subItem) => ((0, jsx_runtime_1.jsx)(react_components_1.MenuItem, { onClick: () => onSelect(subItem), children: subItem.label }, subItem.key))) }) })] }));
|
|
18
|
+
};
|
|
19
|
+
exports.NavMiniCategoryMenu = NavMiniCategoryMenu;
|
|
@@ -11,6 +11,7 @@ const app_2 = require("@headless-adminapp/core/experience/app");
|
|
|
11
11
|
const react_1 = require("react");
|
|
12
12
|
const NavCategoryItemComponent_1 = require("./NavCategoryItemComponent");
|
|
13
13
|
const NavItemComponent_1 = require("./NavItemComponent");
|
|
14
|
+
const NavMiniCategoryMenu_1 = require("./NavMiniCategoryMenu");
|
|
14
15
|
const NavSubItemComponent_1 = require("./NavSubItemComponent");
|
|
15
16
|
const utils_1 = require("./utils");
|
|
16
17
|
const useStyles = (0, react_components_1.makeStyles)({
|
|
@@ -22,7 +23,7 @@ const useStyles = (0, react_components_1.makeStyles)({
|
|
|
22
23
|
zIndex: 1,
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
|
-
const NavigationContainer = ({ open, type, onOpenChange, }) => {
|
|
26
|
+
const NavigationContainer = ({ open, type, onOpenChange, isMini, }) => {
|
|
26
27
|
const styles = useStyles();
|
|
27
28
|
const { appExperience: app } = (0, app_1.useAppContext)();
|
|
28
29
|
const { schemaMetadataDic } = (0, app_1.useAppContext)();
|
|
@@ -70,16 +71,19 @@ const NavigationContainer = ({ open, type, onOpenChange, }) => {
|
|
|
70
71
|
router.push(item.link);
|
|
71
72
|
}
|
|
72
73
|
};
|
|
73
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: styles.root, children: (0, jsx_runtime_1.jsx)(react_nav_preview_1.NavDrawer, { selectedValue: "active", selectedCategoryValue: "active", defaultOpenCategories: ['active'], open: open, type: type, onOpenChange: (_value, data) => onOpenChange(data.open), onNavItemSelect: () => {
|
|
74
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: styles.root, children: (0, jsx_runtime_1.jsx)(react_nav_preview_1.NavDrawer, { selectedValue: "active", selectedCategoryValue: "active", defaultOpenCategories: ['active'], open: open || isMini, type: type, onOpenChange: (_value, data) => onOpenChange(data.open), onNavItemSelect: () => {
|
|
74
75
|
// do nothing
|
|
75
|
-
}, children: (0, jsx_runtime_1.jsx)(react_nav_preview_1.NavDrawerBody, { style: {
|
|
76
|
+
}, style: { width: isMini ? 60 : undefined }, children: (0, jsx_runtime_1.jsx)(react_nav_preview_1.NavDrawerBody, { style: {
|
|
76
77
|
paddingTop: 8,
|
|
77
|
-
}, children: sections.map((section) => ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [!section.hideLabel && ((0, jsx_runtime_1.jsx)(react_nav_preview_1.NavSectionHeader, { children: section.label })), section.items.map((item) => {
|
|
78
|
+
}, children: sections.map((section, index) => ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [!section.hideLabel && !isMini && ((0, jsx_runtime_1.jsx)(react_nav_preview_1.NavSectionHeader, { children: section.label })), isMini && index > 0 && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(react_components_1.Divider, { style: { opacity: 0.5 } }) })), section.items.map((item) => {
|
|
78
79
|
if (item.type === app_2.PageType.Category) {
|
|
79
80
|
const isActive = item.items.some((subItem) => subItem.active);
|
|
81
|
+
if (isMini) {
|
|
82
|
+
return ((0, jsx_runtime_1.jsx)(NavMiniCategoryMenu_1.NavMiniCategoryMenu, { isActive: isActive, item: item, onSelect: handleNavigation }, item.key));
|
|
83
|
+
}
|
|
80
84
|
return ((0, jsx_runtime_1.jsxs)(react_nav_preview_1.NavCategory, { value: isActive ? 'active' : '', children: [(0, jsx_runtime_1.jsx)(NavCategoryItemComponent_1.NavCategoryItemComponent, { item: item, isActive: isActive }), (0, jsx_runtime_1.jsx)(react_nav_preview_1.NavSubItemGroup, { children: item.items.map((subItem) => ((0, jsx_runtime_1.jsx)(NavSubItemComponent_1.NavSubItemComponent, { item: subItem, onClick: handleNavigation }, subItem.key))) })] }, item.key));
|
|
81
85
|
}
|
|
82
|
-
return ((0, jsx_runtime_1.jsx)(NavItemComponent_1.NavItemComponent, { item: item, onClick: handleNavigation }, item.key));
|
|
86
|
+
return ((0, jsx_runtime_1.jsx)(NavItemComponent_1.NavItemComponent, { item: item, onClick: handleNavigation, isMini: isMini }, item.key));
|
|
83
87
|
})] }, section.label))) }) }) }));
|
|
84
88
|
};
|
|
85
89
|
exports.NavigationContainer = NavigationContainer;
|
|
@@ -78,11 +78,14 @@ column, onResetSize, resizeHandler, resizable, disableFilter, disableSort, }) =>
|
|
|
78
78
|
switch (attribute.type) {
|
|
79
79
|
case 'money':
|
|
80
80
|
case 'number':
|
|
81
|
-
return '
|
|
81
|
+
return attribute.type === 'number' &&
|
|
82
|
+
['duration', 'time'].includes(attribute.format)
|
|
83
|
+
? 'left'
|
|
84
|
+
: 'right';
|
|
82
85
|
default:
|
|
83
86
|
return 'left';
|
|
84
87
|
}
|
|
85
|
-
}, [attribute
|
|
88
|
+
}, [attribute]);
|
|
86
89
|
const styles = useStyles();
|
|
87
90
|
const isResizingRef = (0, react_1.useRef)(false);
|
|
88
91
|
const [columnFilters, setColumnFilters] = (0, hooks_1.useGridColumnFilter)();
|
|
@@ -306,7 +306,10 @@ function renderCellContent({ info, column, schema, schemaStore, locale, routeRes
|
|
|
306
306
|
switch (attribute?.type) {
|
|
307
307
|
case 'money':
|
|
308
308
|
case 'number':
|
|
309
|
-
return ((0, jsx_runtime_1.jsx)(TableCell_1.TableCellText, { value: formattedValue, width: info.column.getSize(), textAlignment:
|
|
309
|
+
return ((0, jsx_runtime_1.jsx)(TableCell_1.TableCellText, { value: formattedValue, width: info.column.getSize(), textAlignment: attribute.type === 'number' &&
|
|
310
|
+
['duration', 'time'].includes(attribute.format)
|
|
311
|
+
? 'left'
|
|
312
|
+
: 'right' }, column.id));
|
|
310
313
|
case 'lookup': {
|
|
311
314
|
return renderLookupAttribute({
|
|
312
315
|
info,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
interface LoginFormProps {
|
|
2
2
|
logoImageUrl?: string;
|
|
3
3
|
onLogin: (username: string, password: string) => Promise<void>;
|
|
4
|
+
beforeLoginContent?: React.ReactNode;
|
|
5
|
+
afterLoginContent?: React.ReactNode;
|
|
6
|
+
subtitle?: string;
|
|
4
7
|
}
|
|
5
|
-
export declare function DialogLogin(props: LoginFormProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function DialogLogin(props: Readonly<LoginFormProps>): import("react/jsx-runtime").JSX.Element;
|
|
6
9
|
export {};
|
|
@@ -5,5 +5,5 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const react_components_1 = require("@fluentui/react-components");
|
|
6
6
|
const LoginForm_1 = require("./LoginForm");
|
|
7
7
|
function DialogLogin(props) {
|
|
8
|
-
return ((0, jsx_runtime_1.jsx)(react_components_1.Dialog, { open: true, onOpenChange: () => { }, modalType: "non-modal", children: (0, jsx_runtime_1.jsx)(react_components_1.DialogSurface, { style: { maxWidth: 360 }, children: (0, jsx_runtime_1.jsx)(react_components_1.DialogBody, { children: (0, jsx_runtime_1.jsx)(react_components_1.DialogContent, { children: (0, jsx_runtime_1.jsx)(LoginForm_1.LoginForm, { onLogin: props.onLogin, logoImageUrl: props.logoImageUrl }) }) }) }) }));
|
|
8
|
+
return ((0, jsx_runtime_1.jsx)(react_components_1.Dialog, { open: true, onOpenChange: () => { }, modalType: "non-modal", children: (0, jsx_runtime_1.jsx)(react_components_1.DialogSurface, { style: { maxWidth: 360 }, children: (0, jsx_runtime_1.jsx)(react_components_1.DialogBody, { children: (0, jsx_runtime_1.jsx)(react_components_1.DialogContent, { children: (0, jsx_runtime_1.jsx)(LoginForm_1.LoginForm, { onLogin: props.onLogin, logoImageUrl: props.logoImageUrl, afterLoginContent: props.afterLoginContent, beforeLoginContent: props.beforeLoginContent, subtitle: props.subtitle }) }) }) }) }));
|
|
9
9
|
}
|
|
@@ -47,21 +47,14 @@ function useLookupData({ schema, view, searchText, dataService, enabled, }) {
|
|
|
47
47
|
const columns = (0, react_1.useMemo)(() => {
|
|
48
48
|
return extractColumns(schema, view);
|
|
49
49
|
}, [schema, view]);
|
|
50
|
-
const expand = (0, react_1.useMemo)(() => extractExpand(view), [view
|
|
50
|
+
const expand = (0, react_1.useMemo)(() => extractExpand(view), [view]);
|
|
51
51
|
const queryKey = (0, react_1.useMemo)(() => getKey({
|
|
52
52
|
columns,
|
|
53
53
|
expand,
|
|
54
54
|
schema,
|
|
55
55
|
search,
|
|
56
56
|
view,
|
|
57
|
-
}), [
|
|
58
|
-
columns,
|
|
59
|
-
expand,
|
|
60
|
-
schema.logicalName,
|
|
61
|
-
search,
|
|
62
|
-
view?.filter,
|
|
63
|
-
view?.defaultSorting,
|
|
64
|
-
]);
|
|
57
|
+
}), [columns, expand, schema, search, view]);
|
|
65
58
|
const { data, isFetching } = (0, react_query_1.useQuery)({
|
|
66
59
|
queryKey: queryKey,
|
|
67
60
|
queryFn: async () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@headless-adminapp/fluent",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"uuid": "11.0.3",
|
|
51
51
|
"yup": "^1.4.0"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "3920cedff7216fb37b07dff95c50499c0f56f57c"
|
|
54
54
|
}
|