@learningpool/ui 1.10.6 → 1.11.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.
- package/components/navigation/MobileNavigation/MobileNavigation.d.ts +3 -0
- package/components/navigation/MobileNavigation/MobileNavigationAvatar.d.ts +0 -1
- package/components/navigation/MobileNavigation/MobileNavigationAvatar.js +7 -31
- package/components/navigation/MobileNavigation/MobileNavigationDrawer.d.ts +4 -0
- package/components/navigation/MobileNavigation/MobileNavigationDrawer.js +18 -9
- package/components/navigation/VerticalNavigation/VerticalNavigation.js +13 -8
- package/components/navigation/VerticalNavigation/VerticalNavigationAvatar.js +17 -35
- package/components/navigation/VerticalNavigation/VerticalNavigationItem/VerticalNavigationItem.js +1 -1
- package/components/navigation/VerticalNavigation/VerticalNavigationItem/VerticalNavigationItemFlyoutMenu.js +8 -1
- package/components/navigation/helpers.d.ts +10 -0
- package/components/navigation/helpers.js +16 -0
- package/lang/en-us.d.ts +3 -1
- package/lang/en-us.js +3 -1
- package/package.json +1 -1
- package/types/components/navigation/VerticalNavigation.d.ts +2 -0
- package/types/components/navigation/VerticalNavigationAvatar.d.ts +0 -1
|
@@ -17,7 +17,9 @@ interface MobileNavigationProps {
|
|
|
17
17
|
isAvatarOpen?: boolean;
|
|
18
18
|
hideAvatarInitials?: boolean;
|
|
19
19
|
showNotchIndicator?: boolean;
|
|
20
|
+
localization?: string | Record<string, any>;
|
|
20
21
|
dataAttributes?: any;
|
|
22
|
+
showSupportLinks?: boolean;
|
|
21
23
|
hasSearch?: boolean;
|
|
22
24
|
searchPanelPlaceholder?: string;
|
|
23
25
|
searchPanelDefaultValue?: string;
|
|
@@ -34,6 +36,7 @@ interface MobileNavigationProps {
|
|
|
34
36
|
avatarPanelOnClickMainAction?: any;
|
|
35
37
|
avatarPanelMainActionString?: string;
|
|
36
38
|
avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
|
|
39
|
+
/** @deprecated This property will be removed in the next major version (2.X) */
|
|
37
40
|
avatarPanelShowHelpLinks?: boolean;
|
|
38
41
|
}
|
|
39
42
|
declare const MobileNavigation: (props: MobileNavigationProps) => React.ReactElement;
|
|
@@ -25,7 +25,6 @@ export interface ISwipeableTemporaryAvatarProps {
|
|
|
25
25
|
avatarPanelMainActionString?: string;
|
|
26
26
|
avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
|
|
27
27
|
avatarPanelInvertNavString?: string;
|
|
28
|
-
avatarPanelShowHelpLinks?: boolean;
|
|
29
28
|
}
|
|
30
29
|
declare const SwipeableTemporaryAvatar: (props: ISwipeableTemporaryAvatarProps) => React.ReactElement;
|
|
31
30
|
export default SwipeableTemporaryAvatar;
|
|
@@ -31,14 +31,13 @@ import { handleAvatarInitials, useFadeIn } from '../../../utils/helpers';
|
|
|
31
31
|
import { animated } from '@react-spring/web';
|
|
32
32
|
import { defaultAttributes } from '../../../utils/dataAttributes';
|
|
33
33
|
import { defaultMessages } from '../../../lang/en-us';
|
|
34
|
-
import { Help, Lightbulb, Phone } from '@mui/icons-material';
|
|
35
34
|
var SwipeableTemporaryAvatar = function (props) {
|
|
36
|
-
var _a, _b, _c, _d
|
|
35
|
+
var _a, _b, _c, _d;
|
|
37
36
|
var theme = useTheme();
|
|
38
|
-
var avatarName = props.avatarName, mobileNavDirection = props.mobileNavDirection, avatarPanelLogoutString = props.avatarPanelLogoutString, isAvatarOpen = props.isAvatarOpen, setIsAvatarOpen = props.setIsAvatarOpen, setMobileNavDirection = props.setMobileNavDirection, avatarPanelOnClickSwitchDirection = props.avatarPanelOnClickSwitchDirection, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelInvertNavString = props.avatarPanelInvertNavString, dataAttributes = props.dataAttributes, localization = props.localization
|
|
37
|
+
var avatarName = props.avatarName, mobileNavDirection = props.mobileNavDirection, avatarPanelLogoutString = props.avatarPanelLogoutString, isAvatarOpen = props.isAvatarOpen, setIsAvatarOpen = props.setIsAvatarOpen, setMobileNavDirection = props.setMobileNavDirection, avatarPanelOnClickSwitchDirection = props.avatarPanelOnClickSwitchDirection, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelInvertNavString = props.avatarPanelInvertNavString, dataAttributes = props.dataAttributes, localization = props.localization;
|
|
39
38
|
var messages = __assign(__assign({}, defaultMessages), localization);
|
|
40
39
|
var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
|
|
41
|
-
var
|
|
40
|
+
var _e = React.useState(isAvatarOpen !== null && isAvatarOpen !== void 0 ? isAvatarOpen : false), isOpen = _e[0], setIsOpen = _e[1];
|
|
42
41
|
React.useEffect(function () { return handleOpenState(isAvatarOpen); }, [isAvatarOpen]);
|
|
43
42
|
var handleOpenState = function (open) {
|
|
44
43
|
setIsOpen(open);
|
|
@@ -54,19 +53,12 @@ var SwipeableTemporaryAvatar = function (props) {
|
|
|
54
53
|
handleOpenState(open);
|
|
55
54
|
};
|
|
56
55
|
};
|
|
57
|
-
var
|
|
56
|
+
var _f = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _f[0], setAvatarInitials = _f[1];
|
|
58
57
|
useEffect(function () { return setAvatarInitials(handleAvatarInitials(avatarName)); }, [avatarName]);
|
|
59
58
|
var handleOnClickSwitchDirection = function () {
|
|
60
59
|
setMobileNavDirection(mobileNavDirection === 'rtl' ? 'ltr' : 'rtl');
|
|
61
60
|
avatarPanelOnClickSwitchDirection && avatarPanelOnClickSwitchDirection();
|
|
62
61
|
};
|
|
63
|
-
// Add default helpful links below avatarPanelSettingItems,
|
|
64
|
-
// these can be toggled on/off with the avatarPanelShowHelpLinks prop
|
|
65
|
-
var defaultHelpLinks = [
|
|
66
|
-
{ label: messages['help-center'], icon: _jsx(Help, {}), onClick: function () { return window.open('https://learningpool.zendesk.com', '_blank'); } },
|
|
67
|
-
{ label: messages['feature-request'], icon: _jsx(Lightbulb, {}), onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
|
|
68
|
-
{ label: messages['contact-us'], icon: _jsx(Phone, {}), onClick: function () { return window.open('https://learningpool.com/support', '_blank'); } }
|
|
69
|
-
];
|
|
70
62
|
// Workaround to handle the react-spring calls without
|
|
71
63
|
// adding additional hook calls on prop or state changes
|
|
72
64
|
// --
|
|
@@ -81,7 +73,7 @@ var SwipeableTemporaryAvatar = function (props) {
|
|
|
81
73
|
'avatarPanelOnClickMainAction',
|
|
82
74
|
'mobileNavDirection'
|
|
83
75
|
];
|
|
84
|
-
var totalItems = __spreadArray(__spreadArray(__spreadArray(
|
|
76
|
+
var totalItems = __spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), additionalItems, true);
|
|
85
77
|
var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isAvatarOpen); }));
|
|
86
78
|
return (_jsx(StyledSwipeableAvatar, __assign({ "data-id": dataIds.MobileNavAvatarPanel, anchor: 'bottom', open: isOpen, onClose: toggleAvatar(false), hideBackdrop: true, ModalProps: {
|
|
87
79
|
keepMounted: true
|
|
@@ -144,29 +136,13 @@ var SwipeableTemporaryAvatar = function (props) {
|
|
|
144
136
|
} }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
|
|
145
137
|
minWidth: theme.spacing(5)
|
|
146
138
|
} }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) })));
|
|
147
|
-
}),
|
|
148
|
-
defaultHelpLinks.length > 0 &&
|
|
149
|
-
defaultHelpLinks.map(function (avatarMenuItem, index) {
|
|
150
|
-
var _a, _b;
|
|
151
|
-
return (_jsx(ListItem, __assign({ component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + ((_b = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _b !== void 0 ? _b : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
|
|
152
|
-
// TODO: figure out if these are links or buttons
|
|
153
|
-
// @ts-expect-error
|
|
154
|
-
, __assign({
|
|
155
|
-
// TODO: figure out if these are links or buttons
|
|
156
|
-
// @ts-expect-error
|
|
157
|
-
component: Link, role: 'link', onClick: function () {
|
|
158
|
-
handleOpenState(false);
|
|
159
|
-
avatarMenuItem.onClick();
|
|
160
|
-
} }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
|
|
161
|
-
minWidth: theme.spacing(5)
|
|
162
|
-
} }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) })));
|
|
163
|
-
}), avatarPanelOnClickSwitchDirection && (_jsx(ListItem, __assign({ component: animated.div, style: __assign({ marginTop: avatarPanelShowHelpLinks ? theme.spacing(2) : 0 }, animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + ((_e = defaultHelpLinks === null || defaultHelpLinks === void 0 ? void 0 : defaultHelpLinks.length) !== null && _e !== void 0 ? _e : 0) + 4]), disablePadding: true }, { children: _jsxs(StyledListItemButton
|
|
139
|
+
}), avatarPanelOnClickSwitchDirection && (_jsx(ListItem, __assign({ component: animated.div, style: __assign({ marginTop: 0 }, animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + 4]), disablePadding: true }, { children: _jsxs(StyledListItemButton
|
|
164
140
|
// TODO: figure out if these are links or buttons
|
|
165
141
|
// @ts-expect-error
|
|
166
142
|
, __assign({
|
|
167
143
|
// TODO: figure out if these are links or buttons
|
|
168
144
|
// @ts-expect-error
|
|
169
|
-
component: Link, role: 'link', onClick: handleOnClickSwitchDirection }, { children: [_jsx(ListItemText, { primary: avatarPanelInvertNavString !== null && avatarPanelInvertNavString !== void 0 ? avatarPanelInvertNavString : '
|
|
145
|
+
component: Link, role: 'link', onClick: handleOnClickSwitchDirection }, { children: [_jsx(ListItemText, { primary: avatarPanelInvertNavString !== null && avatarPanelInvertNavString !== void 0 ? avatarPanelInvertNavString : messages['invert-navigation-bar'] }), _jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
|
|
170
146
|
minWidth: theme.spacing(5),
|
|
171
147
|
marginInlineStart: '0.5rem'
|
|
172
148
|
} }, { children: mobileNavDirection === 'ltr'
|
|
@@ -20,6 +20,10 @@ export interface ISwipeableTemporaryDrawerProps {
|
|
|
20
20
|
logoOnClick?: any;
|
|
21
21
|
label: string;
|
|
22
22
|
children?: ISwipeableTemporaryDrawerProps[];
|
|
23
|
+
localization?: any;
|
|
23
24
|
dataAttributes?: any;
|
|
25
|
+
showSupportLinks?: boolean;
|
|
26
|
+
/** @deprecated This property will be removed in the next major version (2.X) */
|
|
27
|
+
avatarPanelShowHelpLinks?: boolean;
|
|
24
28
|
}
|
|
25
29
|
export default function SwipeableTemporaryDrawer(props: ISwipeableTemporaryDrawerProps): JSX.Element;
|
|
@@ -26,12 +26,14 @@ import { StyledSwipeableDrawer, StyledBox, StyledListItem, StyledDivider, Styled
|
|
|
26
26
|
import { StreamSuiteLogo } from '../../../assets/Images';
|
|
27
27
|
import { animated } from '@react-spring/web';
|
|
28
28
|
import { useFadeIn } from '../../../utils/helpers';
|
|
29
|
-
import { getOffsetNavigationContrastText } from '../helpers';
|
|
29
|
+
import { getDefaultSupportLinks, getOffsetNavigationContrastText } from '../helpers';
|
|
30
30
|
import { defaultAttributes } from '../../../utils/dataAttributes';
|
|
31
|
+
import { defaultMessages } from '../../../lang/en-us';
|
|
31
32
|
export default function SwipeableTemporaryDrawer(props) {
|
|
32
|
-
var isDrawerOpen = props.isDrawerOpen, setIsDrawerOpen = props.setIsDrawerOpen, items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, dataAttributes = props.dataAttributes;
|
|
33
|
+
var isDrawerOpen = props.isDrawerOpen, setIsDrawerOpen = props.setIsDrawerOpen, items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, dataAttributes = props.dataAttributes, localization = props.localization, showSupportLinks = props.showSupportLinks, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks;
|
|
33
34
|
var theme = useTheme();
|
|
34
35
|
var _a = React.useState(isDrawerOpen !== null && isDrawerOpen !== void 0 ? isDrawerOpen : false), isOpen = _a[0], setIsOpen = _a[1];
|
|
36
|
+
var messages = __assign(__assign({}, defaultMessages), localization);
|
|
35
37
|
var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
|
|
36
38
|
React.useEffect(function () { return handleOpenState(isDrawerOpen); }, [isDrawerOpen]);
|
|
37
39
|
var handleOpenState = function (open) {
|
|
@@ -48,6 +50,8 @@ export default function SwipeableTemporaryDrawer(props) {
|
|
|
48
50
|
handleOpenState(open);
|
|
49
51
|
};
|
|
50
52
|
};
|
|
53
|
+
// Default support links, these can be toggled on/off via the showSupportLinks
|
|
54
|
+
var defaultSupportLinks = getDefaultSupportLinks(messages);
|
|
51
55
|
// Workaround to handle the react-spring calls without
|
|
52
56
|
// adding additional hook calls on prop or state changes
|
|
53
57
|
// --
|
|
@@ -56,7 +60,7 @@ export default function SwipeableTemporaryDrawer(props) {
|
|
|
56
60
|
// --
|
|
57
61
|
// First item starts at 70ms, see STAGGER_ITEMS_DELAY in helpers.js
|
|
58
62
|
var additionalItems = ['logo', 'divider'];
|
|
59
|
-
var totalItems = __spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
|
|
63
|
+
var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), defaultSupportLinks !== null && defaultSupportLinks !== void 0 ? defaultSupportLinks : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
|
|
60
64
|
var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isOpen); }));
|
|
61
65
|
var list = function () {
|
|
62
66
|
var _a;
|
|
@@ -66,12 +70,17 @@ export default function SwipeableTemporaryDrawer(props) {
|
|
|
66
70
|
: logo
|
|
67
71
|
: (_jsx(StreamSuiteLogo, { style: {
|
|
68
72
|
fill: getOffsetNavigationContrastText(theme)
|
|
69
|
-
} })), _jsx(StyledDrawerLogoText, __assign({ variant: 'body1' }, { children: logoText !== null && logoText !== void 0 ? logoText : 'Site Logo' }))] })),
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
} })), _jsx(StyledDrawerLogoText, __assign({ variant: 'body1' }, { children: logoText !== null && logoText !== void 0 ? logoText : 'Site Logo' }))] })), _jsxs(List, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryList }, { children: [items && items.length > 0 && items.map(function (item, index) {
|
|
74
|
+
var label = item.label, children = item.children, onClick = item.onClick;
|
|
75
|
+
return (_jsxs(StyledListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryItem, disablePadding: true,
|
|
76
|
+
// @ts-expect-error
|
|
77
|
+
component: animated.li, style: animationRefs.current[index] }, { children: [_jsx(StyledListItemButton, __assign({ onClick: onClick }, { children: _jsx(StyledListItemText, { primary: label }) })), children && children.length > 0 && (_jsx(StyledChildList, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildList, "aria-label": label }, { children: children.map(function (childItem) { return (_jsx(StyledChildListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildItem }, { children: _jsx(StyledChildListItemButton, __assign({ onClick: childItem === null || childItem === void 0 ? void 0 : childItem.onClick }, { children: _jsx(StyledChildListItemText, { primary: childItem === null || childItem === void 0 ? void 0 : childItem.label }, childItem === null || childItem === void 0 ? void 0 : childItem.label) })) }), childItem === null || childItem === void 0 ? void 0 : childItem.label)); }) })))] }), label));
|
|
78
|
+
}), (showSupportLinks || avatarPanelShowHelpLinks) && defaultSupportLinks && defaultSupportLinks.length > 0 && defaultSupportLinks.map(function (item, index) {
|
|
79
|
+
var label = item.label, children = item.children, onClick = item.onClick;
|
|
80
|
+
return (_jsxs(StyledListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryItem, disablePadding: true,
|
|
81
|
+
// @ts-expect-error
|
|
82
|
+
component: animated.li, style: animationRefs.current[index] }, { children: [_jsx(StyledListItemButton, __assign({ onClick: onClick }, { children: _jsx(StyledListItemText, { primary: label }) })), children && children.length > 0 && (_jsx(StyledChildList, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildList, "aria-label": label }, { children: children.map(function (childItem) { return (_jsx(StyledChildListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildItem }, { children: _jsx(StyledChildListItemButton, __assign({ onClick: childItem === null || childItem === void 0 ? void 0 : childItem.onClick }, { children: _jsx(StyledChildListItemText, { primary: childItem === null || childItem === void 0 ? void 0 : childItem.label }, childItem === null || childItem === void 0 ? void 0 : childItem.label) })) }), childItem === null || childItem === void 0 ? void 0 : childItem.label)); }) })))] }), label));
|
|
83
|
+
})] })), secondaryItems && secondaryItems.length > 0 && (_jsxs(_Fragment, { children: [_jsx(animated.div, __assign({ style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + 1] }, { children: _jsx(StyledDivider, {}) })), _jsx(StyledListSecondaryList, __assign({ "data-id": dataIds.MobileNavDrawerSecondaryList }, { children: secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
|
|
75
84
|
var _a;
|
|
76
85
|
return (_jsx(StyledListSecondaryItem, __assign({ "data-id": dataIds.MobileNavDrawerSecondaryItem, disablePadding: true,
|
|
77
86
|
// @ts-expect-error
|
|
@@ -48,11 +48,11 @@ import { DEFAULT_REACT_APP_ID } from '../../../utils/constants';
|
|
|
48
48
|
import { animated } from '@react-spring/web';
|
|
49
49
|
import { defaultMessages } from '../../../lang/en-us';
|
|
50
50
|
import { defaultAttributes } from '../../../utils/dataAttributes';
|
|
51
|
-
import { getNavigationBackground, getNavigationContrastText } from '../helpers';
|
|
51
|
+
import { getDefaultSupportLinks, getNavigationBackground, getNavigationContrastText } from '../helpers';
|
|
52
52
|
var VerticalNavigation = function (props) {
|
|
53
53
|
var _a;
|
|
54
54
|
var theme = useTheme();
|
|
55
|
-
var items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, appRootID = props.appRootID, hasStreamHome = props.hasStreamHome, streamHomeApiKey = props.streamHomeApiKey, streamHomeBaseUrl = props.streamHomeBaseUrl, localization = props.localization, streamHomeAccessToken = props.streamHomeAccessToken, streamHomeApplications = props.streamHomeApplications, avatarName = props.avatarName, dataAttributes = props.dataAttributes, rest = __rest(props, ["items", "secondaryItems", "logo", "logoText", "logoOnClick", "appRootID", "hasStreamHome", "streamHomeApiKey", "streamHomeBaseUrl", "localization", "streamHomeAccessToken", "streamHomeApplications", "avatarName", "dataAttributes"]);
|
|
55
|
+
var items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, appRootID = props.appRootID, hasStreamHome = props.hasStreamHome, streamHomeApiKey = props.streamHomeApiKey, streamHomeBaseUrl = props.streamHomeBaseUrl, localization = props.localization, streamHomeAccessToken = props.streamHomeAccessToken, streamHomeApplications = props.streamHomeApplications, avatarName = props.avatarName, dataAttributes = props.dataAttributes, showSupportLinks = props.showSupportLinks, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks, rest = __rest(props, ["items", "secondaryItems", "logo", "logoText", "logoOnClick", "appRootID", "hasStreamHome", "streamHomeApiKey", "streamHomeBaseUrl", "localization", "streamHomeAccessToken", "streamHomeApplications", "avatarName", "dataAttributes", "showSupportLinks", "avatarPanelShowHelpLinks"]);
|
|
56
56
|
var messages = __assign(__assign({}, defaultMessages), localization);
|
|
57
57
|
var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
|
|
58
58
|
var propIsDrawerOpen = typeof (props === null || props === void 0 ? void 0 : props.isDrawerOpen) === 'boolean' ? props.isDrawerOpen : undefined;
|
|
@@ -109,6 +109,8 @@ var VerticalNavigation = function (props) {
|
|
|
109
109
|
setIsAppSwitcherOpen(false);
|
|
110
110
|
setIsDrawerOpen(open !== null && open !== void 0 ? open : !isDrawerOpen);
|
|
111
111
|
}; };
|
|
112
|
+
// Default support links, these can be toggled on/off via the showSupportLinks
|
|
113
|
+
var defaultSupportLinks = getDefaultSupportLinks(messages);
|
|
112
114
|
// Workaround to handle the react-spring calls without
|
|
113
115
|
// adding additional hook calls on prop or state changes
|
|
114
116
|
// --
|
|
@@ -117,10 +119,10 @@ var VerticalNavigation = function (props) {
|
|
|
117
119
|
// --
|
|
118
120
|
// First item starts at 70ms, see STAGGER_ITEMS_DELAY in helpers.js
|
|
119
121
|
var additionalItems = ['hasStreamHome', 'hasAvatar', 'avatarName'];
|
|
120
|
-
var totalItems = __spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
|
|
122
|
+
var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), defaultSupportLinks !== null && defaultSupportLinks !== void 0 ? defaultSupportLinks : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
|
|
121
123
|
var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index); }));
|
|
122
124
|
var listContent = function () {
|
|
123
|
-
var _a, _b, _c;
|
|
125
|
+
var _a, _b, _c, _d, _e;
|
|
124
126
|
return (_jsxs(Box, __assign({ sx: {
|
|
125
127
|
display: 'flex',
|
|
126
128
|
flex: '1 auto',
|
|
@@ -217,16 +219,19 @@ var VerticalNavigation = function (props) {
|
|
|
217
219
|
height: '100%',
|
|
218
220
|
width: DRAWER_WIDTH.Expanded,
|
|
219
221
|
marginTop: "-".concat(theme.spacing(0.5), " !important")
|
|
220
|
-
} }, { children: items && items.length > 0 && items.map(function (item, index) { return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationPrimaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, style: animationRefs.current[index] }))); }) })) })) })), _jsx("div", __assign({ className: 'wrapper', "data-id": dataIds.VerticalNavigationSecondary, style: { backgroundColor: getNavigationBackground(theme) } }, { children: _jsxs(StyledNavSecondary, __assign({ "aria-label": 'Secondary' }, { children: [_jsx(StyledDivider, { isDrawerOpen: isDrawerOpen || isPersistent }), _jsxs(List, __assign({ "data-id": dataIds.VerticalNavigationSecondaryList, style: { width: DRAWER_WIDTH.Expanded } }, { children: [
|
|
221
|
-
? (_jsx(VerticalNavigationItem, { "data-id": dataIds.VerticalNavigationAppSwitcherToggle, label: messages['app-switcher'], icon: _jsx(Apps, {}), onClick: handleToggleAppsClick, content: (_jsx(AppSwitcher, { isAppSwitcherOpen: isAppSwitcherOpen, setIsAppSwitcherOpen: setIsAppSwitcherOpen, applications: streamHomeApplications, apiKey: streamHomeApiKey !== null && streamHomeApiKey !== void 0 ? streamHomeApiKey : '', baseUrl: streamHomeBaseUrl !== null && streamHomeBaseUrl !== void 0 ? streamHomeBaseUrl : '', token: streamHomeAccessToken !== null && streamHomeAccessToken !== void 0 ? streamHomeAccessToken : '', isDrawerOpen: isDrawerOpen })), isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, hasCustomContent: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + 1] }))
|
|
222
|
-
: null, secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
|
|
222
|
+
} }, { children: items && items.length > 0 && items.map(function (item, index) { return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationPrimaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, style: animationRefs.current[index] }))); }) })) })) })), _jsx("div", __assign({ className: 'wrapper', "data-id": dataIds.VerticalNavigationSecondary, style: { backgroundColor: getNavigationBackground(theme) } }, { children: _jsxs(StyledNavSecondary, __assign({ "aria-label": 'Secondary' }, { children: [_jsx(StyledDivider, { isDrawerOpen: isDrawerOpen || isPersistent }), _jsxs(List, __assign({ "data-id": dataIds.VerticalNavigationSecondaryList, style: { width: DRAWER_WIDTH.Expanded } }, { children: [(showSupportLinks || avatarPanelShowHelpLinks) && defaultSupportLinks && defaultSupportLinks.length > 0 && defaultSupportLinks.map(function (item, index) {
|
|
223
223
|
var _a;
|
|
224
224
|
return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationSecondaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + index + 1] })));
|
|
225
|
+
}), hasStreamHome
|
|
226
|
+
? (_jsx(VerticalNavigationItem, { "data-id": dataIds.VerticalNavigationAppSwitcherToggle, label: messages['app-switcher'], icon: _jsx(Apps, {}), onClick: handleToggleAppsClick, content: (_jsx(AppSwitcher, { isAppSwitcherOpen: isAppSwitcherOpen, setIsAppSwitcherOpen: setIsAppSwitcherOpen, applications: streamHomeApplications, apiKey: streamHomeApiKey !== null && streamHomeApiKey !== void 0 ? streamHomeApiKey : '', baseUrl: streamHomeBaseUrl !== null && streamHomeBaseUrl !== void 0 ? streamHomeBaseUrl : '', token: streamHomeAccessToken !== null && streamHomeAccessToken !== void 0 ? streamHomeAccessToken : '', isDrawerOpen: isDrawerOpen })), isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, hasCustomContent: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + ((_b = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _b !== void 0 ? _b : 0) + 1] }))
|
|
227
|
+
: null, secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
|
|
228
|
+
var _a, _b;
|
|
229
|
+
return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationSecondaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + ((_b = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _b !== void 0 ? _b : 0) + index + 1] })));
|
|
225
230
|
}), hasAvatar && avatarName && (_jsx(VerticalNavigationItem, { label: avatarName, "data-id": dataIds.VerticalNavigationAvatarToggle, "aria-controls": 'avatar-panel', icon: _jsx(Avatar, __assign({ style: {
|
|
226
231
|
fontSize: '0.75rem',
|
|
227
232
|
height: 32,
|
|
228
233
|
width: 32
|
|
229
|
-
} }, { children: handleAvatarInitials(avatarName) })), style: __assign({ maxHeight: isDrawerOpen ? '200px' : '48px', overflow: 'hidden', padding: 0, minHeight: 52, transition: "max-height 225ms ".concat(motion.easeInOut, " 0ms !important") }, animationRefs.current[((
|
|
234
|
+
} }, { children: handleAvatarInitials(avatarName) })), style: __assign({ maxHeight: isDrawerOpen ? '200px' : '48px', overflow: 'hidden', padding: 0, minHeight: 52, transition: "max-height 225ms ".concat(motion.easeInOut, " 0ms !important") }, animationRefs.current[((_c = items === null || items === void 0 ? void 0 : items.length) !== null && _c !== void 0 ? _c : 0) + ((_d = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _d !== void 0 ? _d : 0) + ((_e = secondaryItems === null || secondaryItems === void 0 ? void 0 : secondaryItems.length) !== null && _e !== void 0 ? _e : 0) + 2]), onClick: function () { return setIsAvatarOpen(!isAvatarOpen); }, hasFlyout: true, fullHeightFlyout: true, content: _jsx(AvatarPanel, __assign({ avatarName: avatarName, isAvatarOpen: isAvatarOpen, localization: localization }, rest)), isDrawerOpen: isDrawerOpen }))] }))] })) }))] })));
|
|
230
235
|
};
|
|
231
236
|
return (_jsxs(StyledAside, __assign({ "aria-label": messages['site-navigation'], "data-id": dataIds.VerticalNavigationContainer }, { children: [_jsx(DrawerShadow, { className: 'drawerShadow', "aria-hidden": 'true', isDrawerOpen: isDrawerOpen || isPersistent, style: {
|
|
232
237
|
display: isPersistent ? 'none' : 'block'
|
|
@@ -26,28 +26,21 @@ import { useTheme } from '@mui/material/styles';
|
|
|
26
26
|
import EditIcon from '@mui/icons-material/Edit';
|
|
27
27
|
import LogoutIcon from '@mui/icons-material/Logout';
|
|
28
28
|
import { handleAvatarInitials, useFadeIn } from '../../../utils/helpers';
|
|
29
|
-
import {
|
|
29
|
+
import { Person, Settings } from '@mui/icons-material';
|
|
30
30
|
import { animated } from '@react-spring/web';
|
|
31
31
|
import { FlyoutMenuItemText } from './VerticalNavigationItem/VerticalNavigationItemFlyoutMenuStyles';
|
|
32
32
|
import { defaultMessages } from '../../../lang/en-us';
|
|
33
33
|
import { defaultAttributes } from '../../../utils/dataAttributes';
|
|
34
34
|
var AvatarPanel = function (props) {
|
|
35
|
-
var _a, _b, _c, _d
|
|
35
|
+
var _a, _b, _c, _d;
|
|
36
36
|
var theme = useTheme();
|
|
37
|
-
var avatarName = props.avatarName, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelLogoutString = props.avatarPanelLogoutString, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelFootnote = props.avatarPanelFootnote, isAvatarOpen = props.isAvatarOpen, localization = props.localization, dataAttributes = props.dataAttributes
|
|
37
|
+
var avatarName = props.avatarName, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelLogoutString = props.avatarPanelLogoutString, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelFootnote = props.avatarPanelFootnote, isAvatarOpen = props.isAvatarOpen, localization = props.localization, dataAttributes = props.dataAttributes;
|
|
38
38
|
var messages = __assign(__assign({}, defaultMessages), localization);
|
|
39
39
|
var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
|
|
40
40
|
useEffect(function () {
|
|
41
41
|
setAvatarInitials(handleAvatarInitials(avatarName));
|
|
42
42
|
}, [avatarName]);
|
|
43
|
-
var
|
|
44
|
-
// Add default helpful links below avatarPanelSettingItems,
|
|
45
|
-
// these can be toggled on/off with the avatarPanelShowHelpLinks prop
|
|
46
|
-
var defaultHelpLinks = [
|
|
47
|
-
{ label: messages['help-center'], icon: _jsx(Help, {}), onClick: function () { return window.open('https://learningpool.zendesk.com/', '_blank'); } },
|
|
48
|
-
{ label: messages['feature-request'], icon: _jsx(Lightbulb, {}), onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
|
|
49
|
-
{ label: messages['contact-us'], icon: _jsx(Phone, {}), onClick: function () { return window.open('https://learningpool.com/support/', '_blank'); } }
|
|
50
|
-
];
|
|
43
|
+
var _e = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _e[0], setAvatarInitials = _e[1];
|
|
51
44
|
// Workaround to handle the react-spring calls without
|
|
52
45
|
// adding additional hook calls on prop or state changes
|
|
53
46
|
// --
|
|
@@ -62,7 +55,7 @@ var AvatarPanel = function (props) {
|
|
|
62
55
|
'avatarPanelOnClickMainAction',
|
|
63
56
|
'avatarPanelFootnote'
|
|
64
57
|
];
|
|
65
|
-
var totalItems = __spreadArray(__spreadArray(__spreadArray(
|
|
58
|
+
var totalItems = __spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), additionalItems, true);
|
|
66
59
|
var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isAvatarOpen); }));
|
|
67
60
|
return (_jsxs(StyledBox, { children: [avatarPanelOnClickLogout && (_jsx(StyledButton
|
|
68
61
|
// @ts-expect-error
|
|
@@ -89,30 +82,19 @@ var AvatarPanel = function (props) {
|
|
|
89
82
|
// @ts-expect-error
|
|
90
83
|
, __assign({
|
|
91
84
|
// @ts-expect-error
|
|
92
|
-
component: animated.button, style: animationRefs.current[((_b = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _b !== void 0 ? _b : 0) + 3], variant: 'outlined', color: 'inherit', size: 'medium', onClick: avatarPanelOnClickMainAction, startIcon: _jsx(Settings, {}) }, { children: avatarPanelMainActionString })),
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
component: animated.button, style: animationRefs.current[((_b = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _b !== void 0 ? _b : 0) + 3], variant: 'outlined', color: 'inherit', size: 'medium', onClick: avatarPanelOnClickMainAction, startIcon: _jsx(Settings, {}) }, { children: avatarPanelMainActionString })), _jsx(List, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, style: { marginBottom: theme.spacing(2), marginTop: theme.spacing(2) } }, { children: avatarPanelSettingItems &&
|
|
86
|
+
avatarPanelSettingItems.length > 0 &&
|
|
87
|
+
avatarPanelSettingItems.map(function (avatarMenuItem, index) {
|
|
88
|
+
var _a;
|
|
89
|
+
return (_jsx(ListItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem, component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
|
|
90
|
+
// TODO: figure out if these are links or buttons
|
|
91
|
+
// @ts-expect-error
|
|
92
|
+
, __assign({
|
|
97
93
|
// TODO: figure out if these are links or buttons
|
|
98
94
|
// @ts-expect-error
|
|
99
|
-
, __assign({
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
minWidth: theme.spacing(5)
|
|
104
|
-
} }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
|
|
105
|
-
}), avatarPanelShowHelpLinks && defaultHelpLinks &&
|
|
106
|
-
defaultHelpLinks.length > 0 &&
|
|
107
|
-
defaultHelpLinks.map(function (avatarMenuItem, index) {
|
|
108
|
-
var _a, _b;
|
|
109
|
-
return (_jsx(ListItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem, component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + ((_b = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _b !== void 0 ? _b : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
|
|
110
|
-
// @ts-expect-error
|
|
111
|
-
, __assign({
|
|
112
|
-
// @ts-expect-error
|
|
113
|
-
component: Link, role: 'link', onClick: avatarMenuItem.onClick }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
|
|
114
|
-
minWidth: theme.spacing(5)
|
|
115
|
-
} }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
|
|
116
|
-
})] }))] })), _jsx(Box, __assign({ "data-id": dataIds.VerticalNavigationFlyoutFootnote, className: 'avatar-panel-footnote', style: animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + ((_e = defaultHelpLinks === null || defaultHelpLinks === void 0 ? void 0 : defaultHelpLinks.length) !== null && _e !== void 0 ? _e : 0) + 4] }, { children: avatarPanelFootnote && avatarPanelFootnote }))] }));
|
|
95
|
+
component: Link, role: 'link', onClick: avatarMenuItem.onClick }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
|
|
96
|
+
minWidth: theme.spacing(5)
|
|
97
|
+
} }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
|
|
98
|
+
}) }))] })), _jsx(Box, __assign({ "data-id": dataIds.VerticalNavigationFlyoutFootnote, className: 'avatar-panel-footnote', style: animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + 4] }, { children: avatarPanelFootnote && avatarPanelFootnote }))] }));
|
|
117
99
|
};
|
|
118
100
|
export default AvatarPanel;
|
|
@@ -15,6 +15,7 @@ import { Link } from '../../../../index';
|
|
|
15
15
|
import { FullHeightFlyoutMenuPaper, FullHeightFlyoutMenuWrapper, FlyoutNotchMask, NotchMini, FlyoutMenuHeader, FlyoutMenuPaper, FlyoutMenuWrap, FlyoutMenuList, FlyoutMenuButton, FlyoutMenuItem, FlyoutMenuItemText } from './VerticalNavigationItemFlyoutMenuStyles';
|
|
16
16
|
import { defaultAttributes } from '../../../../utils/dataAttributes';
|
|
17
17
|
var VerticalNavigationItemFlyoutMenu = forwardRef(function (props, ref) {
|
|
18
|
+
var _a;
|
|
18
19
|
var label = props.label, children = props.children, isDrawerOpen = props.isDrawerOpen, fullHeightFlyout = props.fullHeightFlyout, open = props.open, parentItemRef = props.parentItemRef, dataAttributes = props.dataAttributes, content = props.content, anchorEl = props.anchorEl, setAnchorEl = props.setAnchorEl, setIsFlyoutHovered = props.setIsFlyoutHovered;
|
|
19
20
|
var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
|
|
20
21
|
if (fullHeightFlyout && content) {
|
|
@@ -35,7 +36,13 @@ var VerticalNavigationItemFlyoutMenu = forwardRef(function (props, ref) {
|
|
|
35
36
|
}, CLOSE_SUBMENU_DELAY);
|
|
36
37
|
}
|
|
37
38
|
};
|
|
38
|
-
|
|
39
|
+
var isBottomHalfOfScreen = ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().y) > window.innerHeight / 2;
|
|
40
|
+
return (_jsx(FlyoutMenuPaper, __assign({ ref: ref, "data-id": dataIds.VerticalNavigationFlyout, isDrawerOpen: isDrawerOpen, open: open, anchorEl: anchorEl !== null && anchorEl !== void 0 ? anchorEl : undefined, onMouseEnter: function () { return setIsFlyoutHovered(true); }, onMouseLeave: function () { return setIsFlyoutHovered(false); }, onFocus: function () { return setIsFlyoutHovered(true); }, onBlur: function () { return setIsFlyoutHovered(false); }, sx: {
|
|
41
|
+
transform: isBottomHalfOfScreen ? 'translateY(calc(-100% + 48px))' : ''
|
|
42
|
+
} }, { children: _jsxs(FlyoutMenuWrap, __assign({ open: open }, { children: [_jsx(NotchMini, { sx: {
|
|
43
|
+
bottom: isBottomHalfOfScreen ? '12px' : 'auto',
|
|
44
|
+
top: isBottomHalfOfScreen ? 'auto' : '12px'
|
|
45
|
+
} }), _jsx(FlyoutMenuHeader, { children: label }), _jsx(FlyoutMenuList, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, "aria-label": label, open: open }, { children: children === null || children === void 0 ? void 0 : children.map(function (childItem, index) { return (_jsx(FlyoutMenuItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem }, { children: _jsx(FlyoutMenuButton
|
|
39
46
|
// @ts-expect-error
|
|
40
47
|
, __assign({
|
|
41
48
|
// @ts-expect-error
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
/**
|
|
2
3
|
* Return the background color for the navigation
|
|
3
4
|
* @returns string
|
|
@@ -20,3 +21,12 @@ export declare const getOffsetNavigationBackground: (theme: any, colorAdjustAmou
|
|
|
20
21
|
* @returns string
|
|
21
22
|
*/
|
|
22
23
|
export declare const getOffsetNavigationContrastText: (theme: any, colorAdjustAmount?: number) => any;
|
|
24
|
+
export declare const getDefaultSupportLinks: (messages: Record<string, string>) => {
|
|
25
|
+
label: string;
|
|
26
|
+
icon: JSX.Element;
|
|
27
|
+
onClick: () => null;
|
|
28
|
+
children: {
|
|
29
|
+
label: string;
|
|
30
|
+
onClick: () => Window | null;
|
|
31
|
+
}[];
|
|
32
|
+
}[];
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
2
|
import { darken, lighten, getLuminance } from 'polished';
|
|
3
|
+
import { HelpOutline } from '@mui/icons-material';
|
|
2
4
|
var DEFAULT_COLOR_ADJUST_AMOUNT = 0.1;
|
|
3
5
|
// Luminance threshold for determining if we should lighten or darken the color
|
|
4
6
|
// .033 is the luminance value of #333333
|
|
@@ -62,3 +64,17 @@ export var getOffsetNavigationContrastText = function (theme, colorAdjustAmount)
|
|
|
62
64
|
? palette.getContrastText(lighten(adjustAmount, (_c = palette.navigation) === null || _c === void 0 ? void 0 : _c.background))
|
|
63
65
|
: palette.getContrastText(darken(adjustAmount, (_d = palette.navigation) === null || _d === void 0 ? void 0 : _d.background));
|
|
64
66
|
};
|
|
67
|
+
export var getDefaultSupportLinks = function (messages) {
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
label: messages.support,
|
|
71
|
+
icon: _jsx(HelpOutline, {}),
|
|
72
|
+
onClick: function () { return null; },
|
|
73
|
+
children: [
|
|
74
|
+
{ label: messages['help-center'], onClick: function () { return window.open('https://learningpool.zendesk.com/', '_blank'); } },
|
|
75
|
+
{ label: messages['submit-feedback'], onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
|
|
76
|
+
{ label: messages['contact-us'], onClick: function () { return window.open('https://learningpool.com/support/', '_blank'); } }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
];
|
|
80
|
+
};
|
package/lang/en-us.d.ts
CHANGED
|
@@ -16,11 +16,13 @@ export const defaultMessages: {
|
|
|
16
16
|
'open-navigation': string;
|
|
17
17
|
'close-navigation': string;
|
|
18
18
|
'site-logo': string;
|
|
19
|
+
'invert-navigation-bar': string;
|
|
19
20
|
greeting: string;
|
|
20
21
|
logout: string;
|
|
21
22
|
'view-profile': string;
|
|
22
23
|
'edit-profile': string;
|
|
24
|
+
support: string;
|
|
23
25
|
'help-center': string;
|
|
24
|
-
'
|
|
26
|
+
'submit-feedback': string;
|
|
25
27
|
'contact-us': string;
|
|
26
28
|
};
|
package/lang/en-us.js
CHANGED
|
@@ -18,12 +18,14 @@ export var defaultMessages = {
|
|
|
18
18
|
'open-navigation': 'Open navigation',
|
|
19
19
|
'close-navigation': 'Close navigation',
|
|
20
20
|
'site-logo': 'Site logo',
|
|
21
|
+
'invert-navigation-bar': 'Invert navigation bar',
|
|
21
22
|
// Avatar Panel
|
|
22
23
|
greeting: 'Hi',
|
|
23
24
|
logout: 'Logout',
|
|
24
25
|
'view-profile': 'View Profile',
|
|
25
26
|
'edit-profile': 'Edit Profile',
|
|
27
|
+
support: 'Support',
|
|
26
28
|
'help-center': 'Help Centre',
|
|
27
|
-
'
|
|
29
|
+
'submit-feedback': 'Submit Feedback',
|
|
28
30
|
'contact-us': 'Contact Us'
|
|
29
31
|
};
|
package/package.json
CHANGED
|
@@ -35,6 +35,7 @@ export interface IVerticalNavigationProps {
|
|
|
35
35
|
appRootID?: string;
|
|
36
36
|
localization?: any;
|
|
37
37
|
dataAttributes?: any;
|
|
38
|
+
showSupportLinks?: boolean;
|
|
38
39
|
hasAvatar?: boolean;
|
|
39
40
|
avatarPanelLogoutString?: string;
|
|
40
41
|
avatarPanelOnClickSwitchDirection?: any;
|
|
@@ -48,5 +49,6 @@ export interface IVerticalNavigationProps {
|
|
|
48
49
|
avatarPanelMainActionString?: string;
|
|
49
50
|
avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
|
|
50
51
|
avatarPanelFootnote?: any;
|
|
52
|
+
/** @deprecated This property will be removed in the next major version (2.X) */
|
|
51
53
|
avatarPanelShowHelpLinks?: boolean;
|
|
52
54
|
}
|