Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 66x 108x 108x 66x 189x 189x 189x 189x 39x 17x 23x 23x 23x 189x | import { SERVER_URL } from '@config/base';
import { requestUrlAndGetPromise } from '@utils/FetchUtils';
import { useEffect, useState } from 'react';
type ConfigValueTypes = string | number | boolean;
export interface ConfigResponseProps {
key: string;
value: ConfigValueTypes;
type: string;
}
export type ConfigKey = keyof typeof configKeyToTypeMap;
export type ConfigType = typeof configKeyToTypeMap[ConfigKey];
const configKeyToTypeMap = {
'register.self_register': 'boolean',
'register.reset_password': 'boolean',
'feedback.enable_types': 'string',
"feedback.user_manual_link": 'string',
"feedback.developer_manual_link": 'string',
"ai.assistant.enable": 'boolean',
"websocket.heartbeatInterval": 'int',
"attachment.align_download_permission_with_update": 'boolean',
"debugDynamicLogic.enableNewDomainChangePushService": 'string',
};
/**
* Fetches the config from the server
* @param configKey config key
* @param configType data type of the config, like boolean, integer, string etc
*/
export async function fetchConfig(configKey: ConfigKey, configType?: ConfigType): Promise<ConfigResponseProps> {
// q:how to get the name of a type in typescript?
// a: https://stackoverflow.com/questions/39645871/how-to-get-the-name-of-a-type-in-typescript
const url = `${SERVER_URL}/config/${configKey}/${configType ?? 'string'}`;
return requestUrlAndGetPromise(url, {});
}
// Define useConfig hook
export const useConfig = (configKey: ConfigKey, configType?: ConfigType): {
value: ConfigValueTypes | null;
error: Error | null;
loading: boolean;
} => {
const [value, setValue] = useState<ConfigValueTypes | null>(null);
const [error, setError] = useState<Error | null>(null);
const [loading, setLoading] = useState<boolean>(true);
useEffect(() => {
fetchConfig(configKey, configType ?? configKeyToTypeMap[configKey])
.then((config) => {
setValue(config.value);
setLoading(false);
})
.catch((error) => {
console.error(`Failed to fetch config for ${configKey}: ${error}`);
setError(error);
setLoading(false);
});
}, [configKey, configType]);
return { value, error, loading };
};
|