|
'use client' |
|
import type { FC } from 'react' |
|
import React from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import { |
|
RiDeleteBinLine, |
|
} from '@remixicon/react' |
|
import Indicator from '../../../indicator' |
|
import Operate from '../data-source-notion/operate' |
|
import { DataSourceType } from './types' |
|
import s from './style.module.css' |
|
import cn from '@/utils/classnames' |
|
|
|
export type ConfigItemType = { |
|
id: string |
|
logo: any |
|
name: string |
|
isActive: boolean |
|
notionConfig?: { |
|
total: number |
|
} |
|
} |
|
|
|
type Props = { |
|
type: DataSourceType |
|
payload: ConfigItemType |
|
onRemove: () => void |
|
notionActions?: { |
|
onChangeAuthorizedPage: () => void |
|
} |
|
readOnly: boolean |
|
} |
|
|
|
const ConfigItem: FC<Props> = ({ |
|
type, |
|
payload, |
|
onRemove, |
|
notionActions, |
|
readOnly, |
|
}) => { |
|
const { t } = useTranslation() |
|
const isNotion = type === DataSourceType.notion |
|
const isWebsite = type === DataSourceType.website |
|
const onChangeAuthorizedPage = notionActions?.onChangeAuthorizedPage || function () { } |
|
|
|
return ( |
|
<div className={cn(s['workspace-item'], 'flex items-center mb-1 py-1 pr-1 bg-white rounded-lg')} key={payload.id}> |
|
<payload.logo className='ml-3 mr-1.5' /> |
|
<div className='grow py-[7px] leading-[18px] text-[13px] font-medium text-gray-700 truncate' title={payload.name}>{payload.name}</div> |
|
{ |
|
payload.isActive |
|
? <Indicator className='shrink-0 mr-[6px]' /> |
|
: <Indicator className='shrink-0 mr-[6px]' color='yellow' /> |
|
} |
|
<div className='shrink-0 mr-3 text-xs font-medium uppercase'> |
|
{ |
|
payload.isActive |
|
? t(isNotion ? 'common.dataSource.notion.connected' : 'common.dataSource.website.active') |
|
: t(isNotion ? 'common.dataSource.notion.disconnected' : 'common.dataSource.website.inactive') |
|
} |
|
</div> |
|
<div className='mr-2 w-[1px] h-3 bg-gray-100' /> |
|
{isNotion && ( |
|
<Operate payload={{ |
|
id: payload.id, |
|
total: payload.notionConfig?.total || 0, |
|
}} onAuthAgain={onChangeAuthorizedPage} |
|
/> |
|
)} |
|
|
|
{ |
|
isWebsite && !readOnly && ( |
|
<div className='p-2 text-gray-500 cursor-pointer rounded-md hover:bg-black/5' onClick={onRemove} > |
|
<RiDeleteBinLine className='w-4 h-4 ' /> |
|
</div> |
|
) |
|
} |
|
|
|
</div> |
|
) |
|
} |
|
export default React.memo(ConfigItem) |
|
|