forked from
tokono.ma/diffuse
A music player that connects to your cloud/distributed storage.
1import { defineElement, DiffuseElement, query } from "~/common/element.js";
2
3/**
4 * @import {ProxiedActions} from "~/common/worker.d.ts"
5 * @import {Actions} from "~/components/artwork/types.d.ts"
6 */
7
8////////////////////////////////////////////
9// ELEMENT
10////////////////////////////////////////////
11
12class ArtworkOrchestrator extends DiffuseElement {
13 static NAME = "diffuse/orchestrator/artwork";
14 static WORKER_URL = "components/orchestrator/artwork/worker.js";
15
16 constructor() {
17 super();
18
19 /** @type {ProxiedActions<Actions>} */
20 const p = this.workerProxy();
21
22 this.get = p.get;
23 }
24
25 // LIFECYCLE
26
27 /** @override */
28 async connectedCallback() {
29 super.connectedCallback();
30
31 /** @type {import("~/components/configurator/artwork/element.js").CLASS} */
32 this.artworkConfigurator = query(this, "artwork-selector");
33
34 await customElements.whenDefined(this.artworkConfigurator.localName);
35 }
36
37 // WORKERS
38
39 /**
40 * @override
41 */
42 dependencies() {
43 if (!this.artworkConfigurator) {
44 throw new Error("Artwork configurator element not defined yet");
45 }
46
47 return {
48 artwork: this.artworkConfigurator,
49 };
50 }
51}
52
53export default ArtworkOrchestrator;
54
55////////////////////////////////////////////
56// REGISTER
57////////////////////////////////////////////
58
59export const CLASS = ArtworkOrchestrator;
60export const NAME = "do-artwork";
61
62defineElement(NAME, ArtworkOrchestrator);