obsidian-media-db-sync/src/modals/MediaDbSearchResultModal.ts
2026-01-28 21:41:06 +01:00

66 lines
2.3 KiB
TypeScript

import type MediaDbPlugin from '../main';
import type { MediaTypeModel } from '../models/MediaTypeModel';
import type { SelectModalData, SelectModalOptions } from '../utils/ModalHelper';
import { SELECTMODALOPTIONSDEFAULT } from '../utils/ModalHelper';
import { SelectModal } from './SelectModal';
export class MediaDbSearchResultModal extends SelectModal<MediaTypeModel> {
plugin: MediaDbPlugin;
busy: boolean;
sendCallback: boolean;
submitCallback?: (res: SelectModalData) => void;
closeCallback?: (err?: Error) => void;
skipCallback?: () => void;
submitButtonText: string;
constructor(plugin: MediaDbPlugin, selectModalOptions: SelectModalOptions) {
selectModalOptions = Object.assign({}, SELECTMODALOPTIONSDEFAULT, selectModalOptions);
super(plugin.app, selectModalOptions.elements ?? [], selectModalOptions.multiSelect);
this.plugin = plugin;
this.title = selectModalOptions.modalTitle ?? '';
this.description = selectModalOptions.description ?? 'Select one or multiple search results.';
this.addSkipButton = selectModalOptions.skipButton ?? false;
this.submitButtonText = selectModalOptions.submitButtonText ?? 'Ok';
this.busy = false;
this.sendCallback = false;
}
setSubmitCb(submitCallback: (res: SelectModalData) => void): void {
this.submitCallback = submitCallback;
}
setCloseCb(closeCallback: (err?: Error) => void): void {
this.closeCallback = closeCallback;
}
setSkipCallback(skipCallback: () => void): void {
this.skipCallback = skipCallback;
}
// Renders each suggestion item.
renderElement(item: MediaTypeModel, el: HTMLElement): void {
el.createEl('div', { text: this.plugin.mediaTypeManager.getFileName(item) });
el.createEl('small', { text: `${item.getSummary()}\n` });
el.createEl('small', { text: `${item.type.toUpperCase() + (item.subType ? ` (${item.subType})` : '')} from ${item.dataSource}` });
}
// Perform action on the selected suggestion.
submit(): void {
if (!this.busy) {
this.busy = true;
this.submitButton?.setButtonText('Creating entry...');
this.submitCallback?.({ selected: this.selectModalElements.filter(x => x.isActive()).map(x => x.value) });
}
}
skip(): void {
this.skipButton?.setButtonText('Skipping...');
this.skipCallback?.();
}
onClose(): void {
this.closeCallback?.();
}
}