From 580e5a6a537136aa34d1e9d2ef22be975e1e94ff Mon Sep 17 00:00:00 2001 From: Deyan Nenov Date: Tue, 16 Apr 2024 13:46:46 +0100 Subject: [PATCH 1/3] added viewMode preferences - added preferences to track and persist across sessions the user preferences for the view mode of the Recent and Sample files --- package-lock.json | 48 +++++++++---------- package.json | 2 +- src/App.js | 5 +- src/components/MainContent.jsx | 24 ++++++++-- .../Recent/CustomAuthorCellRenderer.jsx | 2 - src/components/Recent/PageRecent.jsx | 24 ++++++++-- src/components/Samples/PageSamples.jsx | 25 ++++++++-- src/components/SettingsContext.jsx | 25 ++++++++++ src/functions/utility.js | 10 ++++ 9 files changed, 127 insertions(+), 38 deletions(-) create mode 100644 src/components/SettingsContext.jsx diff --git a/package-lock.json b/package-lock.json index 702c5b6..a96dbb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@dynamods/dynamo-home", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dynamods/dynamo-home", - "version": "1.0.6", + "version": "1.0.7", "license": "MIT", "dependencies": { "react": "^18.2.0", @@ -4327,13 +4327,13 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -4341,7 +4341,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -4822,9 +4822,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -6395,17 +6395,17 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6627,9 +6627,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -11561,9 +11561,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -13426,9 +13426,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10", diff --git a/package.json b/package.json index 933c08e..3a8b174 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dynamods/dynamo-home", - "version": "1.0.6", + "version": "1.0.7", "description": "Dynamo Home", "author": "Autodesk Inc.", "main": "index.js", diff --git a/src/App.js b/src/App.js index 2dd5c63..63d9511 100644 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,7 @@ import { useState, useEffect } from 'react'; import { IntlProvider } from 'react-intl'; import { getMessagesForLocale } from './localization/localization.js'; import { LayoutContainer } from './components/LayoutContainer.jsx'; +import { SettingsProvider } from './components/SettingsContext.jsx'; function App() { const [locale, setLocale] = useState('en'); @@ -23,7 +24,9 @@ function App() { return ( - + + + ); } diff --git a/src/components/MainContent.jsx b/src/components/MainContent.jsx index 8534d4f..4ca2050 100644 --- a/src/components/MainContent.jsx +++ b/src/components/MainContent.jsx @@ -6,19 +6,35 @@ import { FormattedMessage } from 'react-intl'; export function MainContent({ selectedSidebarItem }){ const [isDisabled, setIsDisabled] = useState(false); + const [settings, setSettings] = useState(null); const setShowStartPageChanged = (showStartPage) => { setIsDisabled(!showStartPage); }; + const setHomePageSettings = (settingsJson) => { + try{ + if (settingsJson) { + const settingsObject = JSON.parse(settingsJson); + setSettings(settingsObject); + } else { + console.log(`Received null or empty settings`); + } + }catch(exeption){ + console.log($`Failed to set the HomePage settings with the following error ${exception}`); + } + } + useEffect(() => { - // Set the setShowStartPageChanged global function + // Set global functions window.setShowStartPageChanged = setShowStartPageChanged; + window.setHomePageSettings = setHomePageSettings; return () => { delete window.setShowStartPageChanged; + delete window.setHomePageSettings; }; - }, [isDisabled]); + }, [isDisabled, settings]); return ( <> @@ -31,10 +47,10 @@ export function MainContent({ selectedSidebarItem }){ )}
- +
- +
diff --git a/src/components/Recent/CustomAuthorCellRenderer.jsx b/src/components/Recent/CustomAuthorCellRenderer.jsx index 9a2f155..7cbe81f 100644 --- a/src/components/Recent/CustomAuthorCellRenderer.jsx +++ b/src/components/Recent/CustomAuthorCellRenderer.jsx @@ -15,8 +15,6 @@ export const CustomAuthorCellRenderer = ({ value, row }) => { const author = value; const isOldFormat = author === intl.formatMessage({ id: 'recent.item.old.format' }); - console.log(author); - console.log(isOldFormat); return (

{author}

diff --git a/src/components/Recent/PageRecent.jsx b/src/components/Recent/PageRecent.jsx index 827f6fd..34b9ee6 100644 --- a/src/components/Recent/PageRecent.jsx +++ b/src/components/Recent/PageRecent.jsx @@ -6,12 +6,15 @@ import { CustomLocationCellRenderer } from './CustomLocationCellRenderer.jsx'; import { CustomAuthorCellRenderer } from "./CustomAuthorCellRenderer.jsx"; import { GraphTable } from './GraphTable.jsx'; import { GridViewIcon, ListViewIcon } from '../Common/CustomIcons.jsx'; -import { openFile } from '../../functions/utility.js'; +import { openFile, saveHomePageSettings } from '../../functions/utility.js'; import { FormattedMessage } from 'react-intl'; import { Tooltip } from '../Common/Tooltip.jsx'; +import { useSettings } from '../SettingsContext.jsx'; -export function RecentPage ({ setIsDisabled }){ - const [viewMode, setViewMode] = useState('grid'); +export function RecentPage ({ setIsDisabled, recentPageViewMode }){ + const { settings, updateSettings } = useSettings(); + const [viewMode, setViewMode] = useState(recentPageViewMode); + const [initialized, setInitialized] = useState(false); // Set a placeholder for the graphs which will be used differently during dev and prod let initialGraphs = []; @@ -48,6 +51,21 @@ export function RecentPage ({ setIsDisabled }){ }; }, []); + useEffect(() => { + // Set the viewMode based on the HomePage preferences + setViewMode(recentPageViewMode); + }, [recentPageViewMode]); + + useEffect(() => { + if (initialized || recentPageViewMode !== viewMode) { + setInitialized(true); + updateSettings({ recentPageViewMode: viewMode }); + + // Send settings to Dynamo to save + saveHomePageSettings({ ...settings, recentPageViewMode: viewMode }); + } + }, [viewMode]); + // This variable defins the table structure displaying the graphs const columns = React.useMemo(() => [ { diff --git a/src/components/Samples/PageSamples.jsx b/src/components/Samples/PageSamples.jsx index 1db5f78..07ff668 100644 --- a/src/components/Samples/PageSamples.jsx +++ b/src/components/Samples/PageSamples.jsx @@ -6,11 +6,14 @@ import { GridViewIcon, ListViewIcon } from '../Common/CustomIcons.jsx'; import { Tooltip } from '../Common/Tooltip.jsx'; import { CustomSampleFirstCellRenderer } from "./CustomSampleFirstCellRenderer.jsx"; import { SamplesGrid } from './SamplesGrid.jsx'; -import { openFile, showSamplesFilesInFolder } from '../../functions/utility.js'; +import { openFile, showSamplesFilesInFolder, saveHomePageSettings } from '../../functions/utility.js'; +import { useSettings } from '../SettingsContext.jsx'; -export function SamplesPage (){ - const [viewMode, setViewMode] = useState('grid'); +export function SamplesPage ({ samplesViewMode }){ + const { settings, updateSettings } = useSettings(); + const [viewMode, setViewMode] = useState(samplesViewMode); const [collapsedRows, setCollapsedRows] = useState({}); + const [initialized, setInitialized] = useState(false); // Set a placeholder for the graphs which will be used differently during dev and prod let initialSamples = []; @@ -51,6 +54,22 @@ export function SamplesPage (){ }; }, []); + + useEffect(() => { + // Set the viewMode based on the HomePage preferences + setViewMode(samplesViewMode); + }, [samplesViewMode]); + + useEffect(() => { + if (initialized || samplesViewMode !== viewMode) { + setInitialized(true); + updateSettings({ samplesViewMode: viewMode }); + + // Send settings to Dynamo to save + saveHomePageSettings({ ...settings, samplesViewMode: viewMode }); + } + }, [viewMode]); + // This variable defins the table structure displaying the graphs const columns = React.useMemo(() => [ { diff --git a/src/components/SettingsContext.jsx b/src/components/SettingsContext.jsx new file mode 100644 index 0000000..4ce8a9a --- /dev/null +++ b/src/components/SettingsContext.jsx @@ -0,0 +1,25 @@ +import React, { createContext, useContext, useState, useEffect } from 'react'; + +// Create the context +const SettingsContext = createContext(); + +// Provider component that wraps your app components +export function SettingsProvider({ children }) { + const [settings, setSettings] = useState({}); + + // Function to update settings + const updateSettings = (newSettings) => { + setSettings(prev => ({ ...prev, ...newSettings })); + }; + + return ( + + {children} + + ); +} + +// Custom hook to use settings +export function useSettings() { + return useContext(SettingsContext); +} \ No newline at end of file diff --git a/src/functions/utility.js b/src/functions/utility.js index 69ebef7..9152733 100644 --- a/src/functions/utility.js +++ b/src/functions/utility.js @@ -48,3 +48,13 @@ export function showSamplesFilesInFolder() { chrome.webview.hostObjects.scriptObject.ShowSampleFilesInFolder(); } } + +/** + * A call to a backend function requesting to save the current HomePage settings + */ +export function saveHomePageSettings(settings) { + if (chrome.webview !== undefined) { + const settingsJson = JSON.stringify(settings); + chrome.webview.hostObjects.scriptObject.SaveSettings(settingsJson); + } +} From 554fa7683478fa79ed7ec931bd278516a4febaf2 Mon Sep 17 00:00:00 2001 From: Deyan Nenov Date: Tue, 16 Apr 2024 13:54:23 +0100 Subject: [PATCH 2/3] Update SettingsContext.jsx --- src/components/SettingsContext.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/SettingsContext.jsx b/src/components/SettingsContext.jsx index 4ce8a9a..3572f89 100644 --- a/src/components/SettingsContext.jsx +++ b/src/components/SettingsContext.jsx @@ -3,11 +3,11 @@ import React, { createContext, useContext, useState, useEffect } from 'react'; // Create the context const SettingsContext = createContext(); -// Provider component that wraps your app components +// Provider component that wraps the app components export function SettingsProvider({ children }) { const [settings, setSettings] = useState({}); - // Function to update settings + // Update settings const updateSettings = (newSettings) => { setSettings(prev => ({ ...prev, ...newSettings })); }; @@ -19,7 +19,7 @@ export function SettingsProvider({ children }) { ); } -// Custom hook to use settings +// Use settings hook export function useSettings() { return useContext(SettingsContext); -} \ No newline at end of file +} From 0543c761fbc6d8159d71ac39f64e1434a8a3de3e Mon Sep 17 00:00:00 2001 From: reddyashish <43763136+reddyashish@users.noreply.github.com> Date: Tue, 14 May 2024 05:03:31 -0700 Subject: [PATCH 3/3] bump version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 37b2705..35078b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@dynamods/dynamo-home", - "version": "1.0.9", + "version": "1.0.10", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 4611877..d21c825 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dynamods/dynamo-home", - "version": "1.0.9", + "version": "1.0.10", "description": "Dynamo Home", "author": "Autodesk Inc.", "main": "index.js",