57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
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];
|
|
};
|