The Profile tab is the central hub for managing a patient’s account in SkinFirts. From here users can update personal information, control notification preferences, manage their password, review the privacy policy, and access help resources — all reachable through a consistent menu-driven navigation pattern.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/BhushanBadhe39/SkinFirts/llms.txt
Use this file to discover all available pages before exploring further.
ProfileScreen
ProfileScreen is the root of the profile section. It renders three main elements:
- Profile image — a circular avatar with an overlay edit button (
pencilicon viaRoundButtons) ProfileMenu— the scrollable list of navigation items and account actionsLogoutModal— a bottom-sheet modal that appears when the user initiates logout
Profile Menu Items
ProfileMenu reads the logged-in user’s name from Redux state (state.user.user) and displays it above the menu list. The Profile and Favorite items are rendered as standalone MenuItem components with inline onPress handlers, while the remaining four items come from a menuList array rendered in a FlatList. The Logout row is also rendered outside the FlatList with arrow='none' to suppress the trailing chevron.
| Menu Item | Icon | Navigates To |
|---|---|---|
| Profile | person-outline | EditProfile (passes user data as route param) |
| Favorite | heart-outline | Home → Doctors tab with selectedSort: 2 |
| Payment Method | wallet-outline | Payment |
| Privacy Policy | lock-closed-outline | PrivacyPage |
| Settings | settings-outline | Settings |
| Help | help-outline | Help |
| Logout | log-out-outline | Opens LogoutModal (no arrow rendered) |
Edit Profile
TheEditProfile screen allows patients to update their personal details. It receives the current user object through route.params.data and pre-populates a local formData state with the existing values.
Editable fields: Full Name, Email, Mobile Number, Date of Birth.
Tapping Update Profile calls editUserDetails, which sends a PATCH request to /users/:id, then updates both AsyncStorage and the Redux store on success before navigating back.
EditProfile calls editUserDetails(data.id, formData, dispatch) and, if it returns true, calls navigation.goBack().
Settings
TheSettings screen presents a short FlatList of account-level actions, each rendered as a MenuItem row with iconBgc={colors.secondary}:
| Setting Item | Icon | Navigates To |
|---|---|---|
| Notification Settings | bulb-outline | NotificationSetting |
| Password Manager | key-outline | PasswordManager |
| Delete Account | person-outline | Payment |
Notification Settings
TheNotificationSetting screen provides toggle switches for eight individual notification categories. Each toggle is managed by a shared settings state object; toggling any switch flips its corresponding boolean value without affecting the others. All toggles start as false.
| Toggle | State Key |
|---|---|
| General Notification | generalNotification |
| Sound | sound |
| Sound Call | soundCall |
| Vibrate | vibrate |
| Special Offers | specialOffers |
| Payments | payments |
| Promo and Discount | promoDiscount |
| Cashback | cashback |
CustomSwitch component and is rendered inside a FlatList.
Password Manager
ThePasswordManager screen presents a straightforward password-change form with three PasswordBox fields:
- Current Password
- New Password
- Confirm Password
Privacy Page
ThePrivacyPage screen (PrivacyPage route) displays a privacy policy stub and a Terms & Conditions sub-section with four numbered clauses. The last-updated date shown at the top is 14/08/2024. Both the policy body and the numbered clauses are filled with placeholder lorem ipsum text in the current implementation — the content is static text rendered via Text components inside a padded View.
The privacy policy and Terms & Conditions text in
PrivacyPage.jsx are lorem ipsum placeholder content. Real policy language has not yet been written into the app.Help Center
TheHelpCenter screen has a primary-coloured header that shows a “How Can We Help You?” heading and a search bar ('Search...' placeholder). Below the header, two tab buttons — FAQ and Contact Us — toggle the active view via a primaryState boolean.
- FAQ tab — renders the
Faqcomponent, which provides three topic filter buttons (Popular Topic, General, Services) and an accordion list of five questions/answers powered byaccordion-collapse-react-native. Each accordion item usesCollapse,CollapseHeader, andCollapseBodywith achevron-down-outlineindicator. The questions and answers inFaq.jsxare currently lorem ipsum placeholder text. - Contact Us tab — renders the
ContactUscomponent, which lists five contact channels asMenuItemrows using achevron-down-outlinearrow (not the default forward chevron):
| Channel | Icon |
|---|---|
| Customer Service | headset-outline |
| Website | globe-outline |
logo-whatsapp | |
logo-facebook | |
logo-instagram |
Logout Flow
Tap Logout in ProfileMenu
The Logout
MenuItem in ProfileMenu has no navigation redirect. Instead it calls the onLogout prop, which sets logoutVisible to true in ProfileScreen state, causing the LogoutModal bottom sheet to slide up.Confirm in LogoutModal
LogoutModal is a transparent Modal with animationType='slide'. It presents a title “Logout”, the body text “Are you sure you want to logout?”, and two buttons — Cancel (dismisses the modal, styled with colors.shade background) and Yes, Logout (calls onConfirm). The onConfirm handler in ProfileScreen is handleLogout.logoutUser clears session data
handleLogout calls logoutUser(dispatch), which removes the persisted user record from AsyncStorage and dispatches clearUser() to reset the Redux user slice.MenuItem Component Pattern
MenuItem is the foundational building block used throughout the Profile section — in ProfileMenu, Settings, ContactUs, and anywhere a tappable row with an icon, label, and optional arrow is needed.