UNPKG

@dianamics/pcf-utils

Version:

This npm package is designed for Power Apps Component Framework (PCF). It provides utilities for working with PCF, most of them are React Hooks, which needs to be used in function components.

56 lines (49 loc) 2.46 kB
import {useState, useEffect} from "react"; import {EnvironmentVariableType, EnvironmentVariableTypes, getBoolean, getJSON, getNumber, getString, JSONValue} from "../Utils/environmentVariable"; /* const RequestsMapper = { [EnvironmentVariableTypes.Boolean] : EnvironmentVariable.getBoolean, [EnvironmentVariableTypes.String] : EnvironmentVariable.getString, [EnvironmentVariableTypes.Number] : EnvironmentVariable.getNumber, [EnvironmentVariableTypes.JSON] : EnvironmentVariable.getJSON, [EnvironmentVariableTypes.DataSource] : EnvironmentVariable.getString }*/ export const useEnvironmentVariable = <T extends string | Number | Boolean | JSONValue = string >(webAPI: any, name: string, type: EnvironmentVariableTypes)=> { const [envVar, setEnvVar] = useState<EnvironmentVariableType<T> | undefined >(); const [isLoading, setIsLoading] = useState<boolean>(false); const [errorMessage, setErrorMessage] = useState<string|undefined>(); const success = () => { setIsLoading(false); } const fail= (e: Error) => { setIsLoading(false); setErrorMessage(e?.message ?? e); } useEffect(() => { setIsLoading(true); setErrorMessage(undefined); if(type===EnvironmentVariableTypes.String){ getString(webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)).then(success).catch(fail); return; } if(type===EnvironmentVariableTypes.Number){ getNumber(webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)).then(success).catch(fail); return; } if(type===EnvironmentVariableTypes.Boolean){ getBoolean(webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)).then(success).catch(fail); return; } if(type===EnvironmentVariableTypes.JSON){ getJSON(webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)).then(success).catch(fail); return; } if(type===EnvironmentVariableTypes.DataSource){ getString(webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)).then(success).catch(fail); return; } /* RequestsMapper[_type](webAPI, name).then((val) => setEnvVar(val as EnvironmentVariableType<T>)); */ }, [name]); return {value: envVar as EnvironmentVariableType<T>, isLoading, errorMessage}; }