import { IconLock, IconLockOpen2 } from "@tabler/icons-react"; import { Field, useFormikContext } from "formik"; import type { ReactNode } from "react"; import Select, { type ActionMeta, components, type OptionProps } from "react-select"; import type { AccessList } from "src/api/backend"; import { useAccessLists } from "src/hooks"; import { DateTimeFormat, intl, T } from "src/locale"; interface AccessOption { readonly value: number; readonly label: string; readonly subLabel: string; readonly icon: ReactNode; } const Option = (props: OptionProps) => { return (
{props.data.icon} {props.data.label}
{props.data.subLabel}
); }; interface Props { id?: string; name?: string; label?: string; } export function AccessField({ name = "accessListId", label = "access-list", id = "accessListId" }: Props) { const { isLoading, isError, error, data } = useAccessLists(["owner", "items", "clients"]); const { setFieldValue } = useFormikContext(); const handleChange = (newValue: any, _actionMeta: ActionMeta) => { setFieldValue(name, newValue?.value); }; const options: AccessOption[] = data?.map((item: AccessList) => ({ value: item.id || 0, label: item.name, subLabel: intl.formatMessage( { id: "access-list.subtitle" }, { users: item?.items?.length, rules: item?.clients?.length, date: item?.createdOn ? DateTimeFormat(item?.createdOn) : "N/A", }, ), icon: , })) || []; // Public option options?.unshift({ value: 0, label: intl.formatMessage({ id: "access-list.public" }), subLabel: intl.formatMessage({ id: "access-list.public.subtitle" }), icon: , }); return ( {({ field, form }: any) => (
{isLoading ?
: null} {isError ?
{`${error}`}
: null} {!isLoading && !isError ? (