import React, { useEffect, useId, useState } from "react"; import { Building2, PenLine, Settings, ShieldCheck } from "lucide-react"; import { useAuth } from "@/shared/context/AuthContext"; import { useLocalizedName } from "@/shared/common/localizedName"; import { useUnit } from "@/user-management/hooks/useUnit"; import { useUnitConfiguration } from "@/shared/hooks/useUnitConfiguration"; import { prefixSuffixService } from "@/user-management/services/api/prefixSuffixService"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/shared/common/ui/select"; import { Switch } from "@/shared/common/ui/switch"; import { Label } from "@/shared/common/ui/label"; import { t } from "i18next"; type UnitOption = { id: string; name?: { am: string; en: string }; }; type UnitConfigurationItem = { id: string; unitId: string; attachSignatureOnAttachment?: boolean; }; const AttachmentSignature = () => { const { user } = useAuth(); const queryClient = useQueryClient(); const organizationId = user?.employee?.[0]?.organizationId || ""; const localizedName = useLocalizedName(); const switchId = useId(); const { getList: getUnitList } = useUnit(); const { data: units, isLoading: isLoadingUnits } = getUnitList( organizationId, { take: 1000 }, ); const [selectedUnitId, setSelectedUnitId] = useState(""); const [localAttachSignatureValue, setLocalAttachSignatureValue] = useState< boolean | null >(null); useEffect(() => { if (!selectedUnitId && units?.data?.items?.length) { setSelectedUnitId(units.data.items[0].id); } }, [selectedUnitId, units]); const unitItems = (units?.data?.items ?? []) as UnitOption[]; const hasUnits = unitItems.length > 0; const selectedUnitName = unitItems.find( (unit) => unit.id === selectedUnitId, )?.name; const { data: unitConfigResponse, isLoading: isLoadingConfig } = useUnitConfiguration(selectedUnitId); const unitConfigurations = (unitConfigResponse?.data?.items as UnitConfigurationItem[] | undefined) || []; const filteredConfig = unitConfigurations.find((item) => item.unitId === selectedUnitId) || unitConfigurations[0]; const configValue = Boolean(filteredConfig?.attachSignatureOnAttachment); const isSwitchEnabled = Boolean(filteredConfig?.id); const switchValue = localAttachSignatureValue === null ? configValue : localAttachSignatureValue; useEffect(() => { setLocalAttachSignatureValue(null); }, [selectedUnitId, configValue]); const { mutate: updateEscalationField, isPending: isUpdatingSignature } = useMutation({ mutationFn: ({ id, value }: { id: string; value: boolean }) => prefixSuffixService.updateInternalPrefixSuffix( { attachSignatureOnAttachment: value, unitId: selectedUnitId, }, id, ), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["unitConfig", selectedUnitId], }); }, onError: () => { setLocalAttachSignatureValue(null); }, }); const handleToggleSignature = (checked: boolean) => { if (!filteredConfig?.id || isUpdatingSignature) return; setLocalAttachSignatureValue(checked); updateEscalationField({ id: filteredConfig.id, value: checked, }); }; return (

{t("setting.attachmentSignature.badge")}

{t("setting.attachmentSignature.title")}

{t("setting.attachmentSignature.description")}

{t("setting.attachmentSignature.unitHint")}

{t("setting.attachmentSignature.toggleDescription")}

{t("setting.attachmentSignature.status")}{" "} {switchValue ? t("profile.enabled") : t("profile.disabled")}
{!isSwitchEnabled && !isLoadingConfig && (

{t("setting.noConfigFound")}

)}
); }; export default AttachmentSignature;