Files
FastGPT/packages/web/components/common/Textarea/PromptEditor/index.tsx
Theresa 2d3117c5da feat: update ESLint config with @typescript-eslint/consistent-type-imports (#4746)
* update: Add type

* fix: update import statement for NextApiRequest type

* fix: update imports to use type for LexicalEditor and EditorState

* Refactor imports to use 'import type' for type-only imports across multiple files

- Updated imports in various components and API files to use 'import type' for better clarity and to optimize TypeScript's type checking.
- Ensured consistent usage of type imports in files related to chat, dataset, workflow, and user management.
- Improved code readability and maintainability by distinguishing between value and type imports.

* refactor: remove old ESLint configuration and add new rules

- Deleted the old ESLint configuration file from the app project.
- Added a new ESLint configuration file with updated rules and settings.
- Changed imports to use type-only imports in various files for better clarity and performance.
- Updated TypeScript configuration to remove unnecessary options.
- Added an ESLint ignore file to exclude build and dependency directories from linting.

* fix: update imports to use 'import type' for type-only imports in schema files
2025-05-06 17:33:09 +08:00

97 lines
2.5 KiB
TypeScript

import { Button, ModalBody, ModalFooter, useDisclosure } from '@chakra-ui/react';
import React from 'react';
import { editorStateToText } from './utils';
import Editor from './Editor';
import MyModal from '../../MyModal';
import { useTranslation } from 'next-i18next';
import type { EditorState, LexicalEditor } from 'lexical';
import { type EditorVariableLabelPickerType, type EditorVariablePickerType } from './type.d';
import { useCallback } from 'react';
const PromptEditor = ({
showOpenModal = true,
variables = [],
variableLabels = [],
value,
onChange,
onBlur,
minH,
maxH,
maxLength,
placeholder,
title,
bg = 'white'
}: {
showOpenModal?: boolean;
variables?: EditorVariablePickerType[];
variableLabels?: EditorVariableLabelPickerType[];
value?: string;
onChange?: (text: string) => void;
onBlur?: (text: string) => void;
minH?: number;
maxH?: number;
maxLength?: number;
placeholder?: string;
title?: string;
bg?: string;
}) => {
const { isOpen, onOpen, onClose } = useDisclosure();
const { t } = useTranslation();
const onChangeInput = useCallback(
(editorState: EditorState, editor: LexicalEditor) => {
const text = editorStateToText(editor);
onChange?.(text);
},
[onChange]
);
const onBlurInput = useCallback(
(editor: LexicalEditor) => {
const text = editorStateToText(editor);
onBlur?.(text);
},
[onBlur]
);
return (
<>
<Editor
showOpenModal={showOpenModal}
onOpenModal={onOpen}
variables={variables}
variableLabels={variableLabels}
minH={minH}
maxH={maxH}
maxLength={maxLength}
value={value}
onChange={onChangeInput}
onBlur={onBlurInput}
placeholder={placeholder}
bg={bg}
/>
<MyModal isOpen={isOpen} onClose={onClose} iconSrc="modal/edit" title={title} w={'full'}>
<ModalBody>
<Editor
minH={400}
maxH={400}
maxLength={maxLength}
showOpenModal={false}
variables={variables}
variableLabels={variableLabels}
value={value}
onChange={onChangeInput}
onBlur={onBlurInput}
placeholder={placeholder}
/>
</ModalBody>
<ModalFooter>
<Button mr={2} onClick={onClose} px={6}>
{t('common:Confirm')}
</Button>
</ModalFooter>
</MyModal>
</>
);
};
export default React.memo(PromptEditor);