Browse Source

Add hide toggle to password generator

pull/276/head
Tilen Komel 2 years ago
parent
commit
e3fad3015f
  1. 4
      src/components/Form/FormPasswordGenerator.tsx
  2. 2
      src/components/PageComponents/Config/Security.tsx
  3. 16
      src/components/UI/Generator.tsx

4
src/components/Form/FormPasswordGenerator.tsx

@ -8,6 +8,7 @@ import { Controller, type FieldValues } from "react-hook-form";
export interface PasswordGeneratorProps<T> extends BaseFormBuilderProps<T> { export interface PasswordGeneratorProps<T> extends BaseFormBuilderProps<T> {
type: "passwordGenerator"; type: "passwordGenerator";
hide?: boolean;
devicePSKBitCount: number; devicePSKBitCount: number;
inputChange: ChangeEventHandler; inputChange: ChangeEventHandler;
selectChange: (event: string) => void; selectChange: (event: string) => void;
@ -17,6 +18,7 @@ export interface PasswordGeneratorProps<T> extends BaseFormBuilderProps<T> {
export function PasswordGenerator<T extends FieldValues>({ export function PasswordGenerator<T extends FieldValues>({
control, control,
field, field,
disabled,
}: GenericFormElementProps<T, PasswordGeneratorProps<T>>) { }: GenericFormElementProps<T, PasswordGeneratorProps<T>>) {
return ( return (
<Controller <Controller
@ -24,6 +26,7 @@ export function PasswordGenerator<T extends FieldValues>({
control={control} control={control}
render={({ field: { value, ...rest } }) => ( render={({ field: { value, ...rest } }) => (
<Generator <Generator
hide={field.hide}
devicePSKBitCount={field.devicePSKBitCount} devicePSKBitCount={field.devicePSKBitCount}
inputChange={field.inputChange} inputChange={field.inputChange}
selectChange={field.selectChange} selectChange={field.selectChange}
@ -33,6 +36,7 @@ export function PasswordGenerator<T extends FieldValues>({
buttonText="Generate" buttonText="Generate"
{...field.properties} {...field.properties}
{...rest} {...rest}
disabled={disabled}
/> />
)} )}
/> />

2
src/components/PageComponents/Config/Security.tsx

@ -133,6 +133,7 @@ export const Security = (): JSX.Element => {
devicePSKBitCount: privateKeyBitCount, devicePSKBitCount: privateKeyBitCount,
inputChange: privateKeyInputChangeEvent, inputChange: privateKeyInputChangeEvent,
selectChange: privateKeySelectChangeEvent, selectChange: privateKeySelectChangeEvent,
hide: !privateKeyVisible,
buttonClick: () => buttonClick: () =>
clickEvent( clickEvent(
setPrivateKey, setPrivateKey,
@ -191,6 +192,7 @@ export const Security = (): JSX.Element => {
devicePSKBitCount: adminKeyBitCount, devicePSKBitCount: adminKeyBitCount,
inputChange: adminKeyInputChangeEvent, inputChange: adminKeyInputChangeEvent,
selectChange: adminKeySelectChangeEvent, selectChange: adminKeySelectChangeEvent,
hide: !adminKeyVisible,
buttonClick: () => buttonClick: () =>
clickEvent( clickEvent(
setAdminKey, setAdminKey,

16
src/components/UI/Generator.tsx

@ -9,8 +9,10 @@ import {
SelectTrigger, SelectTrigger,
SelectValue, SelectValue,
} from "@components/UI/Select.js"; } from "@components/UI/Select.js";
import type { LucideIcon } from "lucide-react";
export interface GeneratorProps extends React.BaseHTMLAttributes<HTMLElement> { export interface GeneratorProps extends React.BaseHTMLAttributes<HTMLElement> {
hide?: boolean;
devicePSKBitCount?: number; devicePSKBitCount?: number;
value: string; value: string;
variant: "default" | "invalid"; variant: "default" | "invalid";
@ -18,11 +20,17 @@ export interface GeneratorProps extends React.BaseHTMLAttributes<HTMLElement> {
selectChange: (event: string) => void; selectChange: (event: string) => void;
inputChange: (event: React.ChangeEvent<HTMLInputElement>) => void; inputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
buttonClick: React.MouseEventHandler<HTMLButtonElement>; buttonClick: React.MouseEventHandler<HTMLButtonElement>;
action?: {
icon: LucideIcon;
onClick: () => void;
};
disabled?: boolean;
} }
const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>( const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
( (
{ {
hide = true,
devicePSKBitCount, devicePSKBitCount,
variant, variant,
value, value,
@ -30,6 +38,8 @@ const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
selectChange, selectChange,
inputChange, inputChange,
buttonClick, buttonClick,
action,
disabled,
...props ...props
}, },
ref, ref,
@ -37,17 +47,19 @@ const Generator = React.forwardRef<HTMLInputElement, GeneratorProps>(
return ( return (
<> <>
<Input <Input
type="text" type={hide ? "password" : "text"}
id="pskInput" id="pskInput"
variant={variant} variant={variant}
value={value} value={value}
onChange={inputChange} onChange={inputChange}
action={action}
disabled={disabled}
/> />
<Select <Select
value={devicePSKBitCount?.toString()} value={devicePSKBitCount?.toString()}
onValueChange={(e) => selectChange(e)} onValueChange={(e) => selectChange(e)}
> >
<SelectTrigger> <SelectTrigger className="!max-w-max">
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>

Loading…
Cancel
Save