"use client"; import { createNewLeaflet } from "actions/createNewLeaflet"; import { createNewLeafletFromTemplate } from "actions/createNewLeafletFromTemplate"; import { ActionButton } from "components/ActionBar/ActionButton"; import { AddTiny } from "components/Icons/AddTiny"; import { BlockCanvasPageSmall } from "components/Icons/BlockCanvasPageSmall"; import { BlockDocPageSmall } from "components/Icons/BlockDocPageSmall"; import { TemplateSmall } from "components/Icons/TemplateSmall"; import { Menu, MenuItem } from "components/Layout"; import { useIsMobile } from "src/hooks/isMobile"; import { create } from "zustand"; import { combine, createJSONStorage, persist } from "zustand/middleware"; export const useTemplateState = create( persist( combine( { templates: [] as { id: string; name: string }[], }, (set) => ({ removeTemplate: (template: { id: string }) => set((state) => { return { templates: state.templates.filter((t) => t.id !== template.id), }; }), addTemplate: (template: { id: string; name: string }) => set((state) => { if (state.templates.find((t) => t.id === template.id)) return state; return { templates: [...state.templates, template] }; }), }), ), { name: "home-templates", storage: createJSONStorage(() => localStorage), }, ), ); export const CreateNewLeafletButton = (props: {}) => { let isMobile = useIsMobile(); let templates = useTemplateState((s) => s.templates); let openNewLeaflet = (id: string) => { if (isMobile) { window.location.href = `/${id}?focusFirstBlock`; } else { window.open(`/${id}?focusFirstBlock`, "_blank"); } }; return ( label="New" /> } > { let id = await createNewLeaflet({ pageType: "doc", redirectUser: false, }); openNewLeaflet(id); }} > {" "}
New Doc
A good ol' text document
{ let id = await createNewLeaflet({ pageType: "canvas", redirectUser: false, }); openNewLeaflet(id); }} >
New Canvas
A digital whiteboard
{templates.length > 0 && (
)} {templates.map((t) => { return ( { let id = await createNewLeafletFromTemplate(t.id, false); if (!id.error) openNewLeaflet(id.id); }} > New {t.name} ); })}
); };