feat: first commit
This commit is contained in:
104
src/pages/material-profile/index.tsx
Normal file
104
src/pages/material-profile/index.tsx
Normal file
@ -0,0 +1,104 @@
|
||||
import { Button } from '@tarojs/components';
|
||||
import Taro, { useLoad, useShareAppMessage } from '@tarojs/taro';
|
||||
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
|
||||
import MaterialManagePopup from '@/components/material-manage-popup';
|
||||
import PageLoading from '@/components/page-loading';
|
||||
import SafeBottomPadding from '@/components/safe-bottom-padding';
|
||||
import { EventName } from '@/constants/app';
|
||||
import { CollectEventName } from '@/constants/event';
|
||||
import { MaterialStatus } from '@/constants/material';
|
||||
import ProfileViewFragment from '@/fragments/profile/view';
|
||||
import { MaterialProfile } from '@/types/material';
|
||||
import { collectEvent } from '@/utils/event';
|
||||
import { getMaterialShareMessage, requestProfileDetail, updateProfileStatus } from '@/utils/material';
|
||||
import { getCommonShareMessage } from '@/utils/share';
|
||||
import Toast from '@/utils/toast';
|
||||
|
||||
import './index.less';
|
||||
|
||||
const PREFIX = 'page-material-profile';
|
||||
|
||||
export default function MaterialProfilePage() {
|
||||
const [profile, setProfile] = useState<MaterialProfile | null>(null);
|
||||
const [showManage, setShowManage] = useState(false);
|
||||
|
||||
const handleClickManage = useCallback(() => setShowManage(true), []);
|
||||
|
||||
const handleChangeStatus = useCallback(
|
||||
async (newStatus: boolean) => {
|
||||
if (!profile || newStatus === profile.isOpen) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await updateProfileStatus({ resumeId: profile.id, userOpen: newStatus });
|
||||
profile.isOpen = newStatus;
|
||||
} catch (e) {
|
||||
Toast.error('保存失败请重试');
|
||||
collectEvent(CollectEventName.UPDATE_MATERIAL_FAILED, e);
|
||||
}
|
||||
},
|
||||
[profile]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
const callback = async () => {
|
||||
try {
|
||||
const profileDetail = await requestProfileDetail();
|
||||
setProfile(profileDetail);
|
||||
} catch (e) {
|
||||
Toast.error('加载失败');
|
||||
}
|
||||
};
|
||||
Taro.eventCenter.on(EventName.CREATE_PROFILE, callback);
|
||||
Taro.eventCenter.on(EventName.UPDATE_PROFILE, callback);
|
||||
return () => {
|
||||
Taro.eventCenter.off(EventName.CREATE_PROFILE, callback);
|
||||
Taro.eventCenter.off(EventName.UPDATE_PROFILE, callback);
|
||||
};
|
||||
}, []);
|
||||
|
||||
useLoad(async () => {
|
||||
try {
|
||||
const profileDetail = await requestProfileDetail();
|
||||
setProfile(profileDetail);
|
||||
} catch (e) {
|
||||
Toast.error('加载失败');
|
||||
}
|
||||
});
|
||||
|
||||
useShareAppMessage(async () => {
|
||||
const shareMessage = await getMaterialShareMessage(profile, false);
|
||||
return shareMessage || getCommonShareMessage(false);
|
||||
});
|
||||
|
||||
if (!profile) {
|
||||
return <PageLoading />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={PREFIX}>
|
||||
<ProfileViewFragment profile={profile} editable />
|
||||
<div className={`${PREFIX}__footer`}>
|
||||
<div className={`${PREFIX}__footer__buttons`}>
|
||||
<Button className={`${PREFIX}__footer__buttons__share`} openType="share">
|
||||
分享
|
||||
</Button>
|
||||
<Button className={`${PREFIX}__footer__buttons__manager`} onClick={handleClickManage}>
|
||||
管理
|
||||
</Button>
|
||||
</div>
|
||||
<SafeBottomPadding />
|
||||
</div>
|
||||
<div>
|
||||
<MaterialManagePopup
|
||||
open={showManage}
|
||||
onSave={handleChangeStatus}
|
||||
onClose={() => setShowManage(false)}
|
||||
value={profile.userOpen ? MaterialStatus.Open : MaterialStatus.Close}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user