import { ReactNode, CSSProperties, HTMLAttributes } from 'react';
import { MissionApiService, MissionItem } from '@lofter-mission/core';
// 通用样式Props类型
export interface BaseStyleProps {
className?: string;
style?: CSSProperties;
}
// 活动信息类型
export interface ActivityInfo {
activityCode: string;
name?: string;
status?: string;
[key: string]: any;
}
// 任务对象类型 - 现在使用 MissionItem 类而不是普通接口
export type Mission = MissionItem & {
tabName?: string; // 从tab信息中添加的标签名
};
// 用户积分信息类型
export interface UserInfo {
points?: number;
level?: number;
nickname?: string;
[key: string]: any;
}
// 奖励item类型(引用core包的PrizeItem)
export type PrizeItem = import('@lofter-mission/core').PrizeItem;
// 奖励活动类型(引用core包的AwardActivity)
export type AwardActivity = import('@lofter-mission/core').AwardActivity;
// 奖励item组件Props
export interface AwardItemViewProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
prize: PrizeItem;
onRedeem?: (prize: PrizeItem, points: number) => void;
cardClassName?: string;
imageClassName?: string;
titleClassName?: string;
buttonClassName?: string;
maxedOutText?: string;
redeemText?: string;
customRedeem?: (
prize: PrizeItem,
callback: (
otherParams?: any
) => Promise<{
status: boolean,
points?: number
}>
) => Promise;
}
// 奖励列表组件Props
export interface AwardListViewProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
onPrizeRedeem?: (prize: PrizeItem, points?: number) => void;
callbackPoints?: (points?: number) => void;
customRedeem?: (
prize: PrizeItem,
callback: (
otherParams?: any
) => Promise<{
status: boolean,
points?: number
}>
) => Promise;
loadingClassName?: string;
errorClassName?: string;
emptyClassName?: string;
itemsClassName?: string;
loadingText?: string;
errorText?: string;
emptyText?: string;
}
// 组件Props类型定义
export interface ActivityContainerProps extends BaseStyleProps, Omit, 'className' | 'style'> {
activityCode: string;
children?: ReactNode;
presetMissionApiService?: MissionApiService;
presetActivityInfo?: any; // 预设的活动信息,如果有则不发起请求
}
export interface ActivityUserProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
loadingClassName?: string;
errorClassName?: string;
noDataClassName?: string;
loadingText?: string;
errorText?: string;
noDataText?: string;
pointsText?: string;
}
// 任务执行上下文类型(引用core包的MissionExecutionContext)
export type MissionExecutionContext = import('@lofter-mission/core').MissionExecutionContext;
// 自定义任务处理函数类型
export type CustomTaskHandler = (
context: MissionExecutionContext,
showMissionType: number,
mission: Mission
) => Promise<{ needRefresh?: boolean; [key: string]: any } | null>;
export interface MissionItemViewProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
mission: Mission;
onProgressUpdate?: (mission: Mission, points?: number) => void;
onCustomShare?: (mission: Mission) => void;
/** 自定义任务处理函数,用于处理类型 29(通用任务)和 30(购买商品)等需要外部自定义逻辑的任务 */
onCustomTask?: CustomTaskHandler;
cardClassName?: string;
titleClassName?: string;
rewardClassName?: string;
actionClassName?: string;
buttonClassName?: string;
completedText?: string;
defaultActionText?: string;
}
export interface MissionListViewProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
tabName?: string;
onMissionProgressUpdate?: (mission: Mission, points?: number) => void;
onCustomShare?: (mission: Mission) => void;
/** 自定义任务处理函数,用于处理类型 29(通用任务)和 30(购买商品)等需要外部自定义逻辑的任务 */
onCustomTask?: CustomTaskHandler;
loadingClassName?: string;
errorClassName?: string;
emptyClassName?: string;
itemsClassName?: string;
loadingText?: string;
errorText?: string;
emptyText?: string;
isShowStepMission?: boolean;
}
export interface MissionPopupViewProps extends BaseStyleProps {
activityInfo?: ActivityInfo;
visible?: boolean;
onClose?: () => void;
onMissionProgressUpdate?: (mission: Mission) => void;
overlayClassName?: string;
popupClassName?: string;
headerClassName?: string;
contentClassName?: string;
closeButtonClassName?: string;
title?: string;
loadingText?: string;
errorText?: string;
retryText?: string;
}