From e5dac8b9d61b175b09d859643a94ea91ee6ef48d Mon Sep 17 00:00:00 2001 From: Max Nanis Date: Tue, 10 Jun 2025 02:51:37 +0700 Subject: Demographics page. userMarketplaceAnswer & userUpkAnswer redux stores. --- src/models/app.ts | 2 +- src/models/marketplaceAnswerSlice.ts | 24 -------------- src/models/upkAnswerSlice.ts | 23 -------------- src/models/userMarketplaceAnswerSlice.ts | 27 ++++++++++++++++ src/models/userUpkAnswerSlice.ts | 54 ++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 48 deletions(-) delete mode 100644 src/models/marketplaceAnswerSlice.ts delete mode 100644 src/models/upkAnswerSlice.ts create mode 100644 src/models/userMarketplaceAnswerSlice.ts create mode 100644 src/models/userUpkAnswerSlice.ts (limited to 'src/models') diff --git a/src/models/app.ts b/src/models/app.ts index 25b2412..27923db 100644 --- a/src/models/app.ts +++ b/src/models/app.ts @@ -1,4 +1,4 @@ -export type Page = 'offerwall' | 'questions' | 'cashout_methods'; +export type Page = 'offerwall' | 'questions' | 'demographics' | 'cashout_methods'; export interface App { targetId: string, diff --git a/src/models/marketplaceAnswerSlice.ts b/src/models/marketplaceAnswerSlice.ts deleted file mode 100644 index a1db7f0..0000000 --- a/src/models/marketplaceAnswerSlice.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {createSlice, PayloadAction} from "@reduxjs/toolkit"; -import {MarketProfileKnowledge} from "@/api"; - -const marketplaceInitialState: MarketProfileKnowledge[] = [] - - -const marketplaceAnswerSlice = createSlice({ - name: 'marketplaceAnswers', - marketplaceInitialState, - reducers: { - setMarketplaceAnswers(state, action: PayloadAction) { - // TODO: Does this need question_id + source uniqueness? - const existingIds = new Set(state.map(q => q.question_id)); - const newQuestions = action.payload.filter(q => !existingIds.has(q.question_id)); - state.push(...newQuestions); - } - } -}) - -export const { - setMarketplaceAnswers, -} = marketplaceAnswerSlice.actions; - -export default marketplaceAnswerSlice.reducer; diff --git a/src/models/upkAnswerSlice.ts b/src/models/upkAnswerSlice.ts deleted file mode 100644 index 7bd57f1..0000000 --- a/src/models/upkAnswerSlice.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {createSlice, PayloadAction} from '@reduxjs/toolkit' -import {UserProfileKnowledge} from "@/api"; - -const upkInitialState: UserProfileKnowledge[] = [] - -const upkAnswerSlice = createSlice({ - name: 'upkAnswers', - upkInitialState, - reducers: { - setUpkAnswers(state, action: PayloadAction) { - const existingIds = new Set(state.map(q => q.property_id)); - const newQuestions = action.payload.filter(q => !existingIds.has(q.property_id)); - state.push(...newQuestions); - } - } -}) - - -export const { - setUpkAnswers, -} = upkAnswerSlice.actions; - -export default upkAnswerSlice.reducer; \ No newline at end of file diff --git a/src/models/userMarketplaceAnswerSlice.ts b/src/models/userMarketplaceAnswerSlice.ts new file mode 100644 index 0000000..7cfe95b --- /dev/null +++ b/src/models/userMarketplaceAnswerSlice.ts @@ -0,0 +1,27 @@ +import {createSlice, PayloadAction} from "@reduxjs/toolkit"; +import {MarketProfileKnowledge} from "@/api"; +import type {RootState} from '@/store' + +const initialState: MarketProfileKnowledge[] = [] + + +const userMarketplaceAnswerSlice = createSlice({ + name: 'userMarketplaceAnswers', + initialState, + reducers: { + setMarketplaceAnswers(state, action: PayloadAction) { + // TODO: Does this need question_id + source uniqueness? + const existingIds = new Set(state.map(q => q.question_id)); + const newQuestions = action.payload.filter(q => !existingIds.has(q.question_id)); + state.push(...newQuestions); + } + } +}) + +export const { + setMarketplaceAnswers, +} = userMarketplaceAnswerSlice.actions; + +export default userMarketplaceAnswerSlice.reducer; + +export const selectUserMarketplaceAnswers = (state: RootState) => state.userMarketplaceAnswers \ No newline at end of file diff --git a/src/models/userUpkAnswerSlice.ts b/src/models/userUpkAnswerSlice.ts new file mode 100644 index 0000000..9cb0e9b --- /dev/null +++ b/src/models/userUpkAnswerSlice.ts @@ -0,0 +1,54 @@ +import {createSlice, PayloadAction} from '@reduxjs/toolkit' +import {UserProfileKnowledge} from "@/api"; +import type {RootState} from "@/store.ts"; + +const initialState: UserProfileKnowledge[] = [] + +const userUpkAnswerSlice = createSlice({ + name: 'upkAnswers', + initialState, + reducers: { + setUpkAnswers(state, action: PayloadAction) { + const existingIds = new Set(state.map(q => q.property_id)); + const newQuestions = action.payload.filter(q => !existingIds.has(q.property_id)); + state.push(...newQuestions); + } + } +}) + + +export const { + setUpkAnswers, +} = userUpkAnswerSlice.actions; + +export default userUpkAnswerSlice.reducer; + +export const selectUserUpkAnswers = (state: RootState) => state.userUpkAnswers + + +// educational_attainment +export const selectUserAge = (state: RootState): number | null => { + let upk_a = state.userUpkAnswers.find(a => a.property_label === "age_in_years") + if (upk_a) { + return Number(upk_a.answer[0].value) + } else { + return null + } +} +export const selectUserZip = (state: RootState): string | null => { + let upk_a = state.userUpkAnswers.find(a => a.property_label === "home_postal_code") + if (upk_a) { + return upk_a.answer[0].value + } else { + return null + } +} + +export const selectUserGender = (state: RootState): string | null => { + let upk_a = state.userUpkAnswers.find(a => a.property_label === "gender") + if (upk_a) { + return upk_a.answer[0].label + } else { + return null + } +} \ No newline at end of file -- cgit v1.2.3