Remove unsolicited draft controls and persistent guidance

This commit is contained in:
aiagent
2026-10-19 22:55:43 -07:00
parent 357502d1c9
commit ac8c154eff
8 changed files with 17 additions and 13 deletions
+3 -3
View File
@@ -3,9 +3,9 @@ import { clearDraft, clearIfUnchanged, draftKey, readDraft, writeDraft } from '.
export function useLocalDraft<T>(scope: string[] | null, empty: T, valid: (value: unknown) => value is T, olderVersions = false) {
const identity=JSON.stringify(scope), ref=useRef<{identity:string;value:T;error:string;loaded:boolean;persisted:string|null} | null>(null)
const [, redraw]=useState(0)
if(ref.current?.identity!==identity){let value=empty,error='',persisted=null;try{if(scope){value=readDraft(window.localStorage,scope,empty,valid,olderVersions);persisted=window.localStorage.getItem(draftKey(scope))}else error='实例或版本信息尚未就绪,暂不能保存或发送。'}catch{error='本地草稿读取失败,请先复制输入;暂不能确认已保存。'}ref.current={identity,value,error,loaded:!error,persisted}}
if(ref.current?.identity!==identity){let value=empty,error='',persisted=null;try{if(scope){value=readDraft(window.localStorage,scope,empty,valid,olderVersions);persisted=window.localStorage.getItem(draftKey(scope))}else error='实例或版本信息尚未就绪,暂不能保存或发送。'}catch{error='草稿读取失败,请先复制输入。'}ref.current={identity,value,error,loaded:!error,persisted}}
const record=ref.current!
function save(value:T){record.value=value;try{if(!scope)throw Error();writeDraft(window.localStorage,scope,value);record.persisted=window.localStorage.getItem(draftKey(scope));record.error='';record.loaded=true;redraw(n=>n+1);return true}catch{record.error='本地保存失败,请复制草稿;刷新或退出可能丢失。';record.loaded=false;redraw(n=>n+1);return false}}
function clear(allVersions=false,userRequested=false){try{if(!scope)throw Error();if(allVersions||userRequested)clearDraft(window.localStorage,scope,allVersions);else if(!clearIfUnchanged(window.localStorage,scope,record.persisted)){record.error='已提交;保留了随后编辑的本地草稿。';redraw(n=>n+1);return false}record.value=empty;record.persisted=window.localStorage.getItem(draftKey(scope));record.error='';record.loaded=true;redraw(n=>n+1);return true}catch{record.error='本地草稿清除失败,旧草稿可能仍保留;请勿重复提交。';record.loaded=false;redraw(n=>n+1);return false}}
function save(value:T){record.value=value;try{if(!scope)throw Error();writeDraft(window.localStorage,scope,value);record.persisted=window.localStorage.getItem(draftKey(scope));record.error='';record.loaded=true;redraw(n=>n+1);return true}catch{record.error='草稿保存失败,请复制后重试。';record.loaded=false;redraw(n=>n+1);return false}}
function clear(allVersions=false,userRequested=false){try{if(!scope)throw Error();if(allVersions||userRequested)clearDraft(window.localStorage,scope,allVersions);else if(!clearIfUnchanged(window.localStorage,scope,record.persisted)){record.error='';redraw(n=>n+1);return false}record.value=empty;record.persisted=window.localStorage.getItem(draftKey(scope));record.error='';record.loaded=true;redraw(n=>n+1);return true}catch{record.error='草稿清除失败,请勿重复提交。';record.loaded=false;redraw(n=>n+1);return false}}
return {value:record.value,error:record.error,save,clear,ready:Boolean(scope)&&record.loaded}
}