"use client"; import { useCallback, useMemo, useState } from "react"; import { range } from "fp-ts/NonEmptyArray"; import * as t from "io-ts"; 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 { Select, SelectContent, SelectItem, SelectProps, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { ClearButton } from "@/components/buttons/clear"; import { CopyButton } 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 v1 = "1"; const v4 = "4"; const uuidVersions = t.keyof({ [v1]: null, [v4]: null }); type UuidVersion = t.TypeOf; 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: SelectProps["onValueChange"] = value => { if (uuidVersions.is(value)) { setUuidVersion(value); } }; const onGeneratesChange: InputProps["onChange"] = ({ currentTarget: { value } }) => { const newGenerates = Number(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 = useMemo( () => ( } title="Hyphens" control={ } /> ), [hyphens] ); const uppercaseConfig = useMemo( () => ( } title="Uppercase" control={ } /> ), [uppercase] ); const uuidVersionConfig = useMemo( () => ( } title="UUID version" description="Choose the version of UUID to generate" control={ } /> ), [uuidVersion] ); const generatesInput = useMemo( () => ( ), [generates] ); const uuidsCopyButton = useMemo(() => , [uuidsString]); const uuidsClearButton = useMemo( () => , [clearUuids] ); const uuidsControl = ; return (
× {generatesInput}