/**
* Company 页面顶部搜索栏组件 - FUI 科幻风格
*/
import React, { memo, useMemo, useCallback, useState } from 'react';
import { Box, Flex, HStack, VStack, Text } from '@chakra-ui/react';
import { AutoComplete, Input, Spin } from 'antd';
import { SearchOutlined } from '@ant-design/icons';
import { useStockSearch } from '@hooks/useStockSearch';
import { LAYOUT_PADDING } from '@/layouts/config/layoutConfig';
import { THEME } from '../../config';
import { FUI_COLORS, FUI_GLOW } from '../../theme/fui';
import type { CompanyHeaderProps, StockSearchResult } from '../../types';
import {
DROPDOWN_STYLE,
SEARCH_ICON_STYLE,
INPUT_STYLE,
AUTOCOMPLETE_STYLE,
SEARCH_BOX_SX,
} from './constants';
// ============================================
// SearchBox 子组件
// ============================================
const SearchBox = memo<{
onStockChange: (value: string) => void;
}>(({ onStockChange }) => {
const [inputCode, setInputCode] = useState('');
const {
searchResults,
isSearching,
handleSearch: doSearch,
clearSearch,
} = useStockSearch({
limit: 10,
debounceMs: 300,
onSearch: () => {},
}) as {
searchResults: StockSearchResult[];
isSearching: boolean;
handleSearch: (query: string) => void;
clearSearch: () => void;
};
const stockOptions = useMemo(() => (
searchResults.map((stock: StockSearchResult) => ({
value: stock.stock_code,
label: (
{stock.stock_code}
{stock.stock_name}
{stock.pinyin_abbr && (
{stock.pinyin_abbr.toUpperCase()}
)}
),
}))
), [searchResults]);
const handleSearch = useCallback(() => {
if (inputCode) {
onStockChange(inputCode);
}
}, [inputCode, onStockChange]);
const handleSelect = useCallback((value: string) => {
clearSearch();
setInputCode(value);
onStockChange(value);
}, [clearSearch, onStockChange]);
const handleKeyDown = useCallback((e: React.KeyboardEvent) => {
if (e.key === 'Enter') handleSearch();
}, [handleSearch]);
const searchIcon = useMemo(() => (
), [handleSearch]);
return (
: null}
>
);
});
SearchBox.displayName = 'SearchBox';
// ============================================
// CompanyHeader 主组件
// ============================================
const CompanyHeader: React.FC = memo(({ onStockChange }) => (
个股详情
查看股票实时行情、财务数据和盈利预测
));
CompanyHeader.displayName = 'CompanyHeader';
export default CompanyHeader;