mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
### What problem does this PR solve? feat: Added UI functions related to data-flow knowledge base #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
97 lines
3.3 KiB
TypeScript
97 lines
3.3 KiB
TypeScript
import { Input } from '@/components/originui/input';
|
|
import Spotlight from '@/components/spotlight';
|
|
import message from '@/components/ui/message';
|
|
import { IUserInfo } from '@/interfaces/database/user-setting';
|
|
import { cn } from '@/lib/utils';
|
|
import { Search } from 'lucide-react';
|
|
import { Dispatch, SetStateAction } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import './index.less';
|
|
|
|
export default function SearchPage({
|
|
isSearching,
|
|
setIsSearching,
|
|
searchText,
|
|
setSearchText,
|
|
userInfo,
|
|
canSearch,
|
|
}: {
|
|
isSearching: boolean;
|
|
setIsSearching: Dispatch<SetStateAction<boolean>>;
|
|
searchText: string;
|
|
setSearchText: Dispatch<SetStateAction<string>>;
|
|
userInfo?: IUserInfo;
|
|
canSearch?: boolean;
|
|
}) {
|
|
// const { data: userInfo } = useFetchUserInfo();
|
|
const { t } = useTranslation();
|
|
return (
|
|
<section className="relative w-full flex transition-all justify-center items-center mt-32">
|
|
<div className="relative z-10 px-8 pt-8 flex text-transparent flex-col justify-center items-center w-[780px]">
|
|
<h1
|
|
className={cn(
|
|
'text-4xl font-bold bg-gradient-to-l from-[#40EBE3] to-[#4A51FF] bg-clip-text',
|
|
)}
|
|
>
|
|
RAGFlow
|
|
</h1>
|
|
|
|
<div className="rounded-lg text-primary text-xl sticky flex justify-center w-full transform scale-100 mt-8 p-6 h-[230px] border">
|
|
{!isSearching && <Spotlight className="z-0" />}
|
|
<div className="flex flex-col justify-center items-center w-2/3">
|
|
{!isSearching && (
|
|
<>
|
|
<p className="mb-4 transition-opacity">👋 Hi there</p>
|
|
<p className="mb-10 transition-opacity">
|
|
{userInfo && (
|
|
<>
|
|
{t('search.welcomeBack')}, {userInfo.nickname}
|
|
</>
|
|
)}
|
|
</p>
|
|
</>
|
|
)}
|
|
|
|
<div className="relative w-full ">
|
|
<Input
|
|
placeholder={t('search.searchGreeting')}
|
|
className="w-full rounded-full py-6 px-4 pr-10 text-text-primary text-lg bg-bg-base delay-700"
|
|
value={searchText}
|
|
onKeyUp={(e) => {
|
|
if (e.key === 'Enter') {
|
|
if (canSearch === false) {
|
|
message.warning(t('search.chooseDataset'));
|
|
return;
|
|
}
|
|
setIsSearching(!isSearching);
|
|
}
|
|
}}
|
|
onChange={(e) => {
|
|
if (canSearch === false) {
|
|
message.warning(t('search.chooseDataset'));
|
|
return;
|
|
}
|
|
setSearchText(e.target.value || '');
|
|
}}
|
|
/>
|
|
<button
|
|
type="button"
|
|
className="absolute right-2 top-1/2 -translate-y-1/2 transform rounded-full bg-text-primary p-2 text-bg-base shadow w-12"
|
|
onClick={() => {
|
|
if (canSearch === false) {
|
|
message.warning(t('search.chooseDataset'));
|
|
return;
|
|
}
|
|
setIsSearching(!isSearching);
|
|
}}
|
|
>
|
|
<Search size={22} className="m-auto" />
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|