UNPKG

@playbooks/ui

Version:

An interface library for Playbooks.

228 lines (227 loc) 7.93 kB
"use strict"; const React = require("react"); const useKeyPress = (onKeyPress, listeners) => { React.useEffect(() => { window.addEventListener("keydown", onKeyPress); return () => window.removeEventListener("keydown", onKeyPress); }, [...listeners]); }; const useElementKeyPress = (element, onKeyPress, listeners) => { React.useEffect(() => { if (element) element.addEventListener("keydown", onKeyPress); return () => element && element.removeEventListener("keydown", onKeyPress); }, [...listeners]); }; const useMouseDown = (onMouseDown, listeners) => { React.useEffect(() => { window.addEventListener("mousedown", onMouseDown); return () => window.removeEventListener("mousedown", onMouseDown); }, [...listeners]); }; const useMouseUp = (onMouseUp, listeners) => { React.useEffect(() => { window.addEventListener("mouseup", onMouseUp); return () => window.removeEventListener("mouseup", onMouseUp); }, [...listeners]); }; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); const errorStyles = "color: crimson"; const infoStyles = "color: cadetblue"; const warningStyles = "color: amber"; const successStyles = "color: aquamarine"; class logger { } __publicField(logger, "log", (title, ...data) => { return console.log(title, ...data); }); __publicField(logger, "error", (title, ...data) => { return console.error(`%c${title}`, errorStyles, ...data); }); __publicField(logger, "warn", (title, ...data) => { return console.warn(`%c${title}`, warningStyles, ...data); }); __publicField(logger, "info", (title, ...data) => { return console.info(`%c${title}`, infoStyles, ...data); }); __publicField(logger, "success", (title, ...data) => { return console.info(`%c${title}`, successStyles, ...data); }); __publicField(logger, "debug", (title, ...data) => { return console.debug(`%c${title}`, infoStyles, ...data); }); const useQuery = (method, state = false) => { const [error, setError] = React.useState(null); const [loading, setLoading] = React.useState(state); const onQuery = async (data) => { try { setLoading(true); await method(data); } catch (e) { setError(e); logger.error(e); } finally { setLoading(false); } }; return [onQuery, loading, error]; }; const useAction = (model, method, state = false) => { const [error, setError] = React.useState(null); const [task, setTask] = React.useState({ id: "", name: "action", running: state }); const onAction = async (record) => { try { setTask({ ...task, id: model.id ? model.id : record == null ? void 0 : record.id, running: true }); await method(record); } catch (e) { setError(e); logger.error(e); } finally { setTask({ ...task, id: null, running: false }); } }; return [onAction, task, error]; }; const useSave = (model, method) => { const [error, setError] = React.useState(null); const [task, setTask] = React.useState({ id: "", name: "save", running: false }); const onSave = async (record) => { try { setTask({ ...task, id: model.id ? model.id : record == null ? void 0 : record.id, running: true }); await method(record); } catch (e) { setError(e); logger.error(e); } finally { setTask({ ...task, id: null, running: false }); } }; return [onSave, task, error]; }; const useConfirm = (model, message, method) => { const [error, setError] = React.useState(null); const [task, setTask] = React.useState({ id: "", name: "save", running: false }); const useConfirm2 = async (record) => { try { setTask({ ...task, id: model.id ? model.id : record == null ? void 0 : record.id, running: true }); const confirmed = window.confirm(message); if (confirmed) await method(record); } catch (e) { setError(e); logger.error(e); } finally { setTask({ ...task, id: null, running: false }); } }; return [useConfirm2, task, error]; }; const useDelete = (model, modelName, method) => { const [error, setError] = React.useState(null); const [task, setTask] = React.useState({ id: "", name: "delete", running: false }); const onDelete = async (record) => { try { setTask({ ...task, id: record.id ? record.id : model == null ? void 0 : model.id, running: true }); const confirmed = window.confirm(`Are you sure you want to delete this ${modelName}?`); if (confirmed) await method(record); } catch (e) { setError(e); logger.error(e); } finally { setTask({ ...task, id: null, running: false }); } }; return [onDelete, task, error]; }; const useDeletes = (model, modelName, method) => { const [error, setError] = React.useState(null); const [task, setTask] = React.useState({ id: "", name: "delete", running: false }); const onDelete = async (record) => { try { setTask({ ...task, id: model.id ? model.id : record == null ? void 0 : record.id, running: true }); const confirmed = window.confirm(`Are you sure you want to delete ${model.length} ${modelName}?`); if (confirmed) await method(record); } catch (e) { setError(e); logger.error(e); } finally { setTask({ ...task, id: null, running: false }); } }; return [onDelete, task, error]; }; const useDebounce = (value, delay) => { const [debounce, setDebounce] = React.useState(value); React.useEffect(() => { const handler = setTimeout(() => setDebounce(value), delay); return () => clearTimeout(handler); }, [value, delay]); return debounce; }; const useDelay = (method = null, listeners = []) => { const [active, setActive] = React.useState(false); React.useEffect(() => { setTimeout(() => { method(); setActive(true); }, listeners[0]); }, [...listeners]); return active; }; const useFocus = (listeners = []) => { const ref = React.useRef(null); React.useEffect(() => { var _a; (_a = ref.current) == null ? void 0 : _a.focus(); }, [...listeners]); return ref; }; const useInterval = (method, listeners = []) => { React.useEffect(() => { setTimeout(() => method(), listeners[0] || 1e3); }, [...listeners]); }; const useLoaded = (method = null, listeners = []) => { const [loaded, setLoaded] = React.useState(false); React.useEffect(() => { loaded && method ? method() : setLoaded(true); }, [loaded, ...listeners]); return loaded; }; const useMount = (method, listeners = []) => { const [loaded, setLoaded] = React.useState(false); React.useEffect(() => { loaded ? method() : setLoaded(true); }, [...listeners]); }; const useResize = (method, listeners) => { React.useEffect(() => { method(); window.addEventListener("resize", method); return () => window.removeEventListener("resize", method); }, [...listeners]); }; const useResizeTarget = (element, method, listeners) => { React.useEffect(() => { if (element) element.addEventListener("resize", method); return () => element && element.removeEventListener("resize", method); }, [...listeners]); }; exports.useAction = useAction; exports.useConfirm = useConfirm; exports.useDebounce = useDebounce; exports.useDelay = useDelay; exports.useDelete = useDelete; exports.useDeletes = useDeletes; exports.useElementKeyPress = useElementKeyPress; exports.useFocus = useFocus; exports.useInterval = useInterval; exports.useKeyPress = useKeyPress; exports.useLoaded = useLoaded; exports.useMount = useMount; exports.useMouseDown = useMouseDown; exports.useMouseUp = useMouseUp; exports.useQuery = useQuery; exports.useResize = useResize; exports.useResizeTarget = useResizeTarget; exports.useSave = useSave;