66 lines
2.3 KiB
TypeScript
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?.();
|
|
}
|
|
}
|