import { cn } from '@langgenius/dify-ui/cn' import { StatusDot } from '@langgenius/dify-ui/status-dot' import { Switch } from '@langgenius/dify-ui/switch' import { useAtomValue } from 'jotai' import * as React from 'react' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' import { userProfileIdAtom } from '@/context/account-state' import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail' import { workspacePermissionKeysAtom } from '@/context/permission-state' import { useDatasetApiAccessUrl } from '@/hooks/use-api-access-url' import Link from '@/next/link' import { useDisableDatasetServiceApi, useEnableDatasetServiceApi, } from '@/service/knowledge/use-dataset' import { getDatasetACLCapabilities } from '@/utils/permission' type CardProps = { apiEnabled: boolean } const Card = ({ apiEnabled }: CardProps) => { const { t } = useTranslation() const datasetId = useDatasetDetailContextWithSelector((state) => state.dataset?.id) const dataset = useDatasetDetailContextWithSelector((state) => state.dataset) const mutateDatasetRes = useDatasetDetailContextWithSelector((state) => state.mutateDatasetRes) const currentUserId = useAtomValue(userProfileIdAtom) const workspacePermissionKeys = useAtomValue(workspacePermissionKeysAtom) const { mutateAsync: enableDatasetServiceApi } = useEnableDatasetServiceApi() const { mutateAsync: disableDatasetServiceApi } = useDisableDatasetServiceApi() const datasetACLCapabilities = React.useMemo( () => getDatasetACLCapabilities(dataset?.permission_keys, { currentUserId, resourceMaintainer: dataset?.maintainer, workspacePermissionKeys, }), [dataset?.maintainer, dataset?.permission_keys, currentUserId, workspacePermissionKeys], ) const canManageApiAccess = datasetACLCapabilities.canEdit const apiReferenceUrl = useDatasetApiAccessUrl() const onToggle = useCallback( async (state: boolean) => { let result: 'success' | 'fail' if (state) result = (await enableDatasetServiceApi(datasetId ?? '')).result else result = (await disableDatasetServiceApi(datasetId ?? '')).result if (result === 'success') mutateDatasetRes?.() }, [datasetId, enableDatasetServiceApi, mutateDatasetRes, disableDatasetServiceApi], ) return (