@j2inn/fin5-ui-utils 1.0.8-react-router.6 → 1.0.9

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.
Files changed (65) hide show
  1. package/dist/fin5Top/useFin5AppURLHashParameter.d.ts +0 -3
  2. package/dist/fin5Top/useFin5AppURLHashParameter.js +9 -11
  3. package/dist/fin5Top/useFin5AppURLHashParameter.js.map +1 -1
  4. package/dist/index.d.ts +4 -6
  5. package/dist/index.js +4 -6
  6. package/dist/index.js.map +1 -1
  7. package/dist/react/components/navigation/BasicLayout.d.ts +10 -25
  8. package/dist/react/components/navigation/BasicLayout.js +36 -19
  9. package/dist/react/components/navigation/BasicLayout.js.map +1 -1
  10. package/dist/react/components/navigation/{customRouting/Router.d.ts → Router.d.ts} +1 -1
  11. package/dist/react/components/navigation/{customRouting/Router.js → Router.js} +2 -2
  12. package/dist/react/components/navigation/Router.js.map +1 -0
  13. package/dist_es/fin5Top/fin5FileUpload.d.ts +24 -0
  14. package/dist_es/fin5Top/fin5FileUpload.js +48 -0
  15. package/dist_es/fin5Top/fin5FileUpload.js.map +1 -0
  16. package/dist_es/fin5Top/finEdge2Cloud.d.ts +6 -0
  17. package/dist_es/fin5Top/finEdge2Cloud.js +12 -0
  18. package/dist_es/fin5Top/finEdge2Cloud.js.map +1 -0
  19. package/dist_es/fin5Top/useFin5AppURLHashParameter.d.ts +0 -3
  20. package/dist_es/fin5Top/useFin5AppURLHashParameter.js +6 -5
  21. package/dist_es/fin5Top/useFin5AppURLHashParameter.js.map +1 -1
  22. package/dist_es/index.d.ts +4 -6
  23. package/dist_es/index.js +4 -6
  24. package/dist_es/index.js.map +1 -1
  25. package/dist_es/jobs/jobUtils.d.ts +14 -0
  26. package/dist_es/jobs/jobUtils.js +10 -0
  27. package/dist_es/jobs/jobUtils.js.map +1 -0
  28. package/dist_es/react/components/RecordImage.d.ts +20 -0
  29. package/dist_es/react/components/RecordImage.js +25 -0
  30. package/dist_es/react/components/RecordImage.js.map +1 -0
  31. package/dist_es/react/components/charts/QRCode.d.ts +25 -0
  32. package/dist_es/react/components/charts/QRCode.js +54 -0
  33. package/dist_es/react/components/charts/QRCode.js.map +1 -0
  34. package/dist_es/react/components/charts/pie/PieChart.d.ts +93 -0
  35. package/dist_es/react/components/charts/pie/PieChart.js +176 -0
  36. package/dist_es/react/components/charts/pie/PieChart.js.map +1 -0
  37. package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +20 -0
  38. package/dist_es/react/components/charts/pie/SimplePieChart.js +26 -0
  39. package/dist_es/react/components/charts/pie/SimplePieChart.js.map +1 -0
  40. package/dist_es/react/components/navigation/BasicLayout.d.ts +10 -25
  41. package/dist_es/react/components/navigation/BasicLayout.js +31 -13
  42. package/dist_es/react/components/navigation/BasicLayout.js.map +1 -1
  43. package/dist_es/react/components/navigation/HeaderSiderLayout.d.ts +13 -0
  44. package/dist_es/react/components/navigation/HeaderSiderLayout.js +81 -0
  45. package/dist_es/react/components/navigation/HeaderSiderLayout.js.map +1 -0
  46. package/dist_es/react/components/navigation/MenuTrigger.d.ts +9 -0
  47. package/dist_es/react/components/navigation/MenuTrigger.js +29 -0
  48. package/dist_es/react/components/navigation/MenuTrigger.js.map +1 -0
  49. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -0
  50. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.js +19 -0
  51. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.js.map +1 -0
  52. package/dist_es/react/components/navigation/ReactRouterLayout.d.ts +32 -2
  53. package/dist_es/react/components/navigation/ReactRouterLayout.js +66 -18
  54. package/dist_es/react/components/navigation/ReactRouterLayout.js.map +1 -1
  55. package/dist_es/react/hooks/useFin5BinUrl.d.ts +6 -0
  56. package/dist_es/react/hooks/useFin5BinUrl.js +12 -0
  57. package/dist_es/react/hooks/useFin5BinUrl.js.map +1 -0
  58. package/package.json +2 -4
  59. package/dist/react/components/navigation/ReactRouterLayout.d.ts +0 -16
  60. package/dist/react/components/navigation/ReactRouterLayout.js +0 -80
  61. package/dist/react/components/navigation/ReactRouterLayout.js.map +0 -1
  62. package/dist/react/components/navigation/customRouting/Router.js.map +0 -1
  63. package/dist/react/components/navigation/customRouting/RouterLayout.d.ts +0 -11
  64. package/dist/react/components/navigation/customRouting/RouterLayout.js +0 -62
  65. package/dist/react/components/navigation/customRouting/RouterLayout.js.map +0 -1
