2026-10-15 13:15:49 -07:00
import { get } from "./api.js" ;
2026-10-16 07:04:24 -07:00
import { h , replace } from "./dom.js" ;
2026-10-15 13:15:49 -07:00
import { onEach , state } from "./state.js" ;
export function previewURL ( port ) {
return `https:// ${ location . hostname } : ${ port } /` ;
}
2026-10-16 07:04:24 -07:00
export function previewLinks () {
const root = h ( "nav" , { class : "preview-links" });
2026-10-15 13:15:49 -07:00
let target = 0 ;
const load = async () => {
const taskId = state . selectedTaskId ;
2026-10-16 07:04:24 -07:00
const started = ++ target ;
2026-10-15 13:15:49 -07:00
if ( ! taskId ) {
2026-10-16 07:04:24 -07:00
replace ( root );
2026-10-15 13:15:49 -07:00
return ;
}
try {
2026-10-16 07:04:24 -07:00
const previews = await get ( "/api/tasks/{taskId}/previews" , { path : { taskId } });
if ( started !== target ) {
return ;
2026-10-15 13:15:49 -07:00
}
2026-10-16 07:04:24 -07:00
replace ( root , ... previews . map (( p ) => h ( "a" , { class : "preview-link" , href : previewURL ( p . port ), target : "_blank" , rel : "noopener" , title : `Open ${ p . name } (port ${ p . port } ) in a new window` }, p . name , " ↗" )));
2026-10-15 13:15:49 -07:00
}
catch ( err ) {
if ( started === target ) {
2026-10-16 07:04:24 -07:00
replace ( root );
2026-10-15 13:15:49 -07:00
}
2026-10-16 07:04:24 -07:00
console . error ( "list previews" , err );
2026-10-15 13:15:49 -07:00
}
};
2026-10-16 07:04:24 -07:00
onEach ([ "selection" ], () => {
replace ( root );
void load ();
});
onEach ([ "transcript" ], ( fresh ) => {
if ( fresh ? . some (( ev ) => ev . kind === "preview.exposed" )) {
2026-10-15 13:15:49 -07:00
void load ();
}
2026-10-16 07:04:24 -07:00
});
void load ();
return root ;
2026-10-15 13:15:49 -07:00
}
//# sourceMappingURL=preview.js.map