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