diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs
index 689dec1fc3..bf1cf54727 100644
--- a/web/.eslintrc.cjs
+++ b/web/.eslintrc.cjs
@@ -70,4 +70,12 @@ module.exports = {
},
],
},
+ overrides: [
+ {
+ files: ['**/__tests__/**'],
+ rules: {
+ 'check-file/folder-naming-convention': 'off',
+ },
+ },
+ ],
};
diff --git a/web/src/components/highlight-markdown/index.tsx b/web/src/components/highlight-markdown/index.tsx
index c6ad6f3b6d..766f0bde07 100644
--- a/web/src/components/highlight-markdown/index.tsx
+++ b/web/src/components/highlight-markdown/index.tsx
@@ -1,3 +1,4 @@
+import { MarkdownRemarkPlugins } from '@/constants/markdown-remark-plugins';
import classNames from 'classnames';
import Markdown from 'react-markdown';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
@@ -7,18 +8,17 @@ import {
} from 'react-syntax-highlighter/dist/esm/styles/prism';
import rehypeKatex from 'rehype-katex';
import rehypeRaw from 'rehype-raw';
-import { MarkdownRemarkPlugins } from '@/constants/markdown-remark-plugins';
import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you
import { preprocessLaTeX } from '@/utils/chat';
import { citationMarkerReg } from '@/utils/citation-utils';
import { getDirAttribute } from '@/utils/text-direction';
+import { omit } from 'lodash';
import { useIsDarkTheme } from '../theme-provider';
import styles from './index.module.less';
const HighLightMarkdown = ({
- className,
children,
}: {
className?: string;
@@ -36,8 +36,8 @@ const HighLightMarkdown = ({
rehypePlugins={[rehypeRaw, rehypeKatex]}
components={
{
- p: ({ children, node, ...props }: any) => (
-
{children}
+ p: ({ children, ...props }: any) => (
+ {children}
),
code(props: any) {
const { children, className, ...rest } = props;
diff --git a/web/src/components/json-edit/index.tsx b/web/src/components/json-edit/index.tsx
index 31586c59e0..99a4a3bf80 100644
--- a/web/src/components/json-edit/index.tsx
+++ b/web/src/components/json-edit/index.tsx
@@ -103,6 +103,7 @@ const JsonEditor: React.FC = ({
try {
currentData = editorRef.current.get();
} catch (e) {
+ console.error(e);
// If there's an error getting data, use the passed value or empty object
currentData = value || {};
}
@@ -127,6 +128,7 @@ const JsonEditor: React.FC = ({
const updatedJson = editorRef.current.get();
onChange(updatedJson);
} catch (err) {
+ console.error(err);
// Do not trigger onChange when parsing error occurs
}
}
@@ -157,6 +159,7 @@ const JsonEditor: React.FC = ({
editorRef.current.set(value);
}
} catch (err) {
+ console.error(err);
// Skip update if there is a syntax error in the current editor
editorRef.current.set(value);
}
diff --git a/web/src/components/jsonjoy-builder/components/schema-editor/json-schema-visualizer.tsx b/web/src/components/jsonjoy-builder/components/schema-editor/json-schema-visualizer.tsx
index f39d9e260e..c4d92ec142 100644
--- a/web/src/components/jsonjoy-builder/components/schema-editor/json-schema-visualizer.tsx
+++ b/web/src/components/jsonjoy-builder/components/schema-editor/json-schema-visualizer.tsx
@@ -52,6 +52,7 @@ const JsonSchemaVisualizer: FC = ({
onChange(parsedJson);
}
} catch (_error) {
+ console.error(_error);
// Monaco will show the error inline, no need for additional error handling
}
};
diff --git a/web/src/components/ui/input.tsx b/web/src/components/ui/input.tsx
index f742b0256d..a1ea6f8e21 100644
--- a/web/src/components/ui/input.tsx
+++ b/web/src/components/ui/input.tsx
@@ -84,7 +84,7 @@ const Input = React.forwardRef(
!!prefix && prefixWidth ? `${prefixWidth}px` : '',
paddingInlineEnd: isPasswordInput
? '40px'
- : !!suffix
+ : suffix
? `${suffixWidth}px`
: '',
}}
@@ -155,9 +155,6 @@ const Input = React.forwardRef(
Input.displayName = 'Input';
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
-export interface ExpandedInputProps extends InputProps {}
-
const ExpandedInput = Input;
const SearchInput = (props: InputProps) => {
diff --git a/web/src/components/ui/segmented.tsx b/web/src/components/ui/segmented.tsx
index 7318c017dd..33488ada26 100644
--- a/web/src/components/ui/segmented.tsx
+++ b/web/src/components/ui/segmented.tsx
@@ -64,7 +64,7 @@ export interface SegmentedProps extends Omit<
const Segmented = React.forwardRef(
supportsCssAnchor
- ? (
+ ? function Segmented(
{
options,
value,
@@ -77,7 +77,7 @@ const Segmented = React.forwardRef(
buttonSize = 'default',
},
ref,
- ) => {
+ ) {
const anchorNamePrefix = useId().replace(/:/g, '');
const [selectedValue, setSelectedValue] = React.useState<
SegmentedValue | undefined
@@ -143,7 +143,7 @@ const Segmented = React.forwardRef(
);
}
- : (
+ : function Segmented(
{
options,
value,
@@ -156,7 +156,7 @@ const Segmented = React.forwardRef(
buttonSize = 'default',
},
ref,
- ) => {
+ ) {
const [selectedValue, setSelectedValue] = React.useState<
SegmentedValue | undefined
>(value);
diff --git a/web/src/components/what-is-this.tsx b/web/src/components/what-is-this.tsx
index 52d297aaa0..68d92437b3 100644
--- a/web/src/components/what-is-this.tsx
+++ b/web/src/components/what-is-this.tsx
@@ -2,7 +2,7 @@ import { LucideCircleQuestionMark } from 'lucide-react';
import { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';
-export default function WhatIsThis({ children }: React.PropsWithChildren<{}>) {
+export default function WhatIsThis({ children }: React.PropsWithChildren) {
return (
diff --git a/web/src/hooks/__tests__/logic-hooks.useScrollToBottom.test.tsx b/web/src/hooks/__tests__/logic-hooks-use-scroll-to-bottom.test.tsx
similarity index 100%
rename from web/src/hooks/__tests__/logic-hooks.useScrollToBottom.test.tsx
rename to web/src/hooks/__tests__/logic-hooks-use-scroll-to-bottom.test.tsx
diff --git a/web/src/interfaces/request/file-manager.ts b/web/src/interfaces/request/file-manager.ts
index b355bf3a93..7c79e81c3f 100644
--- a/web/src/interfaces/request/file-manager.ts
+++ b/web/src/interfaces/request/file-manager.ts
@@ -4,10 +4,6 @@ export interface IFileListRequestBody extends IPaginationRequestBody {
parent_id?: string; // folder id
}
-interface BaseRequestBody {
- parentId: string;
-}
-
export interface IConnectRequestBody {
fileIds: string[];
kbIds: string[];
diff --git a/web/src/pages/agent/form/tool-form/searxng-form/index.tsx b/web/src/pages/agent/form/tool-form/searxng-form/index.tsx
index 703c4b3955..e77b239e18 100644
--- a/web/src/pages/agent/form/tool-form/searxng-form/index.tsx
+++ b/web/src/pages/agent/form/tool-form/searxng-form/index.tsx
@@ -9,7 +9,6 @@ import {
FormMessage,
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
-import { useTranslate } from '@/hooks/common-hooks';
import { zodResolver } from '@hookform/resolvers/zod';
import { memo } from 'react';
import { useForm } from 'react-hook-form';
@@ -23,7 +22,6 @@ const FormSchema = z.object({
});
function SearXNGForm() {
- const { t } = useTranslate('flow');
const values = useValues();
const form = useForm>({
diff --git a/web/src/pages/agent/gobal-variable-sheet/hooks/use-form.tsx b/web/src/pages/agent/gobal-variable-sheet/hooks/use-form.tsx
index 54d37957a2..685e3cd87a 100644
--- a/web/src/pages/agent/gobal-variable-sheet/hooks/use-form.tsx
+++ b/web/src/pages/agent/gobal-variable-sheet/hooks/use-form.tsx
@@ -12,6 +12,7 @@ export const useHandleForm = () => {
try {
return JSON.parse(value);
} catch (error) {
+ console.warn(error);
return value;
}
};
diff --git a/web/src/pages/agent/hooks/use-download-output.ts b/web/src/pages/agent/hooks/use-download-output.ts
index 8e02105e87..8d1705b878 100644
--- a/web/src/pages/agent/hooks/use-download-output.ts
+++ b/web/src/pages/agent/hooks/use-download-output.ts
@@ -15,7 +15,9 @@ export function findEndOutput(list?: ITraceData[]) {
const json = JSON.parse(str);
return json;
}
- } catch (error) {}
+ } catch (error) {
+ console.warn(error);
+ }
}
}
diff --git a/web/src/pages/dataset/components/metedata/manage-modal-column.tsx b/web/src/pages/dataset/components/metedata/manage-modal-column.tsx
index bae956c3a1..8aaedd5756 100644
--- a/web/src/pages/dataset/components/metedata/manage-modal-column.tsx
+++ b/web/src/pages/dataset/components/metedata/manage-modal-column.tsx
@@ -5,7 +5,7 @@ import { Input } from '@/components/ui/input';
import { formatDate } from '@/utils/date';
import { ColumnDef, Row, Table } from '@tanstack/react-table';
import { ListChevronsDownUp, LucidePencil, Trash2 } from 'lucide-react';
-import { useCallback, useMemo, useState } from 'react';
+import React, { useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
getMetadataValueTypeLabel,
@@ -56,12 +56,6 @@ export const useMetadataColumns = ({
Record
>({});
- const isSettingsMode =
- metadataType === MetadataType.Setting ||
- metadataType === MetadataType.SingleFileSetting ||
- metadataType === MetadataType.UpdateSingle;
-
- const showTypeColumn = isSettingsMode;
const handleEditValue = (field: string, value: string) => {
setEditingValue({ field, value, newValue: value });
};
@@ -193,6 +187,35 @@ export const useMetadataColumns = ({
}));
};
+ const handleToggleExpand = (e: React.MouseEvent) => {
+ e.stopPropagation();
+ toggleRowExpanded();
+ };
+
+ const handleDeleteValueClick =
+ (value: string): React.MouseEventHandler =>
+ (e) => {
+ e.stopPropagation();
+ setDeleteDialogContent({
+ visible: true,
+ title:
+ t('common.delete') +
+ ' ' +
+ t('knowledgeDetails.metadata.value'),
+ name: value,
+ warnText:
+ MetadataDeleteMap(t)[metadataType as MetadataType]
+ .warnValueText,
+ onOk: () => {
+ hideDeleteModal();
+ handleDeleteSingleValue(row.getValue('field'), value);
+ },
+ onCancel: () => {
+ hideDeleteModal();
+ },
+ });
+ };
+
const displayedValues = isRowExpanded ? values : values.slice(0, 2);
const hasMore = Array.isArray(values) && values.length > 2;
@@ -269,32 +292,7 @@ export const useMetadataColumns = ({
@@ -308,10 +306,7 @@ export const useMetadataColumns = ({