import type { ReactNode } from "react";
import { useCallback } from "react";
import type { SelectProps } from "@mantine/core";
import { Button, Flex, Group, Select, TableTd, TableTr, Text } from "@mantine/core";
import { Icon123, IconCheck } from "@tabler/icons-react";
import { useI18n } from "@homarr/translation/client";
import { useAccessContext } from "./context";
import type { HandleCountChange } from "./form";
import { useFormContext } from "./form";
interface AccessSelectRowProps {
itemContent: ReactNode;
permission: string;
index: number;
handleCountChange: HandleCountChange;
}
export const AccessSelectRow = ({ itemContent, permission, index, handleCountChange }: AccessSelectRowProps) => {
const tRoot = useI18n();
const { icons, getSelectData } = useAccessContext();
const form = useFormContext();
const handleRemove = useCallback(() => {
form.setFieldValue(
"items",
form.values.items.filter((_, i) => i !== index),
);
handleCountChange((prev) => prev - 1);
}, [form, index, handleCountChange]);
const Icon = icons[permission] ?? Icon123;
return (
{itemContent}
}
renderOption={RenderOption}
variant="unstyled"
data={getSelectData()}
{...form.getInputProps(`items.${index}.permission`)}
/>
);
};
const iconProps = {
stroke: 1.5,
color: "currentColor",
opacity: 0.6,
size: "1rem",
};
const RenderOption: SelectProps["renderOption"] = ({ option, checked }) => {
const { icons } = useAccessContext();
const Icon = icons[option.value] ?? Icon123;
return (
{option.label}
{checked && }
);
};
interface AccessDisplayRowProps {
itemContent: ReactNode;
permission: string;
}
export const AccessDisplayRow = ({ itemContent, permission }: AccessDisplayRowProps) => {
const { icons, translate } = useAccessContext();
const Icon = icons[permission] ?? Icon123;
return (
{itemContent}
{translate(permission)}
);
};