@yamada-ui/loading
Version:
Yamada UI loading components
1 lines • 22 kB
Source Map (JSON)
{"version":3,"sources":["../src/loading-provider.tsx"],"sourcesContent":["import type {\n CSSUIObject,\n FC,\n HTMLUIProps,\n LoadingComponentProps,\n LoadingConfigOptions,\n ThemeConfig,\n} from \"@yamada-ui/core\"\nimport type { MotionVariants } from \"@yamada-ui/motion\"\nimport type {\n ForwardedRef,\n MutableRefObject,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n RefObject,\n} from \"react\"\nimport { forwardRef, memo, ui } from \"@yamada-ui/core\"\nimport { AnimatePresence, motion } from \"@yamada-ui/motion\"\nimport { Portal } from \"@yamada-ui/portal\"\nimport { useTimeout } from \"@yamada-ui/use-timeout\"\nimport {\n assignRef,\n isNumber,\n isValidElement,\n useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport {\n createContext,\n createRef,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { RemoveScroll } from \"react-remove-scroll\"\nimport { Loading } from \"./loading\"\n\ninterface LoadingContextProps {\n /**\n * Function to finish loading.\n */\n finish: () => void\n /**\n * Function to forcefully update the loading state.\n *\n * Please be careful, as it will forcefully overwrite the state of the loading component.\n */\n force: (state: Partial<LoadingState>) => void\n /**\n * Returns a judgement on whether it is currently loading or not.\n */\n isLoading: () => boolean\n /**\n * Function to start loading.\n *\n * If you specify a `message` etc. as an argument, the loading will change accordingly.\n */\n start: (options?: LoadingOptions) => void\n /**\n * Function to update loading.\n *\n * If you specify a `message` etc. as an argument, the loading will change accordingly.\n */\n update: (options: LoadingOptions) => void\n}\n\ninterface LoadingContext {\n /**\n * The background loading animation.\n */\n background: LoadingContextProps\n /**\n * The custom loading animation.\n *\n * This cannot be used unless a component is defined at `config/loading/custom.`\n */\n custom: LoadingContextProps\n /**\n * The page loading animation.\n */\n page: LoadingContextProps\n /**\n * The screen loading animation.\n */\n screen: LoadingContextProps\n}\n\nexport interface LoadingOptions {\n duration?: null | number\n message?: ReactNode | undefined\n}\n\ninterface LoadingState {\n duration: null | number\n loadingCount: number\n message: ReactNode | undefined\n}\n\nexport interface LoadingProviderProps\n extends PropsWithChildren<ThemeConfig[\"loading\"]> {}\n\nconst LoadingContext = createContext({} as LoadingContext)\n\ninterface Refs {\n finish: RefObject<LoadingContextProps[\"finish\"]>\n force: RefObject<LoadingContextProps[\"force\"]>\n isLoading: RefObject<LoadingContextProps[\"isLoading\"]>\n start: RefObject<LoadingContextProps[\"start\"]>\n update: RefObject<LoadingContextProps[\"update\"]>\n}\n\ntype ControlRefs = MutableRefObject<Refs>\n\nconst createLoadingRefs = (): Refs => ({\n finish: createRef<LoadingContextProps[\"finish\"]>(),\n force: createRef<LoadingContextProps[\"force\"]>(),\n isLoading: createRef<LoadingContextProps[\"isLoading\"]>(),\n start: createRef<LoadingContextProps[\"start\"]>(),\n update: createRef<LoadingContextProps[\"update\"]>(),\n})\n\nconst createLoadingFunc = (refs: ControlRefs): LoadingContextProps => ({\n finish: () => refs.current.finish.current?.(),\n force: (state) => refs.current.force.current?.(state),\n isLoading: () => refs.current.isLoading.current?.() ?? false,\n start: (props) => refs.current.start.current?.(props),\n update: (props) => refs.current.update.current?.(props),\n})\n\nconst incrementCount = (prev: number) => prev + 1\nconst decrementCount = (prev: number) => (prev === 0 ? prev : prev - 1)\n\nexport const LoadingProvider: FC<LoadingProviderProps> = ({\n background,\n children,\n custom,\n page,\n screen,\n}) => {\n const screenRefs = useRef(createLoadingRefs())\n const pageRefs = useRef(createLoadingRefs())\n const backgroundRefs = useRef(createLoadingRefs())\n const customRefs = useRef(createLoadingRefs())\n\n const screenLoadingFunc = createLoadingFunc(screenRefs)\n const pageLoadingFunc = createLoadingFunc(pageRefs)\n const backgroundLoadingFunc = createLoadingFunc(backgroundRefs)\n const customLoadingFunc = createLoadingFunc(customRefs)\n\n const value = {\n background: backgroundLoadingFunc,\n custom: customLoadingFunc,\n page: pageLoadingFunc,\n screen: screenLoadingFunc,\n }\n\n return (\n <LoadingContext.Provider value={value}>\n {children}\n\n <Controller\n controlRefs={screenRefs}\n {...screen}\n component={\n screen?.component ??\n ((props, ref) => <ScreenComponent ref={ref} {...props} />)\n }\n />\n\n <Controller\n controlRefs={pageRefs}\n {...page}\n component={\n page?.component ??\n ((props, ref) => <PageComponent ref={ref} {...props} />)\n }\n />\n\n <Controller\n controlRefs={backgroundRefs}\n {...background}\n blockScrollOnMount={background?.blockScrollOnMount ?? false}\n component={\n background?.component ??\n ((props, ref) => <BackgroundComponent ref={ref} {...props} />)\n }\n />\n\n <Controller\n blockScrollOnMount={background?.blockScrollOnMount ?? false}\n controlRefs={customRefs}\n {...custom}\n component={custom?.component}\n />\n </LoadingContext.Provider>\n )\n}\n\nLoadingProvider.__ui__ = \"LoadingProvider\"\n\ninterface ControllerProps extends LoadingConfigOptions {\n controlRefs: ControlRefs\n render?: (props: LoadingComponentProps) => ReactElement\n}\n\nconst Controller: FC<ControllerProps> = ({\n allowPinchZoom = false,\n appendToParentPortal,\n blockScrollOnMount = true,\n component,\n containerRef,\n controlRefs,\n duration: durationProps = null,\n icon,\n initialState,\n text,\n}) => {\n const isLoadingRef = useRef<boolean>(false)\n const [{ duration, loadingCount, message }, setState] =\n useState<LoadingState>({\n duration: durationProps,\n loadingCount: initialState ? 1 : 0,\n message: undefined,\n })\n\n const { finish, force, isLoading, start, update }: LoadingContextProps =\n useMemo(\n () => ({\n finish: () => {\n isLoadingRef.current = false\n\n setState(({ loadingCount }) => ({\n duration: durationProps,\n loadingCount: decrementCount(loadingCount),\n message: undefined,\n }))\n },\n\n force: ({ duration = durationProps, loadingCount = 0, message }) => {\n isLoadingRef.current = !!loadingCount\n\n setState({\n duration,\n loadingCount,\n message,\n })\n },\n\n isLoading: () => isLoadingRef.current,\n\n start: ({ duration = durationProps, message } = {}) => {\n isLoadingRef.current = true\n\n setState(({ loadingCount }) => ({\n duration,\n loadingCount: incrementCount(loadingCount),\n message,\n }))\n },\n\n update: (next) => setState((prev) => ({ ...prev, ...next })),\n }),\n [durationProps],\n )\n\n assignRef(controlRefs.current.isLoading, isLoading)\n assignRef(controlRefs.current.start, start)\n assignRef(controlRefs.current.finish, finish)\n assignRef(controlRefs.current.update, update)\n assignRef(controlRefs.current.force, force)\n\n const props: LoadingComponentProps = {\n duration,\n icon,\n initialState,\n message,\n text,\n onFinish: finish,\n }\n\n useUpdateEffect(() => {\n if (initialState || isNumber(durationProps))\n setState({\n duration: durationProps,\n loadingCount: initialState ? 1 : 0,\n message: undefined,\n })\n }, [initialState, durationProps])\n\n return (\n <AnimatePresence initial={false}>\n {loadingCount ? (\n <Portal\n appendToParentPortal={appendToParentPortal}\n containerRef={containerRef}\n >\n <RemoveScroll\n allowPinchZoom={allowPinchZoom}\n enabled={blockScrollOnMount}\n forwardProps\n >\n <Render component={component} {...props} />\n </RemoveScroll>\n </Portal>\n ) : null}\n </AnimatePresence>\n )\n}\n\nController.__ui__ = \"Controller\"\n\ninterface RenderProps extends LoadingComponentProps {\n component?: (\n props: LoadingComponentProps,\n ref: ForwardedRef<any>,\n ) => ReactNode\n}\n\nconst Render = forwardRef<RenderProps, \"div\">(\n ({ component, ...props }, ref) => {\n if (typeof component === \"function\") {\n return component(props, ref)\n } else {\n return null\n }\n },\n)\n\nRender.displayName = \"Render\"\nRender.__ui__ = \"Render\"\n\ninterface MessageProps extends HTMLUIProps<\"p\"> {\n message: ReactNode\n}\n\nconst Message: FC<MessageProps> = ({ message, ...rest }) => {\n return message ? (\n isValidElement(message) ? (\n message\n ) : (\n <ui.p {...rest}>{message}</ui.p>\n )\n ) : null\n}\n\nconst getVariants = (type: \"fade\" | \"scaleFade\" = \"fade\"): MotionVariants => ({\n animate: {\n opacity: 1,\n scale: type === \"scaleFade\" ? 1 : undefined,\n transition: {\n duration: 0.4,\n ease: [0.4, 0, 0.2, 1],\n },\n },\n exit: {\n opacity: 0,\n scale: type === \"scaleFade\" ? 0.95 : undefined,\n transition: {\n duration: 0.4,\n ease: [0.4, 0, 1, 1],\n },\n },\n initial: {\n opacity: 0,\n scale: type === \"scaleFade\" ? 0.95 : undefined,\n },\n})\n\nconst getOverlayStyle = (\n type: \"fill\" | \"transparent\" = \"fill\",\n): CSSUIObject => ({\n alignItems: \"center\",\n bg:\n type === \"fill\"\n ? [\"fallback(white, #fbfbfb)\", \"fallback(black, #141414)\"]\n : \"fallback(blackAlpha.600, rgba(0, 0, 0, 0.48))\",\n bottom: 0,\n display: \"flex\",\n h: \"100dvh\",\n justifyContent: \"center\",\n left: 0,\n p: \"fallback(4, 1rem)\",\n position: \"fixed\",\n right: 0,\n top: 0,\n w: \"100vw\",\n zIndex: \"fallback(beerus, 9999)\",\n})\n\nconst getMotionProps = (\n initialState: boolean | undefined,\n type: \"fade\" | \"scaleFade\" = \"fade\",\n) => ({\n animate: \"animate\",\n exit: \"exit\",\n initial: initialState ? false : \"initial\",\n variants: getVariants(type),\n})\n\nconst ScreenComponent = memo(\n forwardRef<LoadingComponentProps, \"div\">(\n ({ duration, icon, initialState, message, text, onFinish }, ref) => {\n const css: CSSUIObject = {\n alignItems: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"fallback(2, 0.5rem)\",\n justifyContent: \"center\",\n maxW: \"24rem\",\n }\n\n useTimeout(onFinish, duration)\n\n return (\n <motion.div\n ref={ref}\n className=\"ui-loading-screen\"\n {...getMotionProps(initialState)}\n __css={getOverlayStyle()}\n >\n <ui.div __css={css}>\n <Loading fontSize=\"6xl\" {...icon} />\n <Message lineClamp={3} message={message} {...text} />\n </ui.div>\n </motion.div>\n )\n },\n ),\n)\n\nScreenComponent.displayName = \"ScreenComponent\"\nScreenComponent.__ui__ = \"ScreenComponent\"\nconst PageComponent = memo(\n forwardRef<LoadingComponentProps, \"div\">(\n ({ duration, icon, initialState, message, text, onFinish }, ref) => {\n const css: CSSUIObject = {\n alignItems: \"center\",\n bg: [\"fallback(white, #fbfbfb)\", \"fallback(black, #141414)\"],\n boxShadow: [\n \"fallback(lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05))\",\n \"fallback(dark-lg, 0px 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 5px 10px rgba(0, 0, 0, 0.2), 0px 15px 40px rgba(0, 0, 0, 0.4))\",\n ],\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"fallback(2, 0.5rem)\",\n justifyContent: \"center\",\n maxW: \"24rem\",\n p: \"fallback(4, 1rem)\",\n rounded: \"fallback(md, 0.375rem)\",\n }\n\n useTimeout(onFinish, duration)\n\n return (\n <motion.div\n ref={ref}\n className=\"ui-loading-page\"\n {...getMotionProps(initialState)}\n __css={getOverlayStyle(\"transparent\")}\n >\n <motion.div\n className=\"ui-loading-page__inner\"\n {...getMotionProps(initialState, \"scaleFade\")}\n __css={css}\n >\n <Loading fontSize=\"6xl\" {...icon} />\n <Message lineClamp={3} message={message} {...text} />\n </motion.div>\n </motion.div>\n )\n },\n ),\n)\n\nPageComponent.displayName = \"PageComponent\"\nPageComponent.__ui__ = \"PageComponent\"\n\nconst BackgroundComponent = memo(\n forwardRef<LoadingComponentProps, \"div\">(\n ({ duration, icon, initialState, message, text, onFinish }, ref) => {\n const css: CSSUIObject = {\n alignItems: \"center\",\n bg: [\"fallback(white, #fbfbfb)\", \"fallback(black, #141414)\"],\n bottom: \"fallback(4, 1rem)\",\n boxShadow: [\n \"fallback(3xl, 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 -25px 50px -12px rgba(0, 0, 0, 0.25))\",\n \"fallback(dark-lg, 0px 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 5px 10px rgba(0, 0, 0, 0.2), 0px 15px 40px rgba(0, 0, 0, 0.4))\",\n ],\n display: \"flex\",\n gap: \"fallback(2, 0.5rem)\",\n justifyContent: \"center\",\n maxW: \"20rem\",\n p: \"fallback(2, 0.5rem)\",\n position: \"fixed\",\n right: \"fallback(4, 1rem)\",\n rounded: \"fallback(md, 0.375rem)\",\n zIndex: \"fallback(beerus, 9999)\",\n }\n\n useTimeout(onFinish, duration)\n\n return (\n <motion.div\n ref={ref}\n className=\"ui-loading-background\"\n {...getMotionProps(initialState, \"scaleFade\")}\n __css={css}\n >\n <Loading fontSize=\"xl\" {...icon} />\n <Message fontSize=\"sm\" lineClamp={1} message={message} {...text} />\n </motion.div>\n )\n },\n ),\n)\n\nBackgroundComponent.displayName = \"BackgroundComponent\"\nBackgroundComponent.__ui__ = \"BackgroundComponent\"\n\n/**\n * `useLoading` is a custom hook for controlling the loading of the application.\n *\n * @see Docs https://yamada-ui.com/hooks/use-loading\n */\nexport const useLoading = (): LoadingContext => {\n const { background, custom, page, screen } = useContext(LoadingContext)\n\n const context = useMemo(\n () => ({ background, custom, page, screen }),\n [background, custom, page, screen],\n )\n\n return context\n}\n"],"mappings":"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","names":["loadingCount","duration","message"]}