xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision 1119c2ea435417cd5c53719f91691ff2b1aa8670)
1ec26b768S猫头猫import React from 'react';
2*1119c2eaS猫头猫import {StyleSheet, View} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
4bf6e62f2S猫头猫import {useAtom, useSetAtom} from 'jotai';
5dec7a5f8S猫头猫import {
6dec7a5f8S猫头猫    pageStatusAtom,
7dec7a5f8S猫头猫    PageStatus,
8dec7a5f8S猫头猫    queryAtom,
9dec7a5f8S猫头猫    searchResultsAtom,
10dec7a5f8S猫头猫    initSearchResults,
11dec7a5f8S猫头猫} from '../store/atoms';
12bf6e62f2S猫头猫import useSearch from '../hooks/useSearch';
13bf6e62f2S猫头猫import {addHistory} from '../common/historySearch';
14*1119c2eaS猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
15ec26b768S猫头猫import useColors from '@/hooks/useColors';
16*1119c2eaS猫头猫import AppBar from '@/components/base/appBar';
17*1119c2eaS猫头猫import Input from '@/components/base/input';
18*1119c2eaS猫头猫import Color from 'color';
19e650bfb3S猫头猫import Button from '@/components/base/button';
20*1119c2eaS猫头猫import IconButton from '@/components/base/iconButton';
21*1119c2eaS猫头猫import {iconSizeConst} from '@/constants/uiConst';
22bf6e62f2S猫头猫
234060c00aS猫头猫export default function NavBar() {
24bf6e62f2S猫头猫    const search = useSearch();
25bf6e62f2S猫头猫    const [query, setQuery] = useAtom(queryAtom);
26bf6e62f2S猫头猫    const setPageStatus = useSetAtom(pageStatusAtom);
27ec26b768S猫头猫    const colors = useColors();
28a4ae8da5S猫头猫    const setSearchResultsState = useSetAtom(searchResultsAtom);
29bf6e62f2S猫头猫
30bf6e62f2S猫头猫    const onSearchSubmit = async () => {
31bf6e62f2S猫头猫        if (query === '') {
32bf6e62f2S猫头猫            return;
33bf6e62f2S猫头猫        }
34a4ae8da5S猫头猫        setSearchResultsState(initSearchResults);
35bf6e62f2S猫头猫        setPageStatus(prev =>
36bf6e62f2S猫头猫            prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev,
37bf6e62f2S猫头猫        );
380b940038S猫头猫        await search(query, 1);
39bf6e62f2S猫头猫        await addHistory(query);
40bf6e62f2S猫头猫    };
41bf6e62f2S猫头猫
42*1119c2eaS猫头猫    const hintTextColor = Color(colors.text).alpha(0.6).toString();
43*1119c2eaS猫头猫
44bf6e62f2S猫头猫    return (
45*1119c2eaS猫头猫        <AppBar containerStyle={style.appbar} contentStyle={style.appbar}>
46*1119c2eaS猫头猫            <View style={style.searchBarContainer}>
47*1119c2eaS猫头猫                <Icon
48*1119c2eaS猫头猫                    name="magnify"
49*1119c2eaS猫头猫                    color={hintTextColor}
50*1119c2eaS猫头猫                    size={iconSizeConst.light}
51*1119c2eaS猫头猫                    style={style.magnify}
524060c00aS猫头猫                />
53*1119c2eaS猫头猫                <Input
54bf6e62f2S猫头猫                    autoFocus
55*1119c2eaS猫头猫                    style={[
56*1119c2eaS猫头猫                        style.searchBar,
57*1119c2eaS猫头猫                        {
58*1119c2eaS猫头猫                            color: colors.text,
59*1119c2eaS猫头猫                            backgroundColor: colors.placeholder,
60*1119c2eaS猫头猫                        },
61*1119c2eaS猫头猫                    ]}
623b870a26S猫头猫                    accessible
633b870a26S猫头猫                    accessibilityLabel="搜索框"
643b870a26S猫头猫                    accessibilityHint={'输入要搜索的歌曲'}
65bf6e62f2S猫头猫                    onFocus={() => {
66bf6e62f2S猫头猫                        setPageStatus(PageStatus.EDITING);
67bf6e62f2S猫头猫                    }}
68*1119c2eaS猫头猫                    placeholderTextColor={hintTextColor}
69bf6e62f2S猫头猫                    placeholder="输入要搜索的歌曲"
70bf6e62f2S猫头猫                    onSubmitEditing={onSearchSubmit}
71dec7a5f8S猫头猫                    onChangeText={_ => {
72dec7a5f8S猫头猫                        if (_ === '') {
73dec7a5f8S猫头猫                            setPageStatus(PageStatus.EDITING);
74dec7a5f8S猫头猫                        }
75dec7a5f8S猫头猫                        setQuery(_);
76dec7a5f8S猫头猫                    }}
774060c00aS猫头猫                    value={query}
784060c00aS猫头猫                />
79*1119c2eaS猫头猫                {query.length ? (
80*1119c2eaS猫头猫                    <IconButton
81*1119c2eaS猫头猫                        style={style.close}
82*1119c2eaS猫头猫                        sizeType="light"
83*1119c2eaS猫头猫                        onPress={() => {
84*1119c2eaS猫头猫                            setQuery('');
85*1119c2eaS猫头猫                        }}
86*1119c2eaS猫头猫                        color={hintTextColor}
87*1119c2eaS猫头猫                        name="close"
88*1119c2eaS猫头猫                    />
89*1119c2eaS猫头猫                ) : null}
90*1119c2eaS猫头猫            </View>
91*1119c2eaS猫头猫            <Button
92*1119c2eaS猫头猫                style={[style.button]}
93*1119c2eaS猫头猫                hitSlop={0}
94*1119c2eaS猫头猫                fontColor={'headerText'}
95*1119c2eaS猫头猫                onPress={onSearchSubmit}>
96bf6e62f2S猫头猫                搜索
97bf6e62f2S猫头猫            </Button>
98*1119c2eaS猫头猫        </AppBar>
99bf6e62f2S猫头猫    );
100bf6e62f2S猫头猫}
101bf6e62f2S猫头猫
102bf6e62f2S猫头猫const style = StyleSheet.create({
103bf6e62f2S猫头猫    appbar: {
104*1119c2eaS猫头猫        paddingRight: 0,
105bf6e62f2S猫头猫    },
106e650bfb3S猫头猫    button: {
107e650bfb3S猫头猫        paddingHorizontal: rpx(24),
108*1119c2eaS猫头猫        height: '100%',
109*1119c2eaS猫头猫        justifyContent: 'center',
110*1119c2eaS猫头猫    },
111*1119c2eaS猫头猫    searchBarContainer: {
112*1119c2eaS猫头猫        flex: 1,
113*1119c2eaS猫头猫        flexDirection: 'row',
114*1119c2eaS猫头猫        alignItems: 'center',
115e650bfb3S猫头猫    },
116bf6e62f2S猫头猫    searchBar: {
117bf6e62f2S猫头猫        minWidth: rpx(375),
118bf6e62f2S猫头猫        flex: 1,
119*1119c2eaS猫头猫        paddingHorizontal: rpx(64),
120bf6e62f2S猫头猫        borderRadius: rpx(64),
121*1119c2eaS猫头猫        height: rpx(64),
12298547244S猫头猫        maxHeight: rpx(64),
123dc1c1f5aS猫头猫        alignItems: 'center',
124bf6e62f2S猫头猫    },
125*1119c2eaS猫头猫    magnify: {
126*1119c2eaS猫头猫        position: 'absolute',
127*1119c2eaS猫头猫        left: rpx(16),
128*1119c2eaS猫头猫        zIndex: 100,
129*1119c2eaS猫头猫    },
130*1119c2eaS猫头猫    close: {
131*1119c2eaS猫头猫        position: 'absolute',
132*1119c2eaS猫头猫        right: rpx(16),
133ec26b768S猫头猫    },
134bf6e62f2S猫头猫});
135