From 4602269dd82634efe1bf1efebc019904c079e01b Mon Sep 17 00:00:00 2001 From: daniel31x13 Date: Mon, 9 Sep 2024 19:05:30 -0400 Subject: [PATCH] add number of columns slider --- components/ViewDropdown.tsx | 52 ++++++++++++++++++++--------------- public/locales/en/common.json | 4 ++- store/localSettings.ts | 12 +++++++- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/components/ViewDropdown.tsx b/components/ViewDropdown.tsx index e1c728e..9202596 100644 --- a/components/ViewDropdown.tsx +++ b/components/ViewDropdown.tsx @@ -13,11 +13,9 @@ export default function ViewDropdown({ viewMode, setViewMode }: Props) { const { settings, updateSettings } = useLocalSettingsStore((state) => state); const { t } = useTranslation(); - const onChangeViewMode = ( - e: React.MouseEvent, - mode: ViewMode - ) => { + const onChangeViewMode = (mode: ViewMode) => { setViewMode(mode); + updateSettings({ viewMode }); }; const toggleShowSetting = (setting: keyof typeof settings.show) => { @@ -28,9 +26,9 @@ export default function ViewDropdown({ viewMode, setViewMode }: Props) { updateSettings({ show: newShowSettings }); }; - useEffect(() => { - updateSettings({ viewMode }); - }, [viewMode, updateSettings]); + const onColumnsChange = (e: React.ChangeEvent) => { + updateSettings({ columns: Number(e.target.value) }); + }; return (
@@ -48,15 +46,14 @@ export default function ViewDropdown({ viewMode, setViewMode }: Props) { )}
-
    +

      {t("view")}

      -
      +
      -

      {t("show")}

      +

      {t("show")}

      {Object.entries(settings.show) .filter((e) => settings.viewMode === ViewMode.List // Hide tags, image, icon, and description checkboxes in list view @@ -100,11 +97,7 @@ export default function ViewDropdown({ viewMode, setViewMode }: Props) { ) .map(([key, value]) => (
    • -
    • ))} +

      + {t("columns")}:{" "} + {settings.columns === 0 ? t("default") : settings.columns} +

      +
      + onColumnsChange(e)} + className="range range-xs" + step="1" + /> +
    ); diff --git a/public/locales/en/common.json b/public/locales/en/common.json index dcc4306..bcc0448 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -391,5 +391,7 @@ "no_tags": "No tags.", "no_description_provided": "No description provided.", "change_icon": "Change Icon", - "upload_preview_image": "Upload Preview Image" + "upload_preview_image": "Upload Preview Image", + "columns": "Columns", + "default": "Default" } \ No newline at end of file diff --git a/store/localSettings.ts b/store/localSettings.ts index 9b576ce..57254d0 100644 --- a/store/localSettings.ts +++ b/store/localSettings.ts @@ -14,6 +14,7 @@ type LocalSettings = { collection: boolean; date: boolean; }; + columns: number; sortBy?: Sort; }; @@ -37,10 +38,11 @@ const useLocalSettingsStore = create((set) => ({ collection: true, date: true, }, + columns: 0, sortBy: Sort.DateNewestFirst, }, updateSettings: (newSettings) => { - const { theme, viewMode, sortBy, show } = newSettings; + const { theme, viewMode, sortBy, show, columns } = newSettings; if (theme !== undefined && theme !== localStorage.getItem("theme")) { localStorage.setItem("theme", theme); @@ -58,6 +60,10 @@ const useLocalSettingsStore = create((set) => ({ localStorage.setItem("sortBy", sortBy.toString()); } + if (columns !== undefined) { + localStorage.setItem("columns", columns.toString()); + } + const currentShowString = localStorage.getItem("show"); const newShowString = show ? JSON.stringify(show) : currentShowString; @@ -80,6 +86,9 @@ const useLocalSettingsStore = create((set) => ({ const viewMode = localStorage.getItem("viewMode") || "card"; localStorage.setItem("viewMode", viewMode); + const columns = parseInt(localStorage.getItem("columns") || "0"); + localStorage.setItem("columns", columns.toString()); + const storedShow = localStorage.getItem("show"); const show = storedShow ? JSON.parse(storedShow) @@ -100,6 +109,7 @@ const useLocalSettingsStore = create((set) => ({ theme, viewMode, show, + columns, sortBy: useLocalSettingsStore.getState().settings.sortBy, }, });