diff --git a/notes-workspace.html b/notes-workspace.html index 0a57277..8b4a7a2 100644 --- a/notes-workspace.html +++ b/notes-workspace.html @@ -282,6 +282,18 @@ return []; } + function toBoolFlag(value) { + if (typeof value === 'boolean') return value; + if (typeof value === 'number') return value !== 0; + if (typeof value === 'string') { + const v = value.trim().toLowerCase(); + if (!v) return false; + if (['false', '0', 'no', 'off', 'null', 'undefined'].includes(v)) return false; + if (['true', '1', 'yes', 'on'].includes(v)) return true; + } + return Boolean(value); + } + function buildNotePayload() { const title = titleInput.value.trim() || 'Untitled'; const bodyPlain = bodyInput.value.trim(); @@ -340,15 +352,15 @@ } function passFilter(note) { - if (Boolean(note?.delete)) return false; + if (toBoolFlag(note?.delete)) return false; const wantHidden = hiddenMode.value === 'hidden'; - const isHidden = Boolean(note?.hidden); + const isHidden = toBoolFlag(note?.hidden); if (wantHidden !== isHidden) return false; - if (currentFilter === 'myshared' && !(isMine(note) && Boolean(note?.shared))) return false; + if (currentFilter === 'myshared' && !(isMine(note) && toBoolFlag(note?.shared))) return false; if (currentFilter === 'sharedwithme' && !isSharedWithCurrentUser(note)) return false; - if (currentFilter === 'job' && !(Boolean(note?.job_note) || noteType(note) === 'job')) return false; + if (currentFilter === 'job' && !(toBoolFlag(note?.job_note) || noteType(note) === 'job')) return false; if (currentFilter === 'manager' && noteType(note) !== 'manager') return false; if (currentFilter === 'personal' && noteType(note) !== 'personal') return false; @@ -382,8 +394,9 @@ notesList.innerHTML = filtered.map((note) => { const mine = isMine(note); const sharedWithMe = isSharedWithCurrentUser(note); - const badge = sharedWithMe ? 'Shared w/ me' : note.shared ? 'Shared by me' : 'Private'; - const tone = sharedWithMe ? 'text-cyan-300' : note.shared ? 'text-emerald-300' : 'text-slate-300'; + const sharedByMe = toBoolFlag(note?.shared); + const badge = sharedWithMe ? 'Shared w/ me' : sharedByMe ? 'Shared by me' : 'Private'; + const tone = sharedWithMe ? 'text-cyan-300' : sharedByMe ? 'text-emerald-300' : 'text-slate-300'; const preview = String(note.body_plain || '').replace(/\s+/g, ' ').trim().slice(0, 160); const selected = selectedNote?.id === note.id ? 'active' : ''; return ` @@ -438,7 +451,7 @@ saveBtn.disabled = false; hideBtn.disabled = false; deleteBtn.disabled = false; - hideBtn.textContent = Boolean(note.hidden) ? 'Unhide' : 'Hide'; + hideBtn.textContent = toBoolFlag(note.hidden) ? 'Unhide' : 'Hide'; } async function updatePbStatus() { @@ -523,7 +536,7 @@ await ensurePocketBaseClient(); ensureLoggedIn(); const payload = buildNotePayload(); - payload.hidden = Boolean(selectedNote.hidden); + payload.hidden = toBoolFlag(selectedNote.hidden); const record = await pb.collection(NOTES_COLLECTION).update(selectedNote.id, payload); await loadNotes(); selectNote(record); @@ -536,7 +549,7 @@ await ensurePocketBaseClient(); ensureLoggedIn(); const updated = await pb.collection(NOTES_COLLECTION).update(selectedNote.id, { - hidden: !Boolean(selectedNote.hidden), + hidden: !toBoolFlag(selectedNote.hidden), }); await loadNotes(); selectNote(updated);