| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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; |
|
|