feat(challenges): 新增 ChallengeProgressCard 组件并接入喝水挑战进度上报
- 抽离进度卡片为独立组件,支持主题色自定义与复用 - 挑战列表页顶部展示进行中的挑战进度 - 喝水记录自动上报至关联的水挑战 - 移除旧版 challengeSlice 与冗余进度样式 - 统一使用 value 字段上报进度,兼容多类型挑战
This commit is contained in:
@@ -117,11 +117,11 @@ export const leaveChallenge = createAsyncThunk<{ id: string }, string, { rejectV
|
||||
|
||||
export const reportChallengeProgress = createAsyncThunk<
|
||||
{ id: string; progress: ChallengeProgress },
|
||||
{ id: string; increment?: number },
|
||||
{ id: string; value?: number },
|
||||
{ rejectValue: string }
|
||||
>('challenges/reportProgress', async ({ id, increment }, { rejectWithValue }) => {
|
||||
>('challenges/reportProgress', async ({ id, value }, { rejectWithValue }) => {
|
||||
try {
|
||||
const progress = await reportChallengeProgressApi(id, increment);
|
||||
const progress = await reportChallengeProgressApi(id, value);
|
||||
return { id, progress };
|
||||
} catch (error) {
|
||||
return rejectWithValue(toErrorMessage(error));
|
||||
@@ -311,6 +311,7 @@ export type ChallengeCardViewModel = {
|
||||
participantsLabel: string;
|
||||
status: ChallengeStatus;
|
||||
isJoined: boolean;
|
||||
endAt?: string;
|
||||
periodLabel?: string;
|
||||
durationLabel: string;
|
||||
requirementLabel: string;
|
||||
@@ -330,6 +331,7 @@ export const selectChallengeCards = createSelector([selectChallengeList], (chall
|
||||
participantsLabel: `${formatNumberWithSeparator(challenge.participantsCount)} 人参与`,
|
||||
status: challenge.status,
|
||||
isJoined: challenge.isJoined,
|
||||
endAt: challenge.endAt,
|
||||
periodLabel: challenge.periodLabel,
|
||||
durationLabel: challenge.durationLabel,
|
||||
requirementLabel: challenge.requirementLabel,
|
||||
|
||||
Reference in New Issue
Block a user