@@ -0,0 +1,81 @@
1
+ /*
2
+ * Copyright (c) 2024, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { Container, Layout, Menu } from '@j2inn/ui';
5
+ import classNames from 'classnames';
6
+ import React, { useMemo, useState } from 'react';
7
+ import { createUseStyles } from 'react-jss';
8
+ import { DEFAULT_HEADER_HEIGHT, getMenuPages, } from './BasicLayout';
9
+ import MenuTrigger from './MenuTrigger';
10
+ const useStyles = createUseStyles({
11
+ header: ({ headerHeight }) => ({
12
+ position: 'fixed',
13
+ width: '100%',
14
+ zIndex: 1000,
15
+ padding: 0,
16
+ height: headerHeight,
17
+ lineHeight: `${headerHeight}px`,
18
+ }),
19
+ headerContent: {
20
+ height: '100%',
21
+ },
22
+ sider: ({ headerHeight }) => ({
23
+ overflow: 'auto',
24
+ height: '100vh',
25
+ position: 'fixed',
26
+ left: 0,
27
+ top: 0,
28
+ bottom: 0,
29
+ zIndex: 999,
30
+ paddingTop: headerHeight,
31
+ }),
32
+ content: ({ isMobile, compactSider, siderWidth = 200, headerHeight, }) => ({
33
+ paddingLeft: isMobile ? 0 : compactSider ? 45 : siderWidth,
34
+ paddingTop: headerHeight,
35
+ }),
36
+ });
37
+ // Workaround j2inn/ui exporting problem
38
+ const Header = Layout.Header;
39
+ const Sider = Layout.Sider;
40
+ const Content = Layout.Content;
41
+ /**
42
+ * Layout with header and sider. Sider is collapsed on mobile.
43
+ * Routing management can be plugged in, for examples @see ReactRouterLayout @see RouterLayout
44
+ */
45
+ export function HeaderSiderLayout({ pages = [], defaultPage, selectedPages = [], onSelect, compactSider, layoutProps, header, headerProps, siderProps, contentProps, menuProps, menuBefore, menuAfter, menuTriggerClassName, headerHeight = DEFAULT_HEADER_HEIGHT, children, }) {
46
+ const [isMobile, setIsMobile] = useState(false);
47
+ const [hiddenSider, setHiddenSider] = useState(false);
48
+ const siderWidth = siderProps?.width;
49
+ const classes = useStyles({
50
+ isMobile,
51
+ compactSider: compactSider?.isCompact,
52
+ siderWidth,
53
+ headerHeight,
54
+ });
55
+ const menuPages = useMemo(() => getMenuPages(pages), [pages]);
56
+ return (React.createElement(Layout, { hasSider: true, ...layoutProps },
57
+ React.createElement(Header, { ...headerProps, className: classNames(classes.header, headerProps?.className) },
58
+ React.createElement(Container, { horizontal: true, middle: true, className: classes.headerContent },
59
+ isMobile && (React.createElement(MenuTrigger, { hiddenSider: hiddenSider, headerHeight: headerHeight, className: menuTriggerClassName, onClick: () => {
60
+ setHiddenSider(!hiddenSider);
61
+ } })),
62
+ header)),
63
+ React.createElement(Sider, { ...siderProps, className: classNames(classes.sider, siderProps?.className), breakpoint: 'md', onBreakpoint: (broken) => {
64
+ setIsMobile(broken);
65
+ setHiddenSider(true);
66
+ }, collapsed: (isMobile && hiddenSider) || compactSider?.isCompact, collapsedWidth: isMobile && hiddenSider
67
+ ? 0
68
+ : compactSider
69
+ ? headerHeight
70
+ : 0, trigger: null },
71
+ menuBefore,
72
+ React.createElement(Menu, { ...menuProps, defaultSelectedKeys: defaultPage ? [defaultPage] : undefined, items: menuPages, selectedKeys: selectedPages, onSelect: ({ key }) => {
73
+ if (!hiddenSider) {
74
+ setHiddenSider(true);
75
+ }
76
+ onSelect?.(key);
77
+ } }),
78
+ menuAfter),
79
+ React.createElement(Content, { ...contentProps, className: classNames(classes.content, contentProps?.className) }, children)));
80
+ }
81
+ //# sourceMappingURL=HeaderSiderLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderSiderLayout.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/HeaderSiderLayout.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface MenuTriggerProps {
3
+ hiddenSider: boolean;
4
+ headerHeight?: number;
5
+ className?: string;
6
+ onClick: () => void;
7
+ }
8
+ declare const MenuTrigger: React.FC<MenuTriggerProps>;
9
+ export default MenuTrigger;
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright (c) 2024, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons';
5
+ import classNames from 'classnames';
6
+ import React from 'react';
7
+ import { createUseStyles } from 'react-jss';
8
+ const useStyles = createUseStyles((theme) => ({
9
+ menuTrigger: ({ headerHeight }) => ({
10
+ width: headerHeight,
11
+ height: '100%',
12
+ textAlign: 'center',
13
+ fontSize: 18,
14
+ cursor: 'pointer',
15
+ transition: 'color 0.3s ease-in-out',
16
+ backgroundColor: 'transparent',
17
+ color: theme.linkColor,
18
+ padding: '0 0.5rem',
19
+ '&:hover': {
20
+ color: theme.linkActiveColor,
21
+ },
22
+ }),
23
+ }));
24
+ const MenuTrigger = ({ hiddenSider, headerHeight = 45, onClick, className, }) => {
25
+ const classes = useStyles({ headerHeight });
26
+ return hiddenSider ? (React.createElement(MenuUnfoldOutlined, { className: classNames(classes.menuTrigger, className), onClick: onClick })) : (React.createElement(MenuFoldOutlined, { className: classNames(classes.menuTrigger, className), onClick: onClick }));
27
+ };
28
+ export default MenuTrigger;
29
+ //# sourceMappingURL=MenuTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/MenuTrigger.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAM3C,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;IACvD,WAAW,EAAE,CAAC,EAAE,YAAY,EAAkB,EAAE,EAAE,CAAC,CAAC;QACnD,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,wBAAwB;QACpC,eAAe,EAAE,aAAa;QAC9B,KAAK,EAAE,KAAK,CAAC,SAAS;QACtB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE;YACV,KAAK,EAAE,KAAK,CAAC,eAAe;SAC5B;KACD,CAAC;CACF,CAAC,CAAC,CAAA;AASH,MAAM,WAAW,GAA+B,CAAC,EAChD,WAAW,EACX,YAAY,GAAG,EAAE,EACjB,OAAO,EACP,SAAS,GACT,EAAE,EAAE;IACJ,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,CAAA;IAE3C,OAAO,WAAW,CAAC,CAAC,CAAC,CACpB,oBAAC,kBAAkB,IAClB,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EACrD,OAAO,EAAE,OAAO,GACf,CACF,CAAC,CAAC,CAAC,CACH,oBAAC,gBAAgB,IAChB,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EACrD,OAAO,EAAE,OAAO,GACf,CACF,CAAA;AACF,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Location } from '@remix-run/router';
2
+ import React from 'react';
3
+ import { HeaderSiderLayoutProps } from './HeaderSiderLayout';
4
+ import { ReactRouterMenuPage } from './ReactRouterLayout';
5
+ export interface ReactRouterHeaderSiderLayoutProps extends HeaderSiderLayoutProps<ReactRouterMenuPage> {
6
+ isSelectedRoute?: (page: ReactRouterMenuPage, location: Location) => boolean;
7
+ }
8
+ /**
9
+ * Header/Sider layout that uses React Router.
10
+ */
11
+ export declare const ReactRouterHeaderSiderLayout: React.FC<ReactRouterHeaderSiderLayoutProps>;
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024, J2 Innovations. All Rights Reserved
3
+ */
4
+ import React from 'react';
5
+ import { Outlet, useNavigate } from 'react-router';
6
+ import { HeaderSiderLayout } from './HeaderSiderLayout';
7
+ import { useDefaultOnSelect, useGetPageKeyRouteMap, useSelectedRoutes, } from './ReactRouterLayout';
8
+ /**
9
+ * Header/Sider layout that uses React Router.
10
+ */
11
+ export const ReactRouterHeaderSiderLayout = ({ isSelectedRoute, pages = [], onSelect, ...otherProps }) => {
12
+ const navigate = useNavigate();
13
+ const selectedRoutes = useSelectedRoutes(pages, isSelectedRoute);
14
+ const pageKeyRouteMap = useGetPageKeyRouteMap(pages);
15
+ const defaultOnSelect = useDefaultOnSelect(navigate, pageKeyRouteMap, pages);
16
+ return (React.createElement(HeaderSiderLayout, { ...otherProps, pages: pages, onSelect: onSelect ?? defaultOnSelect, selectedPages: selectedRoutes },
17
+ React.createElement(Outlet, null)));
18
+ };
19
+ //# sourceMappingURL=ReactRouterHeaderSiderLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactRouterHeaderSiderLayout.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/ReactRouterHeaderSiderLayout.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAEN,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAO5B;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAE,eAAe,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;IAChE,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,CAAA;IAE5E,OAAO,CACN,oBAAC,iBAAiB,OACb,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,IAAI,eAAe,EACrC,aAAa,EAAE,cAAc;QAC7B,oBAAC,MAAM,OAAG,CACS,CACpB,CAAA;AACF,CAAC,CAAA"}
@@ -1,15 +1,45 @@
1
1
  import type { Location } from '@remix-run/router';
2
2
  import React from 'react';
3
+ import { NavigateFunction } from 'react-router';
3
4
  import { BasicLayoutProps } from './BasicLayout';
4
5
  import { MenuPage } from './MenuPage';
5
- export interface ReactRouterLayoutProps extends BasicLayoutProps<MenuPage> {
6
- isSelectedRoute?: (page: MenuPage, location: Location) => boolean;
6
+ export declare type ReactRouterMenuPage = MenuPage & {
7
+ route: string;
8
+ };
9
+ export interface ReactRouterLayoutProps extends BasicLayoutProps<ReactRouterMenuPage> {
10
+ isSelectedRoute?: (page: ReactRouterMenuPage, location: Location) => boolean;
7
11
  }
8
12
  /**
9
13
  * This hook can be used with react-router/BasicLayout,
10
14
  * to ensure FIN5 URL is aligned with the internal frame URL.
15
+ * This does not skip the hash update and should be used only with
16
+ * FIN >= 5.1.7.92, otherwise FIN will reload the entire page.
11
17
  */
12
18
  export declare const useLocationUpdate: () => void;
19
+ /**
20
+ * This hook can be used with react-router/BasicLayout,
21
+ * to ensure FIN5 URL is aligned with the internal frame URL.
22
+ * This skips the hash update and should be used only with
23
+ * FIN < 5.1.7.92.
24
+ * @deprecated use only with FIN < 5.1.7.92
25
+ * @see {@link useLocationUpdate} for FIN >= 5.1.7.92
26
+ */
27
+ export declare const useLocationUpdateSkippingHash: () => void;
28
+ export declare const useSelectedRoutes: (pages: ReactRouterMenuPage[], isSelectedRoute?: (page: ReactRouterMenuPage, location: Location) => boolean) => string[];
29
+ /**
30
+ * If we are inside a frame (FIN5), the route is left as is.
31
+ * If we are outside FIN5 frame, the route needs to be prefixed with a segment containing the project name.
32
+ * @param route
33
+ * @returns the correct route for the environment
34
+ */
35
+ export declare const getRoute: (route: string) => string;
36
+ /**
37
+ * Create a map that holds the page key and its related route.
38
+ * @param pages
39
+ * @returns the map page key - route
40
+ */
41
+ export declare const useGetPageKeyRouteMap: (pages: ReactRouterMenuPage[]) => Map<string, string>;
42
+ export declare const useDefaultOnSelect: (navigate: NavigateFunction, pageKeyRouteMap: Map<string, string>, pages: ReactRouterMenuPage[]) => (key: string) => void;
13
43
  /**
14
44
  * Basic layout that uses React Router.
15
45
  */
@@ -2,51 +2,99 @@
2
2
  * Copyright (c) 2023, J2 Innovations. All Rights Reserved
3
3
  */
4
4
  import React, { useCallback, useEffect, useMemo } from 'react';
5
- import { Outlet, useLocation, useNavigate } from 'react-router';
5
+ import { Outlet, useLocation, useNavigate, } from 'react-router';
6
6
  import { IN_IFRAME, fin5SkipHashUpdate, getFin5HashFrameParameters, getTopLocation, } from '../../../fin5Top/useFin5AppURLHashParameter';
7
7
  import { BasicLayout } from './BasicLayout';
8
8
  import { pageTreeToPageList } from './MenuPage';
9
9
  /**
10
10
  * This hook can be used with react-router/BasicLayout,
11
11
  * to ensure FIN5 URL is aligned with the internal frame URL.
12
+ * This does not skip the hash update and should be used only with
13
+ * FIN >= 5.1.7.92, otherwise FIN will reload the entire page.
12
14
  */
13
15
  export const useLocationUpdate = () => {
14
16
  const location = useLocation();
15
17
  useEffect(() => {
16
- console.debug('Location changed', location);
17
- const hash = location.pathname;
18
- const queryParams = location.search;
18
+ if (IN_IFRAME) {
19
+ setHash(location);
20
+ }
21
+ }, [location]);
22
+ };
23
+ /**
24
+ * This hook can be used with react-router/BasicLayout,
25
+ * to ensure FIN5 URL is aligned with the internal frame URL.
26
+ * This skips the hash update and should be used only with
27
+ * FIN < 5.1.7.92.
28
+ * @deprecated use only with FIN < 5.1.7.92
29
+ * @see {@link useLocationUpdate} for FIN >= 5.1.7.92
30
+ */
31
+ export const useLocationUpdateSkippingHash = () => {
32
+ const location = useLocation();
33
+ useEffect(() => {
19
34
  if (IN_IFRAME) {
20
35
  fin5SkipHashUpdate()?.then(() => {
21
- const frameParameters = getFin5HashFrameParameters();
22
- frameParameters.set('url', frameParameters.get('url')?.split('#')[0] +
23
- '#' +
24
- hash +
25
- queryParams);
26
- getTopLocation().hash = `#${getTopLocation().hash.slice(1).split('?')[0]}?${frameParameters.toString()}`;
36
+ setHash(location);
27
37
  });
28
38
  }
29
39
  }, [location]);
30
40
  };
31
- const useSelectedRoutes = (pages, isSelectedRoute = (page, location) => location.pathname.includes(`/${page.key}`)) => {
41
+ const setHash = (location) => {
42
+ const hash = location.pathname;
43
+ const queryParams = location.search;
44
+ const frameParameters = getFin5HashFrameParameters();
45
+ frameParameters.set('url', frameParameters.get('url')?.split('#')[0] + '#' + hash + queryParams);
46
+ getTopLocation().hash = `#${getTopLocation().hash.slice(1).split('?')[0]}?${frameParameters.toString()}`;
47
+ };
48
+ export const useSelectedRoutes = (pages, isSelectedRoute = (page, location) => location.pathname.includes(page.route)) => {
32
49
  const location = useLocation();
50
+ const flatPages = useMemo(() => pageTreeToPageList(pages), [pages]);
33
51
  return useMemo(() => {
34
- const flatPages = pageTreeToPageList(pages);
35
52
  return flatPages
36
53
  .filter((page) => isSelectedRoute(page, location))
37
54
  .map((page) => page.key);
38
- }, [location, pages]);
55
+ }, [location, flatPages, isSelectedRoute]);
56
+ };
57
+ /**
58
+ * If we are inside a frame (FIN5), the route is left as is.
59
+ * If we are outside FIN5 frame, the route needs to be prefixed with a segment containing the project name.
60
+ * @param route
61
+ * @returns the correct route for the environment
62
+ */
63
+ export const getRoute = (route) => {
64
+ const prefixedRoute = route.startsWith('/') ? route : `/${route}`;
65
+ return !IN_IFRAME ? `/proj/:projectName${prefixedRoute}` : prefixedRoute;
39
66
  };
