auto-refresh data when updated

Should be evident when the name of the filter has been changed
This commit is contained in:
buzz-lightsnack-2007 2024-05-25 09:15:06 +08:00
parent eedd53aba4
commit 3e2723d58b

View file

@ -148,13 +148,15 @@ class Search {
show().then(() => { show().then(() => {
if (((typeof options).includes(`obj`) && options) ? options[`auto sync`] : false) { if (((typeof options).includes(`obj`) && options) ? options[`auto sync`] : false) {
// Set the refresh function. // Set the refresh function.
let item = this[source[`name`]][`selected`]; let EXISTING_DATA = {};
EXISTING_DATA[`item`] = this[source[`name`]][`selected`];
EXISTING_DATA[`criteria`] = this[source[`name`]][`criteria`];
this[source[`name`]][`scripts`][`refresh`] = () => { this[source[`name`]][`scripts`][`refresh`] = () => {
wait((this[`state`][`read/write`] ? this[`state`][`read/write`] >= 0 : true)).then( wait((this[`state`][`read/write`] ? this[`state`][`read/write`] >= 0 : true)).then(
() => { () => {
if (this[source][`selected`] == item) { if (this[source[`name`]][`selected`] == EXISTING_DATA[`item`] || EXISTING_DATA[`criteria`] == this[source[`name`]][`criteria`]) {
show() show();
} else if (this[source[`name`]][`scripts`][`background`][`refresh`]) { } else if (this[source[`name`]][`scripts`][`background`][`refresh`]) {
this[source[`name`]][`scripts`][`background`][`refresh`].cancel(); this[source[`name`]][`scripts`][`background`][`refresh`].cancel();
}; };
@ -162,7 +164,7 @@ class Search {
); );
}; };
this[source[`name`]][`scripts`][`background`][`refresh`] = new background(() => {this[source[`name`]][`scripts`][`refresh`]}); this[source[`name`]][`scripts`][`background`][`refresh`] = new background(() => {this[source[`name`]][`scripts`][`refresh`]()});
}; };
}).catch((err) => { }).catch((err) => {
logging.error(err); logging.error(err);
@ -231,27 +233,27 @@ class Search {
const gui_output = () => { const gui_output = () => {
// Prepare the elements we will need. // Prepare the elements we will need.
if (this[source][`elements`][`results list`] ? this[source][`elements`][`results list`].length : false) { if (this[source][`elements`][`results list`] ? this[source][`elements`][`results list`].length : false) {
/*
Add the selected state.
*/
const select = (element) => {
if (element) {
// Remove all active classes.
(element).parentElement.querySelectorAll(`li:has(a)`).forEach((ELEMENT) => {
ELEMENT.classList.remove(`active`);
});
// Add the active.
element.classList.add(`active`);
return (element);
};
};
const design = () => { const design = () => {
// Prepare the access keys. // Prepare the access keys.
let ACCESS_KEYS = {"top": ["1", "2", "3", "4", "5", "6", "7", "8", "9"], "nav": ["<", ">"]}; let ACCESS_KEYS = {"top": ["1", "2", "3", "4", "5", "6", "7", "8", "9"], "nav": ["<", ">"]};
/*
Add the selected state.
*/
const select = (element) => {
if (element) {
// Remove all active classes.
(element.parentElement).parentElement.querySelectorAll(`li`).forEach((ELEMENT) => {
ELEMENT.classList.remove(`active`);
});
// Add the active.
element.parentElement.classList.add(`active`);
return (element);
};
};
/* /*
Add the access keys (shortcut). Add the access keys (shortcut).
@ -312,13 +314,16 @@ class Search {
// Add the action. // Add the action.
ELEMENTS_RESULT[`title`].addEventListener(`click`, () => { ELEMENTS_RESULT[`title`].addEventListener(`click`, () => {
// Set the visual state. // Set the visual state.
select(ELEMENTS_RESULT[`title`]); select(ELEMENTS_RESULT[`container`]);
shortcut(RESULT, ELEMENTS_RESULT[`title`], `execute`); shortcut(RESULT, ELEMENTS_RESULT[`title`], `execute`);
// Pick the data. // Pick the data.
this.pick(source, RESULT, data[RESULT]); this.pick(source, RESULT, data[RESULT]);
}); });
// Add the real linked data name temporarily.
ELEMENTS_RESULT[`container`][`linked`] = RESULT;
// Add the shortcut. // Add the shortcut.
ELEMENTS_RESULT[`title`] = shortcut(RESULT, ELEMENTS_RESULT[`title`], `config`); ELEMENTS_RESULT[`title`] = shortcut(RESULT, ELEMENTS_RESULT[`title`], `config`);
@ -338,6 +343,11 @@ class Search {
(TEMPLATE.length) (TEMPLATE.length)
? TEMPLATE.forEach((ELEMENT) => { ? TEMPLATE.forEach((ELEMENT) => {
ELEMENT_TARGET.appendChild(ELEMENT); ELEMENT_TARGET.appendChild(ELEMENT);
// Preselect the item.
if (ELEMENT[`linked`] == nested.dictionary.get(this, [source, `selected`])) {
select(ELEMENT);
};
}) })
: this.pick(source, null); : this.pick(source, null);
}) })