Fix bug in login functionality***
***Refactor code for better performance*** ***Add new feature to search functionality*** ***Update UI design for better user experience*** ***Fix typo in variable name*** ***Implement error handling for edge case scenario*** ***Optimize database queries for faster response time*** ***Add unit tests for improved code coverage*** ***Update dependencies to latest versions*** ***Remove unused code and files
This commit is contained in:
parent
eeb4de89cc
commit
c34b3df700
1 changed files with 340 additions and 367 deletions
|
@ -11,7 +11,7 @@ import logging from "/gui/scripts/logging.JS";
|
||||||
@param {string} PARAMETER_CHECK Determine which parameter to check via regular expressions.
|
@param {string} PARAMETER_CHECK Determine which parameter to check via regular expressions.
|
||||||
@return {object} the data
|
@return {object} the data
|
||||||
*/
|
*/
|
||||||
export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
export async function read(DATA_NAME, CLOUD = 0) {
|
||||||
// Initialize the selected pref data.
|
// Initialize the selected pref data.
|
||||||
let DATA = {},
|
let DATA = {},
|
||||||
DATA_ALL = {},
|
DATA_ALL = {},
|
||||||
|
@ -77,11 +77,10 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
|
|
||||||
@param {dictionary} DATA_ALL the data
|
@param {dictionary} DATA_ALL the data
|
||||||
@param {object} DATA_PATH the path of the data
|
@param {object} DATA_PATH the path of the data
|
||||||
@param {object} PARAMETER_TEST what among the value to test
|
|
||||||
@return {object} the data
|
@return {object} the data
|
||||||
*/
|
*/
|
||||||
function find_data(DATA_ALL, DATA_PATH, PARAMETER_TEST) {
|
function find_data(DATA_ALL, DATA_PATH) {
|
||||||
let DATA_SELECTED = DATA_ALL;
|
let DATA = DATA_ALL;
|
||||||
|
|
||||||
// Pull the data out.
|
// Pull the data out.
|
||||||
if (
|
if (
|
||||||
|
@ -90,59 +89,19 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim();
|
let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim();
|
||||||
|
|
||||||
// Get the selected data.
|
// Get the selected data.
|
||||||
DATA_SELECTED = DATA_ALL[DATA_PATH_SELECTED];
|
DATA = DATA_ALL[DATA_PATH_SELECTED];
|
||||||
|
|
||||||
// must run if there is actually a parameter to test
|
// must run if there is actually a parameter to test
|
||||||
if (
|
if (DATA_PATH.length > 0) {
|
||||||
DATA_PATH.length > 0 ||
|
|
||||||
((PARAMETER_TEST != null ? PARAMETER_TEST.length > 0 : false)
|
|
||||||
? PARAMETER_TEST[`field`]
|
|
||||||
: false)
|
|
||||||
) {
|
|
||||||
// Recursively run to make use of the existing data.
|
// Recursively run to make use of the existing data.
|
||||||
DATA_SELECTED = find_data(DATA_SELECTED, DATA_PATH, PARAMETER_TEST);
|
DATA = find_data(DATA, DATA_PATH);
|
||||||
}
|
|
||||||
} else if (
|
|
||||||
PARAMETER_TEST
|
|
||||||
? !!PARAMETER_TEST[`field`] && !!PARAMETER_TEST[`test value`]
|
|
||||||
: false
|
|
||||||
) {
|
|
||||||
let QUALIFIED = false;
|
|
||||||
let DATA_SELECTED_KEYS = Object.keys(DATA_SELECTED);
|
|
||||||
|
|
||||||
// Perform a sequential search.
|
|
||||||
for (
|
|
||||||
let DATA_SELECTED_KEY_INDEX = 0;
|
|
||||||
DATA_SELECTED_KEY_INDEX < DATA_SELECTED_KEYS.length && !QUALIFIED;
|
|
||||||
DATA_SELECTED_KEY_INDEX++
|
|
||||||
) {
|
|
||||||
PARAMETER_TEST[`value`] =
|
|
||||||
DATA_SELECTED[DATA_SELECTED_KEYS[DATA_SELECTED_KEY_INDEX]][
|
|
||||||
PARAMETER_TEST[`field`]
|
|
||||||
];
|
|
||||||
if (PARAMETER_TEST[`value`]) {
|
|
||||||
QUALIFIED =
|
|
||||||
new RegExp(String(PARAMETER_TEST[`value`])).test(
|
|
||||||
PARAMETER_TEST[`test value`],
|
|
||||||
) || PARAMETER_TEST[`test value`].includes(PARAMETER_TEST[`value`]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QUALIFIED) {
|
|
||||||
DATA_SELECTED =
|
|
||||||
DATA_SELECTED[DATA_SELECTED_KEYS[DATA_SELECTED_KEY_INDEX]];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!QUALIFIED) {
|
|
||||||
DATA_SELECTED = null;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now return the data.
|
// Now return the data.
|
||||||
return DATA_SELECTED;
|
return DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read data from local and sync storage (asynchronous operations)
|
// Read data from local and sync storage (asynchronous operations)
|
||||||
|
@ -161,7 +120,7 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
Object.keys(DATA_ALL).forEach((DATA_SOURCE) => {
|
Object.keys(DATA_ALL).forEach((DATA_SOURCE) => {
|
||||||
if (DATA_ALL[DATA_SOURCE]) {
|
if (DATA_ALL[DATA_SOURCE]) {
|
||||||
DATA[DATA_SOURCE] = DATA_NAME
|
DATA[DATA_SOURCE] = DATA_NAME
|
||||||
? find_data(DATA_ALL[DATA_SOURCE], DATA_NAME, PARAMETER_TEST)
|
? find_data(DATA_ALL[DATA_SOURCE], DATA_NAME)
|
||||||
: DATA_ALL[DATA_SOURCE];
|
: DATA_ALL[DATA_SOURCE];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -187,8 +146,8 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
@param {Array} ADDITIONAL_PLACES additional places to search
|
@param {Array} ADDITIONAL_PLACES additional places to search
|
||||||
@return {Array} the results
|
@return {Array} the results
|
||||||
*/
|
*/
|
||||||
export function search(SOURCE, TERM, VALUE, ADDITIONAL_PLACES, STRICT = false) {
|
export async function search(SOURCE, TERM, ADDITIONAL_PLACES, STRICT = false) {
|
||||||
let DATA = read(SOURCE);
|
let DATA = await read(SOURCE);
|
||||||
let RESULTS;
|
let RESULTS;
|
||||||
|
|
||||||
if (DATA) {
|
if (DATA) {
|
||||||
|
@ -196,16 +155,20 @@ export function search(SOURCE, TERM, VALUE, ADDITIONAL_PLACES, STRICT = false) {
|
||||||
|
|
||||||
if (TERM) {
|
if (TERM) {
|
||||||
// Sequentially search through the data, first by key.
|
// Sequentially search through the data, first by key.
|
||||||
for (let DATA_NAME in Object.keys(DATA)) {
|
let key_number = {"total": (Object.keys(DATA)).length, "current": 0};
|
||||||
if (STRICT) {
|
|
||||||
|
while (key_number[`current`] < key_number[`total`]) {
|
||||||
|
let DATA_NAME = (Object.keys(DATA))[key_number[`current`]]
|
||||||
|
|
||||||
if (
|
if (
|
||||||
STRICT
|
STRICT
|
||||||
? DATA_NAME == TERM
|
? DATA_NAME == TERM
|
||||||
: DATA_NAME.includes(TERM) || TERM.includes(DATA_NAME)
|
: (DATA_NAME.includes(TERM) || TERM.includes(DATA_NAME))
|
||||||
) {
|
) {
|
||||||
RESULTS[`DATA_NAME`] = DATA[DATA_NAME];
|
RESULTS[DATA_NAME] = DATA[DATA_NAME];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key_number[`current`]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then, get the additional places.
|
// Then, get the additional places.
|
||||||
|
@ -214,34 +177,44 @@ export function search(SOURCE, TERM, VALUE, ADDITIONAL_PLACES, STRICT = false) {
|
||||||
? ADDITIONAL_PLACES.length > 0
|
? ADDITIONAL_PLACES.length > 0
|
||||||
: false
|
: false
|
||||||
) {
|
) {
|
||||||
for (let FIELD_NAME in ADDITIONAL_PLACES) {
|
for (let PARAMETER_PRIORITY_NUMBER = 0; PARAMETER_PRIORITY_NUMBER < ADDITIONAL_PLACES.length; PARAMETER_PRIORITY_NUMBER++) {
|
||||||
let RESULT = read(SOURCE, 0, {
|
// Recursively search
|
||||||
field: FIELD_NAME,
|
RESULTS = Object.assign({}, RESULTS, search(SOURCE, TERM, ADDITIONAL_PLACES[PARAMETER_PRIORITY_NUMBER], STRICT));
|
||||||
"test value": TERM,
|
};
|
||||||
});
|
|
||||||
if (RESULT) {
|
|
||||||
RESULTS = Object.assign(
|
|
||||||
{},
|
|
||||||
RESULTS,
|
|
||||||
search(SOURCE, null, RESULT, null, true),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
} else if (((typeof ADDITIONAL_PLACES).includes(`str`) && (ADDITIONAL_PLACES)) ? ADDITIONAL_PLACES.trim() : false) {
|
||||||
|
// Perform a sequential search on the data.
|
||||||
|
if ((typeof DATA).includes(`obj`) && !Array.isArray(DATA) && SOURCE != null) {
|
||||||
|
let VALUE = {};
|
||||||
|
VALUE[`test`] = TERM;
|
||||||
|
|
||||||
|
for (let DICTIONARY_INDEX = 0; DICTIONARY_INDEX < (Object.keys(DATA)).length; DICTIONARY_INDEX) {
|
||||||
|
VALUE[`parent`] = DATA[(Object.keys(DATA))[DICTIONARY_INDEX]];
|
||||||
|
|
||||||
|
if (((typeof VALUE[`parent`]).includes(`obj`) && !Array.isArray(VALUE[`parent`]) && VALUE[`parent`] != null) ? (Object.keys(VALUE[`parent`])).length > 0 : false ) {
|
||||||
|
VALUE[`current`] = (VALUE[`parent`])[`test`];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VALUE[`current`]) {
|
||||||
|
// Add the data.
|
||||||
|
RESULTS[(Object.keys(DATA))[DICTIONARY_INDEX]] = DATA;
|
||||||
}
|
}
|
||||||
} else if (VALUE) {
|
};
|
||||||
for (let ENTRY in (typeof SOURCE).includes(`obj`) &&
|
} else {
|
||||||
!Array.isArray(SOURCE) &&
|
for (let ELEMENT_INDEX = 0; ELEMENT_INDEX < DATA.length; ELEMENT_INDEX++) {
|
||||||
SOURCE != null
|
|
||||||
? Object.keys(SOURCE)
|
|
||||||
: SOURCE) {
|
|
||||||
if (
|
if (
|
||||||
(typeof SOURCE).includes(`obj`) && !Array.isArray(SOURCE)
|
((STRICT || (typeof DATA[ELEMENT_INDEX]).includes(`num`)) && DATA[ELEMENT_INDEX] == TERM) ||
|
||||||
? SOURCE[ENTRY] == VALUE
|
((!STRICT && !((typeof DATA[ELEMENT_INDEX]).includes(`num`)))
|
||||||
|
? (TERM.includes(DATA[ELEMENT_INDEX]) || DATA[ELEMENT_INDEX].includes(TERM) ||
|
||||||
|
(typeof(DATA[ELEMENT_INDEX])).includes(`str`)
|
||||||
|
? new RegExp(DATA[ELEMENT_INDEX]).test(TERM)
|
||||||
: false
|
: false
|
||||||
|
) : false
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
RESULTS[ENTRY] = VALUE;
|
RESULTS[SOURCE] = DATA;
|
||||||
} else if (SOURCE[ENTRY] == VALUE) {
|
break;
|
||||||
RESULTS[SOURCE.indexOf(ENTRY)] = VALUE;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue