@suspensive/react
Version:
Suspensive interfaces for react
74 lines (71 loc) • 2.44 kB
JavaScript
'use client';
import { DelayDefaultPropsContext, SuspenseDefaultPropsContext } from "./contexts/DefaultPropsContexts.mjs";
import { Message_DefaultProp_delay_ms_should_be_greater_than_0, SuspensiveError } from "./models/SuspensiveError.mjs";
import { jsx } from "react/jsx-runtime";
//#region src/DefaultProps.tsx
/**
* A class for configuring default props for Suspensive components.
*
* @example
* ```tsx
* const defaultProps = new DefaultProps({
* Delay: {
* ms: 1200,
* fallback: <LoadingMessage>Loading additional content...</LoadingMessage>
* },
* Suspense: {
* fallback: <Spinner>Fetching data...</Spinner>,
* clientOnly: false,
* },
* })
* ```
*/
var DefaultProps = class {
constructor(defaultProps = {}) {
var _defaultProps$Delay;
if (process.env.NODE_ENV === "development" && typeof ((_defaultProps$Delay = defaultProps.Delay) === null || _defaultProps$Delay === void 0 ? void 0 : _defaultProps$Delay.ms) === "number") SuspensiveError.assert(defaultProps.Delay.ms > 0, Message_DefaultProp_delay_ms_should_be_greater_than_0);
this.Suspense = defaultProps.Suspense;
this.Delay = defaultProps.Delay;
}
};
/**
* A provider component that controls the default settings of Suspensive components.
* Use this to configure default props for Suspense, Delay, and other Suspensive components globally.
*
* @example
* ```tsx
* const defaultProps = new DefaultProps({
* Delay: {
* ms: 1000,
* fallback: <LoadingSpinner />
* },
* Suspense: {
* fallback: <Skeleton />,
* clientOnly: false,
* },
* })
*
* function App() {
* return (
* <DefaultPropsProvider defaultProps={defaultProps}>
* <YourApp />
* </DefaultPropsProvider>
* )
* }
* ```
*
* @see {@link https://suspensive.org/docs/react/DefaultPropsProvider Suspensive Docs}
*/
const DefaultPropsProvider = ({ defaultProps, children }) => {
var _defaultProps$Delay2, _defaultProps$Suspens;
return /* @__PURE__ */ jsx(DelayDefaultPropsContext.Provider, {
value: (_defaultProps$Delay2 = defaultProps.Delay) !== null && _defaultProps$Delay2 !== void 0 ? _defaultProps$Delay2 : {},
children: /* @__PURE__ */ jsx(SuspenseDefaultPropsContext.Provider, {
value: (_defaultProps$Suspens = defaultProps.Suspense) !== null && _defaultProps$Suspens !== void 0 ? _defaultProps$Suspens : {},
children
})
});
};
//#endregion
export { DefaultProps, DefaultPropsProvider };
//# sourceMappingURL=DefaultProps.mjs.map