Properly parse empty setting value for booleans and integers

This commit is contained in:
WolverinDEV 2021-03-12 18:24:43 +01:00
parent 7f6af3c304
commit 3e42c7027f
2 changed files with 22 additions and 9 deletions

View file

@ -80,19 +80,31 @@ function resolveKey<ValueType extends RegistryValueType, DefaultType>(
) : ValueType | DefaultType { ) : ValueType | DefaultType {
let value = resolver(key.key); let value = resolver(key.key);
if(typeof value === "string") { const keys = [key.key];
return decodeValueFromString(value, key.valueType); if(Array.isArray(key.fallbackKeys)) {
keys.push(...key.fallbackKeys);
} }
/* trying fallback values */ for(const resolveKey of keys) {
for(const fallback of key.fallbackKeys || []) { value = resolver(resolveKey);
value = resolver(fallback);
if(typeof value !== "string") { if(typeof value !== "string") {
continue; continue;
} }
switch (key.valueType) {
case "number":
case "boolean":
if(value.length === 0) {
continue;
}
break;
default:
break;
}
if(key.fallbackImports) { if(key.fallbackImports) {
const fallbackValueImporter = key.fallbackImports[fallback]; const fallbackValueImporter = key.fallbackImports[resolveKey];
if(fallbackValueImporter) { if(fallbackValueImporter) {
return fallbackValueImporter(value); return fallbackValueImporter(value);
} }

View file

@ -34,10 +34,11 @@ export function joinClassList(...classes: any[]) : string {
return classes.filter(value => typeof value === "string" && value.length > 0).join(" "); return classes.filter(value => typeof value === "string" && value.length > 0).join(" ");
} }
export function useGlobalSetting<V extends RegistryValueType, DV>(key: RegistryKey<V>, defaultValue: DV) : V | DV;
export function useGlobalSetting<V extends RegistryValueType>(key: ValuedRegistryKey<V>, defaultValue?: V) : V; export function useGlobalSetting<V extends RegistryValueType>(key: ValuedRegistryKey<V>, defaultValue?: V) : V;
export function useGlobalSetting<V extends RegistryValueType, DV>(key: RegistryKey<V>, defaultValue: DV) : V | DV { export function useGlobalSetting<V extends RegistryValueType, DV>(key: RegistryKey<V>, defaultValue: DV) : V | DV;
const [ value, setValue ] = useState(settings.getValue(key, defaultValue));
export function useGlobalSetting(key, defaultValue) {
const [ value, setValue ] = useState(arguments.length > 1 ? settings.getValue(key, defaultValue) : settings.getValue(key));
useEffect(() => settings.globalChangeListener(key, value => setValue(value)), []); useEffect(() => settings.globalChangeListener(key, value => setValue(value)), []);
return value; return value;