@dgui/react-shared 0.3.1 → 0.4.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.
@@ -1,4 +1,4 @@
1
- import { type FunctionComponent, type PropsWithChildren } from 'react';
1
+ import { type DrawerIndexProviderProps } from '../Types';
2
+ import { type FunctionComponent } from 'react';
2
3
  declare const DrawerIndexProvider: FunctionComponent<DrawerIndexProviderProps>;
3
4
  export default DrawerIndexProvider;
4
- export type DrawerIndexProviderProps = PropsWithChildren<{}>;
@@ -26,18 +26,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const jsx_runtime_1 = require("react/jsx-runtime");
27
27
  const DrawerIndexContext_1 = __importStar(require("../Contexts/DrawerIndexContext"));
28
28
  const react_1 = require("react");
29
- const DrawerIndexProvider = ({ children }) => {
29
+ const DrawerIndexProvider = ({ children, onSelectDrawer, drawerIndex: givenDrawerIndex }) => {
30
30
  const [drawerIndex, setDrawerIndex] = (0, react_1.useState)(DrawerIndexContext_1.defaults.drawerIndex);
31
+ (0, react_1.useEffect)(() => {
32
+ const safeIndex = Number.isSafeInteger(givenDrawerIndex) &&
33
+ Number(givenDrawerIndex);
34
+ if (safeIndex) {
35
+ setDrawerIndex(safeIndex);
36
+ }
37
+ }, [
38
+ givenDrawerIndex
39
+ ]);
40
+ const selectDrawer = (0, react_1.useCallback)((selectedDrawerIndex) => {
41
+ if (onSelectDrawer) {
42
+ onSelectDrawer(selectedDrawerIndex);
43
+ }
44
+ setDrawerIndex(selectedDrawerIndex);
45
+ }, [
46
+ onSelectDrawer
47
+ ]);
31
48
  const value = (0, react_1.useMemo)(() => {
32
49
  return {
33
50
  drawerIndex,
34
- selectDrawer: setDrawerIndex
51
+ selectDrawer
35
52
  };
36
53
  }, [
37
- setDrawerIndex,
38
- drawerIndex
54
+ drawerIndex,
55
+ selectDrawer
39
56
  ]);
40
- return ((0, jsx_runtime_1.jsx)(DrawerIndexContext_1.default.Provider, Object.assign({ value: value }, { children: children })));
57
+ return ((0, jsx_runtime_1.jsx)(DrawerIndexContext_1.default.Provider, { value: value, children: children }));
41
58
  };
42
59
  DrawerIndexProvider.displayName = 'DrawerIndexProvider';
43
60
  exports.default = DrawerIndexProvider;
@@ -41,14 +41,28 @@ const DrawerProvider = ({ children }) => {
41
41
  const [drawers, setDrawers] = (0, react_1.useState)(DrawerContext_1.defaults.drawers);
42
42
  const [drawerOrder, setDrawerOrder] = (0, react_1.useState)(DrawerContext_1.defaults.drawerOrder);
43
43
  const addDrawer = (0, react_1.useCallback)((drawer, position) => {
44
- const { drawerId, tabId } = drawer;
44
+ const { drawerId, tabId } = drawer, restOfDrawer = __rest(drawer, ["drawerId", "tabId"]);
45
45
  setDrawers((previousDrawers) => {
46
- if (tabId &&
47
- previousDrawers[drawerId]) {
48
- return previousDrawers;
46
+ const existingDrawer = previousDrawers[drawerId];
47
+ if (existingDrawer) {
48
+ if (tabId) {
49
+ const newDrawers = Object.assign(Object.assign({}, previousDrawers), { [drawerId]: Object.assign(Object.assign({}, existingDrawer), { tabs: [
50
+ ...existingDrawer.tabs || [],
51
+ tabId
52
+ ] }) });
53
+ return newDrawers;
54
+ }
55
+ else {
56
+ return previousDrawers;
57
+ }
58
+ }
59
+ else if (tabId) {
60
+ return Object.assign(Object.assign({}, previousDrawers), { [drawerId]: Object.assign(Object.assign({ drawerId }, restOfDrawer), { tabs: [
61
+ tabId
62
+ ] }) });
49
63
  }
50
64
  else {
51
- return Object.assign(Object.assign({}, previousDrawers), { [drawerId]: drawer });
65
+ return Object.assign(Object.assign({}, previousDrawers), { [drawerId]: Object.assign({}, drawer) });
52
66
  }
53
67
  });
54
68
  setDrawerOrder((previousDrawerOrder) => {
@@ -70,14 +84,28 @@ const DrawerProvider = ({ children }) => {
70
84
  });
71
85
  }, []);
72
86
  const removeDrawer = (0, react_1.useCallback)((drawerId) => {
87
+ let emptyDrawer = true;
73
88
  setDrawers((previousDrawers) => {
74
- const _a = previousDrawers, _b = drawerId, omit = _a[_b], filteredDrawers = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
75
- return filteredDrawers;
89
+ const tabs = previousDrawers[drawerId].tabs;
90
+ if (tabs &&
91
+ tabs.length !== 0) {
92
+ emptyDrawer = false;
93
+ return previousDrawers;
94
+ }
95
+ else {
96
+ const _a = previousDrawers, _b = drawerId, omit = _a[_b], filteredDrawers = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
97
+ return filteredDrawers;
98
+ }
76
99
  });
77
100
  setDrawerOrder((previousDrawerOrder) => {
78
- return previousDrawerOrder.filter((id) => {
79
- return id !== drawerId;
80
- });
101
+ if (emptyDrawer) {
102
+ return previousDrawerOrder.filter((id) => {
103
+ return id !== drawerId;
104
+ });
105
+ }
106
+ else {
107
+ return previousDrawerOrder;
108
+ }
81
109
  });
82
110
  }, []);
83
111
  const value = (0, react_1.useMemo)(() => {
@@ -93,7 +121,7 @@ const DrawerProvider = ({ children }) => {
93
121
  drawers,
94
122
  removeDrawer
95
123
  ]);
96
- return ((0, jsx_runtime_1.jsx)(DrawerContext_1.default.Provider, Object.assign({ value: value }, { children: children })));
124
+ return ((0, jsx_runtime_1.jsx)(DrawerContext_1.default.Provider, { value: value, children: children }));
97
125
  };
98
126
  DrawerProvider.displayName = 'DrawerProvider';
99
127
  exports.default = DrawerProvider;
@@ -1,4 +1,4 @@
1
- import { type FunctionComponent, type PropsWithChildren } from 'react';
1
+ import { type DrawerToggleProviderProps } from '../Types';
2
+ import { type FunctionComponent } from 'react';
2
3
  declare const DrawerToggleProvider: FunctionComponent<DrawerToggleProviderProps>;
3
4
  export default DrawerToggleProvider;
4
- export type DrawerToggleProviderProps = PropsWithChildren<{}>;
@@ -1,50 +1,47 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
4
  };
25
5
  Object.defineProperty(exports, "__esModule", { value: true });
26
6
  const jsx_runtime_1 = require("react/jsx-runtime");
27
- const DrawerToggleContext_1 = __importStar(require("../Contexts/DrawerToggleContext"));
7
+ const DrawerToggleContext_1 = __importDefault(require("../Contexts/DrawerToggleContext"));
28
8
  const react_1 = require("react");
29
- const DrawerToggleProvider = ({ children }) => {
30
- const [drawerOpen, setDrawerOpen] = (0, react_1.useState)(DrawerToggleContext_1.defaults.drawerOpen);
31
- const value = (0, react_1.useMemo)(() => {
32
- return {
33
- drawerOpen,
34
- toggleDrawer: (open) => {
35
- if (open === undefined) {
36
- setDrawerOpen(!drawerOpen);
37
- }
38
- else {
39
- setDrawerOpen(open);
9
+ const DrawerToggleProvider = ({ children, drawerOpen: givenDrawerOpen, onDrawerToggle }) => {
10
+ const [drawerOpen, setDrawerOpen] = (0, react_1.useState)(givenDrawerOpen);
11
+ (0, react_1.useEffect)(() => {
12
+ setDrawerOpen(givenDrawerOpen);
13
+ }, [
14
+ givenDrawerOpen
15
+ ]);
16
+ const toggleDrawer = (0, react_1.useCallback)((open) => {
17
+ if (open === undefined) {
18
+ setDrawerOpen((currentDrawerOpen) => {
19
+ const toggleOpen = !currentDrawerOpen;
20
+ if (onDrawerToggle) {
21
+ onDrawerToggle(toggleOpen);
40
22
  }
23
+ return toggleOpen;
24
+ });
25
+ }
26
+ else {
27
+ if (onDrawerToggle) {
28
+ onDrawerToggle(open);
41
29
  }
30
+ setDrawerOpen(open);
31
+ }
32
+ }, [
33
+ onDrawerToggle
34
+ ]);
35
+ const value = (0, react_1.useMemo)(() => {
36
+ return {
37
+ drawerOpen: Boolean(drawerOpen),
38
+ toggleDrawer
42
39
  };
43
40
  }, [
44
41
  drawerOpen,
45
- setDrawerOpen
42
+ toggleDrawer
46
43
  ]);
47
- return ((0, jsx_runtime_1.jsx)(DrawerToggleContext_1.default.Provider, Object.assign({ value: value }, { children: children })));
44
+ return ((0, jsx_runtime_1.jsx)(DrawerToggleContext_1.default.Provider, { value: value, children: children }));
48
45
  };
49
46
  DrawerToggleProvider.displayName = 'DrawerToggleProvider';
50
47
  exports.default = DrawerToggleProvider;
@@ -1,4 +1,4 @@
1
- import { type FunctionComponent, type PropsWithChildren } from 'react';
1
+ import { type TabIndexProviderProps } from '../Types';
2
+ import { type FunctionComponent } from 'react';
2
3
  declare const TabIndexProvider: FunctionComponent<TabIndexProviderProps>;
3
4
  export default TabIndexProvider;
4
- export type TabIndexProviderProps = PropsWithChildren<{}>;
@@ -26,18 +26,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const jsx_runtime_1 = require("react/jsx-runtime");
27
27
  const TabIndexContext_1 = __importStar(require("../Contexts/TabIndexContext"));
28
28
  const react_1 = require("react");
29
- const TabIndexProvider = ({ children }) => {
29
+ const TabIndexProvider = ({ children, onSelectTab, tabIndex: givenTabIndex }) => {
30
30
  const [tabIndex, setTabIndex] = (0, react_1.useState)(TabIndexContext_1.defaults.tabIndex);
31
+ (0, react_1.useEffect)(() => {
32
+ const safeIndex = Number.isSafeInteger(givenTabIndex) &&
33
+ Number(givenTabIndex);
34
+ if (safeIndex) {
35
+ setTabIndex(safeIndex);
36
+ }
37
+ }, [
38
+ givenTabIndex
39
+ ]);
40
+ const selectTab = (0, react_1.useCallback)((selectedTabIndex) => {
41
+ if (onSelectTab) {
42
+ onSelectTab(selectedTabIndex);
43
+ }
44
+ setTabIndex(selectedTabIndex);
45
+ }, [
46
+ onSelectTab
47
+ ]);
31
48
  const value = (0, react_1.useMemo)(() => {
32
49
  return {
33
- selectTab: setTabIndex,
50
+ selectTab,
34
51
  tabIndex
35
52
  };
36
53
  }, [
37
- setTabIndex,
54
+ selectTab,
38
55
  tabIndex
39
56
  ]);
40
- return ((0, jsx_runtime_1.jsx)(TabIndexContext_1.default.Provider, Object.assign({ value: value }, { children: children })));
57
+ return ((0, jsx_runtime_1.jsx)(TabIndexContext_1.default.Provider, { value: value, children: children }));
41
58
  };
42
59
  exports.default = TabIndexProvider;
43
60
  TabIndexProvider.displayName = 'TabIndexProvider';
@@ -123,7 +123,7 @@ const TabProvider = ({ children }) => {
123
123
  removeTab,
124
124
  updateTab
125
125
  ]);
126
- return ((0, jsx_runtime_1.jsx)(TabContext_1.default.Provider, Object.assign({ value: value }, { children: children })));
126
+ return ((0, jsx_runtime_1.jsx)(TabContext_1.default.Provider, { value: value, children: children }));
127
127
  };
128
128
  TabProvider.displayName = 'TabProvider';
129
129
  exports.default = TabProvider;
@@ -1,4 +1,4 @@
1
- import { type FunctionComponent, type PropsWithChildren } from 'react';
1
+ import { type ProvidersProps } from '../Types';
2
+ import { type FunctionComponent } from 'react';
2
3
  declare const Providers: FunctionComponent<ProvidersProps>;
3
4
  export default Providers;
4
- export type ProvidersProps = PropsWithChildren<{}>;
@@ -9,8 +9,8 @@ const DrawerProvider_1 = __importDefault(require("./DrawerProvider"));
9
9
  const DrawerToggleProvider_1 = __importDefault(require("./DrawerToggleProvider"));
10
10
  const TabIndexProvider_1 = __importDefault(require("./TabIndexProvider"));
11
11
  const TabProvider_1 = __importDefault(require("./TabProvider"));
12
- const Providers = ({ children }) => {
13
- return ((0, jsx_runtime_1.jsx)(DrawerToggleProvider_1.default, { children: (0, jsx_runtime_1.jsx)(DrawerProvider_1.default, { children: (0, jsx_runtime_1.jsx)(TabProvider_1.default, { children: (0, jsx_runtime_1.jsx)(DrawerIndexProvider_1.default, { children: (0, jsx_runtime_1.jsx)(TabIndexProvider_1.default, { children: children }) }) }) }) }));
12
+ const Providers = ({ children, drawerIndex, drawerOpen, onDrawerToggle, onSelectDrawer, onSelectTab, tabIndex }) => {
13
+ return ((0, jsx_runtime_1.jsx)(DrawerToggleProvider_1.default, { drawerOpen: drawerOpen, onDrawerToggle: onDrawerToggle, children: (0, jsx_runtime_1.jsx)(DrawerProvider_1.default, { children: (0, jsx_runtime_1.jsx)(TabProvider_1.default, { children: (0, jsx_runtime_1.jsx)(DrawerIndexProvider_1.default, { drawerIndex: drawerIndex, onSelectDrawer: onSelectDrawer, children: (0, jsx_runtime_1.jsx)(TabIndexProvider_1.default, { onSelectTab: onSelectTab, tabIndex: tabIndex, children: children }) }) }) }) }));
14
14
  };
15
15
  Providers.displayName = 'SharedProviders';
16
16
  exports.default = Providers;
package/dist/Types.d.ts CHANGED
@@ -1,14 +1,8 @@
1
- import { type Dispatch, type PropsWithChildren, type SetStateAction } from 'react';
2
- export type DigestProps = {
3
- drawerIndex?: number;
4
- onSelectDrawer?: (tabIndex: number) => void;
5
- onSelectTab?: (tabIndex: number) => void;
6
- tabIndex?: number;
7
- };
1
+ import { type PropsWithChildren } from 'react';
8
2
  export type DrawerType = {
9
3
  drawerId: string;
10
4
  swipe?: boolean;
11
- tabId?: string;
5
+ tabs?: string[];
12
6
  title?: string;
13
7
  };
14
8
  export type DrawerContextProps = {
@@ -21,11 +15,11 @@ export type DrawerContextProps = {
21
15
  };
22
16
  export type DrawerIndexContextProps = {
23
17
  drawerIndex: number;
24
- selectDrawer: Dispatch<SetStateAction<number>>;
18
+ selectDrawer: (drawerIndex: number) => void;
25
19
  };
26
20
  export type DrawerToggleContextProps = {
27
21
  drawerOpen: boolean;
28
- toggleDrawer: (open?: boolean) => void;
22
+ toggleDrawer: (open?: boolean | undefined) => void;
29
23
  };
30
24
  export type TabType = {
31
25
  [key: string]: any;
@@ -43,7 +37,7 @@ export type TabContextProps = {
43
37
  updateTab: (tab: TabType) => void;
44
38
  };
45
39
  export type TabIndexContextProps = {
46
- selectTab: Dispatch<SetStateAction<number>>;
40
+ selectTab: (tabIndex: number) => void;
47
41
  tabIndex: number;
48
42
  };
49
43
  export type CarouselProps = PropsWithChildren<{
@@ -57,3 +51,23 @@ export type GatewayProps = PropsWithChildren<{
57
51
  export type GatewayDestProps = {
58
52
  gatewayId: string;
59
53
  };
54
+ export type DrawerIndexProviderProps = PropsWithChildren<{
55
+ drawerIndex?: number;
56
+ onSelectDrawer?: (tabIndex: number) => void;
57
+ }>;
58
+ export type DrawerToggleProviderProps = PropsWithChildren<{
59
+ drawerOpen?: boolean;
60
+ onDrawerToggle?: (drawerOpen?: boolean) => void;
61
+ }>;
62
+ export type TabIndexProviderProps = PropsWithChildren<{
63
+ onSelectTab?: (tabIndex: number) => void;
64
+ tabIndex?: number;
65
+ }>;
66
+ export type ProvidersProps = DrawerIndexProviderProps & DrawerToggleProviderProps & PropsWithChildren<{}> & TabIndexProviderProps;
67
+ export type ReactDigestProps = PropsWithChildren<{}> & ProvidersProps;
68
+ export type ReactDigestDrawerProps = Omit<DrawerType, 'tabs'> & PropsWithChildren<{}> & {
69
+ tabId?: string;
70
+ };
71
+ export type ReactDigestTabProps = PropsWithChildren<{}> & TabType;
72
+ export type ReactDigestAppBarProps = PropsWithChildren<{}>;
73
+ export type ReactDigestDrawerBarProps = PropsWithChildren<{}>;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@dgui/react-shared",
3
3
  "title": "Digested React GUI Shared Components",
4
4
  "license": "LGPL-3.0-or-later",
5
- "version": "0.3.1",
5
+ "version": "0.4.0",
6
6
  "private": false,
7
7
  "description": "Shared Components for a boilerplate React GUI",
8
8
  "author": "wallzero @wallzeroblog (http://wallzero.com)",
@@ -43,23 +43,23 @@
43
43
  "set:version": "npm version --allow-same-version --no-commit-hooks --no-git-tag-version --no-workspaces-update $(npm --silent view $(node -p \"require('./package.json').name\") version)"
44
44
  },
45
45
  "devDependencies": {
46
- "@digest/eslint-config-jest": "^4.2.2",
47
- "@digest/eslint-config-react": "^4.2.2",
48
- "@digest/eslint-config-typescript": "^4.2.2",
49
- "@digest/jest-junit": "^4.2.2",
50
- "@digest/jest-react": "^4.2.2",
51
- "@digest/jest-typescript": "^4.2.2",
52
- "@digest/typescript": "^4.2.2",
53
- "@types/jest": "^29.5.1",
54
- "@types/react": "^18.0.37",
46
+ "@digest/eslint-config-jest": "^4.2.5",
47
+ "@digest/eslint-config-react": "^4.2.5",
48
+ "@digest/eslint-config-typescript": "^4.2.5",
49
+ "@digest/jest-junit": "^4.2.5",
50
+ "@digest/jest-react": "^4.2.5",
51
+ "@digest/jest-typescript": "^4.2.5",
52
+ "@digest/typescript": "^4.2.5",
53
+ "@types/jest": "^29.5.3",
54
+ "@types/react": "^18.2.18",
55
55
  "@types/react-test-renderer": "^18.0.0",
56
56
  "cross-env": "^7.0.3",
57
- "jest-environment-jsdom": "^29.5.0",
57
+ "jest-environment-jsdom": "^29.6.2",
58
58
  "jest-environment-jsdom-global": "^4.0.0",
59
59
  "npm-run-all": "^4.1.5",
60
60
  "react": "^18.2.0",
61
61
  "react-test-renderer": "^18.2.0",
62
- "rimraf": "^5.0.0"
62
+ "rimraf": "^5.0.1"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
@@ -71,5 +71,5 @@
71
71
  "reactjs",
72
72
  "typescript"
73
73
  ],
74
- "gitHead": "e49d7187066263c12e7661daa3ffb5feae6286d6"
74
+ "gitHead": "94c816e2bceb058183cbe0f4dfacb1c7dd6c9d86"
75
75
  }