+
{filteredTemplates.length > 0 ? (
filteredTemplates.map((template) => (
handleTemplateClick(template)}>
diff --git a/app/src/store.ts b/app/src/store.ts
index 09fcba42..2220c827 100644
--- a/app/src/store.ts
+++ b/app/src/store.ts
@@ -1,4 +1,5 @@
import { create } from "zustand";
+import { persist } from "zustand/middleware";
interface Template {
id: string;
@@ -22,22 +23,34 @@ interface TemplateStore {
selectedTags: string[];
addSelectedTag: (tag: string) => void;
removeSelectedTag: (tag: string) => void;
+ view: "grid" | "rows";
+ setView: (view: "grid" | "rows") => void;
}
-export const useStore = create((set) => ({
- templates: [],
- setTemplates: (templates) => set({ templates }),
- searchQuery: "",
- setSearchQuery: (searchQuery) => set({ searchQuery }),
- selectedTags: [],
- addSelectedTag: (tag) =>
- set((state) => ({
- selectedTags: state.selectedTags.includes(tag)
- ? state.selectedTags
- : [...state.selectedTags, tag],
- })),
- removeSelectedTag: (tag) =>
- set((state) => ({
- selectedTags: state.selectedTags.filter((t) => t !== tag),
- })),
-}));
+export const useStore = create()(
+ persist(
+ (set) => ({
+ templates: [],
+ setTemplates: (templates) => set({ templates }),
+ searchQuery: "",
+ setSearchQuery: (searchQuery) => set({ searchQuery }),
+ selectedTags: [],
+ addSelectedTag: (tag) =>
+ set((state) => ({
+ selectedTags: state.selectedTags.includes(tag)
+ ? state.selectedTags
+ : [...state.selectedTags, tag],
+ })),
+ removeSelectedTag: (tag) =>
+ set((state) => ({
+ selectedTags: state.selectedTags.filter((t) => t !== tag),
+ })),
+ view: "grid",
+ setView: (view) => set({ view }),
+ }),
+ {
+ name: "template-store",
+ partialize: (state) => ({ view: state.view }), // Only persist the view preference
+ }
+ )
+);