2024-03-03 22:34:43 -05:00
|
|
|
import * as SwitchPrimitive from "@radix-ui/react-switch"
|
|
|
|
|
import { useField } from "formik"
|
|
|
|
|
import React, { useState } from "react"
|
|
|
|
|
import ErrorMessage from "./ErrorMessage"
|
|
|
|
|
import RequiredAsterisk from "./RequiredAsterisk"
|
2024-03-04 20:50:32 -05:00
|
|
|
import Separator from "./Separator"
|
|
|
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
|
|
|
|
|
import { faClock } from "@fortawesome/free-regular-svg-icons"
|
2024-03-03 22:09:33 -05:00
|
|
|
|
|
|
|
|
const ToggleField = ({
|
|
|
|
|
children,
|
|
|
|
|
...props
|
|
|
|
|
}: {
|
2024-03-03 22:34:43 -05:00
|
|
|
children: React.ReactNode
|
2024-03-03 22:09:33 -05:00
|
|
|
} & React.InputHTMLAttributes<HTMLInputElement>) => {
|
2024-03-03 22:34:43 -05:00
|
|
|
const { required, ...restProps } = props
|
|
|
|
|
const [field, meta] = useField({ ...(restProps as { name: string }), type: "checkbox" })
|
|
|
|
|
const [checked, setChecked] = useState(false)
|
2024-03-03 22:09:33 -05:00
|
|
|
|
|
|
|
|
return (
|
2024-03-04 20:50:32 -05:00
|
|
|
<div className="flex flex-col gap-4">
|
|
|
|
|
<div className="flex flex-col gap-4">
|
|
|
|
|
<Separator/>
|
2024-03-04 23:33:49 -05:00
|
|
|
<label className="flex items-center gap-2 font-bold text-sm leading-tight text-indigo-900">
|
2024-03-04 20:50:32 -05:00
|
|
|
{children}
|
|
|
|
|
<RequiredAsterisk required={required} />
|
|
|
|
|
</label>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="flex gap-3 itens-center">
|
|
|
|
|
<SwitchPrimitive.Root
|
2024-03-04 23:33:49 -05:00
|
|
|
className="relative h-[25px] w-[42px] cursor-default rounded-full bg-indigo-900 outline-none"
|
2024-03-04 20:50:32 -05:00
|
|
|
checked={checked}
|
|
|
|
|
onCheckedChange={(isChecked) => {
|
|
|
|
|
setChecked(isChecked)
|
|
|
|
|
field.onChange({ target: { name: field.name, value: isChecked } })
|
|
|
|
|
}}
|
|
|
|
|
>
|
2024-03-04 23:33:49 -05:00
|
|
|
<SwitchPrimitive.Thumb className="block h-[21px] w-[21px] translate-x-0.5 rounded-full bg-white transition-transform duration-100 will-change-transform data-[state=checked]:translate-x-[19px]" />
|
2024-03-04 20:50:32 -05:00
|
|
|
</SwitchPrimitive.Root>
|
2024-03-04 23:33:49 -05:00
|
|
|
<div className="flex gap-4 items-center text-sm leading-tight">
|
|
|
|
|
<span>Toggle ON</span>
|
|
|
|
|
<span>|</span>
|
|
|
|
|
<span className="flex gap-2 items-center"><FontAwesomeIcon icon={faClock} />Select Tolerance Level</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-03-04 20:50:32 -05:00
|
|
|
</div>
|
|
|
|
|
|
2024-03-03 22:09:33 -05:00
|
|
|
<ErrorMessage touched={meta.touched} error={meta.error} />
|
|
|
|
|
</div>
|
2024-03-03 22:34:43 -05:00
|
|
|
)
|
|
|
|
|
}
|
2024-03-03 22:09:33 -05:00
|
|
|
|
2024-03-03 22:34:43 -05:00
|
|
|
export default ToggleField
|