@licklist/design 0.78.20 → 0.78.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/assets/Trend-Down.svg +3 -0
- package/dist/assets/Trend-Up.svg +3 -0
- package/dist/auth/Authorizer.d.ts.map +1 -1
- package/dist/auth/Authorizer.js +47 -12
- package/dist/auth/Layout/UserNavDropDown.js +1 -1
- package/dist/auth/Login/LoginComponent.d.ts.map +1 -1
- package/dist/auth/Login/LoginComponent.js +8 -6
- package/dist/auth/Logout/Logout.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/v2/components/EntityHeader/EntityHeader.d.ts +13 -0
- package/dist/v2/components/EntityHeader/EntityHeader.d.ts.map +1 -0
- package/dist/v2/components/EntityHeader/EntityHeader.js +85 -0
- package/dist/v2/components/EntityHeader/EntityHeader.scss.js +6 -0
- package/dist/v2/components/EntityHeader/index.d.ts +2 -0
- package/dist/v2/components/EntityHeader/index.d.ts.map +1 -0
- package/dist/v2/components/NPSScore/NPSScore.d.ts +18 -0
- package/dist/v2/components/NPSScore/NPSScore.d.ts.map +1 -0
- package/dist/v2/components/NPSScore/index.d.ts +3 -0
- package/dist/v2/components/NPSScore/index.d.ts.map +1 -0
- package/dist/v2/components/Select/Select.d.ts +10 -0
- package/dist/v2/components/Select/Select.d.ts.map +1 -0
- package/dist/v2/components/Select/index.d.ts +3 -0
- package/dist/v2/components/Select/index.d.ts.map +1 -0
- package/dist/v2/components/Tooltip/Tooltip.d.ts +21 -0
- package/dist/v2/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/v2/components/Tooltip/Tooltip.js +103 -0
- package/dist/v2/components/Tooltip/Tooltip.scss.js +6 -0
- package/dist/v2/components/Tooltip/index.d.ts +2 -0
- package/dist/v2/components/Tooltip/index.d.ts.map +1 -0
- package/dist/v2/components/UserAvatar/UserAvatar.d.ts +12 -0
- package/dist/v2/components/UserAvatar/UserAvatar.d.ts.map +1 -0
- package/dist/v2/components/UserAvatar/UserAvatar.js +77 -0
- package/dist/v2/components/UserAvatar/UserAvatar.scss.js +6 -0
- package/dist/v2/components/UserAvatar/index.d.ts +2 -0
- package/dist/v2/components/UserAvatar/index.d.ts.map +1 -0
- package/dist/v2/components/UserPanel/UserPanel.d.ts +17 -0
- package/dist/v2/components/UserPanel/UserPanel.d.ts.map +1 -0
- package/dist/v2/components/UserPanel/UserPanel.js +168 -0
- package/dist/v2/components/UserPanel/UserPanel.scss.js +6 -0
- package/dist/v2/components/UserPanel/index.d.ts +3 -0
- package/dist/v2/components/UserPanel/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/blog-posts/Blog.d.ts +15 -0
- package/dist/v2/dashboard-analytics/blog-posts/Blog.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/blog-posts/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/blog-posts/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/chart/Chart.d.ts +21 -0
- package/dist/v2/dashboard-analytics/chart/Chart.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/chart/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/chart/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/dashboard/Dashboard.d.ts +57 -0
- package/dist/v2/dashboard-analytics/dashboard/Dashboard.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/dashboard/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/dashboard/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/index.d.ts +13 -0
- package/dist/v2/dashboard-analytics/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/metric-card/MetricCard.d.ts +17 -0
- package/dist/v2/dashboard-analytics/metric-card/MetricCard.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/metric-card/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/metric-card/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/venue-card/VenueCard.d.ts +12 -0
- package/dist/v2/dashboard-analytics/venue-card/VenueCard.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/venue-card/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/venue-card/index.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.d.ts +25 -0
- package/dist/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.d.ts.map +1 -0
- package/dist/v2/dashboard-analytics/venue-closed-card/index.d.ts +3 -0
- package/dist/v2/dashboard-analytics/venue-closed-card/index.d.ts.map +1 -0
- package/dist/v2/index.d.ts +11 -5
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/navigation/DashboardLayout/AdminSidebar.d.ts +10 -0
- package/dist/v2/navigation/DashboardLayout/AdminSidebar.d.ts.map +1 -0
- package/dist/v2/navigation/DashboardLayout/AdminSidebar.js +296 -0
- package/dist/v2/navigation/DashboardLayout/AdminSidebar.scss.js +6 -0
- package/dist/v2/navigation/DashboardLayout/DashboardFooter.d.ts +7 -0
- package/dist/v2/navigation/DashboardLayout/DashboardFooter.d.ts.map +1 -0
- package/dist/v2/navigation/DashboardLayout/DashboardFooter.js +34 -0
- package/dist/v2/navigation/DashboardLayout/DashboardFooter.scss.js +6 -0
- package/dist/v2/navigation/DashboardLayout/DashboardLayout.d.ts +42 -0
- package/dist/v2/navigation/DashboardLayout/DashboardLayout.d.ts.map +1 -0
- package/dist/v2/navigation/DashboardLayout/DashboardLayout.js +154 -0
- package/dist/v2/navigation/DashboardLayout/DashboardLayout.scss.js +6 -0
- package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts +35 -0
- package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts.map +1 -0
- package/dist/v2/navigation/DashboardLayout/ProviderSidebar.js +344 -0
- package/dist/v2/navigation/DashboardLayout/ProviderSidebar.scss.js +6 -0
- package/dist/v2/navigation/DashboardLayout/TopNavigation.d.ts +26 -0
- package/dist/v2/navigation/DashboardLayout/TopNavigation.d.ts.map +1 -0
- package/dist/v2/navigation/DashboardLayout/TopNavigation.js +468 -0
- package/dist/v2/navigation/DashboardLayout/TopNavigation.scss.js +6 -0
- package/dist/v2/navigation/DashboardLayout/assets/AdminLogo.png.js +3 -0
- package/dist/v2/navigation/DashboardLayout/assets/BookedLogo_Mark.png.js +3 -0
- package/dist/v2/navigation/DashboardLayout/index.d.ts +7 -0
- package/dist/v2/navigation/DashboardLayout/index.d.ts.map +1 -0
- package/package.json +7 -5
- package/src/assets/Trend-Down.svg +3 -0
- package/src/assets/Trend-Up.svg +3 -0
- package/src/auth/Authorizer.tsx +49 -20
- package/src/auth/Layout/UserNavDropDown.tsx +1 -1
- package/src/auth/Login/LoginComponent.tsx +7 -5
- package/src/auth/Logout/Logout.tsx +1 -1
- package/src/index.ts +2 -1
- package/src/v2/components/EntityHeader/EntityHeader.scss +133 -0
- package/src/v2/components/EntityHeader/EntityHeader.stories.tsx +103 -0
- package/src/v2/components/EntityHeader/EntityHeader.tsx +76 -0
- package/src/v2/components/EntityHeader/index.ts +1 -0
- package/src/v2/components/NPSScore/NPSScore.scss +330 -0
- package/src/v2/components/NPSScore/NPSScore.stories.tsx +29 -0
- package/src/v2/components/NPSScore/NPSScore.tsx +209 -0
- package/src/v2/components/NPSScore/index.ts +2 -0
- package/src/v2/components/Select/Select.scss +188 -0
- package/src/v2/components/Select/Select.stories.tsx +164 -0
- package/src/v2/components/Select/Select.tsx +56 -0
- package/src/v2/components/Select/index.ts +2 -0
- package/src/v2/components/Tooltip/Tooltip.scss +92 -0
- package/src/v2/components/Tooltip/Tooltip.stories.tsx +164 -0
- package/src/v2/components/Tooltip/Tooltip.tsx +64 -0
- package/src/v2/components/Tooltip/index.ts +8 -0
- package/src/v2/components/UserAvatar/UserAvatar.scss +62 -0
- package/src/v2/components/UserAvatar/UserAvatar.stories.tsx +94 -0
- package/src/v2/components/UserAvatar/UserAvatar.tsx +96 -0
- package/src/v2/components/UserAvatar/index.ts +1 -0
- package/src/v2/components/UserPanel/UserPanel.scss +195 -0
- package/src/v2/components/UserPanel/UserPanel.stories.tsx +66 -0
- package/src/v2/components/UserPanel/UserPanel.tsx +132 -0
- package/src/v2/components/UserPanel/index.ts +2 -0
- package/src/v2/dashboard-analytics/blog-posts/Blog.scss +92 -0
- package/src/v2/dashboard-analytics/blog-posts/Blog.stories.tsx +57 -0
- package/src/v2/dashboard-analytics/blog-posts/Blog.tsx +91 -0
- package/src/v2/dashboard-analytics/blog-posts/index.ts +2 -0
- package/src/v2/dashboard-analytics/chart/Chart.scss +424 -0
- package/src/v2/dashboard-analytics/chart/Chart.stories.tsx +157 -0
- package/src/v2/dashboard-analytics/chart/Chart.tsx +623 -0
- package/src/v2/dashboard-analytics/chart/index.ts +2 -0
- package/src/v2/dashboard-analytics/dashboard/Dashboard.scss +254 -0
- package/src/v2/dashboard-analytics/dashboard/Dashboard.stories.tsx +298 -0
- package/src/v2/dashboard-analytics/dashboard/Dashboard.tsx +248 -0
- package/src/v2/dashboard-analytics/dashboard/index.ts +2 -0
- package/src/v2/dashboard-analytics/index.ts +12 -0
- package/src/v2/dashboard-analytics/metric-card/MetricCard.scss +125 -0
- package/src/v2/dashboard-analytics/metric-card/MetricCard.stories.tsx +106 -0
- package/src/v2/dashboard-analytics/metric-card/MetricCard.tsx +72 -0
- package/src/v2/dashboard-analytics/metric-card/index.ts +2 -0
- package/src/v2/dashboard-analytics/venue-card/VenueCard.scss +112 -0
- package/src/v2/dashboard-analytics/venue-card/VenueCard.stories.tsx +40 -0
- package/src/v2/dashboard-analytics/venue-card/VenueCard.tsx +62 -0
- package/src/v2/dashboard-analytics/venue-card/index.ts +2 -0
- package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.scss +129 -0
- package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.stories.tsx +31 -0
- package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.tsx +61 -0
- package/src/v2/dashboard-analytics/venue-closed-card/index.ts +2 -0
- package/src/v2/design-system/colors/ColorSystem.scss +439 -0
- package/src/v2/design-system/colors/ColorSystem.stories.tsx +730 -0
- package/src/v2/design-system/typography/Typography.scss +295 -0
- package/src/v2/design-system/typography/Typography.stories.tsx +109 -0
- package/src/v2/index.ts +43 -7
- package/src/v2/navigation/DashboardLayout/AdminSidebar.scss +207 -0
- package/src/v2/navigation/DashboardLayout/AdminSidebar.tsx +171 -0
- package/src/v2/navigation/DashboardLayout/DashboardFooter.scss +30 -0
- package/src/v2/navigation/DashboardLayout/DashboardFooter.tsx +25 -0
- package/src/v2/navigation/DashboardLayout/DashboardLayout.scss +91 -0
- package/src/v2/navigation/DashboardLayout/DashboardLayout.stories.tsx +370 -0
- package/src/v2/navigation/DashboardLayout/DashboardLayout.tsx +215 -0
- package/src/v2/navigation/DashboardLayout/ProviderSidebar.scss +266 -0
- package/src/v2/navigation/DashboardLayout/ProviderSidebar.tsx +252 -0
- package/src/v2/navigation/DashboardLayout/Sidebar.stories.tsx +220 -0
- package/src/v2/navigation/DashboardLayout/TopNavigation.scss +206 -0
- package/src/v2/navigation/DashboardLayout/TopNavigation.tsx +270 -0
- package/src/v2/navigation/DashboardLayout/assets/AdminLogo.png +0 -0
- package/src/v2/navigation/DashboardLayout/assets/BookedLogo_Mark.png +0 -0
- package/src/v2/navigation/DashboardLayout/index.ts +20 -0
- package/src/v2/styles/index.scss +0 -1
- package/src/v2/styles/tokens/_colors.scss +531 -98
- package/dist/v2/components/Colors/Colors.d.ts +0 -21
- package/dist/v2/components/Colors/Colors.d.ts.map +0 -1
- package/dist/v2/components/Colors/index.d.ts +0 -3
- package/dist/v2/components/Colors/index.d.ts.map +0 -1
- package/dist/v2/components/Typography/Typography.d.ts +0 -11
- package/dist/v2/components/Typography/Typography.d.ts.map +0 -1
- package/dist/v2/components/Typography/index.d.ts +0 -3
- package/dist/v2/components/Typography/index.d.ts.map +0 -1
- package/src/v2/components/Colors/Colors.scss +0 -64
- package/src/v2/components/Colors/Colors.stories.tsx +0 -143
- package/src/v2/components/Colors/Colors.tsx +0 -51
- package/src/v2/components/Colors/ColorsAliases.stories.tsx +0 -285
- package/src/v2/components/Colors/Sizes.stories.tsx +0 -141
- package/src/v2/components/Colors/index.ts +0 -2
- package/src/v2/components/Typography/Typography.scss +0 -72
- package/src/v2/components/Typography/Typography.stories.tsx +0 -266
- package/src/v2/components/Typography/Typography.tsx +0 -56
- package/src/v2/components/Typography/index.ts +0 -2
- package/src/v2/styles/tokens/_aliases.scss +0 -199
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var img = "data:image/png;base64,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";
|
|
2
|
+
|
|
3
|
+
export { img as default };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { DashboardLayout, type DashboardLayoutProps, type DestinationType } from './DashboardLayout';
|
|
2
|
+
export { ProviderSidebar, type ProviderSidebarProps, type NavItem, HomeIcon, FlowsIcon, InventoryIcon, LoyaltyIcon, CustomersIcon, ReportsIcon, AnalyticsIcon, MarketingIcon, WaiversIcon, SettingsIcon, } from './ProviderSidebar';
|
|
3
|
+
export { AdminSidebar, type AdminSidebarProps } from './AdminSidebar';
|
|
4
|
+
export { TopNavigation, type TopNavigationProps } from './TopNavigation';
|
|
5
|
+
export { DashboardFooter, type DashboardFooterProps } from './DashboardFooter';
|
|
6
|
+
export { default } from './DashboardLayout';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2/navigation/DashboardLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACpG,OAAO,EACH,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,GACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@licklist/design",
|
|
3
|
-
"version": "0.78.
|
|
3
|
+
"version": "0.78.25",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
|
-
"url": "git+ssh://git@bitbucket.org/
|
|
6
|
+
"url": "git+ssh://git@bitbucket.org/bookedit-licklist/licklist_design.git"
|
|
7
7
|
},
|
|
8
8
|
"author": "Yaroslav Havryliv",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"type": "module",
|
|
11
|
-
"homepage": "https://bitbucket.org/
|
|
11
|
+
"homepage": "https://bitbucket.org/bookedit-licklist/licklist_design#readme",
|
|
12
12
|
"description": "",
|
|
13
13
|
"scripts": {
|
|
14
14
|
"start": "storybook dev -p 9009",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@licklist/core": "0.36.6",
|
|
46
46
|
"@licklist/eslint-config": "0.5.6",
|
|
47
|
-
"@licklist/plugins": "0.36.
|
|
47
|
+
"@licklist/plugins": "0.36.10",
|
|
48
48
|
"clsx": "2.1.1",
|
|
49
49
|
"i18next": "25.3.2",
|
|
50
50
|
"lodash": "4.17.21",
|
|
@@ -66,11 +66,12 @@
|
|
|
66
66
|
"@fortawesome/free-solid-svg-icons": "5.15.2",
|
|
67
67
|
"@licklist/core": "0.36.6",
|
|
68
68
|
"@licklist/eslint-config": "0.5.6",
|
|
69
|
-
"@licklist/plugins": "0.36.
|
|
69
|
+
"@licklist/plugins": "0.36.10",
|
|
70
70
|
"@mantine/core": "6.0.22",
|
|
71
71
|
"@mantine/hooks": "6.0.22",
|
|
72
72
|
"@mdx-js/react": "1.6.22",
|
|
73
73
|
"@popperjs/core": "2.11.8",
|
|
74
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
74
75
|
"@react-aria/utils": "3.9.0",
|
|
75
76
|
"@svgr/webpack": "^6.5.1",
|
|
76
77
|
"@tanstack/react-table": "8.10.6",
|
|
@@ -108,6 +109,7 @@
|
|
|
108
109
|
"i18next": "25.3.2",
|
|
109
110
|
"konva": "6.0.0",
|
|
110
111
|
"lodash": "4.17.21",
|
|
112
|
+
"lucide-react": "^0.555.0",
|
|
111
113
|
"luxon": "3.5.0",
|
|
112
114
|
"moment": "2.29.1",
|
|
113
115
|
"react-bootstrap": "1.6.1",
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="16" height="16" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M27 23V16H25V19.4375L15.7686 8.35938C15.5453 8.0916 15.1984 7.95968 14.8535 8.01074C14.5086 8.06191 14.215 8.2892 14.0791 8.61035L9.30176 19.9014L5.33203 13.9453L3.66797 15.0547L8.66797 22.5547L8.75098 22.6631C8.96072 22.9001 9.2733 23.0253 9.59375 22.9951C9.95991 22.9606 10.2776 22.7284 10.4209 22.3896L15.2812 10.9014L23.6973 21H19V23H27Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="16" height="16" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M27 9.99982V16.9998H25V13.5623L15.7686 24.6404C15.5453 24.9082 15.1984 25.0401 14.8535 24.9891C14.5086 24.9379 14.215 24.7106 14.0791 24.3895L9.06934 12.5486L4.58789 15.8084L3.41211 14.1912L8.91211 10.1912L9.00781 10.1297C9.23732 9.99988 9.51055 9.9646 9.76758 10.0359C10.0615 10.1176 10.302 10.3293 10.4209 10.6102L15.2812 22.0984L23.6973 11.9998H19V9.99982H27Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
package/src/auth/Authorizer.tsx
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import { ReactNode, useEffect, useState, useCallback } from 'react'
|
|
2
|
-
import { matchPath, useLocation } from 'react-router-dom'
|
|
1
|
+
import { ReactNode, useEffect, useState, useCallback, useContext, useRef } from 'react'
|
|
2
|
+
import { matchPath, useLocation, useNavigate } from 'react-router-dom'
|
|
3
3
|
import useUser from '@licklist/plugins/dist/context/user/hooks/useUser'
|
|
4
4
|
import { ROUTES, MATCH_ROUTE_PATTERNS } from '@licklist/core/dist/Config'
|
|
5
5
|
import useAuthApi from '@licklist/plugins/dist/hooks/Api/useAuthApi'
|
|
6
6
|
import useAuth from '@licklist/plugins/dist/context/user/hooks/useAuth'
|
|
7
7
|
import RouteService from '@licklist/plugins/dist/services/Route/RouteService'
|
|
8
|
+
import StorageContext from '@licklist/plugins/dist/context/app/StorageContext'
|
|
9
|
+
import JsonService from '@licklist/plugins/dist/services/Json/JsonService'
|
|
10
|
+
import { IAuth } from '@licklist/plugins/dist/types/context/user/IAuth'
|
|
8
11
|
import { BlockLoader } from '../static/loader/BlockLoader'
|
|
9
12
|
|
|
10
13
|
export interface AuthorizerProps {
|
|
11
14
|
children?: ReactNode | ReactNode[]
|
|
12
15
|
}
|
|
13
16
|
|
|
17
|
+
const AUTH_CONTEXT_KEY = 'auth'
|
|
18
|
+
|
|
14
19
|
function Authorizer(props: AuthorizerProps) {
|
|
15
20
|
const { children } = props
|
|
16
21
|
const auth = useAuth()
|
|
17
22
|
const user = useUser()
|
|
18
23
|
const { useProfile } = useAuthApi()
|
|
24
|
+
const storage = useContext(StorageContext)
|
|
25
|
+
const isLoggingOut = useRef(false)
|
|
19
26
|
|
|
20
27
|
const { pathname } = useLocation()
|
|
28
|
+
const navigate = useNavigate()
|
|
21
29
|
|
|
22
30
|
// This will re-fetch user's profile
|
|
23
31
|
const profile = useProfile()
|
|
@@ -40,6 +48,24 @@ function Authorizer(props: AuthorizerProps) {
|
|
|
40
48
|
[],
|
|
41
49
|
)
|
|
42
50
|
|
|
51
|
+
// Check auth on every route change - if storage was cleared, logout immediately
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (isLoggingOut.current) return
|
|
54
|
+
|
|
55
|
+
const storedAuth = storage.get(AUTH_CONTEXT_KEY)
|
|
56
|
+
const parsedAuth = storedAuth ? JsonService.decode<IAuth>(storedAuth) : null
|
|
57
|
+
|
|
58
|
+
// If we have auth in memory but not in storage, session was cleared
|
|
59
|
+
if (auth.secrets !== null && !parsedAuth) {
|
|
60
|
+
isLoggingOut.current = true
|
|
61
|
+
auth.setSecrets(null)
|
|
62
|
+
user.setProfile(null)
|
|
63
|
+
|
|
64
|
+
const route = RouteService.getCurrentRoute()
|
|
65
|
+
navigate([ROUTES.LOGIN_PAGE, `returnUrl=${escape(route)}`].join('?'), { replace: true })
|
|
66
|
+
}
|
|
67
|
+
}, [pathname, auth.secrets, storage, navigate, auth, user])
|
|
68
|
+
|
|
43
69
|
useEffect(() => {
|
|
44
70
|
if (profile.isLoading || profile.isFetching) {
|
|
45
71
|
return
|
|
@@ -54,38 +80,41 @@ function Authorizer(props: AuthorizerProps) {
|
|
|
54
80
|
return
|
|
55
81
|
}
|
|
56
82
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
)
|
|
71
|
-
|
|
83
|
+
const publicRoutes = [
|
|
84
|
+
ROUTES.LOGIN_PAGE,
|
|
85
|
+
ROUTES.REGISTER_PAGE,
|
|
86
|
+
ROUTES.PRIVACY_PAGE,
|
|
87
|
+
ROUTES.TERMS_PAGE,
|
|
88
|
+
ROUTES.PRIVACY_FACTS_PAGE,
|
|
89
|
+
ROUTES.CHANGE_PASSWORD,
|
|
90
|
+
ROUTES.FORGOT_PASSWORD,
|
|
91
|
+
ROUTES.SSO_LOGIN,
|
|
92
|
+
ROUTES.MAINTENANCE_PAGE,
|
|
93
|
+
...matchedPathPatternUrls(),
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
// If we're on a public route (e.g. /login), mark as validated and never redirect
|
|
97
|
+
if (publicRoutes.includes(pathname)) {
|
|
98
|
+
setIsValidated(true)
|
|
72
99
|
return
|
|
73
100
|
}
|
|
74
101
|
|
|
75
102
|
const route = RouteService.getCurrentRoute()
|
|
76
103
|
|
|
77
|
-
|
|
78
|
-
[ROUTES.
|
|
104
|
+
navigate(
|
|
105
|
+
[ROUTES.LOGIN_PAGE, `returnUrl=${escape(route)}`].join('?'),
|
|
106
|
+
{ replace: true },
|
|
79
107
|
)
|
|
80
108
|
}, [
|
|
81
109
|
auth.secrets,
|
|
82
110
|
user.profile,
|
|
83
111
|
profile.data,
|
|
84
|
-
matchedPathPatternUrls,
|
|
85
112
|
profile.isError,
|
|
86
113
|
profile.isLoading,
|
|
87
114
|
profile.isFetching,
|
|
88
115
|
pathname,
|
|
116
|
+
matchedPathPatternUrls,
|
|
117
|
+
navigate,
|
|
89
118
|
])
|
|
90
119
|
|
|
91
120
|
if (profile.isFetching || profile.isLoading || !isValidated)
|
|
@@ -5,7 +5,7 @@ import { Trans, useTranslation } from 'react-i18next'
|
|
|
5
5
|
import { Link, useNavigate } from 'react-router-dom'
|
|
6
6
|
import RequestContext from '@licklist/plugins/dist/context/app/RequestContext'
|
|
7
7
|
import useUserApi from '@licklist/plugins/dist/hooks/Api/useUserApi'
|
|
8
|
-
import
|
|
8
|
+
import useAlert from "@licklist/plugins/dist/context/app/hooks/useAlert";
|
|
9
9
|
import useAuth from '@licklist/plugins/dist/context/user/hooks/useAuth'
|
|
10
10
|
import useUser from '@licklist/plugins/dist/context/user/hooks/useUser'
|
|
11
11
|
import useInvite from '@licklist/plugins/dist/context/user/hooks/useInvite'
|
|
@@ -30,7 +30,7 @@ const LoginComponent = ({
|
|
|
30
30
|
}: LoginComponentProps) => {
|
|
31
31
|
const { t } = useTranslation(['Notification', 'User'])
|
|
32
32
|
const request = useContext(RequestContext)
|
|
33
|
-
const
|
|
33
|
+
const { showAlert } = useAlert();
|
|
34
34
|
const auth = useAuth()
|
|
35
35
|
const user = useUser()
|
|
36
36
|
const invite = useInvite()
|
|
@@ -42,9 +42,10 @@ const LoginComponent = ({
|
|
|
42
42
|
const userApiService = useUserApi(request)
|
|
43
43
|
|
|
44
44
|
const handleError = (error: any) => {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
showAlert({
|
|
46
|
+
type: 'error',
|
|
47
47
|
message: error.message,
|
|
48
|
+
mount: 'container',
|
|
48
49
|
})
|
|
49
50
|
}
|
|
50
51
|
|
|
@@ -82,7 +83,8 @@ const LoginComponent = ({
|
|
|
82
83
|
user.login(profile.data as IUser)
|
|
83
84
|
invite.clearInvitation()
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
showAlert({
|
|
87
|
+
type: 'success',
|
|
86
88
|
title: 'Success',
|
|
87
89
|
message: t('Notification:loggedSuccessfully'),
|
|
88
90
|
})
|
package/src/index.ts
CHANGED
|
@@ -45,4 +45,5 @@ export * from './fullscreen-loader'
|
|
|
45
45
|
export * from './pages'
|
|
46
46
|
export { default as RadioButton } from './customRadioButton/RadioButton'
|
|
47
47
|
export * from './PageNotFound'
|
|
48
|
-
export * from './UnderMaintenance'
|
|
48
|
+
export * from './UnderMaintenance'
|
|
49
|
+
export * from './v2/navigation/DashboardLayout'
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
.entity-header {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 8px;
|
|
5
|
+
padding: 8px;
|
|
6
|
+
border-radius: 8px;
|
|
7
|
+
background: var(--surfaces-main-surface-secondary, #F4F4F7);
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
transition: background 0.2s ease;
|
|
10
|
+
width: 100%;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
|
|
13
|
+
&:hover {
|
|
14
|
+
background: var(--surfaces-main-surface-secondary-hover, #ECEDF2);
|
|
15
|
+
|
|
16
|
+
.entity-header__badge {
|
|
17
|
+
background: var(--surfaces-main-surface-tertiary-hover, #FFFFFF);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&:active {
|
|
22
|
+
background: var(--surfaces-main-surface-secondary-pressed, #E4E5EC);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&--collapsed {
|
|
26
|
+
justify-content: center;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&__avatar {
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
border-radius: 50%;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
position: relative;
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&__image {
|
|
40
|
+
width: 100%;
|
|
41
|
+
height: 100%;
|
|
42
|
+
object-fit: cover;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__placeholder {
|
|
46
|
+
width: 100%;
|
|
47
|
+
height: 100%;
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
position: relative;
|
|
52
|
+
|
|
53
|
+
svg {
|
|
54
|
+
position: absolute;
|
|
55
|
+
top: 0;
|
|
56
|
+
left: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
span {
|
|
60
|
+
font-family: var(--font-family-sans);
|
|
61
|
+
font-weight: 700;
|
|
62
|
+
color: var(--labels-main-label-secondary, #626A90);
|
|
63
|
+
position: relative;
|
|
64
|
+
z-index: 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&__text {
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
flex: 1;
|
|
72
|
+
gap: 4px;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&__name {
|
|
77
|
+
margin: 0;
|
|
78
|
+
font-family: var(--font-family-sans);
|
|
79
|
+
font-size: 15px;
|
|
80
|
+
font-weight: 600;
|
|
81
|
+
line-height: 18px;
|
|
82
|
+
color: var(--labels-main-label-primary, #121E52);
|
|
83
|
+
white-space: nowrap;
|
|
84
|
+
overflow: hidden;
|
|
85
|
+
text-overflow: ellipsis;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
&__badge {
|
|
89
|
+
display: inline-flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
justify-content: center;
|
|
92
|
+
padding: 4px 8px;
|
|
93
|
+
background: var(--surfaces-main-surface-tertiary, #E8E9EF);
|
|
94
|
+
border-radius: 8px;
|
|
95
|
+
width: fit-content;
|
|
96
|
+
transition: background 0.2s ease;
|
|
97
|
+
|
|
98
|
+
span {
|
|
99
|
+
font-family: var(--font-family-mono);
|
|
100
|
+
font-size: 10px;
|
|
101
|
+
font-weight: 600;
|
|
102
|
+
line-height: 12px;
|
|
103
|
+
color: var(--labels-main-label-secondary, #626A90);
|
|
104
|
+
white-space: nowrap;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&--sm {
|
|
109
|
+
gap: 8px;
|
|
110
|
+
|
|
111
|
+
.entity-header__name {
|
|
112
|
+
font-size: 13px;
|
|
113
|
+
line-height: 16px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.entity-header__badge span {
|
|
117
|
+
font-size: 9px;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&--lg {
|
|
122
|
+
gap: 16px;
|
|
123
|
+
|
|
124
|
+
.entity-header__name {
|
|
125
|
+
font-size: 18px;
|
|
126
|
+
line-height: 24px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.entity-header__badge span {
|
|
130
|
+
font-size: 11px;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
import { EntityHeader } from './EntityHeader'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'v2/Components/EntityHeader',
|
|
6
|
+
component: EntityHeader,
|
|
7
|
+
argTypes: {
|
|
8
|
+
name: { control: 'text' },
|
|
9
|
+
id: { control: 'text' },
|
|
10
|
+
idLabel: { control: 'text' },
|
|
11
|
+
imageUrl: { control: 'text' },
|
|
12
|
+
size: { control: 'select', options: ['sm', 'md', 'lg'] },
|
|
13
|
+
collapsed: { control: 'boolean' },
|
|
14
|
+
},
|
|
15
|
+
parameters: {
|
|
16
|
+
layout: 'centered',
|
|
17
|
+
},
|
|
18
|
+
} as Meta<typeof EntityHeader>
|
|
19
|
+
|
|
20
|
+
type Story = StoryObj<typeof EntityHeader>
|
|
21
|
+
|
|
22
|
+
export const Default: Story = {
|
|
23
|
+
args: {
|
|
24
|
+
name: "Sharky's Soft Play",
|
|
25
|
+
id: '01',
|
|
26
|
+
idLabel: 'Venue ID',
|
|
27
|
+
size: 'md',
|
|
28
|
+
collapsed: false,
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const WithImage: Story = {
|
|
33
|
+
args: {
|
|
34
|
+
name: "Sharky's Soft Play",
|
|
35
|
+
id: '01',
|
|
36
|
+
idLabel: 'Venue ID',
|
|
37
|
+
imageUrl: 'https://i.pravatar.cc/150?img=12',
|
|
38
|
+
size: 'md',
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const Collapsed: Story = {
|
|
43
|
+
args: {
|
|
44
|
+
name: "Sharky's Soft Play",
|
|
45
|
+
id: '01',
|
|
46
|
+
idLabel: 'Venue ID',
|
|
47
|
+
size: 'md',
|
|
48
|
+
collapsed: true,
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const Small: Story = {
|
|
53
|
+
args: {
|
|
54
|
+
name: "Sharky's Soft Play",
|
|
55
|
+
id: '01',
|
|
56
|
+
idLabel: 'Venue ID',
|
|
57
|
+
size: 'sm',
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const Large: Story = {
|
|
62
|
+
args: {
|
|
63
|
+
name: "Sharky's Soft Play",
|
|
64
|
+
id: '01',
|
|
65
|
+
idLabel: 'Venue ID',
|
|
66
|
+
size: 'lg',
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const ProviderId: Story = {
|
|
71
|
+
args: {
|
|
72
|
+
name: 'Entertainment Group',
|
|
73
|
+
id: 'P-456',
|
|
74
|
+
idLabel: 'Provider ID',
|
|
75
|
+
size: 'md',
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const CompanyId: Story = {
|
|
80
|
+
args: {
|
|
81
|
+
name: 'Acme Corporation',
|
|
82
|
+
id: 'C-789',
|
|
83
|
+
idLabel: 'Company ID',
|
|
84
|
+
size: 'md',
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export const NoId: Story = {
|
|
89
|
+
args: {
|
|
90
|
+
name: "Sharky's Soft Play",
|
|
91
|
+
size: 'md',
|
|
92
|
+
},
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const AllSizes: Story = {
|
|
96
|
+
render: () => (
|
|
97
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}>
|
|
98
|
+
<EntityHeader name="Sharky's Soft Play" id="01" idLabel="Venue ID" size="sm" />
|
|
99
|
+
<EntityHeader name="Sharky's Soft Play" id="01" idLabel="Venue ID" size="md" />
|
|
100
|
+
<EntityHeader name="Sharky's Soft Play" id="01" idLabel="Venue ID" size="lg" />
|
|
101
|
+
</div>
|
|
102
|
+
),
|
|
103
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import './EntityHeader.scss'
|
|
3
|
+
|
|
4
|
+
export interface EntityHeaderProps {
|
|
5
|
+
name: string
|
|
6
|
+
id?: string
|
|
7
|
+
idLabel?: string
|
|
8
|
+
imageUrl?: string
|
|
9
|
+
size?: 'sm' | 'md' | 'lg'
|
|
10
|
+
collapsed?: boolean
|
|
11
|
+
className?: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const EntityHeader: React.FC<EntityHeaderProps> = ({
|
|
15
|
+
name,
|
|
16
|
+
id,
|
|
17
|
+
idLabel = 'ID',
|
|
18
|
+
imageUrl,
|
|
19
|
+
size = 'md',
|
|
20
|
+
collapsed = false,
|
|
21
|
+
className = '',
|
|
22
|
+
}) => {
|
|
23
|
+
const sizeMap = {
|
|
24
|
+
sm: 32,
|
|
25
|
+
md: 47,
|
|
26
|
+
lg: 64,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const fontSizeMap = {
|
|
30
|
+
sm: 12,
|
|
31
|
+
md: 18,
|
|
32
|
+
lg: 24,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const dimension = sizeMap[size]
|
|
36
|
+
const initialFontSize = fontSizeMap[size]
|
|
37
|
+
const circleRadius = (dimension / 2) - 1 // Account for stroke width
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<div className={`entity-header entity-header--${size} ${collapsed ? 'entity-header--collapsed' : ''} ${className}`.trim()}>
|
|
41
|
+
<div
|
|
42
|
+
className="entity-header__avatar"
|
|
43
|
+
style={{ width: dimension, height: dimension }}
|
|
44
|
+
>
|
|
45
|
+
{imageUrl ? (
|
|
46
|
+
<img src={imageUrl} alt={name} className="entity-header__image" />
|
|
47
|
+
) : (
|
|
48
|
+
<div className="entity-header__placeholder">
|
|
49
|
+
<svg width={dimension} height={dimension} viewBox={`0 0 ${dimension} ${dimension}`} fill="none">
|
|
50
|
+
<circle
|
|
51
|
+
cx={dimension / 2}
|
|
52
|
+
cy={dimension / 2}
|
|
53
|
+
r={circleRadius}
|
|
54
|
+
fill="var(--fills-main-fill-secondary, #626A90)"
|
|
55
|
+
fillOpacity="0.2"
|
|
56
|
+
stroke="var(--fills-main-fill-secondary, #626A90)"
|
|
57
|
+
strokeWidth="2"
|
|
58
|
+
/>
|
|
59
|
+
</svg>
|
|
60
|
+
<span style={{ fontSize: initialFontSize }}>{name?.[0]?.toUpperCase() || 'S'}</span>
|
|
61
|
+
</div>
|
|
62
|
+
)}
|
|
63
|
+
</div>
|
|
64
|
+
{!collapsed && (
|
|
65
|
+
<div className="entity-header__text">
|
|
66
|
+
<h3 className="entity-header__name">{name}</h3>
|
|
67
|
+
{id && (
|
|
68
|
+
<div className="entity-header__badge">
|
|
69
|
+
<span>{idLabel}: {id}</span>
|
|
70
|
+
</div>
|
|
71
|
+
)}
|
|
72
|
+
</div>
|
|
73
|
+
)}
|
|
74
|
+
</div>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EntityHeader, type EntityHeaderProps } from './EntityHeader'
|