UNPKG

5.63 kBSource Map (JSON)View Raw
1{"version":3,"file":"use-lazy.js","sources":["../src/use-lazy/use-lazy.js"],"sourcesContent":["import { useState, useEffect } from \"../core/core\";\r\nimport { isFunction } from \"../core/utils\";\r\n\r\nlet def = \"default\";\r\n\r\nlet typeLoading = \"loading\";\r\n\r\nlet typeResolve = \"resolve\";\r\n\r\nlet typeReject = \"reject\";\r\n\r\nlet defMsLoading = 100;\r\n\r\nlet WhenLoading = () => ({ loading, ...props }) =>\r\n isFunction(loading) ? loading(props) : loading;\r\n\r\nlet WhenError = () => ({ error = \"\", ...props }) =>\r\n isFunction(error) ? error(props) : error;\r\n\r\nlet WhenEmpty = () => () => \"\";\r\n\r\n/**\r\n * It allows to load a component asynchronously.\r\n * @param {Function} callback\r\n * @param {object} [props]\r\n *\r\n * @todo add promise error detection behavior\r\n */\r\nexport function useLazy(callback, args = [], msLoading = defMsLoading) {\r\n let [Component, setComponent] = useState(WhenEmpty);\r\n useEffect(() => {\r\n let cancel;\r\n let ready;\r\n\r\n callback()\r\n .then(data => {\r\n ready = true;\r\n if (!cancel) {\r\n let value = def in data ? data[def] : data;\r\n setComponent(() => props =>\r\n isFunction(value) ? value(props) : value\r\n );\r\n }\r\n })\r\n .catch(() => {\r\n ready = true;\r\n if (!cancel) setComponent(WhenError);\r\n });\r\n\r\n setTimeout(\r\n () => !cancel && !ready && setComponent(WhenLoading),\r\n msLoading\r\n );\r\n return () => {\r\n cancel = true;\r\n if (ready) setComponent(() => WhenEmpty);\r\n };\r\n }, args);\r\n\r\n return Component;\r\n}\r\n\r\nexport function useLazyNode(callback, msLoading = defMsLoading) {\r\n let [prevent, setPrevent] = useState(true);\r\n let [status, setStatus] = useState();\r\n let [Component, setComponent] = useState(WhenEmpty);\r\n\r\n function CaseProxy(props) {\r\n if (prevent) setPrevent(prevent => (prevent ? false : prevent));\r\n return status == typeLoading\r\n ? WhenLoading()(props)\r\n : status == typeResolve\r\n ? Component(props)\r\n : status == typeReject\r\n ? WhenError()(props)\r\n : WhenEmpty()();\r\n }\r\n\r\n useEffect(() => {\r\n if (!prevent) {\r\n callback()\r\n .then(md => {\r\n setStatus(typeResolve);\r\n setComponent(() => (def in md ? md[def] : md));\r\n })\r\n .catch(e => setStatus(typeReject));\r\n setTimeout(\r\n () =>\r\n setStatus(status =>\r\n [typeLoading, typeReject, typeResolve].includes(status)\r\n ? status\r\n : typeLoading\r\n ),\r\n msLoading\r\n );\r\n }\r\n }, [prevent]);\r\n\r\n return CaseProxy;\r\n}\r\n"],"names":["isFunction","useState","useEffect"],"mappings":"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"}
\No newline at end of file