@wener/console
Version:
Base console UI toolkit
64 lines (63 loc) • 2.6 kB
JavaScript
import React, { useEffect, useState } from "react";
import { HiLockClosed, HiMiniLockOpen } from "react-icons/hi2";
import { clsx } from "clsx";
import { Button, NonIdealState } from "../../daisy/index.js";
import { useAuthStore } from "../../foundation/auth/AuthStore.js";
import { ConsoleEvents, getConsoleContext } from "../context.js";
import { getUserAction } from "./getUserAction.js";
export const UserLockOverlay = () => {
const { unlock } = getUserAction();
const [locked, setLock] = useState(false);
const expired = useAuthStore((s) => {
return s.status === "Expired";
});
const [hidden, setHidden] = useState(!expired);
const [pin, setPin] = useState("");
useEffect(() => {
if (locked) {
setPin(Math.random().toString().slice(-4));
setHidden(false);
}
}, [
locked
]);
const emitter = getConsoleContext().getEmitter();
useEffect(() => {
return emitter.on(ConsoleEvents.Lock, () => {
setLock(true);
});
}, [
emitter
]);
if (hidden || expired) {
return null;
}
return /*#__PURE__*/ React.createElement("div", {
className: clsx("absolute inset-0 z-50 flex items-center justify-center", "transition duration-500", locked ? "opacity-100 backdrop-blur-sm" : "pointer-events-none opacity-0 backdrop-blur-none", hidden && !locked && "hidden"),
onAnimationEnd: () => {
if (!locked) {
setHidden(true);
}
}
}, /*#__PURE__*/ React.createElement("div", {
className: "rounded border-base-200 bg-base-100 px-8 py-4 shadow-xl"
}, /*#__PURE__*/ React.createElement(NonIdealState, {
icon: /*#__PURE__*/ React.createElement(HiLockClosed, {
className: "h-12 w-12"
}),
title: /*#__PURE__*/ React.createElement("div", {
className: "flex flex-col gap-1"
}, /*#__PURE__*/ React.createElement("span", null, "\u7CFB\u7EDF\u5DF2\u9501\u5B9A"), /*#__PURE__*/ React.createElement("span", null, pin)),
description: "\u70B9\u51FB\u89E3\u9501\u8FDB\u5165\u7CFB\u7EDF",
action: /*#__PURE__*/ React.createElement("div", {
className: "flex gap-2 opacity-95"
}, /*#__PURE__*/ React.createElement(Button, {
autoFocus: true,
className: "btn-success btn-sm",
onClick: unlock
}, /*#__PURE__*/ React.createElement(HiMiniLockOpen, {
className: "h-4 w-4"
}), "\u89E3\u9501"))
})));
};
//# sourceMappingURL=UserLockOverlay.js.map