import React from "react"; import type { z, ZodType } from "zod"; export type GetAppData = (key: string) => unknown; export type SetAppData = (key: string, value: unknown) => void; // eslint-disable-next-line @typescript-eslint/no-empty-function const EventTypeAppContext = React.createContext<[GetAppData, SetAppData]>([() => ({}), () => {}]); export type SetAppDataGeneric = < TKey extends keyof z.infer, TValue extends z.infer[TKey] >( key: TKey, value: TValue ) => void; export type GetAppDataGeneric = >( key: TKey ) => z.infer[TKey]; export const useAppContextWithSchema = () => { type GetAppData = GetAppDataGeneric; type SetAppData = SetAppDataGeneric; // TODO: Not able to do it without type assertion here const context = React.useContext(EventTypeAppContext) as [GetAppData, SetAppData]; return context; }; export default EventTypeAppContext;