Files
mini-programs/src/components/NTRPTestEntryCard/index.tsx

179 lines
5.4 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React, { useState, useEffect, useCallback, memo } from "react";
import { View, Image, Text } from "@tarojs/components";
import Taro from "@tarojs/taro";
import { useUserInfo, useUserActions } from "@/store/userStore";
// import { getCurrentFullPath } from "@/utils";
import evaluateService, { StageType } from "@/services/evaluateService";
import DocCopy from "@/static/ntrp/ntrp_doc_copy.svg";
import ArrowRight from "@/static/ntrp/ntrp_arrow_right_color.svg";
import {
EvaluateScene,
useEvaluate,
EvaluateCallback,
} from "@/store/evaluateStore";
import styles from "./index.module.scss";
function NTRPTestEntryCard(props: {
type: EvaluateScene;
evaluateCallback?: EvaluateCallback;
}) {
const [testFlag, setTestFlag] = useState(false);
const { type, evaluateCallback } = props;
const userInfo = useUserInfo();
const { setCallback } = useEvaluate();
const { fetchUserInfo } = useUserActions();
console.log(userInfo);
useEffect(() => {
if (!userInfo.id) {
fetchUserInfo();
}
evaluateService.getLastResult().then((res) => {
setTestFlag(res.code === 0 && res.data.has_ntrp_level);
});
}, [userInfo.id]);
const handleTest = useCallback(
function () {
switch (type) {
case EvaluateScene.list:
setCallback({
type,
next: () => {
Taro.redirectTo({ url: "/game_pages/list/index" });
},
onCancel: () => {
// Taro.redirectTo({ url: "/game_pages/list/index" });
Taro.navigateBack();
},
});
break;
case EvaluateScene.share:
setCallback({
type,
next: () => {
Taro.redirectTo({ url: "/main_pages/index" });
},
onCancel: () => {
Taro.redirectTo({ url: "/main_pages/index" });
},
});
break;
case EvaluateScene.detail:
case EvaluateScene.publish:
setCallback(evaluateCallback as EvaluateCallback);
break;
case EvaluateScene.user:
setCallback({
type,
next: () => {
Taro.redirectTo({ url: "/main_pages/index" });
},
onCancel: () => {
// Taro.redirectTo({ url: "/user_pages/myself/index" });
Taro.navigateBack();
},
});
break;
case EvaluateScene.userEdit:
setCallback({
type,
next: () => {
Taro.redirectTo({ url: "/game_pages/list/index" });
},
onCancel: () => {
// Taro.redirectTo({ url: "/user_pages/edit/index" });
Taro.navigateBack();
},
});
break;
default:
setCallback({
type,
next: () => {
Taro.redirectTo({ url: "/main_pages/index" });
},
onCancel: () => {
Taro.redirectTo({ url: "/main_pages/index" });
},
});
}
Taro.navigateTo({
url: `/other_pages/ntrp-evaluate/index?stage=${
testFlag ? StageType.INTRO : StageType.TEST
}`,
});
},
[setCallback]
);
return type === EvaluateScene.list ? (
<View className={styles.higher} onClick={handleTest}>
<View className={styles.desc}>
<View>
<View className={styles.title}>
<Text></Text>
</View>
<View className={styles.title}>
<Text></Text>
<Text className={styles.colorTip}> (</Text>
<Text className={styles.strongTip}>NTRP</Text>
<Text className={styles.colorTip}>) </Text>
<Text>?</Text>
</View>
</View>
<View className={styles.entry}>
<Text></Text>
<Image className={styles.entryIcon} src={ArrowRight} />
</View>
</View>
<View className={styles.avatarWrap}>
<View className={styles.avatar}>
<Image
className={styles.avatarUrl}
src={userInfo.avatar_url}
mode="aspectFill"
/>
</View>
{/* avatar side */}
<View className={styles.addonImage}>
<Image className={styles.docImage} src={DocCopy} mode="aspectFill" />
</View>
</View>
</View>
) : (
<View className={styles.lower} onClick={handleTest}>
<View className={styles.desc}>
<View className={styles.title}>
<Text></Text>
<Text className={styles.colorTip}> (</Text>
<Text className={styles.strongTip}>NTRP</Text>
<Text className={styles.colorTip}>) </Text>
<Text>?</Text>
</View>
<View className={styles.entry}>
<Text></Text>
<Image className={styles.entryIcon} src={ArrowRight} />
</View>
</View>
<View className={styles.avatarWrap}>
<View className={styles.avatar}>
<Image
className={styles.avatarUrl}
src={userInfo.avatar_url}
mode="aspectFill"
/>
</View>
{/* avatar side */}
<View className={styles.addonImage}>
<Image className={styles.docImage} src={DocCopy} mode="aspectFill" />
</View>
</View>
</View>
);
}
export default memo(NTRPTestEntryCard);
// export default NTRPTestEntryCard;