Temperature.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { ChatContentContext } from '@/pages/chat';
  2. import { ControlOutlined } from '@ant-design/icons';
  3. import { InputNumber, Popover, Slider, Tooltip } from 'antd';
  4. import React, { memo, useContext, useMemo } from 'react';
  5. import { useTranslation } from 'react-i18next';
  6. const Temperature: React.FC<{ temperatureValue: any; setTemperatureValue: any }> = ({
  7. temperatureValue,
  8. setTemperatureValue,
  9. }) => {
  10. const { appInfo } = useContext(ChatContentContext);
  11. const { t } = useTranslation();
  12. // 左边工具栏动态可用key
  13. const paramKey: string[] = useMemo(() => {
  14. return appInfo.param_need?.map(i => i.type) || [];
  15. }, [appInfo.param_need]);
  16. if (!paramKey.includes('temperature')) {
  17. return (
  18. <Tooltip title={t('temperature_tip')}>
  19. <div className='flex w-8 h-8 items-center justify-center rounded-md hover:bg-[rgb(221,221,221,0.6)] cursor-pointer'>
  20. <ControlOutlined className='text-xl cursor-not-allowed opacity-30' />
  21. </div>
  22. </Tooltip>
  23. );
  24. }
  25. // temperature变化;
  26. const onChange = (value: any) => {
  27. if (isNaN(value)) {
  28. return;
  29. }
  30. setTemperatureValue(value);
  31. };
  32. return (
  33. <div className='flex items-center'>
  34. <Popover
  35. arrow={false}
  36. trigger={['click']}
  37. placement='topLeft'
  38. content={() => (
  39. <div className='flex items-center gap-2'>
  40. <Slider
  41. className='w-20'
  42. min={0}
  43. max={1}
  44. step={0.1}
  45. onChange={onChange}
  46. value={typeof temperatureValue === 'number' ? temperatureValue : 0}
  47. />
  48. <InputNumber
  49. size='small'
  50. className='w-14'
  51. min={0}
  52. max={1}
  53. step={0.1}
  54. onChange={onChange}
  55. value={temperatureValue}
  56. />
  57. </div>
  58. )}
  59. >
  60. <Tooltip title={t('temperature')} placement='bottom' arrow={false}>
  61. <div className='flex w-8 h-8 items-center justify-center rounded-md hover:bg-[rgb(221,221,221,0.6)] cursor-pointer'>
  62. <ControlOutlined />
  63. </div>
  64. </Tooltip>
  65. </Popover>
  66. <span className='text-sm ml-2'>{temperatureValue}</span>
  67. </div>
  68. );
  69. };
  70. export default memo(Temperature);