UNPKG

@codegouvfr/react-dsfr

Version:

French State Design System React integration library

34 lines (29 loc) 1.29 kB
/* eslint-disable @typescript-eslint/no-unused-vars */ import type { ReactNode } from "react"; //See: test/types/consentManagement.ts to understand theses types export type FinalityConsent<Finality extends string> = { readonly [K in Finality as K extends `${infer _P}.${infer _C}` ? never : K]: boolean; } & { readonly [K in Finality as K extends `${infer P}.${infer _C}` ? P : never]: Readonly< Record<K extends `${infer _P}.${infer C}` ? C : never, boolean> > & { readonly isFullConsent: boolean }; } & { readonly isFullConsent: boolean }; export type ExtractFinalityFromFinalityDescription< FinalityDescription extends Record< string, { title: ReactNode; subFinalities?: Record<string, ReactNode> } > > = { [K in keyof FinalityDescription]: K extends string ? FinalityDescription[K] extends { subFinalities: Record<string, any> } ? `${K}.${ExtractFinalityFromFinalityDescription.SubFinalities<FinalityDescription[K]>}` : K : never; }[keyof FinalityDescription]; export namespace ExtractFinalityFromFinalityDescription { export type SubFinalities<T> = T extends { subFinalities: infer U } ? U extends Record<string, any> ? keyof U : never : never; }