diff --git a/src/components/QuickEntry.tsx b/src/components/QuickEntry.tsx index 43435a7..d29934d 100644 --- a/src/components/QuickEntry.tsx +++ b/src/components/QuickEntry.tsx @@ -262,32 +262,31 @@ export const QuickEntry: Component = () => {
setIsOpen(false)} />
-
- - - setInput(e.currentTarget.value)} - onKeyDown={(e) => e.key === "Enter" && parseAndAdd()} - placeholder="Task title... type /p1-10 for priority and /u1-10 for urgency" - class="border-none shadow-none focus-visible:ring-0 text-lg" - /> - - -
- - {/* Scrollable content area */} + {/* Scrollable content area - includes header so entire card can scroll on mobile */}
+
+ + + setInput(e.currentTarget.value)} + onKeyDown={(e) => e.key === "Enter" && parseAndAdd()} + placeholder="Task title... type /p1-10 for priority and /u1-10 for urgency" + class="border-none shadow-none focus-visible:ring-0 text-lg" + /> + + +
{/* Row 1: Priority, Size, Urgency */}
diff --git a/src/store/index.ts b/src/store/index.ts index ecdefd6..380ee15 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -371,6 +371,10 @@ export const subscribeToRealtime = async () => { // Check if it's a template const isTemplate = e.record.tags?.includes("__template__"); if (isTemplate) { + // Check if template already exists (from optimistic update) + const templateExists = store.templates?.some(t => t.id === e.record.id); + if (templateExists) return; + let meta: any = {}; try { meta = JSON.parse(e.record.content || "{}"); } catch (e) { } const newTemplate: TaskTemplate = { @@ -1070,7 +1074,11 @@ export const addTemplate = async (template: Omit) => { }); const newTemplate = { ...template, id: record.id }; - setStore("templates", (prev) => [...(prev || []), newTemplate]); + // Check if already added by realtime subscription + setStore("templates", (prev) => { + if (prev?.some(t => t.id === record.id)) return prev; + return [...(prev || []), newTemplate]; + }); return newTemplate; } catch (err) { console.error("Failed to add template:", err);