import { Emitter } from "@noya-app/emitter"; import { Observable } from "@noya-app/observable"; import { uuid } from "@noya-app/noya-utils"; export type ImagePickerRequest = { id: string; }; export type ImagePickerResponse = { id: string; resourceStableId?: string; }; export class ImagePickerManager { requestEmitter = new Emitter<[ImagePickerRequest]>(); responseEmitter = new Emitter<[ImagePickerResponse]>(); isAvailable$ = new Observable(false); setIsAvailable(isAvailable: boolean) { this.isAvailable$.set(isAvailable); } async pickImage(): Promise { const id = uuid(); return new Promise((resolve) => { const unsubscribe = this.responseEmitter.addListener((response) => { if (response.id !== id) return; unsubscribe(); resolve(response.resourceStableId); }); this.requestEmitter.emit({ id }); }); } handleResponse(response: ImagePickerResponse) { this.responseEmitter.emit(response); } }