diff --git a/03_source/mobile/src/data/dataApi.ts b/03_source/mobile/src/data/dataApi.ts index 9ebb590..d7549cb 100644 --- a/03_source/mobile/src/data/dataApi.ts +++ b/03_source/mobile/src/data/dataApi.ts @@ -16,6 +16,8 @@ const USERNAME = 'username'; const ACCESS_TOKEN = 'a_token'; const ACTIVE_SESSION = 'a_session'; +const PARTY_USER_META = 'party_user_meta'; + export const getConfData = async () => { console.log({ t: constants.API_ENDPOINT }); @@ -89,14 +91,21 @@ export const getUserData = async () => { Storage.get({ key: HAS_LOGGED_IN }), Storage.get({ key: HAS_SEEN_TUTORIAL }), Storage.get({ key: USERNAME }), + Storage.get({ key: PARTY_USER_META }), ]); const isLoggedin = (await response[0].value) === 'true'; const hasSeenTutorial = (await response[1].value) === 'true'; const username = (await response[2].value) || undefined; + + let result = (await response[3].value) || undefined; + const meta = result ? JSON.parse(result) : undefined; + const data = { isLoggedin, hasSeenTutorial, username, + + meta, }; return data; }; @@ -120,6 +129,14 @@ export const setUsernameData = async (username?: string) => { } }; +export const setPartyUserMetaData = async (party_user?: Record) => { + if (!party_user) { + await Storage.remove({ key: PARTY_USER_META }); + } else { + await Storage.set({ key: PARTY_USER_META, value: JSON.stringify(party_user) }); + } +}; + export const setAccessTokenData = async (accessToken?: string) => { if (!accessToken) { await Storage.remove({ key: ACCESS_TOKEN }); diff --git a/03_source/mobile/src/data/user/user.actions.ts b/03_source/mobile/src/data/user/user.actions.ts index fd303fb..37bb6ba 100644 --- a/03_source/mobile/src/data/user/user.actions.ts +++ b/03_source/mobile/src/data/user/user.actions.ts @@ -6,6 +6,7 @@ import { setAccessTokenData, getAccessTokenData, setActiveSessionData, + setPartyUserMetaData, } from '../dataApi'; import { ActionType } from '../../util/types'; import { UserState } from './user.state'; @@ -34,6 +35,14 @@ export const setData = (data: Partial) => data, }) as const; +export const setPartyUserMeta = async (partyUserMeta: Record) => { + await setPartyUserMetaData(partyUserMeta); + return { + type: 'set-party-user-meta', + partyUserMeta, + } as const; +}; + export const logoutUser = () => async (dispatch: React.Dispatch) => { // await setIsLoggedInData(false); @@ -124,6 +133,7 @@ export const setDarkMode = (darkMode: boolean) => export type UserActions = | ActionType | ActionType + | ActionType | ActionType | ActionType | ActionType diff --git a/03_source/mobile/src/data/user/user.reducer.ts b/03_source/mobile/src/data/user/user.reducer.ts index acf61ba..dd7c13f 100644 --- a/03_source/mobile/src/data/user/user.reducer.ts +++ b/03_source/mobile/src/data/user/user.reducer.ts @@ -19,6 +19,9 @@ export function userReducer(state: UserState, action: UserActions): UserState { return { ...state, token: action.token }; case 'check-user-session': return { ...state, isSessionValid: action.sessionValid }; + case 'set-party-user-meta': + return { ...state, meta: action.partyUserMeta }; + default: return { ...state }; } diff --git a/03_source/mobile/src/data/user/user.state.ts b/03_source/mobile/src/data/user/user.state.ts index a1109f3..0cdc3b4 100644 --- a/03_source/mobile/src/data/user/user.state.ts +++ b/03_source/mobile/src/data/user/user.state.ts @@ -9,14 +9,16 @@ export interface UserState { token?: string; // - name?: string; - email?: string; - avatarUrl?: string; - phoneNumber?: string; - company?: string; - role?: string; - rank?: string; - isVerified?: Boolean; + meta?: { + name?: string; + email?: string; + avatarUrl?: string; + phoneNumber?: string; + company?: string; + role?: string; + rank?: string; + isVerified?: Boolean; + }; // accessToken?: string; diff --git a/03_source/mobile/src/pages/MyProfile/index.tsx b/03_source/mobile/src/pages/MyProfile/index.tsx index f71236b..96d5ef6 100644 --- a/03_source/mobile/src/pages/MyProfile/index.tsx +++ b/03_source/mobile/src/pages/MyProfile/index.tsx @@ -151,7 +151,7 @@ const MyProfilePage: React.FC = ({ Silhouette of a person's head
@@ -163,11 +163,11 @@ const MyProfilePage: React.FC = ({ }} >
- {partyUserState.name} + {partyUserState.meta?.name}
-
{partyUserState.rank}
+
{partyUserState.meta?.rank}
- {partyUserState.isVerified ? 'verified' : 'no'} + {partyUserState.meta?.isVerified ? 'verified' : 'no'}
diff --git a/03_source/mobile/src/pages/PartyUserLogin/index.tsx b/03_source/mobile/src/pages/PartyUserLogin/index.tsx index 368d1f5..51cca66 100644 --- a/03_source/mobile/src/pages/PartyUserLogin/index.tsx +++ b/03_source/mobile/src/pages/PartyUserLogin/index.tsx @@ -19,7 +19,12 @@ import { IonToast, } from '@ionic/react'; import './Login.scss'; -import { setIsLoggedIn, setUsername, setData } from '../../data/user/user.actions'; +import { + setIsLoggedIn, + setUsername, + setData, + setPartyUserMeta, +} from '../../data/user/user.actions'; import { connect } from '../../data/connect'; import { RouteComponentProps } from 'react-router'; import { chevronBackOutline } from 'ionicons/icons'; @@ -39,6 +44,7 @@ interface DispatchProps { setIsLoggedIn: typeof setIsLoggedIn; setUsername: typeof setUsername; setData: typeof setData; + setPartyUserMeta: typeof setPartyUserMeta; } interface LoginProps extends OwnProps, DispatchProps {} @@ -48,6 +54,7 @@ const Login: React.FC = ({ history, setUsername: setUsernameAction, setData, + setPartyUserMeta, }) => { const [username, setUsername] = useState('demo@minimals.cc'); const [email, setEmail] = useState('demo@minimals.cc'); @@ -76,7 +83,8 @@ const Login: React.FC = ({ if (status == 200) { // if username and password ok - setData({ isLoggedin: true, accessToken, ...user }); + setData({ isLoggedin: true, accessToken }); + setPartyUserMeta(user); await setIsLoggedIn(true); await setUsernameAction(username); @@ -192,6 +200,7 @@ export default connect({ setIsLoggedIn, setUsername, setData, + setPartyUserMeta, }, mapStateToProps: (state) => ({ partyUserState: selectors.getPartyUserState(state),