'use client' import type { ResourceUserAccessSetting } from '@/models/access-control' import { Avatar } from '@langgenius/dify-ui/avatar' import { cn } from '@langgenius/dify-ui/cn' import { Select, SelectContent, SelectItem, SelectItemIndicator, SelectItemText, SelectTrigger, SelectValue, } from '@langgenius/dify-ui/select' import { memo, useCallback } from 'react' import { useTranslation } from 'react-i18next' import { ACCESS_RULE_TABLE_GRID, DEFAULT_ACCESS_POLICY_ID } from './constants' type PolicyOption = { id: string name: string } type UserAccessPolicyRowProps = { setting: ResourceUserAccessSetting policyOptions: PolicyOption[] disabled: boolean isMaintainer?: boolean className?: string onChange?: (accountId: string, accessPolicyIds: string[]) => void onRemove?: (accountId: string, accessPolicyId: string) => void } function UserAccessPolicyRow({ setting, policyOptions, disabled, isMaintainer = false, className, onChange, onRemove, }: UserAccessPolicyRowProps) { const { t } = useTranslation() const accountId = setting.account.account_id const selectedPolicy = setting.access_policies[0] const selectedAccessPolicyId = selectedPolicy?.id const selectedPolicyId = selectedAccessPolicyId ?? DEFAULT_ACCESS_POLICY_ID const isPolicySelectDisabled = disabled || isMaintainer || !onChange const isRemoveDisabled = disabled || isMaintainer || !onRemove || !selectedAccessPolicyId const defaultAccessPolicyName = t(($) => $['accessRule.defaultPermission'], { ns: 'permission' }) const accountEmail = setting.account.email || setting.account.account_name const handlePolicyChange = useCallback( (nextPolicyId: string | null) => { if (isPolicySelectDisabled || !nextPolicyId || nextPolicyId === selectedPolicyId) return onChange?.(accountId, [nextPolicyId]) }, [accountId, isPolicySelectDisabled, onChange, selectedPolicyId], ) const handleRemove = useCallback(() => { if (isRemoveDisabled || !selectedAccessPolicyId) return onRemove?.(accountId, selectedAccessPolicyId) }, [accountId, isRemoveDisabled, onRemove, selectedAccessPolicyId]) return (
{accountEmail}