@vuu-ui/vuu-shell 0.8.67 → 0.8.69
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/application-provider/ApplicationContext.js +1 -4
- package/cjs/application-provider/ApplicationContext.js.map +1 -1
- package/cjs/application-provider/ApplicationProvider.js +71 -11
- package/cjs/application-provider/ApplicationProvider.js.map +1 -1
- package/cjs/index.js +17 -7
- package/cjs/index.js.map +1 -1
- package/cjs/layout-management/useLayoutManager.js +11 -21
- package/cjs/layout-management/useLayoutManager.js.map +1 -1
- package/cjs/left-nav/LeftNav.js +30 -38
- package/cjs/left-nav/LeftNav.js.map +1 -1
- package/cjs/persistence-management/LocalPersistenceManager.js +32 -8
- package/cjs/persistence-management/LocalPersistenceManager.js.map +1 -1
- package/cjs/persistence-management/PersistenceProvider.js +21 -0
- package/cjs/persistence-management/PersistenceProvider.js.map +1 -0
- package/cjs/persistence-management/RemotePersistenceManager.js +8 -0
- package/cjs/persistence-management/RemotePersistenceManager.js.map +1 -1
- package/cjs/persistence-management/StaticPersistenceManager.js +20 -4
- package/cjs/persistence-management/StaticPersistenceManager.js.map +1 -1
- package/cjs/persistence-management/defaultApplicationJson.js.map +1 -1
- package/cjs/shell-layouts/context-panel/ContextPanel.js.map +1 -1
- package/cjs/shell-layouts/useFullHeightLeftPanel.js +9 -1
- package/cjs/shell-layouts/useFullHeightLeftPanel.js.map +1 -1
- package/cjs/shell.css.js +1 -1
- package/cjs/shell.js +4 -3
- package/cjs/shell.js.map +1 -1
- package/cjs/{application-settings/ApplicationSettingsPanel.js → user-settings/SettingsForm.js} +21 -44
- package/cjs/user-settings/SettingsForm.js.map +1 -0
- package/cjs/user-settings/UserSettingsPanel.css.js +6 -0
- package/cjs/user-settings/UserSettingsPanel.css.js.map +1 -0
- package/cjs/user-settings/UserSettingsPanel.js +41 -0
- package/cjs/user-settings/UserSettingsPanel.js.map +1 -0
- package/esm/application-provider/ApplicationContext.js +1 -4
- package/esm/application-provider/ApplicationContext.js.map +1 -1
- package/esm/application-provider/ApplicationProvider.js +70 -13
- package/esm/application-provider/ApplicationProvider.js.map +1 -1
- package/esm/index.js +4 -1
- package/esm/index.js.map +1 -1
- package/esm/layout-management/useLayoutManager.js +11 -21
- package/esm/layout-management/useLayoutManager.js.map +1 -1
- package/esm/left-nav/LeftNav.js +31 -39
- package/esm/left-nav/LeftNav.js.map +1 -1
- package/esm/persistence-management/LocalPersistenceManager.js +32 -8
- package/esm/persistence-management/LocalPersistenceManager.js.map +1 -1
- package/esm/persistence-management/PersistenceProvider.js +17 -0
- package/esm/persistence-management/PersistenceProvider.js.map +1 -0
- package/esm/persistence-management/RemotePersistenceManager.js +8 -0
- package/esm/persistence-management/RemotePersistenceManager.js.map +1 -1
- package/esm/persistence-management/StaticPersistenceManager.js +20 -4
- package/esm/persistence-management/StaticPersistenceManager.js.map +1 -1
- package/esm/persistence-management/defaultApplicationJson.js.map +1 -1
- package/esm/shell-layouts/context-panel/ContextPanel.js.map +1 -1
- package/esm/shell-layouts/useFullHeightLeftPanel.js +9 -1
- package/esm/shell-layouts/useFullHeightLeftPanel.js.map +1 -1
- package/esm/shell.css.js +1 -1
- package/esm/shell.js +4 -3
- package/esm/shell.js.map +1 -1
- package/esm/{application-settings/ApplicationSettingsPanel.js → user-settings/SettingsForm.js} +22 -41
- package/esm/user-settings/SettingsForm.js.map +1 -0
- package/esm/user-settings/UserSettingsPanel.css.js +4 -0
- package/esm/user-settings/UserSettingsPanel.css.js.map +1 -0
- package/esm/user-settings/UserSettingsPanel.js +39 -0
- package/esm/user-settings/UserSettingsPanel.js.map +1 -0
- package/package.json +11 -11
- package/types/application-provider/ApplicationContext.d.ts +6 -6
- package/types/application-provider/ApplicationProvider.d.ts +11 -4
- package/types/index.d.ts +2 -1
- package/types/layout-management/layoutTypes.d.ts +1 -1
- package/types/layout-management/useLayoutManager.d.ts +2 -4
- package/types/persistence-management/LocalPersistenceManager.d.ts +5 -4
- package/types/persistence-management/PersistenceManager.d.ts +15 -3
- package/types/persistence-management/PersistenceProvider.d.ts +11 -0
- package/types/persistence-management/RemotePersistenceManager.d.ts +5 -3
- package/types/persistence-management/StaticPersistenceManager.d.ts +10 -5
- package/types/persistence-management/defaultApplicationJson.d.ts +1 -1
- package/types/persistence-management/index.d.ts +1 -0
- package/types/shell-layouts/context-panel/ContextPanel.d.ts +1 -1
- package/types/{application-settings/ApplicationSettingsPanel.d.ts → user-settings/SettingsForm.d.ts} +13 -12
- package/types/user-settings/UserSettingsPanel.d.ts +3 -0
- package/types/user-settings/index.d.ts +2 -0
- package/cjs/application-settings/ApplicationSettingsPanel.css.js +0 -6
- package/cjs/application-settings/ApplicationSettingsPanel.css.js.map +0 -1
- package/cjs/application-settings/ApplicationSettingsPanel.js.map +0 -1
- package/esm/application-settings/ApplicationSettingsPanel.css.js +0 -4
- package/esm/application-settings/ApplicationSettingsPanel.css.js.map +0 -1
- package/esm/application-settings/ApplicationSettingsPanel.js.map +0 -1
- package/types/application-settings/applicationsettingsSchema.d.ts +0 -3
- package/types/application-settings/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalPersistenceManager.js","sources":["../../src/persistence-management/LocalPersistenceManager.ts"],"sourcesContent":["import { ApplicationJSON, LayoutJSON } from \"@vuu-ui/vuu-layout\";\nimport {\n formatDate,\n getLocalEntity,\n getUniqueId,\n saveLocalEntity,\n} from \"@vuu-ui/vuu-utils\";\n\nimport { defaultApplicationJson } from \"./defaultApplicationJson\";\nimport { PersistenceManager } from \"./PersistenceManager\";\nimport {\n Layout,\n LayoutMetadata,\n LayoutMetadataDto,\n WithId,\n} from \"../layout-management\";\nimport { getAuthDetailsFromCookies } from \"../login\";\n\nconst baseMetadataSaveLocation = \"layouts/metadata\";\nconst baseLayoutsSaveLocation = \"layouts/layouts\";\n\nexport class LocalPersistenceManager implements PersistenceManager {\n username: string = getAuthDetailsFromCookies()[0];\n metadataSaveLocation = `${baseMetadataSaveLocation}/${this.username}`;\n layoutsSaveLocation = `${baseLayoutsSaveLocation}/${this.username}`;\n\n #urlKey = `api/vui/${this.username}`;\n constructor(urlKey?: string) {\n if (urlKey) {\n this.#urlKey = urlKey;\n }\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 loadApplicationJSON(): Promise<ApplicationJSON> {\n return new Promise((resolve) => {\n const applicationJSON = getLocalEntity<ApplicationJSON>(this.#urlKey);\n if (applicationJSON) {\n resolve(applicationJSON);\n } else {\n resolve(defaultApplicationJson);\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 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"],"names":["getAuthDetailsFromCookies","getLocalEntity","saveLocalEntity","getUniqueId","formatDate","metadata","defaultApplicationJson"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalPersistenceManager.js","sources":["../../src/persistence-management/LocalPersistenceManager.ts"],"sourcesContent":["import {\n ApplicationJSON,\n LayoutJSON,\n Settings,\n formatDate,\n getLocalEntity,\n getUniqueId,\n saveLocalEntity,\n} from \"@vuu-ui/vuu-utils\";\n\nimport {\n Layout,\n LayoutMetadata,\n LayoutMetadataDto,\n WithId,\n} from \"../layout-management\";\nimport { getAuthDetailsFromCookies } from \"../login\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\nimport { defaultApplicationJson } from \"./defaultApplicationJson\";\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 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> {\n return (\n this.#applicationJSON ||\n new Promise((resolve) => {\n const applicationJSON = getLocalEntity<ApplicationJSON>(this.#urlKey);\n if (applicationJSON) {\n this.#applicationJSON = applicationJSON;\n resolve(applicationJSON);\n } else {\n resolve(defaultApplicationJson);\n }\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":["getAuthDetailsFromCookies","getLocalEntity","saveLocalEntity","getUniqueId","formatDate","metadata","defaultApplicationJson"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
const PersistenceContext = React.createContext({});
|
|
7
|
+
const PersistenceProvider = ({
|
|
8
|
+
children,
|
|
9
|
+
persistenceManager
|
|
10
|
+
}) => {
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsx(PersistenceContext.Provider, { value: { persistenceManager }, children });
|
|
12
|
+
};
|
|
13
|
+
const usePersistenceManager = () => {
|
|
14
|
+
const { persistenceManager } = React.useContext(PersistenceContext);
|
|
15
|
+
return persistenceManager;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.PersistenceContext = PersistenceContext;
|
|
19
|
+
exports.PersistenceProvider = PersistenceProvider;
|
|
20
|
+
exports.usePersistenceManager = usePersistenceManager;
|
|
21
|
+
//# sourceMappingURL=PersistenceProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistenceProvider.js","sources":["../../src/persistence-management/PersistenceProvider.tsx"],"sourcesContent":["import { ReactElement, ReactNode, createContext, useContext } from \"react\";\nimport { IPersistenceManager } from \"../persistence-management\";\n\nexport interface PersistenceContextProps {\n persistenceManager?: IPersistenceManager;\n}\n\nexport const PersistenceContext = createContext<PersistenceContextProps>({});\n\nexport interface PersistenceProviderProps extends PersistenceContextProps {\n children: ReactNode;\n}\n\nexport const PersistenceProvider = ({\n children,\n persistenceManager,\n}: PersistenceProviderProps): ReactElement => {\n return (\n <PersistenceContext.Provider value={{ persistenceManager }}>\n {children}\n </PersistenceContext.Provider>\n );\n};\n\nexport const usePersistenceManager = () => {\n const { persistenceManager } = useContext(PersistenceContext);\n return persistenceManager;\n};\n"],"names":["createContext","jsx","useContext"],"mappings":";;;;;AAOa,MAAA,kBAAA,GAAqBA,mBAAuC,CAAA,EAAE,EAAA;AAMpE,MAAM,sBAAsB,CAAC;AAAA,EAClC,QAAA;AAAA,EACA,kBAAA;AACF,CAA8C,KAAA;AAC5C,EACE,uBAAAC,cAAA,CAAC,mBAAmB,QAAnB,EAAA,EAA4B,OAAO,EAAE,kBAAA,IACnC,QACH,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,MAAM,wBAAwB,MAAM;AACzC,EAAA,MAAM,EAAE,kBAAA,EAAuB,GAAAC,gBAAA,CAAW,kBAAkB,CAAA,CAAA;AAC5D,EAAO,OAAA,kBAAA,CAAA;AACT;;;;;;"}
|
|
@@ -158,6 +158,14 @@ class RemotePersistenceManager {
|
|
|
158
158
|
})
|
|
159
159
|
);
|
|
160
160
|
}
|
|
161
|
+
async getUserSettings() {
|
|
162
|
+
return {};
|
|
163
|
+
}
|
|
164
|
+
saveUserSettings(userSettings) {
|
|
165
|
+
console.log("saveUserSettings not implemented", {
|
|
166
|
+
userSettings
|
|
167
|
+
});
|
|
168
|
+
}
|
|
161
169
|
}
|
|
162
170
|
|
|
163
171
|
exports.RemotePersistenceManager = RemotePersistenceManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemotePersistenceManager.js","sources":["../../src/persistence-management/RemotePersistenceManager.ts"],"sourcesContent":["import { PersistenceManager } from \"./PersistenceManager\";\nimport { ApplicationJSON, LayoutJSON } from \"@vuu-ui/vuu-layout\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"../layout-management\";\nimport { getAuthDetailsFromCookies } from \"../login\";\n\nconst baseURL = process.env.LAYOUT_BASE_URL;\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 PersistenceManager {\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 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"],"names":["getAuthDetailsFromCookies","metadata"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemotePersistenceManager.js","sources":["../../src/persistence-management/RemotePersistenceManager.ts"],"sourcesContent":["import { ApplicationJSON, LayoutJSON, Settings } from \"@vuu-ui/vuu-utils\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"../layout-management\";\nimport { getAuthDetailsFromCookies } from \"../login\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\n\nconst baseURL = process.env.LAYOUT_BASE_URL;\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 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":["getAuthDetailsFromCookies","metadata"],"mappings":"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"}
|
|
@@ -18,16 +18,21 @@ var __privateSet = (obj, member, value, setter) => {
|
|
|
18
18
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
19
19
|
return value;
|
|
20
20
|
};
|
|
21
|
-
var _layoutMetaData;
|
|
21
|
+
var _applicationJSON, _layoutMetaData;
|
|
22
22
|
function unsupported() {
|
|
23
23
|
return new Promise((_, reject) => {
|
|
24
24
|
reject("not supported");
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
class StaticPersistenceManager {
|
|
28
|
-
constructor(
|
|
28
|
+
constructor({
|
|
29
|
+
applicationJSON,
|
|
30
|
+
layoutMetadata = []
|
|
31
|
+
}) {
|
|
32
|
+
__privateAdd(this, _applicationJSON, void 0);
|
|
29
33
|
__privateAdd(this, _layoutMetaData, void 0);
|
|
30
34
|
__privateSet(this, _layoutMetaData, layoutMetadata);
|
|
35
|
+
__privateSet(this, _applicationJSON, applicationJSON);
|
|
31
36
|
}
|
|
32
37
|
createLayout() {
|
|
33
38
|
return unsupported();
|
|
@@ -48,10 +53,21 @@ class StaticPersistenceManager {
|
|
|
48
53
|
loadApplicationJSON() {
|
|
49
54
|
return unsupported();
|
|
50
55
|
}
|
|
51
|
-
saveApplicationJSON() {
|
|
52
|
-
|
|
56
|
+
async saveApplicationJSON(applicationJson) {
|
|
57
|
+
console.log(`save application json `, {
|
|
58
|
+
applicationJson
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async getUserSettings() {
|
|
62
|
+
return __privateGet(this, _applicationJSON)?.userSettings ?? {};
|
|
63
|
+
}
|
|
64
|
+
saveUserSettings(userSettings) {
|
|
65
|
+
console.log("saveUserSettings not implemented", {
|
|
66
|
+
userSettings
|
|
67
|
+
});
|
|
53
68
|
}
|
|
54
69
|
}
|
|
70
|
+
_applicationJSON = new WeakMap();
|
|
55
71
|
_layoutMetaData = new WeakMap();
|
|
56
72
|
|
|
57
73
|
exports.StaticPersistenceManager = StaticPersistenceManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticPersistenceManager.js","sources":["../../src/persistence-management/StaticPersistenceManager.ts"],"sourcesContent":["import { LayoutJSON,
|
|
1
|
+
{"version":3,"file":"StaticPersistenceManager.js","sources":["../../src/persistence-management/StaticPersistenceManager.ts"],"sourcesContent":["import { ApplicationJSON, LayoutJSON, Settings } from \"@vuu-ui/vuu-utils\";\nimport { LayoutMetadata } from \"../layout-management\";\nimport { IPersistenceManager } from \"./PersistenceManager\";\n\nfunction unsupported<T = void>() {\n return new Promise<T>((_, reject) => {\n reject(\"not supported\");\n });\n}\n\nexport class StaticPersistenceManager implements IPersistenceManager {\n #applicationJSON?: Partial<ApplicationJSON>;\n #layoutMetaData: LayoutMetadata[];\n constructor({\n applicationJSON,\n layoutMetadata = [],\n }: {\n applicationJSON?: Partial<ApplicationJSON>;\n layoutMetadata?: LayoutMetadata[];\n }) {\n this.#layoutMetaData = layoutMetadata;\n this.#applicationJSON = applicationJSON;\n }\n createLayout() {\n return unsupported<LayoutMetadata>();\n }\n updateLayout() {\n return unsupported();\n }\n deleteLayout() {\n return unsupported();\n }\n loadLayout(id: string) {\n console.log(`load layout #${id}`);\n return unsupported<LayoutJSON>();\n }\n loadMetadata() {\n return Promise.resolve(this.#layoutMetaData);\n }\n loadApplicationJSON() {\n return unsupported<ApplicationJSON>();\n }\n async saveApplicationJSON(applicationJson: ApplicationJSON) {\n console.log(`save application json `, {\n applicationJson,\n });\n }\n\n async getUserSettings() {\n return this.#applicationJSON?.userSettings ?? {};\n }\n\n saveUserSettings(userSettings: Settings) {\n console.log(\"saveUserSettings not implemented\", {\n userSettings,\n });\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAAA,gBAAA,EAAA,eAAA,CAAA;AAIA,SAAS,WAAwB,GAAA;AAC/B,EAAA,OAAO,IAAI,OAAA,CAAW,CAAC,CAAA,EAAG,MAAW,KAAA;AACnC,IAAA,MAAA,CAAO,eAAe,CAAA,CAAA;AAAA,GACvB,CAAA,CAAA;AACH,CAAA;AAEO,MAAM,wBAAwD,CAAA;AAAA,EAGnE,WAAY,CAAA;AAAA,IACV,eAAA;AAAA,IACA,iBAAiB,EAAC;AAAA,GAIjB,EAAA;AARH,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAQE,IAAA,YAAA,CAAA,IAAA,EAAK,eAAkB,EAAA,cAAA,CAAA,CAAA;AACvB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA,CAAA;AAAA,GAC1B;AAAA,EACA,YAAe,GAAA;AACb,IAAA,OAAO,WAA4B,EAAA,CAAA;AAAA,GACrC;AAAA,EACA,YAAe,GAAA;AACb,IAAA,OAAO,WAAY,EAAA,CAAA;AAAA,GACrB;AAAA,EACA,YAAe,GAAA;AACb,IAAA,OAAO,WAAY,EAAA,CAAA;AAAA,GACrB;AAAA,EACA,WAAW,EAAY,EAAA;AACrB,IAAQ,OAAA,CAAA,GAAA,CAAI,CAAgB,aAAA,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAChC,IAAA,OAAO,WAAwB,EAAA,CAAA;AAAA,GACjC;AAAA,EACA,YAAe,GAAA;AACb,IAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,YAAA,CAAA,IAAA,EAAK,eAAe,CAAA,CAAA,CAAA;AAAA,GAC7C;AAAA,EACA,mBAAsB,GAAA;AACpB,IAAA,OAAO,WAA6B,EAAA,CAAA;AAAA,GACtC;AAAA,EACA,MAAM,oBAAoB,eAAkC,EAAA;AAC1D,IAAA,OAAA,CAAQ,IAAI,CAA0B,sBAAA,CAAA,EAAA;AAAA,MACpC,eAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,MAAM,eAAkB,GAAA;AACtB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,gBAAkB,CAAA,EAAA,YAAA,IAAgB,EAAC,CAAA;AAAA,GACjD;AAAA,EAEA,iBAAiB,YAAwB,EAAA;AACvC,IAAA,OAAA,CAAQ,IAAI,kCAAoC,EAAA;AAAA,MAC9C,YAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AA9CE,gBAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,eAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultApplicationJson.js","sources":["../../src/persistence-management/defaultApplicationJson.ts"],"sourcesContent":["import { ApplicationJSON, LayoutJSON } from \"@vuu-ui/vuu-
|
|
1
|
+
{"version":3,"file":"defaultApplicationJson.js","sources":["../../src/persistence-management/defaultApplicationJson.ts"],"sourcesContent":["import { ApplicationJSON, LayoutJSON } from \"@vuu-ui/vuu-utils\";\n\nexport const warningLayout: LayoutJSON = {\n type: \"View\",\n props: {\n style: { height: \"calc(100% - 6px)\" },\n },\n children: [\n {\n props: {\n className: \"vuuShell-warningPlaceholder\",\n },\n type: \"Placeholder\",\n },\n ],\n};\n\nexport const loadingApplicationJson: Readonly<ApplicationJSON> = {\n layout: {\n type: \"Component\",\n id: \"loading-main\",\n props: {},\n },\n};\n\nexport const defaultApplicationJson: ApplicationJSON = {\n layout: {\n type: \"Stack\",\n id: \"main-tabs\",\n props: {\n className: \"vuuShell-mainTabs\",\n TabstripProps: {\n allowAddTab: true,\n allowCloseTab: true,\n allowRenameTab: true,\n animateSelectionThumb: false,\n location: \"main-tab\",\n variant: \"primary\",\n },\n preserve: true,\n active: 0,\n },\n children: [\n {\n props: {\n id: \"tab1\",\n title: \"Tab 1\",\n className: \"vuuShell-Placeholder\",\n },\n type: \"Placeholder\",\n },\n ],\n },\n};\n"],"names":[],"mappings":";;AAEO,MAAM,aAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,EAAE,MAAA,EAAQ,kBAAmB,EAAA;AAAA,GACtC;AAAA,EACA,QAAU,EAAA;AAAA,IACR;AAAA,MACE,KAAO,EAAA;AAAA,QACL,SAAW,EAAA,6BAAA;AAAA,OACb;AAAA,MACA,IAAM,EAAA,aAAA;AAAA,KACR;AAAA,GACF;AACF,EAAA;AAEO,MAAM,sBAAoD,GAAA;AAAA,EAC/D,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,WAAA;AAAA,IACN,EAAI,EAAA,cAAA;AAAA,IACJ,OAAO,EAAC;AAAA,GACV;AACF,EAAA;AAEO,MAAM,sBAA0C,GAAA;AAAA,EACrD,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,OAAA;AAAA,IACN,EAAI,EAAA,WAAA;AAAA,IACJ,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,mBAAA;AAAA,MACX,aAAe,EAAA;AAAA,QACb,WAAa,EAAA,IAAA;AAAA,QACb,aAAe,EAAA,IAAA;AAAA,QACf,cAAgB,EAAA,IAAA;AAAA,QAChB,qBAAuB,EAAA,KAAA;AAAA,QACvB,QAAU,EAAA,UAAA;AAAA,QACV,OAAS,EAAA,SAAA;AAAA,OACX;AAAA,MACA,QAAU,EAAA,IAAA;AAAA,MACV,MAAQ,EAAA,CAAA;AAAA,KACV;AAAA,IACA,QAAU,EAAA;AAAA,MACR;AAAA,QACE,KAAO,EAAA;AAAA,UACL,EAAI,EAAA,MAAA;AAAA,UACJ,KAAO,EAAA,OAAA;AAAA,UACP,SAAW,EAAA,sBAAA;AAAA,SACb;AAAA,QACA,IAAM,EAAA,aAAA;AAAA,OACR;AAAA,KACF;AAAA,GACF;AACF;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextPanel.js","sources":["../../../src/shell-layouts/context-panel/ContextPanel.tsx"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"file":"ContextPanel.js","sources":["../../../src/shell-layouts/context-panel/ContextPanel.tsx"],"sourcesContent":["import {\n View,\n layoutFromJson,\n useLayoutProviderDispatch,\n} from \"@vuu-ui/vuu-layout\";\nimport { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { LayoutJSON } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { useCallback, useMemo } from \"react\";\n\nimport contextPanelCss from \"./ContextPanel.css\";\n\nconst classBase = \"vuuContextPanel\";\n\nexport interface ContextPanelProps {\n [key: string]: unknown;\n className?: string;\n content?: LayoutJSON;\n expanded?: boolean;\n overlay?: boolean;\n}\n\nexport const ContextPanel = ({\n className: classNameProp,\n expanded = false,\n content: contentProp,\n overlay = false,\n title,\n}: ContextPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-context-panel\",\n css: contextPanelCss,\n window: targetWindow,\n });\n\n const dispatchLayoutAction = useLayoutProviderDispatch();\n // const [contentJson, setContentJson] = useState(contentProp);\n const handleClose = useCallback(() => {\n dispatchLayoutAction({\n path: \"#context-panel\",\n propName: \"expanded\",\n propValue: false,\n type: \"set-prop\",\n });\n }, [dispatchLayoutAction]);\n // TODO look up content using context\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-inline`]: overlay !== true,\n [`${classBase}-overlay`]: overlay,\n });\n\n const content = useMemo(\n () =>\n contentProp && expanded ? layoutFromJson(contentProp, \"context-0\") : null,\n [contentProp, expanded]\n );\n\n return (\n <div\n className={cx(classBase, className, \"vuuScrollable\", {\n [`${classBase}-expanded`]: expanded,\n })}\n >\n <View className={`${classBase}-inner`} header={false} id=\"context-panel\">\n <div className={`${classBase}-header`}>\n <h2 className={`${classBase}-title`}>{title}</h2>\n <IconButton\n className={`${classBase}-close`}\n data-embedded\n icon=\"close\"\n onClick={handleClose}\n size={16}\n variant=\"secondary\"\n />\n </div>\n <div className={`${classBase}-content`}>{content}</div>\n </View>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","contextPanelCss","useLayoutProviderDispatch","useCallback","useMemo","layoutFromJson","jsx","jsxs","View","IconButton"],"mappings":";;;;;;;;;;;AAcA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAUX,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAW,EAAA,aAAA;AAAA,EACX,QAAW,GAAA,KAAA;AAAA,EACX,OAAS,EAAA,WAAA;AAAA,EACT,OAAU,GAAA,KAAA;AAAA,EACV,KAAA;AACF,CAAyB,KAAA;AACvB,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,uBAAuBC,mCAA0B,EAAA,CAAA;AAEvD,EAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,IAAqB,oBAAA,CAAA;AAAA,MACnB,IAAM,EAAA,gBAAA;AAAA,MACN,QAAU,EAAA,UAAA;AAAA,MACV,SAAW,EAAA,KAAA;AAAA,MACX,IAAM,EAAA,UAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH,EAAG,CAAC,oBAAoB,CAAC,CAAA,CAAA;AAGzB,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,IAC7C,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,QAAA;AAAA,IAC3B,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG,OAAY,KAAA,IAAA;AAAA,IACrC,CAAC,CAAA,EAAG,SAAS,CAAA,QAAA,CAAU,GAAG,OAAA;AAAA,GAC3B,CAAA,CAAA;AAED,EAAA,MAAM,OAAU,GAAAC,aAAA;AAAA,IACd,MACE,WAAe,IAAA,QAAA,GAAWC,wBAAe,CAAA,WAAA,EAAa,WAAW,CAAI,GAAA,IAAA;AAAA,IACvE,CAAC,aAAa,QAAQ,CAAA;AAAA,GACxB,CAAA;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,EAAA,CAAG,SAAW,EAAA,SAAA,EAAW,eAAiB,EAAA;AAAA,QACnD,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,QAAA;AAAA,OAC5B,CAAA;AAAA,MAED,QAAA,kBAAAC,eAAA,CAACC,kBAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAU,MAAA,CAAA,EAAA,MAAA,EAAQ,KAAO,EAAA,EAAA,EAAG,eACvD,EAAA,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,OAAA,CAAA,EAAA,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,0BAC5CA,cAAA;AAAA,YAACG,wBAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,SAAS,CAAA,MAAA,CAAA;AAAA,cACvB,eAAa,EAAA,IAAA;AAAA,cACb,IAAK,EAAA,OAAA;AAAA,cACL,OAAS,EAAA,WAAA;AAAA,cACT,IAAM,EAAA,EAAA;AAAA,cACN,OAAQ,EAAA,WAAA;AAAA,aAAA;AAAA,WACV;AAAA,SACF,EAAA,CAAA;AAAA,uCACC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,YAAa,QAAQ,EAAA,OAAA,EAAA,CAAA;AAAA,OACnD,EAAA,CAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -27,7 +27,15 @@ const useFullHeightLeftPanel = ({
|
|
|
27
27
|
style: { flex: 1, flexDirection: "column" },
|
|
28
28
|
children: [
|
|
29
29
|
appHeader,
|
|
30
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
31
|
+
vuuLayout.DraggableLayout,
|
|
32
|
+
{
|
|
33
|
+
dropTarget: true,
|
|
34
|
+
className: "vuuShell-content-main",
|
|
35
|
+
style: { flex: 1 }
|
|
36
|
+
},
|
|
37
|
+
"main-content"
|
|
38
|
+
)
|
|
31
39
|
]
|
|
32
40
|
}
|
|
33
41
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFullHeightLeftPanel.js","sources":["../../src/shell-layouts/useFullHeightLeftPanel.tsx"],"sourcesContent":["import { DraggableLayout, Flexbox } from \"@vuu-ui/vuu-layout\";\nimport { ReactElement } from \"react\";\nimport { ContextPanel } from \"./context-panel\";\nimport { SidePanel } from \"./side-panel\";\nimport { ShellLayoutProps } from \"./useShellLayout\";\n\nexport const useFullHeightLeftPanel = ({\n appHeader,\n LeftSidePanelProps,\n}: ShellLayoutProps): ReactElement => {\n return (\n <Flexbox\n className=\"App\"\n style={{\n flexDirection: \"row\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <SidePanel {...LeftSidePanelProps} id=\"vuu-side-panel\" />\n <Flexbox\n className=\"vuuShell-content\"\n style={{ flex: 1, flexDirection: \"column\" }}\n >\n {appHeader}\n <DraggableLayout
|
|
1
|
+
{"version":3,"file":"useFullHeightLeftPanel.js","sources":["../../src/shell-layouts/useFullHeightLeftPanel.tsx"],"sourcesContent":["import { DraggableLayout, Flexbox } from \"@vuu-ui/vuu-layout\";\nimport { ReactElement } from \"react\";\nimport { ContextPanel } from \"./context-panel\";\nimport { SidePanel } from \"./side-panel\";\nimport { ShellLayoutProps } from \"./useShellLayout\";\n\nexport const useFullHeightLeftPanel = ({\n appHeader,\n LeftSidePanelProps,\n}: ShellLayoutProps): ReactElement => {\n return (\n <Flexbox\n className=\"App\"\n style={{\n flexDirection: \"row\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <SidePanel {...LeftSidePanelProps} id=\"vuu-side-panel\" />\n <Flexbox\n className=\"vuuShell-content\"\n style={{ flex: 1, flexDirection: \"column\" }}\n >\n {appHeader}\n <DraggableLayout\n dropTarget\n className=\"vuuShell-content-main\"\n key=\"main-content\"\n style={{ flex: 1 }}\n />\n </Flexbox>\n <ContextPanel id=\"context-panel\" overlay></ContextPanel>\n </Flexbox>\n );\n};\n"],"names":["jsxs","Flexbox","jsx","SidePanel","DraggableLayout","ContextPanel"],"mappings":";;;;;;;AAMO,MAAM,yBAAyB,CAAC;AAAA,EACrC,SAAA;AAAA,EACA,kBAAA;AACF,CAAsC,KAAA;AACpC,EACE,uBAAAA,eAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,KAAA;AAAA,MACV,KAAO,EAAA;AAAA,QACL,aAAe,EAAA,KAAA;AAAA,QACf,MAAQ,EAAA,MAAA;AAAA,QACR,KAAO,EAAA,MAAA;AAAA,OACT;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,mBAAW,EAAA,EAAA,GAAG,kBAAoB,EAAA,EAAA,EAAG,gBAAiB,EAAA,CAAA;AAAA,wBACvDH,eAAA;AAAA,UAACC,iBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,kBAAA;AAAA,YACV,KAAO,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,eAAe,QAAS,EAAA;AAAA,YAEzC,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,8BACDC,cAAA;AAAA,gBAACE,yBAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,EAAA,IAAA;AAAA,kBACV,SAAU,EAAA,uBAAA;AAAA,kBAEV,KAAA,EAAO,EAAE,IAAA,EAAM,CAAE,EAAA;AAAA,iBAAA;AAAA,gBADb,cAAA;AAAA,eAEN;AAAA,aAAA;AAAA,WAAA;AAAA,SACF;AAAA,wBACCF,cAAA,CAAAG,yBAAA,EAAA,EAAa,EAAG,EAAA,eAAA,EAAgB,SAAO,IAAC,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAC3C,CAAA;AAEJ;;;;"}
|
package/cjs/shell.css.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var shellCss = ".vuuShell {\n background-color: var(--vuu-color-gray-25);\n height: var(--vuuShell-height, 100vh);\n width: var(--vuuShell-width, 100vw);\n}\n\n.vuuShell-mainTabs {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-palette {\n --vuuView-border: none;\n --vuuView-margin: 0;\n}\n\n.vuuShell-warningPlaceholder {\n background-color: var(--salt-container-background-high);\n height: 100%;\n}\n\n/* until we reinstat5e the toolbar */\n.vuuToolbarProxy {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-mainTabs > .vuuTabstrip > .vuuOverflowContainer-wrapContainer {\n background: var(--vuu-color-gray-25);\n}\n\n.vuuShell-mainTabs {\n --vuuTab-height: 28px;\n border: solid 1px #
|
|
3
|
+
var shellCss = ".vuuShell {\n background-color: var(--vuu-color-gray-25);\n height: var(--vuuShell-height, 100vh);\n width: var(--vuuShell-width, 100vw);\n}\n\n.vuuShell-mainTabs {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-palette {\n --vuuView-border: none;\n --vuuView-margin: 0;\n}\n\n.vuuShell-warningPlaceholder {\n background-color: var(--salt-container-background-high);\n height: 100%;\n}\n\n/* until we reinstat5e the toolbar */\n.vuuToolbarProxy {\n background: var(--salt-container-primary-background);\n}\n\n.vuuShell-mainTabs > .vuuTabstrip > .vuuOverflowContainer-wrapContainer {\n background: var(--vuu-color-gray-25);\n}\n\n.vuuShell-mainTabs {\n --vuuTab-height: 28px;\n border: solid 1px #d6d7da;\n border-top: none !important;\n border-radius: 6px;\n height: 100%;\n padding: 36px 8px 8px 8px;\n position: relative;\n width: 100%;\n}\n\n.vuuShell-mainTabs > .vuuTabstrip {\n left: -1px;\n padding-bottom: 7px;\n position: absolute !important;\n right: 1px;\n top: 0;\n width: calc(100% + 2px) !important;\n}\n\n.vuuShell-content {\n padding: var(--vuuShell-content-padding, 8px);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = shellCss;
|
|
6
6
|
//# sourceMappingURL=shell.css.js.map
|
package/cjs/shell.js
CHANGED
|
@@ -11,20 +11,21 @@ var cx = require('clsx');
|
|
|
11
11
|
var React = require('react');
|
|
12
12
|
var AppHeader = require('./app-header/AppHeader.js');
|
|
13
13
|
var ApplicationProvider = require('./application-provider/ApplicationProvider.js');
|
|
14
|
-
var
|
|
15
|
-
require('html-to-image');
|
|
14
|
+
var UserSettingsPanel = require('./user-settings/UserSettingsPanel.js');
|
|
16
15
|
require('@salt-ds/core');
|
|
16
|
+
require('html-to-image');
|
|
17
17
|
require('@vuu-ui/vuu-ui-controls');
|
|
18
18
|
var useLayoutManager = require('./layout-management/useLayoutManager.js');
|
|
19
19
|
var useLayoutContextMenuItems = require('./layout-management/useLayoutContextMenuItems.js');
|
|
20
20
|
var defaultApplicationJson = require('./persistence-management/defaultApplicationJson.js');
|
|
21
|
+
require('./persistence-management/PersistenceProvider.js');
|
|
21
22
|
require('./persistence-management/LocalPersistenceManager.js');
|
|
22
23
|
require('./persistence-management/RemotePersistenceManager.js');
|
|
23
24
|
require('./persistence-management/StaticPersistenceManager.js');
|
|
24
25
|
var useShellLayout = require('./shell-layouts/useShellLayout.js');
|
|
25
26
|
var shell = require('./shell.css.js');
|
|
26
27
|
|
|
27
|
-
vuuUtils.registerComponent("ApplicationSettings",
|
|
28
|
+
vuuUtils.registerComponent("ApplicationSettings", UserSettingsPanel.UserSettingsPanel, "view");
|
|
28
29
|
if (process.env.NODE_ENV === "production") {
|
|
29
30
|
if (typeof vuuLayout.StackLayout !== "function") {
|
|
30
31
|
console.warn(
|
package/cjs/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sources":["../src/shell.tsx"],"sourcesContent":["import { connectToServer } from \"@vuu-ui/vuu-data-remote\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport {\n DraggableLayout,\n LayoutProvider,\n LayoutProviderProps,\n StackLayout,\n} from \"@vuu-ui/vuu-layout\";\nimport {\n ContextMenuProvider,\n DialogProvider,\n NotificationsProvider,\n} from \"@vuu-ui/vuu-popups\";\nimport { VuuUser, logger, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport { ApplicationProvider } from \"./application-provider\";\nimport {
|
|
1
|
+
{"version":3,"file":"shell.js","sources":["../src/shell.tsx"],"sourcesContent":["import { connectToServer } from \"@vuu-ui/vuu-data-remote\";\nimport type { LayoutChangeHandler } from \"@vuu-ui/vuu-layout\";\nimport {\n DraggableLayout,\n LayoutProvider,\n LayoutProviderProps,\n StackLayout,\n} from \"@vuu-ui/vuu-layout\";\nimport {\n ContextMenuProvider,\n DialogProvider,\n NotificationsProvider,\n} from \"@vuu-ui/vuu-popups\";\nimport { VuuUser, logger, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n ReactNode,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AppHeader } from \"./app-header\";\nimport { ApplicationProvider } from \"./application-provider\";\nimport { UserSettingsPanel } from \"./user-settings\";\nimport {\n LayoutManagementProvider,\n useLayoutContextMenuItems,\n useLayoutManager,\n} from \"./layout-management\";\nimport { loadingApplicationJson } from \"./persistence-management\";\nimport { SidePanelProps, useShellLayout } from \"./shell-layouts\";\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 unsbale to deserialize from layout JSON\"\n );\n }\n}\n\nconst { error } = logger(\"Shell\");\n\nconst defaultLeftSidePanel: ShellProps[\"LeftSidePanelProps\"] = {};\n\nexport type LayoutTemplateName = \"full-height\" | \"inlay\";\n\nexport interface ShellProps extends HTMLAttributes<HTMLDivElement> {\n LayoutProps?: Pick<\n LayoutProviderProps,\n \"createNewChild\" | \"pathToDropTarget\"\n >;\n LeftSidePanelProps?: SidePanelProps;\n children?: ReactNode;\n leftSidePanelLayout?: \"full-height\" | \"inlay\";\n loginUrl?: string;\n // paletteConfig: any;\n saveUrl?: string;\n serverUrl?: string;\n user: VuuUser;\n}\n\nconst VuuApplication = ({\n LayoutProps,\n LeftSidePanelProps = defaultLeftSidePanel,\n children,\n className: classNameProp,\n leftSidePanelLayout,\n loginUrl,\n saveUrl,\n serverUrl,\n user,\n ...htmlAttributes\n}: ShellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-shell\",\n css: shellCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const { applicationJson, saveApplicationLayout } = useLayoutManager();\n const { buildMenuOptions, handleMenuAction } = useLayoutContextMenuItems();\n const [connectionStatus, setConnectionStatus] = useState<\n \"connected\" | \"rejected\"\n >(\"connected\");\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 useMemo(async () => {\n if (serverUrl && user.token) {\n const connectionStatus = await connectToServer({\n authToken: user.token,\n url: serverUrl,\n username: user.username,\n });\n setConnectionStatus(connectionStatus);\n }\n }, [serverUrl, user.token, user.username]);\n\n const className = cx(\"vuuShell\");\n\n const isLayoutLoading = applicationJson === loadingApplicationJson;\n\n const shellLayout = useShellLayout({\n LeftSidePanelProps,\n leftSidePanelLayout,\n appHeader: <AppHeader loginUrl={loginUrl} />,\n });\n\n if (connectionStatus === \"rejected\") {\n console.log(\"game over, no connection to server\");\n }\n\n return isLayoutLoading ? null : (\n <ContextMenuProvider\n menuActionHandler={handleMenuAction}\n menuBuilder={buildMenuOptions}\n >\n <LayoutProvider\n {...LayoutProps}\n layout={applicationJson.layout}\n onLayoutChange={handleLayoutChange}\n >\n <DraggableLayout\n className={className}\n ref={rootRef}\n {...htmlAttributes}\n >\n {shellLayout}\n </DraggableLayout>\n </LayoutProvider>\n {children}\n </ContextMenuProvider>\n );\n};\n\nexport const Shell = ({ user, ...props }: ShellProps) => {\n return (\n // ApplicationProvider must go outside Dialog and Notification providers\n // ApplicationProvider injects the SaltProvider and this must be the root\n // SaltProvider.\n <ApplicationProvider user={user}>\n <LayoutManagementProvider>\n <DialogProvider>\n <NotificationsProvider>\n <VuuApplication {...props} user={user} />\n </NotificationsProvider>\n </DialogProvider>\n </LayoutManagementProvider>\n </ApplicationProvider>\n );\n};\n"],"names":["registerComponent","UserSettingsPanel","StackLayout","logger","useWindow","useComponentCssInjection","shellCss","useRef","useLayoutManager","useLayoutContextMenuItems","useState","useCallback","useMemo","connectionStatus","connectToServer","loadingApplicationJson","useShellLayout","jsx","AppHeader","jsxs","ContextMenuProvider","LayoutProvider","DraggableLayout","ApplicationProvider","LayoutManagementProvider","DialogProvider","NotificationsProvider"],"mappings":"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"}
|
package/cjs/{application-settings/ApplicationSettingsPanel.js → user-settings/SettingsForm.js}
RENAMED
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
4
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
7
5
|
var core = require('@salt-ds/core');
|
|
8
|
-
var styles = require('@salt-ds/styles');
|
|
9
|
-
var window = require('@salt-ds/window');
|
|
10
6
|
var React = require('react');
|
|
11
|
-
var ApplicationSettingsPanel$1 = require('./ApplicationSettingsPanel.css.js');
|
|
12
7
|
|
|
13
8
|
const isOption = (value) => typeof value === "object" && "label" in value && "label" in value;
|
|
14
9
|
const isBooleanProperty = (property) => property.type === "boolean";
|
|
15
10
|
const isStringOrNumber = (value) => typeof value === "string" || typeof value === "number";
|
|
16
11
|
const getValueAndLabel = (value) => isOption(value) ? [value.value, value.label] : [value, value];
|
|
17
|
-
|
|
12
|
+
const defaultPropertyValue = {
|
|
13
|
+
boolean: false,
|
|
14
|
+
number: 0,
|
|
15
|
+
string: ""
|
|
16
|
+
};
|
|
17
|
+
function getFormControl(property, changeHandler, selectHandler, currentValue = property.defaultValue ?? defaultPropertyValue[property.type]) {
|
|
18
18
|
if (isBooleanProperty(property)) {
|
|
19
19
|
const checked = typeof currentValue === "boolean" ? currentValue : property.defaultValue ?? false;
|
|
20
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
-
core.Switch,
|
|
22
|
-
{
|
|
23
|
-
checked,
|
|
24
|
-
label: property.label,
|
|
25
|
-
onChange: changeHandler
|
|
26
|
-
}
|
|
27
|
-
);
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Switch, { checked, onChange: changeHandler });
|
|
28
21
|
}
|
|
29
22
|
if (Array.isArray(property.values)) {
|
|
30
23
|
if (property.values.length <= 2) {
|
|
@@ -47,7 +40,14 @@ function getFormControl(property, changeHandler, selectHandler, currentValue) {
|
|
|
47
40
|
onSelectionChange: selectHandler,
|
|
48
41
|
children: property.values.map((valueOrOption) => {
|
|
49
42
|
const [value, label] = getValueAndLabel(valueOrOption);
|
|
50
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
+
core.Option,
|
|
45
|
+
{
|
|
46
|
+
value: label,
|
|
47
|
+
"data-field": property.name
|
|
48
|
+
},
|
|
49
|
+
value
|
|
50
|
+
);
|
|
51
51
|
})
|
|
52
52
|
}
|
|
53
53
|
);
|
|
@@ -58,9 +58,10 @@ function getFormControl(property, changeHandler, selectHandler, currentValue) {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
const SettingsForm = ({
|
|
61
|
-
applicationSettingsSchema,
|
|
62
|
-
applicationSettings,
|
|
63
|
-
onApplicationSettingChanged
|
|
61
|
+
settingsSchema: applicationSettingsSchema,
|
|
62
|
+
settings: applicationSettings,
|
|
63
|
+
onSettingChanged: onApplicationSettingChanged,
|
|
64
|
+
...htmlAttributes
|
|
64
65
|
}) => {
|
|
65
66
|
const getFieldNameFromEventTarget = (evt) => {
|
|
66
67
|
const fieldElement = vuuUtils.queryClosest(evt.target, "[data-field]");
|
|
@@ -85,7 +86,7 @@ const SettingsForm = ({
|
|
|
85
86
|
},
|
|
86
87
|
[onApplicationSettingChanged]
|
|
87
88
|
);
|
|
88
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: applicationSettingsSchema.properties.map((property) => /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": property.name, children: [
|
|
89
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, children: applicationSettingsSchema.properties.map((property) => /* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": property.name, children: [
|
|
89
90
|
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: property.label }),
|
|
90
91
|
getFormControl(
|
|
91
92
|
property,
|
|
@@ -95,34 +96,10 @@ const SettingsForm = ({
|
|
|
95
96
|
)
|
|
96
97
|
] }, property.name)) });
|
|
97
98
|
};
|
|
98
|
-
const classBase = "vuuApplicationSettingsPanel";
|
|
99
|
-
const ApplicationSettingsPanel = ({
|
|
100
|
-
applicationSettingsSchema,
|
|
101
|
-
applicationSettings,
|
|
102
|
-
onApplicationSettingChanged,
|
|
103
|
-
...htmlAttributes
|
|
104
|
-
}) => {
|
|
105
|
-
const targetWindow = window.useWindow();
|
|
106
|
-
styles.useComponentCssInjection({
|
|
107
|
-
testId: "vuu-application-settings-panel",
|
|
108
|
-
css: ApplicationSettingsPanel$1,
|
|
109
|
-
window: targetWindow
|
|
110
|
-
});
|
|
111
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, className: classBase, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
-
SettingsForm,
|
|
113
|
-
{
|
|
114
|
-
applicationSettingsSchema,
|
|
115
|
-
applicationSettings,
|
|
116
|
-
onApplicationSettingChanged
|
|
117
|
-
}
|
|
118
|
-
) });
|
|
119
|
-
};
|
|
120
99
|
|
|
121
|
-
exports.ApplicationSettingsPanel = ApplicationSettingsPanel;
|
|
122
100
|
exports.SettingsForm = SettingsForm;
|
|
123
|
-
exports.default = ApplicationSettingsPanel;
|
|
124
101
|
exports.getFormControl = getFormControl;
|
|
125
102
|
exports.isBooleanProperty = isBooleanProperty;
|
|
126
103
|
exports.isOption = isOption;
|
|
127
104
|
exports.isStringOrNumber = isStringOrNumber;
|
|
128
|
-
//# sourceMappingURL=
|
|
105
|
+
//# sourceMappingURL=SettingsForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Input,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n} from \"react\";\n\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function getFormControl(\n property: SettingsProperty,\n changeHandler: FormEventHandler,\n selectHandler: DropdownProps[\"onSelectionChange\"],\n currentValue: VuuRowDataItemType = property.defaultValue ??\n defaultPropertyValue[property.type]\n) {\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : property.defaultValue ?? false;\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const value = isStringOrNumber(currentValue)\n ? currentValue\n : isStringOrNumber(property.defaultValue)\n ? property.defaultValue\n : \"\";\n return <Input value={value} />;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema: applicationSettingsSchema,\n settings: applicationSettings,\n onSettingChanged: onApplicationSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and input buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onApplicationSettingChanged(fieldName, checked ?? value);\n },\n [onApplicationSettingChanged]\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onApplicationSettingChanged(fieldName, selected);\n },\n [onApplicationSettingChanged]\n );\n\n return (\n <div {...htmlAttributes}>\n {applicationSettingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {getFormControl(\n property,\n changeHandler,\n selectHandler,\n applicationSettings[property.name]\n )}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["jsx","Switch","ToggleButtonGroup","ToggleButton","Dropdown","Option","Input","queryClosest","useCallback","jsxs","FormField","FormFieldLabel"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserSettingsPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var ApplicationProvider = require('../application-provider/ApplicationProvider.js');
|
|
7
|
+
var SettingsForm = require('./SettingsForm.js');
|
|
8
|
+
var UserSettingsPanel$1 = require('./UserSettingsPanel.css.js');
|
|
9
|
+
|
|
10
|
+
const classBase = "vuuUserSettingsPanel";
|
|
11
|
+
const UserSettingsPanel = ({
|
|
12
|
+
...htmlAttributes
|
|
13
|
+
}) => {
|
|
14
|
+
const targetWindow = window.useWindow();
|
|
15
|
+
const {
|
|
16
|
+
onUserSettingChanged,
|
|
17
|
+
userSettings = {},
|
|
18
|
+
userSettingsSchema
|
|
19
|
+
} = ApplicationProvider.useApplicationSettings();
|
|
20
|
+
styles.useComponentCssInjection({
|
|
21
|
+
testId: "vuu-user-settings-panel",
|
|
22
|
+
css: UserSettingsPanel$1,
|
|
23
|
+
window: targetWindow
|
|
24
|
+
});
|
|
25
|
+
if (userSettingsSchema) {
|
|
26
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlAttributes, className: classBase, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
27
|
+
SettingsForm.SettingsForm,
|
|
28
|
+
{
|
|
29
|
+
settings: userSettings,
|
|
30
|
+
settingsSchema: userSettingsSchema,
|
|
31
|
+
onSettingChanged: onUserSettingChanged
|
|
32
|
+
}
|
|
33
|
+
) });
|
|
34
|
+
} else {
|
|
35
|
+
console.warn("no settingsSchema provided to UserSettingsPanel");
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.UserSettingsPanel = UserSettingsPanel;
|
|
41
|
+
//# sourceMappingURL=UserSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserSettingsPanel.js","sources":["../../src/user-settings/UserSettingsPanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport { useApplicationSettings } from \"../application-provider\";\nimport { SettingsForm } from \"./SettingsForm\";\n\nimport userSettingsPanelCss from \"./UserSettingsPanel.css\";\n\nexport type UserSettingsPanelProps = HTMLAttributes<HTMLDivElement>;\n\nconst classBase = \"vuuUserSettingsPanel\";\n\nexport const UserSettingsPanel = ({\n ...htmlAttributes\n}: UserSettingsPanelProps) => {\n const targetWindow = useWindow();\n\n const {\n onUserSettingChanged,\n userSettings = {},\n userSettingsSchema,\n } = useApplicationSettings();\n\n useComponentCssInjection({\n testId: \"vuu-user-settings-panel\",\n css: userSettingsPanelCss,\n window: targetWindow,\n });\n\n // Without a schema, we can't render a form\n // We could render a list of input boxes but lets require a schema for now.\n if (userSettingsSchema) {\n return (\n <div {...htmlAttributes} className={classBase}>\n <SettingsForm\n settings={userSettings}\n settingsSchema={userSettingsSchema}\n onSettingChanged={onUserSettingChanged}\n />\n </div>\n );\n } else {\n console.warn(\"no settingsSchema provided to UserSettingsPanel\");\n return null;\n }\n};\n"],"names":["useWindow","useApplicationSettings","useComponentCssInjection","userSettingsPanelCss","jsx","SettingsForm"],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,sBAAA,CAAA;AAEX,MAAM,oBAAoB,CAAC;AAAA,EAChC,GAAG,cAAA;AACL,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAE/B,EAAM,MAAA;AAAA,IACJ,oBAAA;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,kBAAA;AAAA,MACEC,0CAAuB,EAAA,CAAA;AAE3B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAID,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,SAClC,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACC,yBAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,YAAA;AAAA,QACV,cAAgB,EAAA,kBAAA;AAAA,QAChB,gBAAkB,EAAA,oBAAA;AAAA,OAAA;AAAA,KAEtB,EAAA,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,OAAA,CAAQ,KAAK,iDAAiD,CAAA,CAAA;AAC9D,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;"}
|
|
@@ -5,13 +5,10 @@ const Guest = {
|
|
|
5
5
|
token: ""
|
|
6
6
|
};
|
|
7
7
|
const ApplicationContext = createContext({
|
|
8
|
-
|
|
8
|
+
onUserSettingChanged: (propertyName) => console.warn(
|
|
9
9
|
`Cannot change setting '${propertyName}'.
|
|
10
10
|
Did you forget to declare an ApplicationProvider ?`
|
|
11
11
|
),
|
|
12
|
-
settings: {
|
|
13
|
-
themeMode: "light"
|
|
14
|
-
},
|
|
15
12
|
user: Guest
|
|
16
13
|
});
|
|
17
14
|
|