@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
50 lines • 2.23 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { useSetTimeout } from "../../ui-shared";
import { ClipboardCopyButton, } from "@patternfly/react-core";
import { useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import useQueryPermission from "../../utils/useQueryPermission";
var CopyState;
(function (CopyState) {
CopyState[CopyState["Ready"] = 0] = "Ready";
CopyState[CopyState["Copied"] = 1] = "Copied";
CopyState[CopyState["Error"] = 2] = "Error";
})(CopyState || (CopyState = {}));
export const CopyToClipboardButton = ({ id, label, text, variant = "plain", }) => {
const { t } = useTranslation();
const setTimeout = useSetTimeout();
const permission = useQueryPermission("clipboard-write");
const permissionDenied = (permission === null || permission === void 0 ? void 0 : permission.state) === "denied";
const [copyState, setCopyState] = useState(CopyState.Ready);
// Determine the message to use for the copy button.
const copyMessageKey = useMemo(() => {
if (permissionDenied) {
return "clipboardCopyDenied";
}
switch (copyState) {
case CopyState.Ready:
return "copyToClipboard";
case CopyState.Copied:
return "copySuccess";
case CopyState.Error:
return "clipboardCopyError";
}
}, [permissionDenied, copyState]);
// Reset the message of the copy button after copying to the clipboard.
useEffect(() => {
if (copyState !== CopyState.Ready) {
return setTimeout(() => setCopyState(CopyState.Ready), 1000);
}
}, [copyState, setTimeout]);
const copyToClipboard = async (text) => {
try {
await navigator.clipboard.writeText(text);
setCopyState(CopyState.Copied);
}
catch (_a) {
setCopyState(CopyState.Error);
}
};
return (_jsx(ClipboardCopyButton, { id: `copy-button-${id}`, textId: label, "aria-label": t("copyToClipboard"), onClick: () => copyToClipboard(text), exitDelay: 600, variant: variant, children: t(copyMessageKey) }));
};
//# sourceMappingURL=CopyToClipboardButton.js.map