refactor(desktop): tidy composer draft persistence

- DRY the duplicated submit-restore blocks into dispatchSubmit()
- inline localStorage access (drop browserStorage indirection);
  clearPersistedComposerDraft delegates to write('')
- drop stale per-scope-stash comment in use-session-actions
This commit is contained in:
Brooklyn Nicholson
2026-06-10 23:47:32 -05:00
parent c710868fbc
commit 292192f7d7
3 changed files with 37 additions and 75 deletions
+8 -31
View File
@@ -26,53 +26,30 @@ export const $composerTerminalSelections = atom<Record<string, string>>({})
// session lifecycle. One storage key makes the draft survive app reloads.
export const COMPOSER_DRAFT_STORAGE_KEY = 'hermes:composer-draft:v2'
function browserStorage(): Storage | null {
if (typeof window === 'undefined') {
return null
}
try {
return window.localStorage
} catch {
return null
}
}
export function readPersistedComposerDraft(): string {
try {
return browserStorage()?.getItem(COMPOSER_DRAFT_STORAGE_KEY) ?? ''
return window.localStorage.getItem(COMPOSER_DRAFT_STORAGE_KEY) ?? ''
} catch {
return ''
}
}
// Empty drafts remove the key. Persistence is a safety net only — storage
// errors (quota, private mode) must never break typing or submission.
export function writePersistedComposerDraft(value: string) {
try {
const storage = browserStorage()
if (!storage) {
return
}
if (value.length === 0) {
storage.removeItem(COMPOSER_DRAFT_STORAGE_KEY)
if (value) {
window.localStorage.setItem(COMPOSER_DRAFT_STORAGE_KEY, value)
} else {
storage.setItem(COMPOSER_DRAFT_STORAGE_KEY, value)
window.localStorage.removeItem(COMPOSER_DRAFT_STORAGE_KEY)
}
} catch {
// Draft persistence is a safety net only; storage quota/private-mode errors
// must never break typing or submission.
}
}
export function clearPersistedComposerDraft() {
try {
browserStorage()?.removeItem(COMPOSER_DRAFT_STORAGE_KEY)
} catch {
// Best-effort only.
}
}
export const clearPersistedComposerDraft = () => writePersistedComposerDraft('')
export function setComposerDraft(value: string) {
$composerDraft.set(value)
}