Skip to content

Commit

Permalink
Refactor Object.fromEnties . Object.entries into transformValues (#266)
Browse files Browse the repository at this point in the history
  • Loading branch information
12joan authored Nov 24, 2023
1 parent d65ab32 commit 6904843
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
11 changes: 5 additions & 6 deletions client/lib/context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import React, {
useContext as _useContext,
useMemo,
} from 'react';
import { transformValues } from './transformValues';

type WrappedValue<T> = { data: T } | null;

Expand All @@ -15,12 +16,10 @@ export type ProviderProps<T> = Partial<T> & {
export const createContext = <
T extends Record<string, unknown>
>(defaultValues: { [K in keyof T]: WrappedValue<T[K]> }) => {
const contexts = Object.fromEntries(
Object.entries(defaultValues).map(([key, value]) => [
key,
_createContext(value),
])
) as { [K in keyof T]: Context<WrappedValue<T[K]>> };
const contexts = transformValues<
{ [K in keyof T]: WrappedValue<T[K]> },
{ [K in keyof T]: Context<WrappedValue<T[K]>> }
>(defaultValues, _createContext);

const useContext = <K extends keyof T>(key: K) => {
const wrappedValue = _useContext(contexts[key]);
Expand Down
13 changes: 13 additions & 0 deletions client/lib/transformValues.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export const transformValues = <
T extends Record<string, unknown>,
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;

0 comments on commit 6904843

Please sign in to comment.