@vuu-ui/vuu-shell 0.13.104 → 0.13.105
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/cjs/app-header/AppHeader.js +7 -3
- package/cjs/app-header/AppHeader.js.map +1 -1
- package/cjs/application-provider/ApplicationContext.js +2 -1
- package/cjs/application-provider/ApplicationContext.js.map +1 -1
- package/cjs/application-provider/ApplicationProvider.js +12 -7
- package/cjs/application-provider/ApplicationProvider.js.map +1 -1
- package/cjs/index.js +6 -1
- package/cjs/index.js.map +1 -1
- package/cjs/left-nav/LeftNav.js +0 -4
- package/cjs/left-nav/LeftNav.js.map +1 -1
- package/cjs/login/LoginPanel.js +8 -8
- package/cjs/login/LoginPanel.js.map +1 -1
- package/cjs/login/login-utils.js +31 -0
- package/cjs/login/login-utils.js.map +1 -0
- package/cjs/persistence-manager/LocalPersistenceManager.js +23 -15
- package/cjs/persistence-manager/LocalPersistenceManager.js.map +1 -1
- package/cjs/persistence-manager/RemotePersistenceManager.js +16 -4
- package/cjs/persistence-manager/RemotePersistenceManager.js.map +1 -1
- package/cjs/shell.js +10 -7
- package/cjs/shell.js.map +1 -1
- package/cjs/workspace-management/SaveLayoutPanel.js +5 -4
- package/cjs/workspace-management/SaveLayoutPanel.js.map +1 -1
- package/cjs/workspace-management/WorkspaceProvider.js +5 -0
- package/cjs/workspace-management/WorkspaceProvider.js.map +1 -1
- package/esm/app-header/AppHeader.js +7 -3
- package/esm/app-header/AppHeader.js.map +1 -1
- package/esm/application-provider/ApplicationContext.js +2 -1
- package/esm/application-provider/ApplicationContext.js.map +1 -1
- package/esm/application-provider/ApplicationProvider.js +12 -7
- package/esm/application-provider/ApplicationProvider.js.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/left-nav/LeftNav.js +0 -4
- package/esm/left-nav/LeftNav.js.map +1 -1
- package/esm/login/LoginPanel.js +8 -8
- package/esm/login/LoginPanel.js.map +1 -1
- package/esm/login/login-utils.js +26 -0
- package/esm/login/login-utils.js.map +1 -0
- package/esm/persistence-manager/LocalPersistenceManager.js +23 -15
- package/esm/persistence-manager/LocalPersistenceManager.js.map +1 -1
- package/esm/persistence-manager/RemotePersistenceManager.js +16 -4
- package/esm/persistence-manager/RemotePersistenceManager.js.map +1 -1
- package/esm/shell.js +10 -7
- package/esm/shell.js.map +1 -1
- package/esm/workspace-management/SaveLayoutPanel.js +5 -4
- package/esm/workspace-management/SaveLayoutPanel.js.map +1 -1
- package/esm/workspace-management/WorkspaceProvider.js +5 -0
- package/esm/workspace-management/WorkspaceProvider.js.map +1 -1
- package/package.json +13 -13
- package/types/application-provider/ApplicationContext.d.ts +1 -1
- package/types/application-provider/ApplicationProvider.d.ts +2 -2
- package/types/index.d.ts +1 -1
- package/types/login/LoginPanel.d.ts +3 -2
- package/types/login/index.d.ts +2 -0
- package/types/login/login-utils.d.ts +4 -0
- package/types/persistence-manager/LocalPersistenceManager.d.ts +3 -1
- package/types/persistence-manager/RemotePersistenceManager.d.ts +1 -2
- package/types/shell.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftNav.js","sources":["../../../../packages/vuu-shell/src/left-nav/LeftNav.tsx"],"sourcesContent":["import { VuuLogo } from \"@vuu-ui/vuu-icons\";\nimport {\n LayoutResizeAction,\n Stack,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { Tab, Tabstrip } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n DynamicFeatureProps,\n FilterTableFeatureProps,\n hasFilterTableFeatureProps,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n HTMLAttributes,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { FeatureList, GroupedFeatureProps } from \"../feature-list\";\nimport { LayoutList } from \"../workspace-management\";\n\nimport leftNavCss from \"./LeftNav.css\";\nimport { useFeatures } from \"../feature-and-layout-provider\";\n\nconst classBase = \"vuuLeftNav\";\n\nexport type NavDisplayStatus =\n | \"menu-full\"\n | \"menu-icons\"\n | \"menu-full-content\"\n | \"menu-icons-content\";\n\nconst getDisplayStatus = (\n activeTabIndex: number,\n expanded: boolean,\n): NavDisplayStatus => {\n if (activeTabIndex === 0) {\n return expanded ? \"menu-full\" : \"menu-icons\";\n } else {\n return expanded ? \"menu-full-content\" : \"menu-icons-content\";\n }\n};\n\nexport type NavDisplayStatusHandler = (\n navDisplayStatus: NavDisplayStatus,\n) => void;\nexport interface LeftNavProps extends HTMLAttributes<HTMLDivElement> {\n \"data-path\"?: string;\n defaultActiveTabIndex?: number;\n defaultExpanded?: boolean;\n onActiveChange?: (activeTabIndex: number) => void;\n onTogglePrimaryMenu?: (expanded: boolean) => void;\n sizeCollapsed?: number;\n sizeContent?: number;\n sizeExpanded?: number;\n}\n\ntype NavState = {\n activeTabIndex: number;\n expanded: boolean;\n};\n\nconst byModule = (\n f1: DynamicFeatureProps<FilterTableFeatureProps>,\n f2: DynamicFeatureProps<FilterTableFeatureProps>,\n) => {\n const t1 = f1.ComponentProps?.tableSchema.table;\n const t2 = f2.ComponentProps?.tableSchema.table;\n if (t1 && t2) {\n const m1 = t1.module.toLowerCase();\n const m2 = t2.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (t1.table < t2.table) {\n return -1;\n } else if (t1.table > t2.table) {\n return 1;\n } else {\n return 0;\n }\n } else {\n throw Error(\"Invalid tableFeature\");\n }\n};\n\nexport const LeftNav = (props: LeftNavProps) => {\n const dispatch = useLayoutProviderDispatch();\n const {\n \"data-path\": path,\n defaultExpanded = true,\n defaultActiveTabIndex = 0,\n onActiveChange,\n onTogglePrimaryMenu,\n sizeCollapsed = 80,\n sizeContent = 300,\n sizeExpanded = 240,\n style: styleProp,\n ...htmlAttributes\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-left-nav\",\n css: leftNavCss,\n window: targetWindow,\n });\n\n const { dynamicFeatures = [], tableFeatures = [] } = useFeatures();\n\n const [navState, setNavState] = useState<NavState>({\n activeTabIndex: defaultActiveTabIndex,\n expanded: defaultExpanded,\n });\n\n const tableFeaturesByGroup = useMemo(\n () =>\n tableFeatures\n ?.sort(byModule)\n .reduce<\n GroupedFeatureProps<FilterTableFeatureProps>\n >((acc, filterTableFeature) => {\n if (hasFilterTableFeatureProps(filterTableFeature)) {\n const { table } = filterTableFeature.ComponentProps.tableSchema;\n const key = `${table.module} Tables`;\n if (!acc[key]) {\n acc[key] = [];\n }\n return {\n ...acc,\n [key]: acc[key].concat(filterTableFeature),\n };\n } else {\n return acc;\n // throw Error(\"LeftNaV invalid tableFeature\");\n }\n }, {}),\n [tableFeatures],\n );\n\n const getFullWidth = useCallback(\n (tabIndex: number, expanded: boolean): number => {\n if (tabIndex === 0) {\n return expanded ? sizeExpanded : sizeCollapsed;\n } else {\n return expanded\n ? sizeExpanded + sizeContent\n : sizeCollapsed + sizeContent;\n }\n },\n [sizeCollapsed, sizeContent, sizeExpanded],\n );\n\n const handleTabSelection = useCallback(\n (activeTabIndex: number) => {\n const { activeTabIndex: currentIndex, expanded } = navState;\n const newState = { activeTabIndex, expanded };\n setNavState(newState);\n if (activeTabIndex === 0 || currentIndex === 0) {\n const width = getFullWidth(activeTabIndex, expanded);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: width,\n } as LayoutResizeAction);\n }\n onActiveChange?.(activeTabIndex);\n },\n [dispatch, getFullWidth, navState, onActiveChange],\n );\n\n const displayStatus = getDisplayStatus(\n navState.activeTabIndex,\n navState.expanded,\n );\n\n const toggleExpanded = useCallback(() => {\n const { activeTabIndex, expanded } = navState;\n const primaryMenuExpanded = !expanded;\n const newState = { activeTabIndex, expanded: primaryMenuExpanded };\n setNavState(newState);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: getFullWidth(activeTabIndex, primaryMenuExpanded),\n } as LayoutResizeAction);\n onTogglePrimaryMenu?.(primaryMenuExpanded);\n }, [dispatch, getFullWidth, navState, onTogglePrimaryMenu]);\n\n const style = {\n ...styleProp,\n \"--nav-menu-collapsed-width\": `${sizeCollapsed}px`,\n \"--nav-menu-expanded-width\": `${sizeExpanded}px`,\n \"--nav-menu-content-width\": `${sizeContent}px`,\n } as CSSProperties;\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, `${classBase}-${displayStatus}`)}\n style={style}\n >\n <div className={cx(`${classBase}-menu-primary`)} data-mode=\"dark\">\n <div className=\"vuuLeftNav-logo\">\n <VuuLogo />\n </div>\n <div className={`${classBase}-main`}>\n <Tabstrip\n activeTabIndex={navState.activeTabIndex}\n animateSelectionThumb={false}\n className={`${classBase}-Tabstrip`}\n onActiveChange={handleTabSelection}\n orientation=\"vertical\"\n >\n <Tab data-icon=\"demo\" label=\"DEMO\"></Tab>\n <Tab data-icon=\"features\" label=\"VUU FEATURES\"></Tab>\n <Tab data-icon=\"tables\" label=\"VUU TABLES\"></Tab>\n <Tab data-icon=\"layouts\" label=\"MY LAYOUTS\"></Tab>\n </Tabstrip>\n </div>\n <div className=\"vuuLeftNav-buttonBar\">\n <button\n className={cx(\"vuuLeftNav-toggleButton\", {\n \"vuuLeftNav-toggleButton-open\":\n displayStatus.startsWith(\"menu-full\"),\n \"vuuLeftNav-toggleButton-closed\":\n displayStatus.startsWith(\"menu-icons\"),\n })}\n data-icon={\n displayStatus.startsWith(\"menu-full\")\n ? \"chevron-left\"\n : \"chevron-right\"\n }\n onClick={toggleExpanded}\n />\n </div>\n </div>\n <Stack\n active={navState.activeTabIndex - 1}\n className={`${classBase}-menu-secondary`}\n showTabs={false}\n >\n <FeatureList features={dynamicFeatures} title=\"VUU FEATURES\" />\n <FeatureList features={tableFeaturesByGroup} title=\"VUU TABLES\" />\n <LayoutList title=\"MY LAYOUTS\" />\n </Stack>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LeftNav.js","sources":["../../../../packages/vuu-shell/src/left-nav/LeftNav.tsx"],"sourcesContent":["import { VuuLogo } from \"@vuu-ui/vuu-icons\";\nimport {\n LayoutResizeAction,\n Stack,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { Tab, Tabstrip } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n DynamicFeatureProps,\n FilterTableFeatureProps,\n hasFilterTableFeatureProps,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n HTMLAttributes,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { FeatureList, GroupedFeatureProps } from \"../feature-list\";\nimport { LayoutList } from \"../workspace-management\";\n\nimport leftNavCss from \"./LeftNav.css\";\nimport { useFeatures } from \"../feature-and-layout-provider\";\n\nconst classBase = \"vuuLeftNav\";\n\nexport type NavDisplayStatus =\n | \"menu-full\"\n | \"menu-icons\"\n | \"menu-full-content\"\n | \"menu-icons-content\";\n\nconst getDisplayStatus = (\n activeTabIndex: number,\n expanded: boolean,\n): NavDisplayStatus => {\n if (activeTabIndex === 0) {\n return expanded ? \"menu-full\" : \"menu-icons\";\n } else {\n return expanded ? \"menu-full-content\" : \"menu-icons-content\";\n }\n};\n\nexport type NavDisplayStatusHandler = (\n navDisplayStatus: NavDisplayStatus,\n) => void;\nexport interface LeftNavProps extends HTMLAttributes<HTMLDivElement> {\n \"data-path\"?: string;\n defaultActiveTabIndex?: number;\n defaultExpanded?: boolean;\n onActiveChange?: (activeTabIndex: number) => void;\n onTogglePrimaryMenu?: (expanded: boolean) => void;\n sizeCollapsed?: number;\n sizeContent?: number;\n sizeExpanded?: number;\n}\n\ntype NavState = {\n activeTabIndex: number;\n expanded: boolean;\n};\n\nconst byModule = (\n f1: DynamicFeatureProps<FilterTableFeatureProps>,\n f2: DynamicFeatureProps<FilterTableFeatureProps>,\n) => {\n const t1 = f1.ComponentProps?.tableSchema.table;\n const t2 = f2.ComponentProps?.tableSchema.table;\n if (t1 && t2) {\n const m1 = t1.module.toLowerCase();\n const m2 = t2.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (t1.table < t2.table) {\n return -1;\n } else if (t1.table > t2.table) {\n return 1;\n } else {\n return 0;\n }\n } else {\n throw Error(\"Invalid tableFeature\");\n }\n};\n\nexport const LeftNav = (props: LeftNavProps) => {\n const dispatch = useLayoutProviderDispatch();\n const {\n \"data-path\": path,\n defaultExpanded = true,\n defaultActiveTabIndex = 0,\n onActiveChange,\n onTogglePrimaryMenu,\n sizeCollapsed = 80,\n sizeContent = 300,\n sizeExpanded = 240,\n style: styleProp,\n ...htmlAttributes\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-left-nav\",\n css: leftNavCss,\n window: targetWindow,\n });\n\n const { dynamicFeatures = [], tableFeatures = [] } = useFeatures();\n\n const [navState, setNavState] = useState<NavState>({\n activeTabIndex: defaultActiveTabIndex,\n expanded: defaultExpanded,\n });\n\n const tableFeaturesByGroup = useMemo(\n () =>\n tableFeatures\n ?.sort(byModule)\n .reduce<\n GroupedFeatureProps<FilterTableFeatureProps>\n >((acc, filterTableFeature) => {\n if (hasFilterTableFeatureProps(filterTableFeature)) {\n const { table } = filterTableFeature.ComponentProps.tableSchema;\n const key = `${table.module} Tables`;\n if (!acc[key]) {\n acc[key] = [];\n }\n return {\n ...acc,\n [key]: acc[key].concat(filterTableFeature),\n };\n } else {\n return acc;\n // throw Error(\"LeftNaV invalid tableFeature\");\n }\n }, {}),\n [tableFeatures],\n );\n\n const getFullWidth = useCallback(\n (tabIndex: number, expanded: boolean): number => {\n if (tabIndex === 0) {\n return expanded ? sizeExpanded : sizeCollapsed;\n } else {\n return expanded\n ? sizeExpanded + sizeContent\n : sizeCollapsed + sizeContent;\n }\n },\n [sizeCollapsed, sizeContent, sizeExpanded],\n );\n\n const handleTabSelection = useCallback(\n (activeTabIndex: number) => {\n const { activeTabIndex: currentIndex, expanded } = navState;\n const newState = { activeTabIndex, expanded };\n setNavState(newState);\n if (activeTabIndex === 0 || currentIndex === 0) {\n const width = getFullWidth(activeTabIndex, expanded);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: width,\n } as LayoutResizeAction);\n }\n onActiveChange?.(activeTabIndex);\n },\n [dispatch, getFullWidth, navState, onActiveChange],\n );\n\n const displayStatus = getDisplayStatus(\n navState.activeTabIndex,\n navState.expanded,\n );\n\n const toggleExpanded = useCallback(() => {\n const { activeTabIndex, expanded } = navState;\n const primaryMenuExpanded = !expanded;\n const newState = { activeTabIndex, expanded: primaryMenuExpanded };\n setNavState(newState);\n dispatch({\n type: \"layout-resize\",\n path: \"#vuu-side-panel\",\n size: getFullWidth(activeTabIndex, primaryMenuExpanded),\n } as LayoutResizeAction);\n onTogglePrimaryMenu?.(primaryMenuExpanded);\n }, [dispatch, getFullWidth, navState, onTogglePrimaryMenu]);\n\n const style = {\n ...styleProp,\n \"--nav-menu-collapsed-width\": `${sizeCollapsed}px`,\n \"--nav-menu-expanded-width\": `${sizeExpanded}px`,\n \"--nav-menu-content-width\": `${sizeContent}px`,\n } as CSSProperties;\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, `${classBase}-${displayStatus}`)}\n style={style}\n >\n <div className={cx(`${classBase}-menu-primary`)} data-mode=\"dark\">\n <div className=\"vuuLeftNav-logo\">\n <VuuLogo />\n </div>\n <div className={`${classBase}-main`}>\n <Tabstrip\n activeTabIndex={navState.activeTabIndex}\n animateSelectionThumb={false}\n className={`${classBase}-Tabstrip`}\n onActiveChange={handleTabSelection}\n orientation=\"vertical\"\n >\n <Tab data-icon=\"demo\" label=\"DEMO\"></Tab>\n <Tab data-icon=\"features\" label=\"VUU FEATURES\"></Tab>\n <Tab data-icon=\"tables\" label=\"VUU TABLES\"></Tab>\n <Tab data-icon=\"layouts\" label=\"MY LAYOUTS\"></Tab>\n </Tabstrip>\n </div>\n <div className=\"vuuLeftNav-buttonBar\">\n <button\n className={cx(\"vuuLeftNav-toggleButton\", {\n \"vuuLeftNav-toggleButton-open\":\n displayStatus.startsWith(\"menu-full\"),\n \"vuuLeftNav-toggleButton-closed\":\n displayStatus.startsWith(\"menu-icons\"),\n })}\n data-icon={\n displayStatus.startsWith(\"menu-full\")\n ? \"chevron-left\"\n : \"chevron-right\"\n }\n onClick={toggleExpanded}\n />\n </div>\n </div>\n <Stack\n active={navState.activeTabIndex - 1}\n className={`${classBase}-menu-secondary`}\n showTabs={false}\n >\n <FeatureList features={dynamicFeatures} title=\"VUU FEATURES\" />\n <FeatureList features={tableFeaturesByGroup} title=\"VUU TABLES\" />\n <LayoutList title=\"MY LAYOUTS\" />\n </Stack>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/esm/login/LoginPanel.js
CHANGED
|
@@ -12,6 +12,7 @@ const classBase = "vuuLoginPanel";
|
|
|
12
12
|
const LoginPanel = ({
|
|
13
13
|
appName = "Demo App",
|
|
14
14
|
className,
|
|
15
|
+
requirePassword = true,
|
|
15
16
|
onSubmit,
|
|
16
17
|
...htmlAttributes
|
|
17
18
|
}) => {
|
|
@@ -34,16 +35,16 @@ const LoginPanel = ({
|
|
|
34
35
|
setPassword(evt.target.value);
|
|
35
36
|
};
|
|
36
37
|
const handleCommitName = useCallback(() => {
|
|
37
|
-
if (
|
|
38
|
-
onSubmit(username
|
|
38
|
+
if (!requirePassword) {
|
|
39
|
+
onSubmit(username);
|
|
39
40
|
}
|
|
40
|
-
}, [onSubmit,
|
|
41
|
+
}, [onSubmit, requirePassword, username]);
|
|
41
42
|
const handleCommitPassword = useCallback(() => {
|
|
42
43
|
if (username) {
|
|
43
44
|
onSubmit(username, password);
|
|
44
45
|
}
|
|
45
46
|
}, [onSubmit, password, username]);
|
|
46
|
-
const dataIsValid = username.trim() !== "" && password.trim() !== "";
|
|
47
|
+
const dataIsValid = username.trim() !== "" && (requirePassword === false || password.trim() !== "");
|
|
47
48
|
useEffect(() => {
|
|
48
49
|
console.log(`inputRef`, {
|
|
49
50
|
input: inputRef.current
|
|
@@ -70,7 +71,7 @@ const LoginPanel = ({
|
|
|
70
71
|
}
|
|
71
72
|
)
|
|
72
73
|
] }),
|
|
73
|
-
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
74
|
+
requirePassword ? /* @__PURE__ */ jsxs(FormField, { children: [
|
|
74
75
|
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Password" }),
|
|
75
76
|
/* @__PURE__ */ jsx(
|
|
76
77
|
VuuInput,
|
|
@@ -86,15 +87,14 @@ const LoginPanel = ({
|
|
|
86
87
|
endAdornment: /* @__PURE__ */ jsx("span", { "data-icon": "eye", style: { cursor: "pointer" } })
|
|
87
88
|
}
|
|
88
89
|
)
|
|
89
|
-
] }),
|
|
90
|
+
] }) : null,
|
|
90
91
|
/* @__PURE__ */ jsx(
|
|
91
92
|
Button,
|
|
92
93
|
{
|
|
93
|
-
appearance: "solid",
|
|
94
94
|
className: `${classBase}-login`,
|
|
95
95
|
disabled: !dataIsValid,
|
|
96
96
|
onClick: login,
|
|
97
|
-
|
|
97
|
+
variant: "cta",
|
|
98
98
|
children: "Login"
|
|
99
99
|
}
|
|
100
100
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginPanel.js","sources":["../../../../packages/vuu-shell/src/login/LoginPanel.tsx"],"sourcesContent":["import { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport { Button, FormField, FormFieldLabel } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n ChangeEvent,\n HTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { VuuLogo } from \"./VuuLogo\";\n\nimport loginPanelCss from \"./LoginPanel.css\";\n\nconst classBase = \"vuuLoginPanel\";\n\nexport interface LoginPanelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSubmit\"> {\n appName?: string;\n onSubmit: (username: string, password
|
|
1
|
+
{"version":3,"file":"LoginPanel.js","sources":["../../../../packages/vuu-shell/src/login/LoginPanel.tsx"],"sourcesContent":["import { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport { Button, FormField, FormFieldLabel } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n ChangeEvent,\n HTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { VuuLogo } from \"./VuuLogo\";\n\nimport loginPanelCss from \"./LoginPanel.css\";\n\nconst classBase = \"vuuLoginPanel\";\n\nexport interface LoginPanelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSubmit\"> {\n appName?: string;\n onSubmit: (username: string, password?: string) => void;\n requirePassword?: boolean;\n}\n\nexport const LoginPanel = ({\n appName = \"Demo App\",\n className,\n requirePassword = true,\n onSubmit,\n ...htmlAttributes\n}: LoginPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-login-panel\",\n css: loginPanelCss,\n window: targetWindow,\n });\n\n const [username, setUserName] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n const login = () => {\n onSubmit(username, password);\n };\n\n const handleUsername = (evt: ChangeEvent<HTMLInputElement>) => {\n setUserName(evt.target.value);\n };\n\n const handlePassword = (evt: ChangeEvent<HTMLInputElement>) => {\n setPassword(evt.target.value);\n };\n\n const handleCommitName = useCallback(() => {\n if (!requirePassword) {\n onSubmit(username);\n }\n }, [onSubmit, requirePassword, username]);\n\n const handleCommitPassword = useCallback(() => {\n if (username) {\n onSubmit(username, password);\n }\n }, [onSubmit, password, username]);\n\n const dataIsValid =\n username.trim() !== \"\" &&\n (requirePassword === false || password.trim() !== \"\");\n\n useEffect(() => {\n console.log(`inputRef`, {\n input: inputRef.current,\n });\n inputRef.current?.focus();\n }, []);\n\n return (\n <div {...htmlAttributes} className={cx(classBase, className)}>\n <div className={`${classBase}-branding`}>\n <VuuLogo />\n <div className={`${classBase}-appName`}>{appName}</div>\n </div>\n <div className={`${classBase}-form`}>\n <div className={`${classBase}-title`}>Welcome Back</div>\n <FormField>\n <FormFieldLabel>Username</FormFieldLabel>\n <VuuInput\n value={username}\n id=\"text-username\"\n inputRef={inputRef}\n onChange={handleUsername}\n onCommit={handleCommitName}\n />\n </FormField>\n\n {requirePassword ? (\n <FormField>\n <FormFieldLabel>Password</FormFieldLabel>\n <VuuInput\n className={`${classBase}-password`}\n inputProps={{\n type: \"password\",\n }}\n value={password}\n id=\"text-password\"\n onChange={handlePassword}\n onCommit={handleCommitPassword}\n endAdornment={\n <span data-icon=\"eye\" style={{ cursor: \"pointer\" }} />\n }\n />\n </FormField>\n ) : null}\n\n <Button\n className={`${classBase}-login`}\n disabled={!dataIsValid}\n onClick={login}\n variant=\"cta\"\n >\n Login\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getCookieValue } from '@vuu-ui/vuu-utils';
|
|
2
|
+
|
|
3
|
+
const getAuthModeFromCookies = () => {
|
|
4
|
+
const mode = getCookieValue("vuu-auth-mode");
|
|
5
|
+
return mode ?? "";
|
|
6
|
+
};
|
|
7
|
+
const getAuthDetailsFromCookies = () => {
|
|
8
|
+
const username = getCookieValue("vuu-username");
|
|
9
|
+
const token = getCookieValue("vuu-auth-token");
|
|
10
|
+
return [username, token];
|
|
11
|
+
};
|
|
12
|
+
const getDefaultLoginUrl = () => {
|
|
13
|
+
const authMode = getAuthModeFromCookies();
|
|
14
|
+
return authMode === "login" ? "login.html" : "index.html";
|
|
15
|
+
};
|
|
16
|
+
const redirectToLogin = (loginUrl = getDefaultLoginUrl()) => {
|
|
17
|
+
window.location.href = loginUrl;
|
|
18
|
+
};
|
|
19
|
+
const logout = (loginUrl) => {
|
|
20
|
+
document.cookie = "vuu-username= ; expires = Thu, 01 Jan 1970 00:00:00 GMT";
|
|
21
|
+
document.cookie = "vuu-auth-token= ; expires = Thu, 01 Jan 1970 00:00:00 GMT";
|
|
22
|
+
redirectToLogin(loginUrl);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { getAuthDetailsFromCookies, getAuthModeFromCookies, logout, redirectToLogin };
|
|
26
|
+
//# sourceMappingURL=login-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-utils.js","sources":["../../../../packages/vuu-shell/src/login/login-utils.ts"],"sourcesContent":["import { getCookieValue } from \"@vuu-ui/vuu-utils\";\n\nexport const getAuthModeFromCookies = (): string => {\n const mode = getCookieValue(\"vuu-auth-mode\") as string;\n return mode ?? \"\";\n};\n\nexport const getAuthDetailsFromCookies = (): [string, string] => {\n const username = getCookieValue(\"vuu-username\") as string;\n const token = getCookieValue(\"vuu-auth-token\") as string;\n return [username, token];\n};\n\nconst getDefaultLoginUrl = () => {\n const authMode = getAuthModeFromCookies();\n return authMode === \"login\" ? \"login.html\" : \"index.html\";\n};\n\nexport const redirectToLogin = (loginUrl = getDefaultLoginUrl()) => {\n window.location.href = loginUrl;\n};\n\nexport const logout = (loginUrl?: string) => {\n document.cookie = \"vuu-username= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\n document.cookie = \"vuu-auth-token= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\n redirectToLogin(loginUrl);\n};\n"],"names":[],"mappings":";;AAEO,MAAM,yBAAyB,MAAc;AAClD,EAAM,MAAA,IAAA,GAAO,eAAe,eAAe,CAAA;AAC3C,EAAA,OAAO,IAAQ,IAAA,EAAA;AACjB;AAEO,MAAM,4BAA4B,MAAwB;AAC/D,EAAM,MAAA,QAAA,GAAW,eAAe,cAAc,CAAA;AAC9C,EAAM,MAAA,KAAA,GAAQ,eAAe,gBAAgB,CAAA;AAC7C,EAAO,OAAA,CAAC,UAAU,KAAK,CAAA;AACzB;AAEA,MAAM,qBAAqB,MAAM;AAC/B,EAAA,MAAM,WAAW,sBAAuB,EAAA;AACxC,EAAO,OAAA,QAAA,KAAa,UAAU,YAAe,GAAA,YAAA;AAC/C,CAAA;AAEO,MAAM,eAAkB,GAAA,CAAC,QAAW,GAAA,kBAAA,EAAyB,KAAA;AAClE,EAAA,MAAA,CAAO,SAAS,IAAO,GAAA,QAAA;AACzB;AAEa,MAAA,MAAA,GAAS,CAAC,QAAsB,KAAA;AAC3C,EAAA,QAAA,CAAS,MAAS,GAAA,yDAAA;AAClB,EAAA,QAAA,CAAS,MAAS,GAAA,2DAAA;AAClB,EAAA,eAAA,CAAgB,QAAQ,CAAA;AAC1B;;;;"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { clearLocalEntity, getUniqueId, formatDate, getLocalEntity, saveLocalEntity } from '@vuu-ui/vuu-utils';
|
|
2
|
+
import 'react/jsx-runtime';
|
|
3
|
+
import '@vuu-ui/vuu-ui-controls';
|
|
4
|
+
import '@salt-ds/core';
|
|
5
|
+
import '@salt-ds/styles';
|
|
6
|
+
import '@salt-ds/window';
|
|
7
|
+
import 'clsx';
|
|
8
|
+
import 'react';
|
|
9
|
+
import { getAuthDetailsFromCookies } from '../login/login-utils.js';
|
|
2
10
|
|
|
3
11
|
var __defProp = Object.defineProperty;
|
|
4
12
|
var __typeError = (msg) => {
|
|
@@ -10,24 +18,25 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
10
18
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
19
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
12
20
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
-
var
|
|
21
|
+
var _username, _urlKey, _applicationJSON;
|
|
14
22
|
const baseMetadataSaveLocation = "layouts/metadata";
|
|
15
23
|
const baseLayoutsSaveLocation = "layouts/layouts";
|
|
16
24
|
class LocalPersistenceManager {
|
|
17
|
-
constructor(
|
|
25
|
+
constructor(urlKey) {
|
|
26
|
+
__privateAdd(this, _username, getAuthDetailsFromCookies()[0]);
|
|
27
|
+
__publicField(this, "metadataSaveLocation", `${baseMetadataSaveLocation}/${__privateGet(this, _username)}`);
|
|
28
|
+
__publicField(this, "layoutsSaveLocation", `${baseLayoutsSaveLocation}/${__privateGet(this, _username)}`);
|
|
29
|
+
__privateAdd(this, _urlKey, `api/vui/${__privateGet(this, _username)}`);
|
|
18
30
|
__privateAdd(this, _applicationJSON);
|
|
19
|
-
__privateAdd(this, _metadataSaveLocation);
|
|
20
|
-
__privateAdd(this, _layoutsSaveLocation);
|
|
21
|
-
__privateAdd(this, _urlKey);
|
|
22
31
|
__publicField(this, "loadLayouts", () => {
|
|
23
32
|
return new Promise((resolve) => {
|
|
24
|
-
const layouts = getLocalEntity(
|
|
33
|
+
const layouts = getLocalEntity(this.layoutsSaveLocation);
|
|
25
34
|
resolve(layouts || []);
|
|
26
35
|
});
|
|
27
36
|
});
|
|
28
37
|
__publicField(this, "saveLayoutsWithMetadata", (layouts, metadata) => {
|
|
29
|
-
saveLocalEntity(
|
|
30
|
-
saveLocalEntity(
|
|
38
|
+
saveLocalEntity(this.layoutsSaveLocation, layouts);
|
|
39
|
+
saveLocalEntity(this.metadataSaveLocation, metadata);
|
|
31
40
|
});
|
|
32
41
|
// Ensures that there is exactly one Layout entry and exactly one Metadata
|
|
33
42
|
// entry in local storage corresponding to the provided ID.
|
|
@@ -64,9 +73,9 @@ class LocalPersistenceManager {
|
|
|
64
73
|
});
|
|
65
74
|
});
|
|
66
75
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
if (urlKey) {
|
|
77
|
+
__privateSet(this, _urlKey, urlKey);
|
|
78
|
+
}
|
|
70
79
|
}
|
|
71
80
|
clearUserSettings() {
|
|
72
81
|
clearLocalEntity(__privateGet(this, _urlKey));
|
|
@@ -134,7 +143,7 @@ class LocalPersistenceManager {
|
|
|
134
143
|
loadMetadata() {
|
|
135
144
|
return new Promise((resolve) => {
|
|
136
145
|
const metadata = getLocalEntity(
|
|
137
|
-
|
|
146
|
+
this.metadataSaveLocation
|
|
138
147
|
);
|
|
139
148
|
resolve(metadata || []);
|
|
140
149
|
});
|
|
@@ -182,10 +191,9 @@ class LocalPersistenceManager {
|
|
|
182
191
|
}
|
|
183
192
|
}
|
|
184
193
|
}
|
|
185
|
-
|
|
186
|
-
_metadataSaveLocation = new WeakMap();
|
|
187
|
-
_layoutsSaveLocation = new WeakMap();
|
|
194
|
+
_username = new WeakMap();
|
|
188
195
|
_urlKey = new WeakMap();
|
|
196
|
+
_applicationJSON = new WeakMap();
|
|
189
197
|
|
|
190
198
|
export { LocalPersistenceManager };
|
|
191
199
|
//# sourceMappingURL=LocalPersistenceManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalPersistenceManager.js","sources":["../../../../packages/vuu-shell/src/persistence-manager/LocalPersistenceManager.ts"],"sourcesContent":["import {\n ApplicationJSON,\n LayoutJSON,\n Settings,\n formatDate,\n getLocalEntity,\n getUniqueId,\n saveLocalEntity,\n Layout,\n LayoutMetadata,\n LayoutMetadataDto,\n WithId,\n clearLocalEntity,\n} from \"@vuu-ui/vuu-utils\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\nconst baseMetadataSaveLocation = \"layouts/metadata\";\nconst baseLayoutsSaveLocation = \"layouts/layouts\";\n\nexport class LocalPersistenceManager implements IPersistenceManager {\n #applicationJSON: ApplicationJSON | undefined;\n #metadataSaveLocation: string;\n #layoutsSaveLocation: string;\n #urlKey: string;\n\n constructor(userName: string, urlKey?: string) {\n this.#metadataSaveLocation = `${baseMetadataSaveLocation}/${userName}`;\n this.#layoutsSaveLocation = `${baseLayoutsSaveLocation}/${userName}`;\n this.#urlKey = urlKey ?? `api/vui/${userName}`;\n }\n\n clearUserSettings() {\n clearLocalEntity(this.#urlKey);\n this.#applicationJSON = undefined;\n }\n\n createLayout(\n metadata: LayoutMetadataDto,\n layout: LayoutJSON,\n ): Promise<LayoutMetadata> {\n return new Promise((resolve) => {\n Promise.all([this.loadLayouts(), this.loadMetadata()]).then(\n ([existingLayouts, existingMetadata]) => {\n const id = getUniqueId();\n const newMetadata: LayoutMetadata = {\n ...metadata,\n id,\n created: formatDate({ date: \"dd.mm.yyyy\" })(new Date()),\n };\n\n this.saveLayoutsWithMetadata(\n [...existingLayouts, { id, json: layout }],\n [...existingMetadata, newMetadata],\n );\n resolve(newMetadata);\n },\n );\n });\n }\n\n updateLayout(\n id: string,\n newMetadata: LayoutMetadataDto,\n newLayout: LayoutJSON,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this.validateIds(id)\n .then(() => Promise.all([this.loadLayouts(), this.loadMetadata()]))\n .then(([existingLayouts, existingMetadata]) => {\n const updatedLayouts = existingLayouts.map((layout) =>\n layout.id === id ? { ...layout, json: newLayout } : layout,\n );\n const updatedMetadata = existingMetadata.map((metadata) =>\n metadata.id === id ? { ...metadata, ...newMetadata } : metadata,\n );\n this.saveLayoutsWithMetadata(updatedLayouts, updatedMetadata);\n resolve();\n })\n .catch((e) => reject(e));\n });\n }\n\n deleteLayout(id: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.validateIds(id)\n .then(() => Promise.all([this.loadLayouts(), this.loadMetadata()]))\n .then(([existingLayouts, existingMetadata]) => {\n const layouts = existingLayouts.filter((layout) => layout.id !== id);\n const metadata = existingMetadata.filter(\n (metadata) => metadata.id !== id,\n );\n this.saveLayoutsWithMetadata(layouts, metadata);\n resolve();\n })\n .catch((e) => reject(e));\n });\n }\n\n loadLayout(id: string): Promise<LayoutJSON> {\n return new Promise((resolve, reject) => {\n this.validateId(id, \"layout\")\n .then(() => this.loadLayouts())\n .then((existingLayouts) => {\n const foundLayout = existingLayouts.find(\n (layout) => layout.id === id,\n );\n if (foundLayout) {\n resolve(foundLayout.json);\n } else {\n reject(new Error(`no layout found matching id ${id}`));\n }\n })\n .catch((e) => reject(e));\n });\n }\n\n loadMetadata(): Promise<LayoutMetadata[]> {\n return new Promise((resolve) => {\n const metadata = getLocalEntity<LayoutMetadata[]>(\n this.#metadataSaveLocation,\n );\n resolve(metadata || []);\n });\n }\n\n async loadApplicationJSON(): Promise<ApplicationJSON | undefined> {\n return (\n this.#applicationJSON ||\n new Promise((resolve) => {\n const applicationJSON = getLocalEntity<ApplicationJSON>(this.#urlKey);\n if (applicationJSON) {\n this.#applicationJSON = applicationJSON;\n }\n resolve(applicationJSON);\n })\n );\n }\n\n saveApplicationJSON(applicationJSON: ApplicationJSON): Promise<void> {\n return new Promise((resolve, reject) => {\n const savedLayout = saveLocalEntity<ApplicationJSON>(\n this.#urlKey,\n applicationJSON,\n );\n if (savedLayout) {\n this.#applicationJSON = applicationJSON;\n resolve();\n } else {\n reject(new Error(\"Application Json failed to save\"));\n }\n });\n }\n\n loadLayouts = (): Promise<Layout[]> => {\n return new Promise((resolve) => {\n const layouts = getLocalEntity<Layout[]>(this.#layoutsSaveLocation);\n resolve(layouts || []);\n });\n };\n\n saveLayoutsWithMetadata = (\n layouts: Layout[],\n metadata: LayoutMetadata[],\n ): void => {\n saveLocalEntity<Layout[]>(this.#layoutsSaveLocation, layouts);\n saveLocalEntity<LayoutMetadata[]>(this.#metadataSaveLocation, metadata);\n };\n\n // Ensures that there is exactly one Layout entry and exactly one Metadata\n // entry in local storage corresponding to the provided ID.\n validateIds = async (id: string): Promise<void> => {\n return Promise.all([\n this.validateId(id, \"metadata\").catch((error) => error.message),\n this.validateId(id, \"layout\").catch((error) => error.message),\n ]).then((errorMessages: string[]) => {\n // filter() is used to remove any blank messages before joining.\n // Avoids orphaned delimiters in combined messages, e.g. \"; \" or \"; error 2\"\n const combinedMessage = errorMessages\n .filter((msg) => msg !== undefined)\n .join(\"; \");\n if (combinedMessage) {\n throw new Error(combinedMessage);\n }\n });\n };\n\n // Ensures that there is exactly one element (Layout or Metadata) in local\n // storage corresponding to the provided ID.\n validateId = (id: string, dataType: \"metadata\" | \"layout\"): Promise<void> => {\n return new Promise((resolve, reject) => {\n const loadFunc =\n dataType === \"metadata\"\n ? () => this.loadMetadata()\n : () => this.loadLayouts();\n\n loadFunc().then((array: WithId[]) => {\n const count = array.filter((element) => element.id === id).length;\n switch (count) {\n case 1: {\n resolve();\n break;\n }\n case 0: {\n reject(new Error(`No ${dataType} with ID ${id}`));\n break;\n }\n default:\n reject(new Error(`Non-unique ${dataType} with ID ${id}`));\n }\n });\n });\n };\n\n async getUserSettings() {\n if (this.#applicationJSON) {\n return this.#applicationJSON.userSettings ?? {};\n }\n\n try {\n const applicationJSON = await this.loadApplicationJSON();\n return applicationJSON?.userSettings ?? {};\n } catch (e) {\n return {};\n }\n }\n\n saveUserSettings(userSettings: Settings) {\n if (this.#applicationJSON) {\n this.saveApplicationJSON({\n ...this.#applicationJSON,\n userSettings,\n });\n }\n }\n}\n"],"names":["metadata"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalPersistenceManager.js","sources":["../../../../packages/vuu-shell/src/persistence-manager/LocalPersistenceManager.ts"],"sourcesContent":["import {\n ApplicationJSON,\n LayoutJSON,\n Settings,\n formatDate,\n getLocalEntity,\n getUniqueId,\n saveLocalEntity,\n Layout,\n LayoutMetadata,\n LayoutMetadataDto,\n WithId,\n clearLocalEntity,\n} from \"@vuu-ui/vuu-utils\";\nimport { getAuthDetailsFromCookies } from \"../login\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\nconst baseMetadataSaveLocation = \"layouts/metadata\";\nconst baseLayoutsSaveLocation = \"layouts/layouts\";\n\nexport class LocalPersistenceManager implements IPersistenceManager {\n #username: string = getAuthDetailsFromCookies()[0];\n metadataSaveLocation = `${baseMetadataSaveLocation}/${this.#username}`;\n layoutsSaveLocation = `${baseLayoutsSaveLocation}/${this.#username}`;\n #urlKey = `api/vui/${this.#username}`;\n #applicationJSON: ApplicationJSON | undefined;\n\n constructor(urlKey?: string) {\n if (urlKey) {\n this.#urlKey = urlKey;\n }\n }\n\n clearUserSettings() {\n clearLocalEntity(this.#urlKey);\n this.#applicationJSON = undefined;\n }\n\n createLayout(\n metadata: LayoutMetadataDto,\n layout: LayoutJSON,\n ): Promise<LayoutMetadata> {\n return new Promise((resolve) => {\n Promise.all([this.loadLayouts(), this.loadMetadata()]).then(\n ([existingLayouts, existingMetadata]) => {\n const id = getUniqueId();\n const newMetadata: LayoutMetadata = {\n ...metadata,\n id,\n created: formatDate({ date: \"dd.mm.yyyy\" })(new Date()),\n };\n\n this.saveLayoutsWithMetadata(\n [...existingLayouts, { id, json: layout }],\n [...existingMetadata, newMetadata],\n );\n resolve(newMetadata);\n },\n );\n });\n }\n\n updateLayout(\n id: string,\n newMetadata: LayoutMetadataDto,\n newLayout: LayoutJSON,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this.validateIds(id)\n .then(() => Promise.all([this.loadLayouts(), this.loadMetadata()]))\n .then(([existingLayouts, existingMetadata]) => {\n const updatedLayouts = existingLayouts.map((layout) =>\n layout.id === id ? { ...layout, json: newLayout } : layout,\n );\n const updatedMetadata = existingMetadata.map((metadata) =>\n metadata.id === id ? { ...metadata, ...newMetadata } : metadata,\n );\n this.saveLayoutsWithMetadata(updatedLayouts, updatedMetadata);\n resolve();\n })\n .catch((e) => reject(e));\n });\n }\n\n deleteLayout(id: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.validateIds(id)\n .then(() => Promise.all([this.loadLayouts(), this.loadMetadata()]))\n .then(([existingLayouts, existingMetadata]) => {\n const layouts = existingLayouts.filter((layout) => layout.id !== id);\n const metadata = existingMetadata.filter(\n (metadata) => metadata.id !== id,\n );\n this.saveLayoutsWithMetadata(layouts, metadata);\n resolve();\n })\n .catch((e) => reject(e));\n });\n }\n\n loadLayout(id: string): Promise<LayoutJSON> {\n return new Promise((resolve, reject) => {\n this.validateId(id, \"layout\")\n .then(() => this.loadLayouts())\n .then((existingLayouts) => {\n const foundLayout = existingLayouts.find(\n (layout) => layout.id === id,\n );\n if (foundLayout) {\n resolve(foundLayout.json);\n } else {\n reject(new Error(`no layout found matching id ${id}`));\n }\n })\n .catch((e) => reject(e));\n });\n }\n\n loadMetadata(): Promise<LayoutMetadata[]> {\n return new Promise((resolve) => {\n const metadata = getLocalEntity<LayoutMetadata[]>(\n this.metadataSaveLocation,\n );\n resolve(metadata || []);\n });\n }\n\n async loadApplicationJSON(): Promise<ApplicationJSON | undefined> {\n return (\n this.#applicationJSON ||\n new Promise((resolve) => {\n const applicationJSON = getLocalEntity<ApplicationJSON>(this.#urlKey);\n if (applicationJSON) {\n this.#applicationJSON = applicationJSON;\n }\n resolve(applicationJSON);\n })\n );\n }\n\n saveApplicationJSON(applicationJSON: ApplicationJSON): Promise<void> {\n return new Promise((resolve, reject) => {\n const savedLayout = saveLocalEntity<ApplicationJSON>(\n this.#urlKey,\n applicationJSON,\n );\n if (savedLayout) {\n this.#applicationJSON = applicationJSON;\n resolve();\n } else {\n reject(new Error(\"Application Json failed to save\"));\n }\n });\n }\n\n loadLayouts = (): Promise<Layout[]> => {\n return new Promise((resolve) => {\n const layouts = getLocalEntity<Layout[]>(this.layoutsSaveLocation);\n resolve(layouts || []);\n });\n };\n\n saveLayoutsWithMetadata = (\n layouts: Layout[],\n metadata: LayoutMetadata[],\n ): void => {\n saveLocalEntity<Layout[]>(this.layoutsSaveLocation, layouts);\n saveLocalEntity<LayoutMetadata[]>(this.metadataSaveLocation, metadata);\n };\n\n // Ensures that there is exactly one Layout entry and exactly one Metadata\n // entry in local storage corresponding to the provided ID.\n validateIds = async (id: string): Promise<void> => {\n return Promise.all([\n this.validateId(id, \"metadata\").catch((error) => error.message),\n this.validateId(id, \"layout\").catch((error) => error.message),\n ]).then((errorMessages: string[]) => {\n // filter() is used to remove any blank messages before joining.\n // Avoids orphaned delimiters in combined messages, e.g. \"; \" or \"; error 2\"\n const combinedMessage = errorMessages\n .filter((msg) => msg !== undefined)\n .join(\"; \");\n if (combinedMessage) {\n throw new Error(combinedMessage);\n }\n });\n };\n\n // Ensures that there is exactly one element (Layout or Metadata) in local\n // storage corresponding to the provided ID.\n validateId = (id: string, dataType: \"metadata\" | \"layout\"): Promise<void> => {\n return new Promise((resolve, reject) => {\n const loadFunc =\n dataType === \"metadata\"\n ? () => this.loadMetadata()\n : () => this.loadLayouts();\n\n loadFunc().then((array: WithId[]) => {\n const count = array.filter((element) => element.id === id).length;\n switch (count) {\n case 1: {\n resolve();\n break;\n }\n case 0: {\n reject(new Error(`No ${dataType} with ID ${id}`));\n break;\n }\n default:\n reject(new Error(`Non-unique ${dataType} with ID ${id}`));\n }\n });\n });\n };\n\n async getUserSettings() {\n if (this.#applicationJSON) {\n return this.#applicationJSON.userSettings ?? {};\n }\n\n try {\n const applicationJSON = await this.loadApplicationJSON();\n return applicationJSON?.userSettings ?? {};\n } catch (e) {\n return {};\n }\n }\n\n saveUserSettings(userSettings: Settings) {\n if (this.#applicationJSON) {\n this.saveApplicationJSON({\n ...this.#applicationJSON,\n userSettings,\n });\n }\n }\n}\n"],"names":["metadata"],"mappings":"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"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import '@vuu-ui/vuu-ui-controls';
|
|
3
|
+
import '@salt-ds/core';
|
|
4
|
+
import '@salt-ds/styles';
|
|
5
|
+
import '@salt-ds/window';
|
|
6
|
+
import 'clsx';
|
|
7
|
+
import 'react';
|
|
8
|
+
import { getAuthDetailsFromCookies } from '../login/login-utils.js';
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
1
13
|
const baseURL = "/api";
|
|
2
14
|
const metadataSaveLocation = "layouts/metadata";
|
|
3
15
|
const layoutsSaveLocation = "layouts";
|
|
4
16
|
const applicationLayoutsSaveLocation = "application-layouts";
|
|
5
17
|
class RemotePersistenceManager {
|
|
6
|
-
constructor(
|
|
7
|
-
this
|
|
18
|
+
constructor() {
|
|
19
|
+
__publicField(this, "username", getAuthDetailsFromCookies()[0]);
|
|
8
20
|
}
|
|
9
21
|
createLayout(metadata, layout) {
|
|
10
22
|
return new Promise(
|
|
@@ -110,7 +122,7 @@ class RemotePersistenceManager {
|
|
|
110
122
|
method: "PUT",
|
|
111
123
|
headers: {
|
|
112
124
|
"Content-Type": "application/json",
|
|
113
|
-
username: this.
|
|
125
|
+
username: this.username
|
|
114
126
|
},
|
|
115
127
|
body: JSON.stringify(applicationJSON)
|
|
116
128
|
}).then((response) => {
|
|
@@ -128,7 +140,7 @@ class RemotePersistenceManager {
|
|
|
128
140
|
(resolve, reject) => fetch(`${baseURL}/${applicationLayoutsSaveLocation}`, {
|
|
129
141
|
method: "GET",
|
|
130
142
|
headers: {
|
|
131
|
-
username: this.
|
|
143
|
+
username: this.username
|
|
132
144
|
}
|
|
133
145
|
}).then((response) => {
|
|
134
146
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemotePersistenceManager.js","sources":["../../../../packages/vuu-shell/src/persistence-manager/RemotePersistenceManager.ts"],"sourcesContent":["import {\n ApplicationJSON,\n LayoutJSON,\n LayoutMetadata,\n LayoutMetadataDto,\n Settings,\n} from \"@vuu-ui/vuu-utils\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\n\nconst baseURL = \"/api\";\nconst metadataSaveLocation = \"layouts/metadata\";\nconst layoutsSaveLocation = \"layouts\";\nconst applicationLayoutsSaveLocation = \"application-layouts\";\n\nexport type CreateLayoutResponseDto = { metadata: LayoutMetadata };\nexport type GetLayoutResponseDto = { definition: LayoutJSON };\nexport type GetApplicationResponseDto = { definition: ApplicationJSON };\n\nexport class RemotePersistenceManager implements IPersistenceManager {\n constructor(private userName: string) {}\n\n createLayout(\n metadata: LayoutMetadataDto,\n layout: LayoutJSON,\n ): Promise<LayoutMetadata> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify({\n metadata,\n definition: layout,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then(({ metadata }: CreateLayoutResponseDto) => {\n if (!metadata) {\n reject(new Error(\"Response did not contain valid metadata\"));\n }\n resolve(metadata);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n clearUserSettings() {\n // todo\n }\n\n updateLayout(\n id: string,\n metadata: LayoutMetadataDto,\n newLayoutJson: LayoutJSON,\n ): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"PUT\",\n body: JSON.stringify({\n metadata,\n layout: newLayoutJson,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n deleteLayout(id: string): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"DELETE\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n loadLayout(id: string): Promise<LayoutJSON> {\n return new Promise((resolve, reject) => {\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then(({ definition }: GetLayoutResponseDto) => {\n if (!definition) {\n reject(new Error(\"Response did not contain a valid layout\"));\n }\n resolve(definition);\n });\n })\n .catch((error: Error) => {\n reject(error);\n });\n });\n }\n\n loadMetadata(): Promise<LayoutMetadata[]> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${metadataSaveLocation}`, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then((metadata: LayoutMetadata[]) => {\n if (!metadata) {\n reject(new Error(\"Response did not contain valid metadata\"));\n }\n resolve(metadata);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n saveApplicationJSON(applicationJSON: ApplicationJSON): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${applicationLayoutsSaveLocation}`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n username: this.userName,\n },\n body: JSON.stringify(applicationJSON),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n loadApplicationJSON(): Promise<ApplicationJSON> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${applicationLayoutsSaveLocation}`, {\n method: \"GET\",\n headers: {\n username: this.userName,\n },\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then((applicationJSON: GetApplicationResponseDto) => {\n if (!applicationJSON) {\n reject(\n new Error(\n \"Response did not contain valid application layout information\",\n ),\n );\n }\n resolve(applicationJSON.definition);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n async getUserSettings() {\n return {};\n }\n\n saveUserSettings(userSettings: Settings) {\n console.log(\"saveUserSettings not implemented\", {\n userSettings,\n });\n }\n}\n"],"names":["metadata"],"mappings":"AASA,MAAM,OAAU,GAAA,MAAA;AAChB,MAAM,oBAAuB,GAAA,kBAAA;AAC7B,MAAM,mBAAsB,GAAA,SAAA;AAC5B,MAAM,8BAAiC,GAAA,qBAAA;AAMhC,MAAM,wBAAwD,CAAA;AAAA,EACnE,YAAoB,QAAkB,EAAA;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AAAmB,EAEvC,YAAA,CACE,UACA,MACyB,EAAA;AACzB,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,mBAAmB,CAAI,CAAA,EAAA;AAAA,QACzC,OAAS,EAAA;AAAA,UACP,cAAgB,EAAA;AAAA,SAClB;AAAA,QACA,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAA;AAAA,UACA,UAAY,EAAA;AAAA,SACb;AAAA,OACF,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,MAAO,CAAA,IAAA,CAAK,CAAC,EAAE,QAAA,EAAAA,WAAwC,KAAA;AAC9D,UAAA,IAAI,CAACA,SAAU,EAAA;AACb,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQA,SAAQ,CAAA;AAAA,SACjB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,iBAAoB,GAAA;AAAA;AAEpB,EAEA,YAAA,CACE,EACA,EAAA,QAAA,EACA,aACe,EAAA;AACf,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAS,EAAA,MAAA,KAC3B,KAAM,CAAA,CAAA,EAAG,OAAO,CAAI,CAAA,EAAA,mBAAmB,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA,KAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACT;AAAA,OACF,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,aAAa,EAA2B,EAAA;AACtC,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAS,EAAA,MAAA,KAC3B,KAAM,CAAA,CAAA,EAAG,OAAO,CAAI,CAAA,EAAA,mBAAmB,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,WAAW,EAAiC,EAAA;AAC1C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,MAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,MAAO,CAAA,IAAA,CAAK,CAAC,EAAE,YAAuC,KAAA;AAC7D,UAAA,IAAI,CAAC,UAAY,EAAA;AACf,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,SACnB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb,CAAA;AAAA,KACJ,CAAA;AAAA;AACH,EAEA,YAA0C,GAAA;AACxC,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,oBAAoB,CAAI,CAAA,EAAA;AAAA,QAC1C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,IAAK,EAAA,CAAE,IAAK,CAAA,CAAC,QAA+B,KAAA;AACnD,UAAA,IAAI,CAAC,QAAU,EAAA;AACb,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,SACjB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,oBAAoB,eAAiD,EAAA;AACnE,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,8BAA8B,CAAI,CAAA,EAAA;AAAA,QACpD,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,cAAgB,EAAA,kBAAA;AAAA,UAChB,UAAU,IAAK,CAAA;AAAA,SACjB;AAAA,QACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,eAAe;AAAA,OACrC,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,mBAAgD,GAAA;AAC9C,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,8BAA8B,CAAI,CAAA,EAAA;AAAA,QACpD,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,UAAU,IAAK,CAAA;AAAA;AACjB,OACD,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,IAAK,EAAA,CAAE,IAAK,CAAA,CAAC,eAA+C,KAAA;AACnE,UAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,YAAA,MAAA;AAAA,cACE,IAAI,KAAA;AAAA,gBACF;AAAA;AACF,aACF;AAAA;AAEF,UAAA,OAAA,CAAQ,gBAAgB,UAAU,CAAA;AAAA,SACnC,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,MAAM,eAAkB,GAAA;AACtB,IAAA,OAAO,EAAC;AAAA;AACV,EAEA,iBAAiB,YAAwB,EAAA;AACvC,IAAA,OAAA,CAAQ,IAAI,kCAAoC,EAAA;AAAA,MAC9C;AAAA,KACD,CAAA;AAAA;AAEL;;;;"}
|
|
1
|
+
{"version":3,"file":"RemotePersistenceManager.js","sources":["../../../../packages/vuu-shell/src/persistence-manager/RemotePersistenceManager.ts"],"sourcesContent":["import {\n ApplicationJSON,\n LayoutJSON,\n LayoutMetadata,\n LayoutMetadataDto,\n Settings,\n} from \"@vuu-ui/vuu-utils\";\nimport { getAuthDetailsFromCookies } from \"../login\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\n\nconst baseURL = \"/api\";\nconst metadataSaveLocation = \"layouts/metadata\";\nconst layoutsSaveLocation = \"layouts\";\nconst applicationLayoutsSaveLocation = \"application-layouts\";\n\nexport type CreateLayoutResponseDto = { metadata: LayoutMetadata };\nexport type GetLayoutResponseDto = { definition: LayoutJSON };\nexport type GetApplicationResponseDto = { definition: ApplicationJSON };\n\nexport class RemotePersistenceManager implements IPersistenceManager {\n username: string = getAuthDetailsFromCookies()[0];\n\n createLayout(\n metadata: LayoutMetadataDto,\n layout: LayoutJSON,\n ): Promise<LayoutMetadata> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify({\n metadata,\n definition: layout,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then(({ metadata }: CreateLayoutResponseDto) => {\n if (!metadata) {\n reject(new Error(\"Response did not contain valid metadata\"));\n }\n resolve(metadata);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n clearUserSettings() {\n // todo\n }\n\n updateLayout(\n id: string,\n metadata: LayoutMetadataDto,\n newLayoutJson: LayoutJSON,\n ): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"PUT\",\n body: JSON.stringify({\n metadata,\n layout: newLayoutJson,\n }),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n deleteLayout(id: string): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"DELETE\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n loadLayout(id: string): Promise<LayoutJSON> {\n return new Promise((resolve, reject) => {\n fetch(`${baseURL}/${layoutsSaveLocation}/${id}`, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then(({ definition }: GetLayoutResponseDto) => {\n if (!definition) {\n reject(new Error(\"Response did not contain a valid layout\"));\n }\n resolve(definition);\n });\n })\n .catch((error: Error) => {\n reject(error);\n });\n });\n }\n\n loadMetadata(): Promise<LayoutMetadata[]> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${metadataSaveLocation}`, {\n method: \"GET\",\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then((metadata: LayoutMetadata[]) => {\n if (!metadata) {\n reject(new Error(\"Response did not contain valid metadata\"));\n }\n resolve(metadata);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n saveApplicationJSON(applicationJSON: ApplicationJSON): Promise<void> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${applicationLayoutsSaveLocation}`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n username: this.username,\n },\n body: JSON.stringify(applicationJSON),\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n resolve();\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n loadApplicationJSON(): Promise<ApplicationJSON> {\n return new Promise((resolve, reject) =>\n fetch(`${baseURL}/${applicationLayoutsSaveLocation}`, {\n method: \"GET\",\n headers: {\n username: this.username,\n },\n })\n .then((response) => {\n if (!response.ok) {\n reject(new Error(response.statusText));\n }\n response.json().then((applicationJSON: GetApplicationResponseDto) => {\n if (!applicationJSON) {\n reject(\n new Error(\n \"Response did not contain valid application layout information\",\n ),\n );\n }\n resolve(applicationJSON.definition);\n });\n })\n .catch((error: Error) => {\n reject(error);\n }),\n );\n }\n\n async getUserSettings() {\n return {};\n }\n\n saveUserSettings(userSettings: Settings) {\n console.log(\"saveUserSettings not implemented\", {\n userSettings,\n });\n }\n}\n"],"names":["metadata"],"mappings":";;;;;;;;;;;;AAUA,MAAM,OAAU,GAAA,MAAA;AAChB,MAAM,oBAAuB,GAAA,kBAAA;AAC7B,MAAM,mBAAsB,GAAA,SAAA;AAC5B,MAAM,8BAAiC,GAAA,qBAAA;AAMhC,MAAM,wBAAwD,CAAA;AAAA,EAA9D,WAAA,GAAA;AACL,IAAmB,aAAA,CAAA,IAAA,EAAA,UAAA,EAAA,yBAAA,GAA4B,CAAC,CAAA,CAAA;AAAA;AAAA,EAEhD,YAAA,CACE,UACA,MACyB,EAAA;AACzB,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,mBAAmB,CAAI,CAAA,EAAA;AAAA,QACzC,OAAS,EAAA;AAAA,UACP,cAAgB,EAAA;AAAA,SAClB;AAAA,QACA,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAA;AAAA,UACA,UAAY,EAAA;AAAA,SACb;AAAA,OACF,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,MAAO,CAAA,IAAA,CAAK,CAAC,EAAE,QAAA,EAAAA,WAAwC,KAAA;AAC9D,UAAA,IAAI,CAACA,SAAU,EAAA;AACb,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQA,SAAQ,CAAA;AAAA,SACjB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,iBAAoB,GAAA;AAAA;AAEpB,EAEA,YAAA,CACE,EACA,EAAA,QAAA,EACA,aACe,EAAA;AACf,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAS,EAAA,MAAA,KAC3B,KAAM,CAAA,CAAA,EAAG,OAAO,CAAI,CAAA,EAAA,mBAAmB,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA,KAAA;AAAA,QACR,IAAA,EAAM,KAAK,SAAU,CAAA;AAAA,UACnB,QAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACT;AAAA,OACF,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,aAAa,EAA2B,EAAA;AACtC,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAS,EAAA,MAAA,KAC3B,KAAM,CAAA,CAAA,EAAG,OAAO,CAAI,CAAA,EAAA,mBAAmB,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,WAAW,EAAiC,EAAA;AAC1C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,MAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA;AAAA,QAC/C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,MAAO,CAAA,IAAA,CAAK,CAAC,EAAE,YAAuC,KAAA;AAC7D,UAAA,IAAI,CAAC,UAAY,EAAA;AACf,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,SACnB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb,CAAA;AAAA,KACJ,CAAA;AAAA;AACH,EAEA,YAA0C,GAAA;AACxC,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,oBAAoB,CAAI,CAAA,EAAA;AAAA,QAC1C,MAAQ,EAAA;AAAA,OACT,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,IAAK,EAAA,CAAE,IAAK,CAAA,CAAC,QAA+B,KAAA;AACnD,UAAA,IAAI,CAAC,QAAU,EAAA;AACb,YAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yCAAyC,CAAC,CAAA;AAAA;AAE7D,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,SACjB,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,oBAAoB,eAAiD,EAAA;AACnE,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,8BAA8B,CAAI,CAAA,EAAA;AAAA,QACpD,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,cAAgB,EAAA,kBAAA;AAAA,UAChB,UAAU,IAAK,CAAA;AAAA,SACjB;AAAA,QACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,eAAe;AAAA,OACrC,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAQ,OAAA,EAAA;AAAA,OACT,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,mBAAgD,GAAA;AAC9C,IAAA,OAAO,IAAI,OAAA;AAAA,MAAQ,CAAC,SAAS,MAC3B,KAAA,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA,EAAI,8BAA8B,CAAI,CAAA,EAAA;AAAA,QACpD,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,UAAU,IAAK,CAAA;AAAA;AACjB,OACD,CAAA,CACE,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAS,CAAA,UAAU,CAAC,CAAA;AAAA;AAEvC,QAAA,QAAA,CAAS,IAAK,EAAA,CAAE,IAAK,CAAA,CAAC,eAA+C,KAAA;AACnE,UAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,YAAA,MAAA;AAAA,cACE,IAAI,KAAA;AAAA,gBACF;AAAA;AACF,aACF;AAAA;AAEF,UAAA,OAAA,CAAQ,gBAAgB,UAAU,CAAA;AAAA,SACnC,CAAA;AAAA,OACF,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OACb;AAAA,KACL;AAAA;AACF,EAEA,MAAM,eAAkB,GAAA;AACtB,IAAA,OAAO,EAAC;AAAA;AACV,EAEA,iBAAiB,YAAwB,EAAA;AACvC,IAAA,OAAA,CAAQ,IAAI,kCAAoC,EAAA;AAAA,MAC9C;AAAA,KACD,CAAA;AAAA;AAEL;;;;"}
|
package/esm/shell.js
CHANGED
|
@@ -2,6 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
3
3
|
import { useWindow } from '@salt-ds/window';
|
|
4
4
|
import { ContextMenuProvider } from '@vuu-ui/vuu-context-menu';
|
|
5
|
+
import { useRemoteConnection } from '@vuu-ui/vuu-data-react';
|
|
5
6
|
import { StackLayout, LayoutProvider } from '@vuu-ui/vuu-layout';
|
|
6
7
|
import { NotificationsProvider } from '@vuu-ui/vuu-notifications';
|
|
7
8
|
import { ModalProvider } from '@vuu-ui/vuu-ui-controls';
|
|
@@ -11,17 +12,16 @@ import { AppHeader } from './app-header/AppHeader.js';
|
|
|
11
12
|
import { ApplicationProvider } from './application-provider/ApplicationProvider.js';
|
|
12
13
|
import { usePersistenceManager, PersistenceProvider } from './persistence-manager/PersistenceProvider.js';
|
|
13
14
|
import { LocalPersistenceManager } from './persistence-manager/LocalPersistenceManager.js';
|
|
14
|
-
import '
|
|
15
|
+
import '@salt-ds/core';
|
|
15
16
|
import 'clsx';
|
|
17
|
+
import './persistence-manager/StaticPersistenceManager.js';
|
|
16
18
|
import { useShellLayout } from './shell-layout-templates/useShellLayout.js';
|
|
17
19
|
import { UserSettingsPanel } from './user-settings/UserSettingsPanel.js';
|
|
18
|
-
import '@salt-ds/core';
|
|
19
20
|
import 'html-to-image';
|
|
20
21
|
import { WorkspaceProvider, useWorkspace } from './workspace-management/WorkspaceProvider.js';
|
|
21
22
|
import './feature-and-layout-provider/FeatureAndLayoutProvider.js';
|
|
22
23
|
import { loadingJSON } from './workspace-management/defaultWorkspaceJSON.js';
|
|
23
24
|
import { useWorkspaceContextMenuItems } from './workspace-management/useWorkspaceContextMenuItems.js';
|
|
24
|
-
import { useLostConnection } from '@vuu-ui/vuu-data-react';
|
|
25
25
|
import shellCss from './shell.css.js';
|
|
26
26
|
|
|
27
27
|
registerComponent("ApplicationSettings", UserSettingsPanel, "view");
|
|
@@ -50,7 +50,10 @@ const getHTMLAttributes = (props) => {
|
|
|
50
50
|
};
|
|
51
51
|
const VuuApplication = ({
|
|
52
52
|
shellLayoutProps: ShellLayoutProps2,
|
|
53
|
-
children
|
|
53
|
+
children,
|
|
54
|
+
// loginUrl, // need to make this available to app header
|
|
55
|
+
serverUrl,
|
|
56
|
+
user
|
|
54
57
|
}) => {
|
|
55
58
|
const targetWindow = useWindow();
|
|
56
59
|
useComponentCssInjection({
|
|
@@ -70,13 +73,13 @@ const VuuApplication = ({
|
|
|
70
73
|
},
|
|
71
74
|
[saveApplicationLayout]
|
|
72
75
|
);
|
|
76
|
+
useRemoteConnection({ serverUrl, user });
|
|
73
77
|
const isLayoutLoading = workspaceJSON === loadingJSON;
|
|
74
78
|
const initialLayout = useShellLayout({
|
|
75
79
|
...ShellLayoutProps2,
|
|
76
80
|
appHeader: getAppHeader(ShellLayoutProps2),
|
|
77
81
|
htmlAttributes: getHTMLAttributes(ShellLayoutProps2)
|
|
78
82
|
});
|
|
79
|
-
useLostConnection();
|
|
80
83
|
return isLayoutLoading ? null : /* @__PURE__ */ jsxs(
|
|
81
84
|
ContextMenuProvider,
|
|
82
85
|
{
|
|
@@ -97,7 +100,7 @@ const VuuApplication = ({
|
|
|
97
100
|
);
|
|
98
101
|
};
|
|
99
102
|
const Shell = ({
|
|
100
|
-
|
|
103
|
+
loginUrl,
|
|
101
104
|
user,
|
|
102
105
|
userSettingsSchema,
|
|
103
106
|
workspaceProps,
|
|
@@ -117,7 +120,7 @@ const Shell = ({
|
|
|
117
120
|
ApplicationProvider,
|
|
118
121
|
{
|
|
119
122
|
density: "high",
|
|
120
|
-
|
|
123
|
+
loginUrl,
|
|
121
124
|
theme: "vuu-theme",
|
|
122
125
|
user,
|
|
123
126
|
userSettingsSchema,
|
package/esm/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sources":["../../../packages/vuu-shell/src/shell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-context-menu\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport { LayoutProvider, StackLayout } from \"@vuu-ui/vuu-layout\";\nimport { NotificationsProvider } from \"@vuu-ui/vuu-notifications\";\nimport { ModalProvider } from \"@vuu-ui/vuu-ui-controls\";\nimport { VuuUser, logger, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport {\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useMemo,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport { ApplicationProvider } from \"./application-provider\";\nimport {\n IPersistenceManager,\n LocalPersistenceManager,\n PersistenceProvider,\n usePersistenceManager,\n} from \"./persistence-manager\";\nimport { ShellLayoutProps, useShellLayout } from \"./shell-layout-templates\";\nimport { SettingsSchema, UserSettingsPanel } from \"./user-settings\";\nimport {\n WorkspaceProps,\n WorkspaceProvider,\n useWorkspace,\n useWorkspaceContextMenuItems,\n} from \"./workspace-management\";\nimport { loadingJSON } from \"./workspace-management/defaultWorkspaceJSON\";\
|
|
1
|
+
{"version":3,"file":"shell.js","sources":["../../../packages/vuu-shell/src/shell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-context-menu\";\nimport { useRemoteConnection } from \"@vuu-ui/vuu-data-react\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport { LayoutProvider, StackLayout } from \"@vuu-ui/vuu-layout\";\nimport { NotificationsProvider } from \"@vuu-ui/vuu-notifications\";\nimport { ModalProvider } from \"@vuu-ui/vuu-ui-controls\";\nimport { VuuUser, logger, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport {\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useMemo,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport { ApplicationProvider } from \"./application-provider\";\nimport {\n IPersistenceManager,\n LocalPersistenceManager,\n PersistenceProvider,\n usePersistenceManager,\n} from \"./persistence-manager\";\nimport { ShellLayoutProps, useShellLayout } from \"./shell-layout-templates\";\nimport { SettingsSchema, UserSettingsPanel } from \"./user-settings\";\nimport {\n WorkspaceProps,\n WorkspaceProvider,\n useWorkspace,\n useWorkspaceContextMenuItems,\n} from \"./workspace-management\";\nimport { loadingJSON } from \"./workspace-management/defaultWorkspaceJSON\";\n\nimport shellCss from \"./shell.css\";\n\nregisterComponent(\"ApplicationSettings\", UserSettingsPanel, \"view\");\n\nif (process.env.NODE_ENV === \"production\") {\n // StackLayout is loaded just to force component registration, we know it will be\n // required when default layout is instantiated. This is only required in prod\n // to avoif tree shaking the Stack away. Causes a runtime issue in dev.\n if (typeof StackLayout !== \"function\") {\n console.warn(\n \"StackLayout module not loaded, will be unable to deserialize from layout JSON\",\n );\n }\n}\n\nconst { error } = logger(\"Shell\");\n\nexport type LayoutTemplateName = \"full-height\" | \"inlay\";\n\nexport interface ShellProps extends HTMLAttributes<HTMLDivElement> {\n shellLayoutProps?: ShellLayoutProps;\n userSettingsSchema?: SettingsSchema;\n workspaceProps?: WorkspaceProps;\n children?: ReactNode;\n loginUrl?: string;\n saveUrl?: string;\n serverUrl?: string;\n user: VuuUser;\n}\n\nconst defaultAppHeader = <AppHeader />;\n\nconst getAppHeader = (shellLayoutProps?: ShellLayoutProps) =>\n shellLayoutProps?.appHeader ?? defaultAppHeader;\n\nconst defaultHTMLAttributes: HTMLAttributes<HTMLDivElement> = {\n className: \"vuuShell\",\n};\n\nconst getHTMLAttributes = (props?: ShellLayoutProps) => {\n if (props?.htmlAttributes) {\n return {\n ...defaultHTMLAttributes,\n ...props.htmlAttributes,\n };\n } else {\n return defaultHTMLAttributes;\n }\n};\n\nconst VuuApplication = ({\n shellLayoutProps: ShellLayoutProps,\n children,\n // loginUrl, // need to make this available to app header\n serverUrl,\n user,\n}: Omit<\n ShellProps,\n \"ContentLayoutProps\" | \"loginUrl\" | \"userSettingsSchema\" | \"workspaceProps\"\n>) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-shell\",\n css: shellCss,\n window: targetWindow,\n });\n\n const { workspaceJSON, saveApplicationLayout } = useWorkspace();\n\n const { buildMenuOptions, handleMenuAction } = useWorkspaceContextMenuItems();\n\n const handleLayoutChange = useCallback<LayoutChangeHandler>(\n (layout) => {\n try {\n saveApplicationLayout(layout);\n } catch {\n error?.(\"Failed to save layout\");\n }\n },\n [saveApplicationLayout],\n );\n\n useRemoteConnection({ serverUrl, user });\n\n const isLayoutLoading = workspaceJSON === loadingJSON;\n\n const initialLayout = useShellLayout({\n ...ShellLayoutProps,\n appHeader: getAppHeader(ShellLayoutProps),\n htmlAttributes: getHTMLAttributes(ShellLayoutProps),\n });\n\n return isLayoutLoading ? null : (\n <ContextMenuProvider\n menuActionHandler={handleMenuAction}\n menuBuilder={buildMenuOptions}\n >\n <LayoutProvider\n workspaceJSON={workspaceJSON}\n onLayoutChange={handleLayoutChange}\n >\n {initialLayout}\n </LayoutProvider>\n {children}\n </ContextMenuProvider>\n );\n};\n\nexport const Shell = ({\n loginUrl,\n user,\n userSettingsSchema,\n workspaceProps,\n ...props\n}: ShellProps) => {\n // If user has provided an implementation of IPersistenceManager\n // by wrapping higher level PersistenceProvider, use it, otw\n // default to LocalPersistenceManager\n const persistenceManager = usePersistenceManager();\n const localPersistenceManager = useMemo<\n IPersistenceManager | undefined\n >(() => {\n if (persistenceManager) {\n return undefined;\n }\n console.log(\n `No Persistence Manager, configuration data will be persisted to Local Storage, key: 'vuu/${user.username}'`,\n );\n return new LocalPersistenceManager(`vuu/${user.username}`);\n }, [persistenceManager, user.username]);\n\n // ApplicationProvider must go outside Dialog and Notification providers\n // ApplicationProvider injects the SaltProvider and this must be the root\n // SaltProvider.\n\n const shellProviders = (\n <ApplicationProvider\n density=\"high\"\n loginUrl={loginUrl}\n theme=\"vuu-theme\"\n user={user}\n userSettingsSchema={userSettingsSchema}\n >\n <WorkspaceProvider {...workspaceProps}>\n <ModalProvider>\n <NotificationsProvider>\n <VuuApplication {...props} user={user} />\n </NotificationsProvider>\n </ModalProvider>\n </WorkspaceProvider>\n </ApplicationProvider>\n );\n\n if (persistenceManager) {\n return shellProviders;\n } else {\n return (\n <PersistenceProvider persistenceManager={localPersistenceManager}>\n {shellProviders}\n </PersistenceProvider>\n );\n }\n};\n"],"names":["ShellLayoutProps"],"mappings":"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"}
|
|
@@ -3,9 +3,11 @@ import { Text, FormField, FormFieldLabel, ComboBox, Option, Input, Button } from
|
|
|
3
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
4
|
import { useWindow } from '@salt-ds/window';
|
|
5
5
|
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
6
|
+
import '@vuu-ui/vuu-ui-controls';
|
|
7
|
+
import 'clsx';
|
|
8
|
+
import { getAuthDetailsFromCookies } from '../login/login-utils.js';
|
|
6
9
|
import { takeScreenshot } from './screenshot-utils.js';
|
|
7
10
|
import saveLayoutPanelCss from './SaveLayoutPanel.css.js';
|
|
8
|
-
import { useApplicationUser } from '../application-provider/ApplicationProvider.js';
|
|
9
11
|
|
|
10
12
|
const classBase = "vuuSaveLayoutPanel";
|
|
11
13
|
const groups = ["Group 1", "Group 2", "Group 3", "Group 4", "Group 5"];
|
|
@@ -21,7 +23,7 @@ const SaveLayoutPanel = (props) => {
|
|
|
21
23
|
const [group, setGroup] = useState("");
|
|
22
24
|
const [screenshot, setScreenshot] = useState();
|
|
23
25
|
const [screenshotErrorMessage, setScreenshotErrorMessage] = useState();
|
|
24
|
-
const
|
|
26
|
+
const [username] = getAuthDetailsFromCookies();
|
|
25
27
|
useEffect(() => {
|
|
26
28
|
if (componentId) {
|
|
27
29
|
takeScreenshot(document.getElementById(componentId)).then((screenshot2) => {
|
|
@@ -110,11 +112,10 @@ const SaveLayoutPanel = (props) => {
|
|
|
110
112
|
/* @__PURE__ */ jsx(
|
|
111
113
|
Button,
|
|
112
114
|
{
|
|
113
|
-
appearance: "solid",
|
|
114
115
|
className: `${classBase}-saveButton`,
|
|
115
116
|
onClick: handleSubmit,
|
|
116
117
|
disabled: layoutName === "" || group === "",
|
|
117
|
-
|
|
118
|
+
variant: "cta",
|
|
118
119
|
children: "Save"
|
|
119
120
|
}
|
|
120
121
|
)
|