12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- '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)
|