import { useInfiniteLoading } from '@12333/hooks';
|
import {
|
EnumPagedListOrder,
|
EnumSettlementCycle,
|
EnumTaskRecommendStatus,
|
EnumTaskReleaseStatus,
|
EnumTaskStatus,
|
EnumUserGender,
|
} from '@12333/constants';
|
import _ from 'lodash';
|
import { trim } from '@12333/utils';
|
import { MaybeRef } from 'vue';
|
import * as taskServices from '@12333/services/apiV2/task';
|
|
export enum HomeOrderType {
|
Recommend = 'Recommend',
|
LastShelfTime = 'LastShelfTime',
|
}
|
|
type UseTaskListOptions = {
|
cityCode?: MaybeRef<string>;
|
enabled?: MaybeRef<boolean>;
|
};
|
|
export function useTaskList(options: UseTaskListOptions = {}) {
|
const { cityCode = '', enabled = true } = options;
|
|
const searchValue = ref('');
|
|
const queryMenuState = reactive({
|
genderLimit: '' as any as EnumUserGender,
|
settlementCycle: '' as any as EnumSettlementCycle,
|
benefitCodes: '',
|
status: '' as any as EnumTaskStatus,
|
releaseStatus: '' as any as EnumTaskReleaseStatus,
|
});
|
|
const queryState = reactive({
|
searchValueTrim: '',
|
orderType: HomeOrderType.Recommend,
|
});
|
|
const handleSearch = _.debounce(function () {
|
queryState.searchValueTrim = trim(searchValue.value);
|
}, 300);
|
|
const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
|
({ pageParam }) => {
|
let params: API.GetTaskInfosQuery = {
|
pageModel: {
|
rows: 20,
|
page: pageParam,
|
orderInput: [
|
queryState.orderType === HomeOrderType.Recommend
|
? { property: 'recommendStatus', order: EnumPagedListOrder.Desc }
|
: { property: 'createdTime', order: EnumPagedListOrder.Desc },
|
],
|
},
|
keywords: queryState.searchValueTrim,
|
cityCode: unref(cityCode),
|
settlementCycle: queryMenuState.settlementCycle,
|
benefitCodes: [queryMenuState.benefitCodes].filter(Boolean),
|
genderLimit: queryMenuState.genderLimit,
|
status: queryMenuState.status,
|
releaseStatus: queryMenuState.releaseStatus,
|
};
|
|
return taskServices.getTaskInfos(params, {
|
showLoading: false,
|
});
|
},
|
{
|
queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, cityCode],
|
enabled: enabled,
|
}
|
);
|
|
return {
|
searchValue,
|
queryState,
|
queryMenuState,
|
handleSearch,
|
infiniteLoadingProps,
|
invalidateQueries,
|
};
|
}
|