mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 23:52:26 -05:00 
			
		
		
		
	[chore/frogend] Restructure form data default values / update from Query data (#1422)
* eslint: set console use to error to catch debug littering in CI * remove debug logging * some form field restructuring, fixes submitted updates not being reflected * more form field restructuring * remove debug logger * simplify field updates * fix react state set during render when submitting import file * className instead of class * show Select hints again
This commit is contained in:
		
					parent
					
						
							
								0a9874329d
							
						
					
				
			
			
				commit
				
					
						47daddc10c
					
				
			
		
					 19 changed files with 153 additions and 86 deletions
				
			
		|  | @ -18,15 +18,52 @@ | |||
| 
 | ||||
| "use strict"; | ||||
| 
 | ||||
| const React = require("react"); | ||||
| const getByDot = require("get-by-dot").default; | ||||
| 
 | ||||
| function capitalizeFirst(str) { | ||||
| 	return str.slice(0, 1).toUpperCase() + str.slice(1); | ||||
| 	return str.slice(0, 1).toUpperCase + str.slice(1); | ||||
| } | ||||
| 
 | ||||
| function makeHook(func) { | ||||
| 	return (name, ...args) => func({ | ||||
| 		name, | ||||
| 		Name: capitalizeFirst(name) | ||||
| 	}, ...args); | ||||
| function selectorByKey(key) { | ||||
| 	if (key.includes("[")) { | ||||
| 		// get-by-dot does not support 'nested[deeper][key]' notation, convert to 'nested.deeper.key'
 | ||||
| 		key = key | ||||
| 			.replace(/\[/g, ".") // nested.deeper].key]
 | ||||
| 			.replace(/\]/g, ""); // nested.deeper.key
 | ||||
| 	} | ||||
| 
 | ||||
| 	return function selector(obj) { | ||||
| 		if (obj == undefined) { | ||||
| 			return undefined; | ||||
| 		} else { | ||||
| 			return getByDot(obj, key); | ||||
| 		} | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| function makeHook(hookFunction) { | ||||
| 	return function (name, opts = {}) { | ||||
| 		// for dynamically generating attributes like 'setName'
 | ||||
| 		const Name = React.useMemo(() => capitalizeFirst(name), [name]); | ||||
| 
 | ||||
| 		const selector = React.useMemo(() => selectorByKey(name), [name]); | ||||
| 		const valueSelector = opts.valueSelector ?? selector; | ||||
| 
 | ||||
| 		opts.initialValue = React.useMemo(() => { | ||||
| 			if (opts.source == undefined) { | ||||
| 				return opts.defaultValue; | ||||
| 			} else { | ||||
| 				return valueSelector(opts.source) ?? opts.defaultValue; | ||||
| 			} | ||||
| 		}, [opts.source, opts.defaultValue, valueSelector]); | ||||
| 
 | ||||
| 		const hook = hookFunction({ name, Name }, opts); | ||||
| 
 | ||||
| 		return Object.assign(hook, { | ||||
| 			name, Name, | ||||
| 		}); | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| module.exports = { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue