fix(web): document title support i18n
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-02 16:24:44
|
* @Date: 2026-02-02 16:24:44
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 15:52:57
|
* @Last Modified time: 2026-04-14 16:52:43
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* useBreadcrumbManager Hook
|
* useBreadcrumbManager Hook
|
||||||
@@ -21,6 +21,7 @@ import { useNavigate } from 'react-router-dom';
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { useMenu } from '@/store/menu';
|
import { useMenu } from '@/store/menu';
|
||||||
import type { MenuItem } from '@/store/menu';
|
import type { MenuItem } from '@/store/menu';
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/** Breadcrumb item interface */
|
/** Breadcrumb item interface */
|
||||||
export interface BreadcrumbItem {
|
export interface BreadcrumbItem {
|
||||||
@@ -55,6 +56,7 @@ export const useBreadcrumbManager = (options?: BreadcrumbOptions) => {
|
|||||||
const { allBreadcrumbs, setCustomBreadcrumbs } = useMenu();
|
const { allBreadcrumbs, setCustomBreadcrumbs } = useMenu();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
/** Update breadcrumbs based on current path and type */
|
/** Update breadcrumbs based on current path and type */
|
||||||
const updateBreadcrumbs = useCallback((breadcrumbPath: BreadcrumbPath) => {
|
const updateBreadcrumbs = useCallback((breadcrumbPath: BreadcrumbPath) => {
|
||||||
@@ -341,7 +343,7 @@ export const useBreadcrumbManager = (options?: BreadcrumbOptions) => {
|
|||||||
const lastMenu = customBreadcrumbs[customBreadcrumbs.length - 1]
|
const lastMenu = customBreadcrumbs[customBreadcrumbs.length - 1]
|
||||||
document.title = `${lastMenu.i18nKey ? t(lastMenu.i18nKey) : lastMenu.label} - ${t('memoryBear') }`;
|
document.title = `${lastMenu.i18nKey ? t(lastMenu.i18nKey) : lastMenu.label} - ${t('memoryBear') }`;
|
||||||
setCustomBreadcrumbs(customBreadcrumbs, breadcrumbKey);
|
setCustomBreadcrumbs(customBreadcrumbs, breadcrumbKey);
|
||||||
}, [setCustomBreadcrumbs, navigate, options?.breadcrumbType, options?.onKnowledgeBaseMenuClick, options?.onKnowledgeBaseFolderClick]);
|
}, [setCustomBreadcrumbs, navigate, options?.breadcrumbType, options?.onKnowledgeBaseMenuClick, options?.onKnowledgeBaseFolderClick, language]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
updateBreadcrumbs,
|
updateBreadcrumbs,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 16:29:37
|
* @Date: 2026-02-03 16:29:37
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 10:01:05
|
* @Last Modified time: 2026-04-14 16:53:27
|
||||||
*/
|
*/
|
||||||
import React, { useEffect, useState, useRef } from 'react';
|
import React, { useEffect, useState, useRef } from 'react';
|
||||||
import { useParams } from 'react-router-dom';
|
import { useParams } from 'react-router-dom';
|
||||||
@@ -22,6 +22,7 @@ import Statistics from './Statistics'
|
|||||||
import TestChat from './TestChat'
|
import TestChat from './TestChat'
|
||||||
import type { WorkflowConfig } from '@/views/Workflow/types';
|
import type { WorkflowConfig } from '@/views/Workflow/types';
|
||||||
import Logs from './Logs';
|
import Logs from './Logs';
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application configuration page component
|
* Application configuration page component
|
||||||
@@ -32,6 +33,7 @@ const ApplicationConfig: React.FC = () => {
|
|||||||
// Hooks
|
// Hooks
|
||||||
const { id, source } = useParams();
|
const { id, source } = useParams();
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
// Refs for different application types
|
// Refs for different application types
|
||||||
const agentRef = useRef<AgentRef>(null)
|
const agentRef = useRef<AgentRef>(null)
|
||||||
@@ -102,7 +104,7 @@ const ApplicationConfig: React.FC = () => {
|
|||||||
const appName = t('memoryBear');
|
const appName = t('memoryBear');
|
||||||
document.title = `${application.name} - ${appName}`;
|
document.title = `${application.name} - ${appName}`;
|
||||||
}
|
}
|
||||||
}, [application?.name])
|
}, [application?.name, language])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch application information
|
* Fetch application information
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 16:56:54
|
* @Date: 2026-02-03 16:56:54
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-03-26 15:43:29
|
* @Last Modified time: 2026-04-14 16:59:16
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Emotion Engine Configuration Page
|
* Emotion Engine Configuration Page
|
||||||
@@ -25,6 +25,7 @@ import DescWrapper from '@/components/FormItem/DescWrapper'
|
|||||||
import RbSlider from '@/components/RbSlider';
|
import RbSlider from '@/components/RbSlider';
|
||||||
import RbAlert from '@/components/RbAlert';
|
import RbAlert from '@/components/RbAlert';
|
||||||
import ModelSelect from '@/components/ModelSelect';
|
import ModelSelect from '@/components/ModelSelect';
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration field definitions
|
* Configuration field definitions
|
||||||
@@ -69,9 +70,14 @@ const EmotionEngine: React.FC = () => {
|
|||||||
const [form] = Form.useForm<ConfigForm>();
|
const [form] = Form.useForm<ConfigForm>();
|
||||||
const { message: messageApi } = App.useApp();
|
const { message: messageApi } = App.useApp();
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
const values = Form.useWatch([], form);
|
const values = Form.useWatch([], form);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = [document.title.split(' - ')[0], t('memoryBear')].join(' - ')
|
||||||
|
}, [language])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getConfigData()
|
getConfigData()
|
||||||
}, [id])
|
}, [id])
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 17:00:12
|
* @Date: 2026-02-03 17:00:12
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-03-26 15:47:37
|
* @Last Modified time: 2026-04-14 16:54:38
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Forgetting Engine Configuration Page
|
* Forgetting Engine Configuration Page
|
||||||
@@ -22,6 +22,7 @@ import type { ConfigForm } from './types'
|
|||||||
import SwitchFormItem from '@/components/FormItem/SwitchFormItem'
|
import SwitchFormItem from '@/components/FormItem/SwitchFormItem'
|
||||||
import RbSlider from '@/components/RbSlider';
|
import RbSlider from '@/components/RbSlider';
|
||||||
import DescWrapper from '@/components/FormItem/DescWrapper'
|
import DescWrapper from '@/components/FormItem/DescWrapper'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration field definitions
|
* Configuration field definitions
|
||||||
@@ -109,9 +110,14 @@ const ForgettingEngine: React.FC = () => {
|
|||||||
const [form] = Form.useForm<ConfigForm>();
|
const [form] = Form.useForm<ConfigForm>();
|
||||||
const { message: messageApi } = App.useApp();
|
const { message: messageApi } = App.useApp();
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
const values = Form.useWatch([], form);
|
const values = Form.useWatch([], form);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = [document.title.split(' - ')[0], t('memoryBear')].join(' - ')
|
||||||
|
}, [language])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getConfigData()
|
getConfigData()
|
||||||
}, [])
|
}, [])
|
||||||
@@ -182,6 +188,7 @@ const ForgettingEngine: React.FC = () => {
|
|||||||
if (config.type === 'button') {
|
if (config.type === 'button') {
|
||||||
return (
|
return (
|
||||||
<SwitchFormItem
|
<SwitchFormItem
|
||||||
|
key={config.key}
|
||||||
title={t(`forgettingEngine.${config.key}`)}
|
title={t(`forgettingEngine.${config.key}`)}
|
||||||
name={config.name}
|
name={config.name}
|
||||||
desc={config.type && <span>{t(`forgettingEngine.type`)}: {config.type}</span>}
|
desc={config.type && <span>{t(`forgettingEngine.type`)}: {config.type}</span>}
|
||||||
|
|||||||
@@ -328,6 +328,7 @@ const Result: FC<ResultProps> = ({ loading, handleSave }) => {
|
|||||||
<Space size={24} className="rb:mt-4! rb:mb-3!">
|
<Space size={24} className="rb:mt-4! rb:mb-3!">
|
||||||
{['processData', 'finalResult'].map(tab => (
|
{['processData', 'finalResult'].map(tab => (
|
||||||
<div
|
<div
|
||||||
|
key={tab}
|
||||||
className={clsx('rb:font-[MiSans-Bold] rb:font-bold rb:leading-5 rb:cursor-pointer', {
|
className={clsx('rb:font-[MiSans-Bold] rb:font-bold rb:leading-5 rb:cursor-pointer', {
|
||||||
'rb:text-[#212332]': activeTab === tab,
|
'rb:text-[#212332]': activeTab === tab,
|
||||||
'rb:text-[#A8A9AA]': activeTab !== tab,
|
'rb:text-[#A8A9AA]': activeTab !== tab,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 17:30:02
|
* @Date: 2026-02-03 17:30:02
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-03-26 15:45:42
|
* @Last Modified time: 2026-04-14 16:54:40
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Memory Extraction Engine Configuration Page
|
* Memory Extraction Engine Configuration Page
|
||||||
@@ -27,6 +27,7 @@ import ModelSelect from '@/components/ModelSelect'
|
|||||||
import RbSlider from '@/components/RbSlider';
|
import RbSlider from '@/components/RbSlider';
|
||||||
import DescWrapper from '@/components/FormItem/DescWrapper'
|
import DescWrapper from '@/components/FormItem/DescWrapper'
|
||||||
import LabelWrapper from '@/components/FormItem/LabelWrapper'
|
import LabelWrapper from '@/components/FormItem/LabelWrapper'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/** Available configuration section keys */
|
/** Available configuration section keys */
|
||||||
const keys = [
|
const keys = [
|
||||||
@@ -54,12 +55,17 @@ const MemoryExtractionEngine: FC = () => {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { message } = App.useApp();
|
const { message } = App.useApp();
|
||||||
const { id } = useParams()
|
const { id } = useParams()
|
||||||
|
const { language } = useI18n()
|
||||||
const [expandedKeys, setExpandedKeys] = useState<string[]>(keys)
|
const [expandedKeys, setExpandedKeys] = useState<string[]>(keys)
|
||||||
const [form] = Form.useForm<ConfigForm>()
|
const [form] = Form.useForm<ConfigForm>()
|
||||||
const values = Form.useWatch<ConfigForm>([], form)
|
const values = Form.useWatch<ConfigForm>([], form)
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [iterationPeriodDisabled, setIterationPeriodDisabled] = useState(false)
|
const [iterationPeriodDisabled, setIterationPeriodDisabled] = useState(false)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = [document.title.split(' - ')[0], t('memoryBear')].join(' - ')
|
||||||
|
}, [language])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (values?.reflexion_range === 'database') {
|
if (values?.reflexion_range === 'database') {
|
||||||
form.setFieldValue('iteration_period', 24)
|
form.setFieldValue('iteration_period', 24)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 14:10:20
|
* @Date: 2026-02-03 14:10:20
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 15:54:05
|
* @Last Modified time: 2026-04-14 16:55:26
|
||||||
*/
|
*/
|
||||||
import { type FC, useEffect, useState, useRef } from 'react'
|
import { type FC, useEffect, useState, useRef } from 'react'
|
||||||
import { useParams, useNavigate } from 'react-router-dom';
|
import { useParams, useNavigate } from 'react-router-dom';
|
||||||
@@ -18,6 +18,7 @@ import SearchInput from '@/components/SearchInput';
|
|||||||
import OntologyClassExtractModal from '../components/OntologyClassExtractModal'
|
import OntologyClassExtractModal from '../components/OntologyClassExtractModal'
|
||||||
import BodyWrapper from '@/components/Empty/BodyWrapper'
|
import BodyWrapper from '@/components/Empty/BodyWrapper'
|
||||||
import Tag from '@/components/Tag'
|
import Tag from '@/components/Tag'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ontology detail page component
|
* Ontology detail page component
|
||||||
@@ -29,6 +30,7 @@ const Detail: FC = () => {
|
|||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { id } = useParams()
|
const { id } = useParams()
|
||||||
const { modal, message } = App.useApp()
|
const { modal, message } = App.useApp()
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
// Refs
|
// Refs
|
||||||
const ontologyClassModalRef = useRef<OntologyClassModalRef>(null)
|
const ontologyClassModalRef = useRef<OntologyClassModalRef>(null)
|
||||||
@@ -48,7 +50,7 @@ const Detail: FC = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = `${data.scene_name} - ${t('memoryBear')}`;
|
document.title = `${data.scene_name} - ${t('memoryBear')}`;
|
||||||
}, [data.scene_name])
|
}, [data.scene_name, language])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch ontology class list data
|
* Fetch ontology class list data
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 17:46:47
|
* @Date: 2026-02-03 17:46:47
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-03-26 18:57:08
|
* @Last Modified time: 2026-04-14 16:59:56
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Self Reflection Engine Configuration Page
|
* Self Reflection Engine Configuration Page
|
||||||
@@ -99,6 +99,10 @@ const SelfReflectionEngine: React.FC = () => {
|
|||||||
|
|
||||||
const values = Form.useWatch([], form);
|
const values = Form.useWatch([], form);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = [document.title.split(' - ')[0], t('memoryBear')].join(' - ')
|
||||||
|
}, [language])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getConfigData()
|
getConfigData()
|
||||||
}, [id])
|
}, [id])
|
||||||
@@ -242,6 +246,7 @@ const SelfReflectionEngine: React.FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<SwitchFormItem
|
<SwitchFormItem
|
||||||
|
key={config.key}
|
||||||
title={t(`reflectionEngine.${config.key}`)}
|
title={t(`reflectionEngine.${config.key}`)}
|
||||||
name={config.key}
|
name={config.key}
|
||||||
desc={<>
|
desc={<>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-05 10:44:08
|
* @Date: 2026-02-05 10:44:08
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 16:27:08
|
* @Last Modified time: 2026-04-14 16:57:52
|
||||||
*/
|
*/
|
||||||
import { type FC, useEffect, useRef, useState } from "react";
|
import { type FC, useEffect, useRef, useState } from "react";
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
@@ -17,6 +17,7 @@ import type { SkillFormData } from '../types'
|
|||||||
import { getSkillDetail, createSkill, updateSkill } from '@/api/skill'
|
import { getSkillDetail, createSkill, updateSkill } from '@/api/skill'
|
||||||
import { stringRegExp } from '@/utils/validator';
|
import { stringRegExp } from '@/utils/validator';
|
||||||
import PageHeader from '@/components/Layout/PageHeader'
|
import PageHeader from '@/components/Layout/PageHeader'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skill Configuration Page Component
|
* Skill Configuration Page Component
|
||||||
@@ -43,6 +44,7 @@ const SkillConfig: FC = () => {
|
|||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [form] = Form.useForm<SkillFormData>();
|
const [form] = Form.useForm<SkillFormData>();
|
||||||
const [data, setData] = useState<SkillFormData | null>(null)
|
const [data, setData] = useState<SkillFormData | null>(null)
|
||||||
|
const { language } = useI18n()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Effect: Load skill data if editing existing skill
|
* Effect: Load skill data if editing existing skill
|
||||||
@@ -71,13 +73,17 @@ const SkillConfig: FC = () => {
|
|||||||
.then(res => {
|
.then(res => {
|
||||||
form.setFieldsValue(res as SkillFormData)
|
form.setFieldsValue(res as SkillFormData)
|
||||||
setData(res as SkillFormData)
|
setData(res as SkillFormData)
|
||||||
document.title = `${(res as SkillFormData).name} - ${t('memoryBear')}`;
|
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!data) return;
|
||||||
|
document.title = `${data?.name} - ${t('memoryBear')}`;
|
||||||
|
}, [language, data?.name])
|
||||||
|
|
||||||
const aiPromptModalRef = useRef<AiPromptModalRef>(null)
|
const aiPromptModalRef = useRef<AiPromptModalRef>(null)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 17:57:26
|
* @Date: 2026-02-03 17:57:26
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 16:38:21
|
* @Last Modified time: 2026-04-14 16:57:59
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* Neo4j User Memory Detail View
|
* Neo4j User Memory Detail View
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
* Shows profile, interests, node statistics, relationships, and insights
|
* Shows profile, interests, node statistics, relationships, and insights
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { type FC, useRef, useState, type MouseEvent } from 'react'
|
import { type FC, useRef, useState, type MouseEvent, useEffect } from 'react'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { useParams, useNavigate } from 'react-router-dom'
|
import { useParams, useNavigate } from 'react-router-dom'
|
||||||
import { Flex, Popover } from 'antd'
|
import { Flex, Popover } from 'antd'
|
||||||
@@ -26,6 +26,7 @@ import type { EndUserProfileRef, MemoryInsightRef, AboutMeRef, EndUser } from '.
|
|||||||
import {
|
import {
|
||||||
analyticsRefresh,
|
analyticsRefresh,
|
||||||
} from '@/api/memory'
|
} from '@/api/memory'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
const Neo4j: FC = () => {
|
const Neo4j: FC = () => {
|
||||||
const { id } = useParams()
|
const { id } = useParams()
|
||||||
@@ -33,6 +34,7 @@ const Neo4j: FC = () => {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [name, setName] = useState('')
|
const [name, setName] = useState('')
|
||||||
|
const { language } = useI18n()
|
||||||
const ref = useRef<EndUserProfileRef>(null)
|
const ref = useRef<EndUserProfileRef>(null)
|
||||||
const memoryInsightRef = useRef<MemoryInsightRef>(null)
|
const memoryInsightRef = useRef<MemoryInsightRef>(null)
|
||||||
const aboutMeRef = useRef<AboutMeRef>(null)
|
const aboutMeRef = useRef<AboutMeRef>(null)
|
||||||
@@ -43,8 +45,10 @@ const Neo4j: FC = () => {
|
|||||||
if (!data) return
|
if (!data) return
|
||||||
let name = data.other_name && data.other_name !== '' ? data.other_name : data.id || data.end_user_id
|
let name = data.other_name && data.other_name !== '' ? data.other_name : data.id || data.end_user_id
|
||||||
setName(name)
|
setName(name)
|
||||||
document.title = `${name} - ${t('memoryBear')}`;
|
|
||||||
}
|
}
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = `${name} - ${t('memoryBear')}`;
|
||||||
|
}, [name, language])
|
||||||
|
|
||||||
/** Navigate back */
|
/** Navigate back */
|
||||||
const goBack = () => {
|
const goBack = () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: ZhaoYing
|
* @Author: ZhaoYing
|
||||||
* @Date: 2026-02-03 17:57:11
|
* @Date: 2026-02-03 17:57:11
|
||||||
* @Last Modified by: ZhaoYing
|
* @Last Modified by: ZhaoYing
|
||||||
* @Last Modified time: 2026-04-14 15:56:15
|
* @Last Modified time: 2026-04-14 16:56:36
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* RAG User Memory Detail View
|
* RAG User Memory Detail View
|
||||||
@@ -26,6 +26,7 @@ import {
|
|||||||
} from '@/api/memory'
|
} from '@/api/memory'
|
||||||
import Empty from '@/components/Empty'
|
import Empty from '@/components/Empty'
|
||||||
import ConversationMemory from './components/ConversationMemory'
|
import ConversationMemory from './components/ConversationMemory'
|
||||||
|
import { useI18n } from '@/store/locale'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title component props
|
* Title component props
|
||||||
@@ -45,6 +46,7 @@ const Title: FC<TitleProps> = ({ title, iconClassName }) => (
|
|||||||
const Rag: FC = () => {
|
const Rag: FC = () => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { id } = useParams()
|
const { id } = useParams()
|
||||||
|
const { language } = useI18n()
|
||||||
const [data, setData] = useState<Data | null>(null)
|
const [data, setData] = useState<Data | null>(null)
|
||||||
const [summary, setSummary] = useState<string | null>('')
|
const [summary, setSummary] = useState<string | null>('')
|
||||||
const [loading, setLoading] = useState<Record<string, boolean>>({
|
const [loading, setLoading] = useState<Record<string, boolean>>({
|
||||||
@@ -99,7 +101,7 @@ const Rag: FC = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = `${name} - ${t('memoryBear')}`;
|
document.title = `${name} - ${t('memoryBear')}`;
|
||||||
}, [name])
|
}, [name, language])
|
||||||
|
|
||||||
const [refreshLoading, setRefreshLoading] = useState(false)
|
const [refreshLoading, setRefreshLoading] = useState(false)
|
||||||
const handleRefresh = () => {
|
const handleRefresh = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user