From 69048439757d94a1c4036a85ccdb7f754b92f2f7 Mon Sep 17 00:00:00 2001 From: Joe Anderson Date: Fri, 24 Nov 2023 22:36:00 +0000 Subject: [PATCH] Refactor Object.fromEnties . Object.entries into transformValues (#266) --- client/lib/context.tsx | 11 +++++------ client/lib/transformValues.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 client/lib/transformValues.ts diff --git a/client/lib/context.tsx b/client/lib/context.tsx index 717fc841..5d8144ba 100644 --- a/client/lib/context.tsx +++ b/client/lib/context.tsx @@ -5,6 +5,7 @@ import React, { useContext as _useContext, useMemo, } from 'react'; +import { transformValues } from './transformValues'; type WrappedValue = { data: T } | null; @@ -15,12 +16,10 @@ export type ProviderProps = Partial & { export const createContext = < T extends Record >(defaultValues: { [K in keyof T]: WrappedValue }) => { - const contexts = Object.fromEntries( - Object.entries(defaultValues).map(([key, value]) => [ - key, - _createContext(value), - ]) - ) as { [K in keyof T]: Context> }; + const contexts = transformValues< + { [K in keyof T]: WrappedValue }, + { [K in keyof T]: Context> } + >(defaultValues, _createContext); const useContext = (key: K) => { const wrappedValue = _useContext(contexts[key]); diff --git a/client/lib/transformValues.ts b/client/lib/transformValues.ts new file mode 100644 index 00000000..8b3c7843 --- /dev/null +++ b/client/lib/transformValues.ts @@ -0,0 +1,13 @@ +export const transformValues = < + T extends Record, + R extends { [K in keyof T]: unknown } +>( + obj: T, + transformValue: (value: T[keyof T]) => R[keyof T] +): R => + Object.fromEntries( + Object.entries(obj).map(([key, value]) => [ + key, + transformValue(value as T[keyof T]), + ]) + ) as R;