67
+ /**
68
+ * Create a map that holds the page key and its related route.
69
+ * @param pages
70
+ * @returns the map page key - route
71
+ */
72
+ export const useGetPageKeyRouteMap = (pages) => useMemo(() => {
73
+ const flatPages = pageTreeToPageList(pages);
74
+ const result = new Map();
75
+ flatPages.forEach((page) => {
76
+ result.set(page.key, page.route);
77
+ });
78
+ return result;
79
+ }, [pages]);
80
+ export const useDefaultOnSelect = (navigate, pageKeyRouteMap, pages) => useCallback((key) => {
81
+ const route = pageKeyRouteMap.get(key);
82
+ if (route) {
83
+ navigate(route);
84
+ }
85
+ else {
86
+ console.warn('Could not find route for page key', key, 'pages', pages);
87
+ }
88
+ }, [navigate, pageKeyRouteMap]);
40
89
  /**
41
90
  * Basic layout that uses React Router.
42
91
  */
43
- export const ReactRouterLayout = ({ isSelectedRoute, pages = [], ...otherProps }) => {
92
+ export const ReactRouterLayout = ({ isSelectedRoute, pages = [], onSelect, ...otherProps }) => {
44
93
  const navigate = useNavigate();
45
94
  const selectedRoutes = useSelectedRoutes(pages, isSelectedRoute);
46
- const onSelect = useCallback((key) => {
47
- navigate(key);
48
- }, [navigate]);
49
- return (React.createElement(BasicLayout, { ...otherProps, pages: pages, onSelect: onSelect, selectedPages: selectedRoutes },
95
+ const pageKeyRouteMap = useGetPageKeyRouteMap(pages);
96
+ const defaultOnSelect = useDefaultOnSelect(navigate, pageKeyRouteMap, pages);
97
+ return (React.createElement(BasicLayout, { ...otherProps, pages: pages, onSelect: onSelect ?? defaultOnSelect, selectedPages: selectedRoutes },
50
98
  React.createElement(Outlet, null)));
51
99
  };
52
100
  //# sourceMappingURL=ReactRouterLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactRouterLayout.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/ReactRouterLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReactRouterLayout.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/ReactRouterLayout.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EAEN,MAAM,EACN,WAAW,EACX,WAAW,GACX,MAAM,cAAc,CAAA;AACrB,OAAO,EACN,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,cAAc,GACd,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,WAAW,EAAoB,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAY,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAWzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,SAAS,EAAE;YACd,OAAO,CAAC,QAAQ,CAAC,CAAA;SACjB;IACF,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACf,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE;IACjD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,SAAS,EAAE;YACd,kBAAkB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBAC/B,OAAO,CAAC,QAAQ,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;SACF;IACF,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACf,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAE,EAAE;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAA;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAA;IAEnC,MAAM,eAAe,GAAG,0BAA0B,EAAE,CAAA;IACpD,eAAe,CAAC,GAAG,CAClB,KAAK,EACL,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,WAAW,CACpE,CAAA;IAED,cAAc,EAAE,CAAC,IAAI,GAAG,IACvB,cAAc,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5C,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,KAA4B,EAC5B,kBAAkB,CAAC,IAAyB,EAAE,QAAkB,EAAE,EAAE,CACnE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EACtC,EAAE;IACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEnE,OAAO,OAAO,CAAC,GAAG,EAAE;QACnB,OAAO,SAAS;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAA;IACjE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAA;AACzE,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAA4B,EAAE,EAAE,CACrE,OAAO,CAAC,GAAG,EAAE;IACZ,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACd,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,QAA0B,EAC1B,eAAoC,EACpC,KAA4B,EAC3B,EAAE,CACH,WAAW,CACV,CAAC,GAAW,EAAE,EAAE;IACf,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,KAAK,EAAE;QACV,QAAQ,CAAC,KAAK,CAAC,CAAA;KACf;SAAM;QACN,OAAO,CAAC,IAAI,CACX,mCAAmC,EACnC,GAAG,EACH,OAAO,EACP,KAAK,CACL,CAAA;KACD;AACF,CAAC,EACD,CAAC,QAAQ,EAAE,eAAe,CAAC,CAC3B,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EACnE,eAAe,EACf,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,GAAG,UAAU,EACb,EAAE,EAAE;IACJ,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;IAChE,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,CAAA;IAE5E,OAAO,CACN,oBAAC,WAAW,OACP,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,IAAI,eAAe,EACrC,aAAa,EAAE,cAAc;QAC7B,oBAAC,MAAM,OAAG,CACG,CACd,CAAA;AACF,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { HRef } from 'haystack-core';
2
+ /**
3
+ * Retrieves the url of a Fin 5 bin based on the file record id, or undefined if the url couldn't be retrieved.
4
+ * Uses haystack-nclient to retrieve the projectName from context.
5
+ */
6
+ export declare const useFin5BinUrl: (fileId?: HRef) => string | undefined;
@@ -0,0 +1,12 @@
1
+ import { useClient } from 'haystack-react';
2
+ import { useMemo } from 'react';
3
+ import { getFin5BinUrl } from '../../fin5Top/getFin5BinUrl';
4
+ /**
5
+ * Retrieves the url of a Fin 5 bin based on the file record id, or undefined if the url couldn't be retrieved.
6
+ * Uses haystack-nclient to retrieve the projectName from context.
7
+ */
8
+ export const useFin5BinUrl = (fileId) => {
9
+ const projectName = useClient().project;
10
+ return useMemo(() => (fileId ? getFin5BinUrl(fileId, projectName) : undefined), [fileId, projectName]);
11
+ };
12
+ //# sourceMappingURL=useFin5BinUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFin5BinUrl.js","sourceRoot":"","sources":["../../../src/react/hooks/useFin5BinUrl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAa,EAAsB,EAAE;IAClE,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC,OAAO,CAAA;IAEvC,OAAO,OAAO,CACb,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC/D,CAAC,MAAM,EAAE,WAAW,CAAC,CACrB,CAAA;AACF,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@j2inn/fin5-ui-utils",
3
- "version": "1.0.8-react-router.6",
3
+ "version": "1.0.9",
4
4
  "description": "A set of useful client-side utilities useful for creating UI applications on top of FIN 5",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,9 +41,7 @@
41
41
  "haystack-units": "^1.0.20",
42
42
  "react": "^18.2.0",
43
43
  "react-dom": "^18.2.0",
44
- "react-jss": "^10.9.2",
45
- "react-router": "^6.10.0",
46
- "react-router-dom": "^6.10.0"
44
+ "react-jss": "^10.9.2"
47
45
  },
48
46
  "devDependencies": {
49
47
  "@babel/cli": "^7.18.10",
@@ -1,16 +0,0 @@
1
- import type { Location } from '@remix-run/router';
2
- import React from 'react';
3
- import { BasicLayoutProps } from './BasicLayout';
4
- import { MenuPage } from './MenuPage';
5
- export interface ReactRouterLayoutProps extends BasicLayoutProps<MenuPage> {
6
- isSelectedRoute?: (page: MenuPage, location: Location) => boolean;
7
- }
8
- /**
9
- * This hook can be used with react-router/BasicLayout,
10
- * to ensure FIN5 URL is aligned with the internal frame URL.
11
- */
12
- export declare const useLocationUpdate: () => void;
13
- /**
14
- * Basic layout that uses React Router.
15
- */
16
- export declare const ReactRouterLayout: React.FC<ReactRouterLayoutProps>;
@@ -1,80 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2023, J2 Innovations. All Rights Reserved
4
- */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.ReactRouterLayout = exports.useLocationUpdate = void 0;
30
- const react_1 = __importStar(require("react"));
31
- const react_router_1 = require("react-router");
32
- const useFin5AppURLHashParameter_1 = require("../../../fin5Top/useFin5AppURLHashParameter");
33
- const BasicLayout_1 = require("./BasicLayout");
34
- const MenuPage_1 = require("./MenuPage");
35
- /**
36
- * This hook can be used with react-router/BasicLayout,
37
- * to ensure FIN5 URL is aligned with the internal frame URL.
38
- */
39
- const useLocationUpdate = () => {
40
- const location = (0, react_router_1.useLocation)();
41
- (0, react_1.useEffect)(() => {
42
- console.debug('Location changed', location);
43
- const hash = location.pathname;
44
- const queryParams = location.search;
45
- if (useFin5AppURLHashParameter_1.IN_IFRAME) {
46
- (0, useFin5AppURLHashParameter_1.fin5SkipHashUpdate)()?.then(() => {
47
- const frameParameters = (0, useFin5AppURLHashParameter_1.getFin5HashFrameParameters)();
48
- frameParameters.set('url', frameParameters.get('url')?.split('#')[0] +
49
- '#' +
50
- hash +
51
- queryParams);
52
- (0, useFin5AppURLHashParameter_1.getTopLocation)().hash = `#${(0, useFin5AppURLHashParameter_1.getTopLocation)().hash.slice(1).split('?')[0]}?${frameParameters.toString()}`;
53
- });
54
- }
55
- }, [location]);
56
- };
57
- exports.useLocationUpdate = useLocationUpdate;
58
- const useSelectedRoutes = (pages, isSelectedRoute = (page, location) => location.pathname.includes(`/${page.key}`)) => {
59
- const location = (0, react_router_1.useLocation)();
60
- return (0, react_1.useMemo)(() => {
61
- const flatPages = (0, MenuPage_1.pageTreeToPageList)(pages);
62
- return flatPages
63
- .filter((page) => isSelectedRoute(page, location))
64
- .map((page) => page.key);
65
- }, [location, pages]);
66
- };
67
- /**
68
- * Basic layout that uses React Router.
69
- */
70
- const ReactRouterLayout = ({ isSelectedRoute, pages = [], ...otherProps }) => {
71
- const navigate = (0, react_router_1.useNavigate)();
72
- const selectedRoutes = useSelectedRoutes(pages, isSelectedRoute);
73
- const onSelect = (0, react_1.useCallback)((key) => {
74
- navigate(key);
75
- }, [navigate]);
76
- return (react_1.default.createElement(BasicLayout_1.BasicLayout, { ...otherProps, pages: pages, onSelect: onSelect, selectedPages: selectedRoutes },
77
- react_1.default.createElement(react_router_1.Outlet, null)));
78
- };
79
- exports.ReactRouterLayout = ReactRouterLayout;
80
- //# sourceMappingURL=ReactRouterLayout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactRouterLayout.js","sourceRoot":"","sources":["../../../../src/react/components/navigation/ReactRouterLayout.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAGH,+CAA8D;AAC9D,+CAA+D;AAC/D,4FAKoD;AACpD,+CAA6D;AAC7D,yCAAyD;AAMzD;;;GAGG;AACI,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,QAAQ,GAAG,IAAA,0BAAW,GAAE,CAAA;IAC9B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAA;QAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAA;QAEnC,IAAI,sCAAS,EAAE;YACd,IAAA,+CAAkB,GAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBAC/B,MAAM,eAAe,GAAG,IAAA,uDAA0B,GAAE,CAAA;gBAEpD,eAAe,CAAC,GAAG,CAClB,KAAK,EACL,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxC,GAAG;oBACH,IAAI;oBACJ,WAAW,CACZ,CAAA;gBAED,IAAA,2CAAc,GAAE,CAAC,IAAI,GAAG,IACvB,IAAA,2CAAc,GAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5C,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAA;YACjC,CAAC,CAAC,CAAA;SACF;IACF,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACf,CAAC,CAAA;AAzBY,QAAA,iBAAiB,qBAyB7B;AAED,MAAM,iBAAiB,GAAG,CACzB,KAAiB,EACjB,kBAAkB,CAAC,IAAc,EAAE,QAAkB,EAAE,EAAE,CACxD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAC1C,EAAE;IACH,MAAM,QAAQ,GAAG,IAAA,0BAAW,GAAE,CAAA;IAE9B,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QACnB,MAAM,SAAS,GAAG,IAAA,6BAAkB,EAAC,KAAK,CAAC,CAAA;QAC3C,OAAO,SAAS;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;AACtB,CAAC,CAAA;AAED;;GAEG;AACI,MAAM,iBAAiB,GAAqC,CAAC,EACnE,eAAe,EACf,KAAK,GAAG,EAAE,EACV,GAAG,UAAU,EACb,EAAE,EAAE;IACJ,MAAM,QAAQ,GAAG,IAAA,0BAAW,GAAE,CAAA;IAC9B,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC3B,CAAC,GAAW,EAAE,EAAE;QACf,QAAQ,CAAC,GAAG,CAAC,CAAA;IACd,CAAC,EACD,CAAC,QAAQ,CAAC,CACV,CAAA;IAED,OAAO,CACN,8BAAC,yBAAW,OACP,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,cAAc;QAC7B,8BAAC,qBAAM,OAAG,CACG,CACd,CAAA;AACF,CAAC,CAAA;AAvBY,QAAA,iBAAiB,qBAuB7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../../../src/react/components/navigation/customRouting/Router.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAMc;AACd,yDAAqD;AACrD,0CAAsD;AAStD;;GAEG;AACH,SAAgB,MAAM,CAAqB,EAC1C,KAAK,GAAG,EAAE,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,GACkB;IACnC,MAAM,IAAI,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,IAAA,yBAAc,EAAC,KAAK,EAAE,WAAW,CAAC,EACxC,CAAC,KAAK,EAAE,WAAW,CAAC,CACpB,CAAA;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,YAAY,EAAE,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CACxB,8BAAC,gBAAQ,IAAC,QAAQ,EAAE,8BAAC,+BAAc,OAAG,IACpC,eAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CACvC,CACX,CAAC,CAAC,CAAC,CACH,iBAAiB,IAAI;QAAM,WAAW;0BAAsB,CAC5D,CAAA;AACF,CAAC;AAtBD,wBAsBC"}
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import { BasicLayoutProps } from '../BasicLayout';
3
- import { MenuPage } from '../MenuPage';
4
- export interface RouterLayoutProps extends BasicLayoutProps<MenuPage> {
5
- page?: string;
6
- onPageChange?: (page: string) => void;
7
- }
8
- /**
9
- * Basic layout that uses a custom router.
10
- */
11
- export declare const RouterLayout: React.FC<RouterLayoutProps>;
@@ -1,62 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
- */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.RouterLayout = void 0;
30
- const ui_1 = require("@j2inn/ui");
31
- const react_1 = __importStar(require("react"));
32
- const ErrorDisplayer_1 = require("../../ErrorDisplayer");
33
- const BasicLayout_1 = require("../BasicLayout");
34
- const MenuPage_1 = require("../MenuPage");
35
- const Router_1 = require("./Router");
36
- /**
37
- * Basic layout that uses a custom router.
38
- */
39
- const RouterLayout = ({ pages = [], defaultPage = pages?.[0].key ?? '', onPageChange, page, ...otherProps }) => {
40
- const [currentPage, setCurrentPage] = (0, react_1.useState)(page ?? defaultPage);
41
- (0, react_1.useEffect)(() => {
42
- if (page) {
43
- setCurrentPage(page);
44
- }
45
- }, [page]);
46
- // Fire onChange
47
- (0, react_1.useEffect)(() => {
48
- onPageChange?.(currentPage);
49
- }, [currentPage]);
50
- const onSelect = (0, react_1.useCallback)((key) => {
51
- const page = (0, MenuPage_1.findPageByName)(pages, key);
52
- if (page?.component) {
53
- setCurrentPage(key);
54
- }
55
- }, [pages]);
56
- return (react_1.default.createElement(BasicLayout_1.BasicLayout, { ...otherProps, pages: pages, defaultPage: defaultPage, onSelect: onSelect, selectedPages: [currentPage] },
57
- react_1.default.createElement(Router_1.Router, { pages: pages, currentPage: currentPage, fallbackComponent: react_1.default.createElement(ErrorDisplayer_1.ErrorDisplayer, { error: new Error('Page Not Found'), extra: [
58
- react_1.default.createElement(ui_1.Button, { type: 'primary', key: 'refresh', onClick: () => setCurrentPage(defaultPage) }, "Go Home"),
59
- ] }) })));
60
- };
61
- exports.RouterLayout = RouterLayout;
62
- //# sourceMappingURL=RouterLayout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouterLayout.js","sourceRoot":"","sources":["../../../../../src/react/components/navigation/customRouting/RouterLayout.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,kCAAkC;AAClC,+CAA+D;AAC/D,yDAAqD;AACrD,gDAA8D;AAC9D,0CAAsD;AACtD,qCAAiC;AAOjC;;GAEG;AACI,MAAM,YAAY,GAAgC,CAAC,EACzD,KAAK,GAAG,EAAE,EACV,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAClC,YAAY,EACZ,IAAI,EACJ,GAAG,UAAU,EACb,EAAE,EAAE;IACJ,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,IAAI,WAAW,CAAC,CAAA;IAEnE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,IAAI,IAAI,EAAE;YACT,cAAc,CAAC,IAAI,CAAC,CAAA;SACpB;IACF,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,gBAAgB;IAChB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,YAAY,EAAE,CAAC,WAAW,CAAC,CAAA;IAC5B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC3B,CAAC,GAAW,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,IAAA,yBAAc,EAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,IAAI,EAAE,SAAS,EAAE;YACpB,cAAc,CAAC,GAAG,CAAC,CAAA;SACnB;IACF,CAAC,EACD,CAAC,KAAK,CAAC,CACP,CAAA;IAED,OAAO,CACN,8BAAC,yBAAW,OACP,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,WAAW,CAAC;QAC5B,8BAAC,eAAM,IACN,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAChB,8BAAC,+BAAc,IACd,KAAK,EAAE,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAClC,KAAK,EAAE;oBACN,8BAAC,WAAM,IACN,IAAI,EAAC,SAAS,EACd,GAAG,EAAC,SAAS,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,cAElC;iBACT,GACA,GAEF,CACW,CACd,CAAA;AACF,CAAC,CAAA;AAxDY,QAAA,YAAY,gBAwDxB"}