xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision 756bc302d40f6f21e72cdfca8580b52a8341d658)
1ec26b768S猫头猫import React from 'react';
21119c2eaS猫头猫import {StyleSheet, View} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
4bf6e62f2S猫头猫import {useAtom, useSetAtom} from 'jotai';
5dec7a5f8S猫头猫import {
65589cdf3S猫头猫    initSearchResults,
7dec7a5f8S猫头猫    PageStatus,
85589cdf3S猫头猫    pageStatusAtom,
9dec7a5f8S猫头猫    queryAtom,
10dec7a5f8S猫头猫    searchResultsAtom,
11dec7a5f8S猫头猫} from '../store/atoms';
12bf6e62f2S猫头猫import useSearch from '../hooks/useSearch';
13bf6e62f2S猫头猫import {addHistory} from '../common/historySearch';
14ec26b768S猫头猫import useColors from '@/hooks/useColors';
151119c2eaS猫头猫import AppBar from '@/components/base/appBar';
161119c2eaS猫头猫import Input from '@/components/base/input';
171119c2eaS猫头猫import Color from 'color';
18*756bc302S猫头猫import Button from '@/components/base/textButton.tsx';
191119c2eaS猫头猫import IconButton from '@/components/base/iconButton';
201119c2eaS猫头猫import {iconSizeConst} from '@/constants/uiConst';
215589cdf3S猫头猫import Icon from '@/components/base/icon.tsx';
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猫头猫
421119c2eaS猫头猫    const hintTextColor = Color(colors.text).alpha(0.6).toString();
431119c2eaS猫头猫
44bf6e62f2S猫头猫    return (
451119c2eaS猫头猫        <AppBar containerStyle={style.appbar} contentStyle={style.appbar}>
461119c2eaS猫头猫            <View style={style.searchBarContainer}>
471119c2eaS猫头猫                <Icon
485589cdf3S猫头猫                    name="magnifying-glass"
491119c2eaS猫头猫                    color={hintTextColor}
50a27adc20S猫头猫                    size={iconSizeConst.small}
511119c2eaS猫头猫                    style={style.magnify}
524060c00aS猫头猫                />
531119c2eaS猫头猫                <Input
54bf6e62f2S猫头猫                    autoFocus
551119c2eaS猫头猫                    style={[
561119c2eaS猫头猫                        style.searchBar,
571119c2eaS猫头猫                        {
581119c2eaS猫头猫                            color: colors.text,
59277c5280S猫头猫                            backgroundColor: colors.pageBackground,
601119c2eaS猫头猫                        },
611119c2eaS猫头猫                    ]}
623b870a26S猫头猫                    accessible
633b870a26S猫头猫                    accessibilityLabel="搜索框"
643b870a26S猫头猫                    accessibilityHint={'输入要搜索的歌曲'}
65bf6e62f2S猫头猫                    onFocus={() => {
66bf6e62f2S猫头猫                        setPageStatus(PageStatus.EDITING);
67bf6e62f2S猫头猫                    }}
681119c2eaS猫头猫                    placeholderTextColor={hintTextColor}
69bf6e62f2S猫头猫                    placeholder="输入要搜索的歌曲"
70bf6e62f2S猫头猫                    onSubmitEditing={onSearchSubmit}
71dec7a5f8S猫头猫                    onChangeText={_ => {
72dec7a5f8S猫头猫                        if (_ === '') {
73dec7a5f8S猫头猫                            setPageStatus(PageStatus.EDITING);
74dec7a5f8S猫头猫                        }
75dec7a5f8S猫头猫                        setQuery(_);
76dec7a5f8S猫头猫                    }}
774060c00aS猫头猫                    value={query}
784060c00aS猫头猫                />
791119c2eaS猫头猫                {query.length ? (
801119c2eaS猫头猫                    <IconButton
811119c2eaS猫头猫                        style={style.close}
821119c2eaS猫头猫                        sizeType="light"
831119c2eaS猫头猫                        onPress={() => {
841119c2eaS猫头猫                            setQuery('');
85fe32deaaS猫头猫                            setPageStatus(PageStatus.EDITING);
861119c2eaS猫头猫                        }}
871119c2eaS猫头猫                        color={hintTextColor}
885589cdf3S猫头猫                        name="x-mark"
891119c2eaS猫头猫                    />
901119c2eaS猫头猫                ) : null}
911119c2eaS猫头猫            </View>
921119c2eaS猫头猫            <Button
931119c2eaS猫头猫                style={[style.button]}
941119c2eaS猫头猫                hitSlop={0}
95277c5280S猫头猫                fontColor={'appBarText'}
961119c2eaS猫头猫                onPress={onSearchSubmit}>
97bf6e62f2S猫头猫                搜索
98bf6e62f2S猫头猫            </Button>
991119c2eaS猫头猫        </AppBar>
100bf6e62f2S猫头猫    );
101bf6e62f2S猫头猫}
102bf6e62f2S猫头猫
103bf6e62f2S猫头猫const style = StyleSheet.create({
104bf6e62f2S猫头猫    appbar: {
1051119c2eaS猫头猫        paddingRight: 0,
106bf6e62f2S猫头猫    },
107e650bfb3S猫头猫    button: {
108e650bfb3S猫头猫        paddingHorizontal: rpx(24),
1091119c2eaS猫头猫        height: '100%',
1101119c2eaS猫头猫        justifyContent: 'center',
1111119c2eaS猫头猫    },
1121119c2eaS猫头猫    searchBarContainer: {
1131119c2eaS猫头猫        flex: 1,
1141119c2eaS猫头猫        flexDirection: 'row',
1151119c2eaS猫头猫        alignItems: 'center',
116e650bfb3S猫头猫    },
117bf6e62f2S猫头猫    searchBar: {
118bf6e62f2S猫头猫        minWidth: rpx(375),
119bf6e62f2S猫头猫        flex: 1,
1201119c2eaS猫头猫        paddingHorizontal: rpx(64),
121bf6e62f2S猫头猫        borderRadius: rpx(64),
1221119c2eaS猫头猫        height: rpx(64),
12398547244S猫头猫        maxHeight: rpx(64),
124dc1c1f5aS猫头猫        alignItems: 'center',
125bf6e62f2S猫头猫    },
1261119c2eaS猫头猫    magnify: {
1271119c2eaS猫头猫        position: 'absolute',
1281119c2eaS猫头猫        left: rpx(16),
1291119c2eaS猫头猫        zIndex: 100,
1301119c2eaS猫头猫    },
1311119c2eaS猫头猫    close: {
1321119c2eaS猫头猫        position: 'absolute',
1331119c2eaS猫头猫        right: rpx(16),
134ec26b768S猫头猫    },
135bf6e62f2S猫头猫});
136