|
import { |
|
Form, |
|
FormControl, |
|
FormField, |
|
FormItem, |
|
FormLabel, |
|
FormMessage, |
|
} from '@/components/ui/form'; |
|
import { Input } from '@/components/ui/input'; |
|
import { RAGFlowSelect } from '@/components/ui/select'; |
|
import { useCallback, useMemo } from 'react'; |
|
import { useTranslation } from 'react-i18next'; |
|
import { |
|
QWeatherLangOptions, |
|
QWeatherTimePeriodOptions, |
|
QWeatherTypeOptions, |
|
QWeatherUserTypeOptions, |
|
} from '../../constant'; |
|
import { INextOperatorForm } from '../../interface'; |
|
import { DynamicInputVariable } from '../components/next-dynamic-input-variable'; |
|
|
|
enum FormFieldName { |
|
Type = 'type', |
|
UserType = 'user_type', |
|
} |
|
|
|
const QWeatherForm = ({ form, node }: INextOperatorForm) => { |
|
const { t } = useTranslation(); |
|
const typeValue = form.watch(FormFieldName.Type); |
|
|
|
const qWeatherLangOptions = useMemo(() => { |
|
return QWeatherLangOptions.map((x) => ({ |
|
value: x, |
|
label: t(`flow.qWeatherLangOptions.${x}`), |
|
})); |
|
}, [t]); |
|
|
|
const qWeatherTypeOptions = useMemo(() => { |
|
return QWeatherTypeOptions.map((x) => ({ |
|
value: x, |
|
label: t(`flow.qWeatherTypeOptions.${x}`), |
|
})); |
|
}, [t]); |
|
|
|
const qWeatherUserTypeOptions = useMemo(() => { |
|
return QWeatherUserTypeOptions.map((x) => ({ |
|
value: x, |
|
label: t(`flow.qWeatherUserTypeOptions.${x}`), |
|
})); |
|
}, [t]); |
|
|
|
const getQWeatherTimePeriodOptions = useCallback(() => { |
|
let options = QWeatherTimePeriodOptions; |
|
const userType = form.getValues(FormFieldName.UserType); |
|
if (userType === 'free') { |
|
options = options.slice(0, 3); |
|
} |
|
return options.map((x) => ({ |
|
value: x, |
|
label: t(`flow.qWeatherTimePeriodOptions.${x}`), |
|
})); |
|
}, [form, t]); |
|
|
|
return ( |
|
<Form {...form}> |
|
<form |
|
className="space-y-6" |
|
onSubmit={(e) => { |
|
e.preventDefault(); |
|
}} |
|
> |
|
<DynamicInputVariable node={node}></DynamicInputVariable> |
|
<FormField |
|
control={form.control} |
|
name="web_apikey" |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('flow.webApiKey')}</FormLabel> |
|
<FormControl> |
|
<Input {...field} /> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
<FormField |
|
control={form.control} |
|
name="lang" |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('flow.lang')}</FormLabel> |
|
<FormControl> |
|
<RAGFlowSelect |
|
{...field} |
|
options={qWeatherLangOptions} |
|
></RAGFlowSelect> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
<FormField |
|
control={form.control} |
|
name={FormFieldName.Type} |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('flow.type')}</FormLabel> |
|
<FormControl> |
|
<RAGFlowSelect |
|
{...field} |
|
options={qWeatherTypeOptions} |
|
></RAGFlowSelect> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
<FormField |
|
control={form.control} |
|
name={FormFieldName.UserType} |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('flow.userType')}</FormLabel> |
|
<FormControl> |
|
<RAGFlowSelect |
|
{...field} |
|
options={qWeatherUserTypeOptions} |
|
></RAGFlowSelect> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
{typeValue === 'weather' && ( |
|
<FormField |
|
control={form.control} |
|
name={'time_period'} |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('flow.timePeriod')}</FormLabel> |
|
<FormControl> |
|
<RAGFlowSelect |
|
{...field} |
|
options={getQWeatherTimePeriodOptions()} |
|
></RAGFlowSelect> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
)} |
|
</form> |
|
</Form> |
|
); |
|
}; |
|
|
|
export default QWeatherForm; |
|
|