feat: 代招代发
This commit is contained in:
56
src/hooks/use-publish-job.ts
Normal file
56
src/hooks/use-publish-job.ts
Normal file
@ -0,0 +1,56 @@
|
||||
import Taro from '@tarojs/taro';
|
||||
|
||||
import { Dispatch, SetStateAction, useCallback, useState } from 'react';
|
||||
|
||||
import { EventName, PageUrl } from '@/constants/app';
|
||||
import { CertificationStatusType } from '@/constants/company';
|
||||
import { CollectEventName } from '@/constants/event';
|
||||
import useUserInfo from '@/hooks/use-user-info';
|
||||
import { RESPONSE_ERROR_CODE } from '@/http/constant';
|
||||
import { HttpError } from '@/http/error';
|
||||
import store from '@/store';
|
||||
import { cacheJobId } from '@/store/actions';
|
||||
import { collectEvent } from '@/utils/event';
|
||||
import { postPublishJob } from '@/utils/job';
|
||||
import { navigateTo } from '@/utils/route';
|
||||
import Toast from '@/utils/toast';
|
||||
|
||||
export const usePublishJob = (jobId: string): [boolean, Dispatch<SetStateAction<boolean>>, () => Promise<void>] => {
|
||||
const userInfo = useUserInfo();
|
||||
const [showBuy, setShowBuy] = useState(false);
|
||||
|
||||
const handlePublishJob = useCallback(async () => {
|
||||
try {
|
||||
if (userInfo.bossAuthStatus !== CertificationStatusType.Success) {
|
||||
store.dispatch(cacheJobId(jobId));
|
||||
navigateTo(PageUrl.CertificationStart);
|
||||
return;
|
||||
}
|
||||
Taro.showLoading();
|
||||
await postPublishJob(jobId);
|
||||
Taro.eventCenter.trigger(EventName.COMPANY_JOB_PUBLISH_CHANGED);
|
||||
setShowBuy(false);
|
||||
Toast.success('发布成功');
|
||||
Taro.hideLoading();
|
||||
} catch (error) {
|
||||
Taro.hideLoading();
|
||||
const e = error as HttpError;
|
||||
const errorCode = e.errorCode;
|
||||
const errorMsg = e.info?.() || e.message;
|
||||
collectEvent(CollectEventName.PUBLISH_OPEN_JOB_FAILED, { jobId, error: e.info?.() || e.message });
|
||||
if (errorCode === RESPONSE_ERROR_CODE.INSUFFICIENT_FREE_BALANCE) {
|
||||
setShowBuy(true);
|
||||
} else if (errorCode === RESPONSE_ERROR_CODE.INSUFFICIENT_BALANCE) {
|
||||
Toast.info('您购买的产品已耗尽使用次数');
|
||||
setShowBuy(true);
|
||||
} else if (errorCode === RESPONSE_ERROR_CODE.BOSS_VIP_EXPIRED) {
|
||||
Toast.info('该通告已到期,请创建新通告', 3000);
|
||||
} else {
|
||||
Toast.error(errorMsg || '发布失败请重试', 3000);
|
||||
}
|
||||
console.error(e);
|
||||
}
|
||||
}, [jobId, userInfo.bossAuthStatus]);
|
||||
|
||||
return [showBuy, setShowBuy, handlePublishJob];
|
||||
};
|
||||
Reference in New Issue
Block a user