import { useTranslations } from 'next-intl'; 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) { const t = useTranslations('pages.source'); return ( <> {t('githubUrl')} { onChange({ ...value, repositoryURL: event.target.value }); onErrorsChange({ ...errors, repository: '' }); }} /> {t('githubUrlHint')} {errors.repository} {t('releaseSelect')} { if (selector === 'latest' || selector === 'tag') { onChange({ ...value, releaseSelector: selector, autoUpdateEnabled: selector === 'latest' ? value.autoUpdateEnabled : false, }); onErrorsChange({ ...errors, releaseTag: '', checkInterval: '', }); } }} > {t('latestRelease')} {t('pinnedTag')} {value.releaseSelector === 'tag' ? ( Release tag { onChange({ ...value, releaseTag: event.target.value }); onErrorsChange({ ...errors, releaseTag: '' }); }} /> {t('pinnedTagHint')} {errors.releaseTag} ) : null} {value.releaseSelector === 'latest' ? ( <> {t('autoUpdate')} {t('autoUpdateHint')} onChange({ ...value, autoUpdateEnabled: checked }) } /> {t('checkInterval')} { onChange({ ...value, checkIntervalMinutes: event.target.value, }); onErrorsChange({ ...errors, checkInterval: '' }); }} /> {t('checkIntervalHint')} {errors.checkInterval} ) : null} {t('assetName')} { onChange({ ...value, assetName: event.target.value }); onErrorsChange({ ...errors, assetName: '' }); }} /> {errors.assetName} ); }