| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import React, { useEffect, useState } from 'react'; |
| | import { Modal, RadioGroup, Radio, Steps, Button } from '@douyinfe/semi-ui'; |
| | import { useIsMobile } from '../../../../hooks/common/useIsMobile'; |
| |
|
| | const SyncWizardModal = ({ visible, onClose, onConfirm, loading, t }) => { |
| | const [step, setStep] = useState(0); |
| | const [option, setOption] = useState('official'); |
| | const [locale, setLocale] = useState('zh'); |
| | const isMobile = useIsMobile(); |
| |
|
| | useEffect(() => { |
| | if (visible) { |
| | setStep(0); |
| | setOption('official'); |
| | setLocale('zh'); |
| | } |
| | }, [visible]); |
| |
|
| | return ( |
| | <Modal |
| | title={t('同步向导')} |
| | visible={visible} |
| | onCancel={onClose} |
| | footer={ |
| | <div className='flex justify-end'> |
| | {step === 1 && ( |
| | <Button onClick={() => setStep(0)}>{t('上一步')}</Button> |
| | )} |
| | <Button onClick={onClose}>{t('取消')}</Button> |
| | {step === 0 && ( |
| | <Button |
| | type='primary' |
| | onClick={() => setStep(1)} |
| | disabled={option !== 'official'} |
| | > |
| | {t('下一步')} |
| | </Button> |
| | )} |
| | {step === 1 && ( |
| | <Button |
| | type='primary' |
| | theme='solid' |
| | loading={loading} |
| | onClick={async () => { |
| | await onConfirm?.({ option, locale }); |
| | }} |
| | > |
| | {t('开始同步')} |
| | </Button> |
| | )} |
| | </div> |
| | } |
| | width={isMobile ? '100%' : 'small'} |
| | > |
| | <div className='mb-3'> |
| | <Steps type='basic' current={step} size='small'> |
| | <Steps.Step title={t('选择方式')} description={t('选择同步来源')} /> |
| | <Steps.Step title={t('选择语言')} description={t('选择同步语言')} /> |
| | </Steps> |
| | </div> |
| | |
| | {step === 0 && ( |
| | <div className='mt-2 flex justify-center'> |
| | <RadioGroup |
| | value={option} |
| | onChange={(e) => setOption(e?.target?.value ?? e)} |
| | type='card' |
| | direction='horizontal' |
| | aria-label='同步方式选择' |
| | name='sync-mode-selection' |
| | > |
| | <Radio value='official' extra={t('从官方模型库同步')}> |
| | {t('官方模型同步')} |
| | </Radio> |
| | <Radio value='config' extra={t('从配置文件同步')} disabled> |
| | {t('配置文件同步')} |
| | </Radio> |
| | </RadioGroup> |
| | </div> |
| | )} |
| | |
| | {step === 1 && ( |
| | <div className='mt-2'> |
| | <div className='mb-2 text-[var(--semi-color-text-2)]'> |
| | {t('请选择同步语言')} |
| | </div> |
| | <div className='flex justify-center'> |
| | <RadioGroup |
| | value={locale} |
| | onChange={(e) => setLocale(e?.target?.value ?? e)} |
| | type='card' |
| | direction='horizontal' |
| | aria-label='语言选择' |
| | name='sync-locale-selection' |
| | > |
| | <Radio value='en' extra='English'> |
| | EN |
| | </Radio> |
| | <Radio value='zh' extra='中文'> |
| | ZH |
| | </Radio> |
| | <Radio value='ja' extra='日本語'> |
| | JA |
| | </Radio> |
| | </RadioGroup> |
| | </div> |
| | </div> |
| | )} |
| | </Modal> |
| | ); |
| | }; |
| |
|
| | export default SyncWizardModal; |
| |
|