import AbstractSearchOption from "./abstract_search_option.js";
import noteAutocompleteService from "../../services/note_autocomplete.js";
const TPL = `
Ancestor:
depth:
|
|
`;
export default class Ancestor extends AbstractSearchOption {
static get optionName() { return "ancestor" };
static get attributeType() { return "relation" };
static async create(noteId) {
await AbstractSearchOption.setAttribute(noteId, 'relation', 'ancestor', 'root');
}
doRender() {
const $option = $(TPL);
const $ancestor = $option.find('.ancestor');
const $ancestorDepth = $option.find('.ancestor-depth');
noteAutocompleteService.initNoteAutocomplete($ancestor);
$ancestor.on('autocomplete:closed', async () => {
const ancestorNoteId = $ancestor.getSelectedNoteId();
if (ancestorNoteId) {
await this.setAttribute('relation', 'ancestor', ancestorNoteId);
}
});
$ancestorDepth.on('change', async () => {
const ancestorDepth = $ancestorDepth.val();
if (ancestorDepth) {
await this.setAttribute('label', 'ancestorDepth', ancestorDepth);
}
else {
await this.deleteAttribute('label', 'ancestorDepth');
}
});
const ancestorNoteId = this.note.getRelationValue('ancestor');
if (ancestorNoteId !== 'root') {
$ancestor.setNote(ancestorNoteId);
}
const ancestorDepth = this.note.getLabelValue('ancestorDepth');
if (ancestorDepth) {
$ancestorDepth.val(ancestorDepth);
}
return $option;
}
async deleteOption() {
await this.deleteAttribute('label', 'ancestorDepth');
await super.deleteOption();
}
}