xref: /MusicFree/src/pages/artistDetail/components/header.tsx (revision b4c389f44ac4dad056e7314478fadd2eca82a4b1)
14060c00aS猫头猫import React, {useEffect} from 'react';
24060c00aS猫头猫import {StyleSheet, View} from 'react-native';
3be474dd8S猫头猫import rpx from '@/utils/rpx';
420e2869eS猫头猫import Animated, {
520e2869eS猫头猫    useAnimatedStyle,
620e2869eS猫头猫    useSharedValue,
720e2869eS猫头猫    withTiming,
820e2869eS猫头猫} from 'react-native-reanimated';
920e2869eS猫头猫import {useAtomValue} from 'jotai';
1020e2869eS猫头猫import {scrollToTopAtom} from '../store/atoms';
1120e2869eS猫头猫import ThemeText from '@/components/base/themeText';
1220e2869eS猫头猫import Tag from '@/components/base/tag';
13*b4c389f4Smaotoumaoimport {useParams} from '@/core/router';
14e650bfb3S猫头猫import Image from '@/components/base/image';
15e650bfb3S猫头猫import {ImgAsset} from '@/constants/assetsConst';
16be474dd8S猫头猫
1720e2869eS猫头猫const headerHeight = rpx(350);
187cee35b5S猫头猫
197cee35b5S猫头猫interface IHeaderProps {
207cee35b5S猫头猫    neverFold?: boolean;
217cee35b5S猫头猫}
227cee35b5S猫头猫
237cee35b5S猫头猫export default function Header(props: IHeaderProps) {
247cee35b5S猫头猫    const {neverFold} = props;
257cee35b5S猫头猫
26e7fa3837S猫头猫    const {artistItem} = useParams<'artist-detail'>();
2720e2869eS猫头猫
2820e2869eS猫头猫    const heightValue = useSharedValue(headerHeight);
2920e2869eS猫头猫    const opacityValue = useSharedValue(1);
3020e2869eS猫头猫    const scrollToTopState = useAtomValue(scrollToTopAtom);
3120e2869eS猫头猫
3220e2869eS猫头猫    const heightStyle = useAnimatedStyle(() => {
3320e2869eS猫头猫        return {
3420e2869eS猫头猫            height: heightValue.value,
3520e2869eS猫头猫            opacity: opacityValue.value,
3620e2869eS猫头猫        };
3720e2869eS猫头猫    });
3820e2869eS猫头猫
3920e2869eS猫头猫    const avatar = artistItem.avatar?.startsWith('//')
4020e2869eS猫头猫        ? `https:${artistItem.avatar}`
4120e2869eS猫头猫        : artistItem.avatar;
4220e2869eS猫头猫
4320e2869eS猫头猫    /** 折叠 */
4420e2869eS猫头猫    useEffect(() => {
457cee35b5S猫头猫        if (neverFold) {
467cee35b5S猫头猫            heightValue.value = withTiming(headerHeight);
477cee35b5S猫头猫            opacityValue.value = withTiming(1);
487cee35b5S猫头猫            return;
497cee35b5S猫头猫        }
5020e2869eS猫头猫        if (scrollToTopState) {
5120e2869eS猫头猫            heightValue.value = withTiming(headerHeight);
5220e2869eS猫头猫            opacityValue.value = withTiming(1);
5320e2869eS猫头猫        } else {
5420e2869eS猫头猫            heightValue.value = withTiming(0);
5520e2869eS猫头猫            opacityValue.value = withTiming(0);
5620e2869eS猫头猫        }
577cee35b5S猫头猫    }, [scrollToTopState, neverFold]);
5820e2869eS猫头猫
5920e2869eS猫头猫    return (
60e650bfb3S猫头猫        <Animated.View style={[styles.wrapper, heightStyle]}>
61e650bfb3S猫头猫            <View style={styles.headerWrapper}>
62e650bfb3S猫头猫                <Image
63e650bfb3S猫头猫                    emptySrc={ImgAsset.albumDefault}
64e650bfb3S猫头猫                    uri={avatar}
65e650bfb3S猫头猫                    style={styles.artist}
66e650bfb3S猫头猫                />
67e650bfb3S猫头猫                <View style={styles.info}>
68e650bfb3S猫头猫                    <View style={styles.title}>
6920e2869eS猫头猫                        <ThemeText
7020e2869eS猫头猫                            fontSize="title"
71e650bfb3S猫头猫                            style={styles.titleText}
7220e2869eS猫头猫                            numberOfLines={1}
7320e2869eS猫头猫                            ellipsizeMode="tail">
74c9fce3b5S猫头猫                            {artistItem?.name ?? ''}
7520e2869eS猫头猫                        </ThemeText>
76c9fce3b5S猫头猫                        {artistItem.platform ? (
774060c00aS猫头猫                            <Tag tagName={artistItem.platform} />
781fbef60aS猫头猫                        ) : null}
7920e2869eS猫头猫                    </View>
8020e2869eS猫头猫
81c9fce3b5S猫头猫                    {artistItem.fans ? (
82277c5280S猫头猫                        <ThemeText
83277c5280S猫头猫                            fontSize="subTitle"
84277c5280S猫头猫                            fontColor="textSecondary">
8520e2869eS猫头猫                            粉丝数: {artistItem.fans}
8620e2869eS猫头猫                        </ThemeText>
871fbef60aS猫头猫                    ) : null}
8820e2869eS猫头猫                </View>
8920e2869eS猫头猫            </View>
9020e2869eS猫头猫
9120e2869eS猫头猫            <ThemeText
92e650bfb3S猫头猫                style={styles.description}
9320e2869eS猫头猫                numberOfLines={2}
9420e2869eS猫头猫                ellipsizeMode="tail"
95277c5280S猫头猫                fontColor="textSecondary"
9620e2869eS猫头猫                fontSize="description">
97c9fce3b5S猫头猫                {artistItem?.description ?? ''}
9820e2869eS猫头猫            </ThemeText>
9920e2869eS猫头猫        </Animated.View>
10020e2869eS猫头猫    );
101be474dd8S猫头猫}
102be474dd8S猫头猫
103e650bfb3S猫头猫const styles = StyleSheet.create({
104be474dd8S猫头猫    wrapper: {
105be474dd8S猫头猫        width: rpx(750),
10620e2869eS猫头猫        height: headerHeight,
10720e2869eS猫头猫        backgroundColor: 'rgba(28, 28, 28, 0.1)',
10820e2869eS猫头猫        zIndex: 1,
10920e2869eS猫头猫    },
110e650bfb3S猫头猫    artist: {
111e650bfb3S猫头猫        width: rpx(144),
112e650bfb3S猫头猫        height: rpx(144),
113e650bfb3S猫头猫        borderRadius: rpx(16),
114e650bfb3S猫头猫    },
11520e2869eS猫头猫    headerWrapper: {
11620e2869eS猫头猫        width: rpx(750),
11720e2869eS猫头猫        paddingTop: rpx(24),
11820e2869eS猫头猫        paddingHorizontal: rpx(24),
11920e2869eS猫头猫        height: rpx(240),
12020e2869eS猫头猫        flexDirection: 'row',
12120e2869eS猫头猫        alignItems: 'center',
12220e2869eS猫头猫    },
12320e2869eS猫头猫    info: {
12420e2869eS猫头猫        marginLeft: rpx(24),
12520e2869eS猫头猫        justifyContent: 'space-around',
12620e2869eS猫头猫        height: rpx(144),
12720e2869eS猫头猫    },
12820e2869eS猫头猫    title: {
12920e2869eS猫头猫        flexDirection: 'row',
13020e2869eS猫头猫        alignItems: 'center',
13120e2869eS猫头猫    },
13220e2869eS猫头猫    titleText: {
13320e2869eS猫头猫        marginRight: rpx(18),
13420e2869eS猫头猫        maxWidth: rpx(400),
13520e2869eS猫头猫    },
13620e2869eS猫头猫    description: {
13720e2869eS猫头猫        marginTop: rpx(24),
13820e2869eS猫头猫        width: rpx(750),
13920e2869eS猫头猫        paddingHorizontal: rpx(24),
140be474dd8S猫头猫    },
141be474dd8S猫头猫});
142