diff --git a/components/ViewDropdown.tsx b/components/ViewDropdown.tsx index df2ffcd..2d2ea4a 100644 --- a/components/ViewDropdown.tsx +++ b/components/ViewDropdown.tsx @@ -1,62 +1,71 @@ -import React, { Dispatch, SetStateAction } from "react"; -import { ViewMode } from "@/types/global"; +import React, {Dispatch, SetStateAction, useEffect, useState} from "react"; +import useLocalSettingsStore from "@/store/localSettings"; + +import {ViewMode} from "@/types/global"; type Props = { - viewMode: ViewMode; - setViewMode: Dispatch>; + viewMode: string; + setViewMode: Dispatch>; }; -export default function ViewDropdown({ viewMode, setViewMode }: Props) { - let viewModes: Array<{ mode: ViewMode; name: string }> = [ - { mode: ViewMode.Default, name: "Default" }, - { mode: ViewMode.Compact, name: "Grid" }, - { mode: ViewMode.List, name: "List" }, - ]; +export default function ViewDropdown({viewMode, setViewMode}: Props) { + const {updateSettings} = useLocalSettingsStore(); - return ( -
- - - -
- ); + const onChangeViewMode = (e: React.MouseEvent, viewMode: ViewMode) => { + setViewMode(viewMode); + } + + useEffect(() => { + updateSettings({viewMode: viewMode as ViewMode}); + }, [viewMode]); + + return ( +
+ + + +
+ ); } diff --git a/pages/links/index.tsx b/pages/links/index.tsx index c7f31ba..0c4670d 100644 --- a/pages/links/index.tsx +++ b/pages/links/index.tsx @@ -16,7 +16,7 @@ import ListView from "@/components/LinkViews/ListView"; export default function Links() { const { links } = useLinkStore(); - const [viewMode, setViewMode] = useState(ViewMode.Default); + const [viewMode, setViewMode] = useState(localStorage.getItem('viewMode') || ViewMode.Default); const [sortBy, setSortBy] = useState(Sort.DateNewestFirst); useLinks({ sort: sortBy }); @@ -27,6 +27,7 @@ export default function Links() { [ViewMode.List]: ListView, }; + // @ts-ignore const Component = components[viewMode]; return ( diff --git a/store/localSettings.ts b/store/localSettings.ts index 1ddcdcc..9ef126d 100644 --- a/store/localSettings.ts +++ b/store/localSettings.ts @@ -1,7 +1,9 @@ import { create } from "zustand"; +import {ViewMode} from "@/types/global"; type LocalSettings = { - theme: string; + theme?: string; + viewMode?: string }; type LocalSettingsStore = { @@ -13,6 +15,7 @@ type LocalSettingsStore = { const useLocalSettingsStore = create((set) => ({ settings: { theme: "", + viewMode: "", }, updateSettings: async (newSettings) => { if ( @@ -26,6 +29,15 @@ const useLocalSettingsStore = create((set) => ({ document.querySelector("html")?.setAttribute("data-theme", localTheme); } + if ( + newSettings.viewMode && + newSettings.viewMode !== localStorage.getItem("viewMode") + ) { + localStorage.setItem("viewMode", newSettings.viewMode); + + // const localTheme = localStorage.getItem("viewMode") || ""; + } + set((state) => ({ settings: { ...state.settings, ...newSettings } })); }, setSettings: async () => { diff --git a/types/global.ts b/types/global.ts index e1331f3..c2356b5 100644 --- a/types/global.ts +++ b/types/global.ts @@ -58,9 +58,9 @@ export interface PublicCollectionIncludingLinks extends Collection { } export enum ViewMode { - Default, - Compact, - List, + Default = "default", + Compact = "compact", + List = "list", } export enum Sort {