import { Field, FieldContent, FieldDescription, FieldError, FieldLabel, FieldTitle, } from '@/components/ui/field'; import { Input } from '@/components/ui/input'; import { Switch } from '@/components/ui/switch'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; import type { PagesGitHubReleaseSelector } from '@/lib/services/openflare'; export interface PagesGitHubSourceFormValue { repositoryURL: string; releaseSelector: PagesGitHubReleaseSelector; releaseTag: string; assetName: string; autoUpdateEnabled: boolean; checkIntervalMinutes: string; } export interface PagesGitHubSourceFormErrors { repository: string; releaseTag: string; assetName: string; checkInterval: string; } interface PagesSourceGitHubFieldsProps { value: PagesGitHubSourceFormValue; errors: PagesGitHubSourceFormErrors; defaultAssetName: string; onChange: (value: PagesGitHubSourceFormValue) => void; onErrorsChange: (errors: PagesGitHubSourceFormErrors) => void; } export function PagesSourceGitHubFields({ value, errors, defaultAssetName, onChange, onErrorsChange, }: PagesSourceGitHubFieldsProps) { return ( <> GitHub 仓库 URL { onChange({ ...value, repositoryURL: event.target.value }); onErrorsChange({ ...errors, repository: '' }); }} /> 仅支持公开 github.com 仓库。 {errors.repository} Release 选择 { if (selector === 'latest' || selector === 'tag') { onChange({ ...value, releaseSelector: selector, autoUpdateEnabled: selector === 'latest' ? value.autoUpdateEnabled : false, }); onErrorsChange({ ...errors, releaseTag: '', checkInterval: '', }); } }} > 最新 Release 固定 Tag {value.releaseSelector === 'tag' ? ( Release tag { onChange({ ...value, releaseTag: event.target.value }); onErrorsChange({ ...errors, releaseTag: '' }); }} /> 精确检查并同步指定 tag。 {errors.releaseTag} ) : null} {value.releaseSelector === 'latest' ? ( <> 自动更新 检查到新的 Release 后自动同步并发布。 onChange({ ...value, autoUpdateEnabled: checked }) } /> 检查间隔(分钟) { onChange({ ...value, checkIntervalMinutes: event.target.value, }); onErrorsChange({ ...errors, checkInterval: '' }); }} /> 可设置为 5–1440 分钟。 {errors.checkInterval} ) : null} Release Asset 文件名 { onChange({ ...value, assetName: event.target.value }); onErrorsChange({ ...errors, assetName: '' }); }} /> {errors.assetName} ); }