import {MediaTypeModel} from '../models/MediaTypeModel'; import MediaDbPlugin from '../main'; import {SelectModal} from './SelectModal'; import {SELECT_MODAL_OPTIONS_DEFAULT, SelectModalData, SelectModalOptions} from '../utils/ModalHelper'; export class MediaDbSearchResultModal extends SelectModal { plugin: MediaDbPlugin; busy: boolean; sendCallback: boolean; submitCallback: (res: SelectModalData) => void; closeCallback: (err?: Error) => void; skipCallback: () => void; constructor(plugin: MediaDbPlugin, selectModalOptions: SelectModalOptions) { selectModalOptions = Object.assign({}, SELECT_MODAL_OPTIONS_DEFAULT, selectModalOptions); super(plugin.app, selectModalOptions.elements, selectModalOptions.multiSelect); this.plugin = plugin; this.title = selectModalOptions.modalTitle; this.description = 'Select one or multiple search results.'; this.addSkipButton = selectModalOptions.skipButton; this.busy = false; this.sendCallback = false; } setSubmitCallback(submitCallback: (res: SelectModalData) => void): void { this.submitCallback = submitCallback; } setCloseCallback(closeCallback: (err?: Error) => void): void { this.closeCallback = closeCallback; } setSkipCallback(skipCallback: () => void): void { this.skipCallback = skipCallback; } // Renders each suggestion item. renderElement(item: MediaTypeModel, el: HTMLElement) { 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() { 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() { this.skipButton.setButtonText('Skipping...'); this.skipCallback(); } onClose() { this.closeCallback(); } }