validation

This commit is contained in:
Hunter Thornsberry
2024-08-10 18:50:47 -04:00
parent faf094084c
commit 1eedb6d97b
6 changed files with 110 additions and 64 deletions
+17 -50
View File
@@ -1,4 +1,3 @@
import { type VariantProps, cva } from "class-variance-authority";
import * as React from "react";
import { Button } from "@components/UI/Button.js";
@@ -11,67 +10,35 @@ import {
SelectValue,
} from "@components/UI/Select.js";
const generatorVariants = cva(
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2",
{
variants: {
variant: {
default: "",
destructive:
"bg-red-500 text-white hover:bg-red-600 dark:hover:bg-red-600",
success:
"bg-green-500 text-white hover:bg-green-600 dark:hover:bg-green-600",
outline:
"bg-transparent border border-slate-200 hover:bg-slate-100 dark:border-slate-700 dark:text-slate-100",
subtle:
"bg-slate-100 text-slate-900 hover:bg-slate-200 dark:bg-slate-700 dark:text-slate-100",
ghost:
"bg-transparent hover:bg-slate-100 dark:hover:bg-slate-800 dark:text-slate-100 dark:hover:text-slate-100 data-[state=open]:bg-transparent dark:data-[state=open]:bg-transparent",
link: "bg-transparent underline-offset-4 hover:underline text-slate-900 dark:text-slate-100 hover:bg-transparent dark:hover:bg-transparent",
},
size: {
default: "h-10 py-2 px-4",
sm: "h-9 px-2 rounded-md",
lg: "h-11 px-8 rounded-md",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
},
);
export interface GeneratorProps
extends React.BaseHTMLAttributes<HTMLElement>,
VariantProps<typeof generatorVariants> {
extends React.BaseHTMLAttributes<HTMLElement> {
devicePSKBitCount?: number;
value: string;
variant: "default" | "invalid";
buttonText?: string;
changeEvent: (event: string) => void;
selectChange: (event: string) => void;
inputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
buttonClick: React.MouseEventHandler<HTMLButtonElement>;
}
const getBitString = (bitcount?: number) => {
if (bitcount === 32) {
return "32";
}
if (bitcount === 1) {
return "1";
}
return "16";
};
const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
(
{ devicePSKBitCount, value, buttonText, variant, changeEvent, ...props },
{ devicePSKBitCount, variant, value, buttonText, selectChange, inputChange, buttonClick, ...props },
ref,
) => {
return (
<>
<Input type="text" id="pskInput" value={value} />
<Input
type="text"
id="pskInput"
variant={variant}
value={value}
onChange={inputChange}
/>
<Select
value={getBitString(devicePSKBitCount)}
onValueChange={(e) => changeEvent(e)}
value={devicePSKBitCount?.toString()}
onValueChange={(e) => selectChange(e)}
>
<SelectTrigger>
<SelectValue />
@@ -88,7 +55,7 @@ const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
</SelectItem>
</SelectContent>
</Select>
<Button type="button" variant="success" {...props}>
<Button type="button" variant="success" onClick={buttonClick} {...props}>
{buttonText}
</Button>
</>
@@ -97,4 +64,4 @@ const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
);
Generator.displayName = "Button";
export { Generator, generatorVariants };
export { Generator };