import React, { useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import {
ClipboardCopyButton,
CodeBlock,
CodeBlockAction,
EmptyState,
EmptyStateBody,
TextArea,
Title,
} from "@patternfly/react-core";
import type UserRepresentation from "@keycloak/keycloak-admin-client/lib/defs/userRepresentation";
import useSetTimeout from "../../utils/useSetTimeout";
type GeneratedCodeTabProps = {
user?: UserRepresentation;
text: string;
label: string;
};
enum CopyState {
Ready,
Copied,
Error,
}
export const GeneratedCodeTab = ({
text,
user,
label,
}: GeneratedCodeTabProps) => {
const { t } = useTranslation("clients");
const setTimeout = useSetTimeout();
const [copy, setCopy] = useState(CopyState.Ready);
const copyMessage = useMemo(() => {
switch (copy) {
case CopyState.Ready:
return t("copyToClipboard");
case CopyState.Copied:
return t("copySuccess");
case CopyState.Error:
return t("clipboardCopyError");
}
}, [copy]);
useEffect(() => {
if (copy !== CopyState.Ready) {
return setTimeout(() => setCopy(CopyState.Ready), 1000);
}
}, [copy]);
const copyToClipboard = async (text: string) => {
try {
await navigator.clipboard.writeText(text);
setCopy(CopyState.Copied);
} catch (error) {
setCopy(CopyState.Error);
}
};
return user ? (
copyToClipboard(text)}
exitDelay={600}
variant="plain"
>
{copyMessage}
}
>
) : (
{t(`${label}No`)}
{t(`${label}IsDisabled`)}
);
};