- import { FormContainer } from '@/components/form-container';
- import { SelectWithSearch } from '@/components/originui/select-with-search';
- import { TopNFormField } from '@/components/top-n-item';
- import {
- Form,
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
- } from '@/components/ui/form';
- import { useTranslate } from '@/hooks/common-hooks';
- import { zodResolver } from '@hookform/resolvers/zod';
- import { memo } from 'react';
- import { useForm, useFormContext } from 'react-hook-form';
- import { z } from 'zod';
- import { initialWikipediaValues } from '../../constant';
- import { useFormValues } from '../../hooks/use-form-values';
- import { useWatchFormChange } from '../../hooks/use-watch-form-change';
- import { INextOperatorForm } from '../../interface';
- import { LanguageOptions } from '../../options';
- import { buildOutputList } from '../../utils/build-output-list';
- import { FormWrapper } from '../components/form-wrapper';
- import { Output } from '../components/output';
- import { QueryVariable } from '../components/query-variable';
-
- export const WikipediaFormPartialSchema = {
- top_n: z.string(),
- language: z.string(),
- };
-
- const FormSchema = z.object({
- query: z.string(),
- ...WikipediaFormPartialSchema,
- });
-
- export function WikipediaFormWidgets() {
- const { t } = useTranslate('common');
- const form = useFormContext();
-
- return (
- <>
- <TopNFormField></TopNFormField>
- <FormField
- control={form.control}
- name="language"
- render={({ field }) => (
- <FormItem>
- <FormLabel>{t('language')}</FormLabel>
- <FormControl>
- <SelectWithSearch {...field} options={LanguageOptions} />
- </FormControl>
- <FormMessage />
- </FormItem>
- )}
- />
- </>
- );
- }
-
- const outputList = buildOutputList(initialWikipediaValues.outputs);
-
- function WikipediaForm({ node }: INextOperatorForm) {
- const defaultValues = useFormValues(initialWikipediaValues, node);
-
- const form = useForm<z.infer<typeof FormSchema>>({
- defaultValues,
- resolver: zodResolver(FormSchema),
- });
-
- useWatchFormChange(node?.id, form);
-
- return (
- <Form {...form}>
- <FormWrapper>
- <FormContainer>
- <QueryVariable></QueryVariable>
- <WikipediaFormWidgets></WikipediaFormWidgets>
- </FormContainer>
- </FormWrapper>
- <div className="p-5">
- <Output list={outputList}></Output>
- </div>
- </Form>
- );
- }
-
- export default memo(WikipediaForm);
|