"use client"; import { useCallback, useState } from "react"; import { range } from "fp-ts/NonEmptyArray"; import { toolGroups } from "@/config/tools"; import { uuid } from "@/lib/uuid"; import { useScrollFollow } from "@/hooks/useScrollFollow"; import { Button } from "@/components/ui/button"; import { Input, InputProps } from "@/components/ui/input"; import * as Select from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { Clear } from "@/components/buttons/clear"; import { Copy } from "@/components/buttons/copy"; import { Configuration } from "@/components/configuration"; import { Configurations } from "@/components/configurations"; import { ControlMenu } from "@/components/control-menu"; import { icons } from "@/components/icons"; import { LabeledSwitch } from "@/components/labeled-switch"; import { PageRootSection } from "@/components/page-root-section"; import { PageSection } from "@/components/page-section"; const versions = { v1: "1", v4: "4", } as const; type UuidVersion = (typeof versions)[keyof typeof versions]; function isUuidVersion(s: string): s is UuidVersion { return Object.values(versions).includes(s as UuidVersion); } export default function Page() { const [hyphens, setHyphens] = useState(true); const [uppercase, setUppercase] = useState(false); const [uuidVersion, setUuidVersion] = useState("4"); const [generates, setGenerates] = useState(1); const [uuids, setUuids] = useState([]); const ref = useScrollFollow([uuids]); const uuidsString = uuids.join("\n"); const clearUuids = useCallback(() => setUuids([]), []); const onUuidVersionChange: NonNullable = useCallback(value => { if (isUuidVersion(value)) { setUuidVersion(value); } }, []); const onGeneratesChange: NonNullable = useCallback(e => { const newGenerates = Number(e.currentTarget.value); if (newGenerates >= 1 && newGenerates <= 1000) { setGenerates(newGenerates); } }, []); const onGenerateClick = () => { const newUuids = range(1, generates).map(_ => uuid(uuidVersion, hyphens, uppercase)); setUuids([...uuids, ...newUuids]); }; const hyphensConfig = ( } title="Hyphens" control={ } /> ); const uppercaseConfig = ( } title="Uppercase" control={ } /> ); const uuidVersionConfig = ( } title="UUID version" description="Choose the version of UUID to generate" control={ 1 4 (GUID) } /> ); const uuidsCopyButton = ; const uuidsClearButton = ; const uuidsControl = ; return (
×