refactor: isolate camera panel controls and presentation

This commit is contained in:
Sameh Khamis committed 2026-09-13 00:38:01 -07:00
1 parent bd14d6c301
commit f45f399c31
17 files changed
+932 -657

No files matched your search

+8 -1
View File
@@ -173,5 +173,12 @@
"src/ui/radioPresentation.js",
"src/ui/radioTunerModel.js",
"src/ui/radioControls.test.mjs",
"scripts/qa-ui-disposal.mjs"
"scripts/qa-ui-disposal.mjs",
"src/ui/cctv.js",
"src/ui/cctvBindings.js",
"src/ui/cctvCalibration.js",
"src/ui/cctvControls.js",
"src/ui/cctvControls.test.mjs",
"src/ui/cctvFrames.js",
"src/ui/cctvPresentation.js"
]
+12
View File
@@ -357,5 +357,17 @@
"src/ui/radioTunerModel.js"
],
"external": []
},
"cctv-controls": {
"exports": ["./ui/cctv"],
"modules": [
"src/ui/cctv.js",
"src/ui/cctvBindings.js",
"src/ui/cctvCalibration.js",
"src/ui/cctvControls.js",
"src/ui/cctvFrames.js",
"src/ui/cctvPresentation.js"
],
"external": []
}
}
+3 -1
View File
@@ -94,7 +94,9 @@ const getOpt = (name, dflt) => {
const getFlag = (name) => argv.includes(name);
const BASE_URL = process.env.QA_BASE_URL || 'http://localhost:4173';
const APP_URL = getOpt('--url', BASE_URL);
const CCTV_URL = new URL(getOpt('--url', BASE_URL));
CCTV_URL.searchParams.set('welcome', '0');
const APP_URL = CCTV_URL.href;
const HEADFUL = getFlag('--headful');
const SHOTS_DIR = path.join(REPO_ROOT, 'qa-shots', 'cctv-v2');
+5 -5
View File
@@ -51,10 +51,10 @@ try {
'_leftStackMutationObserver',
'_rightStackMutationObserver',
].filter(watchObserver);
const cctvUnsubscribe = ui._cctvUnsubscribe;
const cctvUnsubscribe = ui._cctvControls._cctvUnsubscribe;
counts.cctv = 0;
if (cctvUnsubscribe)
ui._cctvUnsubscribe = () => {
ui._cctvControls._cctvUnsubscribe = () => {
counts.cctv++;
return cctvUnsubscribe();
};
@@ -82,10 +82,10 @@ try {
observersReleased: observed.every(
(name) => counts[name] === 1 && ui[name] === null,
),
subscriptionReleased: counts.cctv === 1 && ui._cctvUnsubscribe === null,
subscriptionReleased: counts.cctv === 1 && ui._cctvControls._cctvUnsubscribe === null,
resizeReleased: counts.resize === 1 && ui._windowResizeHandler === null,
controlsReleased:
ui._radioControls.destroyed && ui._locationControls.destroyed,
ui._radioControls.destroyed && ui._locationControls.destroyed && ui._cctvControls.destroyed,
idempotent: once === JSON.stringify(counts),
};
} finally {
@@ -109,7 +109,7 @@ try {
result.resizeReleased,
);
check(
'Radio and Location controls are disposed with the UI',
'Radio, Location and CCTV controls are disposed with the UI',
result.controlsReleased,
);
check('repeated UI disposal is inert', result.idempotent);