All files / src/constants setting.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 0/0
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192      19x         19x                                                                                           19x                                                           19x                                                                                                             19x                                                               19x             19x                          
// Setting Page Constants
 
// Page Header
export const SETTING_PAGE = {
  TITLE: 'Settings',
};
 
// Profile Section Constants
export const PROFILE_SECTION = {
  TITLE: 'Profile',
  FIELDS: {
    NAME: {
      LABEL: 'Name',
      PLACEHOLDER: 'Name',
      MIN_LENGTH: 2,
      MAX_LENGTH: 50,
    },
    EMAIL: {
      LABEL: 'Email',
      PLACEHOLDER: 'Email (cannot be changed)',
      ERROR_MESSAGE:
        'Email address cannot be changed for security reasons. Contact support if needed.',
    },
    PHONE: {
      LABEL: 'Phone',
      PLACEHOLDER: 'Phone',
      MIN_DIGITS: 10,
    },
    NATIONALITY: {
      LABEL: 'Nationality',
      PLACEHOLDER: 'Select nationality',
      OPTIONS: [
        { value: 'Lagos, Nigeria', label: 'Lagos, Nigeria' },
        { value: 'Abuja, Nigeria', label: 'Abuja, Nigeria' },
        { value: 'Kano, Nigeria', label: 'Kano, Nigeria' },
        { value: 'Other', label: 'Other' },
      ],
    },
    AVATAR: {
      NOTE: '*The uploaded image must be 500px wide and 500px long',
    },
  },
  BUTTONS: {
    SAVE: {
      TEXT: 'Save Changes',
      LOADING_TEXT: 'Saving...',
    },
  },
  MESSAGES: {
    UPDATING: '⚡ Updating profile...',
  },
};
 
// Password Section Constants
export const PASSWORD_SECTION = {
  TITLE: 'Password',
  FIELDS: {
    CURRENT_PASSWORD: {
      LABEL: 'Current Password',
      PLACEHOLDER: 'Current Password',
    },
    NEW_PASSWORD: {
      LABEL: 'New Password',
      PLACEHOLDER: 'New Password',
      MIN_LENGTH: 6,
      PATTERN_MESSAGE:
        'Password must contain at least one uppercase letter, one lowercase letter, and one number',
      PATTERN: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,
    },
    CONFIRM_PASSWORD: {
      LABEL: 'Confirm New Password',
      PLACEHOLDER: 'Confirm New Password',
      MATCH_ERROR: 'Passwords must match',
    },
  },
  BUTTONS: {
    UPDATE: {
      TEXT: 'Update Password',
      LOADING_TEXT: 'Updating...',
    },
  },
};
 
// Billing Section Constants
export const BILLING_SECTION = {
  TITLE: 'Billing Information',
  INFO_TEXT:
    'Fill in the bank Information into which you would want your transaction return and bonuses.',
  CARD_DISPLAY: {
    BANK_ACCOUNT_LABEL: 'Bank Account',
    BANK_ACCOUNT_VALUE: '**** **** **** 1234',
    EXPIRY_DATE_LABEL: 'Expiry Date',
    EXPIRY_DATE_VALUE: '12/25',
    CVV_LABEL: 'CVV',
    CVV_VALUE: '***',
  },
  FIELDS: {
    HOLDER_NAME: {
      LABEL: 'Card Holder Name',
      PLACEHOLDER: 'John Doe',
      MIN_LENGTH: 2,
    },
    CARD_NUMBER: {
      LABEL: 'Card Number',
      PLACEHOLDER: '1234 5678 9012 3456',
      MAX_LENGTH: 16,
      PATTERN: /^\d{16}$/,
      PATTERN_MESSAGE: 'Card number must be 16 digits',
    },
    EXPIRY_DATE: {
      LABEL: 'Expiry Date',
      PLACEHOLDER: 'MM/YY',
      MAX_LENGTH: 5,
      PATTERN: /^(0[1-9]|1[0-2])\/\d{2}$/,
      PATTERN_MESSAGE: 'Expiry date must be in MM/YY format',
    },
    CVV: {
      LABEL: 'CVV',
      PLACEHOLDER: '123',
      MAX_LENGTH: 4,
      PATTERN: /^\d{3,4}$/,
      PATTERN_MESSAGE: 'CVV must be 3 or 4 digits',
    },
  },
  BUTTONS: {
    EDIT: {
      TEXT: 'Edit Card Details',
    },
    CANCEL: {
      TEXT: 'Cancel',
    },
    SAVE: {
      TEXT: 'Save Changes',
      LOADING_TEXT: 'Saving...',
    },
  },
};
 
// Validation Schema Constants
export const VALIDATION = {
  PROFILE: {
    NAME_REQUIRED: 'Name is required',
    NAME_MIN_LENGTH: `Name must be at least ${PROFILE_SECTION.FIELDS.NAME.MIN_LENGTH} characters`,
    NAME_MAX_LENGTH: `Name must not exceed ${PROFILE_SECTION.FIELDS.NAME.MAX_LENGTH} characters`,
    EMAIL_REQUIRED: 'Email is required',
    EMAIL_INVALID: 'Please enter a valid email address',
    PHONE_REQUIRED: 'Phone is required',
    PHONE_INVALID: 'Please enter a valid phone number',
    PHONE_MIN_DIGITS: `Phone number must be at least ${PROFILE_SECTION.FIELDS.PHONE.MIN_DIGITS} digits`,
    NATIONALITY_REQUIRED: 'Nationality is required',
  },
  PASSWORD: {
    CURRENT_PASSWORD_REQUIRED: 'Current password is required',
    NEW_PASSWORD_REQUIRED: 'New password is required',
    NEW_PASSWORD_MIN_LENGTH: `Password must be at least ${PASSWORD_SECTION.FIELDS.NEW_PASSWORD.MIN_LENGTH} characters`,
    CONFIRM_PASSWORD_REQUIRED: 'Please confirm your new password',
    PASSWORDS_MUST_MATCH: PASSWORD_SECTION.FIELDS.CONFIRM_PASSWORD.MATCH_ERROR,
  },
  BILLING: {
    CARD_NUMBER_REQUIRED: 'Card number is required',
    CARD_NUMBER_INVALID: BILLING_SECTION.FIELDS.CARD_NUMBER.PATTERN_MESSAGE,
    EXPIRY_DATE_REQUIRED: 'Expiry date is required',
    EXPIRY_DATE_INVALID: BILLING_SECTION.FIELDS.EXPIRY_DATE.PATTERN_MESSAGE,
    CVV_REQUIRED: 'CVV is required',
    CVV_INVALID: BILLING_SECTION.FIELDS.CVV.PATTERN_MESSAGE,
    HOLDER_NAME_REQUIRED: 'Card holder name is required',
    HOLDER_NAME_MIN_LENGTH: `Name must be at least ${BILLING_SECTION.FIELDS.HOLDER_NAME.MIN_LENGTH} characters`,
  },
};
 
// API constants for services
export const API_ENDPOINTS = {
  PROFILE: '/profile',
  PROFILE_AVATAR: '/profile/avatar',
  PASSWORD_CHANGE: '/auth/change-password',
};
 
// Error messages for services
export const SERVICE_ERRORS = {
  COMMON: {
    UNAUTHENTICATED: 'User not authenticated',
  },
  PROFILE: {
    FETCH_FAILED: 'Failed to fetch profile',
    UPDATE_FAILED: 'Failed to update profile',
    AVATAR_UPLOAD_FAILED: 'Failed to upload avatar',
  },
  PASSWORD: {
    CHANGE_FAILED: 'Failed to change password',
  },
};