mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
### What problem does this PR solve? Renovate global navigation bar, align styles to the design. (May causes minor layout issues in sub-pages, will check and fix soon) ### Type of change - [x] Refactoring
138 lines
4.2 KiB
TypeScript
138 lines
4.2 KiB
TypeScript
import { useFetchTokenListBeforeOtherStep } from '@/components/embed-dialog/use-show-embed-dialog';
|
|
|
|
import { Button } from '@/components/ui/button';
|
|
import { SharedFrom } from '@/constants/chat';
|
|
import {
|
|
useFetchTenantInfo,
|
|
useFetchUserInfo,
|
|
} from '@/hooks/use-user-setting-request';
|
|
import { Routes } from '@/routes';
|
|
import { Send, Settings } from 'lucide-react';
|
|
import { useEffect, useState } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import {
|
|
ISearchAppDetailProps,
|
|
useFetchSearchDetail,
|
|
} from '../next-searches/hooks';
|
|
import EmbedAppModal from './embed-app-modal';
|
|
import { useCheckSettings } from './hooks';
|
|
import './index.less';
|
|
import SearchHome from './search-home';
|
|
import { SearchSetting } from './search-setting';
|
|
import SearchingPage from './searching';
|
|
|
|
export default function SearchPage() {
|
|
const [isSearching, setIsSearching] = useState(false);
|
|
const { data: SearchData } = useFetchSearchDetail();
|
|
const { beta, handleOperate } = useFetchTokenListBeforeOtherStep();
|
|
|
|
const [openSetting, setOpenSetting] = useState(false);
|
|
const [openEmbed, setOpenEmbed] = useState(false);
|
|
const [searchText, setSearchText] = useState('');
|
|
const { data: tenantInfo } = useFetchTenantInfo();
|
|
const { data: userInfo } = useFetchUserInfo();
|
|
const tenantId = tenantInfo.tenant_id;
|
|
const { t } = useTranslation();
|
|
const { openSetting: checkOpenSetting } = useCheckSettings(
|
|
SearchData as ISearchAppDetailProps,
|
|
);
|
|
useEffect(() => {
|
|
setOpenSetting(checkOpenSetting);
|
|
}, [checkOpenSetting]);
|
|
|
|
useEffect(() => {
|
|
if (isSearching) {
|
|
setOpenSetting(false);
|
|
}
|
|
}, [isSearching]);
|
|
|
|
return (
|
|
<section className="size-full relative" data-testid="search-detail">
|
|
<div className="flex gap-3 w-full bg-bg-base">
|
|
<div className="flex-1">
|
|
{!isSearching && (
|
|
<div className="animate-fade-in-down">
|
|
<SearchHome
|
|
setIsSearching={setIsSearching}
|
|
isSearching={isSearching}
|
|
searchText={searchText}
|
|
setSearchText={setSearchText}
|
|
userInfo={userInfo}
|
|
canSearch={!checkOpenSetting}
|
|
/>
|
|
</div>
|
|
)}
|
|
{isSearching && (
|
|
<div className="animate-fade-in-up">
|
|
<SearchingPage
|
|
setIsSearching={setIsSearching}
|
|
searchText={searchText}
|
|
setSearchText={setSearchText}
|
|
data={SearchData as ISearchAppDetailProps}
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
{openSetting && (
|
|
<SearchSetting
|
|
className="mt-20 me-2"
|
|
open={openSetting}
|
|
setOpen={setOpenSetting}
|
|
data={SearchData as ISearchAppDetailProps}
|
|
/>
|
|
)}
|
|
{
|
|
<EmbedAppModal
|
|
open={openEmbed}
|
|
setOpen={setOpenEmbed}
|
|
url={Routes.SearchShare}
|
|
token={SearchData?.id as string}
|
|
from={SharedFrom.Search}
|
|
tenantId={tenantId}
|
|
beta={beta}
|
|
/>
|
|
}
|
|
{
|
|
// <EmbedDialog
|
|
// visible={openEmbed}
|
|
// hideModal={setOpenEmbed}
|
|
// token={SearchData?.id as string}
|
|
// from={SharedFrom.Search}
|
|
// beta={beta}
|
|
// isAgent={false}
|
|
// ></EmbedDialog>
|
|
}
|
|
</div>
|
|
<div className="absolute end-5 top-4">
|
|
<Button
|
|
onClick={() => {
|
|
handleOperate().then((res) => {
|
|
console.log(res, 'res');
|
|
if (res) {
|
|
setOpenEmbed(!openEmbed);
|
|
}
|
|
});
|
|
}}
|
|
>
|
|
<Send />
|
|
<div>{t('search.embedApp')}</div>
|
|
</Button>
|
|
</div>
|
|
{!isSearching && (
|
|
<div className="absolute start-5 bottom-12 ">
|
|
<Button
|
|
variant="transparent"
|
|
className="bg-bg-card"
|
|
onClick={() => setOpenSetting(!openSetting)}
|
|
>
|
|
<Settings className="text-text-secondary" />
|
|
<div className="text-text-secondary">
|
|
{t('search.searchSettings')}
|
|
</div>
|
|
</Button>
|
|
</div>
|
|
)}
|
|
</section>
|
|
);
|
|
}
|