fix: complete legacy operator parity workflows

This commit is contained in:
2026-07-23 00:54:31 +09:00
parent 939c252d23
commit cf117de144
25 changed files with 2430 additions and 223 deletions

View File

@@ -4378,6 +4378,11 @@
}
namedPlaylistConfirmationModal.hidden = false;
lockNamedPlaylistControls();
// The confirmation can open immediately after a correlated DB refresh or
// selection receipt. Re-establish its own controls here so a transient
// busy render cannot leave the affirmative action stale-disabled.
namedPlaylistConfirmationYes.disabled = false;
namedPlaylistConfirmationNo.disabled = false;
syncModalFocus();
return true;
}
@@ -4496,8 +4501,11 @@
namedPlaylistDeleteButton.disabled = modalLocked || named.canDelete !== true;
namedPlaylistConfirmButton.disabled = modalLocked ||
(namedPlaylistMode === "save" ? named.canSave !== true : named.canLoad !== true);
namedPlaylistConfirmationYes.disabled = operatorMutationLocked || uiBusy ||
pendingNamedPlaylistCommand !== null ||
// A PROGRAM auto-refresh can begin between pointer-down and pointer-up.
// Keep the already-open confirmation clickable through unrelated busy
// state; the native ordered gate serializes the request and performs the
// authoritative mutation-safety check before any database write.
namedPlaylistConfirmationYes.disabled = pendingNamedPlaylistCommand !== null ||
!!(namedPlaylistState && namedPlaylistState.isWriteInProgress === true);
if (deferredSelectionAction) {
runNamedPlaylistDoubleClick(
@@ -4921,7 +4929,10 @@
dialogCaption.textContent = state.dialog.caption || "MmoneyCoder";
dialogMessage.textContent = state.dialog.message;
dialogOk.textContent = legacyDialogIsConfirmation ? "예" : "확인";
dialogOk.disabled = state.isBusy === true;
// A one-button result alert is safe to acknowledge while an unrelated
// refresh is finishing. Disabling it between pointer-down and pointer-up
// swallowed real operator clicks; native dispatch now queues one dismissal.
dialogOk.disabled = legacyDialogIsConfirmation && state.isBusy === true;
dialogNo.hidden = !legacyDialogIsConfirmation;
dialogNo.disabled = state.isBusy === true;
if (dialog.hidden) rememberModalOpener(legacyAlertDialog);