UNPKG

@keycloakify/keycloak-admin-ui

Version:
50 lines 2.23 kB
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