UNPKG

@suspensive/react

Version:

Suspensive interfaces for react

1 lines 2.91 kB
{"version":3,"file":"DefaultProps.mjs","names":[],"sources":["../src/DefaultProps.tsx"],"sourcesContent":["'use client'\nimport { type ContextType, type PropsWithChildren } from 'react'\nimport { DelayDefaultPropsContext, SuspenseDefaultPropsContext } from './contexts/DefaultPropsContexts'\nimport { Message_DefaultProp_delay_ms_should_be_greater_than_0, SuspensiveError } from './models/SuspensiveError'\n\n/**\n * A class for configuring default props for Suspensive components.\n *\n * @example\n * ```tsx\n * const defaultProps = new DefaultProps({\n * Delay: {\n * ms: 1200,\n * fallback: <LoadingMessage>Loading additional content...</LoadingMessage>\n * },\n * Suspense: {\n * fallback: <Spinner>Fetching data...</Spinner>,\n * clientOnly: false,\n * },\n * })\n * ```\n */\nexport class DefaultProps {\n Suspense?: ContextType<typeof SuspenseDefaultPropsContext>\n Delay?: ContextType<typeof DelayDefaultPropsContext>\n\n constructor(defaultProps: DefaultProps = {}) {\n if (process.env.NODE_ENV === 'development' && typeof defaultProps.Delay?.ms === 'number') {\n SuspensiveError.assert(defaultProps.Delay.ms > 0, Message_DefaultProp_delay_ms_should_be_greater_than_0)\n }\n this.Suspense = defaultProps.Suspense\n this.Delay = defaultProps.Delay\n }\n}\n\ninterface DefaultPropsProviderProps extends PropsWithChildren {\n defaultProps: DefaultProps\n}\n\n/**\n * A provider component that controls the default settings of Suspensive components.\n * Use this to configure default props for Suspense, Delay, and other Suspensive components globally.\n *\n * @example\n * ```tsx\n * const defaultProps = new DefaultProps({\n * Delay: {\n * ms: 1000,\n * fallback: <LoadingSpinner />\n * },\n * Suspense: {\n * fallback: <Skeleton />,\n * clientOnly: false,\n * },\n * })\n *\n * function App() {\n * return (\n * <DefaultPropsProvider defaultProps={defaultProps}>\n * <YourApp />\n * </DefaultPropsProvider>\n * )\n * }\n * ```\n *\n * @see {@link https://suspensive.org/docs/react/DefaultPropsProvider Suspensive Docs}\n */\nexport const DefaultPropsProvider = ({ defaultProps, children }: DefaultPropsProviderProps) => (\n <DelayDefaultPropsContext.Provider value={defaultProps.Delay ?? {}}>\n <SuspenseDefaultPropsContext.Provider value={defaultProps.Suspense ?? {}}>\n {children}\n </SuspenseDefaultPropsContext.Provider>\n </DelayDefaultPropsContext.Provider>\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAa,eAAb,MAA0B;CAIxB,YAAY,eAA6B,CAAC,GAAG;;EAC3C,IAAI,QAAQ,IAAI,aAAa,iBAAiB,+BAAO,aAAa,iFAAO,QAAO,UAC9E,gBAAgB,OAAO,aAAa,MAAM,KAAK,GAAG,qDAAqD;EAEzG,KAAK,WAAW,aAAa;EAC7B,KAAK,QAAQ,aAAa;CAC5B;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,wBAAwB,EAAE,cAAc,eAA0C;;QAC7F,oBAAC,yBAAyB,UAA1B;EAAmC,+BAAO,aAAa,4EAAS,CAAC;YAC/D,oBAAC,4BAA4B,UAA7B;GAAsC,gCAAO,aAAa,iFAAY,CAAC;GACpE;EACmC;CACL;AACrC"}