完成50%

This commit is contained in:
2026-07-23 08:23:59 +08:00
parent 9b0ad62df4
commit f1edc6b533
218 changed files with 24318 additions and 5514 deletions
+34
View File
@@ -0,0 +1,34 @@
// 放弃表单确认的唯一生命周期所有者。页面只负责把 visible 同步到自己的 ref
// 重复返回复用同一 Promise,确认、取消或卸载都会先清空内部状态再释放等待者。
export const createDiscardConfirmation = (setVisible) => {
if (typeof setVisible !== "function") {
throw new TypeError("createDiscardConfirmation 的 setVisible 必须是函数");
}
let pendingPromise = null;
let resolvePending = null;
const settle = (confirmed) => {
const resolve = resolvePending;
resolvePending = null;
pendingPromise = null;
setVisible(false);
resolve?.(confirmed === true);
};
const request = () => {
if (pendingPromise) return pendingPromise;
setVisible(true);
pendingPromise = new Promise((resolve) => {
resolvePending = resolve;
});
return pendingPromise;
};
return Object.freeze({
request,
confirm: () => settle(true),
cancel: () => settle(false),
dispose: () => settle(false),
});
};