fix(modal): close rollout and async lifecycle gaps
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,9 @@
|
||||
|
||||
var detailOrderNumber = "";
|
||||
var detailAutoRefreshStarted = false;
|
||||
var detailSession = null;
|
||||
var detailReplacement = false;
|
||||
var detailReplacementSession = null;
|
||||
|
||||
function toast(message, type) {
|
||||
window.AksrtToast(message, type || "info");
|
||||
@@ -48,7 +51,12 @@
|
||||
}
|
||||
|
||||
function activeDetail(number) {
|
||||
return detailOrderNumber === number && !!window.AksrtModalRuntime.getActive();
|
||||
return detailOrderNumber === number
|
||||
&& !!detailSession
|
||||
&& !detailSession.closed
|
||||
&& detailSession.options
|
||||
&& detailSession.options.kind === "orders"
|
||||
&& window.AksrtModalRuntime.getActive() === detailSession.shell;
|
||||
}
|
||||
|
||||
function orderTag(orderNumber) {
|
||||
@@ -115,8 +123,12 @@
|
||||
cacheKey: "orders:detail:" + orderNumber,
|
||||
cacheTags: ["orders", orderTag(orderNumber)],
|
||||
skeleton: detailSkeleton(),
|
||||
onState: function (_, session) {
|
||||
if (orderNumber === detailOrderNumber) detailSession = session;
|
||||
},
|
||||
renderData: function (data, session) {
|
||||
if (orderNumber !== detailOrderNumber) return false;
|
||||
detailSession = session;
|
||||
if (!data || typeof data !== "object") {
|
||||
session.content.innerHTML = '<p class="c-red">订单不存在</p>';
|
||||
return;
|
||||
@@ -137,6 +149,9 @@
|
||||
|
||||
function openDetail(orderNumber) {
|
||||
if (!orderNumber) return;
|
||||
detailSession = null;
|
||||
detailReplacement = false;
|
||||
detailReplacementSession = null;
|
||||
detailOrderNumber = orderNumber;
|
||||
detailAutoRefreshStarted = false;
|
||||
window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, false));
|
||||
@@ -144,7 +159,16 @@
|
||||
|
||||
function refreshDetail(orderNumber) {
|
||||
if (!orderNumber || !activeDetail(orderNumber)) return;
|
||||
window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, true));
|
||||
detailReplacement = true;
|
||||
detailReplacementSession = detailSession;
|
||||
var refreshPromise = window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, true));
|
||||
refreshPromise.then(function () {
|
||||
detailReplacement = false;
|
||||
detailReplacementSession = null;
|
||||
}, function () {
|
||||
detailReplacement = false;
|
||||
detailReplacementSession = null;
|
||||
});
|
||||
}
|
||||
|
||||
function currentViewPath() {
|
||||
@@ -301,6 +325,17 @@
|
||||
if (cancel) { event.preventDefault(); closeOrder(cancel); }
|
||||
});
|
||||
|
||||
document.addEventListener("aksrt:modal:close", function (event) {
|
||||
var detail = event && event.detail ? event.detail : {};
|
||||
if (!detailSession || detail.session !== detailSession) return;
|
||||
if (detail.reason === "replace" && detailReplacement && detail.session === detailReplacementSession) return;
|
||||
detailSession = null;
|
||||
detailOrderNumber = "";
|
||||
detailAutoRefreshStarted = false;
|
||||
detailReplacement = false;
|
||||
detailReplacementSession = null;
|
||||
});
|
||||
|
||||
document.addEventListener("click", function (event) {
|
||||
var refresh = event.target.closest("[data-aksrt-order-refresh]");
|
||||
if (refresh) {
|
||||
|
||||
Reference in New Issue
Block a user