xref: /MusicFree/src/pages/recommendSheets/components/body/sheetBody.tsx (revision ceb900cd812eb1b086ac040a306ddf325339e920)
1*ceb900cdS猫头猫import React, {memo, useState} from 'react';
2*ceb900cdS猫头猫import {StyleSheet, View} from 'react-native';
3*ceb900cdS猫头猫import rpx from '@/utils/rpx';
4*ceb900cdS猫头猫import globalStyle from '@/constants/globalStyle';
5*ceb900cdS猫头猫import {ScrollView} from 'react-native-gesture-handler';
6*ceb900cdS猫头猫import TypeTag from '../../../../components/base/typeTag';
7*ceb900cdS猫头猫import usePanel from '@/components/panels/usePanel';
8*ceb900cdS猫头猫import useRecommendList from '../../hooks/useRecommendListTags';
9*ceb900cdS猫头猫import SheetList from './sheetList';
10*ceb900cdS猫头猫
11*ceb900cdS猫头猫interface IProps {
12*ceb900cdS猫头猫    hash: string;
13*ceb900cdS猫头猫}
14*ceb900cdS猫头猫
15*ceb900cdS猫头猫const defaultTag: ICommon.IUnique = {
16*ceb900cdS猫头猫    title: '默认',
17*ceb900cdS猫头猫    id: '',
18*ceb900cdS猫头猫};
19*ceb900cdS猫头猫function SheetBody(props: IProps) {
20*ceb900cdS猫头猫    const {hash} = props;
21*ceb900cdS猫头猫
22*ceb900cdS猫头猫    // 选中的tag
23*ceb900cdS猫头猫    const [selectedTag, setSelectedTag] = useState<ICommon.IUnique>(defaultTag);
24*ceb900cdS猫头猫
25*ceb900cdS猫头猫    // 第一个tag
26*ceb900cdS猫头猫    const [firstTag, setFirstTag] = useState<ICommon.IUnique>(defaultTag);
27*ceb900cdS猫头猫
28*ceb900cdS猫头猫    // 所有tag
29*ceb900cdS猫头猫    const tags = useRecommendList(hash);
30*ceb900cdS猫头猫
31*ceb900cdS猫头猫    const {showPanel, hidePanel} = usePanel();
32*ceb900cdS猫头猫
33*ceb900cdS猫头猫    return (
34*ceb900cdS猫头猫        <View style={globalStyle.fwflex1}>
35*ceb900cdS猫头猫            <ScrollView
36*ceb900cdS猫头猫                style={style.headerWrapper}
37*ceb900cdS猫头猫                contentContainerStyle={style.header}
38*ceb900cdS猫头猫                horizontal>
39*ceb900cdS猫头猫                <TypeTag
40*ceb900cdS猫头猫                    title={firstTag.title}
41*ceb900cdS猫头猫                    selected={selectedTag.id === firstTag.id}
42*ceb900cdS猫头猫                    onPress={() => {
43*ceb900cdS猫头猫                        // 拉起浮层
44*ceb900cdS猫头猫                        showPanel('SheetTags', {
45*ceb900cdS猫头猫                            tags: tags?.data ?? [],
46*ceb900cdS猫头猫                            onTagPressed(tag) {
47*ceb900cdS猫头猫                                setSelectedTag(tag);
48*ceb900cdS猫头猫                                setFirstTag(tag);
49*ceb900cdS猫头猫                                hidePanel();
50*ceb900cdS猫头猫                            },
51*ceb900cdS猫头猫                        });
52*ceb900cdS猫头猫                    }}
53*ceb900cdS猫头猫                />
54*ceb900cdS猫头猫                {(tags?.pinned ?? []).map(_ => (
55*ceb900cdS猫头猫                    <TypeTag
56*ceb900cdS猫头猫                        key={`pinned-${_.id}`}
57*ceb900cdS猫头猫                        title={_.title}
58*ceb900cdS猫头猫                        selected={selectedTag.id === _.id}
59*ceb900cdS猫头猫                        onPress={() => {
60*ceb900cdS猫头猫                            setSelectedTag(_);
61*ceb900cdS猫头猫                        }}
62*ceb900cdS猫头猫                    />
63*ceb900cdS猫头猫                ))}
64*ceb900cdS猫头猫            </ScrollView>
65*ceb900cdS猫头猫            <SheetList tag={selectedTag} pluginHash={hash} />
66*ceb900cdS猫头猫        </View>
67*ceb900cdS猫头猫    );
68*ceb900cdS猫头猫}
69*ceb900cdS猫头猫
70*ceb900cdS猫头猫export default memo(SheetBody, (prev, curr) => prev.hash === curr.hash);
71*ceb900cdS猫头猫
72*ceb900cdS猫头猫const style = StyleSheet.create({
73*ceb900cdS猫头猫    headerWrapper: {
74*ceb900cdS猫头猫        height: rpx(100),
75*ceb900cdS猫头猫        flexGrow: 0,
76*ceb900cdS猫头猫    },
77*ceb900cdS猫头猫    header: {
78*ceb900cdS猫头猫        height: rpx(100),
79*ceb900cdS猫头猫        alignItems: 'center',
80*ceb900cdS猫头猫    },
81*ceb900cdS猫头猫});
82