2025-06-18 15:04:40 +08:00
|
|
|
'use client'
|
|
|
|
import type { FC } from 'react'
|
2025-06-19 16:27:17 +08:00
|
|
|
import React, { useCallback, useMemo } from 'react'
|
|
|
|
import { AUTO_UPDATE_STRATEGY, type AutoUpdateConfig } from './types'
|
2025-06-19 16:11:02 +08:00
|
|
|
import Label from '../label'
|
|
|
|
import StrategyPicker from './strategy-picker'
|
2025-06-19 16:27:17 +08:00
|
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
|
|
|
|
const i18nPrefix = 'plugin.autoUpdate'
|
2025-06-18 15:04:40 +08:00
|
|
|
|
|
|
|
type Props = {
|
|
|
|
payload: AutoUpdateConfig
|
2025-06-19 16:11:02 +08:00
|
|
|
onChange: (payload: AutoUpdateConfig) => void
|
2025-06-18 15:04:40 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
const AutoUpdateSetting: FC<Props> = ({
|
|
|
|
payload,
|
2025-06-19 16:11:02 +08:00
|
|
|
onChange,
|
2025-06-18 15:04:40 +08:00
|
|
|
}) => {
|
2025-06-19 16:27:17 +08:00
|
|
|
const { t } = useTranslation()
|
2025-06-19 16:11:02 +08:00
|
|
|
const { strategy_setting } = payload
|
2025-06-19 16:27:17 +08:00
|
|
|
const strategyDescription = useMemo(() => {
|
|
|
|
switch (strategy_setting) {
|
|
|
|
case AUTO_UPDATE_STRATEGY.fixOnly:
|
|
|
|
return t(`${i18nPrefix}.strategy.fixOnly.selectedDescription`)
|
|
|
|
case AUTO_UPDATE_STRATEGY.latest:
|
|
|
|
return t(`${i18nPrefix}.strategy.latest.selectedDescription`)
|
|
|
|
default:
|
|
|
|
return ''
|
|
|
|
}
|
|
|
|
}, [strategy_setting, t])
|
2025-06-19 16:11:02 +08:00
|
|
|
const handleChange = useCallback((key: keyof AutoUpdateConfig) => {
|
|
|
|
return (value: AutoUpdateConfig[keyof AutoUpdateConfig]) => {
|
|
|
|
onChange({
|
|
|
|
...payload,
|
|
|
|
[key]: value,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}, [payload, onChange])
|
2025-06-18 15:04:40 +08:00
|
|
|
return (
|
2025-06-19 16:11:02 +08:00
|
|
|
<div className='self-stretch px-6'>
|
|
|
|
<div className='my-3 flex items-center'>
|
|
|
|
<div className='system-xs-medium-uppercase text-text-tertiary'>Updates Settings</div>
|
|
|
|
<div className='ml-2 h-px grow bg-divider-subtle'></div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className='space-y-4'>
|
|
|
|
<div className='flex items-center justify-between'>
|
2025-06-19 16:27:17 +08:00
|
|
|
<Label label={t(`${i18nPrefix}.automaticUpdates`)} description={strategyDescription} />
|
2025-06-19 16:11:02 +08:00
|
|
|
<StrategyPicker value={strategy_setting} onChange={handleChange('strategy_setting')} />
|
|
|
|
</div>
|
2025-06-19 16:27:17 +08:00
|
|
|
{strategy_setting !== AUTO_UPDATE_STRATEGY.disabled && (
|
|
|
|
<>
|
|
|
|
<div className='flex items-center justify-between'>
|
|
|
|
<Label label={t(`${i18nPrefix}.updateTime`)} />
|
|
|
|
</div>
|
|
|
|
<div className='flex items-center'>
|
|
|
|
<Label label={t(`${i18nPrefix}.specifyPluginsToUpdate`)} />
|
|
|
|
</div>
|
|
|
|
</>
|
|
|
|
)}
|
2025-06-19 16:11:02 +08:00
|
|
|
</div>
|
2025-06-18 15:04:40 +08:00
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
export default React.memo(AutoUpdateSetting)
|