@playbooks/ui
Version:
An interface library for Playbooks.
228 lines (227 loc) • 7.93 kB
JavaScript
;
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;