Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

next.tsx 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { LlmModelType } from '@/constants/knowledge';
  2. import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks';
  3. import * as SelectPrimitive from '@radix-ui/react-select';
  4. import { forwardRef, memo, useState } from 'react';
  5. import { LlmSettingFieldItems } from '../llm-setting-items/next';
  6. import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';
  7. import { Select, SelectTrigger, SelectValue } from '../ui/select';
  8. interface IProps {
  9. id?: string;
  10. value?: string;
  11. onInitialValue?: (value: string, option: any) => void;
  12. onChange?: (value: string) => void;
  13. disabled?: boolean;
  14. filter?: string;
  15. }
  16. const NextInnerLLMSelect = forwardRef<
  17. React.ElementRef<typeof SelectPrimitive.Trigger>,
  18. IProps
  19. >(({ value, disabled, filter }, ref) => {
  20. const [isPopoverOpen, setIsPopoverOpen] = useState(false);
  21. const modelTypes =
  22. filter === 'all' || filter === undefined
  23. ? [LlmModelType.Chat, LlmModelType.Image2text]
  24. : [filter as LlmModelType];
  25. const modelOptions = useComposeLlmOptionsByModelTypes(modelTypes);
  26. return (
  27. <Select disabled={disabled} value={value}>
  28. <Popover open={isPopoverOpen} onOpenChange={setIsPopoverOpen}>
  29. <PopoverTrigger asChild>
  30. <SelectTrigger
  31. onClick={(e) => {
  32. e.preventDefault();
  33. setIsPopoverOpen(true);
  34. }}
  35. ref={ref}
  36. >
  37. <SelectValue>
  38. {
  39. modelOptions
  40. .flatMap((x) => x.options)
  41. .find((x) => x.value === value)?.label
  42. }
  43. </SelectValue>
  44. </SelectTrigger>
  45. </PopoverTrigger>
  46. <PopoverContent side={'left'}>
  47. <LlmSettingFieldItems options={modelOptions}></LlmSettingFieldItems>
  48. </PopoverContent>
  49. </Popover>
  50. </Select>
  51. );
  52. });
  53. NextInnerLLMSelect.displayName = 'LLMSelect';
  54. export const NextLLMSelect = memo(NextInnerLLMSelect);