Add dirty check to all remaining editor modals
Subclass Modal with snapshotValues() for: value source editor, audio source editor, add device, profile editor, capture template, stream editor, and PP template modals. Close/cancel now triggers discard confirmation when form has unsaved changes. Document the convention in CLAUDE.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,36 @@ import { showToast, showConfirm } from '../core/ui.js';
|
||||
import { Modal } from '../core/modal.js';
|
||||
import { loadPictureSources } from './streams.js';
|
||||
|
||||
const valueSourceModal = new Modal('value-source-modal');
|
||||
class ValueSourceModal extends Modal {
|
||||
constructor() { super('value-source-modal'); }
|
||||
|
||||
snapshotValues() {
|
||||
const type = document.getElementById('value-source-type').value;
|
||||
return {
|
||||
name: document.getElementById('value-source-name').value,
|
||||
description: document.getElementById('value-source-description').value,
|
||||
type,
|
||||
value: document.getElementById('value-source-value').value,
|
||||
waveform: document.getElementById('value-source-waveform').value,
|
||||
speed: document.getElementById('value-source-speed').value,
|
||||
minValue: document.getElementById('value-source-min-value').value,
|
||||
maxValue: document.getElementById('value-source-max-value').value,
|
||||
audioSource: document.getElementById('value-source-audio-source').value,
|
||||
mode: document.getElementById('value-source-mode').value,
|
||||
sensitivity: document.getElementById('value-source-sensitivity').value,
|
||||
smoothing: document.getElementById('value-source-smoothing').value,
|
||||
adaptiveMin: document.getElementById('value-source-adaptive-min-value').value,
|
||||
adaptiveMax: document.getElementById('value-source-adaptive-max-value').value,
|
||||
pictureSource: document.getElementById('value-source-picture-source').value,
|
||||
sceneBehavior: document.getElementById('value-source-scene-behavior').value,
|
||||
sceneSensitivity: document.getElementById('value-source-scene-sensitivity').value,
|
||||
sceneSmoothing: document.getElementById('value-source-scene-smoothing').value,
|
||||
schedule: JSON.stringify(_getScheduleFromUI()),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const valueSourceModal = new ValueSourceModal();
|
||||
|
||||
// ── Modal ─────────────────────────────────────────────────────
|
||||
|
||||
@@ -87,10 +116,11 @@ export async function showValueSourceModal(editData) {
|
||||
}
|
||||
|
||||
valueSourceModal.open();
|
||||
valueSourceModal.snapshot();
|
||||
}
|
||||
|
||||
export function closeValueSourceModal() {
|
||||
valueSourceModal.forceClose();
|
||||
export async function closeValueSourceModal() {
|
||||
await valueSourceModal.close();
|
||||
}
|
||||
|
||||
export function onValueSourceTypeChange() {
|
||||
|
||||
Reference in New Issue
Block a user