|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 'use client'
- import type { FC } from 'react'
- import React from 'react'
- import NoPluginSelected from './no-plugin-selected'
- import { AUTO_UPDATE_MODE } from './types'
- import PluginsSelected from './plugins-selected'
- import Button from '@/app/components/base/button'
- import { RiAddLine } from '@remixicon/react'
- import { useTranslation } from 'react-i18next'
- import { useBoolean } from 'ahooks'
- import ToolPicker from './tool-picker'
-
- const i18nPrefix = 'plugin.autoUpdate'
-
- type Props = {
- updateMode: AUTO_UPDATE_MODE
- value: string[] // plugin ids
- onChange: (value: string[]) => void
- }
-
- const PluginsPicker: FC<Props> = ({
- updateMode,
- value,
- onChange,
- }) => {
- const { t } = useTranslation()
- const hasSelected = value.length > 0
- const isExcludeMode = updateMode === AUTO_UPDATE_MODE.exclude
- const handleClear = () => {
- onChange([])
- }
-
- const [isShowToolPicker, {
- set: setToolPicker,
- }] = useBoolean(false)
- return (
- <div className='mt-2 rounded-[10px] bg-background-section-burn p-2.5'>
- {hasSelected ? (
- <div className='flex justify-between text-text-tertiary'>
- <div className='system-xs-medium'>{t(`${i18nPrefix}.${isExcludeMode ? 'excludeUpdate' : 'partialUPdate'}`, { num: value.length })}</div>
- <div className='system-xs-medium cursor-pointer' onClick={handleClear}>{t(`${i18nPrefix}.operation.clearAll`)}</div>
- </div>
- ) : (
- <NoPluginSelected updateMode={updateMode} />
- )}
-
- {hasSelected && (
- <PluginsSelected
- className='mt-2'
- plugins={value}
- />
- )}
-
- <ToolPicker
- trigger={
- <Button className='mt-2 w-[412px]' size='small' variant='secondary-accent'>
- <RiAddLine className='size-3.5' />
- {t(`${i18nPrefix}.operation.select`)}
- </Button>
- }
- value={value}
- onChange={onChange}
- isShow={isShowToolPicker}
- onShowChange={setToolPicker}
- />
- </div>
- )
- }
- export default React.memo(PluginsPicker)
|