Botão Commit & Push nos projetos e correção do resume de sessão
- Adicionar botão de commit & push para cada projeto na página de arquivos - Criar rota POST /api/files/commit-push com git add, commit e push - Adicionar Modal.prompt reutilizável para inputs com valor padrão - Corrigir detecção de erro no executor (is_error/errors do CLI) - Fallback automático para nova execução quando sessão expira no resume
This commit is contained in:
@@ -58,6 +58,33 @@ const Modal = {
|
||||
}
|
||||
},
|
||||
|
||||
_promptResolve: null,
|
||||
|
||||
prompt(title, message, defaultValue = '') {
|
||||
return new Promise((resolve) => {
|
||||
Modal._promptResolve = resolve;
|
||||
|
||||
const titleEl = document.getElementById('prompt-modal-title');
|
||||
const messageEl = document.getElementById('prompt-modal-message');
|
||||
const inputEl = document.getElementById('prompt-modal-input');
|
||||
|
||||
if (titleEl) titleEl.textContent = title;
|
||||
if (messageEl) messageEl.innerHTML = message;
|
||||
if (inputEl) inputEl.value = defaultValue;
|
||||
|
||||
Modal.open('prompt-modal-overlay');
|
||||
});
|
||||
},
|
||||
|
||||
_resolvePrompt(result) {
|
||||
const inputEl = document.getElementById('prompt-modal-input');
|
||||
Modal.close('prompt-modal-overlay');
|
||||
if (Modal._promptResolve) {
|
||||
Modal._promptResolve(result ? (inputEl?.value || '') : null);
|
||||
Modal._promptResolve = null;
|
||||
}
|
||||
},
|
||||
|
||||
_setupListeners() {
|
||||
document.addEventListener('click', (e) => {
|
||||
if (e.target.classList.contains('modal-overlay')) {
|
||||
@@ -65,6 +92,8 @@ const Modal = {
|
||||
|
||||
if (modalId === 'confirm-modal-overlay') {
|
||||
Modal._resolveConfirm(false);
|
||||
} else if (modalId === 'prompt-modal-overlay') {
|
||||
Modal._resolvePrompt(false);
|
||||
} else {
|
||||
Modal.close(modalId);
|
||||
}
|
||||
@@ -77,6 +106,8 @@ const Modal = {
|
||||
|
||||
if (targetId === 'confirm-modal-overlay') {
|
||||
Modal._resolveConfirm(false);
|
||||
} else if (targetId === 'prompt-modal-overlay') {
|
||||
Modal._resolvePrompt(false);
|
||||
} else {
|
||||
Modal.close(targetId);
|
||||
}
|
||||
@@ -91,6 +122,8 @@ const Modal = {
|
||||
|
||||
if (activeModal.id === 'confirm-modal-overlay') {
|
||||
Modal._resolveConfirm(false);
|
||||
} else if (activeModal.id === 'prompt-modal-overlay') {
|
||||
Modal._resolvePrompt(false);
|
||||
} else {
|
||||
Modal.close(activeModal.id);
|
||||
}
|
||||
@@ -98,6 +131,17 @@ const Modal = {
|
||||
|
||||
const confirmBtn = document.getElementById('confirm-modal-confirm-btn');
|
||||
if (confirmBtn) confirmBtn.addEventListener('click', () => Modal._resolveConfirm(true));
|
||||
|
||||
const promptConfirmBtn = document.getElementById('prompt-modal-confirm-btn');
|
||||
if (promptConfirmBtn) promptConfirmBtn.addEventListener('click', () => Modal._resolvePrompt(true));
|
||||
|
||||
const promptCancelBtn = document.getElementById('prompt-modal-cancel-btn');
|
||||
if (promptCancelBtn) promptCancelBtn.addEventListener('click', () => Modal._resolvePrompt(false));
|
||||
|
||||
const promptInput = document.getElementById('prompt-modal-input');
|
||||
if (promptInput) promptInput.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter') Modal._resolvePrompt(true);
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user