{"version":3,"file":"static/js/main.e92ef7fe.js","mappings":"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E10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,EAAE,oDAAoDw2C,KAAK,WACjE10C,EAAAA,GAAAA,KAACg1C,GAAAA,KAAI,CAAC92C,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","sources":["src/i18n/languageConfig.ts","src/i18n/languageDetector.ts","src/i18n/index.ts","src/dates-setup/index.ts","src/hooks/react-query/useAnnouncements.ts","src/hooks/react-query/useAvailablePractices.ts","src/providers/NotificationProvider/Context.tsx","src/providers/NotificationProvider/index.web.tsx","src/providers/ClientProvider.tsx","src/utils/createGenericContext.ts","src/hooks/react-query/usePracticeConfiguration.ts","src/hooks/react-query/usePrescriptions.ts","src/hooks/react-query/useReminders.ts","src/scenes/Appointments/helper.ts","src/scenes/Appointments/AppointmentsRoot/hooks/useAppointments.ts","src/scenes/Appointments/AppointmentsRoot/hooks/helpers.ts","src/hooks/react-query/useAbility.ts","src/hooks/react-query/usePractice.ts","src/hooks/react-query/usePracticeInfo/index.ts","src/hooks/react-query/useRequestSetting.ts","src/providers/AuthProvider/token/isTokenValid.ts","src/providers/AuthProvider/token/shouldRefreshToken.ts","src/hooks/useStorage.ts","src/hooks/useAppState.ts","src/providers/AuthProvider/helper.ts","src/hooks/react-query/usePracticeTheme.ts","src/utils/fetchRetry.ts","src/utils/resolveSendGridLink/index.ts","src/hooks/useDeeplink/errorHandlers.ts","src/hooks/useDeeplink/index.ts","src/providers/AppThemeProvider.tsx","src/providers/NotificationPromptProvider/defaultContext.tsx","src/providers/NotificationPromptProvider/index.web.tsx","src/hooks/useBiometrics.ts","src/providers/AuthProvider/index.tsx","src/theme/globalStyles.ts","src/utils/validators/email.ts","src/module/TourGuide/model.ts","src/hooks/useBoolean.ts","src/hooks/useHoverEffect.ts","src/hooks/useInteractionFocusEffect.ts","src/providers/LoyaltyTransactionProvider/AwardQueue.ts","src/constants/loyaltyTransactionTypes.ts","src/providers/LoyaltyTransactionProvider/helpers.ts","src/providers/LoyaltyTransactionProvider/index.tsx","src/module/TourGuide/TourGuideMaster.tsx","src/hooks/react-query/usePatients.ts","src/hooks/react-query/usePatient.ts","src/api/rewards/index.ts","src/hooks/react-query/useReward.ts","src/utils/rateUs.ts","src/hooks/react-query/useAppointmentConfirmation.ts","src/utils/pickImage.ts","src/utils/takeImage.ts","src/hooks/react-query/useUploadProfilePhoto.ts","src/hooks/react-query/todos/useMutateTodos.ts","src/hooks/react-query/todos/useTodos.ts","src/utils/utmTracking/constants.ts","src/utils/utmTracking/tokens.ts","src/utils/utmTracking/event.ts","src/providers/GoogleTagManager/helper.web.tsx","src/providers/GoogleTagManager/index.web.tsx","src/hooks/useTrackVisit.ts","src/utils/utmTracking/visit.ts","src/hooks/useFlushEvents/index.native.ts","src/hooks/useFlushEvents/index.ts","src/components/Text.tsx","src/components/kit/TextInput.tsx","src/components/kit/Tooltip.tsx","src/components/kit/DatePicker.tsx","src/components/kit/TimePicker.tsx","src/components/kit/DropDown.tsx","src/components/kit/HoverCard.tsx","src/components/kit/HoverButton.tsx","src/components/kit/AnimatedFAB.tsx","src/components/kit/Slider/Dot.tsx","src/components/kit/Slider/Pagination.tsx","src/components/kit/Slider/FixCellOffsetOnWeb.tsx","src/components/kit/Slider/BulletText.tsx","src/components/kit/Slider/Slide.tsx","src/components/kit/Slider/index.tsx","src/components/Shimmer.tsx","src/components/common.tsx","src/components/Alert.tsx","src/components/DiscardChangesModal.tsx","src/components/FocusAwareStatusBar.tsx","src/components/AlertBadge.tsx","src/hooks/useKeyboardStatus.ts","src/components/BottomButton.tsx","src/components/CPrimaryButton/style.ts","src/components/CPrimaryButton/index.tsx","src/components/ModalDrawer.tsx","src/components/SecureTextInput/index.tsx","src/components/HeroBottom.tsx","src/components/TwoColorView.tsx","src/components/MiniHeroIcon.tsx","src/module/TourGuide/component/helper.ts","src/components/ErrorBoundary.tsx","src/providers/ScrollableRefProvider.tsx","src/module/TourGuide/component/useUpdateScrollPosition.ts","src/module/TourGuide/component/_GuideElement.tsx","src/module/TourGuide/component/_SliderElement.tsx","src/module/TourGuide/TourGuideFactory.tsx","src/scenes/Profile/ProfileHero.tsx","src/scenes/Profile/tour.tsx","src/scenes/Profile/navLocations.tsx","src/scenes/Profile/style.ts","src/utils/extractImageName/index.ts","src/utils/expoStorage/index.ts","src/utils/checkImageCache.ts","src/components/Avatar.tsx","src/components/ClientAvatar.tsx","src/scenes/Profile/index.tsx","src/scenes/ProfileClientPracticeConfiguration/style.tsx","src/utils/draftSms.ts","src/scenes/ProfileClientPracticeConfiguration/ConfigStructure.ts","src/scenes/ProfileAppSettings/style.ts","src/scenes/ProfileClientPracticeConfiguration/index.tsx","src/components/CLink/index.tsx","src/scenes/ProfileUserInfo/style.ts","src/utils/openEmailToAlly.ts","src/scenes/ProfileUserInfo/CContactAlly.tsx","src/scenes/ProfileUserInfo/CHelperText.tsx","src/scenes/ProfileUserInfo/CUserInfo.tsx","src/utils/formatPhoneNumber/index.ts","src/scenes/ProfileUserInfo/tour.ts","src/scenes/ProfileUserInfo/index.tsx","src/interfaces/api/AvailablePractices.ts","src/scenes/Landing/helpers/validation.ts","src/scenes/ChangePassword/validation.ts","src/components/PasswordInput/index.tsx","src/scenes/ChangePassword/ChangePassword.tsx","src/scenes/ProfileAppSettings/CChangeLanguage.tsx","src/scenes/ProfileAppSettings/ManageAccount/DeleteAccountConfirmationModal.tsx","src/scenes/ProfileAppSettings/ManageAccount/ManageAccountSection.tsx","src/providers/BiometricsPromptProvider/defaultContext.tsx","src/providers/BiometricsPromptProvider/index.web.tsx","src/scenes/ProfileAppSettings/BiometricAuth.tsx","src/scenes/ProfileAppSettings/index.tsx","src/scenes/ProfileAppSettings/ManageAccount/useControlConfirmationModal.ts","src/scenes/Home/components/Banner.tsx","src/scenes/Home/components/HomeHero.tsx","src/scenes/Home/tour.tsx","src/scenes/Home/components/AnnouncementSlide.tsx","src/scenes/Home/components/AnnouncementsCarousel.tsx","src/scenes/Home/components/HomeHeader.tsx","src/components/kit/ABIcons/AlarmBell.tsx","src/components/kit/ABIcons/AlarmClock.tsx","src/components/kit/ABIcons/AlertCircle.tsx","src/components/kit/ABIcons/Calendar.tsx","src/components/kit/ABIcons/House.tsx","src/components/kit/ABIcons/Information.tsx","src/components/kit/ABIcons/Paw.tsx","src/components/kit/ABIcons/Pill.tsx","src/components/kit/ABIcons/Prescriptions.tsx","src/components/kit/ABIcons/Trophy.tsx","src/scenes/Home/components/QuickAccess.tsx","src/scenes/Home/generateDisplayData.tsx","src/components/Icons/Animal/Bird.tsx","src/components/Icons/Animal/Bunny.tsx","src/components/Icons/Animal/Cat.tsx","src/components/Icons/Animal/Cow.tsx","src/components/Icons/Animal/Dog.tsx","src/components/Icons/Animal/Horse.tsx","src/components/Icons/Animal/Rodent.tsx","src/components/Icons/Animal/Gecko.tsx","src/components/Icons/Animal/index.tsx","src/components/PatientAvatar.tsx","src/scenes/Home/components/ItemDetail.tsx","src/scenes/Home/components/shared.tsx","src/scenes/Home/components/HeaderToggle.tsx","src/scenes/Home/components/RemindersCard.tsx","src/components/RefillModal.tsx","src/hooks/react-query/usePaginatedPatients.ts","src/scenes/Home/components/PrescriptionsCard.tsx","src/scenes/Home/components/TodoCardItem.tsx","src/scenes/Home/components/ToDosCard.tsx","src/scenes/Appointments/AppointmentsRoot/components/NextAppointmentCard/AppointmentCardNone.tsx","src/scenes/Home/components/AppointmentsCard.tsx","src/scenes/Home/components/HelpCenterCard.tsx","src/scenes/PatientList/PawHero.tsx","src/scenes/Home/components/WhatsNew.tsx","src/hooks/react-query/useLifelearnArticles.ts","src/scenes/Home/components/LifelearnSlide.tsx","src/scenes/Home/components/LifelearnCard.tsx","src/scenes/Home/index.tsx","src/scenes/HelpCenter/style.ts","src/scenes/HelpCenter/components/HeaderToggle.tsx","src/scenes/HelpCenter/components/FaqCard.tsx","src/scenes/HelpCenter/components/HelpCenterCard.tsx","src/scenes/HelpCenter/components/Header.tsx","src/scenes/HelpCenter/components/TourGuideCard.tsx","src/scenes/HelpCenter/shared.ts","src/scenes/HelpCenter/components/useSearchResults.tsx","src/scenes/HelpCenter/index.tsx","src/scenes/ArticleHub/ArticleCard.tsx","src/scenes/ArticleHub/useSearchResults.tsx","src/scenes/ArticleHub/index.tsx","src/scenes/Article/shared.ts","src/scenes/Article/ActionButtons.tsx","src/hooks/useGoBack.ts","src/scenes/PatientProfile/style.ts","src/scenes/Article/index.tsx","src/routes/stacks/useDefaultModalScreenOptions.tsx","src/routes/stacks/HomeStackNavigator/index.tsx","src/providers/SelectedPatientProvider.tsx","src/scenes/Appointments/AppointmentsRoot/components/shared.tsx","src/scenes/Appointments/AppointmentsRoot/components/AppointmentListItem.tsx","src/components/PatientSelector.tsx","src/scenes/Appointments/AppointmentsRoot/components/AppointmentStatusCta.tsx","src/scenes/Appointments/AppointmentsRoot/components/NextAppointmentCard/AppointmentCardNext.tsx","src/scenes/Appointments/AppointmentsRoot/components/NextAppointmentCard/index.tsx","src/scenes/Appointments/AppointmentsRoot/components/NextAppointmentCard/AppointmentCardLoading.tsx","src/scenes/Appointments/AppointmentsRoot/components/RequestAppointmentCta.tsx","src/scenes/Appointments/AppointmentsRoot/components/CalendarHero.tsx","src/scenes/Appointments/tour.tsx","src/scenes/Appointments/AppointmentsRoot/components/AppointmentListItemLoading.tsx","src/scenes/Appointments/AppointmentsRoot/components/AllAppointmentsLoading.tsx","src/scenes/Appointments/AppointmentsRoot/components/HeroSection.tsx","src/scenes/Appointments/AppointmentsRoot/components/AppointmentsList.tsx","src/scenes/Appointments/AppointmentsRoot/index.tsx","src/scenes/Appointments/AppointmentDetails/styled.tsx","src/scenes/Appointments/AppointmentDetails/components/LoadingDetails.tsx","src/scenes/Appointments/AppointmentDetails/hooks/useAppointment.ts","src/scenes/Appointments/AppointmentDetails/tour.ts","src/scenes/Appointments/AppointmentDetails/components/GuideElementWrapper.tsx","src/scenes/Appointments/AppointmentDetails/components/Details.tsx","src/scenes/Appointments/AppointmentDetails/components/AddToCalendar.tsx","src/scenes/Appointments/AppointmentDetails/index.tsx","src/routes/stacks/useDefaultStackOptions.tsx","src/routes/stacks/AppointmentStackNavigator/index.tsx","src/components/AnimatedNumber/index.tsx","src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/style.ts","src/scenes/LoyaltyRewards/style.tsx","src/scenes/LoyaltyActivity/style.tsx","src/scenes/LoyaltyActivity/ActivityItem.tsx","src/routes/stacks/LoyaltyTabNavigator/components/TrophyHero.tsx","src/routes/stacks/LoyaltyTabNavigator/components/AwardHero.tsx","src/routes/stacks/LoyaltyTabNavigator/tour.tsx","src/scenes/LoyaltyActivity/index.tsx","src/scenes/LoyaltyRewards/components/ExpiringCareCoinItem.tsx","src/scenes/LoyaltyRewards/components/ContinuitySegment.tsx","src/scenes/LoyaltyRewards/components/OfferCard.tsx","src/scenes/LoyaltyRewards/components/RewardRow.tsx","src/scenes/LoyaltyRewards/index.tsx","src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/TabIndicator.tsx","src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/GuideWrapper.tsx","src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/index.tsx","src/routes/stacks/LoyaltyTabNavigator/index.tsx","src/scenes/PatientList/PatientCard.tsx","src/scenes/PatientList/PatientIconMessage.tsx","src/scenes/PatientList/tour.tsx","src/scenes/PatientList/PatientListContent.tsx","src/scenes/PatientList/PatientStatusSelector.tsx","src/scenes/PatientList/index.tsx","src/routes/stacks/PatientStackNavigator/index.tsx","src/hooks/react-query/todos/usePaginatedTodos.ts","src/scenes/ToDos/ToDoList/components/CheckCircleHero.tsx","src/scenes/ToDos/ToDoList/components/tour.tsx","src/scenes/ToDos/ToDoList/components/DeleteButton.tsx","src/scenes/ToDos/ToDoList/components/TodoItem.tsx","src/scenes/ToDos/ToDoList/components/TodoItemFallback.tsx","src/scenes/ToDos/ToDoList/components/Confetti.tsx","src/scenes/ToDos/ToDoList/components/TodayPlaceholder.tsx","src/scenes/ToDos/ToDoList/components/AccordionHeader.tsx","src/scenes/ToDos/ToDoList/components/style.ts","src/components/Chip.tsx","src/scenes/ToDos/ToDoList/components/FiltersDrawer.tsx","src/scenes/ToDos/ToDoList/components/TodoListContent.tsx","src/scenes/ToDos/ToDoList/components/helpers.tsx","src/scenes/ToDos/ToDoList/index.tsx","src/scenes/ToDos/AddTodo/helpers.ts","src/scenes/ToDos/AddTodo/useAddTodoOptions.ts","src/scenes/ToDos/AddTodo/tour.ts","src/scenes/ToDos/AddTodo/index.tsx","src/routes/stacks/ToDoStackNavigator/index.tsx","src/scenes/Requests/helper/requestFilter.ts","src/scenes/Requests/components/RequestsFilterDrawer.tsx","src/scenes/Requests/helper/partitionRequests.ts","src/scenes/RequestWizardFAB/index.tsx","src/scenes/RequestWizardFAB/styles.ts","src/scenes/RequestWizardFAB/helper.ts","src/scenes/Requests/components/InboxHero.tsx","src/scenes/Requests/tour.tsx","src/scenes/Requests/components/style.tsx","src/scenes/Requests/components/SuspenseRequestItem.tsx","src/scenes/Requests/constants.ts","src/utils/requests.ts","src/scenes/Requests/components/RequestItem.tsx","src/scenes/Requests/styles.ts","src/scenes/Requests/components/RequestList.tsx","src/scenes/Requests/index.tsx","src/scenes/RequestDetails/helper/constants.ts","src/scenes/RequestDetails/helper/generateInfoUpdateData.ts","src/scenes/RequestDetails/helper/generateAppointmentData.ts","src/scenes/RequestDetails/helper/generateRefillData.ts","src/scenes/RequestDetails/helper/generateStandardData.ts","src/scenes/RequestDetails/helper/normalizeRequestData.tsx","src/scenes/RequestDetails/helper/index.ts","src/scenes/RequestDetails/index.tsx","src/routes/stacks/RequestStackNavigator/index.tsx","src/routes/stacks/BottomTabNavigator/RouteLabel.tsx","src/routes/stacks/BottomTabNavigator/index.tsx","src/components/PatientRowItem/index.tsx","src/hooks/react-query/usePaginatedReminders.ts","src/api/reminders/getPaginatedReminders.tsx","src/hooks/useFetchNextPage.ts","src/scenes/Reminders/FilteredReminders.tsx","src/scenes/Reminders/index.tsx","src/hooks/react-query/usePaginatedPrescriptions.ts","src/api/prescriptions/getPaginatedPrescriptions.tsx","src/scenes/Prescriptions/FilteredPrescriptions.tsx","src/scenes/Prescriptions/index.tsx","src/components/Icons/X.tsx","src/scenes/ContactUs/index.tsx","src/scenes/AfterHours/AfterHoursContactCard.tsx","src/scenes/AfterHours/CollapsibleSection.tsx","src/scenes/AfterHours/index.tsx","src/scenes/PatientID/style.ts","src/scenes/PatientID/MedicalReminders.tsx","src/scenes/PatientID/CurrentPrescriptions.tsx","src/scenes/PatientID/index.tsx","src/scenes/SelectPractice/styled.ts","src/components/Icons/Logo.tsx","src/scenes/Landing/components/LogoHeader.tsx","src/scenes/Landing/helpers/useResendConfirmationEmail.ts","src/scenes/SelectPractice/UnconfirmedPractice.tsx","src/scenes/SelectPractice/index.tsx","src/scenes/AddToCalendar/Details.tsx","src/scenes/AddToCalendar/helpers.ts","src/scenes/AddToCalendar/index.tsx","src/scenes/LoyaltyReward/index.tsx","src/scenes/TransactionDetails/index.tsx","src/components/Icons/FaceRecognition.tsx","src/scenes/BiometricLoginOptIn/index.tsx","src/components/Icons/PatientID.tsx","src/scenes/PatientProfile/components/ViewProfile/Header.tsx","src/scenes/PatientProfile/components/ViewProfile/HeaderToggle.tsx","src/scenes/PatientProfile/components/ViewProfile/InfoCard.tsx","src/scenes/PatientProfile/components/ViewProfile/index.tsx","src/scenes/PatientProfile/components/ViewProfile/helpers.ts","src/scenes/PatientProfile/components/EditInfo/BasicInfo.tsx","src/scenes/PatientProfile/components/EditInfo/AdditionalInfo.tsx","src/components/UploadFiles/useFileItemAnimation.ts","src/components/UploadFiles/FileItem.tsx","src/components/UploadFiles/UploadFiles.tsx","src/components/UploadFiles/index.ts","src/scenes/PatientProfile/components/EditInfo/CommentsAndFiles.tsx","src/scenes/PatientProfile/components/EditInfo/index.tsx","src/scenes/PatientProfile/components/ConfirmChanges/InfoUpdateItems.tsx","src/scenes/PatientProfile/helpers.ts","src/scenes/PatientProfile/components/ConfirmChanges/index.tsx","src/scenes/PatientProfile/components/TempImageAvatar.tsx","src/scenes/PatientProfile/model.ts","src/hooks/react-query/useUploadPatientPhoto.ts","src/scenes/PatientProfile/components/AvatarMaskedView.tsx","src/scenes/PatientProfile/components/PatientProfileAvatar.tsx","src/scenes/PatientProfile/hooks/useFormState.ts","src/scenes/PatientProfile/hooks/usePatientData.ts","src/providers/ExitProvider.tsx","src/scenes/PatientProfile/index.tsx","src/scenes/ProfileInformationUpdate/helpers.ts","src/scenes/ProfileInformationUpdate/AddressChangeModal.tsx","src/scenes/ProfileInformationUpdate/shared.tsx","src/scenes/ProfileInformationUpdate/ConfirmChanges.tsx","src/scenes/ProfileInformationUpdate/index.tsx","src/scenes/PatientSelector/index.tsx","src/routes/stacks/PatientUpdateStackNavigator/index.tsx","src/components/LoginLoader.tsx","src/routes/stacks/MainStack/index.tsx","src/utils/reloadApp/index.web.ts","src/scenes/Landing/components/IconTextLink.tsx","src/scenes/Landing/components/style.ts","src/scenes/Landing/components/ErrorMessages.tsx","src/scenes/Landing/helpers/useForgotPassword.ts","src/scenes/Landing/helpers/useLoginComponentControl.ts","src/scenes/Landing/tour.ts","src/scenes/Landing/components/ErrorMessage.tsx","src/scenes/Landing/components/LoginForm.tsx","src/scenes/Landing/components/MultiplePractices.tsx","src/scenes/Landing/components/BottomClip.tsx","src/scenes/Landing/components/HeroImage.tsx","src/scenes/Landing/helpers/formState.ts","src/scenes/Landing/components/IntroDrawer/assets/PawPathSuper.tsx","src/scenes/Landing/components/IntroDrawer/assets/MailSuper.tsx","src/scenes/Landing/components/IntroDrawer/assets/LogoSuper.tsx","src/scenes/Landing/components/IntroDrawer/index.tsx","src/components/QRPlayStore.tsx","src/components/QRAppStore.tsx","src/scenes/Landing/components/DownloadOurApp/DownloadAppStore.tsx","src/scenes/Landing/components/DownloadOurApp/DownloadPlayStore.tsx","src/scenes/Landing/components/DownloadOurApp/DownloadOurApp.tsx","src/providers/ImpersonationProvider/AdminLogin.tsx","src/api/admin/index.ts","src/providers/ImpersonationProvider/components/UserSearchResultItem.tsx","src/providers/ImpersonationProvider/UserSearch.tsx","src/providers/ImpersonationProvider/ImpersonationProvider.tsx","src/scenes/Landing/index.tsx","src/scenes/TermsAndConditions/TermsHtml.tsx","src/scenes/TermsAndConditions/index.tsx","src/scenes/ChangePassword/index.tsx","src/scenes/PetPageDisabled/index.tsx","src/scenes/PracticeClientSearch/components/AccountLocated.tsx","src/scenes/PracticeClientSearch/style.ts","src/scenes/PracticeClientSearch/tour.ts","src/scenes/PracticeClientSearch/validation.ts","src/scenes/PracticeClientSearch/components/ClientSearch.tsx","src/scenes/PracticeClientSearch/helpers/model.ts","src/scenes/PracticeClientSearch/components/PracticeSearch.tsx","src/scenes/PracticeClientSearch/components/PracticeSearchResult.tsx","src/scenes/PracticeClientSearch/components/PracticeSearchResults.tsx","src/scenes/PracticeClientSearch/components/SearchHero.tsx","src/scenes/PracticeClientSearch/index.tsx","src/scenes/EmailConfirmation/styled.tsx","src/scenes/EmailConfirmation/index.tsx","src/scenes/BiometricLogin/style.ts","src/scenes/BiometricLogin/index.tsx","src/scenes/TokenResetPassword/validation.ts","src/scenes/TokenResetPassword/index.tsx","src/scenes/PushNotificationsOptIn/asset/NotificationHero.tsx","src/scenes/PushNotificationsOptIn/index.tsx","src/hooks/useAppointmentOptions/extractColumnOptions.ts","src/module/FormKit/validators.ts","src/scenes/OnlineBooking/BookingProvider/validation.ts","src/scenes/OnlineBooking/BookingProvider/helpers/enums.ts","src/module/FormKit/components/shared.ts","src/module/FormKit/components/AdditionalInfo.tsx","src/module/FormKit/components/TermsCheckbox.tsx","src/components/PracticeTextRenderer.tsx","src/module/FormKit/components/ClientInformation.tsx","src/module/FormKit/components/EditButton.tsx","src/module/FormKit/components/ConfirmationSection.tsx","src/module/FormKit/components/Confirmation.tsx","src/module/FormKit/components/ImageHolderSection.tsx","src/module/FormKit/components/constants.ts","src/module/FormKit/helper.ts","src/module/FormKit/components/LeftNavBar.tsx","src/module/FormKit/components/TopNavBar.tsx","src/utils/theme/getOnlineBookingHero.ts","src/utils/theme/getOnlineBookingBackground.ts","src/module/FormKit/components/LayoutController.tsx","src/module/FormKit/components/NotificationSettings.tsx","src/module/FormKit/components/SelectPatient.tsx","src/module/FormKit/components/PatientInfo.tsx","src/module/FormKit/components/PracticeNotFound.tsx","src/scenes/OnlineBooking/BookingProvider/helpers/confirmationSections.ts","src/scenes/OnlineBooking/BookingProvider/helpers/initialFormData.ts","src/api/onDemandSync/index.ts","src/scenes/OnlineBooking/BookingProvider/useOnDemandPoll.ts","src/hooks/useAppointmentOptions/extractAppointmentOptions.ts","src/hooks/useAppointmentOptions/extractFieldDisplaySettings.ts","src/hooks/useAppointmentOptions/index.ts","src/scenes/OnlineBooking/BookingProvider/helper.ts","src/scenes/OnlineBooking/BookingProvider/helpers/mapClientPatientSearch.ts","src/scenes/OnlineBooking/BookingProvider/helpers/useFilterAppointmentOptions.ts","src/scenes/OnlineBooking/BookingProvider/index.tsx","src/scenes/OnlineBooking/components/BookingStatus/helper.tsx","src/scenes/OnlineBooking/components/BookingStatus/BookingStateIcon.tsx","src/scenes/OnlineBooking/components/BookingStatus/index.tsx","src/scenes/OnlineBooking/components/SelectAppointment/helpers.ts","src/scenes/AppointmentRequest/CustomLabel.tsx","src/components/AnimalLoader.tsx","src/scenes/OnlineBooking/components/AppointmentLoader.tsx","src/utils/lottie.ts","src/scenes/OnlineBooking/components/SelectAppointment/index.tsx","src/scenes/OnlineBooking/BookingProvider/helpers/stepInfo.ts","src/scenes/OnlineBooking/components/OBLayoutController.tsx","src/scenes/OnlineBooking/index.tsx","src/scenes/Sandbox/index.tsx","src/scenes/ProductRequest/helpers/initialFormData.ts","src/scenes/ProductRequest/helpers/productValidation.ts","src/scenes/ProductRequest/helpers/productSteps.ts","src/scenes/ProductRequest/helpers/useRefillFormContext.ts","src/scenes/ProductRequest/components/ProductInfoSection.tsx","src/scenes/ProductRequest/helpers/productConfirmation.ts","src/scenes/ProductRequest/components/RefillStatus.tsx","src/scenes/ProductRequest/helpers/productStepInfo.ts","src/scenes/ProductRequest/components/RefillLayoutController.tsx","src/scenes/ProductRequest/index.tsx","src/scenes/ProductRequest/helpers/getRefillRequestSettings.ts","src/routes/stacks/RootStackNavigator/index.tsx","src/scenes/AppError/helper.ts","src/scenes/AppError/index.tsx","src/utils/remoteNotifications/index.ts","src/scenes/Landing/components/DebugFAB.tsx","src/scenes/ForcedUpdate/index.tsx","src/providers/ForcedUpdateProvider/index.tsx","src/providers/ForcedUpdateProvider/helper.ts","App.tsx","src/api/appointments/index.ts","src/api/authentication/index.ts","src/api/changePassword/index.tsx","src/api/clientPracticeConfiguration/index.ts","src/api/client/index.ts","src/api/clientSearch/index.ts","src/api/user/index.ts","src/api/employee/index.ts","src/api/practices/index.ts","src/api/ability/index.tsx","src/api/todos.ts","src/api/announcements/index.tsx","src/api/reminders/index.ts","src/api/practiceSearch/index.ts","src/api/prescriptions/index.tsx","src/api/emergencyContacts/index.ts","src/api/schedule/index.ts","src/api/requestSetting/index.ts","src/api/requests/index.ts","src/api/confirmEmail/index.ts","src/api/keys/AsyncStorageKeys.ts","src/api/keys/MutationKeys.ts","src/api/keys/QueryKeys.ts","src/api/lifelearn/index.ts","src/api/loyaltyTransactions/index.ts","src/api/patient/getPaginatedPatients.ts","src/api/patient/index.ts","src/utils/generateGenericHeaders.ts","src/api/push/index.ts","src/components/Icons/CalendarConfirmed.tsx","src/components/Icons/CalendarPending.tsx","src/components/Icons/OfficeBuilding.tsx","src/components/Icons/Paw.tsx","src/components/Icons/AutoRenew.tsx","src/components/Icons/HairDryer.tsx","src/components/Icons/MedicalBag.tsx","src/components/Icons/Needle.tsx","src/components/Icons/Pill.tsx","src/constants/api/endpoints.ts","src/constants/api/errors.ts","src/constants/api/events.ts","src/constants/general.ts","src/constants/testID.ts","src/constants/practiceFeatures.ts","src/constants/patient.ts","src/constants/species.ts","src/environment/config.debug.ts","src/environment/config.production.ts","src/environment/config.qa.ts","src/environment/index.ts","src/hooks/useDeeplink/helper.ts","src/hooks/useViewMode.ts","src/interfaces/api/PracticeTheme.ts","src/interfaces/api/Request.ts","src/interfaces/api/AppointmentType.ts","src/interfaces/api/ChangePasswordError.ts","src/interfaces/api/EmailVerificationStatus.ts","src/interfaces/api/Todo.ts","src/interfaces/api/AppointmentRequest.ts","src/interfaces/api/Schedule.ts","src/providers/AuthProvider/model.ts","src/providers/NotificationProvider/ChannelsAndCategories.ts","src/utils/linking.ts","src/utils/remoteNotifications/types.ts","src/providers/NotificationProvider/helpers.ts","src/providers/NotificationProvider/Notifee.ts","src/providers/NotificationProvider/NotificationCategory.ts","src/providers/NotificationProvider/notificationIdGenerators.tsx","src/routes/stacks/AppointmentStackNavigator/ParamsList.ts","src/routes/stacks/HomeStackNavigator/ParamsList.ts","src/routes/stacks/LoyaltyTabNavigator/ParamsList.ts","src/routes/stacks/PatientStackNavigator/ParamsList.ts","src/routes/stacks/ToDoStackNavigator/ParamsList.ts","src/routes/stacks/RequestStackNavigator/ParamsList.ts","src/routes/stacks/BottomTabNavigator/ParamsList.tsx","src/routes/stacks/MainStack/ParamsList.ts","src/routes/stacks/RootStackNavigator/ParamsList.ts","src/routes/stacks/navigators.ts","src/routes/stacks/screens.ts","src/scenes/ToDos/ToDoList/components/model.tsx","src/theme/palette.ts","src/theme/themes.ts","src/theme/typography.ts","src/utils/axios/model.ts","src/utils/axios/index.ts","src/utils/axios/unauthenticated.ts","src/utils/cleanUrl/index.ts","src/utils/colorValues.ts","src/utils/createImageFormData.tsx","src/utils/date/index.ts","src/utils/extractStyles/index.ts","src/utils/firebase/index.web.ts","src/utils/createNamedRefs.tsx","src/utils/hasPhoto.ts","src/utils/isDefinedOrThrowServerError.ts","src/utils/openMaps.ts","src/utils/openSMS.ts","src/utils/openEmail.ts","src/utils/openWebBrowser.ts","src/utils/showAppLinkingPaths/index.ts","src/utils/isPrescriptionValid.ts","src/utils/pagination.ts","src/utils/patient.ts","src/utils/mergeRefs.ts","src/utils/paramToBoolean/index.ts","src/utils/isDefined/index.ts","src/utils/makePhoneCall.ts","src/utils/queryClient.ts","src/utils/sentry/helper.ts","src/utils/sentry/index.web.ts","src/utils/storage.ts","src/utils/strings/index.ts","src/utils/uuid.ts","node_modules/moment/locale|sync|/^/.//.*$","webpack/bootstrap","webpack/runtime/amd options","webpack/runtime/chunk loaded","webpack/runtime/compat get default export","webpack/runtime/define property getters","webpack/runtime/global","webpack/runtime/hasOwnProperty shorthand","webpack/runtime/make namespace object","webpack/runtime/node module decorator","webpack/runtime/publicPath","webpack/runtime/jsonp chunk loading","webpack/runtime/nonce","webpack/startup"],"sourcesContent":["import { Language } from 'src/constants';\nimport AddToCalendarEN from './locales/en/addToCalendar.json';\nimport AddToCalendarES from './locales/es/addToCalendar.json';\nimport AddToCalendarFR from './locales/fr/addToCalendar.json';\nimport AfterHoursEN from './locales/en/afterHours.json';\nimport AfterHoursES from './locales/es/afterHours.json';\nimport AfterHoursFR from './locales/fr/afterHours.json';\nimport AppointmentsEN from './locales/en/appointments.json';\nimport AppointmentsES from './locales/es/appointments.json';\nimport AppointmentsFR from './locales/fr/appointments.json';\nimport AppErrorEN from './locales/en/appError.json';\nimport AppErrorES from './locales/es/appError.json';\nimport AppErrorFR from './locales/fr/appError.json';\nimport ArticleHubEN from './locales/en/articleHub.json';\nimport ArticleHubES from './locales/es/articleHub.json';\nimport ArticleHubFR from './locales/fr/articleHub.json';\nimport BiometricLoginEN from './locales/en/biometricLogin.json';\nimport BiometricLoginES from './locales/es/biometricLogin.json';\nimport BiometricLoginFR from './locales/fr/biometricLogin.json';\nimport ChangePasswordEN from './locales/en/changePassword.json';\nimport ChangePasswordES from './locales/es/changePassword.json';\nimport ChangePasswordFR from './locales/fr/changePassword.json';\nimport ChangePasswordModalEN from './locales/en/changePasswordModal.json';\nimport ChangePasswordModalES from './locales/es/changePasswordModal.json';\nimport ChangePasswordModalFR from './locales/fr/changePasswordModal.json';\nimport CommonEN from './locales/en/common.json';\nimport CommonES from './locales/es/common.json';\nimport CommonFR from './locales/fr/common.json';\nimport ContactAllyEN from './locales/en/contactAlly.json';\nimport ContactAllyES from './locales/es/contactAlly.json';\nimport ContactAllyFR from './locales/fr/contactAlly.json';\nimport ContactUsEN from './locales/en/contactUs.json';\nimport ContactUsES from './locales/es/contactUs.json';\nimport ContactUsFR from './locales/fr/contactUs.json';\nimport DiscardChangesEN from './locales/en/discardChanges.json';\nimport DiscardChangesES from './locales/es/discardChanges.json';\nimport DiscardChangesFR from './locales/fr/discardChanges.json';\nimport EmailConfirmationEN from './locales/en/emailConfirmation.json';\nimport EmailConfirmationES from './locales/es/emailConfirmation.json';\nimport EmailConfirmationFR from './locales/fr/emailConfirmation.json';\nimport EulaEN from './locales/en/eula.json';\nimport EulaES from './locales/es/eula.json';\nimport EulaFR from './locales/fr/eula.json';\nimport ForcedUpdateEN from './locales/en/forcedUpdate.json';\nimport ForcedUpdateES from './locales/es/forcedUpdate.json';\nimport ForcedUpdateFR from './locales/fr/forcedUpdate.json';\nimport GenericErrorEN from './locales/en/genericError.json';\nimport GenericErrorES from './locales/es/genericError.json';\nimport GenericErrorFR from './locales/fr/genericError.json';\nimport HelpCenterEN from './locales/en/helpCenter.json';\nimport HelpCenterES from './locales/es/helpCenter.json';\nimport HelpCenterFR from './locales/fr/helpCenter.json';\nimport HomeEN from './locales/en/home.json';\nimport HomeES from './locales/es/home.json';\nimport HomeFR from './locales/fr/home.json';\nimport ImpersonateEN from './locales/en/impersonate.json';\nimport ImpersonateES from './locales/es/impersonate.json';\nimport ImpersonateFR from './locales/fr/impersonate.json';\nimport InfoUpdateEN from './locales/en/informationUpdate.json';\nimport InfoUpdateES from './locales/es/informationUpdate.json';\nimport InfoUpdateFR from './locales/fr/informationUpdate.json';\nimport LoginEN from './locales/en/login.json';\nimport LoginES from './locales/es/login.json';\nimport LoginFR from './locales/fr/login.json';\nimport LoyaltyEN from './locales/en/loyalty.json';\nimport LoyaltyES from './locales/es/loyalty.json';\nimport LoyaltyFR from './locales/fr/loyalty.json';\nimport OnboardingErrorsEN from './locales/en/onboardingErrors.json';\nimport OnboardingErrorsES from './locales/es/onboardingErrors.json';\nimport OnboardingErrorsFR from './locales/fr/onboardingErrors.json';\nimport OnlineBookingEN from './locales/en/onlineBooking.json';\nimport OnlineBookingES from './locales/es/onlineBooking.json';\nimport OnlineBookingFR from './locales/fr/onlineBooking.json';\nimport PatientProfileEN from './locales/en/patientProfile.json';\nimport PatientProfileES from './locales/es/patientProfile.json';\nimport PatientProfileFR from './locales/fr/patientProfile.json';\nimport PermissionsEN from './locales/en/permissions.json';\nimport PermissionsES from './locales/es/permissions.json';\nimport PermissionsFR from './locales/fr/permissions.json';\nimport PetIDEN from './locales/en/petID.json';\nimport PetIDES from './locales/es/petID.json';\nimport PetIDFR from './locales/fr/petID.json';\nimport PetListEN from './locales/en/petList.json';\nimport PetListES from './locales/es/petList.json';\nimport PetListFR from './locales/fr/petList.json';\nimport PetPageDisabledEN from './locales/en/petPageDisabled.json';\nimport PetPageDisabledES from './locales/es/petPageDisabled.json';\nimport PetPageDisabledFR from './locales/fr/petPageDisabled.json';\nimport PracticeClientSearchEN from './locales/en/practiceClientSearch.json';\nimport PracticeClientSearchES from './locales/es/practiceClientSearch.json';\nimport PracticeClientSearchFR from './locales/fr/practiceClientSearch.json';\nimport ProfileClientPracticeConfigEN from './locales/en/profileClientPracticeConfig.json';\nimport ProfileClientPracticeConfigES from './locales/es/profileClientPracticeConfig.json';\nimport ProfileClientPracticeConfigFR from './locales/fr/profileClientPracticeConfig.json';\nimport ProfileRootEN from './locales/en/profileRoot.json';\nimport ProfileRootES from './locales/es/profileRoot.json';\nimport ProfileRootFR from './locales/fr/profileRoot.json';\nimport PushNotificationsEN from './locales/en/pushNotifications.json';\nimport PushNotificationsES from './locales/es/pushNotifications.json';\nimport PushNotificationsFR from './locales/fr/pushNotifications.json';\nimport RequestsEN from './locales/en/requests.json';\nimport RequestsES from './locales/es/requests.json';\nimport RequestsFR from './locales/fr/requests.json';\nimport SelectPracticeEN from './locales/en/selectPractice.json';\nimport SelectPracticeES from './locales/es/selectPractice.json';\nimport SelectPracticeFR from './locales/fr/selectPractice.json';\nimport SettingsEN from './locales/en/settings.json';\nimport SettingsES from './locales/es/settings.json';\nimport SettingsFR from './locales/fr/settings.json';\nimport TimeRefEN from './locales/en/timeReference.json';\nimport TimeRefES from './locales/es/timeReference.json';\nimport TimeRefFR from './locales/fr/timeReference.json';\nimport TodosEN from './locales/en/todos.json';\nimport TodosES from './locales/es/todos.json';\nimport TodosFR from './locales/fr/todos.json';\nimport TokenResetPasswordEN from './locales/en/tokenPasswordReset.json';\nimport TokenResetPasswordES from './locales/es/tokenPasswordReset.json';\nimport TokenResetPasswordFR from './locales/fr/tokenPasswordReset.json';\nimport UserInfoEN from './locales/en/userInfo.json';\nimport UserInfoES from './locales/es/userInfo.json';\nimport UserInfoFR from './locales/fr/userInfo.json';\nimport ValidationEN from './locales/en/validation.json';\nimport ValidationES from './locales/es/validation.json';\nimport ValidationFR from './locales/fr/validation.json';\nimport DeeplinkingEN from './locales/en/deeplinking.json';\nimport DeeplinkingES from './locales/es/deeplinking.json';\nimport DeeplinkingFR from './locales/fr/deeplinking.json';\n\nexport const defaultLanguage = Language.en;\n\nexport const languagesResources = {\n en: {\n addToCalendar: AddToCalendarEN,\n afterHours: AfterHoursEN,\n appError: AppErrorEN,\n appointments: AppointmentsEN,\n articleHub: ArticleHubEN,\n biometricLogin: BiometricLoginEN,\n changePassword: ChangePasswordEN,\n changePasswordModal: ChangePasswordModalEN,\n common: CommonEN,\n contactAlly: ContactAllyEN,\n contactUs: ContactUsEN,\n deeplinking: DeeplinkingEN,\n discardChanges: DiscardChangesEN,\n emailConfirmation: EmailConfirmationEN,\n eula: EulaEN,\n forcedUpdate: ForcedUpdateEN,\n genericError: GenericErrorEN,\n helpCenter: HelpCenterEN,\n home: HomeEN,\n impersonate: ImpersonateEN,\n informationUpdate: InfoUpdateEN,\n login: LoginEN,\n loyalty: LoyaltyEN,\n onboardingErrors: OnboardingErrorsEN,\n onlineBooking: OnlineBookingEN,\n patientProfile: PatientProfileEN,\n permissions: PermissionsEN,\n petID: PetIDEN,\n petList: PetListEN,\n petPageDisabled: PetPageDisabledEN,\n practiceClientSearch: PracticeClientSearchEN,\n profileClientPracticeConfig: ProfileClientPracticeConfigEN,\n profileRoot: ProfileRootEN,\n pushNotifications: PushNotificationsEN,\n requests: RequestsEN,\n selectPractice: SelectPracticeEN,\n settings: SettingsEN,\n timeReference: TimeRefEN,\n todos: TodosEN,\n tokenPasswordReset: TokenResetPasswordEN,\n userInfo: UserInfoEN,\n validation: ValidationEN\n },\n es: {\n addToCalendar: AddToCalendarES,\n afterHours: AfterHoursES,\n appError: AppErrorES,\n appointments: AppointmentsES,\n articleHub: ArticleHubES,\n biometricLogin: BiometricLoginES,\n changePassword: ChangePasswordES,\n changePasswordModal: ChangePasswordModalES,\n common: CommonES,\n contactAlly: ContactAllyES,\n contactUs: ContactUsES,\n deeplinking: DeeplinkingES,\n discardChanges: DiscardChangesES,\n emailConfirmation: EmailConfirmationES,\n eula: EulaES,\n forcedUpdate: ForcedUpdateES,\n genericError: GenericErrorES,\n helpCenter: HelpCenterES,\n home: HomeES,\n impersonate: ImpersonateES,\n informationUpdate: InfoUpdateES,\n login: LoginES,\n loyalty: LoyaltyES,\n onboardingErrors: OnboardingErrorsES,\n onlineBooking: OnlineBookingES,\n patientProfile: PatientProfileES,\n permissions: PermissionsES,\n petID: PetIDES,\n petList: PetListES,\n petPageDisabled: PetPageDisabledES,\n practiceClientSearch: PracticeClientSearchES,\n profileClientPracticeConfig: ProfileClientPracticeConfigES,\n profileRoot: ProfileRootES,\n pushNotifications: PushNotificationsES,\n requests: RequestsES,\n selectPractice: SelectPracticeES,\n settings: SettingsES,\n timeReference: TimeRefES,\n todos: TodosES,\n tokenPasswordReset: TokenResetPasswordES,\n userInfo: UserInfoES,\n validation: ValidationES\n },\n fr: {\n addToCalendar: AddToCalendarFR,\n afterHours: AfterHoursFR,\n appError: AppErrorFR,\n appointments: AppointmentsFR,\n articleHub: ArticleHubFR,\n biometricLogin: BiometricLoginFR,\n changePassword: ChangePasswordFR,\n changePasswordModal: ChangePasswordModalFR,\n common: CommonFR,\n contactAlly: ContactAllyFR,\n contactUs: ContactUsFR,\n deeplinking: DeeplinkingFR,\n discardChanges: DiscardChangesFR,\n emailConfirmation: EmailConfirmationFR,\n eula: EulaFR,\n forcedUpdate: ForcedUpdateFR,\n genericError: GenericErrorFR,\n helpCenter: HelpCenterFR,\n home: HomeFR,\n impersonate: ImpersonateFR,\n informationUpdate: InfoUpdateFR,\n login: LoginFR,\n loyalty: LoyaltyFR,\n onboardingErrors: OnboardingErrorsFR,\n onlineBooking: OnlineBookingFR,\n patientProfile: PatientProfileFR,\n permissions: PermissionsFR,\n petID: PetIDFR,\n petList: PetListFR,\n petPageDisabled: PetPageDisabledFR,\n practiceClientSearch: PracticeClientSearchFR,\n profileClientPracticeConfig: ProfileClientPracticeConfigFR,\n profileRoot: ProfileRootFR,\n pushNotifications: PushNotificationsFR,\n requests: RequestsFR,\n selectPractice: SelectPracticeFR,\n settings: SettingsFR,\n timeReference: TimeRefFR,\n todos: TodosFR,\n tokenPasswordReset: TokenResetPasswordFR,\n userInfo: UserInfoFR,\n validation: ValidationFR\n }\n};\n","import noop from 'lodash/noop';\nimport { defaultLanguage } from './languageConfig';\nimport { LanguageDetectorAsyncModule } from 'i18next';\nimport { storage } from 'src/utils';\nimport { AsyncStorageKeys } from 'src/api';\n\nconst RNLanguageDetector: LanguageDetectorAsyncModule = {\n type: 'languageDetector',\n async: true,\n detect: async (cb: (detectedLocale: string) => void): Promise => {\n const persistedLocale = await storage.getItem(AsyncStorageKeys.LOCALE_PERSISTENCE_KEY);\n return cb(persistedLocale ?? defaultLanguage);\n },\n init: noop,\n cacheUserLanguage: (locale: string): void => {\n void storage.setItem(AsyncStorageKeys.LOCALE_PERSISTENCE_KEY, locale);\n }\n};\n\nexport default RNLanguageDetector;\n","import 'intl';\nimport 'intl/locale-data/jsonp/fr-CA';\n\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { defaultLanguage, languagesResources } from './languageConfig';\nimport RNLanguageDetector from './languageDetector';\n\nvoid i18n\n .use(RNLanguageDetector)\n .use(initReactI18next)\n .init({\n debug: false,\n resources: languagesResources,\n compatibilityJSON: 'v3',\n fallbackLng: defaultLanguage,\n ns: [\n 'addToCalendar',\n 'afterHours',\n 'appError',\n 'appointments',\n 'articleHub',\n 'changePassword',\n 'changePasswordModal',\n 'common',\n 'contactAlly',\n 'contactUs',\n 'discardChanges',\n 'emailConfirmation',\n 'eula',\n 'forcedUpdate',\n 'genericError',\n 'home',\n 'informationUpdate',\n 'login',\n 'loyalty',\n 'onboardingErrors',\n 'onlineBooking',\n 'patientProfile',\n 'permissions',\n 'petID',\n 'petList',\n 'petPageDisabled',\n 'petProfile',\n 'practiceClientSearch',\n 'profileClientPracticeConfig',\n 'profileRoot',\n 'pushNotifications',\n 'requests',\n 'selectPractice',\n 'settings',\n 'timeReference',\n 'todos',\n 'tokenPasswordReset',\n 'userInfo',\n 'userSearch',\n 'validation'\n ],\n defaultNS: 'common',\n interpolation: {\n escapeValue: false\n },\n react: {\n useSuspense: false,\n transSupportBasicHtmlNodes: false\n }\n });\n\nexport default i18n;\n","import 'intl';\nimport 'intl/locale-data/jsonp/en';\nimport 'intl/locale-data/jsonp/es';\nimport './date-format-polyfill';\nimport { en, es, fr, registerTranslation } from 'react-native-paper-dates';\nregisterTranslation('en', en);\nregisterTranslation('es', es);\nregisterTranslation('fr', fr);\n","import { useQuery, UseQueryOptions } from 'react-query';\nimport { getAnnouncements, QueryKeys } from 'src/api';\nimport Announcement from 'src/interfaces/api/Announcement';\n\nexport const announcementOptions: UseQueryOptions = {\n queryKey: [QueryKeys.ANNOUNCEMENTS],\n queryFn: async () => await getAnnouncements(),\n refetchInterval: 60000,\n refetchIntervalInBackground: false\n};\nconst useAnnouncements = () => useQuery(announcementOptions);\n\nexport default useAnnouncements;\n","import { AxiosError } from 'axios';\nimport _ from 'lodash';\nimport moment from 'moment-timezone';\nimport { useEffect, useRef } from 'react';\nimport { QueryKey, useQuery, UseQueryOptions } from 'react-query';\nimport { getActiveClientList, QueryKeys } from 'src/api';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\n\ninterface Options\n extends Omit<\n UseQueryOptions,\n 'queryFn' | 'queryKey'\n > {\n beforeFetch?: () => void;\n}\n\nexport const availablePracticesOptions = (email: string, options?: Options) => ({\n queryKey: [QueryKeys.CHECK_EMAIL, email],\n queryFn: async ({ signal }: { signal?: AbortSignal }) => {\n try {\n options?.beforeFetch?.();\n return getActiveClientList({ email, signal });\n } catch {\n return [];\n }\n },\n select: (d: AvailablePractice[]) => _.sortBy(d, 'practiceName'),\n staleTime: moment.duration(5, 'seconds').asMilliseconds(),\n cacheTime: Infinity\n});\n\nconst useAvailablePractices = (email: string, options?: Options) => {\n const optionRef = useRef(options?.beforeFetch);\n useEffect(() => {\n optionRef.current = options?.beforeFetch;\n }, [options?.beforeFetch]);\n return useQuery({\n ...availablePracticesOptions(email, {\n ...options,\n beforeFetch: () => {\n optionRef.current?.();\n }\n }),\n ...options\n });\n};\n\nexport default useAvailablePractices;\n","import { AuthorizationStatus } from '@notifee/react-native';\nimport { createContext, useContext } from 'react';\nimport { Platform } from 'react-native';\nimport { NOTIFICATIONS_SUPPORTED } from 'src/constants';\nimport { NotificationCategory } from './NotificationCategory';\n\nexport interface GenericNotification {\n id?: string;\n title?: string | undefined;\n subtitle?: string | undefined;\n body?: string | undefined;\n data?: { [key: string]: string | object | number };\n}\n\nexport interface NotificationContext {\n notify: AuthorizationStatus;\n hasPrompted: boolean;\n fireNotification: (v: GenericNotification, c: NotificationCategory) => void;\n openNotificationSettings: () => void;\n clearNotification: (notificationId: string) => void;\n}\n\nexport const notificationWarning = () => {\n if (!NOTIFICATIONS_SUPPORTED) {\n console.warn(\n `Notifications not supported on ${Platform.select({\n ios: 'ios simulator',\n android: 'android emulator',\n web: 'web',\n default: 'this platform'\n })}.`,\n 'To test with notifications, run `yarn prebuild && yarn [ios|android]`'\n );\n } else {\n console.warn('Notifications provider has not been initialized.');\n }\n};\n\nexport const defaultContext: NotificationContext = {\n notify: -1,\n hasPrompted: true,\n fireNotification: notificationWarning,\n openNotificationSettings: notificationWarning,\n clearNotification: notificationWarning\n};\n\nexport const Notification = createContext(defaultContext);\n\nexport const useNotification = () => useContext(Notification);\n","import React, { PropsWithChildren } from 'react';\n\nconst NotificationProvider: React.FC = ({ children }) => {\n return <>{children};\n};\n\nexport default NotificationProvider;\nexport * from './Context';\n","import { PropsWithChildren } from 'react';\nimport { Portal } from 'react-native-paper';\nimport { Client } from 'src/interfaces';\nimport { createGenericContext } from 'src/utils/createGenericContext';\nimport NotificationProvider from './NotificationProvider';\n\ninterface Context {\n user: Client;\n}\n\nconst UserContext = createGenericContext();\n\nexport const [useUser] = UserContext;\nconst [, TrueUserProvider] = UserContext;\n\ninterface Props extends PropsWithChildren {\n user: Client;\n}\nexport const UserProvider: React.FC = ({ children, user }) => {\n return (\n \n \n {children}\n \n \n );\n};\n","import React from 'react';\n\nexport const createGenericContext = () => {\n const genericContext = React.createContext(undefined);\n\n const useGenericContext = () => {\n const contextIsDefined = React.useContext(genericContext);\n if (!contextIsDefined) {\n throw new Error('useGenericContext must be used within a Provider');\n }\n return contextIsDefined;\n };\n\n return [useGenericContext, genericContext.Provider] as const;\n};\n","import { useQuery, UseQueryResult } from 'react-query';\nimport { getPracticeConfiguration, QueryKeys } from 'src/api';\nimport Practice from 'src/interfaces/api/Practice';\nimport PracticeConfiguration from 'src/interfaces/api/PracticeConfiguration';\nimport { useUser } from 'src/providers/ClientProvider';\n\nexport const practiceConfigurationOptions = (practiceId: Practice['id']) => ({\n queryKey: [QueryKeys.PRACTICE_CONFIGURATION, practiceId],\n queryFn: async () => await getPracticeConfiguration(practiceId),\n retryDelay: 5000\n});\n\nexport type PracticeConfigurationHook = UseQueryResult;\nconst usePracticeConfiguration = () => {\n const { user } = useUser();\n return useQuery(practiceConfigurationOptions(user.practiceId));\n};\n\nexport default usePracticeConfiguration;\n","import _ from 'lodash';\nimport { useMemo } from 'react';\nimport { useQuery, UseQueryOptions } from 'react-query';\nimport { getPrescriptions, QueryKeys } from 'src/api';\nimport { Patient, Prescription } from 'src/interfaces';\n\nconst PLACEHOLDER: Prescription[] = [];\ninterface Options extends UseQueryOptions {\n selectedPatientId?: Patient['patientId'];\n}\n\nexport const prescriptionsOptions: UseQueryOptions<\n Prescription[],\n unknown,\n Prescription[],\n QueryKeys[]\n> = {\n queryKey: [QueryKeys.PRESCRIPTIONS],\n queryFn: getPrescriptions,\n select: (prescriptions) => _.orderBy(prescriptions, 'prescribedAt', 'desc'),\n suspense: true\n};\n\nconst usePrescriptions = ({ selectedPatientId, ...options }: Options = {}) => {\n const { data = PLACEHOLDER, ...rest } = useQuery({\n ...prescriptionsOptions,\n ...options\n });\n\n const prescriptions = useMemo(() => {\n return selectedPatientId\n ? data.filter(({ patientId }) => patientId === selectedPatientId)\n : data;\n }, [data, selectedPatientId]);\n\n return {\n data: prescriptions,\n ...rest\n };\n};\n\nexport default usePrescriptions;\n","import _ from 'lodash';\nimport { useMemo } from 'react';\nimport { useQuery, UseQueryOptions } from 'react-query';\nimport { getReminders, QueryKeys } from 'src/api';\nimport { Reminder, Patient } from 'src/interfaces';\n\nconst PLACEHOLDER: Reminder[] = [];\ninterface Options extends UseQueryOptions {\n patientId?: Patient['patientId'];\n}\n\nexport const remindersOptions: UseQueryOptions = {\n queryKey: [QueryKeys.REMINDERS],\n queryFn: getReminders,\n select: (reminders) => _.sortBy(reminders, 'pastDueDate'),\n suspense: true\n};\n\nconst useReminders = ({ patientId: selectedPatientId, ...options }: Options = {}) => {\n const { data = PLACEHOLDER, ...rest } = useQuery({\n ...remindersOptions,\n ...options\n });\n\n const reminders = useMemo(() => {\n return selectedPatientId\n ? data.filter(({ patientId }) => selectedPatientId === patientId)\n : data;\n }, [data, selectedPatientId]);\n\n return {\n data: reminders,\n ...rest\n };\n};\n\nexport default useReminders;\n","import moment from 'moment-timezone';\nimport { Appointment, AppointmentType } from 'src/interfaces';\n\n// TODO: Remove this when Nova updates appointments api to include isVirtual\n// Followup ticket: https://allydvm.atlassian.net/browse/AST-126\n\nconst VIRTUAL_TYPES = [\n AppointmentType.VID,\n AppointmentType.VID1,\n AppointmentType.TEL,\n AppointmentType.TEL1\n];\n\nexport const checkIsVirtual = (appointment?: Appointment): boolean =>\n !!appointment?.appointmentTypeIds.some((type) => VIRTUAL_TYPES.includes(type));\n\nexport const checkCanConfirm = (appointment?: Appointment) => {\n if (!appointment || appointment?.confirmed || appointment?.confirmedAt) {\n return false;\n }\n const appointmentDate = moment(appointment.startsAt);\n const now = moment();\n return now.isBefore(appointmentDate) && now.isAfter(appointmentDate.clone().subtract(3, 'days'));\n};\n\nexport const checkIsSoon = (appointment?: Appointment) =>\n moment(appointment?.startsAt).isAfter(moment().subtract(1, 'hour')) &&\n moment(appointment?.startsAt).isBefore(moment().add(1, 'hour'));\n\nexport const checkIsExpired = (appointment?: Appointment) =>\n moment(appointment?.startsAt).isBefore(moment().subtract(1, 'hour'));\n\nexport const checkIsPast = (appointment?: Appointment) => moment(appointment?.startsAt).isBefore();\n","import moment from 'moment-timezone';\nimport { useCallback, useMemo } from 'react';\nimport { UseInfiniteQueryOptions, useInfiniteQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getAppointments } from 'src/api/appointments';\nimport { Appointment, Patient } from 'src/interfaces';\nimport { extractAppointments, filterAppointments } from './helpers';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { checkIsPast } from '../../helper';\nimport { PAGE_LENGTH } from 'src/constants';\nimport { PaginationRS, getNextPageParam, queryClient } from 'src/utils';\n\ninterface Options\n extends Omit<\n UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n >,\n 'queryFn' | 'queryKey'\n > {\n limit?: number;\n selectedPatient?: Patient['patientId'];\n}\n\nexport const appointmentsOptions: (\n limit?: number\n) => UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n> = (limit = PAGE_LENGTH) => ({\n queryKey: [QueryKeys.APPOINTMENTS],\n queryFn: async ({ pageParam = 0 }) => {\n return getAppointments(pageParam * limit, limit);\n },\n getNextPageParam: (...options) => getNextPageParam(...options, limit),\n suspense: true,\n onSuccess: (d) => {\n const lastPage = d.pages[d.pages.length - 1];\n lastPage.data.forEach((appointment) => {\n queryClient.setQueryData([QueryKeys.APPOINTMENT, appointment.appointmentId], appointment);\n });\n }\n});\n\nconst useAppointments = ({ selectedPatient, limit = PAGE_LENGTH, ...options }: Options) => {\n const {\n data,\n refetch,\n hasNextPage,\n fetchNextPage,\n isLoading,\n isFetching,\n isFetchingNextPage,\n ...rest\n } = useInfiniteQuery({\n ...appointmentsOptions(limit),\n ...options\n });\n\n const appointments = useMemo(() => {\n const appts = extractAppointments(data);\n const filtered = filterAppointments(appts, selectedPatient);\n\n const firstPastAppt = filtered.findIndex(({ startsAt }) => moment(startsAt).isBefore());\n const hasPastAppt = firstPastAppt > -1;\n const future = (hasPastAppt ? filtered.slice(0, firstPastAppt) : filtered).reverse();\n const past = hasPastAppt ? filtered.slice(firstPastAppt) : [];\n const next = future[0];\n\n return { future, past, next, hasPastAppt };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, selectedPatient, isFetching]);\n\n useFocusEffect(\n useCallback(() => {\n if (isLoading || isFetchingNextPage) return;\n if (!appointments.hasPastAppt && hasNextPage) {\n void fetchNextPage();\n } else if (appointments.next && checkIsPast(appointments.next)) {\n void queryClient.invalidateQueries([QueryKeys.APPOINTMENTS]);\n }\n }, [\n isLoading,\n isFetchingNextPage,\n appointments.hasPastAppt,\n hasNextPage,\n fetchNextPage,\n appointments.next\n ])\n );\n\n return {\n isLoading,\n isFetching,\n isFetchingNextPage,\n hasNextPage,\n data: appointments,\n fetchNextPage,\n refetch,\n ...rest\n };\n};\n\nexport default useAppointments;\n","import _ from 'lodash';\nimport { InfiniteData } from 'react-query';\nimport { Appointment, Patient } from 'src/interfaces';\nimport { PaginationRS } from 'src/utils';\n\nexport const extractAppointments = (data: InfiniteData> | undefined) =>\n data?.pages?.reduce((prev, curr) => [...prev, ...curr.data], []) ?? [];\n\nexport const filterAppointments = (\n data: Appointment[],\n selectedPatientId: Patient['patientId'] | undefined\n) =>\n _(data)\n .filter(({ patientId }) => !selectedPatientId || selectedPatientId === patientId)\n .uniqBy('appointmentId')\n .value();\n","import { useMemo } from 'react';\nimport { useQuery, UseQueryOptions } from 'react-query';\nimport { getAbility, QueryKeys } from 'src/api';\nimport Ability from 'src/interfaces/api/Ability';\nimport { isDefined } from 'src/utils';\n\nexport const abilityOptions = {\n queryKey: [QueryKeys.ABILITY],\n queryFn: getAbility\n};\nconst useAbility = (\n options: Omit<\n UseQueryOptions,\n 'queryKey' | 'queryFn'\n > = {}\n) => {\n const query = useQuery({\n ...abilityOptions,\n ...options\n });\n\n const userCanViewLoyalty = useMemo(\n () =>\n !!(\n isDefined(query.data) &&\n isDefined(query.data.rules?.loyaltyTransaction) &&\n query.data.rules.loyaltyTransaction.find(\n (lt) => lt.can && lt.actions.find((a) => a === 'read')\n )\n ),\n [query.data]\n );\n\n return {\n ...query,\n userCanViewLoyalty\n };\n};\n\nexport default useAbility;\n","import { useQuery, UseQueryOptions } from 'react-query';\nimport { getPractice, QueryKeys } from 'src/api';\nimport Practice from 'src/interfaces/api/Practice';\nimport { useUser } from 'src/providers/ClientProvider';\n\ntype Options = Omit, 'queryKey' | 'queryFn'>;\n\nexport const practiceOptions = (\n practiceId?: Practice['id']\n): UseQueryOptions => ({\n queryKey: [QueryKeys.PRACTICE, practiceId],\n queryFn: async () => getPractice(practiceId)\n});\n\nconst usePractice = (options?: Options) => {\n const { user } = useUser();\n return useQuery({\n ...practiceOptions(user?.practiceId),\n ...options\n });\n};\n\nexport default usePractice;\n","import { useQuery } from 'react-query';\nimport { QueryKeys, getPracticeInfo } from 'src/api';\nimport Practice from 'src/interfaces/api/Practice';\nimport type { Options } from './types';\nimport { ApiPracticeInfo } from 'src/interfaces';\n\nconst usePracticeInfo = (practiceShortName?: Practice['shortName'], options?: Options) => {\n return useQuery({\n queryKey: [QueryKeys.PRACTICE_INFO, practiceShortName],\n queryFn: async (): Promise => {\n if (!practiceShortName) {\n return;\n }\n return await getPracticeInfo(practiceShortName);\n },\n enabled: !!practiceShortName,\n ...options\n });\n};\n\nexport default usePracticeInfo;\n","import { useNavigation } from '@react-navigation/native';\nimport { useCallback } from 'react';\nimport { useQuery, UseQueryOptions } from 'react-query';\nimport { getRequestSetting, QueryKeys } from 'src/api';\nimport { Patient } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\nimport RequestSetting from 'src/interfaces/api/RequestSetting';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { openWebBrowser } from 'src/utils';\nimport usePracticeInfo from './usePracticeInfo';\nimport usePractice from './usePractice';\n\nexport const requestSettingsOptions = (\n practiceId: Practice['id']\n): UseQueryOptions => ({\n queryKey: [QueryKeys.REQUEST_SETTING, practiceId],\n queryFn: async () => await getRequestSetting(practiceId)\n});\n\nconst useRequestSetting = () => {\n const { user } = useUser();\n const { navigate } = useNavigation();\n const practiceQuery = usePractice();\n const practiceInfoQuery = usePracticeInfo(practiceQuery.data?.shortName);\n\n const queryResults = useQuery(requestSettingsOptions(user.practiceId));\n\n const requestAppointment = useCallback(\n (patientId?: Patient['patientId']) => {\n if (!queryResults.data || queryResults.data?.appointmentRequestsDisabled) {\n return;\n }\n if (\n queryResults.data.appointmentRequestOverride &&\n queryResults.data.appointmentRequestOverrideUrl\n ) {\n openWebBrowser(queryResults.data.appointmentRequestOverrideUrl);\n } else {\n navigate(Screens.ONLINE_BOOKING, {\n patientId\n });\n }\n },\n [navigate, queryResults.data]\n );\n\n const requestRefill = useCallback(\n (callback: () => void) => {\n if (!queryResults.data || queryResults.data?.refillRequestsDisabled) {\n return;\n }\n if (queryResults.data.refillRequestOverride && queryResults.data.refillRequestOverrideUrl) {\n openWebBrowser(queryResults.data.refillRequestOverrideUrl);\n } else {\n callback();\n }\n },\n [queryResults.data]\n );\n\n return {\n ...queryResults,\n requestAppointment,\n requestRefill,\n onlineBookingEnabled: practiceInfoQuery.data?.onlineBooking,\n isFetching: queryResults.isFetching || practiceQuery.isFetching || practiceInfoQuery.isFetching,\n isLoading: queryResults.isLoading || practiceQuery.isLoading || practiceInfoQuery.isLoading,\n isFetched: queryResults.isFetched && practiceQuery.isFetched && practiceInfoQuery.isFetched\n };\n};\n\nexport default useRequestSetting;\n","import jwtDecode from 'jwt-decode';\nimport moment from 'moment';\nimport { TokenPayload } from './type';\n\nconst isTokenValid = (token?: string): token is string => {\n if (!token?.length) return false;\n try {\n const decoded = jwtDecode(token);\n const expiresLater = moment.utc(decoded.expires_at, 'YYYY-MM-DD HH:mm:ss').isAfter();\n return !!decoded.expires_at && !!decoded.user_id && expiresLater;\n } catch {\n return false;\n }\n};\n\nexport default isTokenValid;\n","import jwtDecode from 'jwt-decode';\nimport moment from 'moment';\nimport isTokenValid from './isTokenValid';\nimport { TokenPayload } from './type';\n\nconst MINIMUM_VALIDATION_PERIOD = 29;\n\nconst shouldRefreshToken = (token?: string): token is string => {\n try {\n const isValid = isTokenValid(token);\n if (!isValid) return false;\n\n const decoded = jwtDecode(token);\n const minimumDaysFromNow = moment().add(MINIMUM_VALIDATION_PERIOD, 'days');\n return moment.utc(decoded.expires_at, 'YYYY-MM-DD HH:mm:ss').isSameOrBefore(minimumDaysFromNow);\n } catch {\n return false;\n }\n};\n\nexport default shouldRefreshToken;\n","import { useMemo } from 'react';\nimport { useMutation, useQuery } from 'react-query';\nimport { AsyncStorageKeys } from 'src/api';\nimport { isDefined, storage } from 'src/utils';\n\n/**\n * Hook used to persist data in local/async storage. If used consistently, allows components to always have the most recent version of the stored data.\n *\n * @param key AsyncStorageKey. Required\n * @param placeholderData data use before the requested data has been pulled from storage. Optional.\n * @returns [data, setData]\n */\nfunction useStorage(\n key: AsyncStorageKeys | [AsyncStorageKeys, ...Array]\n): [T | undefined, (value: T | undefined) => void, boolean];\nfunction useStorage(\n key: AsyncStorageKeys | [AsyncStorageKeys, ...Array],\n placeholderData: T\n): [T, (value: T | undefined) => void, boolean];\nfunction useStorage(\n key: AsyncStorageKeys | [AsyncStorageKeys, ...Array],\n placeholderData?: T\n): [T | undefined, (value: T | undefined) => void, boolean] {\n const storageKey = useMemo(() => (Array.isArray(key) ? key.join(',') : key), [key]);\n\n const { data, remove, isFetched } = useQuery({\n queryKey: [key, 'AsyncStorage', 'read'],\n queryFn: async () => await storage.getTypedItem(storageKey)\n });\n\n const { mutate } = useMutation({\n mutationKey: [key, 'AsyncStorage', 'write'],\n mutationFn: async (value: T | undefined) => {\n if (isDefined(value)) {\n await storage.setTypedItem(storageKey, value);\n } else {\n await storage.removeItem(storageKey);\n }\n },\n onSuccess: () => {\n remove();\n }\n });\n\n return [data ?? placeholderData, mutate, isFetched];\n}\n\nexport default useStorage;\n","import { useEffect, useState } from 'react';\nimport { AppState } from 'react-native';\n\n/**\n * A hook that listens to the app state and returns the current state.\n */\nconst useAppState = () => {\n const [appState, setAppState] = useState(AppState.currentState);\n useEffect(() => {\n const listener = AppState.addEventListener('change', setAppState);\n return listener.remove;\n }, []);\n return appState;\n};\n\nexport default useAppState;\n","import { AxiosError } from 'axios';\nimport jwtDecode from 'jwt-decode';\nimport sentry from 'src/utils/sentry';\nimport * as SecureStore from 'expo-secure-store';\nimport { AsyncStorageKeys, ExtendedSignInRequest, MutationKeys } from 'src/api';\nimport { TokenPayload } from './token/type';\nimport { announcementOptions } from 'src/hooks/react-query/useAnnouncements';\nimport { availablePracticesOptions } from 'src/hooks/react-query/useAvailablePractices';\nimport { practiceConfigurationOptions } from 'src/hooks/react-query/usePracticeConfiguration';\nimport { prescriptionsOptions } from 'src/hooks/react-query/usePrescriptions';\nimport { remindersOptions } from 'src/hooks/react-query/useReminders';\nimport { appointmentsOptions } from 'src/scenes/Appointments/AppointmentsRoot/hooks/useAppointments';\nimport { abilityOptions } from 'src/hooks/react-query/useAbility';\nimport { practiceOptions } from 'src/hooks/react-query/usePractice';\nimport { requestSettingsOptions } from 'src/hooks/react-query/useRequestSetting';\nimport { Client } from 'src/interfaces';\nimport { isDefined, queryClient, storage } from 'src/utils';\nimport { useMemo } from 'react';\nimport { isTokenValid, shouldRefreshToken } from './token';\nimport { AuthStatus } from './model';\nimport { useIsMutating } from 'react-query';\nimport useStorage from 'src/hooks/useStorage';\nimport useAppState from 'src/hooks/useAppState';\nimport { IS_WEB } from 'src/constants';\n\nexport const unpackToken = (token: string): TokenPayload => jwtDecode(token);\n\nexport const captureAxiosException = (e: AxiosError): void => {\n e.name = `Api Error - ${e.config?.url ?? 'Unknown'}`;\n sentry.addBreadcrumb({\n type: 'error',\n message: e.message,\n category: 'xhr',\n data: {\n params: JSON.stringify(e.config?.params),\n response: JSON.stringify(e.response?.data),\n request: JSON.stringify(e.request?.data),\n statusCode: e.response?.status\n }\n });\n};\n\nexport const secureStoreSaveSignInCredentials = async (signInRequest: ExtendedSignInRequest) =>\n IS_WEB\n ? []\n : Promise.all([\n SecureStore.setItemAsync('email', signInRequest.email),\n SecureStore.setItemAsync('password', signInRequest.password),\n SecureStore.setItemAsync('practiceId', signInRequest.practiceId.toString()),\n SecureStore.setItemAsync('id', signInRequest.id.toString())\n ]);\nexport const secureStoreGetSignInCredentials = async (): Promise<\n ExtendedSignInRequest | undefined\n> => {\n if (IS_WEB) return;\n const store = await Promise.all([\n SecureStore.getItemAsync('email'),\n SecureStore.getItemAsync('password'),\n SecureStore.getItemAsync('practiceId'),\n SecureStore.getItemAsync('id')\n ]);\n const [email, password, practiceId, id] = store;\n if (!email || !password || !practiceId || !id) return;\n return {\n email,\n password,\n id: parseInt(id),\n practiceId: parseInt(practiceId ?? '0'),\n isBiometrics: true\n };\n};\n\nexport const secureStoreDeleteCredentials = async () => {\n if (IS_WEB) return;\n await Promise.all([\n SecureStore.deleteItemAsync('email'),\n SecureStore.deleteItemAsync('password'),\n SecureStore.deleteItemAsync('practiceId'),\n SecureStore.deleteItemAsync('id')\n ]);\n};\n\nexport const prefetchQueries = async (user: Client) =>\n await Promise.all([\n queryClient.prefetchQuery(announcementOptions),\n queryClient.prefetchQuery(availablePracticesOptions(user.email)),\n queryClient.prefetchQuery(prescriptionsOptions),\n queryClient.prefetchQuery(remindersOptions),\n queryClient.prefetchInfiniteQuery(appointmentsOptions()),\n queryClient.prefetchQuery(practiceConfigurationOptions(user.practiceId)),\n queryClient.prefetchQuery(abilityOptions),\n queryClient.prefetchQuery(practiceOptions(user.practiceId)),\n queryClient.prefetchQuery(requestSettingsOptions(user.practiceId))\n ]);\n\nexport const asyncSetToken = async (token: string | undefined) => {\n if (!token) await storage.removeItem(AsyncStorageKeys.TOKEN);\n else await storage.setTypedItem(AsyncStorageKeys.TOKEN, token ?? null);\n await queryClient.invalidateQueries(AsyncStorageKeys.TOKEN);\n};\n\nexport const useLoginState = () => {\n const [token, , tokenFetched] = useStorage(AsyncStorageKeys.TOKEN);\n const [rememberMe] = useStorage(AsyncStorageKeys.REMEMBER_ME, false);\n const isLoggingIn = !!useIsMutating(MutationKeys.AUTHENTICATION);\n const isRefreshing = !!useIsMutating(MutationKeys.SESSION_RENEW);\n const appState = useAppState(); // Used to trigger a check on the login state when the app comes back from the background\n\n const [biometricAuthAppSetting, , biometricAuthFetched] = useStorage(\n AsyncStorageKeys.BIOMETRIC_AUTH_APP_SETTING\n );\n\n const state = useMemo(() => {\n if (__DEV__) {\n console.debug(`Triggering login state check from app state: ${appState}`);\n }\n\n const userIsMutating = isLoggingIn || isRefreshing || !tokenFetched || !biometricAuthFetched;\n const isLoggedIn = isTokenValid(token) && !userIsMutating;\n const shouldRefresh =\n (rememberMe || biometricAuthAppSetting) && shouldRefreshToken(token) && !isLoggingIn;\n return {\n hasToken: !!token,\n isLoggedIn,\n shouldRefresh,\n token,\n userIsMutating,\n biometricAuthAppSetting\n };\n }, [\n isLoggingIn,\n isRefreshing,\n tokenFetched,\n biometricAuthFetched,\n token,\n rememberMe,\n biometricAuthAppSetting,\n appState\n ]);\n\n return state;\n};\n\ninterface Args\n extends Pick, 'token' | 'isLoggedIn' | 'userIsMutating'> {\n themeFetched: boolean;\n authStatus: AuthStatus | undefined;\n hasError: boolean;\n navReady: boolean;\n userFetched: boolean;\n}\n\nexport const isAppReady = ({\n themeFetched,\n authStatus,\n hasError,\n token,\n navReady,\n userIsMutating,\n userFetched\n}: Args) => {\n const undefinedClientAllowed =\n isDefined(authStatus) &&\n [\n AuthStatus.FORBIDDEN,\n AuthStatus.NEEDS_BIOMETRIC,\n AuthStatus.NEEDS_PASSWORD_RESET,\n AuthStatus.NEEDS_TERMS,\n AuthStatus.NEEDS_UPGRADE\n ].includes(authStatus);\n\n const userItemsFetched = themeFetched && !userIsMutating && userFetched;\n const userIsReady = !token || userItemsFetched || undefinedClientAllowed;\n const ready = userIsReady || !!hasError;\n return ready && navReady;\n};\n","import { useQuery, UseQueryOptions } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { endpoint } from 'src/constants';\nimport { PracticeTheme } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\nimport { apiClient } from 'src/utils/axios';\n\ntype Options = Omit<\n UseQueryOptions<\n PracticeTheme | undefined,\n unknown,\n PracticeTheme | undefined,\n Array\n >,\n 'queryFn' | 'queryKey'\n>;\n\nconst usePracticeTheme = (practiceId?: Practice['id'], options?: Options) => {\n return useQuery({\n queryKey: [QueryKeys.CUSTOM_THEME, practiceId],\n queryFn: async () => {\n if (!practiceId) {\n return;\n }\n return (\n await apiClient.get(\n endpoint('CUSTOM_THEME', {\n practiceId\n }),\n {\n params: {\n mobile: true\n }\n }\n )\n ).data;\n },\n ...options\n });\n};\n\nexport default usePracticeTheme;\n","import { uniqueId } from 'lodash';\nimport sentry from './sentry';\n\nconst wait = async (delay: number) => new Promise((resolve) => setTimeout(resolve, delay));\n\ninterface RetryOptions {\n delay: number;\n tries: number;\n\n requestId?: string;\n\n /**\n * onFetchError is only called when a fetch throws on AbortError, NotAllowedError or TypeError.\n * https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch#exceptions\n *\n * onFetchError is expected to throw.\n *\n * @param reason\n * @returns never\n */\n onFetchError?: (reason: any) => never | PromiseLike;\n\n onfulfilled?: (value: Response) => Response | PromiseLike;\n}\nconst fetchRetry = async (\n url: string,\n retryOptions: RetryOptions,\n fetchOptions?: RequestInit\n): Promise => {\n const requestId = retryOptions.requestId ?? uniqueId();\n const onError = async (err: any) => {\n if (fetchOptions?.signal?.aborted) {\n sentry.addBreadcrumb({\n message: `The request was aborted.`\n });\n throw err;\n } else if (retryOptions.tries <= 0) {\n sentry.addBreadcrumb({\n type: 'error',\n message: `Retry attempts exceeded.`,\n data: { url, requestId }\n });\n throw err;\n }\n sentry.addBreadcrumb({\n message: `Tries remaining: ${retryOptions.tries}`,\n data: { url, requestId }\n });\n return wait(retryOptions.delay).then(async () =>\n fetchRetry(url, { ...retryOptions, tries: retryOptions.tries - 1, requestId }, fetchOptions)\n );\n };\n\n return fetch(url, fetchOptions)\n .catch(retryOptions.onFetchError) // If this is entered, it must always rethrow an error.\n .then(retryOptions.onfulfilled)\n .catch(onError);\n};\n\nexport default fetchRetry;\n","import config from 'src/environment';\nimport fetchRetry from '../fetchRetry';\nimport sentry from 'src/utils/sentry';\nimport { pick, uniqueId } from 'lodash';\n\nexport const resolveSendGridLink = async (source: string, signal?: AbortSignal) => {\n const requestId = uniqueId();\n if (validateHostname(source)) {\n return { url: await followRedirect(source, signal, requestId), source };\n } else {\n return { url: source };\n }\n};\n\nexport const validateHostname = (url: string) => {\n const parsed = new URL(url);\n if (parsed.protocol !== 'https:') return false;\n for (const domain of config.DEEPLINK_REDIRECT_DOMAINS) {\n if (parsed.hostname === domain) return true;\n }\n return false;\n};\n\nexport const followRedirect = async (url: string, signal?: AbortSignal, requestId?: string) => {\n sentry.addBreadcrumb({\n message: `Resolving deeplink`,\n category: 'deeplink',\n data: { url, requestId }\n });\n try {\n const response = await fetchRetry(\n url,\n {\n delay: 250,\n tries: 3,\n requestId,\n onfulfilled: async (response) => {\n if (!response.ok) {\n const error = new Error(`Status not ok`);\n error.name = `Deeplink Resolution Error`;\n await reportErrorAndResponse(response, error, requestId);\n throw error;\n }\n if (!response.url) {\n const error = new Error(`Missing Url`);\n error.name = `Deeplink Resolution Error`;\n await reportErrorAndResponse(response, error, requestId);\n throw error;\n }\n return response;\n },\n onFetchError: async (err) => {\n await reportErrorAndResponse(response, err, requestId);\n throw err;\n }\n },\n {\n redirect: 'follow',\n signal\n }\n );\n return response.url;\n } catch (error) {\n sentry.captureException(error, {\n tags: {\n section: 'deeplink'\n }\n });\n throw error;\n }\n};\n\nconst reportErrorAndResponse = async (\n response: Response | undefined,\n error: Error,\n requestId?: string\n) => {\n const text = await response?.text?.();\n const data = {\n response: {\n ...pick(response, ['type', 'status', 'ok', 'statusText', 'headers', 'url', 'statusText']),\n requestId,\n responseData: text\n }\n };\n sentry.addBreadcrumb({\n message: `${error.name}: ${error.message}`,\n category: 'deeplink',\n type: 'error',\n data\n });\n};\n\nexport default resolveSendGridLink;\n","import { t } from 'i18next';\nimport { SetStateAction } from 'react';\nimport Toast from 'react-native-toast-message';\nimport resolveSendGridLink, { validateHostname } from 'src/utils/resolveSendGridLink';\nimport sentry from 'src/utils/sentry';\nimport { LINKING_ERRORS } from './helper';\nimport { UrlInfo } from './model';\nimport { canOpenURL, openURL } from 'expo-linking';\n\n/**\n * Attempts to resolve a url to handle, catching and displaying errors if needed.\n * @param url\n * @param setUrlToHandle\n * @param signal\n * @returns\n */\nexport const resolveOrCatchSendGridLink = async (\n url: string | null,\n setUrlToHandle: (value: SetStateAction) => void,\n signal: AbortSignal\n) => {\n if (url) {\n return resolveSendGridLink(url, signal)\n .then((destination) => {\n handleSetUrlOrAbort(destination, setUrlToHandle, signal, true);\n })\n .catch(async (e) => {\n const shouldHandleExternally = validateHostname(url) && (await canOpenURL(url));\n const cause = e.cause as Response;\n const erroredUrl = { url: '', source: url };\n\n if (shouldHandleExternally) {\n sentry.addBreadcrumb({\n message: `Directing the user to browser for ${url}`,\n data: { url, cause: cause?.status },\n category: 'deeplink',\n type: 'error'\n });\n setTimeout(() => {\n if (!signal?.aborted) void openURL(url);\n }, 2000);\n }\n\n if (!signal?.aborted) {\n reportError(\n erroredUrl,\n cause ? LINKING_ERRORS.INVALID : LINKING_ERRORS.NETWORK,\n cause?.status ?? 'Network',\n e\n );\n displayDeeplinkError(\n erroredUrl,\n shouldHandleExternally\n ? LINKING_ERRORS.EXTERNAL\n : cause\n ? LINKING_ERRORS.INVALID\n : LINKING_ERRORS.NETWORK,\n cause?.status ?? 'Network'\n );\n }\n\n handleSetUrlOrAbort(erroredUrl, setUrlToHandle, signal, false);\n });\n }\n};\n\n/**\n * Sets the url to handle unless the fetch call has been aborted\n * @param destination\n * @param setUrlToHandle\n * @param signal\n */\nconst handleSetUrlOrAbort = (\n destination: UrlInfo,\n setUrlToHandle: (value: SetStateAction) => void,\n signal: AbortSignal,\n success: boolean\n) => {\n let message: string = '';\n if (success) {\n if (signal.aborted) {\n message = `Deeplink resolution was cancelled by another call.`;\n } else {\n message = `Deeplink was resolved.`;\n }\n } else {\n message = `Deeplink resolution failed.`;\n }\n sentry.addBreadcrumb({\n message,\n data: destination,\n category: 'deeplink',\n type: signal.aborted || success ? 'debug' : 'error'\n });\n\n if (!signal.aborted) {\n setUrlToHandle(destination.url ? destination : undefined);\n }\n};\n\n/**\n * Captures an error and displays it to the user.\n * @param urlToHandle\n * @param type\n */\nexport const displayDeeplinkError = (urlToHandle: UrlInfo, type: LINKING_ERRORS, code?: number) => {\n Toast.show({\n type: 'error',\n text1: t(`errors.${type}.name`, { ns: 'deeplinking', code }),\n text2: `${t(`errors.${type}.message`, {\n url: urlToHandle.url,\n ns: 'deeplinking'\n })}`\n });\n};\n\nexport const reportError = (\n urlToHandle: UrlInfo,\n type: LINKING_ERRORS,\n code?: number,\n e?: Error\n) => {\n const error = new Error(\n `${t(`errors.${type}.message`, {\n url: urlToHandle.url,\n ns: 'deeplinking'\n })}`\n );\n error.name = t(`errors.${type}.name`, { lng: 'en', ns: 'deeplinking', code });\n error.cause = `${urlToHandle.source ?? urlToHandle.url} ${e?.message ?? ''}`;\n sentry.captureException(error);\n};\n","import { useLinkTo } from '@react-navigation/native';\nimport { useState, useEffect, useRef, useCallback, useLayoutEffect } from 'react';\nimport { Linking } from 'react-native';\nimport { SwitchPracticeResponse } from 'src/api';\nimport sentry from 'src/utils/sentry';\nimport { AuthStatus } from '../../providers/AuthProvider/model';\nimport {\n qualifiedAuthStatus,\n shouldSwitchUsers,\n handlePracticeSwitch,\n isLoginPath,\n urlAllowsNoAuth,\n pathAndParams,\n urlEmitter,\n urlInfo,\n LINKING_ERRORS,\n cleanURL\n} from './helper';\nimport { UrlInfo } from './model';\nimport { appLinkingPaths } from 'src/utils';\nimport { ROOT_STACK_PATHS } from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { reportError, displayDeeplinkError, resolveOrCatchSendGridLink } from './errorHandlers';\n\ninterface InitialDeeplinkProps {\n /**\n * Has the client profile been fetched from the api.\n */\n ready: boolean;\n logOut: (switchPractice?: SwitchPracticeResponse | undefined) => Promise;\n authStatus: AuthStatus | undefined;\n}\n\n/**\n * If the user is not authenticated, useDeeplink will capture the deeplink.\n * Once the user is authenticated, it will navigate to the stored deeplink.\n */\nconst useDeeplink = ({ ready, authStatus, logOut: applyPractice }: InitialDeeplinkProps) => {\n const [urlToHandle, setUrlToHandle] = useState();\n const linkTo = useRef(useLinkTo());\n\n useEffect(() => {\n // Handles urls passed from notifications to the urlEmitter\n if (urlInfo) {\n setUrlToHandle(urlInfo);\n }\n const callback = (urlInfo: UrlInfo) => {\n setUrlToHandle(urlInfo);\n };\n urlEmitter.on('url', callback);\n return () => {\n urlEmitter.removeListener('url', callback);\n };\n }, []);\n\n /**\n *Parse and store a deeplink\n */\n useLayoutEffect(() => {\n if (Linking) {\n const abortCtl = { ctl: new AbortController() };\n const callback = (url: string | null) => {\n if (!abortCtl.ctl.signal.aborted) abortCtl.ctl.abort();\n abortCtl.ctl = new AbortController();\n void resolveOrCatchSendGridLink(url, setUrlToHandle, abortCtl.ctl.signal);\n };\n void Linking.getInitialURL().then(async (url) => callback(url));\n const sub = Linking.addEventListener('url', ({ url }) => callback(url));\n return () => {\n try {\n if (sub.remove) {\n sub.remove();\n } else {\n Linking.removeAllListeners('url');\n }\n } catch {\n sentry.addBreadcrumb({\n message: 'Failed to remove deeplink listener',\n category: 'deeplink',\n type: 'error'\n });\n }\n };\n }\n }, []);\n\n /**\n * Once the user is logged in, navigate to the deeplink.\n */\n const handleDeeplink = useCallback(async () => {\n if (!ready || !urlToHandle || !qualifiedAuthStatus(authStatus)) return;\n const isLoggedIn = authStatus === AuthStatus.AUTHENTICATED;\n if (isLoggedIn) {\n if (await shouldSwitchUsers(urlToHandle)) {\n return handlePracticeSwitch(urlToHandle, applyPractice);\n }\n }\n const url = cleanURL(urlToHandle.url);\n if (isLoginPath(url)) return;\n if (!appLinkingPaths(ROOT_STACK_PATHS).includes(url.pathname.replace(/^\\//, ''))) {\n displayDeeplinkError(urlToHandle, LINKING_ERRORS.NOT_FOUND);\n reportError(urlToHandle, LINKING_ERRORS.NOT_FOUND);\n setUrlToHandle(undefined);\n return;\n }\n if (!isLoggedIn && !urlAllowsNoAuth(url)) {\n displayDeeplinkError(urlToHandle, LINKING_ERRORS.UNAUTHORIZED);\n return;\n }\n try {\n linkTo.current(pathAndParams(url));\n } catch (e) {\n displayDeeplinkError(urlToHandle, LINKING_ERRORS.NAVIGATION);\n reportError(urlToHandle, LINKING_ERRORS.NAVIGATION, undefined, e as Error);\n } finally {\n setUrlToHandle(undefined);\n }\n }, [ready, urlToHandle, applyPractice, authStatus]);\n\n useEffect(() => {\n void handleDeeplink();\n }, [handleDeeplink]);\n};\n\nexport default useDeeplink;\n","import React, {\n createContext,\n Dispatch,\n PropsWithChildren,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { defaultLightTheme, defaultDarkTheme } from 'src/theme';\nimport styled, { ThemeProvider } from 'styled-components/native';\nimport { Provider as PaperProvider } from 'react-native-paper';\nimport { useColorScheme } from 'react-native';\nimport useViewMode from 'src/hooks/useViewMode';\nimport _ from 'lodash';\nimport { BasicColors } from 'src/interfaces';\nimport { AppTheme } from 'src/types/paper';\n\nexport interface Context extends AppTheme {\n setThemeSet: Dispatch>;\n removePreview: () => void;\n previewThemeSet: Dispatch>;\n applyDefaultTheme: () => void;\n}\n\ninterface ThemeSet {\n dark: BasicColors;\n light: BasicColors;\n}\n\nconst defaultThemeColors: ThemeSet = {\n light: defaultLightTheme.colors,\n dark: defaultDarkTheme.colors\n};\n\nexport const defaultContext: Context = {\n ...defaultLightTheme,\n setThemeSet: _.noop,\n removePreview: _.noop,\n previewThemeSet: _.noop,\n applyDefaultTheme: _.noop\n};\n\nexport const ThemeContext = createContext(defaultContext);\n\nexport const useAppTheme = (): Context => useContext(ThemeContext);\nexport const ThemeConsumer = ThemeContext.Consumer;\n\nconst AppThemeProvider: React.FC = ({ children }) => {\n const colorScheme = useColorScheme();\n const viewMode = useViewMode();\n\n const [themeSet, setThemeSet] = useState(defaultThemeColors);\n const [previewSet, previewThemeSet] = useState();\n\n const removePreview = useCallback(() => previewThemeSet(undefined), []);\n const applyDefaultTheme = useCallback(() => setThemeSet(defaultThemeColors), []);\n\n useEffect(() => {\n previewThemeSet(undefined);\n }, [themeSet]);\n\n const theme: AppTheme = useMemo(() => {\n const t = previewSet ?? themeSet;\n if (colorScheme === 'light') {\n return {\n ...defaultLightTheme,\n colors: _.defaultsDeep(t.light, defaultThemeColors.light),\n viewMode\n };\n }\n return {\n ...defaultDarkTheme,\n colors: _.defaultsDeep(t.dark, defaultThemeColors.dark),\n viewMode\n };\n }, [previewSet, themeSet, colorScheme, viewMode]);\n\n const context = useMemo(\n () => ({\n ...theme,\n setThemeSet,\n previewThemeSet,\n removePreview,\n applyDefaultTheme\n }),\n [theme, setThemeSet, previewThemeSet, removePreview, applyDefaultTheme]\n );\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport default AppThemeProvider;\n\nconst PaperContainer = styled.View`\n flex: 1;\n overflow: hidden;\n`;\n","import { NotificationPromptContextType } from './types';\n\nconst defaultContext: NotificationPromptContextType = {\n hasPrompted: true,\n setHasPrompted: () => {},\n requestNotificationPermission: () => {},\n setIsReady: () => {}\n};\n\nexport default defaultContext;\n","import React, { PropsWithChildren } from 'react';\nimport defaultContext from './defaultContext';\n\nconst NotificationPromptContext = React.createContext(defaultContext);\nexport const useNotificationPrompt = () => React.useContext(NotificationPromptContext);\n\nconst NotificationPromptProvider: React.FC = ({ children }) => {\n return <>{children};\n};\n\nexport default NotificationPromptProvider;\n","import { useEffect, useState } from 'react';\nimport * as LocalAuthentication from 'expo-local-authentication';\n\nexport interface UseBiometricsHook {\n canUseBiometrics: boolean | undefined;\n supportsFaceRecognition: boolean;\n}\nconst useBiometrics = (): UseBiometricsHook => {\n const [canUseBiometrics, setCanUseBiometrics] = useState();\n const [supportsFaceRecognition, setSupportsFaceRecognition] = useState(false);\n\n useEffect(() => {\n void LocalAuthentication.hasHardwareAsync().then((hasHardware) => {\n if (hasHardware) {\n void LocalAuthentication.isEnrolledAsync().then((isEnrolled) => {\n setCanUseBiometrics(isEnrolled);\n });\n }\n });\n\n void LocalAuthentication.supportedAuthenticationTypesAsync().then((localAuthTypes) => {\n setSupportsFaceRecognition(\n !!localAuthTypes?.includes(LocalAuthentication.AuthenticationType.FACIAL_RECOGNITION)\n );\n });\n }, []);\n\n return {\n canUseBiometrics,\n supportsFaceRecognition\n };\n};\n\nexport default useBiometrics;\n","import _, { pick } from 'lodash';\nimport {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useState,\n useEffect\n} from 'react';\nimport { useMutation, useQuery } from 'react-query';\nimport {\n AsyncStorageKeys,\n MutationKeys,\n QueryKeys,\n getClient,\n register,\n signIn,\n renewSession,\n SwitchPracticeResponse,\n SwitchPracticeRequest,\n switchPractice,\n ExtendedSignInRequest\n} from 'src/api';\nimport { isDefined, queryClient, storage } from 'src/utils';\nimport {\n asyncSetToken,\n captureAxiosException,\n isAppReady,\n prefetchQueries,\n secureStoreGetSignInCredentials,\n secureStoreSaveSignInCredentials,\n useLoginState\n} from './helper';\nimport { apiClient, responseFailureInterceptor } from 'src/utils/axios';\nimport { Context, AuthStatus } from './model';\nimport usePracticeTheme from 'src/hooks/react-query/usePracticeTheme';\nimport useDeeplink from '../../hooks/useDeeplink';\nimport { useAppTheme } from '../AppThemeProvider';\nimport { useTranslation } from 'react-i18next';\nimport sentry from 'src/utils/sentry';\nimport { EmailVerificationStatus, IUserSignInResponse } from 'src/interfaces';\nimport { AxiosError } from 'axios';\nimport { endpoint } from 'src/constants';\nimport jwtDecode from 'jwt-decode';\nimport { TokenPayload } from './token/type';\nimport { useNotificationPrompt } from '../NotificationPromptProvider';\nimport useBiometrics from 'src/hooks/useBiometrics';\nimport { practiceOptions } from 'src/hooks/react-query/usePractice';\n\nexport * from './model';\n\nconst defaultContext: Context = {\n token: undefined,\n ready: false,\n logIn: Promise.resolve,\n logOut: Promise.resolve,\n signUp: Promise.resolve,\n setError: _.noop,\n resetError: _.noop,\n isError: false,\n _user: undefined,\n authStatus: undefined,\n isLoggingOut: false,\n error: undefined,\n setAuthStatus: _.noop,\n isLoggedIn: false,\n practice: undefined\n};\n\nconst AuthContext = createContext(defaultContext);\n\nexport const useAuth = (): Context => useContext(AuthContext);\n\ninterface AuthProviderProps extends PropsWithChildren {\n isNavReady: boolean;\n}\n\nexport const AuthProvider: React.FC = ({ children, isNavReady: navReady }) => {\n const { t } = useTranslation();\n const state = useLoginState();\n const [error, setError] = useState();\n const [authStatus, setAuthStatus] = useState();\n const { canUseBiometrics } = useBiometrics();\n\n const prepareAuthenticatedState = useCallback(async (data: IUserSignInResponse) => {\n await asyncSetToken(data.token);\n setError(undefined);\n }, []);\n\n const { mutateAsync: logIn, isError: isLoginError } = useMutation(MutationKeys.AUTHENTICATION, {\n mutationFn: async (signInRequest: ExtendedSignInRequest) => {\n setError(undefined);\n sentry.setUser({\n id: signInRequest.id.toString(),\n email: signInRequest.email,\n practiceId: signInRequest.practiceId\n });\n try {\n const data = await signIn(pick(signInRequest, ['email', 'password', 'practiceId']));\n await prepareAuthenticatedState(data);\n\n if (signInRequest.id !== data.id) {\n const request: SwitchPracticeRequest = { userId: signInRequest.id };\n const data = await switchPractice(request);\n await logOut(data);\n }\n\n if (canUseBiometrics) {\n const storedCredentials = await secureStoreGetSignInCredentials();\n if (!storedCredentials || storedCredentials.password !== signInRequest.password) {\n await secureStoreSaveSignInCredentials(signInRequest);\n }\n }\n return data;\n } catch (e) {\n if (signInRequest.isBiometrics) {\n const error = new Error(t('login:error.biometricLoginError'));\n setError(error);\n throw error;\n } else {\n throw e as AxiosError;\n }\n }\n }\n });\n\n const { mutate: renew } = useMutation({\n mutationKey: MutationKeys.SESSION_RENEW,\n mutationFn: async () => {\n if (!state.token) {\n sentry.addBreadcrumb({\n message: 'Session renewal called without token.',\n category: 'auth',\n level: 'info'\n });\n setAuthStatus(AuthStatus.LOGGED_OUT);\n return;\n }\n const decodedToken = jwtDecode(state.token);\n sentry.setUser({\n id: decodedToken.user_id.toString()\n });\n const data = await renewSession();\n sentry.setUser({\n id: decodedToken.user_id.toString(),\n email: data.email,\n clientId: data.id,\n practiceId: data.practiceId\n });\n await prepareAuthenticatedState(data);\n }\n });\n\n const { mutateAsync: signUp } = useMutation(MutationKeys.SIGN_UP, {\n mutationFn: register\n });\n\n const biometricNotRequired =\n (isDefined(state.biometricAuthAppSetting) && !state.biometricAuthAppSetting) ||\n (isDefined(authStatus) && authStatus !== AuthStatus.NEEDS_BIOMETRIC);\n\n const {\n data: user,\n refetch: refetchUser,\n isFetched: userFetched\n } = useQuery([QueryKeys.CLIENT, state.token], {\n queryFn: async () => {\n if (!state.token) {\n sentry.addBreadcrumb({\n message: 'Client endpoint called without token.',\n category: 'auth',\n level: 'info'\n });\n setAuthStatus(AuthStatus.LOGGED_OUT);\n return;\n }\n const decodedToken = jwtDecode(state.token);\n sentry.setUser({\n id: decodedToken.user_id.toString()\n });\n const _user = await getClient();\n sentry.setUser({\n email: _user.email,\n id: decodedToken.user_id.toString(),\n clientId: _user.clientId,\n practiceId: _user.practiceId,\n confirmed: _user.emailVerificationStatus === EmailVerificationStatus.VERIFIED,\n clientFound: true,\n registered: true\n });\n await prefetchQueries(_user);\n setAuthStatus(AuthStatus.AUTHENTICATED);\n return _user;\n },\n enabled:\n state.isLoggedIn && !state.shouldRefresh && !state.userIsMutating && biometricNotRequired\n });\n\n const { setThemeSet, applyDefaultTheme } = useAppTheme();\n const { isFetched: themeFetched } = usePracticeTheme(user?.practiceId, {\n onSuccess: (themes) => {\n if (themes?.custom && themes?.useCustomTheme) {\n setThemeSet(themes.custom);\n } else {\n applyDefaultTheme();\n }\n },\n onError: applyDefaultTheme,\n enabled: state.isLoggedIn\n });\n\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const logOut = useCallback(async (data?: SwitchPracticeResponse) => {\n setIsLoggingOut(true);\n setAuthStatus(data?.token ? AuthStatus.SWITCHING_PRACTICE : AuthStatus.LOGGED_OUT);\n try {\n await asyncSetToken(data?.token);\n const storageKeys = await storage.getAllKeys();\n const clearKeys = storageKeys.filter(\n (k) =>\n ![AsyncStorageKeys.TUTORIALS, AsyncStorageKeys.LOCALE_PERSISTENCE_KEY].map(\n (key) => !k.includes(key)\n )\n );\n await Promise.all(clearKeys.map(async (key) => storage.removeItem(key)));\n await queryClient.clear();\n } finally {\n setIsLoggingOut(false);\n }\n }, []);\n\n const ready = isAppReady({\n themeFetched,\n authStatus,\n hasError: !!error,\n navReady,\n userFetched,\n ...state\n });\n\n const { setIsReady } = useNotificationPrompt();\n const expireSession = useCallback(() => {\n void logOut(undefined);\n const error = new Error(t('sessionExpired', { ns: 'onboardingErrors' }));\n setError(error);\n sentry.addBreadcrumb({\n message: 'Session expired',\n category: 'auth',\n level: 'warning'\n });\n }, [logOut, t]);\n\n const resetError = useCallback(async () => {\n setAuthStatus(undefined);\n setError(undefined);\n void refetchUser();\n }, [refetchUser]);\n\n /**\n * Handle refresh token\n */\n useEffect(() => {\n if (state.shouldRefresh) {\n renew();\n }\n }, [state.shouldRefresh, renew]);\n\n const needsInitialState = ready && !isDefined(authStatus);\n const isExpiredToken = state.hasToken && !state.isLoggedIn;\n const appCanBeReady =\n ready && (authStatus === AuthStatus.AUTHENTICATED || authStatus === AuthStatus.LOGGED_OUT);\n\n /**\n * Handles initial state\n */\n useEffect(() => {\n if (state.userIsMutating || authStatus === AuthStatus.NEEDS_BIOMETRIC) {\n return;\n }\n if (authStatus === undefined) {\n if (state.hasToken && state.biometricAuthAppSetting) {\n setAuthStatus(AuthStatus.NEEDS_BIOMETRIC);\n } else {\n setAuthStatus(state.isLoggedIn ? AuthStatus.AUTHENTICATED : AuthStatus.LOGGED_OUT);\n }\n } else if (isExpiredToken) {\n if (state.biometricAuthAppSetting) {\n setAuthStatus(AuthStatus.NEEDS_BIOMETRIC);\n } else expireSession();\n } else if (appCanBeReady) {\n setIsReady(true);\n }\n }, [\n state.userIsMutating,\n state.isLoggedIn,\n state.biometricAuthAppSetting,\n isExpiredToken,\n needsInitialState,\n appCanBeReady,\n expireSession,\n setIsReady,\n authStatus,\n ready,\n state.hasToken\n ]);\n\n /**\n * Intercept all requests and add the token to the header\n */\n useEffect(() => {\n const responseInterceptor = apiClient.interceptors.response.use(\n undefined,\n (e: AxiosError) => {\n captureAxiosException(e);\n const nextStatus = responseFailureInterceptor(e);\n if (nextStatus) setAuthStatus(nextStatus);\n if (e.response?.config.url !== endpoint('USERS_PASSWORD')) setError(e);\n throw e;\n }\n );\n const requestInterceptor = apiClient.interceptors.request.use(async (config) => {\n if (config.url !== endpoint('USERS_SIGN_IN')) {\n const token = await storage.getTypedItem(AsyncStorageKeys.TOKEN);\n if (token) config.headers.Authorization = `Bearer ${token}`;\n }\n return config;\n });\n return () => {\n apiClient.interceptors.response.eject(responseInterceptor);\n apiClient.interceptors.request.eject(requestInterceptor);\n };\n }, [setAuthStatus]);\n\n const { data: practice } = useQuery({\n ...practiceOptions(user?.practiceId),\n enabled: !!user\n });\n\n useDeeplink({\n logOut,\n ready,\n authStatus\n });\n\n const context: Context = {\n isLoggingOut,\n token: state.token,\n ready: ready && isDefined(authStatus) && !isLoggingOut,\n logIn,\n logOut,\n signUp,\n setError,\n resetError,\n isError: isLoginError,\n error,\n _user: user,\n authStatus,\n setAuthStatus,\n practice,\n isLoggedIn: !!state.isLoggedIn\n };\n\n return {children};\n};\n","import { StyleSheet } from 'react-native';\nimport { MD2DarkTheme as DarkTheme } from 'react-native-paper';\nimport { MOBILE_WIDTH_MAX, TABLET_WIDTH_LANDSCAPE_MAX, Size, Margin } from 'src/constants';\nimport palette from './palette';\nimport { defaultDarkTheme, defaultLightTheme } from './themes';\nimport { fonts, FontSize, Weight } from './typography';\n\n/**\n * Global container styling\n */\nexport const containers = StyleSheet.create({\n default: {\n flex: 1,\n margin: 4\n },\n webOrTablet: {\n width: MOBILE_WIDTH_MAX,\n alignSelf: 'center'\n },\n shadow: {\n shadowColor: palette.BLACK_OPACITY_30,\n shadowRadius: Size.X2_S,\n shadowOpacity: 0.4,\n shadowOffset: {\n height: Size.X3_S,\n width: 0\n },\n elevation: Size.X2_S\n },\n shadowDarker: {\n shadowColor: palette.BLACK,\n shadowRadius: Size.XS,\n elevation: Size.X2_S\n },\n shadowSharper: {\n shadowColor: palette.BLACK_OPACITY_30,\n shadowRadius: Size.X4_S,\n shadowOpacity: 0.65,\n shadowOffset: {\n height: Size.X4_S,\n width: Size.X4_S\n },\n elevation: Size.X4_S\n },\n mobileBottomButton: {\n flex: 1,\n justifyContent: 'flex-end'\n }\n});\n\n/**\n * Convenience single use styles for layout and positioning\n */\nexport const layout = StyleSheet.create({\n smallGap: {\n gap: Margin.Small\n },\n flexRow: {\n flexDirection: 'row'\n },\n flexWrap: {\n flexWrap: 'wrap'\n },\n flexRowWrap: {\n flexDirection: 'row',\n flexWrap: 'wrap'\n },\n flex1: {\n flex: 1\n },\n flex2: {\n flex: 2\n },\n flex3: {\n flex: 3\n },\n flex4: {\n flex: 4\n },\n flex5: {\n flex: 5\n },\n flexGrow1: {\n flexGrow: 1\n },\n padding0: {\n padding: 0\n },\n paddingV0: {\n paddingVertical: 0\n },\n paddingH0: {\n paddingHorizontal: 0\n },\n alignSelfCenter: {\n alignSelf: 'center'\n },\n alignSelfEnd: {\n alignSelf: 'flex-end'\n },\n alignItemsCenter: { alignItems: 'center' },\n justifyStart: {\n justifyContent: 'flex-start'\n },\n textAlignCenter: {\n textAlign: 'center',\n textAlignVertical: 'center'\n },\n justifyCenter: {\n justifyContent: 'center'\n },\n justifyAround: {\n justifyContent: 'space-around'\n },\n justifyBetween: {\n justifyContent: 'space-between'\n },\n justifyEnd: {\n flex: 1,\n justifyContent: 'flex-end'\n },\n activityIndicator: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n justifyContent: 'center',\n alignItems: 'center'\n },\n mobileWidth: {\n width: MOBILE_WIDTH_MAX\n },\n tabletWidth: {\n width: TABLET_WIDTH_LANDSCAPE_MAX\n }\n});\n\n/**\n * Convenience single use styles for colors\n */\nexport const colors = StyleSheet.create({\n whiteBackground: { backgroundColor: defaultLightTheme.colors.background },\n blackBackground: { backgroundColor: defaultDarkTheme.colors.background },\n errorLight: {\n color: defaultLightTheme.colors.error\n },\n errorDark: {\n color: DarkTheme.colors.error\n }\n});\n\nexport const fontStyles = StyleSheet.create({\n body: {\n letterSpacing: 0.2,\n fontSize: FontSize.BODY,\n fontWeight: Weight.REGULAR,\n fontFamily: fonts.roboto.regular,\n lineHeight: 16.5\n },\n caption: {\n fontSize: FontSize.CAPTION,\n fontWeight: Weight.LIGHT,\n fontFamily: fonts.roboto.light,\n lineHeight: 14\n },\n subheading: {\n fontSize: FontSize.SUBHEADING,\n fontWeight: Weight.MEDIUM,\n fontFamily: fonts.roboto.medium,\n lineHeight: 19\n },\n headline: {\n fontSize: FontSize.HEADLINE,\n fontWeight: Weight.MEDIUM,\n fontFamily: fonts.roboto.medium,\n lineHeight: 23.5\n },\n title: {\n fontSize: FontSize.TITLE,\n fontWeight: Weight.BOLD,\n fontFamily: fonts.roboto.bold,\n lineHeight: 28.5\n },\n h1: {\n fontSize: 24,\n fontWeight: Weight.BOLD,\n fontFamily: fonts.roboto.bold,\n lineHeight: 28.5,\n marginTop: 20,\n marginBottom: 20\n },\n h2: {\n fontSize: 20,\n fontWeight: Weight.BOLD,\n lineHeight: 23.5\n },\n h3: {\n fontSize: 17,\n fontWeight: Weight.BOLD,\n lineHeight: 19\n },\n h4: {\n fontSize: 14,\n fontWeight: Weight.BOLD,\n lineHeight: 16.5\n },\n h5: {\n fontSize: 12,\n fontWeight: Weight.BOLD,\n lineHeight: 14\n },\n h6: {\n fontSize: 10,\n fontWeight: Weight.BOLD,\n lineHeight: 12\n },\n p: {\n fontSize: FontSize.BODY,\n lineHeight: 18\n }\n});\n","import { EmailVerificationStatus } from 'src/interfaces/api';\n\nexport const emailHasError = (status: string): boolean =>\n ![\n EmailVerificationStatus.VERIFIED.valueOf(),\n EmailVerificationStatus.UNKNOWN.valueOf(),\n EmailVerificationStatus.IN_PROGRESS.valueOf()\n ].includes(status);\n\nexport const emailBouncedOrMarkedSpam = (status: string): boolean =>\n [\n EmailVerificationStatus.BOUNCED.valueOf(),\n EmailVerificationStatus.SPAM_REPORT.valueOf()\n ].includes(status);\n\nexport const emailIssuesInvalid = (status: string): boolean =>\n [\n EmailVerificationStatus.BAD.valueOf(),\n EmailVerificationStatus.INVALID.valueOf(),\n EmailVerificationStatus.DECLINED.valueOf()\n ].includes(status);\n\nexport const isErroredEmail = (status: string): boolean =>\n emailIssuesInvalid(status) || emailBouncedOrMarkedSpam(status);\n","import { PropsWithChildren } from 'react';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport enum TOUR {\n ADD_TO_DO = 'tutorials-add-to-dos',\n APPOINTMENTS = 'tutorials-appointments',\n APPOINTMENT_DETAILS = 'tutorials-appointment-details',\n HOME = 'tutorials-home',\n LANDING = 'tutorials-landing',\n LOYALTY = 'tutorials-loyalty',\n PATIENT_PROFILE = 'tutorials-patient-profile',\n PETS = 'tutorials-pets',\n PRACTICE_CLIENT_SEARCH = 'tutorials-practice-client-search',\n PROFILE = 'tutorials-profile',\n REQUESTS = 'requests',\n TO_DOS = 'tutorials-to-dos',\n USER_INFO = 'tutorials-user-info'\n}\nexport interface TourViewState extends Partial<{ [k in TOUR]: boolean }> {\n tutorialsEnabled: boolean;\n}\n\nexport enum STATE {\n IDLE,\n PLAYING,\n PAUSED\n}\n\nexport type TourStep = {\n id: T;\n priority?: number;\n onBefore?: () => void;\n onContinue?: () => void;\n handle?: React.RefObject;\n};\n\nexport type TourMap = { [Step in Steps]: TourStep };\n\nexport interface TourGuideContext {\n tourId: string;\n focusedId?: T;\n state: STATE;\n exitTour: () => void;\n startTour: () => void;\n enabled: boolean;\n toursEnabled: boolean;\n registerStep: (stepId: T, handle?: React.RefObject) => void;\n unregisterStep: (stepId: T) => void;\n hasViewedTutorial: boolean;\n shouldUpdate: boolean;\n pendingSteps: boolean;\n updateScrollPositions: (e: NativeSyntheticEvent) => void;\n}\n\nexport interface _GuideElementProp\n extends PropsWithChildren> {\n visible: boolean;\n enabled: boolean;\n thisRef: React.ForwardedRef;\n}\n\nexport interface TourGuideProviderProps extends PropsWithChildren {\n disabled?: boolean;\n}\n\nexport interface TourGuideHandle {\n startTour: () => void;\n exitTour: () => void;\n updateScrollPositions: () => void;\n reset: () => Promise;\n removeStorageVisited: () => Promise;\n}\n\nexport interface GuideElementHandle {\n updateScrollPosition: () => void;\n}\n","import { Dispatch, SetStateAction, useCallback, useState } from 'react';\n\nexport interface UseBooleanHook {\n value: boolean;\n toTrue: () => void;\n toFalse: () => void;\n setValue: Dispatch>;\n toggle: () => void;\n}\nconst useBoolean = (initial = false): UseBooleanHook => {\n const [value, setValue] = useState(initial);\n\n const toTrue = useCallback((): void => setValue(true), []);\n const toFalse = useCallback((): void => setValue(false), []);\n const toggle = useCallback((): void => setValue((prev) => !prev), []);\n\n return {\n value,\n toTrue,\n toFalse,\n setValue,\n toggle\n };\n};\n\nexport default useBoolean;\n","import { RefObject, useEffect, useRef } from 'react';\nimport { Animated, View } from 'react-native';\nimport { useHover } from 'react-native-web-hooks';\nimport { IS_WEB } from 'src/constants';\n\ninterface Options {\n disabled?: boolean;\n onAnimationEnd?: (status: boolean) => void;\n}\nconst useHoverEffect = ({ disabled, onAnimationEnd }: Options = {}): [\n RefObject,\n Animated.Value\n] => {\n const ref = useRef(null);\n const isHovered = useHover(ref);\n const animatedValue = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (!disabled && IS_WEB) {\n const animation = Animated.timing(animatedValue, {\n toValue: isHovered ? 1 : 0,\n duration: 100,\n useNativeDriver: false\n });\n animation.start(() => onAnimationEnd?.(isHovered));\n return animation.stop;\n }\n }, [animatedValue, disabled, isHovered, onAnimationEnd]);\n\n return [ref, animatedValue];\n};\n\nexport default useHoverEffect;\n","import { useFocusEffect } from '@react-navigation/native';\nimport { DependencyList, EffectCallback, useCallback } from 'react';\nimport { InteractionManager } from 'react-native';\nimport { IS_WEB } from 'src/constants';\n\nconst MIN_INTERACTION_TIME = 300;\n\n/**\n * Runs a focus effect after all interactions are done. Note, this does not run a clean up function.\n * @param callback\n * @param deps\n */\nconst useInteractionFocusEffect = (callback: EffectCallback, deps: DependencyList) => {\n useFocusEffect(\n useCallback(() => {\n let cleanup: ReturnType;\n if (IS_WEB) {\n const timeout = setTimeout(() => {\n cleanup = callback();\n }, MIN_INTERACTION_TIME);\n return () => {\n clearTimeout(timeout);\n cleanup?.();\n };\n } else {\n const interactions = InteractionManager.runAfterInteractions(() => {\n cleanup = callback();\n });\n return () => {\n interactions.cancel();\n cleanup?.();\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...deps])\n );\n};\n\nexport default useInteractionFocusEffect;\n","import { partition, cloneDeep } from 'lodash';\nimport moment from 'moment';\n\ninterface TransactionLike {\n amount: number;\n expiresAt: Date | null;\n}\n\nclass AwardQueue {\n private awards: T[] = [];\n private leftoverBalance = 0;\n\n private top() {\n return this.awards[0];\n }\n\n constructor(initial: T[] = [], initialLeftoverBalance = 0) {\n this.awards = initial;\n this.leftoverBalance = initialLeftoverBalance;\n }\n\n public addAward = (...transactions: T[]) => {\n this.awards.push(...cloneDeep(transactions.filter((txn) => txn.amount > 0)));\n };\n\n public getBalance = () => {\n return this.awards.reduce((acc, txn) => acc + txn.amount, this.leftoverBalance);\n };\n\n public removeExpiring = (date?: Date) => {\n if (!date) return [];\n const [expiring, remaining] = partition(this.awards, (txn) =>\n moment(txn.expiresAt).isBefore(date, 'day')\n );\n this.awards = remaining;\n return expiring.map((txn) => txn);\n };\n\n public adjustBalance = (amount: number) => {\n if (amount > 0) return;\n if (!this.top()) {\n this.leftoverBalance += amount;\n } else {\n this.top().amount += amount;\n while (this.top() && this.top().amount <= 0) {\n const previous = this.awards.shift()!;\n if (!this.awards.length) {\n this.leftoverBalance += previous.amount;\n return;\n } else {\n this.top().amount += previous.amount;\n }\n }\n }\n };\n\n public getQueue = () => cloneDeep(this.awards);\n}\n\nexport default AwardQueue;\n","export enum LOYALTY_TRANSACTION_TYPES {\n REWARD = 'reward',\n ADJUSTMENT = 'adjustment'\n}\n","import moment from 'moment';\nimport { useMemo } from 'react';\nimport { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getLoyaltyCoinBalanceTotal, getLoyaltyTransactions } from 'src/api/loyaltyTransactions';\nimport LoyaltyTransaction from 'src/interfaces/api/LoyaltyTransaction';\nimport { t } from 'i18next';\nimport { ActivityLineItem, RewardSectionItem } from './types';\nimport useAbility from 'src/hooks/react-query/useAbility';\nimport _ from 'lodash';\nimport AwardQueue from './AwardQueue';\nimport { toLocalMonthYear } from 'src/utils';\nimport { LOYALTY_TRANSACTION_TYPES } from 'src/constants/loyaltyTransactionTypes';\n\nconst _useLoyaltyTransactions = () => {\n const { userCanViewLoyalty } = useAbility();\n const {\n data: transactions = [],\n isLoading,\n isFetched,\n isRefetching,\n refetch\n } = useQuery({\n queryKey: [QueryKeys.LOYALTY_TRANSACTIONS],\n queryFn: getLoyaltyTransactions,\n enabled: userCanViewLoyalty\n });\n\n const { aggregatedExpirations, ...userCoinData } = useMemo(() => {\n const { activityEntries, expiringAwards } = createActivityItems(transactions);\n const sections = createActivitySections(activityEntries);\n const aggregatedExpirations = groupExpiringRewards(transactions);\n return { sections, expiringAwards, aggregatedExpirations };\n }, [transactions]);\n\n const { data: coinBalance } = useQuery({\n queryKey: [QueryKeys.LOYALTY_COIN_BALANCE],\n queryFn: getLoyaltyCoinBalanceTotal,\n enabled: userCanViewLoyalty\n });\n\n return {\n transactions,\n isLoading,\n isFetched,\n isRefetching,\n refetch,\n userCoinData,\n aggregatedExpirations,\n coinBalance\n };\n};\n\nconst groupExpiringRewards = (transactions: LoyaltyTransaction[]): RewardSectionItem[] => {\n return _(transactions)\n .filter((t) => moment(t.expiresAt).isAfter(new Date(), 'day'))\n .sortBy('expiresAt')\n .groupBy((t) => moment(t.expiresAt).startOf('day'))\n .map((value) => ({\n type: 'expiry' as RewardSectionItem['type'],\n expireAmount: value.reduce((acc, txn) => acc + txn.amount, 0),\n expireDate: moment(value[0].expiresAt).startOf('day').toDate(),\n reward: undefined\n }))\n .filter((item) => item.expireAmount > 0)\n .value();\n};\n\nconst createActivitySections = (activityEntries: ActivityLineItem[]) => {\n const sections: Array<{\n title: string | undefined;\n data: ActivityLineItem[];\n }> = _(activityEntries)\n .groupBy(({ isPending, date, fulfilledDate }) => {\n if (!isPending && date) {\n return toLocalMonthYear(moment(date));\n } else if (fulfilledDate) {\n return toLocalMonthYear(moment(fulfilledDate));\n }\n return undefined;\n })\n .map((value, key) => ({\n title: key === 'undefined' ? undefined : key,\n data: value.sort((a, b) => moment(b.date).diff(moment(a.date)))\n }))\n .sortBy((section) => (section.title ? moment(section.data[0].date) : undefined))\n .reverse()\n .value();\n\n return sections;\n};\n\nexport const createActivityItems = (transactions: LoyaltyTransaction[]) => {\n const rewards = new AwardQueue();\n const activityEntries: ActivityLineItem[] = [];\n const pending: LoyaltyTransaction[] = [];\n\n transactions.forEach((txn) => {\n if (txn.type !== LOYALTY_TRANSACTION_TYPES.REWARD) {\n if (txn.amount > 0) {\n rewards.addAward(txn);\n } else {\n rewards.adjustBalance(txn.amount);\n }\n activityEntries.push(createLineItem(txn));\n } else if (!txn.fulfilledAt) {\n if (!txn.expiresAt || moment().isBefore(txn.expiresAt, 'day')) pending.push(txn);\n } else {\n const expiring = rewards.removeExpiring(txn.fulfilledAt);\n activityEntries.push(...expiring.map((txn) => createLineItem(txn, true)));\n rewards.adjustBalance(txn.amount);\n activityEntries.push(createLineItem(txn));\n }\n });\n\n const expiringAwards = rewards.removeExpiring(new Date());\n activityEntries.push(...expiringAwards.map((txn) => createLineItem(txn, true)));\n activityEntries.push(...pending.map((txn) => createLineItem(txn)));\n return {\n activityEntries,\n expiringAwards\n };\n};\n\nexport const createLineItem = (\n { id, description, amount, createdAt, expiresAt, fulfilledAt, type }: LoyaltyTransaction,\n expired = false\n): ActivityLineItem => {\n const activityLineItem = {\n transactionId: id,\n description: expired ? t('loyalty:expired') : description,\n date: expired ? expiresAt : createdAt,\n fulfilledDate: fulfilledAt,\n isPending: amount < 0 && !fulfilledAt && type === LOYALTY_TRANSACTION_TYPES.REWARD,\n amount: expired ? -amount : amount\n };\n\n return activityLineItem;\n};\n\nexport default _useLoyaltyTransactions;\n","import React, { createContext, PropsWithChildren, useContext } from 'react';\nimport _useLoyaltyTransactions from './helpers';\nimport { Context } from './types';\n\nconst defaultContext: Context = {\n transactions: [],\n isLoading: false,\n isFetched: false,\n isRefetching: false,\n refetch: Promise.resolve,\n aggregatedExpirations: [],\n userCoinData: {\n sections: []\n },\n coinBalance: 0\n};\n\nconst LoyaltyTransactionContext = createContext(defaultContext);\n\nexport const useLoyaltyTransactions = () => useContext(LoyaltyTransactionContext);\n\nconst LoyaltyTransactionProvider: React.FC = ({ children }) => {\n const value = _useLoyaltyTransactions();\n\n return (\n \n {children}\n \n );\n};\n\nexport default LoyaltyTransactionProvider;\n","import { noop } from 'lodash';\nimport { PropsWithChildren, createContext, useCallback, useContext, useRef, useState } from 'react';\nimport { AsyncStorageKeys } from 'src/api';\nimport useStorage from 'src/hooks/useStorage';\nimport { TOUR, TourGuideHandle } from './model';\nimport { queryClient, storage } from 'src/utils';\n\ninterface TourDetail {\n tourId: symbol;\n /** The heigher the number, the lower priority. */\n priority: number;\n}\ninterface Context {\n activeTour?: TourDetail;\n /**\n * Takes a tour ID and enters it into a priority queue.\n * @param tourId A unique identifier for the tour\n * @param priority The smaller the number, the higher the priority. If no priority is specified, it is given the lowest priority.\n */\n isActivelyTouring: boolean;\n queueTour: (tourId: symbol, priority?: number) => void;\n dequeueTour: (tourId: symbol) => void;\n registerTour: (tourId: symbol, ref: React.RefObject) => void;\n unregisterTour: (tourId: symbol) => void;\n toursEnabled: boolean;\n toursInFocus: TourDetailWithRef[];\n resetTour: (tourId: TOUR) => void;\n stopTours: () => Promise;\n}\n\nexport interface TourDetailWithRef extends Omit {\n ref: React.RefObject;\n}\n\nconst DEFAULT_CONTEXT: Context = {\n isActivelyTouring: false,\n toursEnabled: false,\n queueTour: noop,\n dequeueTour: noop,\n registerTour: noop,\n unregisterTour: noop,\n resetTour: noop,\n stopTours: Promise.resolve,\n toursInFocus: []\n};\n\nconst TourGuideMasterContext = createContext(DEFAULT_CONTEXT);\n\nexport const TourGuideMasterProvider: React.FC = ({ children }) => {\n const [tourQueue, setTourQueue] = useState([]);\n const [tutorialsDisabled] = useStorage(AsyncStorageKeys.TUTORIALS_DISABLED);\n\n const [toursInFocus, setToursInFocus] = useState([]);\n\n const registerTour: Context['registerTour'] = useRef(\n (tourId: symbol, ref: React.RefObject) => {\n setToursInFocus((prev) => {\n if (!prev.find((tour) => tour?.tourId === tourId)) {\n return [...prev, { tourId, ref }];\n }\n return prev;\n });\n }\n ).current;\n\n const unregisterTour: Context['unregisterTour'] = useRef((tourId: symbol) => {\n setToursInFocus((prev) => prev.filter((v) => v.tourId !== tourId));\n }).current;\n\n const queueTour: Context['queueTour'] = useRef(\n (tourId: symbol, priority = Number.MAX_SAFE_INTEGER) => {\n setTourQueue((queue) => {\n if (!queue.find((tour) => tour?.tourId === tourId)) {\n const newTour: TourDetail = {\n priority: priority ?? Number.MAX_SAFE_INTEGER,\n tourId\n };\n if (priority !== Number.MAX_SAFE_INTEGER) {\n const insertPosition: number = queue.findIndex((tour) => tour.priority > priority);\n if (insertPosition !== -1) {\n const beg = queue.slice(0, insertPosition);\n const end = queue.slice(insertPosition);\n return [...beg, newTour, ...end];\n }\n }\n return [...queue, newTour];\n }\n return queue;\n });\n }\n ).current;\n\n const dequeueTour: Context['dequeueTour'] = useRef((tourId: symbol) => {\n setTourQueue((prev) => prev.filter((v) => v.tourId !== tourId));\n }).current;\n\n const activeTour = tourQueue[0];\n const isActivelyTouring = !!tourQueue[0];\n\n const resetTour = async (tourId: TOUR) => {\n const tourController = toursInFocus.find((tour) => tour.tourId.description === tourId);\n await storage.removeItem([AsyncStorageKeys.TUTORIALS, tourId].join(','));\n await queryClient.invalidateQueries([AsyncStorageKeys.TUTORIALS, tourId]);\n await tourController?.ref.current?.reset();\n };\n\n const stopTours = useCallback(async () => {\n await Promise.all(\n Object.values(TOUR).map(async (tourId) => {\n await storage.setItem([AsyncStorageKeys.TUTORIALS, tourId].join(','), 'true');\n await queryClient.invalidateQueries([AsyncStorageKeys.TUTORIALS, tourId]);\n })\n );\n }, []);\n return (\n \n {children}\n \n );\n};\n\nexport const useTourGuideMaster = () => useContext(TourGuideMasterContext);\n","import { useQuery } from 'react-query';\nimport { getPatients, QueryKeys } from 'src/api';\n\nconst usePatients = () => {\n return useQuery({\n queryKey: [QueryKeys.PATIENTS],\n queryFn: getPatients\n });\n};\n\nexport default usePatients;\n","import { useQuery, UseQueryOptions } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getPatient } from 'src/api/patient';\nimport { Patient } from 'src/interfaces';\nimport { useTourGuideMaster } from 'src/module/TourGuide/TourGuideMaster';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { dummyPatient } from 'src/scenes/ToDos/ToDoList/components/model';\nimport usePatients from './usePatients';\n\nconst usePatient = (\n patientId?: string,\n options?: UseQueryOptions\n) => {\n const { user } = useUser();\n const { isActivelyTouring } = useTourGuideMaster();\n const { data: patients } = usePatients();\n\n const query = useQuery({\n queryKey: [QueryKeys.PATIENT, patientId, user.sourceId],\n queryFn: () => {\n if (patientId) {\n return getPatient(user.sourceId, patientId);\n }\n },\n enabled: !!patientId && !!patients?.find((patient) => patient.patientId === patientId),\n suspense: true,\n ...options\n });\n\n const showDummyData = !patientId && isActivelyTouring;\n const data = showDummyData ? dummyPatient : query.data;\n\n return {\n ...query,\n data\n };\n};\n\nexport default usePatient;\n","import { endpoint } from 'src/constants';\nimport Reward from 'src/interfaces/api/Reward';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getRewards = async (): Promise => {\n const response = await apiClient.get(endpoint('REWARDS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n\nexport const getReward = async (id: number): Promise => {\n const response = await apiClient.get(endpoint('GET_REWARD', { id }));\n return isDefinedOrThrowServerError(response.data);\n};\n","import { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getReward } from 'src/api/rewards';\n\nconst useReward = (rewardId?: number) => {\n return useQuery({\n queryKey: [QueryKeys.REWARD, rewardId],\n queryFn: () => {\n if (rewardId) {\n return getReward(rewardId);\n }\n }\n });\n};\n\nexport default useReward;\n","import { hasAction, requestReview } from 'expo-store-review';\nimport storage from './storage';\nimport moment from 'moment';\nimport { Moment } from 'moment-timezone';\nimport { AsyncStorageKeys } from 'src/api';\nimport { getFirstInstallTime } from 'react-native-device-info';\n\nconst INSTALL_DAYS_REVIEW_THRESHOLD = 30;\nconst DAYS_AGO_SHOWED_REVIEW_THRESHOLD = 30;\n\nconst rateUs = async () => {\n const reviewActionIsAvailable = await hasAction();\n const lastReviewRequestDate = await storage.getTypedItem(\n AsyncStorageKeys.LAST_REVIEW_REQUEST_DATE\n );\n const lastReviewDateIsUndefinedOrPastThreshold =\n !lastReviewRequestDate ||\n moment().diff(lastReviewRequestDate, 'days') > DAYS_AGO_SHOWED_REVIEW_THRESHOLD;\n\n if (reviewActionIsAvailable && lastReviewDateIsUndefinedOrPastThreshold) {\n await getFirstInstallTime()\n .then(async (value) => {\n if (moment().diff(value, 'days') >= INSTALL_DAYS_REVIEW_THRESHOLD) {\n await requestReview();\n await storage.setTypedItem(AsyncStorageKeys.LAST_REVIEW_REQUEST_DATE, moment());\n }\n })\n .catch((error) => console.error(error));\n }\n};\n\nexport default rateUs;\n","import { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { MutationKeys, QueryKeys } from 'src/api';\nimport { endpoint } from 'src/constants';\nimport { Appointment } from 'src/interfaces';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { queryClient } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport rateUs from 'src/utils/rateUs';\n\nconst useAppointmentConfirmation = (appointmentId?: Appointment['appointmentId']) => {\n const { t } = useTranslation('appointments');\n const { user } = useUser();\n const { mutate: confirmAppointment, isLoading: isConfirming } = useMutation({\n mutationKey: [MutationKeys.CONFIRMING_APPOINTMENT, appointmentId],\n mutationFn: async () => {\n if (!appointmentId) {\n return;\n }\n await apiClient.patch(\n endpoint('APPOINTMENT_CONFIRMATION', {\n appointmentId,\n sourceId: user.sourceId\n })\n );\n },\n onSuccess: () => {\n Toast.show({\n text1: t('success', { ns: 'common' }),\n text2: t('confirmed')\n });\n void Promise.all([\n queryClient.invalidateQueries([QueryKeys.APPOINTMENT, appointmentId]),\n queryClient.invalidateQueries([QueryKeys.APPOINTMENTS])\n ]);\n\n void rateUs();\n },\n onError: () => {\n Toast.show({\n type: 'error',\n text1: t('uhOh', { ns: 'common' }),\n text2: t('error', { ns: 'common' })\n });\n }\n });\n\n return { confirmAppointment, isConfirming };\n};\n\nexport default useAppointmentConfirmation;\n","import {\n getMediaLibraryPermissionsAsync,\n launchImageLibraryAsync,\n MediaTypeOptions,\n requestMediaLibraryPermissionsAsync\n} from 'expo-image-picker';\nimport { t } from 'i18next';\nimport Toast from 'react-native-toast-message';\n\nconst pickImage = async (allowsMultipleSelection = false) => {\n const permissions = await getMediaLibraryPermissionsAsync();\n if (!(permissions.granted ?? false)) {\n const permissionResponse = await requestMediaLibraryPermissionsAsync();\n\n if (!permissionResponse.granted) {\n Toast.show({\n text1: t('mediaLibrary.accessRequired', { ns: 'permissions' }),\n text2: t('mediaLibrary.request', { ns: 'permissions' }),\n type: 'error'\n });\n return null;\n }\n }\n\n return await launchImageLibraryAsync({\n mediaTypes: MediaTypeOptions.Images,\n allowsEditing: !allowsMultipleSelection,\n allowsMultipleSelection\n });\n};\n\nexport default pickImage;\n","import {\n getCameraPermissionsAsync,\n launchCameraAsync,\n MediaTypeOptions,\n requestCameraPermissionsAsync\n} from 'expo-image-picker';\nimport { t } from 'i18next';\nimport Toast from 'react-native-toast-message';\n\nconst pickImage = async (allowsMultipleSelection = false) => {\n try {\n const permissions = await getCameraPermissionsAsync();\n if (!(permissions.granted ?? false)) {\n const permissionResponse = await requestCameraPermissionsAsync();\n\n if (!permissionResponse.granted) {\n Toast.show({\n text1: t('camera.accessRequired', { ns: 'permissions' }),\n text2: t('camera.request', { ns: 'permissions' }),\n type: 'error'\n });\n return null;\n }\n }\n\n return await launchCameraAsync({\n mediaTypes: MediaTypeOptions.Images,\n allowsEditing: !allowsMultipleSelection,\n allowsMultipleSelection\n });\n } catch (e: any) {\n Toast.show({\n text1: e.name,\n text2: e.message,\n type: 'error'\n });\n }\n};\n\nexport default pickImage;\n","import { deleteClientPhoto, MutationKeys, postClientPhoto, QueryKeys } from 'src/api';\nimport { Action, manipulateAsync } from 'expo-image-manipulator';\nimport pickImage from 'src/utils/pickImage';\nimport { useMutation, useQueryClient } from 'react-query';\nimport Toast from 'react-native-toast-message';\nimport { useTranslation } from 'react-i18next';\nimport takeImage from 'src/utils/takeImage';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { useCallback } from 'react';\nimport { useAuth } from 'src/providers/AuthProvider';\n\ninterface UploadPhotoHook {\n uploadPhoto: (camera: boolean) => Promise;\n deletePhoto: () => void;\n isMutating: boolean;\n}\ninterface Options {\n /**\n * Series of actions to manipulate the photo before uploading.\n */\n manipulate?: Action[];\n}\n\nconst useUploadProfilePhoto: (options?: Options) => UploadPhotoHook = ({\n manipulate = []\n} = {}): UploadPhotoHook => {\n const { t } = useTranslation('profileRoot');\n\n const { user } = useUser();\n const { token } = useAuth();\n\n const queryClient = useQueryClient();\n\n const { mutate: upload, isLoading: isUploading } = useMutation(\n async (uri: string) => await postClientPhoto(user.sourceId, user.clientId, uri),\n {\n mutationKey: [MutationKeys.PROFILE_PHOTO_UPLOAD, token, manipulate],\n onSuccess: () => {\n void queryClient.invalidateQueries([QueryKeys.CLIENT, token]);\n Toast.show({ text1: t('uploadSuccess') });\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n }\n }\n );\n\n const { mutate: deletePhoto, isLoading: isDeleting } = useMutation(\n async () => await deleteClientPhoto(user.sourceId, user.clientId),\n {\n mutationKey: [MutationKeys.PROFILE_PHOTO_DELETE, token],\n onSuccess: () => {\n void queryClient.invalidateQueries([QueryKeys.CLIENT, token]);\n Toast.show({ text1: t('deletePhotoSuccess') });\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n }\n }\n );\n\n const uploadPhoto = useCallback(\n async (camera: boolean): Promise => {\n const imagePickerResult = camera ? await takeImage() : await pickImage();\n if (imagePickerResult && !imagePickerResult?.canceled) {\n const processed = await manipulateAsync(imagePickerResult.assets[0].uri, manipulate);\n upload(processed.uri);\n }\n },\n [manipulate, upload]\n );\n\n return { uploadPhoto, deletePhoto, isMutating: isUploading || isDeleting };\n};\n\nexport default useUploadProfilePhoto;\n","import _ from 'lodash';\nimport moment from 'moment-timezone';\nimport { useMutation } from 'react-query';\nimport { patchTodo, postTodo, deleteTodo as _deleteTodo, QueryKeys, MutationKeys } from 'src/api';\nimport { NOTIFICATIONS_SUPPORTED } from 'src/constants';\nimport { Client, Todo } from 'src/interfaces/api';\nimport { useNotification } from 'src/providers/NotificationProvider';\nimport NotificationCategory from 'src/providers/NotificationProvider/NotificationCategory';\nimport { todoAlertId } from 'src/providers/NotificationProvider/notificationIdGenerators';\nimport queryClient from 'src/utils/queryClient';\nimport rateUs from 'src/utils/rateUs';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { postSelfPush } from 'src/api/push';\nimport { isDefined } from 'src/utils';\n\nconst debounceClearInvalidateQueries = _.debounce(\n async ({ sourceId, practiceId }: Client, todoId?: Todo['id']) => {\n const jobs = [];\n jobs.push(queryClient.invalidateQueries([QueryKeys.TODOS]));\n if (isDefined(todoId)) jobs.push(queryClient.invalidateQueries([QueryKeys.TODO, todoId]));\n jobs.push(queryClient.invalidateQueries([QueryKeys.PAGED_TODOS]));\n await Promise.all(jobs);\n void postSelfPush({\n type: NotificationCategory.TO_DO_UPDATE,\n sourceId,\n practiceId\n });\n },\n 1000,\n {\n trailing: true,\n leading: false\n }\n);\n\nconst useMutateTodos = () => {\n const { user } = useUser();\n const { clearNotification } = useNotification();\n const { mutateAsync: createTodo, isLoading: isCreating } = useMutation({\n mutationKey: [MutationKeys.EDITING_TODOS],\n mutationFn: postTodo,\n onSuccess: () => debounceClearInvalidateQueries(user)\n });\n\n const { mutateAsync: editTodo, isLoading: isEditing } = useMutation({\n mutationKey: [MutationKeys.EDITING_TODOS],\n mutationFn: patchTodo,\n onSuccess: ({ id }) => debounceClearInvalidateQueries(user, id)\n });\n\n const { mutateAsync: toggleCompleteTodo, isLoading: isCompleting } = useMutation({\n mutationKey: [MutationKeys.EDITING_TODOS],\n mutationFn: async (todo: Todo) => {\n const complete = !todo.isComplete;\n const jobs = [];\n const todoJob = patchTodo({ ...todo, isComplete: complete, period: null, periodUnit: null });\n jobs.push(todoJob);\n if (\n complete &&\n !!todo.period &&\n !!todo.periodUnit &&\n (!todo.repeatUntilDate || moment(todo.repeatUntilDate).isAfter())\n ) {\n const newTodo = _.cloneDeep(todo);\n newTodo.isComplete = false;\n newTodo.dueDate = moment(todo.dueDate)\n .add(moment.duration(todo.period, todo.periodUnit))\n .toISOString();\n jobs.push(postTodo(newTodo));\n }\n await Promise.all(jobs);\n if (complete) void rateUs();\n return todoJob;\n },\n onSuccess: ({ id }) => debounceClearInvalidateQueries(user, id)\n });\n\n const { mutateAsync: deleteTodo, isLoading: isDeleting } = useMutation({\n mutationKey: [MutationKeys.EDITING_TODOS],\n mutationFn: _deleteTodo,\n onSuccess: async (_, todo) => {\n void debounceClearInvalidateQueries(user);\n if (NOTIFICATIONS_SUPPORTED) {\n todo.todoAlertsAttributes.forEach((alert) => {\n clearNotification(todoAlertId(alert));\n });\n }\n }\n });\n\n const isMutating = isCreating || isEditing || isCompleting || isDeleting;\n\n return {\n isMutating,\n createTodo,\n editTodo,\n toggleCompleteTodo,\n deleteTodo\n };\n};\n\nexport default useMutateTodos;\n","import { useEffect, useMemo } from 'react';\nimport { UseQueryOptions, useIsMutating, useQuery } from 'react-query';\nimport { getAllTodos, QueryKeys, MutationKeys } from 'src/api';\nimport { Patient, Todo, TodoReason } from 'src/interfaces/api';\nimport { PaginationRS } from 'src/utils';\n\ninterface Props {\n enabled?: boolean;\n onFetchSuccess?: (todos: Todo[]) => void | Promise;\n isComplete?: boolean;\n patientId?: Patient['patientId'];\n reason?: TodoReason;\n start?: number;\n dir?: 'asc' | 'desc';\n column?: string;\n queryOptions?: UseQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n Array\n >;\n}\n\nexport const todoQueryProps = ({\n start,\n isComplete,\n dir,\n column\n}: Pick) => ({\n queryKey: [QueryKeys.TODOS, isComplete, start, dir, column],\n queryFn: async () => await getAllTodos(start, undefined, isComplete, dir, column)\n});\n\nconst useTodos = ({\n enabled = true,\n onFetchSuccess,\n isComplete,\n patientId,\n reason,\n start = 0,\n dir = 'asc',\n column = 'due_date',\n queryOptions\n}: Props = {}) => {\n const isMutating = useIsMutating([MutationKeys.EDITING_TODOS]);\n\n const {\n data: pageRS,\n isLoading,\n isFetched: todosAreFetched,\n isError,\n isFetching\n } = useQuery({\n ...todoQueryProps({ start, isComplete, dir, column }),\n enabled: enabled && !isMutating,\n ...queryOptions\n });\n\n const todos = useMemo(\n () =>\n pageRS?.data?.filter(\n (todo) =>\n (isComplete === undefined || isComplete === todo.isComplete) &&\n (!patientId || patientId === todo.patientId) &&\n (!reason || reason === todo.reason)\n ),\n [isComplete, pageRS?.data, patientId, reason]\n );\n\n useEffect(() => {\n if (todosAreFetched && todos && !isError) {\n void onFetchSuccess?.(todos);\n }\n }, [isError, onFetchSuccess, todos, todosAreFetched]);\n\n return {\n isFetching,\n todosAreFetched,\n isLoading,\n isMutating,\n todos\n };\n};\n\nexport default useTodos;\n","/**\n * These values will remain teh same for the session of the application.\n * For these values to persist across sessions, they must be stored in local storage.\n */\n\nimport moment from 'moment';\nimport uuid from '../uuid';\nimport { ExpiringToken } from './model';\n\n/**\n * Default visit token that expires in 4 hours. This is used to track a visit.\n * @type {ExpiringToken}\n */\nexport const defaultVisit: ExpiringToken = {\n uuid: uuid(),\n expires: moment().add(4, 'hours').toDate()\n};\n\n/**\n * Default visitor token that expires in 2 years. This is used to track a visitor.\n * @type {ExpiringToken}\n */\nexport const defaultVisitor: ExpiringToken = {\n uuid: uuid(),\n expires: moment().add(2, 'years').toDate()\n};\n","import moment from 'moment';\nimport { AsyncStorageKeys } from 'src/api';\nimport storage from '../storage';\nimport { defaultVisitor, defaultVisit } from './constants';\nimport { IS_WEB } from 'src/constants';\n\n/**\n * Gets a token from storage or returns a default value.\n * @param key\n * @param defaultValue\n * @returns\n */\nconst getTokenOrDefault = async (key: AsyncStorageKeys, defaultValue: T): Promise => {\n try {\n const raw = (await storage.getItem(key))!;\n const decoded = IS_WEB ? atob(raw) : raw;\n const token = JSON.parse(decoded);\n if (!token || moment().isAfter(token.expires)) {\n throw new Error('Token expired');\n }\n return token;\n } catch (e) {\n const token = JSON.stringify(defaultValue);\n const encoded = IS_WEB ? btoa(token) : token;\n await storage.setItem(key, encoded);\n return defaultValue;\n }\n};\n\n/**\n * Gets the visit token from storage or returns a default value.\n * @returns\n */\nexport const getVisitToken = async () => {\n return getTokenOrDefault(AsyncStorageKeys.VISIT_TOKEN, defaultVisit);\n};\n\n/**\n * Gets the visitor token from storage or returns a default value.\n * @returns\n */\nexport const getVisitorToken = async () => {\n return getTokenOrDefault(AsyncStorageKeys.VISITOR_TOKEN, defaultVisitor);\n};\n","import { throttle, uniqBy } from 'lodash';\nimport moment from 'moment';\nimport { endpoint, TRACKING_EVENTS } from 'src/constants';\nimport { apiClient } from '../axios';\nimport isDefined from '../isDefined';\nimport { TrackingEvent } from './model';\nimport { getVisitToken, getVisitorToken } from './tokens';\n\nconst queuedEvents: TrackingEvent[] = [];\n\n/**\n * Submits queued events to the server at most once every minute.\n */\nconst submitEvents = throttle(\n async () => {\n const events = queuedEvents.splice(0, queuedEvents.length);\n const visitToken = await getVisitToken();\n const visitorToken = await getVisitorToken();\n void apiClient.post(endpoint('AHOY_EVENTS'), {\n visit_token: visitToken.uuid,\n visitor_token: visitorToken.uuid,\n events_json: JSON.stringify(uniqBy(events, 'name'))\n });\n },\n moment.duration(1, 'minutes').asMilliseconds(),\n {\n leading: false,\n trailing: true\n }\n);\n\n/**\n * Queues an event to be sent to the server, attaching the current time.\n * @param {TRACKING_EVENTS} name The name of the event.\n * @param {unknown} properties The properties of the event. These will be stringified.\n */\nexport const queueEvent = (name: TRACKING_EVENTS, properties?: unknown) => {\n queuedEvents.push({\n name,\n properties: isDefined(properties) ? JSON.stringify(properties) : undefined,\n time: Date.now() / 1000\n });\n void submitEvents();\n};\n\n/**\n * Flushes all queued events to the server.\n */\nexport const flushEvents = submitEvents.flush;\n","export const setupTagManager = (containerId: string) => {\n const script = document.createElement('script');\n script.innerHTML = googleTagManagerScript(containerId);\n\n document.body.appendChild(script);\n\n const noscript = document.createElement('noscript');\n\n const iframe = document.createElement('iframe');\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${containerId}`;\n iframe.style.display = 'none';\n iframe.height = '0';\n iframe.width = '0';\n iframe.style.display = 'none';\n noscript.appendChild(iframe);\n\n document.body.appendChild(noscript);\n\n console.debug('Initialized googleTagManagerContainer', containerId);\n return () => {\n document.body.removeChild(script);\n document.body.removeChild(noscript);\n };\n};\n\nexport const setupGoogleAnalytics = (measurementsId: string) => {\n const scriptAsync = document.createElement('script');\n scriptAsync.async = true;\n scriptAsync.src = `https://www.googletagmanager.com/gtag/js?id=${measurementsId}`;\n const script = document.createElement('script');\n script.innerHTML = googleAnalyticsScript(measurementsId);\n\n document.body.appendChild(scriptAsync);\n document.body.appendChild(script);\n console.debug('Initialized GoogleAnalytics', measurementsId);\n\n return () => {\n document.body.removeChild(scriptAsync);\n document.body.removeChild(script);\n };\n};\n\nexport const setupDataLayer = () => {\n const dataLayerScript = document.createElement('script');\n dataLayerScript.innerHTML = `\n dataLayer = [{\n 'gtm.blacklist': ['html']\n }];`;\n document.body.appendChild(dataLayerScript);\n return () => {\n document.body.removeChild(dataLayerScript);\n (window as unknown as any).dataLayer = [];\n };\n};\n\nconst googleTagManagerScript = (id: string) => `\n (function(w,d,s,l,i){\n w[l]=w[l]||[];\n w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});\n var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),\n dl=l!='dataLayer'?'&l='+l:'';\n j.async=true;\n j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;\n f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${id}');`;\n\nconst googleAnalyticsScript = (id: string) => `\nwindow.dataLayer = window.dataLayer || [];\n function gtag(){window.dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${id}');\n gtag('get', '${id}', 'client_id', function(ret){\n window.googleClientId = ret;\n });\n`;\n","import { noop, pick } from 'lodash';\nimport React, { createContext, useContext, useEffect, useRef } from 'react';\nimport usePracticeInfo from 'src/hooks/react-query/usePracticeInfo';\nimport { isDefined } from 'src/utils';\nimport { setupDataLayer, setupGoogleAnalytics, setupTagManager } from './helper.web';\nimport { GoogleTagManagerProps } from './model';\nimport sentry from 'src/utils/sentry';\n\ninterface Context {\n pushEvent: (event: any) => void;\n}\n\nconst defaultContext: Context = {\n pushEvent: noop\n};\n\nconst TagManagerContext = createContext(defaultContext);\n\nexport const useGoogleTagManager = () => useContext(TagManagerContext);\n\nconst GoogleAnalytics: React.FC = ({ practiceShortName, children }) => {\n const { data: practiceInfo } = usePracticeInfo(practiceShortName);\n\n const practiceInfoRef = useRef(practiceInfo);\n useEffect(() => {\n practiceInfoRef.current = practiceInfo;\n }, [practiceInfo]);\n\n useEffect(setupDataLayer, []);\n\n useEffect(() => {\n // Set up google tag manager container id 1\n if (practiceInfo?.useGoogleTagManager && practiceInfo?.googleTagManagerContainerId) {\n return setupTagManager(practiceInfo.googleTagManagerContainerId);\n }\n }, [practiceInfo?.googleTagManagerContainerId, practiceInfo?.useGoogleTagManager]);\n\n useEffect(() => {\n // set up google tag manager container id 2\n if (practiceInfo?.useGoogleTagManager && practiceInfo?.googleTagManagerContainerId2) {\n return setupTagManager(practiceInfo.googleTagManagerContainerId2);\n }\n }, [practiceInfo?.googleTagManagerContainerId2, practiceInfo?.useGoogleTagManager]);\n\n useEffect(() => {\n // setup google analytics\n if (practiceInfo?.googleAnalyticsMeasurementId) {\n return setupGoogleAnalytics(practiceInfo.googleAnalyticsMeasurementId);\n }\n }, [practiceInfo?.googleAnalyticsMeasurementId]);\n\n const eventQueue = useRef([]);\n useEffect(\n () => () => {\n for (const event of eventQueue.current) {\n clearTimeout(event);\n }\n },\n []\n );\n\n const pushEvent = useRef((event: string, times = 0, d: any = undefined) => {\n const dataLayer = (window as unknown as { dataLayer: any[] }).dataLayer;\n const data = d ?? {\n event,\n time: Date.now() / 1000\n };\n if (\n practiceInfoRef.current &&\n !practiceInfoRef.current.useGoogleTagManager &&\n !practiceInfoRef.current.googleAnalyticsMeasurementId\n ) {\n return;\n }\n if (!practiceInfoRef.current || !isDefined(dataLayer) || dataLayer.length < 1) {\n // We check if the data layer is empty or less than one because the above scripts attach events once they are ready.\n if (times > 2) {\n // after attempting to push 3 times, give up and report\n console.debug('Failed to send event', event);\n sentry.addBreadcrumb({\n category: 'google-analytics',\n message: 'Failed to push event',\n level: 'warning',\n data: {\n event,\n data: pick(practiceInfoRef.current, [\n 'googleAnalyticsMeasurementId',\n 'googleTagManagerContainerId',\n 'googleTagManagerContainerId2'\n ])\n }\n });\n return;\n }\n console.debug('Queueing event', event);\n eventQueue.current.push(\n setTimeout(() => {\n console.debug('Retrying event', event);\n pushEvent.current(event, times + 1, data);\n }, 1000)\n );\n } else {\n console.debug('Sent event', event);\n dataLayer.push(data);\n }\n });\n\n return (\n \n {children}\n \n );\n};\n\nexport default GoogleAnalytics;\n","import { useRoute } from '@react-navigation/native';\nimport { defaults, isEmpty, pick } from 'lodash';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { trackVisit, UTMParams } from 'src/utils/utmTracking';\nimport { Client } from 'src/interfaces';\nimport { TRACKING_EVENTS } from 'src/constants';\nimport { useQuery } from 'react-query';\nimport { useGoogleTagManager } from 'src/providers/GoogleTagManager/index.web';\nimport { useCallback, useEffect } from 'react';\nimport { queueEvent } from 'src/utils/utmTracking/event';\n\ninterface Options extends Partial> {\n initialEventName?: TRACKING_EVENTS;\n}\nexport const useTrackVisit = ({ initialEventName, ...sessionInfo }: Options) => {\n const { params, path } = useRoute();\n const { pushEvent } = useGoogleTagManager();\n const { _user: user, ready } = useAuth();\n const utmParams = pick((params || {}) as UTMParams, [\n 'utm_campaign',\n 'utm_content',\n 'utm_medium',\n 'utm_source',\n 'utm_term'\n ]);\n\n const trackEvent = useCallback(\n (eventName: TRACKING_EVENTS) => {\n if (!isEmpty(utmParams)) {\n queueEvent(eventName);\n }\n pushEvent(eventName);\n },\n [pushEvent, utmParams]\n );\n\n useEffect(() => {\n if (initialEventName) {\n trackEvent(initialEventName);\n }\n }, [initialEventName, trackEvent]);\n\n const query = useQuery({\n queryKey: ['trackVisit', path, initialEventName, utmParams],\n queryFn: async () => {\n const data = await trackVisit(utmParams, path, defaults(sessionInfo, user));\n if (initialEventName) {\n trackEvent(initialEventName);\n }\n return data?.data;\n },\n enabled: !isEmpty(utmParams) && ready\n });\n\n return { trackEvent, ...query };\n};\n\nexport default useTrackVisit;\n","import { isEmpty } from 'lodash';\nimport { endpoint } from 'src/constants';\nimport { Client } from 'src/interfaces';\nimport { apiClient } from '../axios';\nimport { UTMParams, Visit } from './model';\nimport { getVisitorToken, getVisitToken } from './tokens';\n\n/**\n * Tracks a visit with the given UTM parameters. This will only track the visit if there are UTM parameters.\n * @param utmParams\n * @param path\n * @param sessionInfo\n * @returns\n */\nexport const trackVisit = async (\n utmParams: UTMParams,\n path: string | undefined,\n sessionInfo: Partial>\n) => {\n if (isEmpty(utmParams)) {\n return;\n }\n const visitorToken = await getVisitorToken();\n const visitToken = await getVisitToken();\n return await apiClient.post(endpoint('AHOY_VISITS'), {\n visit_token: visitToken?.uuid,\n visitor_token: visitorToken?.uuid,\n landing_page: path?.replace(/^\\//, ''),\n practice_id: sessionInfo?.practiceId,\n source_id: sessionInfo?.sourceId,\n client_id: sessionInfo?.clientId ? parseInt(sessionInfo.clientId) : undefined,\n ...utmParams\n });\n};\n","import { useEffect } from 'react';\nimport useAppState from '../useAppState';\nimport { flushEvents } from 'src/utils/utmTracking';\n\n/**\n * Flushes events when the app goes to the background or becomes inactive.\n */\nconst useFlushEvents = () => {\n const appState = useAppState();\n\n useEffect(() => {\n if (appState === 'background' || appState === 'inactive') {\n void flushEvents();\n }\n }, [appState]);\n};\n\nexport default useFlushEvents;\n","import { useEffect } from 'react';\nimport { flushEvents } from 'src/utils/utmTracking';\nimport useNativeFlushEvents from './index.native';\n\n/**\n * Flushes events when the app goes to the background or becomes inactive.\n * On web, this will also flush events when the page is closed.\n */\nconst useFlushEvents = () => {\n useNativeFlushEvents();\n useEffect(() => {\n window.addEventListener('beforeunload', flushEvents);\n return () => {\n window.removeEventListener('beforeunload', flushEvents);\n };\n }, []);\n};\n\nexport default useFlushEvents;\n","import _ from 'lodash';\nimport { PropsWithChildren, useMemo } from 'react';\nimport { StyleSheet, TextProps as RNTextProps, TextStyle, StyleProp } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport { ThemeProp } from 'react-native-paper/lib/typescript/src/types';\nimport { IS_WEB } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { FontSize, WeightNames, Weight } from 'src/theme';\nimport { containers, fontStyles } from 'src/theme/globalStyles';\n\nexport interface TextProps extends Omit {\n shadow?: boolean;\n fontWeight?: Weight;\n children?: React.ReactNode;\n theme?: ThemeProp | undefined;\n style?: StyleProp;\n}\n\nexport const Body: React.FC> = ({\n children,\n shadow,\n style,\n color,\n fontSize = FontSize.BODY,\n fontStyle,\n fontWeight = Weight.REGULAR,\n letterSpacing,\n textAlign,\n textDecorationLine,\n textDecorationStyle,\n textDecorationColor,\n textShadowColor,\n textShadowOffset,\n textShadowRadius,\n textTransform,\n numberOfLines,\n lineHeight,\n ...props\n}) => {\n const { colors } = useAppTheme();\n const flatStyle = StyleSheet.flatten([style]);\n\n const fontFamily = useMemo(() => {\n const finalWeight = (flatStyle?.fontWeight ?? fontWeight) as Weight;\n let font = `Roboto_${finalWeight}${WeightNames[finalWeight]}`;\n font = fontStyle === 'italic' ? `${font}_Italic` : font;\n return font;\n }, [flatStyle?.fontWeight, fontStyle, fontWeight]);\n\n const flattenedStyle = StyleSheet.flatten([\n fontStyles.body,\n shadow && !IS_WEB && containers.shadow,\n {\n flexShrink: 1,\n color: color ?? colors.text,\n fontFamily,\n fontSize,\n fontStyle,\n letterSpacing,\n textAlign,\n textDecorationLine,\n textDecorationStyle,\n textDecorationColor,\n textShadowColor,\n textShadowOffset,\n textShadowRadius,\n textTransform,\n lineHeight\n },\n _.omit(flatStyle, 'fontFamily', 'fontWeight')\n ]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const Caption: React.FC> = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const Subheading: React.FC> = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const Headline: React.FC> = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const Title: React.FC> = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TextInputProps as PaperInputProps, TextInput as PaperInput } from 'react-native-paper';\nimport { unMask } from 'react-native-mask-text';\nimport { extractStyles, isDefined, multiMask } from 'src/utils';\nimport {\n TextInput as TI,\n NativeSyntheticEvent,\n TextInputSubmitEditingEventData,\n TextInputFocusEventData,\n View,\n StyleProp,\n TextStyle,\n StyleSheet,\n ColorValue\n} from 'react-native';\nimport { palette, Weight } from 'src/theme';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport sentry, { interpolateName } from 'src/utils/sentry';\nimport styled from 'styled-components/native';\nimport { Size } from 'src/constants';\nimport { Caption } from '../Text';\nimport { omit } from 'lodash';\n\nexport type TextInputType = TI;\n\nexport interface TextInputProps extends Omit {\n mask?: string | string[];\n msg?: string | false | React.ReactNode;\n nextRef?: React.MutableRefObject;\n thisRef?: React.MutableRefObject;\n right?:\n | {\n name: React.FunctionComponent | string;\n onPress?: (() => Promise) | (() => void);\n }\n | false;\n}\n\nconst TextInput: React.FC = ({\n value: parentValue = '',\n onChangeText: parentOnChangeText,\n mask: maskArray,\n msg,\n error = false,\n nextRef,\n onSubmitEditing,\n thisRef,\n right,\n style,\n onFocus: parentOnFocus,\n ...props\n}) => {\n const theme = useAppTheme();\n const [masked, setMasked] = useState(parentValue);\n\n useEffect(() => {\n const masked = isDefined(maskArray) ? multiMask(parentValue, maskArray) : parentValue;\n setMasked(masked);\n }, [maskArray, parentValue]);\n\n const onChangeText = (text: string): void => {\n if (isDefined(maskArray)) {\n const maskedText = multiMask(text, maskArray);\n parentOnChangeText?.(unMask(maskedText));\n setMasked(maskedText);\n } else {\n parentOnChangeText?.(text);\n setMasked(text);\n }\n };\n\n const nextRefAndSubmit = (e: NativeSyntheticEvent): void => {\n onSubmitEditing?.(e);\n nextRef?.current?.focus();\n };\n\n const sentryLabel = interpolateName('TextInput', props.label);\n\n const onFocus = useCallback(\n (e: NativeSyntheticEvent) => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${sentryLabel} was focused` });\n parentOnFocus?.(e);\n },\n [parentOnFocus, sentryLabel]\n );\n\n const { innerStyle, outerStyle } = useMemo(() => {\n const flatStyle = StyleSheet.flatten(style);\n return extractStyles(flatStyle);\n }, [style]);\n\n return (\n \n \n )\n }\n onFocus={onFocus}\n {...props}\n />\n {!!msg && (\n \n {msg}\n \n )}\n \n );\n};\n\nexport default TextInput;\n\nexport const getRadiusFromStyle = (style: StyleProp) => {\n const flatStyle = StyleSheet.flatten(style);\n const leftRadius = flatStyle?.borderBottomLeftRadius ?? flatStyle?.borderRadius;\n const rightRadius = flatStyle?.borderBottomRightRadius ?? flatStyle?.borderRadius;\n return { leftRadius, rightRadius };\n};\n\nexport const getBackgroundFromStyle = (style: StyleProp): ColorValue | undefined => {\n const flatStyle = StyleSheet.flatten(style);\n return flatStyle?.backgroundColor;\n};\n\nexport const ErrorContainer = styled(View).attrs((props) => ({\n style: [\n {\n borderBottomLeftRadius: getRadiusFromStyle(props.style).rightRadius,\n borderBottomRightRadius: getRadiusFromStyle(props.style).leftRadius,\n padding: Size.XS,\n backgroundColor: getBackgroundFromStyle(props.style)?.toString() ?? 'transparent'\n },\n props.style\n ]\n}))`\n padding: ${Size.XS}px;\n`;\n\nexport const ErrorText = styled(Caption)`\n color: ${({ theme: { colors } }) => colors.error};\n font-weight: ${Weight.REGULAR};\n letter-spacing: 0.5px;\n`;\n","import React, { PropsWithChildren, useEffect } from 'react';\nimport { Pressable, View } from 'react-native';\nimport { Menu } from 'react-native-paper';\nimport { Margin } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport sentry, { interpolateName } from 'src/utils/sentry';\nimport styled from 'styled-components/native';\n\ninterface Props extends PropsWithChildren {\n tooltipText: React.ReactNode;\n disabled?: boolean;\n}\n\nconst Tooltip: React.FC = ({ tooltipText, children, disabled }) => {\n const { toTrue: openTooltip, toFalse: closeTooltip, value: isTooltipOpen } = useBoolean();\n const { colors } = useAppTheme();\n\n const sentryLabel = interpolateName('Tooltip', tooltipText);\n\n useEffect(() => {\n sentry.addBreadcrumb({\n type: 'Interaction',\n message: `${sentryLabel} was ${isTooltipOpen ? 'opened' : 'closed'}`\n });\n }, [isTooltipOpen, sentryLabel]);\n\n return (\n true}\n onTouchEnd={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n \n {children}\n \n \n }\n onDismiss={closeTooltip}\n visible={isTooltipOpen && !disabled}\n contentStyle={{ backgroundColor: colors.onSurface }}\n >\n \n \n );\n};\n\nexport default Tooltip;\n\nconst StyledItem = styled(Menu.Item).attrs((props) => ({\n titleStyle: [{ ...fontStyles.caption, alignSelf: 'center' }, props.titleStyle]\n}))`\n padding: ${Margin.Small}px;\n height: auto;\n`;\n","import moment from 'moment-timezone';\nimport { useCallback, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\nimport { useTranslation } from 'react-i18next';\nimport { TouchableRipple } from 'react-native-paper';\nimport { DatePickerModal } from 'react-native-paper-dates';\nimport {\n SingleChange,\n ValidRangeType\n} from 'react-native-paper-dates/lib/typescript/Date/Calendar';\nimport { useBoolean } from 'src/hooks';\nimport sentry, { interpolateName } from 'src/utils/sentry';\nimport TextInput, { TextInputProps } from './TextInput';\nimport { extractStyles } from 'src/utils';\n\ninterface DatePickerDate {\n date: number;\n month: number;\n year: number;\n}\n\ninterface Props\n extends Omit<\n TextInputProps,\n 'value' | 'pointerEvents' | 'editable' | 'showSoftInputOnFocus' | 'focusable' | 'caretHidden'\n > {\n value?: Date;\n validRange?: ValidRangeType;\n onConfirm: (v: DatePickerDate | undefined) => void;\n startYear?: number;\n endYear?: number;\n}\nconst DatePicker: React.FC = ({\n value,\n onConfirm,\n startYear,\n endYear,\n validRange,\n style,\n disabled,\n ...textInputProps\n}) => {\n const { i18n } = useTranslation();\n const {\n value: datePickerVisible,\n toTrue: openDatePicker,\n toFalse: closeDatePicker\n } = useBoolean();\n\n const buttonSentryLabel = interpolateName('DatePickerButton', textInputProps.label);\n const modalSentryLabel = interpolateName('DatePickerModal', textInputProps.label);\n\n const onOpenDatePicker = useCallback(() => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${buttonSentryLabel} was pressed` });\n openDatePicker();\n }, [buttonSentryLabel, openDatePicker]);\n\n const onChooseDate: SingleChange = useCallback(\n ({ date }) => {\n if (date) {\n sentry.addBreadcrumb({\n type: 'Interaction',\n message: `${modalSentryLabel}: Date ${date?.toDateString()} was chosen`\n });\n onConfirm({\n date: date.getDate(),\n month: date.getMonth(),\n year: date.getFullYear()\n });\n } else {\n sentry.addBreadcrumb({\n type: 'Interaction',\n message: `${modalSentryLabel}: Date was cleared`\n });\n onConfirm(undefined);\n }\n closeDatePicker();\n },\n [closeDatePicker, modalSentryLabel, onConfirm]\n );\n\n const { innerStyle, outerStyle } = useMemo(() => {\n const flatStyle = StyleSheet.flatten(style);\n return extractStyles(flatStyle);\n }, [style]);\n\n return (\n <>\n \n \n \n \n \n );\n};\n\nexport default DatePicker;\n","import moment from 'moment-timezone';\nimport React, { useCallback, useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\nimport { useTranslation } from 'react-i18next';\nimport { TouchableRipple } from 'react-native-paper';\nimport { TimePickerModal } from 'react-native-paper-dates';\nimport { useBoolean } from 'src/hooks';\nimport TextInput, { TextInputProps } from './TextInput';\nimport { extractStyles, toLocalTime } from 'src/utils';\nimport sentry, { interpolateName } from 'src/utils/sentry';\n\ninterface TimePickerValue {\n hours: number;\n minutes: number;\n}\n\ninterface Props\n extends Omit<\n TextInputProps,\n | 'value'\n | 'pointerEvents'\n | 'editable'\n | 'showSoftInputOnFocus'\n | 'focusable'\n | 'caretHidden'\n | 'theme'\n > {\n value?: Date;\n onConfirm: (v: TimePickerValue | undefined) => void;\n}\n\nconst TimePicker: React.FC = ({ value, onConfirm, style, ...inputProps }) => {\n const { i18n } = useTranslation();\n const {\n value: timePickerVisible,\n toTrue: openTimePicker,\n toFalse: closeTimePicker\n } = useBoolean();\n\n const sentryLabel = interpolateName('TimePicker', inputProps.label);\n\n const onPress = useCallback(() => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${sentryLabel} was opened` });\n openTimePicker();\n }, [sentryLabel, openTimePicker]);\n\n const { innerStyle, outerStyle } = useMemo(() => {\n const flatStyle = StyleSheet.flatten(style);\n return extractStyles(flatStyle);\n }, [style]);\n\n return (\n <>\n \n \n \n {\n sentry.addBreadcrumb({\n type: 'Interaction',\n message: `${sentryLabel}: Time ${value?.hours}:${value?.minutes} was chosen`\n });\n onConfirm(value);\n closeTimePicker();\n }}\n onDismiss={closeTimePicker}\n />\n \n );\n};\n\nexport default TimePicker;\n","import {\n LayoutChangeEvent,\n ScrollView,\n StyleProp,\n View,\n ViewStyle,\n StyleSheet\n} from 'react-native';\nimport { Checkbox, Divider, Menu, TextInput, TouchableRipple } from 'react-native-paper';\nimport React, {\n ReactNode,\n forwardRef,\n useState,\n useCallback,\n Fragment,\n useMemo,\n ReactElement\n} from 'react';\nimport { useBoolean } from 'src/hooks';\nimport _ from 'lodash';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport sentry, { interpolateName } from 'src/utils/sentry';\nimport { ErrorContainer, ErrorText } from './TextInput';\nimport extractStyles from 'src/utils/extractStyles';\nimport { Body } from '../Text';\nimport { Margin } from 'src/constants';\n\nconst MAX_MENU_HEIGHT = 200;\nexport interface Option {\n label: string;\n value: T;\n custom?: ReactNode;\n leadingIcon?: React.FC;\n trailingIcon?: React.FC;\n}\nexport interface MultiSelect = Option> extends DropDownPropsInterface {\n multiSelect: true;\n value: T[];\n onChange: (_value: T[]) => void;\n options: O[];\n}\nexport interface SingleSelect = Option>\n extends DropDownPropsInterface {\n multiSelect?: false;\n value: T | undefined;\n onChange: (_value: T) => void;\n options: O[];\n}\nexport interface DropDownPropsInterface {\n label?: string | undefined;\n labelTransform?: (option: Option) => string;\n placeholder?: string | undefined;\n mode?: 'outlined' | 'flat' | undefined;\n dropDownContainerMaxHeight?: number;\n dropDownContainerHeight?: number;\n activeColor?: string;\n dropDownStyle?: StyleProp;\n accessibilityLabel?: string;\n style?: StyleProp;\n disabled?: boolean;\n error?: boolean;\n msg?: false | string | React.ReactNode;\n}\n\nexport type DropDownForwardRef = = Option>(\n props: MultiSelect | SingleSelect,\n ref: React.ForwardedRef\n) => ReactElement;\n\nconst DropDownRender: DropDownForwardRef = = Option>(\n props: MultiSelect | SingleSelect,\n ref: React.ForwardedRef\n) => {\n const activeTheme = useAppTheme();\n const {\n labelTransform,\n multiSelect,\n value,\n onChange: onSelect,\n activeColor,\n mode,\n label,\n placeholder,\n options,\n dropDownContainerMaxHeight,\n dropDownContainerHeight,\n dropDownStyle,\n accessibilityLabel,\n style,\n disabled,\n msg,\n error\n } = props;\n\n const theme = useAppTheme();\n\n const [inputLayout, setInputLayout] = useState({\n height: 0,\n width: 0,\n x: 0,\n y: 0\n });\n\n const onLayout = (event: LayoutChangeEvent) => {\n setInputLayout(event.nativeEvent.layout);\n };\n\n const displayValue = useMemo(() => {\n if (multiSelect) {\n const _labels = options\n .filter((option) => value.some((v) => _.isEqual(option.value, v)))\n .map((option) => labelTransform?.(option) ?? option.label)\n .join(', ');\n return _labels;\n } else {\n const _item = options.find((option) => _.isEqual(option.value, value));\n if (_item && labelTransform) {\n return labelTransform(_item);\n }\n return _item?.label ?? '';\n }\n }, [multiSelect, options, value, labelTransform]);\n\n const isActive = useCallback(\n (currentValue: T) => {\n if (multiSelect) {\n return value.some((v) => _.isEqual(v, currentValue));\n } else {\n return _.isEqual(value, currentValue);\n }\n },\n [multiSelect, value]\n );\n\n const setActive = useCallback(\n (currentValue: T) => {\n if (multiSelect) {\n const isSelected = value.some((v) => _.isEqual(v, currentValue));\n if (!isSelected) {\n onSelect([...value, currentValue]);\n } else {\n onSelect([...value].filter((v) => !_.isEqual(v, currentValue)));\n }\n } else {\n onSelect(currentValue);\n }\n },\n [multiSelect, onSelect, value]\n );\n\n const { value: visible, toTrue: showDropDown, toFalse: onDismiss } = useBoolean();\n\n const buttonSentryLabel = interpolateName('DropDownButton', label);\n const menuItemSentryLabel = (item: { label: string }) =>\n interpolateName('DropDownMenuItem', item.label);\n\n const onShowDropdown = useCallback(() => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${buttonSentryLabel} was opened` });\n showDropDown();\n }, [buttonSentryLabel, showDropDown]);\n\n const onChooseItem = useCallback(\n (item: T) => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${buttonSentryLabel} was chosen` });\n setActive(item);\n onDismiss?.();\n },\n [buttonSentryLabel, onDismiss, setActive]\n );\n\n const { innerStyle, outerStyle } = useMemo(() => {\n const flatStyle = StyleSheet.flatten(style);\n return extractStyles(flatStyle);\n }, [style]);\n\n return (\n \n \n \n \n }\n onFocus={() => {\n onShowDropdown();\n }}\n onBlur={() => {\n onDismiss();\n }}\n showSoftInputOnFocus={false}\n error={error}\n />\n \n \n }\n style={{\n width: inputLayout?.width,\n ...StyleSheet.flatten(dropDownStyle)\n }}\n contentStyle={{ marginVertical: inputLayout?.height }}\n >\n \n {options.map((_item, _index) => (\n \n onChooseItem(_item.value)}\n >\n \n {_item.leadingIcon && <_item.leadingIcon />}\n \n {labelTransform?.(_item) ?? _item.custom ?? _item.label}\n \n {!!_item.trailingIcon && <_item.trailingIcon />}\n {multiSelect && (\n setActive(_item.value)}\n />\n )}\n \n \n \n \n ))}\n \n \n {!!msg && (\n \n {msg}\n \n )}\n \n );\n};\n\nconst DropDown = forwardRef(DropDownRender) as DropDownForwardRef;\n\nexport default DropDown;\n","import React, { useMemo } from 'react';\nimport { Animated, StyleProp, StyleSheet, View, ViewProps, ViewStyle } from 'react-native';\nimport { TouchableRipple } from 'react-native-paper';\nimport { IS_WEB } from 'src/constants';\nimport useHoverEffect from 'src/hooks/useHoverEffect';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { containers } from 'src/theme/globalStyles';\nimport { colorShade, extractStyles, mergeRefs } from 'src/utils';\nimport sentry from 'src/utils/sentry';\n\ninterface Props extends ViewProps {\n style?: StyleProp;\n onPress?: () => void;\n disabled?: boolean;\n hoverColor?: string;\n hideShadow?: boolean;\n sentryName?: string;\n}\n\nconst HoverCard = React.forwardRef(\n (\n {\n children,\n style,\n onPress: parentOnPress,\n disabled,\n hoverColor,\n hideShadow = false,\n sentryName = 'HoverCard',\n ...props\n },\n ref\n ) => {\n const { colors, roundness, dark } = useAppTheme();\n\n const { innerStyle, outerStyle } = useMemo(() => {\n const combinedStyle = StyleSheet.flatten([\n {\n backgroundColor: colors.surface,\n borderRadius: roundness\n },\n !hideShadow && {\n ...containers.shadow\n },\n style\n ]);\n return extractStyles(combinedStyle);\n }, [colors.surface, hideShadow, roundness, style]);\n\n const [innerRef, hoverAnimationValue] = useHoverEffect({\n disabled: !parentOnPress || disabled\n });\n const backgroundColor = hoverAnimationValue.interpolate({\n inputRange: [0, 1],\n outputRange: [\n (innerStyle.backgroundColor as string) ?? colors.surface,\n hoverColor ??\n colorShade((innerStyle.backgroundColor as string) ?? colors.surface, dark ? 1.2 : 0.8)\n ]\n });\n\n const onPress = useMemo(\n () =>\n parentOnPress\n ? () => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${sentryName} was pressed` });\n parentOnPress?.();\n }\n : undefined,\n [parentOnPress, sentryName]\n );\n\n return (\n \n \n {children}\n \n \n );\n }\n);\n\nexport default HoverCard;\n\ninterface DisableTouchesArgs {\n disabled?: boolean;\n onPress?: () => void;\n}\n\nconst disableTouches = ({ disabled, onPress }: DisableTouchesArgs) => {\n if (!onPress || disabled) {\n return IS_WEB ? 'none' : 'box-none';\n } else return 'auto';\n};\n","import _, { isFunction } from 'lodash';\nimport React, { useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\nimport { ActivityIndicator, ButtonProps } from 'react-native-paper';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { palette, Weight } from 'src/theme';\nimport { isDarkColor } from 'src/utils';\nimport IconProps from '../Icons/IconProps';\nimport { Caption } from '../Text';\nimport HoverCard from './HoverCard';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { interpolateName } from 'src/utils/sentry';\n\nexport interface HoverButtonProps extends Omit {\n icon?: React.ReactNode | ((props: IconProps) => React.JSX.Element);\n isLoading?: boolean;\n children?: ButtonProps['children'];\n numberOfLines?: number;\n sentryName?: string;\n onPress?: () => void;\n}\n\nconst HoverButton: React.FC = ({\n buttonColor: parentColor,\n dark,\n mode = 'text',\n style,\n contentStyle,\n labelStyle,\n children,\n uppercase = true,\n icon: Icon,\n compact,\n numberOfLines,\n sentryName,\n isLoading,\n ...props\n}) => {\n const theme = useAppTheme();\n const color = props.disabled ? theme.colors.disabled : parentColor ?? theme.colors.primary;\n const contentColor = useMemo(() => {\n const labelStyles = StyleSheet.flatten(labelStyle);\n if (labelStyle && labelStyles.color) {\n return labelStyles.color.toString();\n }\n if (color === theme.colors.primary) {\n return theme.colors.onPrimary;\n } else if (color === theme.colors.surface) {\n return theme.colors.onSurface;\n }\n return dark ?? isDarkColor(color) ? palette.AB_BRIGHT_WHITE : palette.AB_STONE_GRAY;\n }, [color, dark, theme, labelStyle]);\n\n const [backgroundColor, hoverColor] = useMemo(() => {\n if (mode === 'contained') {\n return [color, undefined];\n } else {\n return [palette.TRANSPARENT, palette.BLACK_OPACITY_10];\n }\n }, [mode, color]);\n\n const flattenedStyle = useMemo(() => StyleSheet.flatten(style), [style]);\n const sentryLabel = sentryName ?? interpolateName('HoverButton', children);\n return (\n \n {!!Icon &&\n !isLoading &&\n (isFunction(Icon) ? (\n \n ) : (\n Icon\n ))}\n\n {isLoading && }\n\n \n {typeof children === 'string' && uppercase ? children.toLocaleUpperCase() : children}\n \n\n {!!props.loading && }\n \n );\n};\n\nexport default HoverButton;\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Animated, ImageSourcePropType, StyleProp, TextStyle, View, ViewStyle } from 'react-native';\nimport { TouchableRipple } from 'react-native-paper';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport useHoverEffect from 'src/hooks/useHoverEffect';\nimport { containers, fontStyles } from 'src/theme/globalStyles';\nimport { isFunction } from 'lodash';\nimport { fonts, Weight } from 'src/theme';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport sentry, { interpolateName } from 'src/utils/sentry';\n\nconst SMALL_FAB_SIZE = 40;\nconst LARGE_FAB_SIZE = 64;\nconst PROFILE_IMAGE_ALIGNMENT_OFFSET = -8;\n\ninterface Props {\n icon:\n | React.ReactElement\n | ((props: { color: string; size: number }) => React.ReactElement)\n | ImageSourcePropType;\n label: string;\n buttonColor?: string;\n labelColor?: string;\n onPress: () => void;\n labelStyle?: StyleProp;\n iconAnchor?: 'left' | 'right';\n small?: boolean;\n style?: StyleProp;\n}\nconst AnimatedFAB: React.FC = ({\n buttonColor: parentButtonColor,\n labelColor: parentLabelColor,\n onPress: parentOnPress,\n label,\n labelStyle,\n icon: Icon,\n iconAnchor = 'left',\n style,\n small = false\n}) => {\n const theme = useAppTheme();\n const buttonColor = parentButtonColor ?? theme.colors.primary;\n const labelColor = parentLabelColor ?? theme.colors.onPrimary;\n const size = small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE;\n const [width, setWidth] = useState(size);\n const [fabWidth, setFabWidth] = useState(size);\n const [ref, hoverAnimationValue] = useHoverEffect();\n useEffect(() => {\n const listener = hoverAnimationValue.addListener(({ value }) => {\n setFabWidth(value * width + size);\n });\n return () => hoverAnimationValue.removeListener(listener);\n }, [hoverAnimationValue, size, small, width]);\n\n const renderIcon = useMemo(() => {\n if (isFunction(Icon)) {\n return ;\n } else if (React.isValidElement(Icon)) {\n return Icon;\n } else {\n return ;\n }\n }, [Icon, labelColor, small]);\n\n const sentryLabel = useMemo(() => interpolateName('AnimatedFab', label), [label]);\n const onPress = useCallback(() => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${sentryLabel} was pressed` });\n parentOnPress?.();\n }, [parentOnPress, sentryLabel]);\n\n return (\n \n \n \n {renderIcon}\n {\n setWidth(nativeEvent.layout.width)}\n style={[\n {\n color: labelColor,\n opacity: hoverAnimationValue\n },\n labelStyle\n ]}\n >\n {label}\n \n }\n \n \n \n );\n};\n\nexport default AnimatedFAB;\n\nconst IconContainer = styled.View<{ small?: boolean }>`\n width: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n height: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n margin: ${PROFILE_IMAGE_ALIGNMENT_OFFSET}px;\n align-items: center;\n justify-content: center;\n`;\n\nconst StyledImage = styled.Image<{ small?: boolean }>`\n width: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n height: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n border-radius: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n`;\nconst Container = styled(TouchableRipple)<{ small?: boolean }>`\n border-radius: ${({ small }) => (small ? SMALL_FAB_SIZE : LARGE_FAB_SIZE)}px;\n overflow: hidden;\n`;\n\nconst StyledButton = styled.View<{ buttonColor: string; iconAnchor: 'left' | 'right' }>`\n flex-direction: ${({ iconAnchor }) => (iconAnchor === 'left' ? 'row' : 'row-reverse')};\n flex-shrink: 0;\n padding-vertical: ${Margin.Medium}px;\n padding-horizontal: ${Margin.Medium}px;\n align-items: center;\n background-color: ${({ buttonColor }) => buttonColor};\n`;\n\n// @types/styled-components View ref has a conflicting type with @types/react-native View ref\nconst AnimatedContainer = styled(View)<{ width: number; iconAnchor: 'left' | 'right' }>`\n width: ${({ width }) => width}px;\n flex-shrink: 0;\n align-items: ${({ iconAnchor }) => (iconAnchor === 'left' ? 'flex-start' : 'flex-end')};\n`;\n\nconst AnimatedLabel = styled(Animated.Text)<{ small?: boolean }>`\n padding-right: ${Size.XS}px;\n padding-left: ${Size.S}px;\n letter-spacing: ${fontStyles.body.letterSpacing}px;\n font-size: ${({ small }) =>\n small ? fontStyles.body.fontSize : fontStyles.subheading.fontSize}px;\n font-weight: ${Weight.REGULAR};\n font-family: ${fonts.roboto.medium};\n`;\n","import React from 'react';\nimport { SlideItem } from './Slide';\nimport { Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\nimport { Animated, FlatList } from 'react-native';\n\ninterface Props {\n item: SlideItem;\n index: number;\n sliderWidth: number;\n focusedIndex: number;\n scrollX: Animated.Value;\n slideRef: React.RefObject>;\n}\n\nconst Dot: React.FC = ({ item, index, scrollX, sliderWidth, focusedIndex, slideRef }) => {\n const { colors } = useAppTheme();\n const inputRange = [(index - 1) * sliderWidth, index * sliderWidth, (index + 1) * sliderWidth];\n const dotWidth = scrollX.interpolate({\n inputRange,\n outputRange: [Size.X2_S, Size.S, Size.X2_S],\n extrapolate: 'clamp'\n });\n\n const dotXCenter = scrollX.interpolate({\n inputRange,\n outputRange: [0, -Size.X3_S, 0],\n extrapolate: 'clamp'\n });\n\n const dotColor = scrollX.interpolate({\n inputRange,\n outputRange: [colors.disabled, colors.placeholder, colors.disabled],\n extrapolate: 'clamp'\n });\n\n const disabled = index === focusedIndex;\n\n return (\n {\n slideRef.current?.scrollToIndex({ index, animated: true });\n }}\n >\n \n \n );\n};\n\nconst DotTouchable = styled.Pressable.attrs({\n hitSlop: { top: Size.XS, right: Size.XS, bottom: Size.XS, left: Size.XS }\n})`\n width: ${Size.X2_S}px;\n height: ${Size.X2_S}px;\n border-radius: ${Size.X2_S}px;\n`;\n\nconst DotView = styled(Animated.View)`\n width: ${Size.X2_S}px;\n height: ${Size.X2_S}px;\n border-radius: ${Size.X2_S}px;\n background-color: ${({ theme }) => theme.colors.placeholder};\n`;\n\nexport default Dot;\n","import styled from 'styled-components/native';\nimport { SlideItem } from './Slide';\nimport { Margin } from 'src/constants';\nimport { Animated, FlatList } from 'react-native';\nimport Dot from './Dot';\n\ninterface Props {\n slides: SlideItem[];\n scrollX: Animated.Value;\n slideRef: React.RefObject>;\n sliderWidth: number;\n index: number;\n}\n\nconst Pagination: React.FC = ({\n slides,\n scrollX,\n slideRef,\n index: focusedIndex,\n sliderWidth\n}) => {\n return (\n \n {slides.map((item, index) => (\n \n ))}\n \n );\n};\nexport default Pagination;\n\nconst Container = styled(Animated.View)`\n flex-direction: row;\n gap: ${Margin.Large}px;\n align-self: center;\n justify-content: center;\n`;\n","import { ViewProps, LayoutChangeEvent, View } from 'react-native';\nimport { IS_WEB } from 'src/constants';\n\nconst FixCellOffsetOnWeb: React.FC = (props) => {\n const { onLayout, index, width, ...other } = props;\n\n if (IS_WEB && width) {\n const fixOffsetOnLayout = (e: LayoutChangeEvent) => {\n if (onLayout && width) {\n onLayout({\n ...e,\n nativeEvent: {\n ...e.nativeEvent,\n layout: {\n ...e.nativeEvent.layout,\n // workaround: override the x offset\n x: index * width\n }\n }\n });\n }\n };\n\n return ;\n }\n\n return ;\n};\n\nexport default FixCellOffsetOnWeb;\n","import { PropsWithChildren } from 'react';\nimport { StyleProp, TextStyle } from 'react-native';\nimport { Body } from 'src/components/Text';\nimport styled from 'styled-components/native';\n\nconst BULLET = '\\u2022';\nconst TAB = '\\t';\n\ninterface Props {\n style?: StyleProp;\n bulletStyle?: StyleProp;\n}\nconst BulletText: React.FC> = ({ children, style, bulletStyle }) => {\n return (\n \n \n {BULLET}\n \n {TAB}\n \n \n \n {children}\n \n \n );\n};\n\nconst BulletContainer = styled.View`\n flex-grow: 0;\n flex-shrink: 0;\n align-items: center;\n`;\n\nconst BulletSpacer = styled(Body)`\n line-height: 0;\n height: 0;\n user-select: none;\n`;\nconst Container = styled.View`\n flex-direction: row;\n`;\n\nconst TextContainer = styled.View`\n flex: 1;\n`;\nexport default BulletText;\n","import React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Animated, StyleProp, TextStyle, ViewStyle } from 'react-native';\nimport { Body, Title } from 'src/components/Text';\nimport { Margin, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport BulletText from './BulletText';\nimport { isArray } from 'lodash';\n\nexport interface SlideItem {\n image?: React.ReactNode;\n title?: string;\n body?: React.ReactNode;\n}\n\nexport interface SlideProps {\n item: T;\n width?: number;\n scrollX: Animated.Value;\n sliderWidth: number;\n index: number;\n titleStyle?: StyleProp;\n bodyStyle?: StyleProp;\n imageStyle?: StyleProp;\n}\n\nexport const Slide: React.FC> = ({\n item,\n width,\n index,\n sliderWidth,\n scrollX,\n titleStyle,\n bodyStyle,\n imageStyle\n}) => {\n const { t } = useTranslation();\n const inputRange = [(index - 1) * sliderWidth, index * sliderWidth, (index + 1) * sliderWidth];\n const scale = scrollX.interpolate({\n inputRange,\n outputRange: [0.8, 1, 0.8],\n extrapolate: 'clamp'\n });\n\n const body = useMemo(() => {\n if (typeof item.body === 'string') {\n const obj = t(item.body, { returnObjects: true });\n if (typeof obj === 'string' || isArray(obj)) {\n return obj;\n }\n }\n return item.body;\n }, [item.body, t]);\n\n return (\n \n {!!item.image && (\n \n {item.image}\n \n )}\n \n {!!item.title && (\n \n {t(item.title)}\n \n )}\n {typeof body === 'string' && {body}}\n {Array.isArray(body) && (\n \n {body.map((item) => (\n \n {item}\n \n ))}\n \n )}\n \n \n );\n};\n\nconst Container = styled.View<{ width?: number }>`\n ${({ width }) => (width ? `width: ${width}px;` : '')}\n gap: ${Margin.Large}px;\n`;\n\nconst StyledImageContainer = styled(Animated.View)`\n flex-basis: ${({ theme }) => theme.viewMode.narrowMaxContentWidth}px;\n justify-content: center;\n align-content: center;\n`;\n\nconst StyledText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst TextContainer = styled.View<{ hasImage: boolean }>`\n margin-top: ${({ hasImage }) => (hasImage ? 0 : Size.X3_L)}px;\n position: ${({ hasImage }) => (hasImage ? 'absolute' : 'relative')};\n padding-horizontal: ${Margin.Large}px;\n justify-content: flex-end;\n gap: ${Margin.Large}px;\n bottom: 0;\n width: 100%;\n`;\n\nconst ListContainer = styled.View`\n gap: ${Margin.Small}px;\n`;\n","import React, { LegacyRef, useCallback, useRef, useState } from 'react';\nimport Pagination from './Pagination';\nimport {\n Animated,\n FlatList,\n FlatListProps,\n LayoutChangeEvent,\n NativeScrollEvent,\n NativeSyntheticEvent\n} from 'react-native';\nimport FixCellOffsetOnWeb from './FixCellOffsetOnWeb';\nimport { Slide, SlideItem, SlideProps } from './Slide';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { isDefined } from 'src/utils';\nimport { useBoolean } from 'src/hooks';\nimport useStateRef from 'react-usestateref';\n\nconst viewabilityConfig = {\n itemVisiblePercentThreshold: 50\n};\n\ninterface Props\n extends Omit, 'renderItem' | 'viewabilityConfig'> {\n data: T[];\n SlideComponent?: React.FC>;\n ref?: LegacyRef>;\n isAutoPlay?: boolean;\n}\ninterface SliderWithForwardedRef extends React.ForwardRefExoticComponent> {\n (props: Props): ReturnType>>;\n}\nconst Slider: SliderWithForwardedRef = React.forwardRef(\n (\n {\n data,\n onScroll: parentOnScroll,\n onLayout: parentOnLayout,\n SlideComponent = Slide,\n isAutoPlay,\n ...props\n },\n ref\n ) => {\n const [width, setWidth] = useState();\n const scrollX = useRef(new Animated.Value(0)).current;\n const [index, setIndex, currentIndexRef] = useStateRef(0);\n\n const interval = useRef();\n const { value: isPlaying, toTrue: play, toFalse: pause } = useBoolean(true);\n const { value: resetIntervalTrigger, toggle: resetInterval } = useBoolean();\n\n const onHandleScroll = (event: NativeSyntheticEvent) => {\n if (!width) return;\n setIndex((prev) => {\n const next = Math.round(event.nativeEvent.contentOffset.x / width);\n if (prev !== next) {\n resetInterval();\n }\n return next;\n });\n\n Animated.event(\n [\n {\n nativeEvent: {\n contentOffset: { x: scrollX }\n }\n }\n ],\n {\n useNativeDriver: false\n }\n )(event);\n parentOnScroll?.(event);\n };\n\n const onHandleLayout = useRef((event: LayoutChangeEvent) => {\n setWidth(event.nativeEvent.layout.width);\n parentOnLayout?.(event);\n }).current;\n\n useFocusEffect(\n useCallback(() => {\n isDefined(resetIntervalTrigger);\n if (width && isPlaying && isAutoPlay) {\n const intervalVal: NodeJS.Timeout = setInterval(() => {\n const nextIndex =\n currentIndexRef.current + 1 >= data.length ? 0 : currentIndexRef.current + 1;\n flatListRef.current?.scrollToOffset({\n animated: true,\n offset: nextIndex * width\n });\n }, 10000);\n interval.current = intervalVal;\n return () => clearInterval(intervalVal);\n }\n }, [currentIndexRef, data.length, isAutoPlay, isPlaying, resetIntervalTrigger, width])\n );\n\n const flatListRef = useRef | null>(null);\n\n return (\n <>\n }\n ref={(r) => {\n flatListRef.current = r;\n if (typeof ref === 'function') {\n ref(r);\n } else if (ref) {\n ref.current = r;\n }\n }}\n data={data}\n renderItem={({ item, index }) => {\n if (!width) return null;\n return (\n \n );\n }}\n onLayout={onHandleLayout}\n horizontal\n pagingEnabled\n snapToAlignment={'center'}\n showsHorizontalScrollIndicator={false}\n onScroll={onHandleScroll}\n scrollEventThrottle={1}\n viewabilityConfig={viewabilityConfig}\n onScrollBeginDrag={pause}\n onScrollEndDrag={play}\n />\n {!!width && (\n \n )}\n \n );\n }\n);\n\nexport default Slider;\n","import _ from 'lodash';\nimport moment from 'moment-timezone';\nimport React, { ReactNode, useEffect, useMemo, useRef } from 'react';\nimport { Animated, Easing, StyleProp, ViewStyle } from 'react-native';\nimport { IS_WEB, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { isDefined } from 'src/utils';\nimport styled from 'styled-components/native';\n\ninterface BaseProps {\n isLoading?: boolean;\n width?: number | `${number}%`;\n height?: number | `${number}%`;\n borderRadius?: number;\n style?: StyleProp;\n children?: Exclude;\n}\n\ninterface CircularProps extends BaseProps {\n size: number;\n}\n\ntype Props = CircularProps | BaseProps;\n\nconst isCircular = (props: Props): props is CircularProps => {\n const tempProps = props as CircularProps;\n return isDefined(tempProps.size);\n};\n\nconst Shimmer: React.FC = ({\n isLoading = true,\n children,\n style,\n borderRadius: _borderRadius = Size.M,\n ...sizeProps\n}) => {\n const { colors } = useAppTheme();\n const opacity = useRef(new Animated.Value(1)).current;\n\n useEffect(() => {\n opacity.setValue(1);\n if (isLoading) {\n const animation = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, {\n toValue: 0.5,\n easing: Easing.quad,\n duration: moment.duration(0.5, 'second').asMilliseconds(),\n useNativeDriver: !IS_WEB\n }),\n Animated.timing(opacity, {\n toValue: 1,\n easing: Easing.quad,\n duration: moment.duration(0.5, 'second').asMilliseconds(),\n useNativeDriver: !IS_WEB\n })\n ])\n );\n animation.start();\n return () => {\n animation.stop();\n };\n }\n }, [opacity, isLoading]);\n\n const [width, height, borderRadius] = useMemo(() => {\n if (isCircular(sizeProps)) {\n return _.times(3, () => sizeProps.size);\n }\n return [sizeProps.width, sizeProps.height, _borderRadius];\n }, [_borderRadius, sizeProps]);\n\n if (isLoading) {\n return (\n \n {children}\n \n );\n }\n return <>{children};\n};\n\nexport default Shimmer;\n\nconst Invisible = styled.View`\n opacity: 0;\n`;\n","import { LinearGradient } from 'expo-linear-gradient';\nimport { View } from 'react-native';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport ReactNativeModal from 'react-native-modal';\nimport { Card, RadioButton } from 'react-native-paper';\nimport { Size, MOBILE_WIDTH_MAX, Margin } from 'src/constants';\nimport { Weight, palette } from 'src/theme';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { colorShade } from 'src/utils';\nimport styled from 'styled-components/native';\nimport { HoverButton } from './kit';\nimport Shimmer from './Shimmer';\nimport color from 'color';\nimport { Body } from './Text';\n\nexport const MasterView = styled.View`\n flex-grow: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n gap: ${Size.S}px;\n padding: ${Size.S}px;\n`;\n\nexport const StyledMasterView = styled.View`\n flex-grow: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n padding: ${Size.S}px;\n gap: ${Size.S}px;\n`;\n\nexport const StyledCard = styled(Card)`\n width: 100%;\n align-self: center;\n padding: ${Margin.Medium}px;\n max-width: ${({ theme }) => (theme.viewMode.isMobile ? 'auto' : `${MOBILE_WIDTH_MAX}px`)};\n`;\n\nexport const Row = styled.View<{\n justify?: 'center' | 'flex-start' | 'flex-end' | 'space-between';\n}>`\n flex-direction: row;\n align-items: center;\n justify-content: ${({ justify = 'center' }) => justify};\n width: auto;\n`;\n\nexport const Column = styled.View`\n flex-direction: column;\n flex: 1;\n`;\n\nexport const FlexColumn = styled.View<{\n numCols?: number;\n align?: 'center' | 'flex-start' | 'flex-end' | 'stretch';\n}>`\n flex-direction: column;\n align: ${({ align = 'center' }) => align};\n flex: ${({ numCols = 1 }) => numCols};\n`;\n\nexport const StyledModal = styled(ReactNativeModal)`\n flex: 1;\n margin: ${Margin.Large}px;\n`;\n\nexport const StyledRadioButton = styled(RadioButton.Item).attrs({\n mode: 'android',\n labelStyle: fontStyles.caption\n})`\n flex: 1;\n`;\n\nexport const StyledKeyboardAwareScrollView = styled(KeyboardAwareScrollView).attrs((props) => ({\n contentContainerStyle: [\n {\n flexGrow: 1,\n alignSelf: 'center',\n width: props.theme.viewMode.maxContentWidth,\n gap: Margin.Small,\n padding: Margin.Small\n },\n props.contentContainerStyle\n ]\n}))`\n width: 100%;\n flex: 1;\n align-self: center;\n margin-horizontal: auto;\n`;\n\nexport const StyledSectionHeader = styled(View)`\n padding-top: ${Size.L}px;\n padding-left: ${Margin.Small}px;\n`;\n\nexport const StyledResponsiveView = styled(View)`\n padding-horizontal: ${Margin.Small}px;\n`;\n\nexport const BottomButtonView = styled(View)`\n flex-shrink: 0;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n padding: ${Margin.Small}px\n justify-content: ${({ theme }) => (theme.viewMode.isWeb ? 'flex-start' : 'flex-end')};\n`;\n\nexport const BottomButtonViewForScrollView = styled(View)`\n justify-content: ${({ theme }) => (theme.viewMode.isWeb ? 'flex-start' : 'flex-end')};\n margin-horizontal: ${Margin.Small}px;\n padding-bottom: ${Margin.Small}px;\n padding-top: ${Margin.Medium}px;\n`;\n\nexport const FullSizeShimmer = styled(Shimmer)`\n width: 100%;\n height: 100%;\n border-radius: 0px;\n`;\n\nexport const HelperButton = styled(HoverButton).attrs(({ theme: { colors } }) => ({\n mode: 'text',\n uppercase: false,\n buttonColor: colors.onPrimary\n}))``;\n\nexport const PrimaryGradientBackground = styled(LinearGradient).attrs(({ theme }) => ({\n colors: [theme.colors.primary, colorShade(theme.colors.primary, 0.8)]\n}))`\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: -1;\n`;\n\nexport const GeneralView = styled(View)`\n padding: ${Size.M}px ${Size.X2_S}px ${Size.X3_S}px ${Size.XS}px;\n background-color: ${({ theme }) =>\n theme.dark\n ? color(theme.colors.background).lighten(0.24).rgb().string()\n : color(theme.colors.background).darken(0.06).rgb().string()};\n color: ${({ theme }) => (theme.dark ? palette.WHITE_OPACITY_54 : palette.BLACK_OPACITY_54)};\n border-bottom-width: ${Size.X4_S}px;\n border-bottom-style: solid;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nexport const Link = styled(Body)`\n text-decoration: underline;\n text-decoration-color: ${({ theme }) => theme.colors.onSurface};\n color: ${({ theme }) => theme.colors.onSurface};\n font-weight: ${Weight.MEDIUM};\n`;\n\nexport const ChipContainer = styled.ScrollView.attrs(({ theme }) => ({\n horizontal: !theme.viewMode.isWeb,\n showsHorizontalScrollIndicator: false,\n contentInset: { left: Size.S, right: Size.S },\n contentOffset: { x: -Size.S, y: 0 },\n contentContainerStyle: [\n theme.viewMode.isWeb\n ? { flexDirection: 'row', flexWrap: 'wrap' }\n : { paddingHorizontal: Size.S },\n { gap: Size.XS }\n ]\n}))`\n ${({ theme }) => (theme.viewMode.isWeb ? `margin-horizontal: ${Size.M}px;` : '')}\n`;\n","import React, { PropsWithChildren, useEffect, useImperativeHandle } from 'react';\nimport { Margin, MOBILE_WIDTH_MAX, Size } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { ForwardRefFC } from 'src/types';\nimport styled from 'styled-components/native';\nimport { StyledModal } from './common';\nimport { HoverButton } from './kit';\nimport { Body, Subheading } from './Text';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Card } from 'react-native-paper';\nimport { InteractionManager } from 'react-native';\n\nconst MAX_ROW_SIZE = 2;\nconst MAX_CONTENT_WIDTH = 300;\nexport interface AlertOption {\n action?: () => void;\n label: string;\n type?: 'destructive' | 'confirmation' | 'neutral';\n}\n\ninterface AlertProps extends PropsWithChildren {\n title: string;\n body?: React.ReactNode;\n options?: AlertOption[];\n dismissOnBackdropPress?: boolean;\n}\n\nexport interface AlertHandle {\n alert: () => void;\n}\n\nconst defaultOption: AlertOption = {\n label: 'Ok'\n};\n\nconst Alert: ForwardRefFC = React.forwardRef(\n ({ options = [defaultOption], title, dismissOnBackdropPress, body, children }, ref) => {\n const { value: nativeIsVisible, setValue } = useBoolean();\n const { value: isVisible, toFalse: hide, toTrue: alert } = useBoolean();\n\n useEffect(() => {\n void InteractionManager.runAfterInteractions(() => {\n setValue(isVisible);\n });\n }, [isVisible, setValue]);\n\n useImperativeHandle(ref, () => ({ alert }), [alert]);\n\n const { colors } = useAppTheme();\n\n return (\n \n \n \n \n {title}\n \n {!!body && (\n \n \n {body}\n \n \n )}\n {children}\n \n MAX_ROW_SIZE}>\n {options.map(({ action, label, type = 'confirmation' }, i) => {\n return (\n {\n hide();\n action?.();\n }}\n isColumn={options.length > MAX_ROW_SIZE}\n isFirst={i === 0}\n isLast={i === options.length - 1}\n key={label}\n color={type === 'destructive' ? colors.error : colors.primary}\n mode={type === 'neutral' ? 'outlined' : 'contained'}\n labelStyle={{ color: type === 'neutral' ? colors.onSurface : colors.onPrimary }}\n >\n {label}\n \n );\n })}\n \n \n \n );\n }\n);\n\nexport default Alert;\n\nconst BodyContent = styled.View`\n margin: ${Margin.Medium}px;\n`;\n\nconst Content = styled.ScrollView`\n padding: ${Margin.Large}px;\n max-width: ${MAX_CONTENT_WIDTH}px;\n`;\n\nconst ButtonsContainer = styled.View<{ isColumn: boolean }>`\n flex-grow: 1;\n justify-content: center;\n align-items: stretch;\n flex-direction: ${({ isColumn }) => (isColumn ? 'column' : 'row')};\n`;\n\nexport const StyledCard = styled(Card)`\n width: 100%;\n padding-top: ${Size.X2_S}px;\n align-self: center;\n max-width: ${({ theme }) => (theme.viewMode.isMobile ? 'auto' : `${MOBILE_WIDTH_MAX}px`)};\n`;\n\nconst AlertButton = styled(HoverButton)<{ isFirst?: boolean; isLast?: boolean; isColumn: boolean }>`\n ${({ isColumn }) => (isColumn ? 'flex-grow: 1' : 'flex: 1')};\n padding: ${Margin.Large}px;\n border-radius: 0px;\n border-width: 0px;\n border-top-width: 0.5px;\n border-bottom-left-radius: ${({ theme, isFirst, isLast, isColumn }) =>\n isFirst || (isLast && isColumn) ? `${theme.roundness}px` : '0px'};\n border-bottom-right-radius: ${({ theme, isLast }) => (isLast ? `${theme.roundness}px` : '0px')};\n`;\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigation } from '@react-navigation/native';\nimport Alert, { AlertHandle, AlertOption } from './Alert';\n\ninterface Props {\n isDirty: boolean;\n}\n\nconst DiscardChangesModal: React.FC = ({ isDirty }) => {\n const { t } = useTranslation('discardChanges');\n const { dispatch, addListener } = useNavigation();\n\n const discardCallback = useRef<() => void>();\n useEffect(\n () =>\n addListener('beforeRemove', (e) => {\n if (!isDirty) {\n return;\n }\n e.preventDefault();\n discardCallback.current = () => {\n dispatch(e.data.action);\n discardCallback.current = undefined;\n };\n confirmModalRef.current?.alert();\n }),\n [addListener, isDirty, dispatch]\n );\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n action: () => discardCallback.current?.(),\n label: t('goBack'),\n type: 'neutral'\n },\n\n {\n label: t('keepEditing')\n }\n ],\n [t]\n );\n\n return (\n \n );\n};\n\nexport default DiscardChangesModal;\n","import * as React from 'react';\nimport { StatusBar, StatusBarProps } from 'react-native';\nimport { useIsFocused } from '@react-navigation/native';\n\nconst FocusAwareStatusBar: React.FC = (props) => {\n const isFocused = useIsFocused();\n\n return isFocused ? : null;\n};\n\nexport default FocusAwareStatusBar;\n","import React, { PropsWithChildren } from 'react';\nimport { View } from 'react-native';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\ninterface AlertBadgeProps extends PropsWithChildren {\n hasAlert: boolean;\n}\nconst AlertBadge: React.FC = ({ children, hasAlert }) => (\n \n {children}\n {hasAlert && }\n \n);\n\nexport default AlertBadge;\n\nconst Badge = styled.View`\n position: absolute;\n top: ${-Size.X4_S}px;\n right: ${-Size.X4_S}px;\n background-color: ${({ theme }) => theme.colors.notification};\n border-radius: ${Size.X2_S}px;\n width: ${Size.X2_S}px;\n height: ${Size.X2_S}px;\n`;\n","import { useFocusEffect } from '@react-navigation/native';\nimport { useCallback, useState } from 'react';\nimport { Keyboard } from 'react-native';\nimport { IS_ANDROID } from 'src/constants';\n\nconst useKeyboardStatus = () => {\n const [status, setStatus] = useState(false);\n const [height, setHeight] = useState(0);\n useFocusEffect(\n useCallback(() => {\n const willHideListener = Keyboard.addListener(\n IS_ANDROID ? 'keyboardDidHide' : 'keyboardWillHide',\n (e) => {\n setStatus(false);\n setHeight(e.endCoordinates.height);\n }\n );\n const willShowListener = Keyboard.addListener(\n IS_ANDROID ? 'keyboardDidShow' : 'keyboardWillShow',\n (e) => {\n setStatus(true);\n setHeight(e.endCoordinates.height);\n }\n );\n return () => {\n willHideListener.remove();\n willShowListener.remove();\n };\n }, [])\n );\n\n return { status, height };\n};\n\nexport default useKeyboardStatus;\n","import React, { useCallback, useMemo } from 'react';\nimport { Animated, GestureResponderEvent } from 'react-native';\nimport { ButtonProps, TouchableRipple } from 'react-native-paper';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { IS_ANDROID, IS_IOS, Margin } from 'src/constants';\nimport useHoverEffect from 'src/hooks/useHoverEffect';\nimport { colorShade, transparent } from 'src/utils/colorValues';\nimport styled from 'styled-components/native';\nimport { Subheading } from './Text';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport useKeyboardStatus from 'src/hooks/useKeyboardStatus';\nimport sentry, { interpolateName } from 'src/utils/sentry';\n\ninterface Props extends Omit {\n shade?: number;\n sentryName?: string;\n}\nconst BottomButton: React.FC = ({\n children,\n disabled,\n shade = 0.8,\n sentryName,\n onPress: parentOnPress,\n ...props\n}) => {\n const { colors } = useAppTheme();\n const { bottom } = useSafeAreaInsets();\n const [ref, hoverAnimationValue] = useHoverEffect({ disabled });\n const color = disabled ? colors.disabled : colors.primary;\n const textColor = disabled ? transparent(colors.onPrimary, 0.5) : colors.onPrimary;\n const backgroundColor = hoverAnimationValue.interpolate({\n inputRange: [0, 1],\n outputRange: [color, transparent(color, shade)]\n });\n\n const { status, height } = useKeyboardStatus();\n\n const iOSKeyboardCompensation = IS_IOS && status ? height : 0;\n\n const sentryLabel = useMemo(\n () => sentryName ?? interpolateName('BottomButton', children),\n [children, sentryName]\n );\n\n const onPress = useCallback(\n (e: GestureResponderEvent) => {\n sentry.addBreadcrumb({ type: 'Interaction', message: `${sentryLabel} was pressed` });\n parentOnPress?.(e);\n },\n [parentOnPress, sentryLabel]\n );\n\n return (\n \n \n \n \n {children}\n \n \n \n {!status && }\n \n );\n};\n\nexport default BottomButton;\n\nconst ButtonContainer = styled.View`\n flex-shrink: 0;\n background-color: ${({ theme }) => theme.colors.surface};\n`;\nconst DarkPrimaryStrip = styled.View<{ height: number; disabled?: boolean; shade: number }>`\n height: ${({ height }) => height}px;\n background-color: ${({ theme, disabled, shade }) =>\n disabled ? theme.colors.placeholder : colorShade(theme.colors.primary, shade)};\n`;\n","import { StyleSheet } from 'react-native';\nimport { Size } from 'src/constants';\n\nexport const containedStyle = StyleSheet.create({\n button: { alignSelf: 'stretch', borderWidth: 1, padding: Size.S }\n});\n\nexport default containedStyle;\n","import { fontStyles } from 'src/theme/globalStyles';\nimport { HoverButton } from '../kit';\nimport { HoverButtonProps } from '../kit/HoverButton';\nimport style from './style';\n\nconst CPrimaryButton: React.FC> = ({\n mode = 'contained',\n children,\n style: parentStyle,\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport default CPrimaryButton;\n","import React, {\n PropsWithChildren,\n useCallback,\n useEffect,\n useImperativeHandle,\n useState\n} from 'react';\nimport { StyleProp, ViewStyle, StyleSheet } from 'react-native';\nimport ReactNativeModal from 'react-native-modal';\nimport { Size } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { ForwardRefFC } from 'src/types';\nimport styled from 'styled-components/native';\nimport BottomButton from './BottomButton';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { pick } from 'lodash';\nimport { Portal } from 'react-native-paper';\n\ninterface ModalDrawerProps extends PropsWithChildren {\n startOpen?: boolean;\n onClose?: () => void;\n onOpen?: () => void;\n bottomButton?: {\n onPress: () => void;\n label: React.ReactNode;\n dismiss?: boolean;\n };\n cardStyle?: StyleProp;\n contentContainerStyle?: StyleProp;\n disableBackgroundDismiss?: boolean;\n}\n\nexport interface ModalDrawerHandle {\n dismiss: () => void;\n show: () => void;\n isVisible: boolean;\n}\n\nconst ModalDrawer: ForwardRefFC = React.forwardRef<\n ModalDrawerHandle,\n ModalDrawerProps\n>(\n (\n {\n startOpen,\n onClose,\n children,\n bottomButton,\n cardStyle,\n onOpen,\n disableBackgroundDismiss,\n contentContainerStyle\n },\n ref\n ) => {\n const { value: isVisible, toTrue: open, toFalse: close } = useBoolean(!!startOpen);\n const [visible, setVisible] = useState(isVisible);\n\n const onAction = useCallback(() => {\n if (bottomButton?.dismiss ?? true) {\n close();\n }\n bottomButton?.onPress();\n }, [bottomButton, close]);\n\n useImperativeHandle(\n ref,\n () => ({\n dismiss: close,\n show: open,\n isVisible\n }),\n [close, isVisible, open]\n );\n\n const { top } = useSafeAreaInsets();\n\n useEffect(() => close, [close]);\n\n useEffect(() => {\n if (isVisible) {\n setVisible(true);\n }\n }, [isVisible]);\n\n if (!visible) return null;\n\n return (\n {\n onClose?.();\n setVisible(false);\n }}\n >\n \n \n \n \n {children}\n \n {!!bottomButton && (\n \n {bottomButton.label}\n \n )}\n \n \n \n \n );\n }\n);\n\nexport default ModalDrawer;\n\nconst Modal = styled(ReactNativeModal)`\n margin-bottom: 0px;\n flex: 1;\n`;\n\nconst Card = styled.ScrollView.attrs({\n alwaysBounceHorizontal: false,\n alwaysBounceVertical: false\n})`\n border-top-left-radius: ${({ theme }) => (theme.viewMode.isMobile ? Size.M : theme.roundness)}px;\n border-top-right-radius: ${({ theme }) => (theme.viewMode.isMobile ? Size.M : theme.roundness)}px;\n background-color: ${({ theme }) => theme.colors.surface};\n overflow: hidden;\n`;\n\nconst Container = styled.View`\n width: ${({ theme }) => theme.viewMode.maxContentWidth}px;\n`;\n\nconst StyledBottomButtonContainer = styled.View`\n border-bottom-left-radius: ${({ theme }) => (theme.viewMode.isMobile ? 0 : theme.roundness)}px;\n border-bottom-right-radius: ${({ theme }) => (theme.viewMode.isMobile ? 0 : theme.roundness)}px;\n overflow: hidden;\n`;\n\nconst ModalContent = styled.View.attrs({\n pointerEvents: 'box-none'\n})<{ paddingTop: number }>`\n margin: ${({ theme }) => (theme.viewMode.isMobile ? '0px' : 'auto')};\n padding-top: ${({ paddingTop }) => paddingTop}px;\n flex: 1;\n justify-content: ${({ theme }) => (theme.viewMode.isMobile ? 'flex-end' : 'center')};\n align-items: center;\n`;\n","import * as React from 'react';\nimport { useState } from 'react';\nimport TextInput, { TextInputProps } from '../kit/TextInput';\n\nconst SecureTextInput: React.FC = ({ disabled = false, ...props }) => {\n const [isSecureTextEntry, setIsSecureTextEntry] = useState(true);\n\n return (\n {\n setIsSecureTextEntry((prev) => !prev);\n }\n }}\n {...props}\n />\n );\n};\n\nexport default SecureTextInput;\n","import React from 'react';\nimport { ColorValue } from 'react-native';\nimport Svg, { G, NumberProp, Path } from 'react-native-svg';\n\ninterface Props {\n fill: ColorValue;\n width: NumberProp;\n height: NumberProp;\n}\n\nconst HeroBottom: React.FC = ({ fill, ...props }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default HeroBottom;\n","import React, { PropsWithChildren } from 'react';\nimport { View, ViewProps } from 'react-native';\nimport styled from 'styled-components/native';\n\ninterface Props extends PropsWithChildren, ViewProps {\n topColor: string;\n bottomColor: string;\n}\n\nconst TwoColorView: React.FC = ({ topColor, bottomColor, children, ...props }) => (\n \n {children}\n \n \n \n \n \n);\n\nexport default TwoColorView;\n\nconst FullContainer = styled.View`\n flex: 1;\n align-self: center;\n width: 100%;\n margin-horizontal: auto;\n position: relative;\n`;\n\nconst AbsoluteContainer = styled.View`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n`;\n","import styled from 'styled-components/native';\nimport { IconSize, Size } from 'src/constants';\nimport { SvgProps } from 'react-native-svg';\nimport { transparent } from 'src/utils';\nimport { ColorValue, StyleProp, ViewStyle } from 'react-native';\n\ninterface Props {\n icon: (props: SvgProps) => React.JSX.Element;\n color: ColorValue;\n style?: StyleProp;\n}\n\nconst MiniHeroIcon: React.FC = ({ icon: Icon, color, style }) => (\n \n \n \n \n \n);\n\nconst InnerContainer = styled.View`\n width: ${IconSize.S}px;\n height: ${IconSize.S}px;\n align-items: center;\n justify-content: center;\n`;\n\nconst IconContainer = styled.View<{ color: string }>`\n background-color: ${({ color }) => transparent(color, 0.2)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.XS}px;\n align-self: center;\n`;\n\nexport default MiniHeroIcon;\n","import { FlatList, LayoutRectangle, ScrollView, SectionList, View } from 'react-native';\nimport { IS_ANDROID, Size } from 'src/constants';\nimport { Scrollable } from 'src/providers/ScrollableRefProvider';\nimport { isDefined } from 'src/utils';\n\nexport const SCROLL_FOCUS_DELAY = 250;\nconst animated = true;\ninterface Layout extends Dimensions {\n x: number;\n y: number;\n}\n\nexport interface Dimensions {\n width: number;\n height: number;\n}\n\nconst VERTICAL_CARET_ADJUSTMENT = Size.X2_S;\nconst HORIZONTAL_CARET_ADJUSTMENT = Size.M;\nconst CARET_SIZE = Size.S;\n\nexport const calculatePosition = (\n currLayout: Layout,\n helperLayout: Dimensions,\n window: Dimensions,\n horizontal: boolean\n) => {\n if (horizontal) {\n return alignHorizontally(currLayout, helperLayout, window);\n } else {\n return alignVertically(currLayout, helperLayout, window);\n }\n};\n\nconst alignVertically = (currLayout: Layout, helperLayout: Dimensions, window: Dimensions) => {\n const computedGuidePosition: Layout = { x: 0, y: 0, width: 0, height: 0 };\n const computedCaretPosition: Layout = { x: 0, y: 0, width: 0, height: 0 };\n let computedCaretRotation = 0;\n if (\n currLayout.height + currLayout.y + helperLayout.height <= window.height ||\n currLayout.y - helperLayout.height < 0\n ) {\n // place below node\n Object.assign(computedGuidePosition, {\n y: Math.min(\n currLayout.y + currLayout.height + VERTICAL_CARET_ADJUSTMENT * 2,\n window.height - helperLayout.height - VERTICAL_CARET_ADJUSTMENT * 2\n ),\n height: helperLayout.height\n });\n computedCaretPosition.y = -VERTICAL_CARET_ADJUSTMENT;\n computedCaretRotation = 0;\n } else {\n // place above node\n Object.assign(computedGuidePosition, {\n y: Math.max(\n VERTICAL_CARET_ADJUSTMENT,\n currLayout.y - helperLayout.height - VERTICAL_CARET_ADJUSTMENT * 2\n ),\n height: helperLayout.height\n });\n computedCaretPosition.y = helperLayout.height - VERTICAL_CARET_ADJUSTMENT;\n computedCaretRotation = 2;\n }\n if (\n currLayout.x + (currLayout.width + helperLayout.width) / 2 <= window.width &&\n currLayout.x + (currLayout.width - helperLayout.width) / 2 > 0\n ) {\n // align to center of node\n Object.assign(computedGuidePosition, {\n x: currLayout.x + currLayout.width / 2 - helperLayout.width / 2,\n width: helperLayout.width\n });\n computedCaretPosition.x = (helperLayout.width - CARET_SIZE) / 2;\n } else if (currLayout.x + helperLayout.width <= window.width) {\n // align to right of node\n Object.assign(computedGuidePosition, { x: currLayout.x, width: helperLayout.width });\n computedCaretPosition.x = HORIZONTAL_CARET_ADJUSTMENT;\n } else if (currLayout.x - helperLayout.width > 0) {\n // align to left of node\n Object.assign(computedGuidePosition, {\n x: currLayout.x + currLayout.width - helperLayout.width,\n width: helperLayout.width\n });\n computedCaretPosition.x = helperLayout.width - HORIZONTAL_CARET_ADJUSTMENT;\n } else {\n // align to center of screen\n const xPos = window.width / 2 - helperLayout.width / 2;\n Object.assign(computedGuidePosition, {\n x: xPos,\n width: helperLayout.width\n });\n computedCaretPosition.x = currLayout.x - xPos + CARET_SIZE;\n }\n return { computedGuidePosition, computedCaretPosition, computedCaretRotation };\n};\n\nexport const focusView = (\n x: number,\n y: number,\n scrollRef: React.RefObject,\n itemIndex?: number,\n sectionIndex?: number,\n viewOffset?: number\n) => {\n const scrollView = scrollRef.current as Partial;\n if (scrollView.scrollTo) {\n return scrollView.scrollTo({ x: x - Size.S, y: y - Size.S, animated });\n }\n const flatList = scrollRef.current as Partial;\n if (flatList.scrollToOffset) {\n return flatList.scrollToOffset({\n offset: (flatList.props?.horizontal ? x : y) - Size.S,\n animated\n });\n }\n const sectionList = scrollRef.current as Partial;\n const scrollableNode = sectionList.getScrollableNode?.() as any as ScrollView;\n if (scrollableNode?.scrollTo) {\n return scrollableNode.scrollTo({ x: x - Size.S, y: y - Size.S, animated });\n }\n if (sectionList.scrollToLocation && isDefined(itemIndex) && isDefined(sectionIndex)) {\n return sectionList.scrollToLocation({\n itemIndex,\n sectionIndex,\n viewOffset,\n animated\n });\n }\n};\n\nexport const measureRefWithoutScrollView: (\n ref: React.RefObject,\n guideDimensions: Dimensions,\n callback: (l: LayoutRectangle, h: Dimensions) => void\n) => void = (viewRef, guideDimensions, callback) => {\n if (IS_ANDROID) {\n viewRef.current?.measure((x, y, width, height, pageX, pageY) => {\n const l = { x: x + pageX, y: y + pageY, width, height };\n callback(l, { width: guideDimensions.width, height: guideDimensions.height });\n });\n } else {\n viewRef.current?.measureInWindow((x, y, width, height) => {\n const l = { x, y, width, height };\n callback(l, { width: guideDimensions.width, height: guideDimensions.height });\n });\n }\n};\n\n/**\n * Transforms a layout object from portrait to landscape and vice versa\n * @param layout\n * @returns\n */\nconst invertLayout = (layout: Layout) => {\n return { x: layout.y, y: layout.x, width: layout.height, height: layout.width };\n};\n\n/**\n * Transforms a dimensions object from portrait to landscape and vice versa\n * @param dimensions\n * @returns\n */\nconst invertDimensions = (dimensions: Dimensions) => {\n return { width: dimensions.height, height: dimensions.width };\n};\n\n/**\n * Aligns the helper horizontally by inverting the layout and dimensions, aligning vertically, and then inverting the result\n * @param currLayout\n * @param helperLayout\n * @param window\n * @returns\n */\nconst alignHorizontally = (currLayout: Layout, helperLayout: Dimensions, window: Dimensions) => {\n const invertedCurrLayout = invertLayout(currLayout);\n const invertedHelperLayout = invertDimensions(helperLayout);\n const invertedWindow = invertDimensions(window);\n\n const {\n computedGuidePosition: _guidePosition,\n computedCaretPosition: _caretPosition,\n computedCaretRotation: _caretRotation\n } = alignVertically(invertedCurrLayout, invertedHelperLayout, invertedWindow);\n\n const computedGuidePosition = invertLayout(_guidePosition);\n const computedCaretPosition = invertLayout(_caretPosition);\n const computedCaretRotation = _caretRotation - 1;\n\n return { computedGuidePosition, computedCaretPosition, computedCaretRotation };\n};\n\n/**\n * Normalizes x to ensure elements are horizontally postioned inside viewable area\n * @param x\n * @param windowWidth\n * @returns\n */\nexport const normalizeX = (x: number, windowWidth: number) => {\n return x % windowWidth;\n};\n","import React, { PropsWithChildren, ErrorInfo } from 'react';\nimport { APP_ENV } from 'src/constants';\nimport { Title } from './Text';\nimport Sentry from 'src/utils/sentry';\n\ninterface State {\n hasError: boolean;\n eventId?: string;\n}\n\nexport interface FallBackProps {\n resetError: () => void;\n eventId: string;\n}\ninterface Props extends PropsWithChildren {\n Fallback?: React.FC;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error) {\n if (error) {\n return { hasError: true };\n }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n const eventId = Sentry.captureException(error);\n if (APP_ENV !== 'PROD') {\n console.error(error, errorInfo);\n }\n this.props.onError?.(error, errorInfo);\n this.setState({ hasError: true, eventId });\n }\n\n render() {\n if (this.state.hasError && this.state.eventId) {\n if (this.props.Fallback) {\n const Fallback = this.props.Fallback;\n return (\n this.setState({ hasError: false })}\n />\n );\n }\n return Something went wrong.;\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { PropsWithChildren } from 'react';\nimport { ScrollView, FlatList, SectionList } from 'react-native';\n\n// using because we don't care about the contents of the list\nexport type Scrollable = ScrollView | FlatList | SectionList;\ninterface Props extends PropsWithChildren {\n scrollRef: React.RefObject;\n}\n\nconst ScrollRefContext = React.createContext | null>(null);\n\nexport const useScrollRef = () => React.useContext(ScrollRefContext);\n\nexport const ScrollRefProvider = function ({\n children,\n scrollRef\n}: Props): ReturnType>> {\n return {children};\n};\n","import { debounce } from 'lodash';\nimport { useEffect, useMemo, useRef } from 'react';\nimport { LayoutRectangle, View } from 'react-native';\nimport { IS_ANDROID } from 'src/constants';\nimport { Scrollable } from 'src/providers/ScrollableRefProvider';\nimport { SCROLL_FOCUS_DELAY, Dimensions } from './helper';\n\ninterface Args {\n visible: boolean;\n focused: boolean;\n clearScrollTimeout: React.MutableRefObject<() => void>;\n applyScrollCoords: (l: LayoutRectangle, h: Dimensions) => () => void;\n scrollRef?: React.RefObject | null;\n viewRef: React.MutableRefObject;\n helperBox: Dimensions;\n}\n\nfunction useUpdateScrollPosition({\n visible,\n focused,\n clearScrollTimeout,\n applyScrollCoords,\n helperBox,\n scrollRef,\n viewRef\n}: Args) {\n const state = useRef({\n visible,\n focused,\n clearScrollTimeout,\n applyScrollCoords,\n helperBox,\n scrollRef,\n viewRef\n });\n\n useEffect(() => {\n state.current = {\n visible,\n focused,\n clearScrollTimeout,\n applyScrollCoords,\n helperBox,\n scrollRef,\n viewRef\n };\n }, [visible, focused, clearScrollTimeout, applyScrollCoords, helperBox, scrollRef, viewRef]);\n\n const updateScrollPosition = useMemo(\n () =>\n debounce(\n () => {\n const {\n visible,\n focused,\n clearScrollTimeout,\n applyScrollCoords,\n helperBox,\n scrollRef,\n viewRef\n } = state.current;\n if (!visible || !focused || !scrollRef?.current) {\n return;\n }\n clearScrollTimeout.current();\n if (IS_ANDROID) {\n viewRef.current?.measure((x, y, width, height, pageX, pageY) => {\n const l: LayoutRectangle = { x: x + pageX, y: y + pageY, width, height };\n return applyScrollCoords(l, helperBox);\n });\n } else {\n viewRef.current?.measureInWindow((x, y, width, height) => {\n const l: LayoutRectangle = { x, y, width, height };\n return applyScrollCoords(l, helperBox);\n });\n }\n },\n SCROLL_FOCUS_DELAY,\n { leading: false, trailing: true }\n ),\n []\n );\n\n return updateScrollPosition;\n}\n\nexport default useUpdateScrollPosition;\n","import React, {\n PropsWithChildren,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {\n Animated,\n Easing,\n View,\n useWindowDimensions,\n ScrollView,\n LayoutRectangle,\n Keyboard,\n ColorValue,\n TouchableWithoutFeedback\n} from 'react-native';\nimport { Portal } from 'react-native-paper';\nimport { Body, HoverButton, HoverCard, Subheading } from 'src/components';\nimport { IS_WEB, MOBILE_WIDTH_SMALL, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport {\n calculatePosition,\n Dimensions,\n focusView,\n measureRefWithoutScrollView,\n normalizeX,\n SCROLL_FOCUS_DELAY\n} from './helper';\nimport { GuideElementHandle, _GuideElementProp } from '../model';\nimport { useTranslation } from 'react-i18next';\nimport ErrorBoundary from 'src/components/ErrorBoundary';\nimport { useIsFocused } from '@react-navigation/native';\nimport { useScrollRef } from 'src/providers/ScrollableRefProvider';\nimport { pick } from 'lodash';\nimport useUpdateScrollPosition from './useUpdateScrollPosition';\nimport { useInteractionFocusEffect } from 'src/hooks';\nimport { useTourGuideMaster } from '../TourGuideMaster';\nimport Color from 'color';\nimport { containers } from 'src/theme/globalStyles';\n\nexport interface GuideElementProps extends PropsWithChildren {\n id: T;\n body: React.ReactNode;\n title?: React.ReactNode;\n onContinue?: () => Promise | void;\n onPress?: () => Promise | void;\n updateAnimationConfig?: Omit;\n semiTransparentBg?: boolean;\n disabled?: boolean;\n autoStart?: boolean;\n backgroundColor?: ColorValue;\n itemIndex?: number;\n sectionIndex?: number;\n viewOffset?: number;\n alignHorizontally?: boolean;\n}\n\nfunction _GuideElement({\n id,\n children,\n visible,\n body,\n exitTour,\n updateAnimationConfig = {\n duration: 300,\n easing: Easing.inOut(Easing.ease),\n useNativeDriver: !IS_WEB\n },\n onContinue,\n title,\n unregisterStep,\n onPress,\n semiTransparentBg,\n thisRef,\n autoStart,\n startTour,\n backgroundColor: parentBackgroundColor,\n itemIndex,\n sectionIndex,\n viewOffset,\n alignHorizontally = false\n}: GuideElementProps & _GuideElementProp): React.ReactElement {\n const { t } = useTranslation('common');\n const { stopTours } = useTourGuideMaster();\n\n const { roundness, colors, dark } = useAppTheme();\n const viewRef = useRef(null);\n const [layout, setLayout] = useState({ width: 0, height: 0 });\n const [helperBox, setHelperBox] = useState({ width: 0, height: 0 });\n const window = useWindowDimensions();\n\n const scrollRef = useScrollRef();\n\n const position = useRef(new Animated.ValueXY({ x: 0, y: 0 }));\n const guidePosition = useRef(new Animated.ValueXY({ x: window.width / 2, y: window.height / 2 }));\n const guideOpacity = useRef(new Animated.Value(0));\n const cloneOpacity = useRef(new Animated.Value(0));\n const opacity = cloneOpacity.current.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0]\n });\n\n const caretPosition = useRef(new Animated.ValueXY({ x: 0, y: 0 }));\n const caretRotation = useRef(new Animated.Value(0));\n const caretRotationValue = caretRotation.current.interpolate({\n inputRange: [0, 3],\n outputRange: ['45deg', '315deg']\n });\n const [guideDimensions, setGuideDimensions] = useState>({});\n\n const focused = useIsFocused();\n\n const setPosition = useRef((l: LayoutRectangle) => {\n setLayout(pick(l, 'width', 'height'));\n position.current.setValue({\n x: normalizeX(l.x, window.width) - Size.XS,\n y: l.y - Size.XS\n });\n });\n\n const applyCoords = useRef((l: LayoutRectangle, h: Dimensions) => {\n const { computedGuidePosition, computedCaretPosition, computedCaretRotation } =\n calculatePosition(l, h, window, alignHorizontally);\n setPosition.current(l);\n caretRotation.current.setValue(computedCaretRotation);\n const opacityAnimation = Animated.sequence([\n Animated.timing(cloneOpacity.current, {\n toValue: 1,\n ...updateAnimationConfig\n }),\n Animated.timing(guideOpacity.current, {\n toValue: 1,\n ...updateAnimationConfig\n })\n ]);\n const animation = Animated.parallel([\n Animated.timing(guidePosition.current, {\n toValue: computedGuidePosition,\n ...updateAnimationConfig\n }),\n Animated.timing(caretPosition.current, {\n toValue: computedCaretPosition,\n ...updateAnimationConfig\n })\n ]);\n animation.start();\n opacityAnimation.start();\n\n return () => {\n animation.stop();\n opacityAnimation.stop();\n };\n });\n\n const backgroundColor: ColorValue | undefined = useMemo(() => {\n if (semiTransparentBg) {\n return dark\n ? Color(colors.surface).lighten(0.5).string()\n : Color(colors.surface).darken(0.2).string();\n }\n return parentBackgroundColor;\n }, [semiTransparentBg, parentBackgroundColor, dark, colors.surface]);\n\n const applyScrollCoords = useCallback(\n (l: LayoutRectangle, h: Dimensions) => {\n setPosition.current(l);\n const { computedGuidePosition, computedCaretPosition, computedCaretRotation } =\n calculatePosition({ ...l, x: normalizeX(l.x, window.width) }, h, window, alignHorizontally);\n caretRotation.current.setValue(computedCaretRotation);\n setGuideDimensions({\n width: computedGuidePosition.width,\n height: computedGuidePosition.height\n });\n const animation = Animated.parallel([\n Animated.timing(guidePosition.current, {\n toValue: computedGuidePosition,\n ...updateAnimationConfig\n }),\n Animated.timing(caretPosition.current, {\n toValue: computedCaretPosition,\n ...updateAnimationConfig\n }),\n Animated.timing(guideOpacity.current, {\n toValue: 1,\n ...updateAnimationConfig\n }),\n Animated.timing(cloneOpacity.current, {\n toValue: 1,\n ...updateAnimationConfig\n })\n ]);\n animation.start();\n return animation.stop;\n },\n [alignHorizontally, updateAnimationConfig, window]\n );\n\n const timeout = useRef(null);\n const clearScrollTimeout = useRef(() => {\n if (timeout.current) {\n clearTimeout(timeout.current);\n timeout.current = null;\n }\n });\n\n const updateScrollPosition = useUpdateScrollPosition({\n visible,\n focused,\n clearScrollTimeout,\n applyScrollCoords,\n helperBox,\n scrollRef,\n viewRef\n });\n\n const handle: GuideElementHandle = useMemo(\n () => ({ updateScrollPosition }),\n [updateScrollPosition]\n );\n\n useImperativeHandle(thisRef, () => handle, [handle]);\n const internalRef = useRef(handle);\n\n useEffect(() => {\n internalRef.current = handle;\n }, [handle]);\n\n useInteractionFocusEffect(() => {\n if (visible && focused) {\n if (!scrollRef?.current) {\n const helperDims = { width: helperBox.width, height: helperBox.height };\n measureRefWithoutScrollView(viewRef, helperDims, applyCoords.current);\n } else if ((scrollRef.current as ScrollView).getInnerViewNode) {\n viewRef.current?.measureLayout(\n (scrollRef.current as ScrollView).getInnerViewNode(),\n (x, y) => focusView(x, y, scrollRef, itemIndex, sectionIndex, viewOffset)\n );\n } else {\n const node = scrollRef?.current?.getScrollableNode();\n const refNode = IS_WEB ? node.children[0] : node;\n viewRef.current?.measureLayout(refNode, (x, y) => {\n focusView(x, y, scrollRef, itemIndex, sectionIndex, viewOffset);\n });\n }\n timeout.current = setTimeout(internalRef.current.updateScrollPosition, SCROLL_FOCUS_DELAY);\n return clearScrollTimeout.current;\n } else {\n cloneOpacity.current.setValue(0);\n }\n }, [\n visible,\n scrollRef,\n clearScrollTimeout,\n helperBox.width,\n helperBox.height,\n focused,\n itemIndex,\n sectionIndex,\n viewOffset\n ]);\n\n useImperativeHandle(thisRef, () => handle, [handle]);\n\n useEffect(() => {\n if (visible) {\n Keyboard.dismiss();\n }\n }, [visible]);\n\n useEffect(() => {\n if (autoStart) {\n startTour();\n }\n }, [autoStart, startTour, id]);\n\n return (\n <>\n {visible && (\n \n \n \n {\n await onPress?.();\n await onContinue?.();\n unregisterStep(id);\n }}\n >\n \n \n {React.cloneElement(\n children as React.DetailedReactHTMLElement\n )}\n \n \n \n \n \n {\n const { width, height } = event.nativeEvent.layout;\n setHelperBox({ width, height });\n }}\n style={[\n {\n gap: Size.S,\n padding: Size.S,\n paddingTop: 0,\n position: 'absolute',\n minWidth: MOBILE_WIDTH_SMALL / 2,\n width: guideDimensions.width,\n height: guideDimensions.height,\n borderColor: Color(colors.surface).darken(0.1).hex(),\n borderWidth: 0.75\n },\n containers.shadowDarker\n ]}\n >\n \n \n {!!title && {title}}\n \n \n {typeof body === 'string' ? {body} : body}\n \n\n \n {\n exitTour();\n void stopTours();\n }}\n >\n {t('stopTours')}\n \n \n {t('skip')}\n {\n await onContinue?.();\n unregisterStep(id);\n }}\n mode='contained'\n >\n {t('continue')}\n \n \n \n \n \n \n \n )}\n \n {children}\n \n \n );\n}\n\nexport default _GuideElement;\n","import React, { useEffect, useRef } from 'react';\nimport { HoverButton, ModalDrawer, Slider } from 'src/components';\nimport { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport { useTranslation } from 'react-i18next';\nimport { debounce } from 'lodash';\nimport styled from 'styled-components/native';\nimport { Margin } from 'src/constants';\nimport { FlatList, ViewToken } from 'react-native';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport { isDefined } from 'src/utils';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { TourGuideContext } from '../model';\nimport { useTourGuideMaster } from '../TourGuideMaster';\n\nexport interface SliderElementProps {\n id: T;\n slides: SlideItem[];\n disabled?: boolean;\n autoStart?: boolean;\n onContinue?: () => void;\n}\nfunction _SliderElement({\n toursEnabled,\n focusedId,\n exitTour,\n unregisterStep,\n onContinue,\n id,\n slides\n}: SliderElementProps & TourGuideContext): React.ReactElement | null {\n const { stopTours } = useTourGuideMaster();\n const { t } = useTranslation('common');\n const { viewMode, colors } = useAppTheme();\n\n const modalRef = useRef(null);\n\n useEffect(() => {\n if (focusedId === id) {\n modalRef.current?.show();\n } else if (modalRef.current?.isVisible) {\n modalRef.current.dismiss();\n }\n }, [focusedId, id]);\n\n const sliderRef = useRef>(null);\n\n const index = useRef(0);\n\n const handleViewableItemsChanged = useRef(\n (info: { viewableItems: ViewToken[]; changed: ViewToken[] }) => {\n if (!isDefined(info.viewableItems[0]?.index)) return;\n index.current = info.viewableItems[0].index;\n }\n ).current;\n\n const next = useRef(\n debounce(() => {\n if (index.current + 1 < slides.length) {\n sliderRef.current?.scrollToIndex({\n animated: true,\n index: index.current + 1\n });\n } else {\n modalRef.current?.dismiss();\n unregisterStep(id);\n onContinue?.();\n }\n })\n ).current;\n\n const exit = useRef(() => {\n exitTour();\n modalRef.current?.dismiss();\n }).current;\n\n if (!toursEnabled) return null;\n\n return (\n unregisterStep(id)}\n bottomButton={{\n onPress: next,\n label: t('continue'),\n dismiss: false\n }}\n onOpen={() => sliderRef.current?.scrollToIndex({ index: 0, animated: true })}\n >\n \n \n \n {t('skip')}\n \n {\n exitTour();\n void stopTours();\n }}\n compact\n >\n {t('stopTours')}\n \n \n \n );\n}\n\nexport default _SliderElement;\n\nconst Container = styled.View`\n gap: ${Margin.ExtraLarge}px;\n margin-bottom: ${Margin.Large}px;\n`;\n\nconst StyledSkipButton = styled(HoverButton)`\n position: absolute;\n top: ${Margin.ExtraLarge}px;\n left: ${Margin.ExtraLarge}px;\n`;\n\nconst StyledSkipAllButton = styled(HoverButton)`\n position: absolute;\n top: ${Margin.ExtraLarge}px;\n right: ${Margin.ExtraLarge}px;\n`;\n","import { noop } from 'lodash';\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { Animated, Pressable, StyleSheet } from 'react-native';\nimport { Portal } from 'react-native-paper';\nimport { IS_WEB } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport {\n GuideElementHandle,\n STATE,\n TourGuideContext,\n TourGuideHandle,\n TourGuideProviderProps,\n TourMap,\n TourStep\n} from './model';\nimport { isDefined, queryClient, storage } from 'src/utils';\nimport _GuideElement, { GuideElementProps } from './component/_GuideElement';\nimport { useTourGuideMaster } from './TourGuideMaster';\nimport { useStorage } from 'src/hooks';\nimport { AsyncStorageKeys } from 'src/api';\nimport _SliderElement, { SliderElementProps } from './component/_SliderElement';\nimport { useFocusEffect, useIsFocused } from '@react-navigation/native';\n\nconst DEFAULT_CONTEXT = {\n startTour: noop,\n exitTour: noop,\n enabled: false,\n state: STATE.IDLE,\n tourId: '',\n toursEnabled: false,\n registerStep: noop,\n unregisterStep: noop,\n hasViewedTutorial: true,\n shouldUpdate: false,\n pendingSteps: false,\n updateScrollPositions: noop\n};\n\nexport default function createTourGuideContext(\n tourId: string,\n steps: TourMap\n) {\n const _TourGuide = createContext>(DEFAULT_CONTEXT);\n const useTourGuide = (): TourGuideContext => useContext(_TourGuide);\n const tourSymbol = Symbol(tourId);\n const storageId: [AsyncStorageKeys, ...Array] = [\n AsyncStorageKeys.TUTORIALS,\n tourId\n ];\n const Provider = React.forwardRef(\n ({ disabled, children }, ref) => {\n const [hasViewedTutorial, setHasViewedTutorial] = useStorage(storageId, true);\n\n const { colors } = useAppTheme();\n const { queueTour, dequeueTour, activeTour, toursEnabled, registerTour, unregisterTour } =\n useTourGuideMaster();\n\n const [stepQueue, setStepQueue] = useState>>([]);\n\n const opacity = useRef(new Animated.Value(0));\n\n const startTour: TourGuideContext['startTour'] = useCallback(async () => {\n const hasViewedTutorial = await storage.getTypedItem(storageId.join(','));\n if (hasViewedTutorial) return;\n queueTour(tourSymbol);\n setHasViewedTutorial(true);\n }, [queueTour, setHasViewedTutorial]);\n\n const exitTour = useCallback(() => {\n const animation = Animated.timing(opacity.current, {\n toValue: 0,\n duration: 100,\n useNativeDriver: !IS_WEB\n });\n animation.start(() => dequeueTour(tourSymbol));\n return animation.stop;\n }, [dequeueTour]);\n\n const visited = useRef>>({});\n const isTouring = activeTour?.tourId === tourSymbol && !disabled;\n const focusedId: keyof TourMap | undefined = disabled ? undefined : stepQueue[0]?.id;\n\n useEffect(() => {\n if (isTouring && isDefined(focusedId)) {\n visited.current[focusedId] = true;\n }\n }, [focusedId, isTouring]);\n\n useEffect(() => {\n const animation = Animated.timing(opacity.current, {\n toValue: isTouring && isDefined(focusedId) ? 1 : 0,\n duration: 100,\n useNativeDriver: !IS_WEB\n });\n animation.start();\n return animation.stop;\n }, [focusedId, isTouring]);\n\n useEffect(() => {\n return () => dequeueTour(tourSymbol);\n }, [dequeueTour]);\n\n const registerStep: TourGuideContext['registerStep'] = useRef(\n (stepId: T, handle?: React.RefObject) => {\n setStepQueue((queue) => {\n if (!queue.find((step) => step?.id === stepId) && !visited.current[stepId]) {\n const newStep = { ...steps[stepId], handle };\n const priority = newStep.priority ?? Number.MAX_SAFE_INTEGER;\n if (priority !== Number.MAX_SAFE_INTEGER) {\n const insertPosition: number = queue.findIndex(\n (step) => (step.priority ?? Number.MAX_SAFE_INTEGER) > priority\n );\n if (insertPosition !== -1) {\n const beg = queue.slice(0, insertPosition);\n const end = queue.slice(insertPosition);\n return [...beg, newStep, ...end];\n }\n }\n return [...queue, newStep];\n }\n return queue;\n });\n }\n ).current;\n\n const updateScrollPositions = useCallback(() => {\n stepQueue.forEach((step) => {\n step?.handle?.current?.updateScrollPosition();\n });\n }, [stepQueue]);\n\n const [shouldUpdate, forceUpdate] = useState(false);\n const reset = useCallback(async () => {\n visited.current = {};\n setStepQueue([]);\n forceUpdate(true);\n await storage.removeItem(storageId.join(','));\n await queryClient.invalidateQueries(storageId);\n forceUpdate(false);\n }, []);\n\n const handle = useMemo(\n () => ({\n startTour,\n exitTour,\n updateScrollPositions,\n reset,\n removeStorageVisited: async () => storage.removeItem(storageId.join(','))\n }),\n [exitTour, reset, startTour, updateScrollPositions]\n );\n const innerRef = useRef(handle);\n useImperativeHandle(ref, () => handle, [handle]);\n\n useEffect(() => {\n innerRef.current = handle;\n }, [handle]);\n\n useFocusEffect(\n useCallback(() => {\n registerTour(tourSymbol, innerRef);\n return () => unregisterTour(tourSymbol);\n }, [innerRef, registerTour, unregisterTour])\n );\n\n const unregisterStep: TourGuideContext['unregisterStep'] = useRef((stepId: T) => {\n setStepQueue((queue) => [...queue.filter((step) => step.id !== stepId)]);\n }).current;\n\n const enabled = activeTour?.tourId === tourSymbol && !disabled && !shouldUpdate;\n\n const context: TourGuideContext = useMemo(\n () => ({\n tourId,\n focusedId: activeTour?.tourId === tourSymbol ? focusedId : undefined,\n startTour,\n exitTour,\n enabled,\n state: STATE.IDLE,\n toursEnabled,\n registerStep,\n unregisterStep,\n hasViewedTutorial,\n shouldUpdate,\n pendingSteps: activeTour?.tourId === tourSymbol && stepQueue.length > 1,\n updateScrollPositions\n }),\n [\n activeTour?.tourId,\n focusedId,\n startTour,\n exitTour,\n enabled,\n toursEnabled,\n registerStep,\n unregisterStep,\n hasViewedTutorial,\n shouldUpdate,\n stepQueue.length,\n updateScrollPositions\n ]\n );\n\n return (\n <_TourGuide.Provider value={context}>\n \n \n \n \n \n {children}\n \n );\n }\n );\n\n const GuideElement = React.forwardRef>(\n ({ disabled = false, children, ...props }, ref) => {\n const tourGuide = useTourGuide();\n const { registerStep, unregisterStep, startTour, shouldUpdate } = tourGuide;\n const focused = useIsFocused();\n const shouldDisplay = !disabled && !shouldUpdate && focused;\n useEffect(() => {\n if (shouldDisplay) {\n registerStep(props.id);\n if (props.autoStart) {\n startTour();\n }\n return () => unregisterStep(props.id);\n }\n }, [props.id, registerStep, unregisterStep, props.autoStart, startTour, shouldDisplay]);\n\n if (disabled || !focused || !tourGuide.enabled) return <>{children};\n return (\n <_GuideElement\n thisRef={ref}\n {...tourGuide}\n {...props}\n visible={tourGuide.focusedId === props.id}\n >\n <>{children}\n \n );\n }\n );\n\n const SliderElement: React.FC> = ({ disabled, ...props }) => {\n const tourGuide = useTourGuide();\n const { registerStep, unregisterStep, startTour, shouldUpdate, focusedId } = tourGuide;\n const focused = useIsFocused();\n const shouldDisplay = !disabled && !shouldUpdate && focused;\n\n useEffect(() => {\n if (shouldDisplay) {\n registerStep(props.id);\n if (props.autoStart) {\n startTour();\n }\n return () => unregisterStep(props.id);\n }\n }, [props.id, registerStep, unregisterStep, props.autoStart, startTour, shouldDisplay]);\n\n if (disabled || !focused || !tourGuide.enabled || focusedId !== props.id) return null;\n return <_SliderElement {...tourGuide} {...props} />;\n };\n\n return {\n useTourGuide,\n TourGuide: { Provider, Consumer: _TourGuide.Consumer },\n GuideElement,\n SliderElement\n };\n}\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { User } from 'react-native-feather';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst ProfileHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default ProfileHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport ProfileHero from './ProfileHero';\n\nexport enum STEPS {\n DRAWER,\n PHOTO,\n INFO,\n APP,\n COMMUNICATION,\n NOTIFICATION,\n PRIVACY,\n HELP,\n TERMS\n}\n\nconst ProfileSettingsTourMap: TourMap = {\n [STEPS.DRAWER]: {\n id: STEPS.DRAWER,\n priority: 0\n },\n [STEPS.PHOTO]: {\n id: STEPS.PHOTO,\n priority: 1\n },\n [STEPS.INFO]: {\n id: STEPS.INFO,\n priority: 2\n },\n [STEPS.APP]: {\n id: STEPS.APP,\n priority: 3\n },\n [STEPS.COMMUNICATION]: {\n id: STEPS.COMMUNICATION,\n priority: 4\n },\n [STEPS.NOTIFICATION]: {\n id: STEPS.NOTIFICATION,\n priority: 5\n },\n [STEPS.PRIVACY]: {\n id: STEPS.PRIVACY,\n priority: 6\n },\n [STEPS.TERMS]: {\n id: STEPS.TERMS,\n priority: 7\n },\n [STEPS.HELP]: {\n id: STEPS.HELP,\n priority: 8\n }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'profileRoot:tour.drawer.title',\n body: 'profileRoot:tour.drawer.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.PROFILE,\n ProfileSettingsTourMap\n);\n","import { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\nimport React from 'react';\nimport { Client } from 'src/interfaces/api';\nimport { emailBouncedOrMarkedSpam } from 'src/utils/validators/email';\nimport {\n Bell,\n Edit,\n HelpCircle,\n Info,\n MessageSquare,\n Settings,\n Shield\n} from 'react-native-feather';\nimport { NOTIFICATIONS_SUPPORTED, STROKE_WIDTH_DEFAULT } from 'src/constants';\nimport { STEPS } from './tour';\n\ninterface NavItem {\n readonly icon: (color: string) => React.JSX.Element;\n readonly label: string;\n readonly location: Screens | Navigators | string;\n readonly requiresAttention?: boolean;\n readonly step: number;\n readonly tourDescription: string;\n readonly isLastStep?: boolean;\n}\n\nconst navItems = (user: Client): NavItem[] => {\n const unfilteredItems: Array = [\n {\n icon: (color: string) => ,\n label: 'profileRoot:myInfo',\n location: Screens.PROFILE_USERINFO,\n requiresAttention:\n !user.mobilePhone ||\n user.badPhysicalAddress ||\n emailBouncedOrMarkedSpam(user.emailVerificationStatus),\n step: STEPS.INFO,\n tourDescription: 'profileRoot:tour.info'\n },\n {\n icon: (color: string) => ,\n label: 'profileRoot:appSettings',\n location: Screens.PROFILE_APPSETTINGS,\n step: STEPS.APP,\n tourDescription: 'profileRoot:tour.appSettings'\n },\n {\n icon: (color: string) => ,\n label: 'profileRoot:clientPracticeConfiguration',\n location: Screens.PROFILE_CLIENT_PRACTICE_CONFIGURATION,\n step: STEPS.COMMUNICATION,\n tourDescription: 'profileRoot:tour.commSettings'\n },\n NOTIFICATIONS_SUPPORTED && {\n icon: (color: string) => ,\n label: 'profileRoot:notifySettings',\n location: 'notifications',\n step: STEPS.NOTIFICATION,\n tourDescription: 'profileRoot:tour.notificationSettings'\n },\n {\n icon: (color: string) => ,\n label: 'profileRoot:privacyPolicy',\n location: 'https://www.allydvm.com/privacy',\n step: STEPS.PRIVACY,\n tourDescription: 'profileRoot:tour.privacyPolicy'\n },\n {\n icon: (color: string) => ,\n label: 'profileRoot:termsAndCond',\n location: 'https://www.allydvm.com/terms-and-conditions',\n step: STEPS.TERMS,\n tourDescription: 'profileRoot:tour.termsAndCond',\n isLastStep: true\n },\n {\n icon: (color: string) => ,\n label: 'helpCenter:title',\n location: Screens.HELP_CENTER,\n step: STEPS.HELP,\n tourDescription: 'profileRoot:tour.helpCenter'\n }\n ];\n return unfilteredItems.filter((item: false | NavItem): item is NavItem => !!item);\n};\n\nexport default Object.freeze(navItems);\n","import { StyleSheet } from 'react-native';\nimport { Size, TABLET_WIDTH_LANDSCAPE_MAX } from 'src/constants/general';\n\nexport const PROFILE_IMAGE_PREVIEW_SIZE = 125;\n\nconst style = StyleSheet.create({\n title: { margin: Size.S, textAlign: 'center' },\n largeContainer: { alignSelf: 'center', width: TABLET_WIDTH_LANDSCAPE_MAX },\n\n addPhotoButton: {\n alignSelf: 'center',\n marginBottom: Size.L\n },\n profilePicture: {\n alignSelf: 'center',\n marginTop: Size.S,\n marginBottom: Size.X2_S,\n width: PROFILE_IMAGE_PREVIEW_SIZE,\n height: PROFILE_IMAGE_PREVIEW_SIZE,\n borderRadius: PROFILE_IMAGE_PREVIEW_SIZE\n },\n profileIcon: {\n fontSize: PROFILE_IMAGE_PREVIEW_SIZE\n },\n navContainer: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n navIcon: { padding: Size.S },\n warnIcon: {\n fontSize: Size.L,\n paddingLeft: Size.S\n }\n});\n\nexport default style;\n","import { Client, Patient } from 'src/interfaces';\nimport URI from 'urijs';\n\n/**\n * Extracts the image name from the original image url\n * @param url\n * @returns\n */\nexport const extractNameFromOriginalImageUrl = (url: string) => {\n return new URI(url).filename().replace(/\\?.*/, '') + (url.match(/\\..{3,4}$/)?.[0] ?? '.jpg');\n};\n\n/**\n * Encodes a key from a patient object to access the image in the image cache\n * @param patient\n * @returns\n */\nexport const encodeKeyFromPatient = (patient?: Patient) => {\n if (!patient) return undefined;\n return `${patient.practiceId},${patient.patientId},${extractNameFromOriginalImageUrl(\n patient.photo.urls.original\n )}`;\n};\n\n/**\n * Encode a key from the user object to access the image in the image cache\n */\nexport const encodeKeyFromUser = (user: Client) =>\n `${user.practiceId},${user.clientId},${extractNameFromOriginalImageUrl(\n user.photo.urls.original\n )}`;\n\n/**\n * Packs the patient image name into a key that can be used as a key for the image record cache.\n * @param patient\n * @returns\n */\nexport const packImageName = (patient: Patient) =>\n [\n patient.practiceId,\n patient.patientId,\n extractNameFromOriginalImageUrl(patient.photo.urls.original)\n ]\n .map(encodeURIComponent)\n .join('__') + (patient.photo.urls.original.match(/\\..{3,4}$/)?.[0] ?? '.jpg');\n\n/**\n * Unpacks the image name from the file system that can be used as a key for the image record cache.\n * @param name\n * @returns\n * @example\n */\nexport const unpackImageName = (name: string) => {\n const [practiceId, patientId, imageName] = new URI(name)\n .filename()\n .replace(/.((jpg)|(png)|(jpeg))/, '')\n .split('__');\n return {\n practiceId: decodeURIComponent(practiceId),\n patientId: decodeURIComponent(patientId),\n imageName: decodeURIComponent(imageName)\n };\n};\n\n/**\n * Encodes a key from the patient image directory file name to access the image in the patient image cache.\n * @param name\n * @returns\n */\nexport const encodeKeyFromPackedImageName = (name: string) => {\n const { practiceId, patientId, imageName } = unpackImageName(name);\n return `${practiceId},${patientId},${imageName}`;\n};\n","import {\n cacheDirectory as cacheDir,\n deleteAsync,\n documentDirectory,\n downloadAsync,\n FileInfo,\n getInfoAsync,\n makeDirectoryAsync,\n moveAsync,\n readDirectoryAsync\n} from 'expo-file-system';\nimport _, { uniqueId } from 'lodash';\nimport moment from 'moment-timezone';\nimport {\n DEBUG_CACHE,\n IS_WEB,\n IMAGE_CACHE_VERSION,\n IMAGES_DIRECTORY,\n OLD_IMAGES_DIRECTORY\n} from 'src/constants';\nimport cleanUrl from '../cleanUrl';\nimport { encodeKeyFromPackedImageName } from '../extractImageName';\n\n/**\n * The state of a file when it exists\n */\ninterface FileExists {\n exists: true;\n uri: string;\n size: number;\n isDirectory: boolean;\n modificationTime: number;\n md5?: string;\n}\n\n/**\n * Creates a directory if it does not exist\n * @param path The path to the directory to create\n */\nconst tryCreateDirectory = async (path: string) => {\n if (documentDirectory) {\n const dir = `${documentDirectory}${path}`;\n await getInfoAsync(dir).then(async (value) => {\n if (!value.exists) {\n await makeDirectoryAsync(dir);\n }\n });\n }\n};\n\n/**\n * Downloads a patient image into the patient image directory and returns the path to the image\n * @param patient\n * @returns\n */\nexport const downloadImageAsync = async (key: string, uri: string) => {\n if (IS_WEB) return uri;\n const docDir = documentDirectory;\n if (!docDir) throw new Error('Document directory not found');\n if (!cacheDir) throw new Error('Cache directory not found');\n\n const tempUri = `${cacheDir}${uniqueId()}`;\n const targetUri = buildPath(docDir, key);\n const download = await downloadAsync(cleanUrl(uri), tempUri);\n\n if (download.status < 200 || download.status >= 300) throw new Error('Failed to download image');\n\n try {\n await moveAsync({\n from: tempUri,\n to: targetUri\n });\n } catch (e) {\n throw new Error('Failed to store image');\n }\n return targetUri;\n};\n\n/**\n * Builds a record of all the images that have been downloaded at boot time\n * @returns {Promise>>}\n */\nexport const buildRecords = async () => {\n if (IS_WEB) return {};\n const docDir = documentDirectory;\n\n logCache('The document directory is', docDir);\n logCache('The cache directory is', cacheDir);\n\n if (!docDir) throw new Error('Document directory not found');\n await updateDirectories();\n\n const imageRecords: Record> = {};\n const images = await readDirectoryAsync(buildPath(docDir));\n const imagesInfo: FileInfo[] = await Promise.all(images.map(resolveImageInfoState));\n const [imagesToDelete, imagesToRecord] = _(imagesInfo)\n .filter((image: FileInfo): image is FileExists => image.exists)\n .filter((image) => !image.uri.includes('.DS_Store'))\n .partition((image) => moment.unix(image.modificationTime).add(30, 'days').isBefore(moment()))\n .value();\n\n imagesToDelete.forEach(async (image) => {\n void deleteAsync(image.uri);\n });\n\n imagesToRecord.forEach(async (image) => {\n imageRecords[encodeKeyFromPackedImageName(image.uri)] = Promise.resolve(image.uri);\n });\n\n logCache('Built image records', Object.keys(imageRecords));\n return imageRecords;\n};\n\n/**\n * Checks if an image exists and if it does, returns the state of the image\n * @param image The image to check\n * @returns The state of the image\n */\nconst resolveImageInfoState = async (image: string): Promise => {\n if (!documentDirectory) throw new Error('Document directory not found');\n const path = buildPath(documentDirectory, image);\n try {\n return await getInfoAsync(path);\n } catch {\n await deleteAsync(path);\n return {\n exists: false,\n isDirectory: false,\n uri: ''\n };\n }\n};\n\n/**\n * Logs to the console if the DEBUG_CACHE flag is set to true\n * @param consoleParams\n */\nexport const logCache = (...consoleParams: any[]) => {\n if (DEBUG_CACHE) {\n console.debug(`[DEBUG_CACHE] ${IMAGE_CACHE_VERSION}:`, ...consoleParams);\n }\n};\n\n/**\n * Builds a path to the patient image directory\n * @param directory The directory to build the path from\n * @param image The image to append to the path\n * @returns {string} The path to the patient image directory\n */\n\nconst buildPath = (directory: string, image?: string) =>\n `${directory}${IMAGES_DIRECTORY}/${IMAGE_CACHE_VERSION}${image ? `/${image}` : ''}`;\n\n/**\n * Updates the patient image directory to the latest version and deletes old versions\n */\nconst updateDirectories = async () => {\n const docDir = documentDirectory;\n\n if (!docDir) throw new Error('Document directory not found');\n\n await tryCreateDirectory(IMAGES_DIRECTORY);\n await deleteOldVersions();\n await tryCreateDirectory(`${IMAGES_DIRECTORY}/${IMAGE_CACHE_VERSION}`);\n\n const dir = await readDirectoryAsync(`${docDir}${IMAGES_DIRECTORY}`);\n const oldDirs = dir.filter((path) => path !== IMAGE_CACHE_VERSION);\n\n if (oldDirs.length > 0) {\n await Promise.all(\n oldDirs.map(async (path) => deleteAsync(`${docDir}${IMAGES_DIRECTORY}/${path}`))\n );\n }\n};\n\n/**\n * Deletes old versions of the patient image directory\n */\nconst deleteOldVersions = async () => {\n const docDir = documentDirectory;\n\n if (!docDir) throw new Error('Document directory not found');\n\n const folders = await readDirectoryAsync(`${docDir}${IMAGES_DIRECTORY}`);\n const oldFolders = folders.filter((folder) => folder !== IMAGE_CACHE_VERSION);\n await Promise.all(\n oldFolders.map(async (folder) => deleteAsync(`${docDir}${IMAGES_DIRECTORY}/${folder}`))\n );\n // delete the old images directory\n try {\n await deleteAsync(`${docDir}${OLD_IMAGES_DIRECTORY}`);\n } catch {\n // do nothing\n }\n};\n","import { downloadImageAsync, logCache } from './expoStorage';\nimport { documentDirectory } from 'expo-file-system';\n\nexport const imageCache: Record> = {};\n\n/**\n * Checks if an image has been downloaded, if not, it initiates the download process.\n * @param {string} url\n * @returns {Promise} If the image has been stored or successfully downloaded\n */\n\nconst getImage = async (key: string, uri: string) => {\n if (!documentDirectory) throw new Error('Document directory not found');\n\n if (imageCache[key] === undefined) {\n logCache('Downloading image', `did not find ${key} in`, Object.keys(imageCache));\n imageCache[key] = downloadImageAsync(key, uri);\n } else {\n logCache(`Image ${key} already downloaded`);\n }\n\n return imageCache[key];\n};\n\nexport default getImage;\n","import React, { useEffect, useState } from 'react';\nimport { View, StyleProp, ViewStyle } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { IconSize, IS_WEB } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport getImage from 'src/utils/checkImageCache';\nimport { cleanUrl, colorShade } from 'src/utils';\nimport { layout } from 'src/theme/globalStyles';\n\ninterface Props {\n uri?: string;\n id?: string;\n size: number;\n style?: StyleProp;\n aspectRatio?: number;\n isMutating?: boolean;\n isFetching?: boolean;\n EmptyComponent: React.FC;\n iconSize?: number;\n iconColor?: string;\n}\n\ninterface EmptyProps {\n size: number;\n color: string;\n}\n\nconst Avatar: React.FC = ({\n uri: parentUri,\n id,\n size,\n style,\n aspectRatio,\n isMutating,\n isFetching,\n EmptyComponent,\n iconSize,\n iconColor\n}) => {\n const { colors } = useAppTheme();\n\n const [uri, setUri] = useState();\n\n const [isFetched, setFetched] = useState(undefined);\n\n const isReady = !isFetching;\n\n useEffect(() => {\n if (isMutating) {\n setFetched(undefined);\n } else if (!isFetching) {\n if (!parentUri || !id) {\n setFetched(false);\n } else {\n if (IS_WEB) {\n setUri(cleanUrl(parentUri));\n setFetched(true);\n } else {\n void getImage(id, parentUri)\n .then((uri) => {\n setUri(cleanUrl(uri));\n setFetched(true);\n })\n .catch(() => {\n setFetched(false);\n });\n }\n }\n }\n }, [isMutating, parentUri, id, isReady, isFetching]);\n\n return (\n \n {isFetched === undefined && (\n \n )}\n {isFetched === true && (\n setFetched(false)}\n />\n )}\n {isFetched === false && (\n \n \n \n )}\n \n );\n};\n\nexport default Avatar;\n\nconst StyledImage = styled.Image<{\n size: IconSize;\n aspectRatio?: number;\n}>`\n aspect-ratio: ${({ aspectRatio }) => aspectRatio || 1};\n width: ${({ size }) => size}px;\n height: ${({ size, aspectRatio }) => (aspectRatio ? '' : `${size}px`)};\n`;\nconst PictureContainer = styled.View<{\n size: IconSize;\n aspectRatio?: number;\n}>`\n aspect-ratio: ${({ aspectRatio }) => aspectRatio || 1};\n width: ${({ size }) => size}px;\n height: ${({ size, aspectRatio }) => (aspectRatio ? '' : `${size}px`)}\n align-items: center;\n justify-content: center;\n border-radius: ${({ theme }) => theme.roundness}px;\n background-color: ${({ theme }) => colorShade(theme.colors.surface, 0.8)};\n overflow: hidden;\n`;\n","import React from 'react';\nimport { StyleProp, ViewStyle } from 'react-native';\nimport Avatar from './Avatar';\nimport Icon from 'react-native-vector-icons/FontAwesome5';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { encodeKeyFromUser } from 'src/utils/extractImageName';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useIsFetching, useIsMutating } from 'react-query';\nimport { MutationKeys, QueryKeys } from 'src/api';\ninterface Props {\n size: number;\n style?: StyleProp;\n aspectRatio?: number;\n iconSize?: number;\n iconColor?: string;\n}\n\nconst ClientAvatar: React.FC = (props) => {\n const { user } = useUser();\n const { token } = useAuth();\n\n const isFetching = !!useIsFetching([QueryKeys.CLIENT, token]);\n const isDeleting = !!useIsMutating([MutationKeys.PROFILE_PHOTO_DELETE]);\n const isUploading = !!useIsMutating([MutationKeys.PROFILE_PHOTO_UPLOAD]);\n const isMutating = isDeleting || isUploading;\n\n return (\n }\n />\n );\n};\n\nexport default ClientAvatar;\n","import React, { useEffect, useMemo } from 'react';\nimport { View } from 'react-native';\nimport FeatherIcon from 'react-native-vector-icons/Feather';\nimport navLocations from './navLocations';\nimport IonIcon from 'react-native-vector-icons/Ionicons';\nimport { Menu } from 'react-native-paper';\nimport { IS_WEB, IconSize, Margin, STROKE_WIDTH_DEFAULT, Size } from 'src/constants/general';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport style from './style';\nimport { isDefined, openWebBrowser } from 'src/utils';\nimport { layout } from 'src/theme/globalStyles';\nimport { Body, HoverCard, StyledKeyboardAwareScrollView } from 'src/components';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport styled from 'styled-components/native';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { useNotification } from 'src/providers/NotificationProvider';\nimport { Edit } from 'react-native-feather';\nimport { useUploadProfilePhoto } from 'src/hooks/react-query';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { Screens } from 'src/routes/stacks/screens';\nimport _ from 'lodash';\nimport { useBoolean } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, SliderElement, SLIDES, STEPS, TourGuide } from './tour';\nimport ClientAvatar from 'src/components/ClientAvatar';\n\nconst PROFILE_IMAGE_PREVIEW_SIZE = 150;\n\nconst ProfileScreen: React.FC<\n NativeStackScreenProps\n> = ({ navigation }) => {\n const { t } = useTranslation('profileRoot');\n const { logOut } = useAuth();\n const { user } = useUser();\n const { colors } = useAppTheme();\n const { openNotificationSettings: openNotificationsSettings } = useNotification();\n\n useEffect(() => {\n navigation.setOptions({\n title: t('clientProfile'),\n headerTitle: t('greeting', {\n firstName: user.firstName\n })\n });\n }, [navigation, t, user.firstName]);\n\n const { uploadPhoto, deletePhoto } = useUploadProfilePhoto({\n manipulate: [{ resize: { width: PROFILE_IMAGE_PREVIEW_SIZE } }]\n });\n\n const { value: isOpen, toTrue: openMenu, toFalse: closeMenu } = useBoolean();\n\n const onPressDeletePhoto = useMemo(\n () =>\n _.debounce(() => {\n closeMenu();\n deletePhoto();\n }),\n [closeMenu, deletePhoto]\n );\n\n const onPressUploadPhoto = useMemo(\n () =>\n _.debounce((camera: boolean) => {\n closeMenu();\n void uploadPhoto(camera);\n }),\n [closeMenu, uploadPhoto]\n );\n\n return (\n \n \n \n {({ exitTour }) => (\n <>\n \n \n \n \n \n \n \n \n }\n >\n onPressUploadPhoto(false)}\n />\n {!IS_WEB && (\n onPressUploadPhoto(true)}\n />\n )}\n {user?.hasPhoto && (\n onPressDeletePhoto()}\n />\n )}\n \n \n \n \n {navLocations(user).map(\n ({\n label,\n icon,\n location,\n requiresAttention,\n step,\n tourDescription,\n isLastStep\n }) => (\n \n {\n if (isDefined(location.match('^http(s)?://'))) {\n void openWebBrowser(location);\n } else if (isDefined(location.match('^notifications$'))) {\n openNotificationsSettings();\n } else {\n navigation.getParent()?.navigate(location);\n }\n }}\n >\n {icon(colors.onSurface)}\n \n {t(label)}\n \n {!!requiresAttention && (\n \n )}\n \n \n \n \n \n )\n )}\n \n logOut(undefined)}>\n {t('common:logout')}\n \n \n \n \n )}\n \n \n );\n};\n\nexport default ProfileScreen;\n\nconst FlexedView = styled.View`\n flex-grow: 1;\n justify-content: flex-end;\n padding-vertical: ${Margin.Large}px;\n padding-horizontal: ${Size.X2_S}px;\n`;\n\nconst ProfileImageContainer = styled.View`\n align-self: center;\n margin-bottom: ${Margin.Medium}px;\n`;\n\nconst StyledHoverCard = styled(HoverCard)`\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${Margin.Small}px;\n margin-horizontal: ${Margin.Small}px;\n`;\n\nconst FilledIconContainer = styled(HoverCard)`\n width: ${Size.X2_L}px;\n height: ${Size.X2_L}px;\n background-color: ${({ theme }) => theme.colors.primary};\n border-radius: 50px;\n justify-content: center;\n align-items: center;\n padding: ${Margin.Small}px;\n`;\n\nexport const StyledMenuContainer = styled.View`\n position: absolute;\n bottom: ${Margin.Medium}px;\n right: ${Margin.Medium}px;\n`;\n\nconst StyledUserAvatar = styled(ClientAvatar).attrs({ size: PROFILE_IMAGE_PREVIEW_SIZE })`\n border-radius: ${PROFILE_IMAGE_PREVIEW_SIZE / 2}px;\n margin: ${Margin.Large}px;\n`;\n","import { StyleSheet } from 'react-native';\nimport { Size, TABLET_WIDTH_LANDSCAPE_MAX } from 'src/constants/general';\nimport { palette } from 'src/theme';\n\nexport const style = StyleSheet.create({\n sectionWeb: {\n marginVertical: Size.X2_S\n },\n section: {\n marginTop: 0,\n marginBottom: Size.S\n },\n dark: {\n color: palette.AB_BRIGHT_WHITE,\n backgroundColor: palette.BLACK\n },\n largeContainer: {\n alignSelf: 'center',\n width: TABLET_WIDTH_LANDSCAPE_MAX,\n flexDirection: 'column',\n justifyContent: 'flex-start',\n alignItems: 'stretch'\n },\n switch: {\n color: palette.AB_ELECTRIC_BLUE,\n alignSelf: 'center',\n marginRight: Size.XS,\n marginLeft: Size.L\n },\n errorText: {\n marginTop: Size.XS,\n marginHorizontal: Size.XS\n }\n});\n","import * as Linking from 'expo-linking';\nimport { t } from 'i18next';\nimport Toast from 'react-native-toast-message';\n\nconst draftSms = async (sms: string, message: string) => {\n if (!sms || !message) {\n Toast.show({\n type: 'error',\n text1: 'Error',\n text2: 'Please provide a valid phone number and message'\n });\n return;\n }\n const url = `sms:${sms}?body=${encodeURI(message)}`;\n try {\n if (await Linking.canOpenURL(url)) {\n await Linking.openURL(url);\n } else {\n throw new Error('Unable to open');\n }\n } catch {\n Toast.show({\n type: 'error',\n text1: t('unableToOpen', { ns: 'common' })\n });\n }\n};\n\nexport default draftSms;\n","import Practice from 'src/interfaces/api/Practice';\nimport ClientPracticeConfigurationSection from './ClientPracticeConfigurationSection';\nimport draftSms from 'src/utils/draftSms';\n\nconst START_MESSAGE = 'START';\n\nexport const CONFIG_STRUCTURE: ClientPracticeConfigurationSection[] = [\n {\n subheader: 'profileClientPracticeConfig:textSectionHeader',\n disabledText: 'profileClientPracticeConfig:clientSmsDisabled',\n disabledAction: async (practice: Practice) => draftSms(practice.smsNumber, START_MESSAGE),\n data: [\n {\n title: 'profileClientPracticeConfig:remindersTitle',\n description: 'profileClientPracticeConfig:remindersDescription',\n field: 'automaticSmsUnsubscribed',\n disabledField: 'clientAutomaticSmsUnsubscribed'\n },\n {\n title: 'profileClientPracticeConfig:directTitle',\n description: 'profileClientPracticeConfig:textDirectDescription',\n field: 'directSmsUnsubscribed',\n disabledField: 'clientDirectSmsUnsubscribed'\n }\n ]\n },\n {\n subheader: 'profileClientPracticeConfig:emailSectionHeader',\n data: [\n {\n title: 'profileClientPracticeConfig:remindersTitle',\n description: 'profileClientPracticeConfig:remindersDescription',\n field: 'automaticEmailUnsubscribed'\n },\n {\n title: 'profileClientPracticeConfig:newsletterTitle',\n description: 'profileClientPracticeConfig:newsletterDescription',\n field: 'massEmailUnsubscribed'\n },\n {\n title: 'profileClientPracticeConfig:directTitle',\n description: 'profileClientPracticeConfig:emailDirectDescription',\n field: 'directEmailUnsubscribed'\n }\n ]\n },\n {\n subheader: 'profileClientPracticeConfig:mailSectionHeader',\n data: [\n {\n title: 'profileClientPracticeConfig:postcardTitle',\n description: 'profileClientPracticeConfig:postcardDescription',\n field: 'automaticPostcardUnsubscribed'\n }\n ]\n }\n];\n","import { StyleSheet } from 'react-native';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const style = StyleSheet.create({\n languageView: {\n justifyContent: 'flex-start'\n },\n marginVerticalSmall: {\n marginVertical: Size.X2_S\n },\n languagePickerView: {\n justifyContent: 'flex-start',\n marginVertical: 10\n },\n height140: {\n height: 140\n },\n pickerLabel: {\n paddingBottom: Size.X3_S\n },\n buttonView: { marginTop: Size.S, marginHorizontal: Size.X3_S },\n z99: { zIndex: 99 }\n});\n\nexport const StyledPrimaryButton = styled(CPrimaryButton)`\n margin-top: ${Size.XS}px;\n margin-bottom: ${Size.X2_S}px;\n`;\n\nexport const StyledSettingsView = styled.View`\n flex: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n margin-top: ${({ theme }) => (theme.viewMode.isWeb ? `${Size.X2_S}` : '0')}px;\n`;\n","import React, { useEffect, useState, useMemo } from 'react';\nimport { View } from 'react-native';\nimport { List, Switch } from 'react-native-paper';\nimport { useTranslation } from 'react-i18next';\nimport { style } from './style';\nimport { ClientPracticeConfiguration } from 'src/interfaces/api';\nimport { isDefined } from 'src/utils';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\nimport {\n getClientPracticeConfiguration,\n patchClientPracticeConfiguration,\n QueryKeys\n} from 'src/api';\nimport Toast from 'react-native-toast-message';\nimport _ from 'lodash';\nimport ClientPracticeConfigurationSection from './ClientPracticeConfigurationSection';\nimport { CONFIG_STRUCTURE } from './ConfigStructure';\nimport { StyledSettingsView } from '../ProfileAppSettings/style';\nimport {\n BottomButtonViewForScrollView,\n Caption,\n StyledKeyboardAwareScrollView,\n StyledResponsiveView,\n StyledSectionHeader,\n Subheading\n} from 'src/components';\nimport { layout } from 'src/theme/globalStyles';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { Margin, PHONE_MASK, SMS_MASK } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { usePractice } from 'src/hooks';\nimport { mask } from 'react-native-mask-text';\n\nconst ProfileClientPracticeConfiguration: React.FC<\n NativeStackScreenProps\n> = ({ navigation }) => {\n const { user } = useUser();\n const [clientPracticeConfiguration, setClientPracticeConfiguration] =\n useState();\n const { data: practice } = usePractice();\n\n const { t } = useTranslation('profileClientPracticeConfig');\n const { colors } = useAppTheme();\n const queryClient = useQueryClient();\n\n const { data: remoteClientPracticeConfiguration } = useQuery(\n [QueryKeys.CLIENT_PRACTICE_CONFIGURATION, user],\n {\n queryFn: async () => await getClientPracticeConfiguration(user.sourceId, user.clientId)\n }\n );\n\n const updatePracticeConfig = useMutation(\n async (practiceConfiguration: ClientPracticeConfiguration) =>\n await patchClientPracticeConfiguration(practiceConfiguration),\n {\n onSuccess: (data) => {\n queryClient.setQueryData([QueryKeys.CLIENT_PRACTICE_CONFIGURATION, user], data);\n Toast.show({\n type: 'success',\n text1: t('successToast')\n });\n },\n onError: () => {\n Toast.show({\n type: 'error',\n text1: t('errorToast')\n });\n }\n }\n );\n\n const onSubmit = (clientPracticeConfiguration: ClientPracticeConfiguration): void => {\n void updatePracticeConfig.mutate(clientPracticeConfiguration);\n };\n\n useEffect(() => {\n navigation.setOptions({ title: t('title') });\n }, [navigation, t]);\n\n useEffect(() => {\n if (isDefined(remoteClientPracticeConfiguration)) {\n setClientPracticeConfiguration(remoteClientPracticeConfiguration);\n }\n }, [remoteClientPracticeConfiguration]);\n\n const disabled = useMemo(\n () => _.isEqual(remoteClientPracticeConfiguration, clientPracticeConfiguration),\n [remoteClientPracticeConfiguration, clientPracticeConfiguration]\n );\n\n if (!isDefined(clientPracticeConfiguration)) {\n return <>;\n }\n\n const onToggle = (field: string, value: boolean): void => {\n setClientPracticeConfiguration((prev) => {\n if (!prev) {\n return prev;\n }\n return { ...prev, [field]: value };\n });\n };\n\n return (\n \n \n {CONFIG_STRUCTURE.map((section: ClientPracticeConfigurationSection) => (\n \n \n {t(section.subheader)}\n \n {section.disabledText &&\n practice &&\n section.data.some(\n (item) => item.disabledField && clientPracticeConfiguration[item.disabledField]\n ) && (\n section.disabledAction?.(practice)}\n >\n {t(section.disabledText, {\n smsNumber: mask(practice.smsNumber, [SMS_MASK, PHONE_MASK])\n })}\n \n )}\n {section.data.map((item) => (\n \n (\n onToggle(item.field, !value)}\n disabled={\n item.disabledField && clientPracticeConfiguration[item.disabledField]\n }\n />\n )}\n />\n \n ))}\n \n ))}\n \n \n onSubmit(clientPracticeConfiguration)} disabled={disabled}>\n {t('save')}\n \n \n \n );\n};\n\nexport default ProfileClientPracticeConfiguration;\n","import * as React from 'react';\nimport { Pressable } from 'react-native';\nimport { Subheading, TextProps } from '../Text';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface ILink extends TextProps {\n onPress: any;\n disabled?: boolean;\n}\n\nconst CLink: React.FC> = ({\n children,\n onPress,\n disabled = false,\n ...props\n}) => {\n const { colors } = useAppTheme();\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default CLink;\n","import { StyleSheet } from 'react-native';\nimport { MD2DarkTheme as DarkTheme } from 'react-native-paper';\nimport { Body } from 'src/components';\nimport { IS_WEB, Margin, MOBILE_WIDTH_MAX, Size } from 'src/constants';\nimport { defaultLightTheme } from 'src/theme';\nimport { fonts } from 'src/theme/typography';\nimport styled from 'styled-components/native';\n\nexport const style = StyleSheet.create({\n paddingTopMedium: { paddingTop: Size.M },\n infoFields: { flex: 1, justifyContent: 'flex-start' },\n infoFieldsWebOrTablet: {\n justifyContent: 'flex-start',\n marginTop: 20\n },\n fieldLabel: {\n marginBottom: 6,\n position: 'absolute',\n top: IS_WEB ? -15 : -13,\n left: 6,\n paddingHorizontal: 2\n },\n darkRedBorder: { borderColor: DarkTheme.colors.error },\n lightRedBorder: { borderColor: defaultLightTheme.colors.error },\n borderWidthHalf: { borderWidth: 0.5, borderRadius: Size.X3_S },\n fieldValueContainer: { flexDirection: 'row', justifyContent: 'space-between' },\n errorLabel: {\n fontFamily: fonts.roboto.medium\n },\n fieldContainer: { padding: Size.X2_S, flexGrow: 1, marginTop: Size.X2_S },\n helperTextContainer: { paddingVertical: Size.X3_S, marginLeft: 4 },\n pleaseContactText: {\n paddingRight: 3,\n paddingTop: Size.X3_S\n },\n verifyText: {\n paddingLeft: 3,\n paddingTop: Size.X3_S\n }\n});\n\nexport const StyledHeader = styled(Body)`\n margin-vertical: ${Margin.Medium}px;\n max-width: ${MOBILE_WIDTH_MAX}px;\n text-align: center;\n align-self: center;\n`;\n","import Toast from 'react-native-toast-message';\nimport { t } from 'i18next';\nimport { ALLY_SUPPORT_EMAIL, VERSION_INFO } from 'src/constants';\nimport { Platform } from 'react-native';\nimport * as Device from 'expo-device';\nimport { detect } from 'detect-browser';\nimport { capitalize } from 'lodash';\nimport * as Linking from 'expo-linking';\n\nconst openEmailToAlly = async () => {\n const url = `mailto:${ALLY_SUPPORT_EMAIL}?body=${encodeURIComponent(\n t('contactAlly:contactUsEmailBody', {\n appVersion: VERSION_INFO,\n platform: Platform.OS,\n device: Device.modelName,\n os: getOSInfo(),\n browser: getBrowserInfo()\n }) as unknown as string\n )}`;\n try {\n if (await Linking.canOpenURL(url)) {\n return await Linking.openURL(url);\n } else {\n throw new Error('Unable to open email');\n }\n } catch {\n Toast.show({\n type: 'error',\n text1: t('unableToEmail', { ns: 'common' })\n });\n }\n};\n\nexport default openEmailToAlly;\n\nconst getOSInfo = () => {\n const info = [Device.osName, Device.osVersion];\n return info.filter(Boolean).join(' ') || 'Unknown';\n};\n\nconst getBrowserInfo = () => {\n if (window.navigator?.userAgent) {\n const detected = detect(window.navigator.userAgent);\n const info = [detected?.name, detected?.version];\n return capitalize(info.filter(Boolean).join(' ')) || 'Unknown';\n }\n return 'N/A';\n};\n","import { useTranslation } from 'react-i18next';\nimport { View } from 'react-native';\nimport CLink from 'src/components/CLink';\nimport { ALLY_SUPPORT_EMAIL } from 'src/constants';\nimport { FontSize } from 'src/theme/typography';\nimport { style } from './style';\nimport { layout } from 'src/theme/globalStyles';\nimport React from 'react';\nimport { Caption } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\n\nconst CContactAlly: React.FC = () => {\n const { t } = useTranslation('contactAlly');\n const { colors } = useAppTheme();\n\n return (\n \n \n {t('pleaseContact')}\n \n \n {ALLY_SUPPORT_EMAIL}\n \n {t('toVerify')}\n \n );\n};\n\nexport default CContactAlly;\n","import React from 'react';\nimport { Caption } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n text: string;\n}\n\nconst CHelperText: React.FC = ({ text }) => {\n const { colors } = useAppTheme();\n return {text};\n};\n\nexport default CHelperText;\n","import * as React from 'react';\nimport { View } from 'react-native';\nimport Ionicons from 'react-native-vector-icons/Ionicons';\nimport { Body, Caption } from 'src/components';\nimport { layout } from 'src/theme/globalStyles';\nimport { isDefined } from 'src/utils';\nimport CContactAlly from './CContactAlly';\nimport CHelperText from './CHelperText';\nimport { style } from './style';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n label: string;\n line1?: string | null;\n line2?: string;\n error?: string;\n contactUsVisible?: boolean;\n}\n\nconst CUserInfo: React.FC = ({ label, line1, line2, error, contactUsVisible }) => {\n const { colors } = useAppTheme();\n\n return (\n \n \n \n {label}\n \n \n \n {(isDefined(line1) && line1) ?? ''}\n {isDefined(line2) && {line2}}\n \n {isDefined(error) && (\n \n )}\n \n \n \n {isDefined(contactUsVisible) && contactUsVisible && }\n {!isDefined(contactUsVisible) && isDefined(error) && }\n \n \n );\n};\n\nexport default CUserInfo;\n","import isDefined from '../isDefined';\n\nconst formatPhoneNumber = (phoneNumber: string): string | null => {\n const cleaned = ('' + phoneNumber).replace(/\\D/g, '');\n const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\n if (isDefined(match)) {\n const intlCode = isDefined(match[1]) ? '+1 ' : '';\n return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('');\n }\n return null;\n};\n\nexport default formatPhoneNumber;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\n\nexport enum STEPS {\n INFO_UPDATE\n}\n\nconst UserInfoTourMap: TourMap = {\n [STEPS.INFO_UPDATE]: {\n id: STEPS.INFO_UPDATE,\n priority: 0\n }\n};\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.USER_INFO,\n UserInfoTourMap\n);\n","import React, { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport CUserInfo from './CUserInfo';\nimport { isDefined } from 'src/utils';\nimport formatPhoneNumber from 'src/utils/formatPhoneNumber';\nimport { emailBouncedOrMarkedSpam, emailHasError } from 'src/utils/validators/email';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { StyledMasterView, BottomButtonView } from 'src/components';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { StyledHeader } from './style';\nimport { ScrollView } from 'react-native';\nimport { GuideElement, STEPS, TourGuide, useTourGuide } from './tour';\nimport { TourGuideHandle } from 'src/module/TourGuide/model';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { useNavigation } from '@react-navigation/native';\n\nconst ProfileUserInfo = () => {\n const { t } = useTranslation('userInfo');\n const { navigate } = useNavigation();\n\n const onPressRequestInfoUpdate = (): void => {\n navigate(Navigators.MAIN_STACK, { screen: Screens.PROFILE_INFORMATION_UPDATE });\n };\n\n const { exitTour } = useTourGuide();\n const providerRef = useRef(null);\n\n const { user } = useUser();\n if (!isDefined(user)) {\n return null;\n }\n\n const fullName = `${user.firstName} ${user.lastName}`;\n const addressLine2 =\n user.address && user.city && user.state && user.postalCode\n ? `${user.city}, ${user.state} ${user.postalCode}`\n : '';\n\n const isEmailBouncedOrMarkedSpam = emailBouncedOrMarkedSpam(user.emailVerificationStatus);\n\n const emailError = emailHasError(user.emailVerificationStatus) ? t('updateInfo') : undefined;\n\n const mobilePhoneError =\n !isDefined(user.mobilePhone) || user.mobilePhone === '' ? t('updateInfo') : undefined;\n\n const addressError = user.badPhysicalAddress || !user.address ? t('updateInfo') : undefined;\n\n return (\n \n \n \n {t('header')}\n \n \n \n \n \n \n \n \n \n \n \n {t('infoUpdateRequest')}\n \n \n \n \n );\n};\n\nexport default ProfileUserInfo;\n","import EmailVerificationStatus from './EmailVerificationStatus';\n\nexport interface AvailablePractice {\n clientId: string;\n sourceId: number;\n practiceId: number;\n practiceName: string;\n practiceEmail: string;\n shortName: string;\n userId: number;\n userConfirmationStatus: UserConfirmationStatus;\n emailVerificationStatus: EmailVerificationStatus;\n userRegistered: boolean;\n}\n\nexport enum UserConfirmationStatus {\n UNKNOWN = 'unknown',\n PENDING = 'pending',\n CONFIRMED = 'confirmed'\n}\n","import { EmailVerificationStatus } from 'src/interfaces';\nimport { AvailablePractice, UserConfirmationStatus } from 'src/interfaces/api/AvailablePractices';\nimport { isDefined } from 'src/utils';\nimport { array, boolean, InferType, object, string, StringSchema, TestContext } from 'yup';\n\nexport const emailSchema = string()\n .default('')\n .email('error.emailMustBeValid')\n .min(6, 'error.emailMustBeValid')\n .required();\n\nexport const passwordSchema = string()\n .default('')\n .min(8, 'error.passwordMinLength')\n .matches(/[A-Z]+/, 'error.uppercase')\n .matches(/[a-z]+/, 'error.lowercase')\n .matches(/[0-9]+/, 'error.number')\n .matches(/[#?!@$%^&*\\-_=+]+/, 'error.special');\n\nexport const confirmPasswordSchema = string()\n .default('')\n .when(['password'], {\n is: (password: String) => !!password,\n then: (schema: StringSchema) =>\n schema.required('error.confirmationPasswordRequired').when('password', (password, schema) =>\n schema.test({\n test: (newPassword: string) => !!password && newPassword === password,\n message: 'error.passwordsMustMatch'\n })\n )\n });\n\nexport const validationSchema = object({\n email: emailSchema,\n rememberMe: boolean().default(true),\n password: string()\n .default('')\n .when(['selectedPractices'], {\n is: (selectedPractices: AvailablePractice[]) =>\n !!selectedPractices.length && !selectedPractices[0].userRegistered,\n then: passwordSchema\n })\n .when(['selectedPractices'], {\n is: (selectedPractices: AvailablePractice[]) => !!selectedPractices.length,\n then: (schema) => schema.required('error.passwordRequired')\n }),\n confirmPassword: string()\n .default('')\n .when(['selectedPractices'], {\n is: (selectedPractices: AvailablePractice[]) =>\n !!selectedPractices[0] && !selectedPractices[0]?.userRegistered,\n then: confirmPasswordSchema\n }),\n availablePractices: array()\n .default(undefined)\n .when('email', {\n is: (email: string) => emailSchema.isValidSync(email),\n then: (schema) =>\n schema.test({\n message: 'error.emailNotFound',\n test: (v) => !isDefined(v) || !!v.length\n })\n }),\n selectedPractices: array()\n .default([])\n .when('availablePractices', {\n is: (availablePractices: AvailablePractice[]) => !!availablePractices?.length,\n then: (schema) =>\n schema\n .min(1)\n .test({\n name: 'is-confirmed',\n test: (value: AvailablePractice[], ctx: TestContext) => {\n for (let i = 0; i < value.length; i++) {\n switch (value[i].userConfirmationStatus) {\n case UserConfirmationStatus.PENDING:\n return ctx.createError({\n message: 'error.pendingConfirmation'\n });\n default:\n break;\n }\n }\n return true;\n }\n })\n .test({\n name: 'is-email-verified',\n test: (value: AvailablePractice[], ctx: TestContext) => {\n if (value.length === 1 && value[0].userRegistered) {\n return true;\n }\n for (let i = 0; i < value.length; i++) {\n switch (value[i]?.emailVerificationStatus) {\n case EmailVerificationStatus.INVALID:\n case EmailVerificationStatus.BAD:\n case EmailVerificationStatus.DECLINED:\n return ctx.createError({\n message: 'error.emailFoundContactPractice'\n });\n case EmailVerificationStatus.BOUNCED:\n case EmailVerificationStatus.SPAM_REPORT:\n return ctx.createError({\n message: 'error.emailFoundContactUs'\n });\n default:\n break;\n }\n }\n return true;\n }\n })\n })\n});\n\nexport interface LoginForm extends InferType {}\n","import { InferType, object, string } from 'yup';\nimport { confirmPasswordSchema, passwordSchema } from '../Landing/helpers/validation';\n\nexport const validationSchema = object({\n currentPassword: string().required('error.passwordRequired'),\n password: passwordSchema,\n confirmPassword: confirmPasswordSchema\n});\n\nexport type Schema = InferType;\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { TextInput } from '../kit';\nimport { TextInputProps } from '../kit/TextInput';\n\nconst PasswordInput: React.FC = ({ ...props }) => {\n const [isSecureTextEntry, setIsSecureTextEntry] = useState(true);\n const onPressEye = (): void => {\n setIsSecureTextEntry((isSecureTextEntry) => !isSecureTextEntry);\n };\n\n return (\n \n );\n};\n\nexport default PasswordInput;\n","import { useFormik } from 'formik';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Schema, validationSchema } from './validation';\nimport PasswordInput from 'src/components/PasswordInput';\nimport { StyledPrimaryButton } from '../ProfileAppSettings/style';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { changePassword } from 'src/api';\nimport { ChangePasswordError } from 'src/interfaces';\nimport { isDefined } from 'src/utils';\nimport styled from 'styled-components/native';\nimport { Margin } from 'src/constants';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { isEmpty } from 'lodash';\nimport { InferType } from 'yup';\n\nconst ChangePassword: React.FC = () => {\n const { logIn } = useAuth();\n const { t } = useTranslation('settings');\n\n const {\n values,\n submitForm,\n setFieldValue,\n errors,\n isSubmitting,\n setFieldTouched,\n setFieldError,\n dirty,\n touched\n } = useFormik({\n validationSchema,\n initialValues: {\n currentPassword: '',\n password: '',\n confirmPassword: ''\n },\n validateOnChange: true,\n onSubmit: async (values) => mutate(values)\n });\n\n const { mutate } = useMutation(\n async (user: Schema) =>\n await changePassword({\n current_password: user.currentPassword,\n password: user.password,\n password_confirmation: user.confirmPassword\n }),\n {\n onSuccess: async (data, vars) => {\n void logIn({\n id: data.id,\n email: data.email,\n password: vars.password,\n practiceId: data.practiceId\n });\n },\n onError: (response: ChangePasswordError) => {\n try {\n const error: ChangePasswordError = response;\n const invalidPasswordEntered =\n isDefined(error.errors.current_password) &&\n isDefined(error.errors.current_password.find((message) => message.includes('invalid')));\n\n const newPasswordSameAsCurrent =\n isDefined(error.errors.password) &&\n isDefined(error.errors.password.find((message) => message.includes('different')));\n\n if (invalidPasswordEntered) {\n setFieldError('currentPassword', t('invalidPassword'));\n } else if (newPasswordSameAsCurrent) {\n setFieldError('password', t('shouldBeDifferent'));\n }\n } catch {\n Toast.show({ text1: response.message, type: 'error' });\n }\n }\n }\n );\n\n const getFieldError = useCallback(\n (key: keyof InferType) =>\n touched[key] && errors[key] && t(errors[key]!, { ns: 'login' }),\n [errors, t, touched]\n );\n\n return (\n \n setFieldTouched('currentPassword')}\n onChangeText={async (text) => setFieldValue('currentPassword', text)}\n error={!!getFieldError('currentPassword')}\n msg={getFieldError('currentPassword')}\n />\n setFieldTouched('password')}\n onChangeText={async (text) => setFieldValue('password', text)}\n error={!!getFieldError('password')}\n msg={getFieldError('password')}\n />\n setFieldTouched('confirmPassword')}\n onChangeText={async (text) => setFieldValue('confirmPassword', text)}\n error={!!getFieldError('confirmPassword')}\n msg={getFieldError('confirmPassword')}\n />\n \n {t('changePassword')}\n \n \n );\n};\n\nexport default ChangePassword;\n\nexport const ButtonView = styled.View`\n padding-horizontal: ${Margin.Small}px;\n gap: ${Margin.Medium}px;\n`;\n","import React, { Dispatch, SetStateAction } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View } from 'react-native';\nimport { DropDown, StyledSectionHeader, Subheading } from 'src/components';\nimport { style } from './style';\nimport { Language, Margin } from 'src/constants';\nimport styled from 'styled-components/native';\n\ninterface Props {\n language: string;\n changeLanguage: Dispatch>;\n}\n\nconst CChangeLanguage: React.FC = ({ language, changeLanguage }) => {\n const { t } = useTranslation('settings');\n\n return (\n \n \n {t('language')}\n \n \n \n {\n changeLanguage(value.toString());\n }}\n />\n \n \n \n );\n};\n\nexport default CChangeLanguage;\n\nexport const StyledView = styled.View`\n padding-horizontal: ${Margin.Small}px;\n margin-bottom: ${Margin.Medium}px;\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactNativeModal from 'react-native-modal';\nimport { Card, useTheme } from 'react-native-paper';\nimport { Body, Subheading } from 'src/components';\nimport { HoverButton, TextInput } from 'src/components/kit';\nimport { Margin, MOBILE_WIDTH_MAX, Size } from 'src/constants';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport { ControlConfirmationModalHook } from './useControlConfirmationModal';\n\nconst MAX_CONTENT_WIDTH = 300;\n\nconst AccountDeleteConfirmationModal: React.FC = ({\n isVisible,\n close,\n doDelete\n}) => {\n const { t } = useTranslation('common');\n const { colors } = useTheme();\n\n const [confirmDisabled, setConfirmDisabled] = useState(true);\n const [typedText, setTypedText] = useState('');\n\n const onCancel = () => {\n setTypedText('');\n close();\n };\n\n const onDelete = () => {\n setTypedText('');\n doDelete();\n };\n\n useEffect(() => {\n setConfirmDisabled(typedText?.toLowerCase() !== t('delete').toLowerCase());\n }, [t, typedText]);\n\n return (\n \n \n \n \n {t('areYouSure')}\n \n \n {t('manageAccount.deletingIrreversible', { ns: 'settings' })}\n \n \n {t('manageAccount.typeDelete', { ns: 'settings' })}\n \n setTypedText(typedText)}\n />\n \n \n {\n onCancel();\n }}\n isFirst={true}\n color={colors.primary}\n mode={'outlined'}\n labelStyle={{ color: colors.primary }}\n >\n {t('cancel')}\n \n {\n onDelete();\n }}\n disabled={confirmDisabled}\n isLast={true}\n color={colors.primary}\n mode={'contained'}\n labelStyle={{ color: colors.onPrimary }}\n >\n {t('delete')}\n \n \n \n \n );\n};\n\nexport default AccountDeleteConfirmationModal;\n\nconst DeleteAccountInput = styled(TextInput)`\n height: ${Size.X2_L}px;\n align-self: stretch\n margin-top: ${Margin.ExtraSmall}px;\n margin-bottom: ${Margin.Large}px;\n`;\n\nexport const StyledCard = styled(Card)`\n width: 100%;\n padding-top: ${Size.X2_S}px;\n align-self: center;\n max-width: ${({ theme }) => (theme.viewMode.isMobile ? 'auto' : `${MOBILE_WIDTH_MAX}px`)};\n`;\n\nconst ButtonsContainer = styled.View`\n flex-grow: 1;\n justify-content: center;\n align-items: stretch;\n flex-direction: row;\n`;\n\nconst AlertButton = styled(HoverButton)<{ isFirst?: boolean; isLast?: boolean }>`\n flex: 1;\n padding: ${Margin.Small}px;\n height: ${Size.X2_L}px;\n border-radius: 0px;\n border-width: 0px;\n border-top-width: 0.5px;\n border-bottom-left-radius: ${({ theme, isFirst }) => (isFirst ? `${theme.roundness}px` : '0px')};\n border-bottom-right-radius: ${({ theme, isLast }) => (isLast ? `${theme.roundness}px` : '0px')};\n`;\n\nconst Content = styled.View`\n padding: ${Margin.Medium}px;\n padding-bottom: ${Margin.Large}px;\n max-width: ${MAX_CONTENT_WIDTH}px;\n`;\n","import React from 'react';\nimport { CPrimaryButton, StyledSectionHeader, Subheading } from 'src/components';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { useTranslation } from 'react-i18next';\nimport { ControlConfirmationModalHook } from './useControlConfirmationModal';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst ManageAccountSection: React.FC = ({ promptDelete }) => {\n const { t } = useTranslation('settings');\n const { colors } = useAppTheme();\n\n return (\n <>\n \n {t('manageAccount.manageAccount')}\n \n \n {t('manageAccount.deleteMyAccount')}\n \n \n );\n};\n\nexport default ManageAccountSection;\n\nconst StyledDeleteButton = styled(CPrimaryButton)`\n margin-horizontal: ${Margin.Small}px;\n margin-vertical: ${Margin.Medium}px;\n`;\n","import { BiometricsPromptContextType } from './types';\n\nconst defaultContext: BiometricsPromptContextType = {\n needsPrompt: false,\n setNeedsPrompt: () => {},\n setBiometricAuthAppSetting: () => {},\n hasCredentials: false,\n biometricsAuthAppSetting: undefined\n};\n\nexport default defaultContext;\n","import React, { PropsWithChildren } from 'react';\nimport defaultContext from './defaultContext';\n\nconst BiometricsPromptContext = React.createContext(defaultContext);\nexport const useBiometricsPrompt = () => React.useContext(BiometricsPromptContext);\n\nconst BiometricsPromptProvider: React.FC = ({ children }) => {\n return <>{children};\n};\n\nexport default BiometricsPromptProvider;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { List, Switch } from 'react-native-paper';\nimport { AsyncStorageKeys } from 'src/api';\nimport { StyledResponsiveView, StyledSectionHeader, Subheading } from 'src/components';\nimport { useStorage } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useNavigation } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { useBiometricsPrompt } from 'src/providers/BiometricsPromptProvider';\n\nconst BiometricAuth: React.FC = () => {\n const { navigate } = useNavigation();\n const { t } = useTranslation('settings');\n const { colors } = useAppTheme();\n const [biometricsEnabled, setBiometricEnabled] = useStorage(\n AsyncStorageKeys.BIOMETRIC_AUTH_APP_SETTING\n );\n const { hasCredentials } = useBiometricsPrompt();\n const enableBiometrics = async (enable: boolean) => {\n if (enable) {\n navigate(Navigators.MAIN_STACK, { screen: Screens.BIOMETRIC_LOGIN_OPT_IN });\n } else {\n setBiometricEnabled(false);\n }\n };\n\n return (\n <>\n \n {t('biometricSectionHeader')}\n \n \n (\n \n )}\n />\n \n \n );\n};\n\nexport default BiometricAuth;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { layout } from 'src/theme/globalStyles';\nimport ChangePassword from '../ChangePassword/ChangePassword';\nimport CChangeLanguage from './CChangeLanguage';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { style, StyledSettingsView } from './style';\nimport {\n ManageAccountSection,\n DeleteAccountConfirmationModal,\n useControlConfirmationModal\n} from './ManageAccount';\nimport { StyledSectionHeader, Subheading, TextInput } from 'src/components';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport { useIsMutating } from 'react-query';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Margin, VERSION_INFO } from 'src/constants';\nimport BiometricAuth from './BiometricAuth';\nimport useBiometrics from 'src/hooks/useBiometrics';\n\nconst ProfileAppSettings: React.FC = () => {\n const { t, i18n } = useTranslation('settings');\n const [language, setLanguage] = useState(i18n.language);\n const { colors } = useAppTheme();\n\n const { canUseBiometrics } = useBiometrics();\n\n const isMutating = useIsMutating();\n\n useEffect(() => {\n if (i18n.language !== language) {\n void i18n.changeLanguage(language);\n }\n }, [i18n, language]);\n\n const controlConfirmationModal = useControlConfirmationModal();\n\n return (\n \n \n {isMutating > 0 && (\n 0}\n size='large'\n color={colors.primary}\n />\n )}\n \n {t('changePassword')}\n \n\n \n \n {canUseBiometrics && }\n \n \n {t('appVersion')}\n \n \n \n \n \n );\n};\n\nexport default ProfileAppSettings;\n","import { t } from 'i18next';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { deleteUser } from 'src/api';\nimport { useBoolean } from 'src/hooks';\nimport { useAuth } from 'src/providers/AuthProvider';\n\nexport interface ControlConfirmationModalHook {\n doDelete: () => void;\n promptDelete: () => void;\n close: () => void;\n isVisible: boolean;\n}\nexport const useControlConfirmationModal = (): ControlConfirmationModalHook => {\n const { logOut } = useAuth();\n const { mutate: deleteAccount } = useMutation(async () => {\n await deleteUser();\n Toast.show({\n type: 'success',\n text1: t('manageAccount.accountDeleted', { ns: 'settings' })\n });\n void logOut(undefined);\n });\n\n const { value: isVisible, toTrue: promptDelete, toFalse: close } = useBoolean();\n\n const doDelete = (): void => {\n deleteAccount();\n close();\n };\n\n return {\n doDelete,\n promptDelete,\n close,\n isVisible\n };\n};\n","import { LinearGradient } from 'expo-linear-gradient';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { ImageBackground, View, Image } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useViewMode } from 'src/hooks';\nimport { usePractice, usePracticeConfiguration, usePracticeInfo } from 'src/hooks/react-query';\nimport { palette } from 'src/theme';\nimport { cleanUrl, transparent } from 'src/utils';\nimport styled from 'styled-components/native';\nimport DEFAULT_BANNER from 'assets/banner-default.jpg';\n\nconst DEFAULT_BANNER_RATIO = 390 / 204;\n\nconst Banner = () => {\n const { maxContentWidth } = useViewMode();\n\n const { data: practiceConfiguration, isFetching: practiceFetching } = usePracticeConfiguration();\n\n const [dim, setDim] = useState({\n width: maxContentWidth,\n height: maxContentWidth / DEFAULT_BANNER_RATIO\n });\n\n const bannerUri = useMemo(\n () => cleanUrl(practiceConfiguration?.mobileBannerImage?.urls.original ?? ''),\n [practiceConfiguration]\n );\n\n const [imageFetching, setImageFetching] = useState(false);\n useEffect(() => {\n if (bannerUri) {\n setImageFetching(true);\n void Image.prefetch(bannerUri).finally(() => {\n Image.getSize(bannerUri, (width, height) =>\n setDim({ width: maxContentWidth, height: (maxContentWidth * height) / width })\n );\n setImageFetching(false);\n });\n }\n }, [bannerUri, maxContentWidth]);\n\n const { data: practice } = usePractice();\n const {\n data: practiceCustomization,\n isFetching: practiceCustomizationIsFetching,\n isFetched\n } = usePracticeInfo(practice?.shortName);\n\n const isFetching = practiceFetching || imageFetching || practiceCustomizationIsFetching;\n\n if (isFetched && practiceCustomization?.hideBannerImage) return null;\n\n return (\n \n {isFetching ? (\n \n ) : (\n <>\n \n \n \n )}\n \n \n );\n};\n\nexport default Banner;\n\nconst StyledImageBackground = styled(ImageBackground)`\n justify-content: center;\n`;\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Home } from 'react-native-feather';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst HomeHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default HomeHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport HomeHero from './components/HomeHero';\n\nexport enum STEPS {\n DRAWER,\n SWITCH_PRACTICE,\n ANNOUNCEMENTS,\n QUICK_ACCESS,\n APPOINTMENTS,\n REMINDERS,\n PRESCRIPTIONS,\n TO_DOS,\n LIFELEARN,\n HELP\n}\n\nconst HomePageTourMap: TourMap = {\n [STEPS.DRAWER]: { id: STEPS.DRAWER, priority: 0 },\n [STEPS.SWITCH_PRACTICE]: { id: STEPS.SWITCH_PRACTICE, priority: 1 },\n [STEPS.ANNOUNCEMENTS]: { id: STEPS.ANNOUNCEMENTS, priority: 2 },\n [STEPS.QUICK_ACCESS]: { id: STEPS.QUICK_ACCESS, priority: 3 },\n [STEPS.APPOINTMENTS]: { id: STEPS.APPOINTMENTS, priority: 4 },\n [STEPS.REMINDERS]: { id: STEPS.REMINDERS, priority: 5 },\n [STEPS.PRESCRIPTIONS]: { id: STEPS.PRESCRIPTIONS, priority: 6 },\n [STEPS.TO_DOS]: { id: STEPS.TO_DOS, priority: 7 },\n [STEPS.LIFELEARN]: { id: STEPS.LIFELEARN, priority: 8 },\n [STEPS.HELP]: { id: STEPS.HELP, priority: 9 }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'home:tour.drawer.title',\n body: 'home:tour.drawer.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.HOME,\n HomePageTourMap\n);\n","import React from 'react';\nimport { Body } from 'src/components';\nimport { SlideItem, SlideProps } from 'src/components/kit/Slider/Slide';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nconst AnnouncementSlide: React.FC> = ({ width, item }) => {\n if (!width) return null;\n return {!!width && {item.body}};\n};\n\nexport default AnnouncementSlide;\n\nconst CarouselItemView = styled.View<{ width: number }>`\n width: ${({ width }) => width}px;\n padding-horizontal: ${Size.S}px;\n margin-bottom: ${Size.S}px;\n`;\n\nconst Text = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FlatList } from 'react-native';\nimport { Headline, HoverButton, Row, Slider } from 'src/components';\nimport { Size } from 'src/constants';\nimport { useAnnouncements } from 'src/hooks/react-query';\nimport styled from 'styled-components/native';\nimport { useBoolean } from 'src/hooks';\nimport Icon from 'react-native-vector-icons/Fontisto';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from '../tour';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport AnnouncementSlide from './AnnouncementSlide';\nimport { containers } from 'src/theme/globalStyles';\n\nconst AnnouncementsCarousel: React.FC = () => {\n const { t } = useTranslation('home');\n const { data: announcements } = useAnnouncements();\n const { colors } = useAppTheme();\n const sliderRef = useRef>(null);\n const { value: isAutoPlay, toggle: toggleAuto } = useBoolean(true);\n\n const activeAnnouncements: SlideItem[] = useMemo(() => {\n if (!announcements) return [];\n return announcements\n .filter((a) => !a.archivedAt && !a.disabled)\n .map((announcement) => ({\n body: announcement.text\n }));\n }, [announcements]);\n\n const hasAnnouncements = !!activeAnnouncements?.length;\n\n if (!hasAnnouncements) {\n return null;\n }\n\n return (\n \n \n \n {t('announcements')}\n \n \n \n \n \n \n \n );\n};\n\nexport default AnnouncementsCarousel;\n\nconst StyledTitle = styled(Headline)`\n color: ${({ theme }) => theme.colors.onSurface};\n padding: ${Size.S}px;\n`;\nconst Container = styled.View`\n background-color: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.roundness}px;\n padding-bottom: ${Size.M}px;\n`;\n","import { useNavigation, NavigationProp, ParamListBase } from '@react-navigation/native';\nimport React from 'react';\nimport { ChevronDown } from 'react-native-feather';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { HoverButton, HoverCard, Row } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { useAvailablePractices, usePractice } from 'src/hooks';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from '../tour';\nimport ClientAvatar from 'src/components/ClientAvatar';\n\nconst AVATAR_SIZE = 44;\n\ninterface Props {\n isFetched: boolean;\n}\n\nconst HomeHeader: React.FC = ({ isFetched }) => {\n const { navigate } = useNavigation>();\n const { user } = useUser();\n const { data: practice } = usePractice();\n const { t } = useTranslation('home');\n const { colors, viewMode } = useAppTheme();\n const { top } = useSafeAreaInsets();\n const { data: availablePractices = [] } = useAvailablePractices(user.email, {\n select: (d) => d.filter((v) => v.userRegistered)\n });\n\n const hasMultiplePractices = availablePractices.length > 1;\n\n return (\n \n navigate(Screens.PROFILE_ROOT)}>\n \n \n \n navigate(Navigators.MAIN_STACK, { screen: Screens.SELECT_PRACTICE })\n }\n icon={hasMultiplePractices && }\n >\n {practice?.name}\n \n \n \n );\n};\n\nexport default HomeHeader;\n\nconst Container = styled(HoverCard)`\n margin: ${Size.X2_S}px;\n border-radius: ${AVATAR_SIZE / 2}px;\n`;\n\nconst StyledHoverButton = styled(HoverButton).attrs(({ theme: { colors } }) => ({\n uppercase: false,\n buttonColor: colors.onPrimary\n}))`\n flex: 1;\n flex-direction: row-reverse;\n justify-content: flex-end;\n`;\n\nconst StyledUserAvatar = styled(ClientAvatar).attrs(({ theme: { colors } }) => ({\n size: AVATAR_SIZE,\n iconSize: Size.M,\n iconColor: colors.onPrimary\n}))`\n border-radius: ${AVATAR_SIZE / 2}px;\n background-color: ${({ theme }) => theme.colors.primary};\n border-color: ${({ theme }) => theme.colors.onPrimary};\n border-width: ${Size.X4_S}px;\n`;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst AlarmBell: React.FC = (props: SvgProps) => (\n \n \n \n);\n\nexport default AlarmBell;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst AlarmClock: React.FC = (props: SvgProps) => (\n \n \n \n);\n\nexport default AlarmClock;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst AlertCircle: React.FC = (props: SvgProps) => (\n \n \n \n);\n\nexport default AlertCircle;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst Calendar: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default Calendar;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst House: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default House;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst Information: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default Information;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst Paw: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default Paw;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst Pill: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default Pill;\n","import React from 'react';\nimport Svg, { SvgProps, Path } from 'react-native-svg';\n\nconst Prescriptions: React.FC = (props: SvgProps) => (\n \n \n \n);\nexport default Prescriptions;\n","import React from 'react';\nimport Svg, { SvgProps, Path, G } from 'react-native-svg';\nimport { STROKE_WIDTH_DEFAULT } from 'src/constants';\n\nconst Trophy: React.FC = (props: SvgProps) => (\n \n \n \n \n \n \n);\nexport default Trophy;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator, TouchableRipple } from 'react-native-paper';\nimport { Caption, HoverButton, MiniHeroIcon, Shimmer } from 'src/components';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { usePracticeConfiguration } from 'src/hooks';\nimport useRequestSetting from 'src/hooks/react-query/useRequestSetting';\nimport styled from 'styled-components/native';\nimport { quickLinks } from '../generateDisplayData';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { colorShade, transparent } from 'src/utils';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { QueryKeys, getEmergencyContacts } from 'src/api';\nimport { useQuery } from 'react-query';\n\nconst QuickAccess: React.FC = () => {\n const { t } = useTranslation('home');\n const navigation = useNavigation>();\n const requestSettings = useRequestSetting();\n const { colors, dark } = useAppTheme();\n const practiceConfiguration = usePracticeConfiguration();\n\n const emergencyContacts = useQuery([QueryKeys.EMERGENCY_CONTACTS], {\n queryFn: getEmergencyContacts\n });\n\n const quickLinkData = useMemo(\n () =>\n quickLinks({\n navigation,\n practiceConfiguration,\n requestSettings,\n emergencyContacts\n }),\n [emergencyContacts, navigation, practiceConfiguration, requestSettings]\n );\n\n if (quickLinkData.length === 0) {\n return null;\n }\n\n if (quickLinkData.length === 1) {\n return (\n \n {quickLinkData.map(({ title, isDisabled, isLoading, onPress, child: icon }) => (\n \n isLoading ? (\n \n ) : (\n \n )\n }\n key={title}\n onPress={onPress}\n disabled={isDisabled}\n >\n {t(title)}\n \n ))}\n \n );\n }\n\n return (\n \n {quickLinkData.map(({ title, isDisabled, isLoading, onPress, child: Child }) => (\n \n \n <>\n \n \n {isLoading ? (\n \n ) : (\n \n \n \n )}\n \n \n\n \n \n \n \n \n \n ))}\n \n );\n};\n\nexport default QuickAccess;\n\nconst InnerContainer = styled.View`\n width: ${IconSize.S}px;\n height: ${IconSize.S}px;\n align-items: center;\n`;\n\nconst Label = styled(Caption)`\n margin-top: ${Margin.Medium}px;\n text-align: center;\n color: ${({ theme }) => theme.colors.text};\n`;\n\nconst QuickLinksHolder = styled.View`\n flex-direction: row;\n justify-content: center;\n`;\n\nconst IconContainer = styled.View`\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.2)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.XS}px;\n`;\n\nconst OpaqueContainer = styled.View`\n border-radius: ${IconSize.L}px;\n`;\n\nconst Container = styled(TouchableRipple)`\n align-items: center;\n cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n`;\n\nconst LinkContainer = styled.View`\n flex: 0.25;\n`;\n\nconst SingleContainer = styled(HoverButton).attrs(({ theme, ...rest }) => ({\n ...rest,\n mode: 'contained',\n buttonColor: transparent(theme.colors.primary, 0.2),\n labelStyle: {\n color: colorShade(theme.colors.primary, 0.8)\n },\n uppercase: false\n}))`\n flex: 1;\n`;\n","import React from 'react';\nimport { PracticeConfigurationHook } from 'src/hooks/react-query/usePracticeConfiguration';\nimport { useRequestSetting } from 'src/hooks';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { openWebBrowser } from 'src/utils';\nimport { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport { SvgProps } from 'react-native-svg';\nimport { Calendar, Information, Pill } from 'src/components/kit/ABIcons';\nimport { AlertTriangle } from 'react-native-feather';\nimport { STROKE_WIDTH_DEFAULT } from 'src/constants';\nimport EmergencyContact from 'src/interfaces/api/EmergencyContact';\nimport { UseQueryResult } from 'react-query';\n\ninterface QuickLinkContext {\n title: string;\n onPress: () => void;\n child: (props: SvgProps) => React.JSX.Element;\n isDisabled: boolean;\n isLoading: boolean;\n}\n\nexport const quickLinks = ({\n requestSettings,\n navigation,\n practiceConfiguration,\n emergencyContacts\n}: {\n navigation: NavigationProp;\n requestSettings: ReturnType;\n practiceConfiguration: PracticeConfigurationHook;\n emergencyContacts: UseQueryResult;\n}): QuickLinkContext[] =>\n [\n {\n title: requestSettings.onlineBookingEnabled ? 'scheduleAppointment' : 'requestAppointment',\n child: (props: SvgProps) => ,\n onPress: () => requestSettings.requestAppointment(),\n isDisabled: !!requestSettings.data?.appointmentRequestsDisabled,\n isLoading: requestSettings.isLoading\n },\n {\n title: 'onlinePharmacy',\n child: (props: SvgProps) => ,\n onPress: async () => {\n if (practiceConfiguration?.data?.onlinePharmacyLink)\n await openWebBrowser(practiceConfiguration?.data?.onlinePharmacyLink);\n },\n isDisabled: !practiceConfiguration?.data?.onlinePharmacyLink,\n isLoading: practiceConfiguration?.isLoading\n },\n {\n title: 'contactUs',\n child: (props: SvgProps) => ,\n onPress: () => navigation.navigate(Screens.CONTACT_US),\n isDisabled: false,\n isLoading: false\n },\n {\n title: 'afterHours',\n child: (props: SvgProps) => ,\n onPress: () => navigation.navigate(Screens.AFTER_HOURS),\n isDisabled: emergencyContacts.data?.length === 0,\n isLoading: emergencyContacts.isFetching\n }\n ].filter((item) => !item.isDisabled || item.isLoading);\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from '../IconProps';\n\nconst Bird: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Bird;\n","import React from 'react';\nimport { IconProps, Paw } from 'src/components/Icons';\nimport { Species } from 'src/constants';\nimport Bird from './Bird';\nimport Bunny from './Bunny';\nimport Cat from './Cat';\nimport Cow from './Cow';\nimport Dog from './Dog';\nimport Horse from './Horse';\nimport Rodent from './Rodent';\nimport Gecko from './Gecko';\n\ninterface Props extends IconProps {\n species?: string;\n color: string;\n size: number;\n strokeWidth?: number;\n}\n\nconst AnimalIcon: React.FC = ({ species, color, size, strokeWidth }) => {\n if (!species) return ;\n\n switch (species.toLowerCase()) {\n case Species.AVIAN:\n case Species.BIRD: {\n return ;\n }\n case Species.CAT:\n case Species.FELINE: {\n return ;\n }\n case Species.CANINE:\n case Species.DOG: {\n return ;\n }\n case Species.EQUINE:\n case Species.HORSE: {\n return ;\n }\n case Species.BOVINE:\n case Species.COW: {\n return ;\n }\n case Species.RODENT: {\n return ;\n }\n case Species.BUNNY:\n case Species.LAGOMORPH: {\n return ;\n }\n case Species.GECKO:\n return ;\n\n default:\n return ;\n }\n};\n\nexport default AnimalIcon;\n","import React from 'react';\nimport { StyleProp, ViewStyle } from 'react-native';\nimport { Patient } from 'src/interfaces';\nimport AnimalIcon from './Icons/Animal';\nimport { useIsFetching, useIsMutating } from 'react-query';\nimport { MutationKeys, QueryKeys } from 'src/api';\nimport { encodeKeyFromPatient } from 'src/utils/extractImageName';\nimport Avatar from './Avatar';\n\ninterface Props {\n patient?: Patient;\n size: number;\n style?: StyleProp;\n aspectRatio?: number;\n}\n\nconst PatientAvatar: React.FC = ({ patient, ...props }) => {\n const isMutating = !!useIsMutating([MutationKeys.PATIENT_PHOTO_UPLOAD, patient?.patientId]);\n const isFetching = !!useIsFetching({\n queryKey: [QueryKeys.PATIENT, patient?.patientId],\n predicate: (query) => !query.state.isInvalidated\n });\n\n return (\n }\n />\n );\n};\n\nexport default PatientAvatar;\n","import _ from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View } from 'react-native';\nimport { Body, Caption, HoverCard, Row } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { Calendar } from 'src/components/kit/ABIcons';\nimport { Margin, Size } from 'src/constants';\nimport { usePatient } from 'src/hooks';\nimport { Patient } from 'src/interfaces/';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst DETAIL_ICON_SIZE = 52;\n\ninterface Props {\n onPress?: () => void;\n patientId: Patient['patientId'];\n tag?: string;\n description?: string;\n date?: string;\n action?: React.ReactElement;\n isLate?: boolean;\n disabled?: boolean;\n actionCondition?: (patient?: Patient) => boolean;\n}\nconst ItemDetail: React.FC = ({\n patientId,\n description,\n date,\n action,\n tag,\n isLate,\n disabled,\n onPress,\n actionCondition = () => true\n}) => {\n const { t } = useTranslation('todos');\n const { data: patient } = usePatient(patientId);\n const { colors } = useAppTheme();\n return (\n \n \n \n \n {patient ? _.capitalize(patient.name) : t('list.unknown')}\n {!!tag && ` - ${tag}`}\n \n {!!description && (\n \n {description}\n \n )}\n {!!date && (\n \n \n \n \n {date}\n \n )}\n \n {!!action && actionCondition(patient) && (\n \n {action}\n \n )}\n \n );\n};\n\nexport default ItemDetail;\n\nconst StyledAvatar = styled(PatientAvatar).attrs({ size: DETAIL_ICON_SIZE })`\n margin-right: ${Margin.Medium}px;\n margin-bottom: ${Size.X4_S}px;\n align-self: center;\n`;\n\nconst CalendarContainer = styled.View`\n margin-right: ${Margin.Small}px;\n margin-bottom: ${Margin.ExtraSmall}px;\n justify-content: flex-start;\n align-items: flex-start;\n`;\n\nconst StyledBody = styled(Body).attrs({ numberOfLines: 1 })<{ isLate?: boolean }>`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst StyledRow = styled(HoverCard).attrs({ hideShadow: true })`\n flex-direction: row;\n margin-vertical: ${Margin.Small}px;\n padding: ${Margin.Small}px;\n\n justify-content: flex-start;\n align-items: flex-start;\n`;\n\nconst DateRow = styled(Row)`\n justify-content: flex-start;\n`;\n","import { ActivityIndicator } from 'react-native-paper';\nimport { Body, HoverButton, HoverCard, Subheading } from 'src/components';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { palette, Weight } from 'src/theme';\nimport { transparent } from 'src/utils';\nimport styled from 'styled-components/native';\n\nconst MINIMUM_HEIGHT = 260;\n\nexport const CallToAction = styled(HoverButton).attrs({ mode: 'contained', uppercase: false })`\n margin: ${Margin.Large}px;\n`;\nexport const FullActivityIndicator = styled(ActivityIndicator)`\n height: ${MINIMUM_HEIGHT}px;\n`;\n\nexport const ListContainer = styled.View`\n margin-horizontal: ${Margin.Large}px;\n`;\n\nexport const StyledHeading = styled(Subheading)`\n color: ${({ theme }) => theme.colors.onSurface};\n flex-grow: 1;\n`;\n\nexport const HeadingIconContainer = styled.View`\n margin-right: ${Margin.Medium}px;\n`;\n\nexport const StyledHeader = styled(HoverCard).attrs({ hideShadow: true })`\n flex-direction: row;\n align-items: center;\n padding: ${Size.S}px;\n`;\n\nexport const Badge = styled.View`\n background-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_10 : palette.BLACK_OPACITY_10};\n border-radius: ${Size.S}px;\n padding-horizontal: ${Margin.Large}px;\n padding-vertical: ${Margin.Small}px;\n`;\n\nexport const CaughtUpText = styled(Subheading)`\n background-color: ${({ theme }) => transparent(theme.colors.surface, 0.75)}\n color: ${({ theme }) => theme.colors.onSurface};\n margin: ${Size.X2_L}px ${Size.M}px;\n padding: ${Margin.Medium}px;\n border-radius: ${({ theme }) => theme.roundness}px;\n align-self: center;\n text-align: center;\n`;\n\nexport const CardContent = styled.View`\n gap: ${Margin.ExtraLarge}px;\n padding-top: ${Margin.Large}px;\n padding-horizontal: ${Margin.ExtraLarge}px;\n`;\n\nexport const Link = styled(Body)`\n color: ${({ theme }) => theme.colors.text};\n text-decoration-line: underline;\n font-weight: ${Weight.MEDIUM};\n letter-spacing: ${Size.X5_S}px;\n`;\n\nexport const FilledIconContainer = styled.View`\n margin-vertical: ${Margin.Large}px;\n aspect-ratio: 1;\n justify-content: center;\n align-items: center;\n align-self: center;\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.15)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.X2_S}px;\n`;\n\nexport const StyledHoverView = styled.View`\n background-color: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.roundness}px;\n`;\n","import React from 'react';\nimport { Body } from 'src/components';\nimport { StyledHeader, HeadingIconContainer, StyledHeading, Badge } from './shared';\nimport { IconProps } from 'src/components/Icons';\nimport { IconSize } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n icon: (props: IconProps) => React.ReactElement;\n toggle: () => void;\n count: number | undefined;\n label: string;\n}\nconst HeaderToggle: React.FC = ({ toggle, count = 0, label, icon: Icon }) => {\n const { colors } = useAppTheme();\n return (\n \n <>\n \n \n \n {label}\n {!!count && (\n \n {count}\n \n )}\n \n \n );\n};\n\nexport default HeaderToggle;\n","import React, { Suspense, useEffect, useState } from 'react';\nimport { Patient, Reminder } from 'src/interfaces';\nimport { useBoolean, useReminders } from 'src/hooks';\nimport moment, { duration } from 'moment-timezone';\nimport ItemDetail from './ItemDetail';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { useTranslation } from 'react-i18next';\nimport { CallToAction, CaughtUpText, FullActivityIndicator, ListContainer } from './shared';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport { AlarmBell } from 'src/components/kit/ABIcons';\nimport { HoverCard } from 'src/components';\nimport { toLocalShortDate } from 'src/utils';\n\nconst MAX_ITEMS = 3;\nconst DISPLAY_THRESHHOLD = duration(30, 'days');\n\ninterface Props {\n patientId?: Patient['patientId'];\n maxItems?: number;\n}\nconst Reminders: React.FC = ({ patientId, maxItems = MAX_ITEMS }) => {\n const { t } = useTranslation('home');\n const { value: isOpen, toggle } = useBoolean(true);\n const { navigate } = useNavigation>();\n const [count, setCount] = useState(0);\n const [reminders, setReminders] = useState();\n const { data, isFetching } = useReminders({\n patientId,\n suspense: false\n });\n\n useEffect(() => {\n const pastDue = data.filter(\n (v) =>\n moment(v.pastDueDate).subtract(DISPLAY_THRESHHOLD).isBefore() &&\n (!patientId || v.patientId === patientId)\n );\n setCount(pastDue.length);\n setReminders(pastDue.slice(0, maxItems));\n }, [data, maxItems, patientId]);\n\n return (\n \n }\n label={t('reminders')}\n toggle={() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n count={count}\n />\n {isOpen && !isFetching && (\n }>\n \n {reminders?.map((reminder) => (\n \n ))}\n \n \n )}\n {isOpen && !isFetching && !reminders?.length && (\n {t('noItems', { itemType: t('reminders').toLowerCase() })}\n )}\n {isOpen && isFetching && }\n {isOpen && (\n navigate(Screens.REMINDERS, { id: patientId })}>\n {t('viewAll')}\n \n )}\n \n );\n};\n\nexport default Reminders;\n","import React, { useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Platform } from 'react-native';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { QueryKeys, postRequest } from 'src/api';\nimport { Margin } from 'src/constants';\nimport useRequestSetting from 'src/hooks/react-query/useRequestSetting';\nimport { Prescription, RequestType } from 'src/interfaces';\nimport RefillRequest from 'src/interfaces/api/RefillRequest';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { ForwardRefFC } from 'src/types';\nimport styled from 'styled-components/native';\nimport Alert, { AlertHandle, AlertOption } from './Alert';\nimport { TextInput } from './kit';\nimport { Body } from './Text';\nimport { queryClient } from 'src/utils';\n\nexport interface RefillModalHandle {\n request?: (prescription: Prescription) => void;\n}\n\nconst RefillModal: ForwardRefFC = React.forwardRef(\n (props, ref) => {\n const { user } = useUser();\n const { t } = useTranslation();\n const { colors } = useAppTheme();\n\n const { requestRefill, data: requestSetting } = useRequestSetting();\n\n const [comments, setComments] = useState();\n const [prescription, setPrescription] = useState();\n\n const { dialogTitle, message, cancelText } = useMemo(() => {\n return {\n dialogTitle:\n requestSetting?.refillRequestHeaderTextSanitized || t('patientProfile:refillModalTitle'),\n message: t('patientProfile:refillModalDescription', {\n quantity: prescription?.quantity,\n refill: prescription?.description,\n petName: prescription?.patientName\n }),\n cancelText: t('common:cancel')\n };\n }, [\n prescription?.description,\n prescription?.patientName,\n prescription?.quantity,\n requestSetting?.refillRequestHeaderTextSanitized,\n t\n ]);\n\n const { mutate: submitRequest } = useMutation(\n async (request: RefillRequest) => await postRequest(request),\n {\n onSuccess: () => {\n void queryClient.invalidateQueries([QueryKeys.REQUESTS]);\n confirmedModalRef.current?.alert();\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: t('refillError', { ns: 'prescriptions' }),\n text2: error.name\n });\n }\n }\n );\n\n const refillConfirmed = useCallback(() => {\n if (prescription) {\n submitRequest({\n sourceId: user.sourceId,\n clientId: user.clientId,\n patientId: prescription.patientId,\n type: RequestType.Refill,\n content: {\n petName: prescription.patientName,\n refill: prescription.description,\n quantity: prescription.quantity,\n origin: Platform.OS,\n comments\n }\n });\n }\n }, [comments, prescription, submitRequest, user.clientId, user.sourceId]);\n\n const onDismiss = useCallback(() => {\n setComments('');\n }, []);\n\n const request = useCallback(\n (prescription: Prescription) => {\n requestRefill(() => {\n setPrescription(prescription);\n });\n\n if (!requestSetting?.refillRequestOverride) confirmModalRef.current?.alert();\n },\n [requestRefill, requestSetting?.refillRequestOverride]\n );\n\n useImperativeHandle(\n ref,\n () => ({\n request: !requestSetting || requestSetting?.refillRequestsDisabled ? undefined : request\n }),\n [request, requestSetting]\n );\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: cancelText,\n type: 'neutral'\n },\n\n {\n action: refillConfirmed,\n label: t('patientProfile:sendRequest')\n }\n ],\n [cancelText, refillConfirmed, t]\n );\n\n const confirmedModalRef = useRef(null);\n const confirmedOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('common:OK'),\n type: 'destructive',\n action: onDismiss\n }\n ],\n [onDismiss, t]\n );\n\n return (\n <>\n \n <>\n \n \n {message}\n \n \n \n \n \n \n {requestSetting?.refillRequestConfirmationTextSanitized ??\n t('patientProfile:refillSent')}\n \n }\n />\n \n );\n }\n);\n\nexport default RefillModal;\n\nexport const AlertBodyContent = styled.View`\n margin: ${Margin.Medium}px;\n`;\n","import _ from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useInfiniteQuery, UseInfiniteQueryOptions } from 'react-query';\nimport { QueryKeys, getPaginatedPatients } from 'src/api';\nimport { PaginatedPatientsParams } from 'src/api/patient/getPaginatedPatients';\nimport { PAGE_LENGTH } from 'src/constants';\nimport { Patient } from 'src/interfaces';\nimport { getNextPageParam, PaginationRS, queryClient } from 'src/utils';\n\nconst usePaginatedPatients = ({\n search: userSearch,\n status,\n order = 'asc',\n orderBy = 'name',\n length = PAGE_LENGTH,\n ...options\n}: Omit & UseInfiniteQueryOptions>) => {\n const [search, setSearch] = useState();\n const setSearchTerm = useMemo(() => _.debounce(setSearch), [setSearch]);\n useEffect(() => {\n setSearchTerm(userSearch);\n }, [setSearchTerm, userSearch]);\n\n const { data: rawData, ...queryResult } = useInfiniteQuery({\n queryKey: [QueryKeys.PAGINATED_PATIENTS, search, status, order, orderBy, length],\n queryFn: async ({ pageParam = 0 }) =>\n getPaginatedPatients({ start: pageParam * length, length, search, status, order, orderBy }),\n getNextPageParam: (...options) => getNextPageParam(...options, length),\n onSuccess: (d) => {\n const lastPage = d.pages[d.pages.length - 1];\n lastPage.data.forEach((patient) => {\n queryClient.setQueryData([QueryKeys.PATIENT, patient.patientId], patient);\n });\n },\n ...options\n });\n\n const data = useMemo(\n () =>\n rawData?.pages?.reduce((prev, current) => [...prev, ...current.data], []) ?? [],\n [rawData]\n );\n return {\n data,\n ...queryResult\n };\n};\n\nexport default usePaginatedPatients;\n","import React, { Suspense, useEffect, useRef, useState } from 'react';\nimport { Patient, Prescription } from 'src/interfaces';\nimport { useBoolean, usePrescriptions, useRequestSetting } from 'src/hooks';\nimport moment from 'moment-timezone';\nimport ItemDetail from './ItemDetail';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { useTranslation } from 'react-i18next';\nimport { CallToAction, CaughtUpText, FullActivityIndicator, ListContainer } from './shared';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport RefillModal, { RefillModalHandle } from 'src/components/RefillModal';\nimport { HoverButton, HoverCard } from 'src/components';\nimport { isPatientActive, isPrescriptionValid, toLocalShortDate } from 'src/utils';\nimport { Prescriptions } from 'src/components/kit/ABIcons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport usePaginatedPatients from 'src/hooks/react-query/usePaginatedPatients';\n\nconst MAX_ITEMS = 3;\n\ninterface Props {\n patientId?: Patient['patientId'];\n maxItems?: number;\n}\nconst PrescriptionsCard: React.FC = ({ patientId, maxItems = MAX_ITEMS }) => {\n const { t } = useTranslation('home');\n const { colors } = useAppTheme();\n const { value: isOpen, toggle } = useBoolean(true);\n const { navigate } = useNavigation>();\n const [count, setCount] = useState(0);\n const [prescriptions, setPrescriptions] = useState();\n const { data, isLoading: prescriptionsLoading } = usePrescriptions({\n selectedPatientId: patientId,\n suspense: false\n });\n\n const { data: patients } = usePaginatedPatients({});\n\n const { data: requestSetting, isLoading: requestLoading } = useRequestSetting();\n\n const isLoading = prescriptionsLoading || requestLoading;\n\n useEffect(() => {\n const current = data.filter(\n (v) =>\n isPrescriptionValid(v) &&\n (!patientId || patientId === v.patientId) &&\n patients.some((p) => p.patientId === v.patientId && isPatientActive(p))\n );\n setCount(current.length);\n setPrescriptions([...current.slice(0, maxItems)]);\n }, [data, patientId, maxItems, patients]);\n\n const refillModalRef = useRef(null);\n\n return (\n <>\n \n }\n label={t('prescriptions')}\n toggle={() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n count={count}\n />\n {isOpen && !isLoading && (\n }>\n \n {prescriptions?.map((prescriptions) => (\n \n {!requestSetting?.refillRequestsDisabled && (\n refillModalRef.current?.request?.(prescriptions)}\n >\n {t('refill')}\n \n )}\n \n }\n actionCondition={isPatientActive}\n />\n ))}\n \n \n )}\n {isOpen && !isLoading && !prescriptions?.length && (\n \n {t('noItems', { itemType: t('prescriptions').toLowerCase() })}\n \n )}\n {isOpen && isLoading && }\n {isOpen && (\n navigate(Screens.PRESCRIPTIONS, { id: patientId })}>\n {t('viewAll')}\n \n )}\n \n \n \n );\n};\n\nexport default PrescriptionsCard;\n","import { t } from 'i18next';\nimport moment from 'moment-timezone';\nimport React from 'react';\nimport { ActivityIndicator, Checkbox } from 'react-native-paper';\nimport { Todo } from 'src/interfaces';\nimport { toLocalDateTime } from 'src/utils';\nimport ItemDetail from './ItemDetail';\nimport { useBoolean } from 'src/hooks';\nimport styled from 'styled-components/native';\nimport { Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ReasonMap } from 'src/scenes/ToDos/ToDoList/components/model';\n\ninterface Props {\n todo: Todo;\n navToEditToDo: () => void;\n onComplete: () => void;\n}\nconst TodoCardItem: React.FC = ({ todo, navToEditToDo, onComplete }) => {\n const { colors } = useAppTheme();\n const { value: willComplete, toTrue: complete } = useBoolean(todo.isComplete);\n\n if (todo.isComplete) return null;\n return (\n \n ) : (\n {\n complete();\n onComplete();\n }}\n />\n )\n }\n />\n );\n};\n\nexport default TodoCardItem;\n\nconst OffsetActivityIndicator = styled(ActivityIndicator).attrs({ size: 'small' })`\n margin-right: ${Margin.Small};\n`;\n","import React, { Suspense, useEffect, useMemo, useState } from 'react';\nimport { Patient, Todo } from 'src/interfaces';\nimport { useBoolean, useMutateTodos, useTodos } from 'src/hooks';\nimport moment from 'moment-timezone';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { useTranslation } from 'react-i18next';\nimport { CallToAction, CaughtUpText, FullActivityIndicator, ListContainer } from './shared';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport { Divider } from 'react-native-paper';\nimport _ from 'lodash';\nimport { HoverCard, Subheading } from 'src/components';\nimport styled from 'styled-components/native';\nimport { Margin } from 'src/constants';\nimport BottomTabParamsList from 'src/routes/stacks/BottomTabNavigator/ParamsList';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport TodoCardItem from './TodoCardItem';\nimport { AlarmClock } from 'src/components/kit/ABIcons';\n\nconst MAX_ITEMS = 3;\n\ninterface Props {\n patientId?: Patient['patientId'];\n maxItems?: number;\n}\nconst ToDosCard: React.FC = ({ patientId, maxItems = MAX_ITEMS }) => {\n const { t } = useTranslation('home');\n const { value: isOpen, toggle } = useBoolean(true);\n const { navigate } = useNavigation>();\n const [count, setCount] = useState(0);\n const [today, setToday] = useState();\n const [scheduled, setScheduled] = useState();\n const { todos, isLoading } = useTodos({\n isComplete: false,\n patientId,\n queryOptions: {\n suspense: false\n }\n });\n\n useEffect(() => {\n const d = (todos ?? [])\n .filter((todo) => !todo.isComplete && (!patientId || todo.patientId === patientId))\n .slice(0, maxItems);\n setCount(d.length);\n setToday(d.filter((v) => !v.dueDate || moment(v.dueDate).isSameOrBefore(moment(), 'day')));\n setScheduled(d.filter((v) => moment(v.dueDate).isAfter(moment(), 'day')));\n }, [todos, maxItems, patientId]);\n\n const { toggleCompleteTodo } = useMutateTodos();\n\n const debouncedToggle = useMemo(() => _.debounce(toggleCompleteTodo), [toggleCompleteTodo]);\n const hasTodos = !!today?.length || !!scheduled?.length;\n\n const navToEditToDo = (id: Todo['id']) =>\n navigate(Navigators.TODO_STACK, {\n screen: Screens.ADD_TO_DO,\n params: { todoId: id },\n initial: false\n });\n\n return (\n <>\n \n }\n label={t('toDos')}\n toggle={() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n count={count}\n />\n {isOpen && !isLoading && (\n }>\n \n {!!today?.length && (\n <>\n Today\n \n {today.map((todo) => (\n navToEditToDo(todo.id)}\n onComplete={async () => debouncedToggle(todo)}\n />\n ))}\n \n )}\n {!!scheduled?.length && (\n <>\n Scheduled\n \n {scheduled.map((todo) => (\n navToEditToDo(todo.id)}\n onComplete={async () => toggleCompleteTodo(todo)}\n />\n ))}\n \n )}\n \n \n )}\n {isOpen && !isLoading && !hasTodos && (\n {t('noItems', { itemType: t('toDos').toLowerCase() })}\n )}\n {isOpen && isLoading && }\n {isOpen && (\n navigate(Navigators.TODO_STACK, { screen: Screens.TO_DOS })}>\n {t('viewAll')}\n \n )}\n \n \n );\n};\n\nexport default ToDosCard;\n\nconst SpacedDivider = styled(Divider)`\n margin-bottom: ${Margin.Large}px;\n`;\n\nconst StyledSubheading = styled(Subheading)<{ topSpacer?: boolean }>`\n margin-top: ${({ topSpacer }) => (topSpacer ? Margin.ExtraLarge : 0)}px;\n margin-bottom: ${Margin.Small}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Body, HoverButton, Title } from 'src/components';\nimport { IconSize, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { colorShade, transparent } from 'src/utils';\nimport { Patient } from 'src/interfaces';\nimport { Calendar } from 'src/components/kit/ABIcons';\nimport { useRequestSetting } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n patientId?: Patient['patientId'];\n}\nconst AppointmentCardNone: React.FC = ({ patientId }) => {\n const { t } = useTranslation('appointments');\n const { colors, dark } = useAppTheme();\n const {\n data: requestSettings,\n isFetching,\n requestAppointment,\n onlineBookingEnabled\n } = useRequestSetting();\n\n return (\n \n \n \n \n {t('noAppointments')}\n \n {requestSettings?.appointmentRequestsDisabled ? t('allCaughtUp') : t('scheduleYourNext')}\n \n {!requestSettings?.appointmentRequestsDisabled && (\n requestAppointment(patientId)}>\n {isFetching ? (\n \n ) : (\n t(onlineBookingEnabled ? 'scheduleAnAppointment' : 'requestAnAppointment')\n )}\n \n )}\n \n );\n};\n\nexport default AppointmentCardNone;\n\nconst FilledIconContainer = styled.View`\n aspect-ratio: 1;\n border-radius: 100px;\n justify-content: center;\n align-items: center;\n align-self: center;\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.15)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.XS}px;\n`;\n\nconst StyledBody = styled(Body).attrs({ numberOfLines: 2 })`\n text-align: center;\n margin-top: ${Size.XS}px;\n`;\n\nconst StyledTitle = styled(Title)`\n text-align: center;\n margin-top: ${Size.XS}px;\n`;\n\nconst ContentContainer = styled.View`\n aling-items: center;\n margin-vertical: ${Size.S}px;\n margin-horizontal: ${Size.S}px;\n`;\n\nconst StyledCta = styled(HoverButton).attrs({ mode: 'contained', uppercase: false })`\n margin-top: ${Size.M}px;\n`;\n","import React, { Suspense, useEffect, useState } from 'react';\nimport { Appointment, Patient } from 'src/interfaces';\nimport { useBoolean, usePractice, useRequestSetting } from 'src/hooks';\nimport moment from 'moment-timezone';\nimport ItemDetail from './ItemDetail';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { CallToAction, FullActivityIndicator, ListContainer } from './shared';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport useAppointments from 'src/scenes/Appointments/AppointmentsRoot/hooks/useAppointments';\nimport { toLocalDateTime } from 'src/utils';\nimport AppointmentCardNone from 'src/scenes/Appointments/AppointmentsRoot/components/NextAppointmentCard/AppointmentCardNone';\nimport BottomTabParamsList from 'src/routes/stacks/BottomTabNavigator/ParamsList';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { useTranslation } from 'react-i18next';\nimport { Calendar } from 'src/components/kit/ABIcons';\nimport { HoverCard } from 'src/components';\n\nconst MAX_ITEMS = 3;\n\ninterface Props {\n patientId?: Patient['patientId'];\n maxItems?: number;\n}\nconst AppointmentsCard: React.FC = ({ patientId, maxItems = MAX_ITEMS }) => {\n const { t } = useTranslation('home');\n const { value: isOpen, toggle } = useBoolean(true);\n const { navigate } = useNavigation>();\n const [count, setCount] = useState(0);\n const [appointments, setAppointments] = useState();\n const { data: requestSettings, isLoading: requestLoading } = useRequestSetting();\n const { data, isLoading: appointmentsLoading } = useAppointments({\n selectedPatient: patientId,\n suspense: false\n });\n const { data: practice } = usePractice();\n\n const isLoading = appointmentsLoading || requestLoading;\n\n useEffect(() => {\n const upcoming = data.future.filter((v) => !patientId || patientId === v.patientId);\n setCount(upcoming.length);\n setAppointments([...upcoming.slice(0, maxItems)]);\n }, [data, maxItems, patientId]);\n\n const navToAppointmentDetail = (id: Appointment['appointmentId']) =>\n navigate(Navigators.APPOINTMENTS_STACK, {\n screen: Screens.APPOINTMENT_DETAILS,\n params: { id },\n initial: false\n });\n\n return (\n \n }\n label={t('appointments')}\n toggle={() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n count={count}\n />\n {isOpen && !isLoading && (\n }>\n \n {appointments?.map((appointment) => (\n navToAppointmentDetail(appointment.appointmentId)}\n patientId={appointment.patientId}\n date={toLocalDateTime(moment.utc(appointment.startsAt), practice?.timeZone)}\n key={appointment.appointmentId}\n />\n ))}\n \n \n )}\n {isOpen && !isLoading && !appointments?.length && (\n \n )}\n {isOpen && isLoading && }\n {isOpen &&\n (isLoading || !!appointments?.length || requestSettings?.appointmentRequestsDisabled) && (\n \n navigate(Navigators.APPOINTMENTS_STACK, {\n screen: Screens.APPOINTMENTS,\n params: { id: patientId }\n })\n }\n >\n {t('viewAll')}\n \n )}\n \n );\n};\n\nexport default AppointmentsCard;\n","import React from 'react';\nimport { Patient } from 'src/interfaces';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { CallToAction, CardContent, FilledIconContainer } from './shared';\nimport BottomTabParamsList from 'src/routes/stacks/BottomTabNavigator/ParamsList';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Body, HoverCard } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport Icon from 'react-native-vector-icons/FontAwesome';\nimport { IconSize } from 'src/constants';\n\ninterface Props {\n patientId?: Patient['patientId'];\n maxItems?: number;\n}\nconst HelpCenterCard: React.FC = () => {\n const { t } = useTranslation('helpCenter');\n const { colors } = useAppTheme();\n const { navigate } = useNavigation>();\n\n return (\n <>\n \n \n \n \n \n \n \n }}\n />\n \n \n \n navigate(Navigators.HOME_STACK, {\n screen: Screens.HELP_CENTER\n })\n }\n >\n {t('viewHelpCenter')}\n \n \n \n );\n};\n\nexport default HelpCenterCard;\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Paw } from 'src/components/kit/ABIcons';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst PawHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default PawHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import { useNavigation } from '@react-navigation/native';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Animated, InteractionManager } from 'react-native';\nimport { AsyncStorageKeys } from 'src/api';\nimport { Body, HoverButton, ModalDrawer, Title } from 'src/components';\nimport { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport { Margin, Size } from 'src/constants';\nimport { useInteractionFocusEffect, usePractice, useStorage } from 'src/hooks';\nimport { useTourGuideMaster } from 'src/module/TourGuide/TourGuideMaster';\nimport { TOUR } from 'src/module/TourGuide/model';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\nimport PawHero from 'src/scenes/PatientList/PawHero';\nimport styled from 'styled-components/native';\n\nconst WHATS_NEW_SLIDE = {\n title: 'home:whatsNew.title',\n body: 'home:whatsNew.body',\n image: ,\n navigator: Navigators.PET_STACK,\n screen: Screens.PATIENT_LIST,\n screenName: 'petList:title',\n feature: undefined,\n targetTours: [TOUR.PETS]\n};\n\nconst CURRENT_WHATS_NEW_VERSION = 2;\n\nconst WhatsNew: React.FC = () => {\n const { title, body, navigator, screen, screenName, image, feature, targetTours } =\n WHATS_NEW_SLIDE;\n const { viewMode, colors } = useAppTheme();\n const { t } = useTranslation('home');\n const { isActivelyTouring, resetTour } = useTourGuideMaster();\n const navigation = useNavigation();\n const { data: practice } = usePractice();\n\n const modalRef = useRef(null);\n const exit = useRef(() => {\n modalRef.current?.dismiss();\n }).current;\n\n const [hasSeen, setWhatsNewViewed, isFetched] = useStorage(\n AsyncStorageKeys.WHATS_NEW_VIEWED\n );\n\n const navigateToNewTourScreen = useCallback(async () => {\n await modalRef.current?.dismiss();\n await Promise.all(targetTours.map((tour) => resetTour(tour)));\n void InteractionManager.runAfterInteractions(() => {\n navigation.getParent()?.navigate(navigator, { screen });\n });\n }, [navigation, navigator, resetTour, screen, targetTours]);\n\n const notReady = isActivelyTouring || !isFetched;\n const canShow = useMemo(() => {\n if (notReady) return false;\n if (hasSeen === undefined || typeof hasSeen !== 'number') {\n setWhatsNewViewed(CURRENT_WHATS_NEW_VERSION);\n return false;\n }\n if (hasSeen < CURRENT_WHATS_NEW_VERSION)\n return !feature || !!practice?.selectedFeatures?.some((f) => f === feature);\n return false;\n }, [hasSeen, notReady, feature, practice?.selectedFeatures, setWhatsNewViewed]);\n\n useInteractionFocusEffect(() => {\n if (canShow) {\n modalRef.current?.show();\n }\n }, [isActivelyTouring, canShow, modalRef]);\n\n return (\n setWhatsNewViewed(CURRENT_WHATS_NEW_VERSION)}\n >\n \n \n {image}\n \n {t(title)}\n {t(body)}\n \n \n \n \n {t('skip')}\n \n \n );\n};\n\nexport default WhatsNew;\n\nconst Container = styled.View`\n gap: ${Margin.ExtraLarge}px;\n margin-bottom: ${Margin.Large}px;\n`;\n\nconst StyledImageContainer = styled(Animated.View)`\n flex-basis: ${({ theme }) => theme.viewMode.narrowMaxContentWidth}px;\n justify-content: center;\n align-content: center;\n`;\n\nconst StyledText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst TextContainer = styled.View<{ hasImage: boolean }>`\n margin-top: ${({ hasImage }) => (hasImage ? 0 : Size.X3_L)}px;\n position: ${({ hasImage }) => (hasImage ? 'absolute' : 'relative')};\n padding-horizontal: ${Margin.Large}px;\n justify-content: flex-end;\n gap: ${Margin.Large}px;\n bottom: 0;\n width: 100%;\n`;\n\nconst StyledSkipButton = styled(HoverButton)`\n position: absolute;\n top: ${Margin.ExtraLarge}px;\n left: ${Margin.ExtraLarge}px;\n`;\n","import { useMemo } from 'react';\nimport { UseQueryOptions, useQuery } from 'react-query';\nimport { QueryKeys, getLifelearnArticles } from 'src/api';\nimport { LifelearnArticle, LifelearnArticlesResponse } from 'src/interfaces';\n\nconst PLACEHOLDER: LifelearnArticlesResponse = {\n articles: []\n};\n\ninterface Options\n extends UseQueryOptions<\n LifelearnArticlesResponse,\n unknown,\n LifelearnArticlesResponse,\n QueryKeys[]\n > {\n articleId?: LifelearnArticle['id'];\n}\n\nexport const lifelearnOptions: UseQueryOptions<\n LifelearnArticlesResponse,\n unknown,\n LifelearnArticlesResponse,\n QueryKeys[]\n> = {\n queryKey: [QueryKeys.LIFELEARN_ARTICLES],\n queryFn: getLifelearnArticles\n};\n\nconst useLifelearnArticles = ({ articleId, ...options }: Options) => {\n const { data = PLACEHOLDER, ...rest } = useQuery({\n ...lifelearnOptions,\n ...options\n });\n\n const article = useMemo(() => {\n return articleId ? data?.articles?.find((a) => a.id === articleId) : undefined;\n }, [articleId, data?.articles]);\n\n return { articles: data?.articles, article, ...rest };\n};\n\nexport default useLifelearnArticles;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport React, { useState } from 'react';\nimport { Image } from 'react-native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport styled from 'styled-components/native';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { IconSize, IMG_ASPECT_RATIO_MOBILE, IMG_ASPECT_RATIO_STANDARD, Size } from 'src/constants';\nimport { cleanUrl } from 'src/utils';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport { Body, Subheading } from 'src/components/Text';\nimport { Weight } from 'src/theme';\nimport { SlideItem, SlideProps } from 'src/components/kit/Slider/Slide';\n\nexport interface LifelearnSlideItem extends SlideItem {\n id: number;\n imageUri: string;\n}\n\nconst LifelearnSlide: React.FC> = ({ item, width }) => {\n const { t } = useTranslation('home');\n const { navigate } = useNavigation>();\n const { colors, viewMode } = useAppTheme();\n\n const [imageError, setImageError] = useState(false);\n\n const openArticle = () => {\n if (item.id) {\n navigate(Screens.ARTICLE, { id: item.id });\n }\n };\n\n const aspectRatio = viewMode.isMobile ? IMG_ASPECT_RATIO_MOBILE : IMG_ASPECT_RATIO_STANDARD;\n\n return (\n \n {!imageError && (\n setImageError(true)}\n />\n )}\n {imageError && (\n \n \n \n )}\n \n {item.title}\n \n \n )\n }}\n />\n \n \n \n );\n};\n\nexport default LifelearnSlide;\n\nconst Container = styled.View<{ width?: number }>`\n ${({ width }) => (width ? `width: ${width}px;` : '')}\n`;\n\nconst InnerContainer = styled.View`\n gap: ${Size.S}px;\n padding-top: ${Size.S}px;\n padding-horizontal: ${Size.S}px;\n`;\n\nconst AnimalIconContainer = styled.View<{ aspectRatio: number }>`\n aspect-ratio: ${({ aspectRatio }) => aspectRatio};\n align-items: center;\n justify-content: center;\n`;\n\nconst Text = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React, { useMemo, useRef } from 'react';\nimport { HoverButton, Slider } from 'src/components';\nimport { BookOpen } from 'react-native-feather';\nimport { FlatList, LayoutAnimation, View } from 'react-native';\nimport { useBoolean } from 'src/hooks';\nimport { useTranslation } from 'react-i18next';\nimport {\n CallToAction,\n HeadingIconContainer,\n StyledHeader,\n StyledHeading,\n StyledHoverView\n} from './shared';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport useLifelearnArticles from 'src/hooks/react-query/useLifelearnArticles';\nimport { containers } from 'src/theme/globalStyles';\nimport LifelearnSlide, { LifelearnSlideItem } from './LifelearnSlide';\nimport Icon from 'react-native-vector-icons/Fontisto';\nimport { GuideElement, STEPS } from '../tour';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst ARTICLE_MAX_COUNT = 5;\n\nconst LifelearnCard: React.FC = () => {\n const { t } = useTranslation('home');\n const { navigate } = useNavigation>();\n const { colors } = useAppTheme();\n\n const { value: isOpen, toggle } = useBoolean(true);\n\n const { articles, isLoading } = useLifelearnArticles({});\n\n const sliderRef = useRef>(null);\n\n const slideItems: LifelearnSlideItem[] = useMemo(() => {\n if (!articles) return [];\n return articles.slice(0, ARTICLE_MAX_COUNT).map((article) => ({\n id: article.id,\n imageUri: article.featured_image.image,\n title: article.title,\n body: article.summary,\n type: 'lifelearn'\n }));\n }, [articles]);\n\n const { value: isAutoPlay, toggle: toggleAuto } = useBoolean(true);\n\n if (isLoading || !articles?.length) return null;\n\n return (\n \n \n {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n >\n <>\n \n \n \n {t('careInsights')}\n \n \n \n \n \n {isOpen && (\n <>\n \n \n \n navigate(Screens.ARTICLES_HUB)}>\n {t('visitArticleHub')}\n \n \n )}\n \n \n );\n};\n\nexport default LifelearnCard;\n","import React, { useEffect, useRef } from 'react';\nimport Banner from './components/Banner';\nimport AnnouncementsCarousel from './components/AnnouncementsCarousel';\nimport { FocusAwareStatusBar, MasterView } from 'src/components';\nimport HomeHeader from './components/HomeHeader';\nimport QuickAccess from './components/QuickAccess';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { isDarkColor, isDefined, queryClient } from 'src/utils';\nimport RemindersCard from './components/RemindersCard';\nimport { IS_WEB, Margin } from 'src/constants';\nimport PrescriptionsCard from './components/PrescriptionsCard';\nimport ToDosCard from './components/ToDosCard';\nimport AppointmentsCard from './components/AppointmentsCard';\nimport { RefreshControl, ScrollView } from 'react-native';\nimport { QueryKey, useIsFetching, useQueries } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, SliderElement, SLIDES, STEPS, TourGuide } from './tour';\nimport { useTranslation } from 'react-i18next';\nimport { TourGuideHandle } from 'src/module/TourGuide/model';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport HelpCenterCard from './components/HelpCenterCard';\nimport WhatsNew from './components/WhatsNew';\nimport { useBiometricsPrompt } from 'src/providers/BiometricsPromptProvider';\nimport LifelearnCard from './components/LifelearnCard';\n\nconst queries: QueryKey[] = [\n QueryKeys.CHECK_EMAIL,\n QueryKeys.ANNOUNCEMENTS,\n QueryKeys.APPOINTMENTS,\n QueryKeys.PRESCRIPTIONS,\n QueryKeys.REMINDERS\n];\n\nconst refresh = () => {\n queries.forEach(async (query) => queryClient.refetchQueries([query]));\n};\n\nconst Home: React.FC> = () => {\n const { colors } = useAppTheme();\n\n const { t } = useTranslation('home');\n const results = useQueries(queries.map((key) => ({ queryKey: [key] })));\n const isFetched = results.every((query) => query.isFetched);\n const isRefreshing = results.some((query) => query.isRefetching && !query.isStale);\n const someQueryLoading = useIsFetching();\n const scrollRef = useRef(null);\n const guideRef = useRef(null);\n\n useEffect(() => {\n guideRef.current?.updateScrollPositions();\n }, [someQueryLoading]);\n\n const { needsPrompt } = useBiometricsPrompt();\n\n return (\n \n \n \n {({ exitTour, enabled }) => (\n <>\n \n \n }\n onMomentumScrollEnd={guideRef.current?.updateScrollPositions}\n scrollsToTop={!enabled}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default Home;\n","import { Body, Headline, HoverButton, HoverCard, TextInput } from 'src/components';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { transparent } from 'src/utils';\nimport styled from 'styled-components/native';\nimport { Weight } from 'src/theme';\nimport { fontStyles } from 'src/theme/globalStyles';\n\nexport const StyledScrollView = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n flexGrow: 1,\n marginHorizontal: theme.viewMode.horizontalInset,\n gap: Margin.Large,\n padding: Size.X2_S,\n paddingBottom: 50\n }\n}))``;\n\nexport const StyledHoverCard = styled(HoverCard)`\n padding-vertical: ${Margin.Large}px;\n gap: ${Margin.Large}px;\n width: 100%;\n`;\n\nexport const HelpCenterHoverCard = styled(HoverCard)`\n padding: ${Margin.ExtraLarge}px;\n gap: ${Margin.ExtraLarge}px;\n width: 100%;\n`;\n\nexport const StyledHoverCardRow = styled(HoverCard)`\n padding: ${Margin.Large}px;\n flex-direction: row;\n`;\n\nexport const StyledHeader = styled(HoverCard).attrs({ hideShadow: true })`\n padding-horizontal: ${Margin.Large}px;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const AnswerText = styled(Body)`\n padding-horizontal: ${Margin.Large}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nexport const SectionTitle = styled(Headline)`\n padding: ${Margin.Medium}px;\n`;\n\nexport const FilledIconContainer = styled.View`\n aspect-ratio: 1;\n justify-content: center;\n align-items: center;\n align-self: center;\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.15)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.X2_S}px;\n`;\n\nexport const NeedHelpText = styled(Body)`\n align-self: center;\n text-align: center;\n`;\n\nexport const StyledTitle = styled(Body)`\n align-self: center;\n text-align: center;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nexport const Link = styled(Body)`\n text-decoration: underline;\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n color: ${({ theme }) => theme.colors.primary};\n font-weight: ${Weight.MEDIUM};\n`;\n\nexport const SearchInput = styled(TextInput)`\n background-color: ${({ theme }) => theme.colors.surface};\n margin-bottom: ${Margin.Large}px;\n`;\n\nexport const ToggleIconContainer = styled.View`\n margin-left: ${Margin.Large}px;\n`;\n\nexport const StyledHoverButton = styled(HoverButton).attrs({\n mode: 'contained',\n numberOfLines: 2,\n labelStyle: {\n textAlign: 'center',\n ...fontStyles.body,\n fontWeight: Weight.MEDIUM\n }\n})`\n padding: ${Size.S}px;\n gap: ${Size.XS}px;\n`;\n","import React from 'react';\nimport { ChevronDown, ChevronUp } from 'react-native-feather';\nimport { Body } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { layout } from 'src/theme/globalStyles';\nimport { StyledHeader, ToggleIconContainer } from '../style';\n\ninterface Props {\n toggle?: () => void;\n isOpen: boolean;\n label: string | undefined;\n}\nconst HeaderToggle: React.FC = ({ toggle, isOpen, label }) => {\n const { colors } = useAppTheme();\n return (\n \n \n {label}\n \n \n {!isOpen && }\n {isOpen && }\n \n \n );\n};\n\nexport default HeaderToggle;\n","import React from 'react';\nimport { useBoolean } from 'src/hooks';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport { AnswerText, StyledHoverCard } from '../style';\nimport { Divider } from 'react-native-paper';\n\ninterface Props {\n question?: string;\n answer?: string;\n}\n\nconst FaqCard: React.FC = ({ question, answer }) => {\n const { value: isOpen, toggle } = useBoolean();\n\n if (!question || !answer) return null;\n return (\n \n {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n isOpen={isOpen}\n />\n {isOpen && }\n {isOpen && {answer}}\n \n );\n};\n\nexport default FaqCard;\n","import React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Body } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { StyledTitle, HelpCenterHoverCard, Link, StyledHoverButton } from '../style';\nimport { View } from 'react-native';\nimport { ALLY_SUPPORT_EMAIL, IconSize, Margin } from 'src/constants';\nimport ANT from 'react-native-vector-icons/AntDesign';\nimport FA5 from 'react-native-vector-icons/FontAwesome5';\nimport { useNavigation } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport { Weight } from 'src/theme';\ninterface Props {\n title?: string;\n body?: string;\n showButtons?: boolean;\n}\nconst HelpCenterCard: React.FC = ({ title, body, showButtons }) => {\n const { t } = useTranslation('helpCenter');\n const { colors } = useAppTheme();\n const { navigate } = useNavigation();\n\n return (\n <>\n \n {!!title && (\n \n \n }}\n />\n \n )}\n {!!body && (\n \n await openEmailToAlly()} />\n }}\n />\n \n )}\n {showButtons && (\n <>\n \n \n navigate(Navigators.MAIN_STACK, { screen: Screens.CONTACT_US })\n }\n icon={}\n >\n \n \n \n \n await openEmailToAlly()}\n icon={}\n >\n \n \n \n \n )}\n \n \n );\n};\n\nexport default HelpCenterCard;\n","import { DebouncedFunc } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SearchInput } from '../style';\nimport HelpCenterCard from './HelpCenterCard';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n tourGuideHasResults: boolean;\n faqHasResults: boolean;\n searchText: string | null;\n setSearchText: DebouncedFunc<(searchText: string) => void>;\n}\n\nconst Header: React.FC = ({\n tourGuideHasResults,\n faqHasResults,\n searchText,\n setSearchText\n}) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('helpCenter');\n return (\n <>\n setSearchText(text)}\n textColor={colors.onSurface}\n />\n {!searchText && }\n {!tourGuideHasResults && !faqHasResults && (\n \n )}\n \n );\n};\n\nexport default Header;\n","import { useNavigation } from '@react-navigation/native';\nimport React from 'react';\nimport { ChevronRight } from 'react-native-feather';\nimport { Body } from 'src/components';\nimport { IconSize } from 'src/constants';\nimport { TOUR } from 'src/module/TourGuide/model';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport { StyledHoverCardRow, ToggleIconContainer } from '../style';\nimport { useTourGuideMaster } from 'src/module/TourGuide/TourGuideMaster';\n\ninterface Props {\n label?: string;\n stack?: Navigators;\n screenName?: Screens;\n tours?: TOUR[];\n}\nconst TourGuideCard: React.FC = ({ label, stack, screenName, tours }) => {\n const navigation = useNavigation();\n const { colors } = useAppTheme();\n const { resetTour } = useTourGuideMaster();\n\n const onPress = async () => {\n if (stack && screenName) {\n await Promise.all(tours?.map((tour) => resetTour(tour)) ?? []);\n navigation.getParent()?.navigate(stack, { screen: screenName });\n }\n };\n\n if (!label || !stack || !screenName || !tours?.length) return null;\n return (\n \n \n {label}\n \n \n \n \n \n );\n};\n\nexport default TourGuideCard;\n","import { TOUR } from 'src/module/TourGuide/model';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\n\nexport const FAQS = [\n {\n question: 'faqQ1',\n answer: 'faqA1'\n },\n {\n question: 'faqQ2',\n answer: 'faqA2'\n },\n {\n question: 'faqQ3',\n answer: 'faqA3'\n },\n {\n question: 'faqQ4',\n answer: 'faqA4'\n },\n {\n question: 'faqQ5',\n answer: 'faqA5'\n },\n {\n question: 'faqQ6',\n answer: 'faqA6'\n }\n];\n\nexport const TOUR_GUIDES = [\n {\n label: 'home:title',\n stack: Navigators.HOME_STACK,\n screen: Screens.HOME,\n tours: [TOUR.HOME]\n },\n {\n label: 'home:profile',\n stack: Navigators.HOME_STACK,\n screen: Screens.PROFILE_ROOT,\n tours: [TOUR.PROFILE, TOUR.USER_INFO]\n },\n {\n label: 'petList:title',\n stack: Navigators.PET_STACK,\n screen: Screens.PATIENT_LIST,\n tours: [TOUR.PETS, TOUR.PATIENT_PROFILE]\n },\n {\n label: 'loyalty:rewardsScreenTitle',\n stack: Navigators.LOYALTY_STACK,\n screen: Screens.LOYALTY_ACTIVITY,\n tours: [TOUR.LOYALTY]\n },\n {\n label: 'home:appointments',\n stack: Navigators.APPOINTMENTS_STACK,\n screen: Screens.APPOINTMENTS,\n tours: [TOUR.APPOINTMENTS, TOUR.APPOINTMENT_DETAILS]\n },\n {\n label: 'home:toDos',\n stack: Navigators.TODO_STACK,\n screen: Screens.TO_DOS,\n tours: [TOUR.TO_DOS, TOUR.ADD_TO_DO]\n },\n {\n label: 'requests:requestsTitle',\n stack: Navigators.REQUEST_STACK,\n screen: Screens.REQUEST,\n tours: [TOUR.REQUESTS]\n }\n];\n","import { useMemo } from 'react';\nimport { FAQS, TOUR_GUIDES } from '../shared';\nimport { useTranslation } from 'react-i18next';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { TOUR } from 'src/module/TourGuide/model';\nimport { PRACTICE_FEATURES } from 'src/constants';\nimport { usePractice } from 'src/hooks';\n\ninterface SearchResult {\n type: 'faq' | 'tour';\n question: string | undefined;\n answer: string | undefined;\n label: string | undefined;\n stack: Navigators | undefined;\n screen: Screens | undefined;\n tours: TOUR[] | undefined;\n}\n\nconst useSearchResults = (searchText: string) => {\n const { t } = useTranslation('helpCenter');\n const { data: practice } = usePractice();\n\n const activeTourGuides = useMemo(() => {\n const hasLoyaltyProgram = !!practice?.selectedFeatures?.find(\n (feature) => feature === PRACTICE_FEATURES.LOYALTY_PROGRAM\n );\n return hasLoyaltyProgram\n ? TOUR_GUIDES\n : TOUR_GUIDES.filter((tourGuide) => tourGuide.stack !== Navigators.LOYALTY_STACK);\n }, [practice?.selectedFeatures]);\n\n return useMemo(() => {\n const tourGuideResults = activeTourGuides\n .filter(\n (tourGuide) =>\n !searchText || t(tourGuide.label).toLowerCase().includes(searchText.toLowerCase())\n )\n .map(\n (searchResult): SearchResult => ({\n type: 'tour',\n label: t(searchResult.label),\n stack: searchResult.stack,\n screen: searchResult.screen,\n tours: searchResult.tours,\n question: undefined,\n answer: undefined\n })\n );\n\n const faqResults = FAQS.filter(\n (faq) =>\n !searchText ||\n t(faq.question).toLowerCase().includes(searchText.toLowerCase()) ||\n t(faq.answer).toLowerCase().includes(searchText.toLowerCase())\n ).map(\n (searchResult): SearchResult => ({\n type: 'faq',\n question: t(searchResult.question),\n answer: t(searchResult.answer),\n label: undefined,\n stack: undefined,\n screen: undefined,\n tours: undefined\n })\n );\n\n return [\n {\n title: 'tourGuides',\n data: tourGuideResults\n },\n {\n title: 'faqTitle',\n data: faqResults\n }\n ];\n }, [activeTourGuides, searchText, t]);\n};\n\nexport default useSearchResults;\n","import _ from 'lodash';\nimport React, { useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutAnimation, SectionList } from 'react-native';\nimport { Margin } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport FaqCard from './components/FaqCard';\nimport Header from './components/Header';\nimport TourGuideCard from './components/TourGuideCard';\nimport useSearchResults from './components/useSearchResults';\nimport { SectionTitle } from './style';\n\nconst HelpCenter: React.FC = () => {\n const { horizontalInset } = useViewMode();\n const { t } = useTranslation('helpCenter');\n const [searchText, setSearchText] = useState('');\n const sections = useSearchResults(searchText);\n\n const setSearchValue = useMemo(\n () =>\n _.debounce((searchText: string) => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setSearchText(searchText);\n }),\n [setSearchText]\n );\n\n return (\n \n }\n sections={sections}\n renderSectionHeader={({ section }) =>\n section.data.length ? {t(section.title)} : <>\n }\n renderItem={({ item }) =>\n item.type === 'faq' ? (\n \n ) : (\n \n )\n }\n stickySectionHeadersEnabled={false}\n />\n );\n};\n\nexport default HelpCenter;\n","import React from 'react';\nimport { LifelearnArticle } from 'src/interfaces';\nimport styled from 'styled-components/native';\nimport {\n IMG_ASPECT_RATIO_MOBILE,\n IMG_ASPECT_RATIO_STANDARD,\n MOBILE_WIDTH_MAX,\n Size\n} from 'src/constants';\nimport { Body, HoverCard, Subheading } from 'src/components';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport { cleanUrl } from 'src/utils';\n\ninterface Props {\n article: LifelearnArticle;\n numCols: number;\n}\n\nconst TEXT_CONTAINER_HEIGHT = 164;\n\nconst ArticleCard: React.FC = ({ article, numCols }) => {\n const { navigate } = useNavigation>();\n\n return (\n \n navigate(Screens.ARTICLE, { id: article.id })}>\n \n \n {article.title}\n {article.summary}\n \n \n \n );\n};\n\nexport default ArticleCard;\n\nconst Holder = styled.View<{ numCols: number }>`\n width: ${({ numCols, theme }) =>\n numCols > 1 ? Math.floor((1 / numCols) * theme.viewMode.maxContentWidth) : MOBILE_WIDTH_MAX}px;\n max-width: 100%;\n`;\n\nconst Container = styled(HoverCard)`\n border-radius: ${({ theme }) => theme.roundness}px;\n align-items: center;\n margin: ${Size.X2_S}px;\n cursor: pointer;\n`;\n\nconst TextContainer = styled.View<{ numCols: number }>`\n height: ${TEXT_CONTAINER_HEIGHT}px;\n gap: ${Size.S}px;\n padding: ${Size.S}px;\n`;\n\nconst StyledImage = styled.Image.attrs({ resizeMode: 'cover' })`\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n width: 100%;\n aspect-ratio: ${({ theme }) =>\n theme.viewMode.isMobile ? IMG_ASPECT_RATIO_MOBILE : IMG_ASPECT_RATIO_STANDARD};\n`;\n","import { useMemo } from 'react';\nimport { LifelearnArticle } from 'src/interfaces';\n\nconst useSearchResults = (searchText: string, articles: LifelearnArticle[] | undefined) => {\n return useMemo(() => {\n if (!articles) return undefined;\n return articles.filter(\n (article) =>\n !searchText ||\n article.title.toLowerCase().includes(searchText.toLowerCase()) ||\n article.summary.toLowerCase().includes(searchText.toLowerCase()) ||\n article.content.toLowerCase().includes(searchText.toLowerCase())\n );\n }, [articles, searchText]);\n};\n\nexport default useSearchResults;\n","import React, { useMemo, useState } from 'react';\nimport { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getLifelearnArticles } from 'src/api/lifelearn';\nimport ArticleCard from './ArticleCard';\nimport styled from 'styled-components/native';\nimport { ActivityIndicator, TextInput } from 'react-native-paper';\nimport { Size } from 'src/constants';\nimport { useTranslation } from 'react-i18next';\nimport { layout } from 'src/theme/globalStyles';\nimport { FlatList, LayoutAnimation } from 'react-native';\nimport useSearchResults from './useSearchResults';\nimport _ from 'lodash';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useViewMode } from 'src/hooks';\n\nconst ArticleHub: React.FC = () => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('articleHub');\n const { isMobile } = useViewMode();\n const [searchText, setSearchText] = useState('');\n\n const setSearchValue = useMemo(\n () =>\n _.debounce((searchText: string) => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setSearchText(searchText);\n }),\n [setSearchText]\n );\n\n const { data, isFetching, isRefetching } = useQuery([QueryKeys.LIFELEARN_ARTICLES], {\n queryFn: getLifelearnArticles\n });\n\n const articles = useSearchResults(searchText, data?.articles);\n\n if (!articles) return null;\n\n const numCols = (articles?.length ?? 0) > 1 && !isMobile ? 2 : 1;\n if (isFetching) return ;\n\n return (\n \n setSearchValue(text)}\n textColor={colors.onSurface}\n />\n }\n />\n \n );\n};\n\nexport default ArticleHub;\n\nconst Container = styled.ScrollView.attrs(() => ({\n contentContainerStyle: { alignSelf: 'center' }\n}))`\n padding-vertical: ${Size.S}px;\n`;\n\nconst SearchInput = styled(TextInput)`\n background-color: ${({ theme }) => theme.colors.surface};\n margin-bottom: ${Size.S}px;\n margin-horizontal: ${Size.X2_S}px;\n`;\n","import { FAB } from 'react-native-paper';\nimport styled from 'styled-components/native';\n\nexport const StyledFAB = styled(FAB).attrs(({ theme }) => ({\n color: theme.colors.onPrimary,\n size: 'small'\n}))`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n","import React from 'react';\nimport { Row } from 'src/components';\nimport { Printer, ThumbsDown, ThumbsUp } from 'react-native-feather';\nimport { StyledFAB } from './shared';\nimport styled from 'styled-components/native';\nimport { Size } from 'src/constants';\nimport { StyleProp, ViewStyle } from 'react-native';\n\ninterface Props {\n print: () => void;\n rate: (isThumbsUp: boolean) => Promise;\n ratingButtonsDisabled: boolean;\n style?: StyleProp;\n}\n\nconst ActionButtons: React.FC = ({ print, rate, ratingButtonsDisabled, style }) => {\n return (\n \n }\n onPress={print}\n />\n }\n onPress={async () => rate(true)}\n disabled={ratingButtonsDisabled}\n />\n }\n onPress={async () => rate(false)}\n disabled={ratingButtonsDisabled}\n />\n \n );\n};\n\nexport default ActionButtons;\n\nconst StyledRow = styled(Row)`\n gap: ${Size.X2_S}px;\n justify-content: flex-end;\n`;\n","import { CommonActions, useNavigation } from '@react-navigation/native';\nimport { NavigationRoute } from '@sentry/react-native/dist/js/tracing/reactnavigation';\nimport { useCallback } from 'react';\nimport sentry from 'src/utils/sentry';\n\ninterface ExtendedNavigationRoute extends NavigationRoute {\n state?: Route;\n}\ntype Route =\n | Readonly<{\n key: string;\n index: number;\n routeNames: string[];\n history?: unknown[] | undefined;\n routes: ExtendedNavigationRoute[];\n type: string;\n stale: false;\n }>\n | undefined;\n\ninterface State {\n name: keyof ReactNavigation.RootParamList;\n params: ReactNavigation.RootParamList;\n}\n\ninterface AvailableBackRoutes {\n parent: State | undefined;\n back: State | undefined;\n focusedName: keyof ReactNavigation.RootParamList | undefined;\n fallback: State | undefined;\n}\n\nconst getAvailableRoutes = (s: T): AvailableBackRoutes => {\n let state: Route = s;\n let parent: State | undefined;\n let back: State | undefined;\n const fallback = {\n name: state?.routeNames[state.index],\n params: state?.routes[state.index].params as unknown as ReactNavigation.RootParamList\n };\n let focusedName: string | undefined;\n while (state) {\n const index = state.index ?? 0;\n if (state.routes[index].state) {\n parent = {\n name: state.routes[index]?.name as keyof ReactNavigation.RootParamList,\n params: state.routes[index]?.params as unknown as ReactNavigation.RootParamList\n };\n state = state.routes[index].state;\n } else {\n if (index > 0 && index < state.routes.length) {\n back = {\n name: state.routes[index - 1].name as keyof ReactNavigation.RootParamList,\n params: state.routes[index - 1].params as unknown as ReactNavigation.RootParamList\n };\n }\n focusedName = state.routes[index]?.name;\n break;\n }\n }\n return {\n parent,\n back,\n focusedName,\n fallback\n } as unknown as AvailableBackRoutes;\n};\n\ntype GoBackFn = () => void;\n/**\n * Attempts to go back to the previous screen, if there is no previous screen it will go to the parent screen, if there\n * is no parent screen it will go to the first route available in the top-level stack, if there is no route it will log\n * an error.\n *\n * This is needed because goBack does not always work as expected, especially when using modals.\n * @returns {GoBackFn} A function to go back to the previous screen, parent screen or fallback route.\n */\nconst useGoBack = (): GoBackFn => {\n const { navigate, getState, dispatch } = useNavigation();\n return useCallback(() => {\n const { parent, back, fallback } = getAvailableRoutes(getState() as Route);\n if (back) {\n // using any here because the navigation hierarchy affects the typing\n navigate(back.name as any, back.params);\n } else if (parent) {\n dispatch(\n CommonActions.reset({ index: 0, routes: [{ name: parent.name, params: parent.params }] })\n );\n } else if (fallback) {\n dispatch(\n CommonActions.reset({\n index: 0,\n routes: [{ name: fallback.name, params: fallback.params }]\n })\n );\n } else {\n sentry.captureMessage('No route to go back to');\n }\n }, [getState, navigate, dispatch]);\n};\n\nexport default useGoBack;\n","import { FAB } from 'react-native-paper';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const StyledFAB = styled(FAB).attrs(({ theme }) => ({\n color: theme.colors.onPrimary,\n size: 'small'\n}))`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const FormSection = styled.View`\n gap: ${Size.S}px;\n`;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Image, View } from 'react-native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport ActionButtons from './ActionButtons';\nimport styled from 'styled-components/native';\nimport {\n IMG_ASPECT_RATIO_MOBILE,\n IMG_ASPECT_RATIO_STANDARD,\n IS_ANDROID,\n IS_WEB,\n Margin,\n Size\n} from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport RenderHTML from 'react-native-render-html';\nimport HomeStackParamsList from 'src/routes/stacks/HomeStackNavigator/ParamsList';\nimport Toast from 'react-native-toast-message';\nimport { useViewMode } from 'src/hooks';\nimport { useTranslation } from 'react-i18next';\nimport moment, { Moment } from 'moment-timezone';\nimport { useMutation } from 'react-query';\nimport { postLifelearnFeedback } from 'src/api/lifelearn';\nimport { MutationKeys } from 'src/api';\nimport useLifelearnArticles from 'src/hooks/react-query/useLifelearnArticles';\nimport * as Print from 'expo-print';\nimport { AxiosError } from 'axios';\nimport { ChevronLeft } from 'react-native-feather';\nimport useGoBack from 'src/hooks/useGoBack';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { useReactToPrint } from 'react-to-print';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StyledFAB } from '../PatientProfile/style';\n\ntype Props = NativeStackScreenProps;\n\nconst Article: React.FC = ({ route }) => {\n const { t } = useTranslation('articleHub');\n const { isMobile } = useViewMode();\n const { colors } = useAppTheme();\n const goBack = useGoBack();\n\n const articleId =\n typeof route.params.id === 'string' ? parseInt(route.params.id) : route.params.id;\n const { article } = useLifelearnArticles({ articleId });\n\n const [ratingButtonsDisabled, setRatingButtonsDisabled] = useState(false);\n\n const [start, setStart] = useState(moment());\n\n useEffect(() => {\n setStart(moment());\n }, []);\n\n const { mutateAsync: rateArticle } = useMutation({\n mutationKey: [MutationKeys.EDITING_TODOS],\n mutationFn: postLifelearnFeedback,\n onSuccess: () => {\n setRatingButtonsDisabled(true);\n Toast.show({ text1: t('ratingPosted') });\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n throw error;\n }\n });\n\n const htmlRef = useRef(null);\n const handleWebPrint = useReactToPrint({\n content: () => htmlRef.current\n });\n const handleNativePrint = useCallback(async () => {\n if (article) {\n await Print.printAsync({ html: article.content });\n }\n }, [article]);\n\n const [isPrinting, setIsPrinting] = useState(false);\n\n const handlePrint = useCallback(async () => {\n if (IS_WEB) {\n setIsPrinting(true);\n setTimeout(() => {\n handleWebPrint();\n setIsPrinting(false);\n }, 0);\n } else {\n await handleNativePrint();\n }\n }, [handleNativePrint, handleWebPrint]);\n\n const onPressRate = useCallback(\n async (isThumbsUp: boolean) => {\n if (article) {\n const timeSpentInSec = Math.round(moment().diff(start) / 1000);\n try {\n await rateArticle({\n articleId: article.id,\n rating: +isThumbsUp,\n timeSpentInSec,\n feedback: ''\n });\n } catch (e) {\n throw e as AxiosError;\n }\n }\n },\n [article, start, rateArticle]\n );\n\n const { top } = useSafeAreaInsets();\n\n if (!article) return null;\n\n return (\n <>\n \n \n }\n onPress={() => goBack()}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Article;\n\nconst Container = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: { marginHorizontal: theme.viewMode.horizontalInset }\n}))``;\n\nconst LowerContainer = styled.View`\n gap: ${Size.S}px;\n`;\n\nconst ActionButtonsContainer = styled.View`\n position: absolute;\n top: ${Margin.Medium}px;\n right: ${Margin.Medium}px;\n`;\n\nconst BackFabContainer = styled.View<{ top: number }>`\n position: absolute;\n z-index: 1;\n left: ${({ theme }) => (theme.viewMode.isMobile ? Size.XS : Size.X2_S)}px;\n top: ${({ theme }) => (theme.viewMode.isMobile ? Size.XS : Size.L)}px;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n margin-top: ${({ top }) => (IS_ANDROID ? top : 0)}px;\n`;\n","import { useMemo } from 'react';\nimport { StackNavigationOptions, TransitionPresets } from '@react-navigation/stack';\nimport { Pressable } from 'react-native';\nimport { X } from 'react-native-feather';\nimport { Margin, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport useGoBack from 'src/hooks/useGoBack';\n\nconst useDefaultModalScreenOptions = (): StackNavigationOptions => {\n const { colors, viewMode } = useAppTheme();\n const goBack = useGoBack();\n return useMemo(\n () => ({\n headerShown: true,\n headerTitleAlign: 'center',\n headerTitleStyle: fontStyles.headline,\n headerTintColor: colors.onPrimary,\n headerStyle: { backgroundColor: colors.primary },\n headerShadowVisible: false,\n headerLeftContainerStyle: {\n paddingLeft: viewMode.horizontalInset\n },\n headerLeft: () => (\n goBack()} style={{ paddingLeft: Margin.Medium }}>\n \n \n ),\n headerRightContainerStyle: {\n paddingRight: viewMode.horizontalInset\n },\n cardStyle: {\n backgroundColor: colors.background\n },\n ...TransitionPresets.ModalTransition\n }),\n [colors, goBack, viewMode.horizontalInset]\n );\n};\n\nexport default useDefaultModalScreenOptions;\n","import React from 'react';\nimport { createStackNavigator, StackNavigationOptions } from '@react-navigation/stack';\nimport ProfileScreen from 'src/scenes/Profile';\nimport { Screens } from '../screens';\nimport ProfileClientPracticeConfiguration from 'src/scenes/ProfileClientPracticeConfiguration';\nimport ProfileUserInfo from 'src/scenes/ProfileUserInfo';\nimport ProfileAppSettings from 'src/scenes/ProfileAppSettings';\nimport Home from 'src/scenes/Home';\nimport { useTranslation } from 'react-i18next';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport HomeStackParamsList from './ParamsList';\nimport { FocusAwareStatusBar } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport HelpCenter from 'src/scenes/HelpCenter';\nimport ArticleHub from 'src/scenes/ArticleHub';\nimport Article from 'src/scenes/Article';\nimport useDefaultModalScreenOptions from '../useDefaultModalScreenOptions';\n\nconst HomeStack = createStackNavigator();\n\nexport const HomeStackNavigator: React.FC = () => {\n const {\n colors,\n viewMode: { horizontalInset }\n } = useAppTheme();\n const { t } = useTranslation();\n\n const mainThemedHeader: StackNavigationOptions = {\n headerShown: true,\n headerTitleAlign: 'center',\n headerTitleStyle: fontStyles.headline,\n headerTintColor: colors.onPrimary,\n headerBackTitleVisible: false,\n headerShadowVisible: false,\n headerStyle: { backgroundColor: colors.primary },\n cardStyle: { backgroundColor: colors.background },\n headerRightContainerStyle: {\n paddingRight: horizontalInset\n },\n headerLeftContainerStyle: {\n paddingLeft: horizontalInset\n }\n };\n\n const modalScreenOptions = useDefaultModalScreenOptions();\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import _ from 'lodash';\nimport { createContext, PropsWithChildren, useContext, useEffect, useState } from 'react';\nimport { useQuery } from 'react-query';\nimport { getPatients, QueryKeys } from 'src/api';\nimport { Patient } from 'src/interfaces';\nimport { isPatientActive } from 'src/utils';\n\ninterface Context {\n selectedPatient?: Patient;\n setSelectedPatient: React.Dispatch>;\n patients: Patient[];\n}\n\nconst defaultContext: Context = {\n selectedPatient: undefined,\n setSelectedPatient: _.noop,\n patients: []\n};\n\nconst SelectedPatientContext = createContext(defaultContext);\n\nexport const useSelectedPatient = (): Context => useContext(SelectedPatientContext);\n\ninterface Props extends PropsWithChildren {\n selectedPatientId?: Patient['patientId'];\n}\n\nexport const SelectedPatientProvider: React.FC = ({ selectedPatientId, children }) => {\n const [selectedPatient, setSelectedPatient] = useState();\n\n const { data: patients = [] } = useQuery({\n queryFn: getPatients,\n queryKey: [QueryKeys.PATIENTS],\n select: (ps) => ps.filter(isPatientActive)\n });\n\n useEffect(() => {\n setSelectedPatient(patients.find((p) => p.patientId === selectedPatientId));\n }, [selectedPatientId, patients]);\n\n return (\n \n {children}\n \n );\n};\n","import { Headline, HoverCard } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { Margin, Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const StyledCard = styled(HoverCard)`\n color: ${({ theme: { colors } }) => colors.onSurface}\n padding: ${Size.XS}px;\n justify-content: center;\n align-items: stretch;\n`;\n\nexport const StyledImage = styled.Image<{ size: Size }>`\n width: ${({ size }) => size}px;\n height: ${({ size }) => size}px;\n background-color: ${({ theme }) => theme.colors.disabled};\n margin-right: ${Margin.Medium}px;\n border-radius: ${Size.X2_L}px;\n`;\n\nexport const StyledHeadline = styled(Headline).attrs({\n shadow: true\n})<{ inset?: boolean }>`\n margin-top: ${Margin.Large}px;\n margin-bottom: ${Margin.Medium}px;\n`;\n\nexport const StyledSectionHeader = styled(Headline).attrs({\n shadow: false\n})`\n padding-top: ${Margin.Large}px;\n padding-bottom: ${Margin.Medium}px;\n padding-horizontal: ${({ theme }) => Size.X3_S + theme.viewMode.horizontalInset}px;\n`;\n\nexport const PaperCard = styled(HoverCard)`\n margin-bottom: ${Margin.Medium}px;\n color: ${({ theme: { colors } }) => colors.onSurface};\n margin-horizontal: ${({ theme }) => Size.X3_S + theme.viewMode.horizontalInset}px;\n`;\n\nexport const Container = styled.View`\n flex-direction: row;\n padding-vertical: ${Margin.Medium}px;\n padding-right: ${Margin.Small}px;\n`;\n\nexport const AvatarContainer = styled.View`\n margin-horizontal: ${Margin.Medium}px;\n justify-content: center;\n`;\n\nexport const Avatar = styled(PatientAvatar)`\n margin-horizontal: ${Margin.Medium}px;\n align-self: center;\n`;\n\nexport const DataContainer = styled.View`\n justify-content: center;\n margin-left: ${Margin.Small}px;\n flex: 1;\n`;\n\nexport const RightIconContainer = styled.View`\n padding-horizontal: ${Margin.Medium}px;\n justify-content: center;\n`;\n\nexport const CaptionContainer = styled.View`\n margin-vertical: ${Margin.ExtraSmall}px;\n`;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport moment from 'moment-timezone';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View } from 'react-native';\nimport { ChevronRight } from 'react-native-feather';\nimport { useIsMutating } from 'react-query';\nimport { MutationKeys } from 'src/api';\nimport { Caption, Row, Shimmer, Tooltip } from 'src/components';\nimport { CalendarConfirmed, CalendarPending } from 'src/components/Icons';\nimport { IconSize } from 'src/constants';\nimport { usePatient, usePractice } from 'src/hooks';\nimport { Appointment } from 'src/interfaces';\nimport AppointmentStackParamsList from 'src/routes/stacks/AppointmentStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport { toLocalDateTime } from 'src/utils';\nimport {\n Avatar,\n CaptionContainer,\n Container,\n DataContainer,\n PaperCard,\n RightIconContainer\n} from './shared';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n appointment: Appointment;\n}\nconst AppointmentListItem: React.FC = ({ appointment }) => {\n const { navigate } = useNavigation>();\n const { colors } = useAppTheme();\n const { t, i18n } = useTranslation('appointments');\n const { data: patient, isLoading } = usePatient(appointment.patientId);\n const { data: practice } = usePractice();\n\n const startTime = moment(appointment.startsAt).locale(i18n.language);\n const appointmentTimeNotPassed = !moment(appointment.startsAt).isBefore();\n const isConfirming = !!useIsMutating([\n MutationKeys.CONFIRMING_APPOINTMENT,\n appointment.appointmentId\n ]);\n const shouldDisable = isConfirming || isLoading;\n\n return (\n {\n navigate(Screens.APPOINTMENT_DETAILS, {\n id: appointment.appointmentId\n });\n }}\n >\n \n \n \n \n \n {appointment.patientDisplay}\n \n \n \n \n \n {toLocalDateTime(startTime, practice?.timeZone)}\n \n \n \n \n {appointmentTimeNotPassed ? (\n \n \n \n {appointment.confirmed ? (\n \n \n \n ) : (\n \n \n \n )}\n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default AppointmentListItem;\n","import React from 'react';\nimport { ChevronDown, Slash } from 'react-native-feather';\nimport { Menu } from 'react-native-paper';\nimport styled from 'styled-components/native';\nimport { Body, HoverCard } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { IconSize, Margin } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { palette, Weight } from 'src/theme';\nimport { useSelectedPatient } from '../providers/SelectedPatientProvider';\nimport { Patient } from 'src/interfaces';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n typeName: string;\n}\n\nconst PatientSelector: React.FC = ({ typeName }) => {\n const { selectedPatient, setSelectedPatient, patients } = useSelectedPatient();\n const { colors } = useAppTheme();\n const { toTrue: openMenu, toFalse: closeMenu, value: menuOpen } = useBoolean();\n const { t } = useTranslation();\n\n const selectAndClose = (p?: Patient) => {\n setSelectedPatient(p);\n closeMenu();\n };\n\n return (\n \n {t('viewingFor', { typeName })}\n \n {selectedPatient?.name ?? t('all')}\n \n }\n >\n {!!selectedPatient && (\n selectAndClose()}>\n \n {t('clearSelection')}\n \n )}\n {patients?.map((p) => (\n selectAndClose(p)}\n backgroundColor={\n p.patientId === selectedPatient?.patientId ? colors.primary : palette.TRANSPARENT\n }\n >\n \n \n {p.name ?? p.patientId}\n \n \n ))}\n \n \n \n );\n};\n\nexport default PatientSelector;\n\nconst SelectorCta = styled(HoverCard).attrs({\n hideShadow: true,\n hoverColor: palette.BLACK_OPACITY_20\n})`\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n align-self: center;\n background-color: ${palette.TRANSPARENT};\n padding-horizontal: ${Margin.Medium}px;\n`;\n\nconst StyledSlash = styled(Slash).attrs({\n width: IconSize.XS\n})`\n margin-right: ${Margin.Medium}px;\n`;\n\nconst StyledPatientAvatar = styled(PatientAvatar)`\n margin-right: ${Margin.Medium}px;\n`;\nconst PatientOption = styled.Pressable<{ backgroundColor?: string }>`\n ${({ backgroundColor }) =>\n `\n flex-direction: row;\n align-items: center;\n padding-vertical: ${Margin.Medium}px;\n padding-left: ${Margin.Large}px;\n padding-right: ${Margin.ExtraLarge}px;\n background-color: ${backgroundColor ?? palette.TRANSPARENT};\n `}\n`;\n","import moment from 'moment-timezone';\nimport React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutChangeEvent, StyleProp, ViewStyle } from 'react-native';\nimport { Map } from 'react-native-feather';\nimport { Alert, AlertHandle, Body, HoverButton } from 'src/components';\nimport { AlertOption } from 'src/components/Alert';\nimport { CalendarConfirmed, CalendarPending } from 'src/components/Icons';\nimport { IconSize, Margin } from 'src/constants';\nimport { useAppointmentConfirmation, usePractice } from 'src/hooks/react-query';\nimport { Appointment } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport { openMaps, simpleAddressFormatter } from 'src/utils';\nimport styled from 'styled-components/native';\n\ninterface Props {\n appointment?: Appointment;\n style?: StyleProp;\n isSoon: boolean;\n isExpired: boolean;\n canConfirm: boolean;\n onLayout?: (event: LayoutChangeEvent) => void;\n}\n\nconst AppointmentStatusCta: React.FC = ({\n appointment,\n style,\n isSoon,\n isExpired,\n canConfirm,\n onLayout\n}) => {\n const { colors } = useAppTheme();\n const { t, i18n } = useTranslation('appointments');\n const { data: practice } = usePractice();\n\n const { confirmAppointment, isConfirming } = useAppointmentConfirmation(\n appointment?.appointmentId\n );\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('cancel'),\n type: 'neutral'\n },\n\n {\n action: confirmAppointment,\n label: t('common:confirm')\n }\n ],\n [confirmAppointment, t]\n );\n\n if (!appointment || isExpired) return null;\n\n if (isSoon) {\n return (\n \n {\n void openMaps(simpleAddressFormatter(practice), practice?.name ?? '');\n }}\n buttonColor={colors.confirmation}\n icon={(props) => }\n style={style}\n >\n {t('getDirections')}\n \n \n );\n }\n\n const openModal = () => confirmModalRef.current?.alert();\n\n if (canConfirm) {\n return (\n \n }\n style={style}\n >\n {t('confirm')}\n \n \n \n );\n }\n\n if (appointment.confirmed) {\n return (\n \n {t('confirmed')}\n \n \n );\n }\n\n if (appointment.confirmedAt) {\n return (\n \n {t('confirming')}\n \n \n );\n }\n\n return (\n \n {t('scheduled')}\n \n \n );\n};\n\nexport default AppointmentStatusCta;\n\nconst StyledButton = styled(HoverButton).attrs({\n mode: 'contained',\n uppercase: false,\n numberOfLines: 1,\n compact: true\n})`\n flex-direction: row-reverse;\n padding: ${Margin.Medium}px ${Margin.Large}px;\n height: auto;\n flex-shrink: 1;\n`;\n\nconst StyledBody = styled(Body).attrs({ numberOfLines: 1 })`\n font-weight: ${Weight.MEDIUM};\n`;\n\nconst Row = styled.View`\n flex-direction: row;\n gap: ${Margin.Medium}px;\n`;\n","import { useFocusEffect } from '@react-navigation/native';\nimport moment from 'moment-timezone';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Calendar, Clock } from 'react-native-feather';\nimport { Row, FlexColumn, Caption } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport Shimmer from 'src/components/Shimmer';\nimport { Size, Margin, IconSize } from 'src/constants';\nimport { usePatient, usePractice } from 'src/hooks';\nimport { Appointment } from 'src/interfaces';\nimport { checkCanConfirm, checkIsExpired, checkIsSoon } from 'src/scenes/Appointments/helper';\nimport styled from 'styled-components/native';\nimport AppointmentStatusCta from '../AppointmentStatusCta';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport { toLocalDate, toLocalTime } from 'src/utils';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n appointment: Appointment;\n}\n\ninterface IconDescription {\n icon: React.ReactNode;\n description: string;\n}\n\nconst AppointmentCardNext: React.FC = ({ appointment }) => {\n const { colors } = useAppTheme();\n const { i18n } = useTranslation('appointments');\n\n const startTime = moment(appointment.startsAt).locale(i18n.language);\n const { data: patient, isLoading: patientIsLoading } = usePatient(appointment.patientId);\n const { data: practice } = usePractice();\n\n const data: Array = useMemo(\n () => [\n !!patient && {\n icon: ,\n description: appointment.patientDisplay\n },\n {\n icon: ,\n description: toLocalDate(startTime, practice?.timeZone)\n },\n {\n icon: ,\n description: toLocalTime(startTime, practice?.timeZone)\n }\n ],\n [patient, colors.onSurface, appointment.patientDisplay, startTime, practice?.timeZone]\n );\n\n const isLoading = patientIsLoading;\n\n const [isSoon, setIsSoon] = useState(false);\n const [isExpired, setIsExpired] = useState(false);\n const [canConfirm, setCanConfirm] = useState(false);\n\n useFocusEffect(\n useCallback(() => {\n setIsSoon(checkIsSoon(appointment));\n setIsExpired(checkIsExpired(appointment));\n setCanConfirm(checkCanConfirm(appointment));\n }, [appointment])\n );\n\n return (\n \n \n \n {data.map(\n (detail) =>\n detail && (\n \n \n \n {detail.icon}\n \n \n \n \n {detail.description}\n \n \n \n )\n )}\n \n \n \n \n \n \n \n );\n};\n\nexport default AppointmentCardNext;\n\nconst Container = styled.View`\n flex-direction: row;\n gap: ${Margin.Medium}px;\n`;\n\nconst Content = styled.View`\n flex: 1;\n gap: ${Margin.Medium}px;\n height: auto;\n`;\n\nconst StyledIcon = styled.View`\n width: ${Size.M}px;\n margin-right: ${Margin.Medium}px;\n align-content: center;\n align-items: center;\n`;\n\nconst StyledCtaContainer = styled.View`\n flex-direction: row;\n flex-grow: 1;\n justify-content: ${({ theme }) => (theme.viewMode.isMobile ? 'center' : 'flex-end')};\n align-items: flex-end;\n`;\n\nconst StyledAppointmentStatusCta = styled(AppointmentStatusCta)`\n margin-top: ${Margin.Medium}px;\n martin-bottom: ${Margin.Small}px;\n justify-content: center;\n width: ${({ theme }) => (theme.viewMode.isMobile ? '100%' : 'auto')};\n`;\n","import React from 'react';\nimport useAppointments from '../../hooks/useAppointments';\nimport AppointmentCardNext from './AppointmentCardNext';\nimport AppointmentCardNone from './AppointmentCardNone';\nimport { useNavigation, NavigationProp } from '@react-navigation/native';\nimport AppointmentStackParamsList from 'src/routes/stacks/AppointmentStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { StyledCard } from '../shared';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { View, ViewProps } from 'react-native';\n\ninterface Props extends ViewProps {\n viewRef?: React.RefObject;\n}\nconst NextAppointmentCard: React.FC = ({ viewRef, ...props }) => {\n const { selectedPatient } = useSelectedPatient();\n const { data: appointments } = useAppointments({\n selectedPatient: selectedPatient?.patientId\n });\n\n const { navigate } = useNavigation>();\n\n if (appointments?.next)\n return (\n \n navigate(Screens.APPOINTMENT_DETAILS, {\n id: appointments.next.appointmentId\n })\n }\n >\n \n \n );\n return (\n \n \n \n );\n};\n\nexport default NextAppointmentCard;\n","import React from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst AppointmentCardLoading: React.FC = () => {\n const { colors } = useAppTheme();\n return (\n \n \n \n );\n};\n\nexport default AppointmentCardLoading;\n\nconst StyledActivityIndicatorContainer = styled.View`\n width: ${Size.X2_L}px;\n height: ${Size.X2_L}px;\n border-radius: ${Size.X2_L}px;\n background-color: ${({ theme }) => theme.colors.primary};\n align-self: center;\n align-content: center;\n justify-content: center;\n margin: ${Size.X3_L}px;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Plus } from 'react-native-feather';\nimport { Body, Row } from 'src/components';\nimport { IconSize, Size } from 'src/constants';\nimport { Weight } from 'src/theme';\nimport styled from 'styled-components/native';\nimport { StyledCard } from './shared';\nimport { ActivityIndicator } from 'react-native-paper';\nimport useRequestSetting from 'src/hooks/react-query/useRequestSetting';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst RequestAppointmentCta: React.FC = () => {\n const { t } = useTranslation('appointments');\n const {\n data: requestSettings,\n requestAppointment,\n isFetching,\n onlineBookingEnabled\n } = useRequestSetting();\n const { selectedPatient } = useSelectedPatient();\n const { colors } = useAppTheme();\n\n if (requestSettings?.appointmentRequestsDisabled) {\n return null;\n }\n\n if (isFetching) {\n return (\n \n \n \n );\n }\n\n return (\n requestAppointment(selectedPatient?.patientId)}>\n \n \n \n \n \n {t(onlineBookingEnabled ? 'scheduleAnAppointment' : 'requestAnAppointment')}\n \n \n \n );\n};\n\nexport default RequestAppointmentCta;\n\nconst FilledIconContainer = styled.View`\n width: ${Size.M}px;\n height: ${Size.M}px;\n background-color: ${({ theme }) => theme.colors.primary};\n border-radius: 100px;\n justify-content: center;\n align-items: center;\n margin-right: ${Size.XS}px;\n`;\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Calendar } from 'react-native-feather';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst CalendarHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default CalendarHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport CalendarHero from './AppointmentsRoot/components/CalendarHero';\n\nexport enum STEPS {\n DRAWER,\n REQUEST,\n NEXT,\n UPCOMING,\n PAST\n}\n\nconst AppointmentsTourMap: TourMap = {\n [STEPS.DRAWER]: { id: STEPS.DRAWER, priority: 0 },\n [STEPS.REQUEST]: { id: STEPS.REQUEST, priority: 1 },\n [STEPS.NEXT]: { id: STEPS.NEXT, priority: 2 },\n [STEPS.UPCOMING]: { id: STEPS.UPCOMING, priority: 3 },\n [STEPS.PAST]: { id: STEPS.PAST, priority: 4 }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'appointments:list-tour.drawer.title',\n body: 'appointments:list-tour.drawer.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.APPOINTMENTS,\n AppointmentsTourMap\n);\n","import _ from 'lodash';\nimport React from 'react';\nimport { Shimmer } from 'src/components';\nimport { IconSize, Margin } from 'src/constants';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport { Container, AvatarContainer, RightIconContainer, PaperCard, DataContainer } from './shared';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n numRightIcons: number;\n}\nconst AppointmentListItemLoading: React.FC = ({ numRightIcons }) => {\n const { roundness } = useAppTheme();\n return (\n \n \n \n \n \n \n \n \n \n\n {_.times(numRightIcons, (i) => (\n \n \n \n ))}\n \n \n );\n};\n\nexport default AppointmentListItemLoading;\n\nconst StyledShimmer = styled(Shimmer)`\n margin: ${Margin.ExtraSmall}px;\n`;\n","import _ from 'lodash';\nimport React from 'react';\nimport AppointmentsListItemLoading from './AppointmentListItemLoading';\nimport styled from 'styled-components/native';\nimport { Size } from 'src/constants';\n\ninterface Props {\n numItems?: number;\n numRightIcons?: number;\n}\n\nconst PLACEHOLDER_NUM_ITEMS = 6;\nconst PLACEHOLDER_NUM_RIGHT_ICONS = 2;\n\nconst AllAppointmentsLoading: React.FC = ({\n numItems = PLACEHOLDER_NUM_ITEMS,\n numRightIcons = PLACEHOLDER_NUM_RIGHT_ICONS\n}) => (\n \n {_.times(numItems, (i) => (\n \n ))}\n \n);\n\nexport default AllAppointmentsLoading;\n\nconst Container = styled.View`\n margin-top: ${Size.M}px;\n`;\n","import React, { Suspense, useState } from 'react';\nimport { Shimmer, HeroBottom } from 'src/components';\nimport PatientSelector from 'src/components/PatientSelector';\nimport { Margin, Size } from 'src/constants';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport NextAppointmentCard from './NextAppointmentCard';\nimport AppointmentCardLoading from './NextAppointmentCard/AppointmentCardLoading';\nimport RequestAppointmentCta from './RequestAppointmentCta';\nimport { StyledHeadline, StyledCard } from './shared';\nimport styled from 'styled-components/native';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from '../../tour';\nimport AllAppointmentsLoading from './AllAppointmentsLoading';\nimport useAppointments from '../hooks/useAppointments';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { useTourGuideMaster } from 'src/module/TourGuide/TourGuideMaster';\nimport { LayoutRectangle, View } from 'react-native';\n\nconst HEADER_INDEX = 0;\n\nconst HeroSection: React.FC = () => {\n const { t } = useTranslation('appointments');\n const { isActivelyTouring } = useTourGuideMaster();\n const { colors } = useAppTheme();\n const { selectedPatient } = useSelectedPatient();\n const { isLoading } = useAppointments({\n selectedPatient: selectedPatient?.patientId,\n suspense: false,\n enabled: !isActivelyTouring\n });\n\n const [layout, setLayout] = useState(null);\n\n return (\n setLayout(e.nativeEvent.layout)}>\n \n \n \n \n \n {t('nextAppointment')}\n \n \n \n }\n >\n \n \n \n \n \n }>\n \n \n \n \n \n \n {isLoading && }\n \n );\n};\n\nexport default HeroSection;\n\nconst HeroContainer = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n padding-vertical: ${Margin.Small}px;\n border-radius: 0px;\n`;\n\nconst StyledView = styled.View`\n flex-grow: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n padding-vertical: ${Size.S}px;\n padding-horizontal: ${Size.X3_S}px;\n gap: ${Size.S}px;\n`;\n\nconst PetSelectSuspenseContainer = styled.View`\n margin-top: ${Margin.Medium}px;\n`;\n","import React, { Suspense, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useAppointments from '../hooks/useAppointments';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { RefreshControl, SectionList } from 'react-native';\nimport AppointmentListItem from './AppointmentListItem';\nimport { StyledSectionHeader } from './shared';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { QueryKeys } from 'src/api';\nimport { queryClient } from 'src/utils';\nimport HeroSection from './HeroSection';\nimport { Size } from 'src/constants';\nimport { Body, TwoColorView } from 'src/components';\nimport styled from 'styled-components/native';\nimport AppointmentListItemLoading from './AppointmentListItemLoading';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS, useTourGuide } from '../../tour';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport { Appointment } from 'src/interfaces';\nimport { times } from 'lodash';\n\nconst UPCOMING_RIGHT_ICONS = 2;\nconst PAST_RIGHT_ICONS = 1;\n\nconst refresh = () => {\n const clearQueries = [QueryKeys.APPOINTMENTS, QueryKeys.EMPLOYEES, QueryKeys.PATIENT];\n clearQueries.forEach((query) => {\n void queryClient.invalidateQueries({ queryKey: [query] });\n });\n};\n\ninterface Section {\n title: string;\n stepId: STEPS;\n data: Appointment[];\n index: number;\n}\n\nconst AppointmentsList: React.FC = () => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('appointments');\n const { exitTour, updateScrollPositions, enabled: touring } = useTourGuide();\n\n const { selectedPatient } = useSelectedPatient();\n const { data, fetchNextPage, isFetchingNextPage, isLoading, isRefetching, hasNextPage } =\n useAppointments({\n selectedPatient: selectedPatient?.patientId,\n suspense: false,\n enabled: !touring\n });\n\n const appointments: Section[] = useMemo(\n () => [\n {\n title: 'upcomingAppointments',\n stepId: STEPS.UPCOMING,\n data: data.future ?? [],\n index: 0\n },\n {\n title: 'pastAppointments',\n stepId: STEPS.PAST,\n data: data.past ?? [],\n index: 1\n }\n ],\n [data]\n );\n const ref = useRef>(null);\n\n return (\n \n \n {\n if (hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }}\n refreshing={isLoading && !touring}\n refreshControl={\n \n }\n renderSectionHeader={({ section }) =>\n section.data?.length || touring ? (\n \n {t(section.title)}\n {touring &&\n times(3, () => (\n \n ))}\n \n ) : null\n }\n renderItem={({ item, section }) => {\n if (touring) return null;\n return (\n \n }\n >\n \n \n );\n }}\n ListFooterComponent={\n <>\n {isFetchingNextPage && }\n {!hasNextPage && !isLoading && {t('common:noMore')}}\n \n }\n />\n \n \n );\n};\n\nexport default AppointmentsList;\n\nconst NoMoreText = styled(Body)`\n margin: ${Size.M}px;\n text-align: center;\n`;\n\nconst LoadingNextIndicator = styled(ActivityIndicator)`\n margin: ${Size.M}px;\n`;\n","import { useNavigation } from '@react-navigation/native';\nimport React, { useEffect } from 'react';\nimport { TABLET_WIDTH_PORTRAIT_MIN } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { useTranslation } from 'react-i18next';\nimport AppointmentsList from './components/AppointmentsList';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport AppointmentStackParamsList from 'src/routes/stacks/AppointmentStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { SelectedPatientProvider } from 'src/providers/SelectedPatientProvider';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { SliderElement, SLIDES, STEPS, TourGuide } from '../tour';\n\ntype Props = NativeStackScreenProps;\n\nconst AppointmentsRoot: React.FC = ({ route }) => {\n const { t } = useTranslation();\n\n const { setOptions } = useNavigation();\n const { colors } = useAppTheme();\n useEffect(() => {\n setOptions({\n headerShown: false,\n headerStyle: {\n backgroundColor: colors.primary\n }\n });\n }, [colors.primary, setOptions, t]);\n\n const { top } = useSafeAreaInsets();\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default AppointmentsRoot;\n\nconst StatusbarOffset = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const AppointmentsContainer = styled.View`\n flex-grow: 1;\n align-self: ${({ theme }) => (theme.viewMode.isWeb ? 'center' : 'stretch')};\n width: ${({ theme }) => (theme.viewMode.isWeb ? `${TABLET_WIDTH_PORTRAIT_MIN}px` : '100%')};\n`;\n","import { Row, Body, Shimmer, HoverCard } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { Size, IconSize, Margin } from 'src/constants';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\nexport const HeroContainer = styled.View`\n align-items: center;\n position: relative;\n`;\n\nexport const BackgroundStrip = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n position: absolute;\n height: ${IconSize.XL}px;\n width: 100%;\n`;\n\nexport const Content = styled.View`\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n padding-horizontal: ${Margin.Large}px;\n gap: ${Size.X2_S}px;\n`;\n\nexport const IconContainer = styled.View`\n width: ${IconSize.XS}px\n height: ${IconSize.XS}px\n align-items: center;\n justify-content: center;\n`;\n\nexport const StyledRow = styled(Row)`\n align-items: flex-start;\n align-self: flex-start;\n padding-vertical: ${Size.X2_S}px;\n margin-bottom: ${Size.X2_S}px;\n gap: ${Size.S}px;\n`;\n\nexport const StyledBody = styled(Body)`\n margin-top: ${Size.X3_S}px;\n`;\n\nexport const StyledShimmerBody = styled(Shimmer)`\n margin-top: ${Size.X3_S}px;\n height: ${fontStyles.body.lineHeight}px;\n width: 50%;\n`;\n\nexport const StyledShimmerHeading = styled(Shimmer)`\n height: ${fontStyles.subheading.lineHeight}px;\n width: 30%;\n`;\n\nexport const StyledPatientAvatar = styled(PatientAvatar)`\n margin-bottom: ${Size.S}px;\n`;\n\nexport const StyledConfirmationNote = styled(Row)`\n padding-top: ${Size.X2_S}px;\n padding-horizontal: ${Size.M}px;\n`;\n\nexport const StyledPressable = styled(HoverCard).attrs({ hideShadow: true })`\n padding: ${Margin.Small}px\n background-color: ${({ theme }) => theme.colors.background};\n cursor: ${({ onPress }) => (onPress ? 'pointer' : 'default')};\n`;\n","import _ from 'lodash';\nimport React from 'react';\nimport { Shimmer, Column } from 'src/components';\nimport { Size } from 'src/constants';\nimport { StyledRow, IconContainer, StyledShimmerHeading, StyledShimmerBody } from '../styled';\n\nconst NUM_DUMMY_FIELDS = 7;\n\nconst LoadingDetails: React.FC = () => (\n <>\n {_.times(NUM_DUMMY_FIELDS, (i) => (\n \n \n \n \n \n \n \n \n \n ))}\n \n);\n\nexport default LoadingDetails;\n","import { useQuery, UseQueryOptions } from 'react-query';\nimport { getAppointment, QueryKeys } from 'src/api';\nimport { Appointment } from 'src/interfaces';\nimport { useUser } from 'src/providers/ClientProvider';\n\nconst useAppointment = (\n appointmentId: Appointment['appointmentId'],\n options?: UseQueryOptions\n) => {\n const { user } = useUser();\n return useQuery({\n queryFn: async () => {\n if (appointmentId && user?.sourceId) {\n return await getAppointment(user.sourceId, appointmentId);\n }\n },\n queryKey: [QueryKeys.APPOINTMENT, appointmentId, user?.sourceId],\n enabled: !!(appointmentId && user?.sourceId),\n suspense: true,\n ...options\n });\n};\n\nexport default useAppointment;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\n\nexport enum STEPS {\n STATUS,\n CALENDAR,\n MAP,\n CALL\n}\n\nconst AppointmentDetailsTourMap: TourMap = {\n [STEPS.STATUS]: { id: STEPS.STATUS, priority: 0 },\n [STEPS.CALENDAR]: { id: STEPS.CALENDAR, priority: 1 },\n [STEPS.MAP]: { id: STEPS.MAP, priority: 2 },\n [STEPS.CALL]: { id: STEPS.CALL, priority: 3 }\n};\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.APPOINTMENT_DETAILS,\n AppointmentDetailsTourMap\n);\n","import { PropsWithChildren } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { GuideData } from '../model';\nimport { GuideElement, useTourGuide } from '../tour';\n\ninterface Props extends PropsWithChildren {\n guideData?: GuideData;\n}\n\nconst GuideElementWrapper: React.FC = ({ guideData: guide, children }) => {\n const { t } = useTranslation('appointments');\n const { pendingSteps, exitTour } = useTourGuide();\n if (!guide) return <>{children};\n return (\n {\n if (!pendingSteps) {\n exitTour();\n }\n }}\n >\n <>{children}\n \n );\n};\n\nexport default GuideElementWrapper;\n","import moment from 'moment-timezone';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MapPin, Phone } from 'react-native-feather';\nimport { mask } from 'react-native-mask-text';\nimport { Subheading } from 'react-native-paper';\nimport { Body } from 'src/components';\nimport { IconSize, PHONE_MASK, STROKE_WIDTH_DEFAULT } from 'src/constants';\nimport { Appointment } from 'src/interfaces';\nimport { makePhoneCall, openMaps, simpleAddressFormatter, toLocalDateTime } from 'src/utils';\nimport { IconContainer, StyledPressable, StyledRow } from '../styled';\nimport useAppointment from '../hooks/useAppointment';\nimport { usePractice } from 'src/hooks/react-query';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport { Calendar } from 'src/components/kit/ABIcons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport { DisplayData } from '../model';\nimport GuideElementWrapper from './GuideElementWrapper';\nimport { STEPS } from '../tour';\n\ninterface Props {\n appointmentId: Appointment['appointmentId'];\n species?: string;\n}\n\nconst isDisplayData = (data: DisplayData | boolean): data is DisplayData => !!data;\n\nconst Details: React.FC = ({ appointmentId, species }) => {\n const { t, i18n } = useTranslation('appointments');\n const { colors } = useAppTheme();\n const { data: practice } = usePractice({ suspense: true });\n const { data: appointment } = useAppointment(appointmentId, { suspense: true });\n const startTime = moment(appointment?.startsAt).locale(i18n.language);\n\n const displayData: DisplayData[] = useMemo(() => {\n const _displayData: Array = [\n !!appointment?.patientDisplay && {\n icon: ,\n value: appointment.patientDisplay,\n label: t('for')\n },\n {\n icon: ,\n value: toLocalDateTime(startTime, practice?.timeZone),\n label: t('when')\n },\n !!practice?.address && {\n icon: (\n \n ),\n value: `${practice.address}\\n${practice.city}, ${practice.state} ${practice.postalCode}`,\n label: t('address', { ns: 'common' }),\n onPress: async () => await openMaps(simpleAddressFormatter(practice), practice.name),\n guide: {\n id: STEPS.MAP,\n body: 'detail-tour.map'\n }\n },\n !!practice?.phoneNumber && {\n icon: (\n \n ),\n value: mask(practice?.phoneNumber, PHONE_MASK),\n label: t('phone', { ns: 'common' }),\n onPress: () => makePhoneCall(practice.phoneNumber),\n guide: {\n id: STEPS.CALL,\n body: 'detail-tour.call'\n }\n }\n ];\n return _displayData.filter(isDisplayData);\n }, [appointment, colors.text, colors.primary, species, t, startTime, practice]);\n\n return (\n <>\n {displayData.map(({ value, icon, label, onPress, guide }) => (\n \n \n {label}\n \n {icon}\n \n {value}\n \n \n \n \n ))}\n \n );\n};\n\nexport default Details;\n","import { Event, getEventAsync, useCalendarPermissions } from 'expo-calendar';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { AsyncStorageKeys } from 'src/api';\nimport { HoverButton, Row } from 'src/components';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useStorage } from 'src/hooks';\nimport { Appointment } from 'src/interfaces';\nimport styled from 'styled-components/native';\n\ninterface Props {\n appointment: Appointment;\n isPast: boolean;\n width: number;\n addToCalendarPressed: () => void;\n}\n\nconst AddToCalendar: React.FC = ({ appointment, isPast, width, addToCalendarPressed }) => {\n const { t } = useTranslation('addToCalendar');\n const [status] = useCalendarPermissions();\n\n const [calendarEventId, setCalendarEventId] = useStorage([\n AsyncStorageKeys.CALENDAR_APPOINTMENT,\n appointment.appointmentId\n ]);\n\n const [calendarEvent, setCalendarEvent] = useState();\n\n useEffect(() => {\n if (calendarEventId)\n void getEventAsync(calendarEventId)\n .then((event) => {\n if (event) setCalendarEvent(event);\n else {\n setCalendarEventId(undefined);\n }\n })\n .catch((err) => console.warn(err));\n }, [calendarEventId, setCalendarEventId]);\n\n if (!appointment || IS_WEB || isPast || status?.status === 'denied' || !width) return null;\n\n return (\n \n \n {calendarEvent ? t('addedToCalendar') : t('title')}\n \n \n );\n};\n\nexport default AddToCalendar;\n\nconst StyledButton = styled(HoverButton)<{ width: number }>`\n margin-top: ${Margin.Large}px;\n width: ${({ width }) => width}px;\n`;\n","import React, { Suspense, useCallback, useMemo, useRef, useState } from 'react';\nimport type { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport AppointmentStackParamsList from 'src/routes/stacks/AppointmentStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { AlertHandle, Caption, Row, Shimmer, TwoColorView } from 'src/components';\n\nimport { IconSize } from 'src/constants';\nimport {\n HeroContainer,\n BackgroundStrip,\n Content,\n StyledPatientAvatar,\n StyledConfirmationNote\n} from './styled';\nimport { containers } from 'src/theme/globalStyles';\nimport { LayoutChangeEvent, RefreshControl, ScrollView } from 'react-native';\nimport AppointmentStatusCta from '../AppointmentsRoot/components/AppointmentStatusCta';\nimport LoadingDetails from './components/LoadingDetails';\nimport useAppointment from './hooks/useAppointment';\nimport Details from './components/Details';\nimport { queryClient } from 'src/utils';\nimport { QueryKeys } from 'src/api';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport { checkIsSoon, checkIsExpired, checkCanConfirm, checkIsPast } from '../helper';\nimport { useTranslation } from 'react-i18next';\nimport { usePatient } from 'src/hooks/react-query';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { requestCalendarPermissionsAsync } from 'expo-calendar';\nimport Alert, { AlertOption } from 'src/components/Alert';\nimport AddToCalendar from './components/AddToCalendar';\nimport { GuideElement, STEPS, TourGuide } from './tour';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\n\ntype Props = NativeStackScreenProps;\n\nconst AppointmentDetails: React.FC = ({ route, navigation }) => {\n const { t } = useTranslation('appointments');\n const { id: appointmentId } = route.params;\n const { navigate } = useNavigation();\n\n const {\n data: appointment,\n isLoading,\n isRefetching\n } = useAppointment(appointmentId, { suspense: false });\n\n const { data: patient } = usePatient(appointment?.patientId, { suspense: false });\n\n const [{ isSoon, isExpired, canConfirm, isPast }, setState] = useState({\n isSoon: false,\n isExpired: false,\n canConfirm: false,\n isPast: false\n });\n\n useFocusEffect(\n useCallback(() => {\n setState({\n isSoon: checkIsSoon(appointment),\n isExpired: checkIsExpired(appointment),\n canConfirm: checkCanConfirm(appointment),\n isPast: checkIsPast(appointment)\n });\n }, [appointment])\n );\n\n const { colors } = useAppTheme();\n\n const refresh = () => {\n const queries = [\n [QueryKeys.APPOINTMENT, appointmentId],\n [QueryKeys.PATIENT],\n [QueryKeys.EMPLOYEES, appointment?.employeeId]\n ];\n queries.map(async (query) => await queryClient.invalidateQueries(query));\n };\n\n const [addToCalendarWidth, setAddToCalendarWidth] = useState(0);\n\n const onLayout = (event: LayoutChangeEvent) => {\n setAddToCalendarWidth(event.nativeEvent.layout.width);\n };\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('common:OK')\n }\n ],\n [t]\n );\n\n const goToAddToCalendar = async () => {\n const permissionStatus = await requestCalendarPermissionsAsync();\n\n if (permissionStatus?.granted) {\n navigate(Navigators.MAIN_STACK, {\n screen: Screens.ADD_TO_CALENDAR,\n params: { id: appointmentId, species: patient?.species }\n });\n } else {\n confirmModalRef.current?.alert();\n }\n };\n\n const scrollRef = useRef(null);\n\n if (!appointment) return null;\n return (\n \n \n \n \n \n }\n >\n \n \n \n \n \n \n <>\n {!isExpired &&\n !canConfirm &&\n !isPast &&\n !appointment?.confirmed &&\n !appointment?.confirmedAt && (\n \n {t('confirmIn3Days')}\n \n )}\n \n \n \n \n \n \n \n \n }>\n
\n \n \n \n \n \n \n );\n};\n\nexport default AppointmentDetails;\n","import { StackNavigationOptions } from '@react-navigation/stack';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { fontStyles } from 'src/theme/globalStyles';\n\nconst useDefaultStackOptions = (): StackNavigationOptions => {\n const { colors, viewMode } = useAppTheme();\n\n return {\n headerShown: true,\n headerTitleAlign: 'center',\n headerTitleStyle: fontStyles.headline,\n headerStyle: {\n backgroundColor: colors.primary\n },\n headerRightContainerStyle: {\n paddingRight: viewMode.horizontalInset\n },\n headerLeftContainerStyle: {\n paddingLeft: viewMode.horizontalInset\n },\n headerLeftLabelVisible: false,\n headerTintColor: colors.onPrimary,\n headerShadowVisible: false,\n cardStyle: {\n backgroundColor: colors.background\n }\n };\n};\n\nexport default useDefaultStackOptions;\n","import React from 'react';\nimport { createStackNavigator } from '@react-navigation/stack';\nimport { Screens } from '../screens';\nimport { FocusAwareStatusBar } from 'src/components';\nimport AppointmentsRoot from 'src/scenes/Appointments/AppointmentsRoot';\nimport AppointmentDetails from 'src/scenes/Appointments/AppointmentDetails';\nimport AppointmentStackParamsList from './ParamsList';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\n\nconst AppointmentsStack = createStackNavigator();\n\nexport const AppointmentsStackNavigator: React.FC = () => {\n const { colors } = useAppTheme();\n const { t } = useTranslation();\n\n const themedHeader = useDefaultStackOptions();\n\n return (\n <>\n \n \n \n \n \n \n \n \n );\n};\n","import * as React from 'react';\nimport { TextStyle } from 'react-native';\nimport useStateRef from 'react-usestateref';\nimport { Subheading } from '../Text';\n\nconst STEPS_DEFAULT = 17;\nconst TIME_DEFAULT = 19;\n\n/**\n * Animates a number object so that it visually changes to its new value\n * @param formatter function to format value\n * @param steps pace at which value will move\n * @param time milliseconds per step\n * @param value\n */\ninterface AnimatedNumberProps {\n formatter?: (value: number) => string;\n steps?: number;\n time?: number;\n value: number;\n style?: TextStyle;\n}\n\nconst formatFn = (value: number) => {\n return value.toString();\n};\n\nconst updateValueInSteps = (\n timerRef: React.MutableRefObject,\n setViewValue: React.Dispatch>,\n viewValueRef: { readonly current: number },\n valuePerStep: number,\n minimumStep: number,\n value: number,\n stopAnimation: () => void,\n time: number\n) => {\n // Clamping is required to correct for overstepping\n const clampValue =\n minimumStep === 1 ? Math.min.bind(undefined, value) : Math.max.bind(undefined, value);\n\n timerRef.current = setInterval(() => {\n setViewValue(Math.floor(clampValue(viewValueRef.current + valuePerStep)));\n\n if (\n (minimumStep === 1 && viewValueRef.current >= value) ||\n (minimumStep === -1 && viewValueRef.current <= value)\n ) {\n stopAnimation();\n }\n }, time);\n};\n\nconst AnimatedNumber = ({\n formatter = formatFn,\n steps = STEPS_DEFAULT,\n time = TIME_DEFAULT,\n value,\n ...props\n}: AnimatedNumberProps) => {\n const [viewValue, setViewValue, viewValueRef] = useStateRef(value);\n const timerRef = React.useRef();\n\n const stopAnimation = () => {\n if (undefined !== timerRef.current) {\n clearInterval(timerRef.current);\n timerRef.current = undefined;\n }\n };\n\n React.useEffect(() => {\n return () => stopAnimation();\n }, []);\n\n React.useEffect(() => {\n if (viewValueRef.current === value) return;\n\n const minimumStep = value - viewValueRef.current > 0 ? 1 : -1;\n const stepSize = Math.floor((value - viewValueRef.current) / steps);\n\n const valuePerStep =\n minimumStep > 0 ? Math.max(stepSize, minimumStep) : Math.min(stepSize, minimumStep);\n\n updateValueInSteps(\n timerRef,\n setViewValue,\n viewValueRef,\n valuePerStep,\n minimumStep,\n value,\n stopAnimation,\n time\n );\n\n return () => stopAnimation();\n }, [formatter, setViewValue, steps, time, value, viewValueRef]);\n\n return {formatter(viewValue)};\n};\n\nexport default AnimatedNumber;\n","import { Headline, HoverCard, Row } from 'src/components';\nimport AnimatedNumber from 'src/components/AnimatedNumber';\nimport { Margin, Size } from 'src/constants';\nimport CareCoin from 'assets/care-coin.png';\nimport { palette, Weight } from 'src/theme';\nimport styled from 'styled-components/native';\n\nexport const COIN_HEIGHT_DEFAULT = 20;\nexport const COIN_WIDTH_DEFAULT = 19;\n\nexport const TabViewContainer = styled.View`\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n\n flex-direction: row;\n justify-content: space-between;\n margin-top: ${Margin.Medium}px;\n border-bottom-width: ${Size.X4_S}px;\n border-bottom-style: solid;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n`;\n\nexport const TabViewInnerContainer = styled.View`\n gap: ${Margin.Large}px;\n flex: 1;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const ExtendedHeader = styled.View<{ topMargin: number }>`\n padding-top: ${({ topMargin }) => topMargin || Size.M}px;\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nexport const TopTab = styled(HoverCard).attrs({\n hideShadow: true\n})`\n justify-content: center;\n align-items: center;\n padding: ${Margin.Medium}px;\n background-color: ${({ theme }) => theme.colors.background};\n`;\n\nexport const CoinBalanceContainer = styled(Row)`\n margin-right: ${Margin.Large}px;\n margin-bottom: ${Margin.Small}px;\n`;\n\nexport const CoinBalanceAmountText = styled(AnimatedNumber)`\n font-weight: ${Weight.BOLD};\n margin-right: ${Margin.ExtraSmall}px;\n margin-left: ${Margin.Medium}px;\n text-align: right;\n text-align-vertical: bottom;\n margin-top: ${Margin.ExtraSmall}px;\n align-self: center;\n`;\n\nexport const CoinIcon = styled.Image.attrs({ source: CareCoin })<{\n height?: number;\n width?: number;\n}>`\n height: ${COIN_HEIGHT_DEFAULT}px;\n width: ${COIN_WIDTH_DEFAULT}px;\n margin-left: ${Margin.Small}px;\n align-self: center;\n`;\n\nexport const Header = styled(Headline)`\n color: ${({ theme }) => theme.colors.onPrimary};\n text-align: center;\n margin-bottom: ${Size.S}px;\n`;\n","import { Body, HoverCard, Row, Subheading, Title } from 'src/components';\nimport { Size, Margin } from 'src/constants';\nimport { palette } from 'src/theme';\nimport { transparent } from 'src/utils';\nimport styled from 'styled-components/native';\n\nexport const ExpiringCoinsHeader = styled(Body)`\n border-width: 1px;\n border-color: ${({ theme }) => theme.colors.error};\n border-radius: ${Size.X2_S}px;\n padding: ${Size.S}px;\n`;\n\nexport const CareCoinView = styled.View`\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n padding-left: ${Size.X4_S}px;\n padding-right: ${Size.X2_S}px;\n`;\n\nexport const StyledRow = styled(Row)`\n border-bottom-width: 1px;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n padding: ${Margin.Medium}px;\n\n justify-content: space-between;\n`;\n\nexport const Container = styled.View`\n padding: ${Margin.ExtraLarge}px;\n`;\n\nexport const TitleText = styled(Title)`\n margin-vertical: ${Margin.Large}px;\n`;\n\nexport const RewardOfferCardContainer = styled(HoverCard)`\n height: ${Size.X4_L}px;\n margin-left: ${Margin.Large}px;\n margin-vertical: ${Margin.Medium}px;\n flex-grow: 1;\n`;\n\nexport const RewardOfferInnerContainer = styled.View`\n flex-direction: row;\n flex-grow: 1;\n`;\n\nexport const RewardContentView = styled.View`\n flex: 1;\n justify-content: center;\n`;\n\nexport const RewardTitleView = styled.View`\n padding-left: ${Margin.Medium}px;\n padding-vertical: ${Margin.Small}px;\n`;\n\nexport const NullImageView = styled.View`\n width: ${Size.X4_L}px;\n height: ${Size.X4_L}px;\n border-bottom-left-radius: ${({ theme }) => `${theme.roundness}px`};\n border-top-left-radius: ${({ theme }) => `${theme.roundness}px`};\n justify-content: center;\n align-items: center;\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.15)};\n`;\n\nexport const RewardImage = styled.Image`\n width: ${Size.X4_L}px;\n height: ${Size.X4_L}px;\n border-top-left-radius: ${({ theme }) => `${theme.roundness}`}px;\n border-bottom-left-radius: ${({ theme }) => `${theme.roundness}`}px;\n`;\n\nexport const StyledSectionHeader = styled(Subheading)`\n margin-vertical: ${Margin.Large}px;\n`;\n\nexport const ContinuitySegmentContainer = styled.View`\n width: ${Size.S}px;\n height: 100%;\n`;\n\nexport const LineContainer = styled.View`\n z-index: 0;\n flex: 1;\n width: ${Size.X3_S}px;\n align-self: center;\n`;\n\nexport const TopLineOne = styled.View<{ isVisible: boolean; isPartialFill: boolean }>`\n flex: 2;\n background-color: ${({ isVisible, isPartialFill, theme }) =>\n isVisible\n ? isPartialFill\n ? theme.colors.placeholder\n : theme.colors.primary\n : theme.colors.background};\n width: ${Size.X3_S}px;\n align-self: center;\n`;\n\nexport const TopLineTwo = styled.View<{ isFilled: boolean; isStart?: boolean }>`\n flex: 1;\n border-radius: ${({ isStart }) => (isStart ? Size.S : 0)}px;\n background-color: ${({ isFilled, theme }) =>\n isFilled ? theme.colors.primary : theme.colors.placeholder};\n width: ${Size.X3_S}px;\n align-self: center;\n margin-bottom: -1px;\n`;\n\nexport const CircleIndicator = styled.View<{ isFilled: boolean }>`\n z-index: 1;\n background-color: ${({ isFilled, theme }) =>\n isFilled ? theme.colors.primary : theme.colors.background};\n border-color: ${({ isFilled, theme }) =>\n isFilled ? theme.colors.primary : theme.colors.placeholder};\n border-width: ${Size.X3_S}px;\n width: ${Size.S}px;\n height: ${Size.S}px;\n border-radius: ${Size.S}px;\n align-self: center;\n`;\n\nexport const BottomLine = styled.View<{ isVisible: boolean; isFilled: boolean }>`\n flex: 2;\n background-color: ${({ isVisible, isFilled, theme }) =>\n isVisible\n ? isFilled\n ? theme.colors.primary\n : theme.colors.placeholder\n : theme.colors.background};\n width: ${Size.X3_S}px;\n align-self: center;\n`;\n","import { HoverButton, HoverCard, Row, Subheading } from 'src/components';\nimport { Margin, Size } from 'src/constants';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\nexport const StyledRow = styled(Row)`\n margin-vertical: ${Margin.Medium}px;\n margin-horizontal: ${Margin.Large}px;\n padding-vertical: ${Size.XS}px;\n border-bottom-width: 1px;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n justify-content: space-between;\n`;\n\nexport const TextContainer = styled.View`\n flex: 1;\n gap: ${Margin.Medium}px;\n margin-right: ${Margin.Small}px;\n`;\n\nexport const StyledHoverButton = styled(HoverButton)`\n max-height: ${Size.X2_L}px;\n margin-left: ${Margin.Medium}px;\n padding-vertical: ${Size.XS}px;\n padding-left: ${Margin.Large}px;\n padding-right: ${Margin.Medium}px;\n`;\n\nexport const StyledSectionTitle = styled(Subheading)`\n padding-horizontal: ${Margin.Large}px;\n margin-top: ${Margin.Medium}px;\n`;\n\nexport const StyledHoverCard = styled(HoverCard).attrs({\n hideShadow: true\n})`\n background-color: ${({ theme }) => theme.colors.background};\n`;\n","import React from 'react';\nimport { Body, Caption, Subheading } from 'src/components';\nimport { useViewMode } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { CoinIcon } from 'src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/style';\nimport { Weight } from 'src/theme';\nimport { CareCoinView } from '../LoyaltyRewards/style';\nimport { Trash } from 'react-native-feather';\nimport { useTranslation } from 'react-i18next';\nimport { toLocalShortDate } from 'src/utils';\nimport moment from 'moment';\nimport { StyledHoverButton, StyledHoverCard, StyledRow, TextContainer } from './style';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport LoyaltyTabParamsList from 'src/routes/stacks/LoyaltyTabNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { ActivityLineItem } from 'src/providers/LoyaltyTransactionProvider/types';\n\ninterface Props {\n activityLineItem: ActivityLineItem;\n onPressDelete: (transactionId: number) => void;\n}\n\nconst ActivityItem: React.FC = ({ activityLineItem, onPressDelete }) => {\n const { t } = useTranslation('loyalty');\n const { isMobile } = useViewMode();\n const { colors } = useAppTheme();\n\n const navigation = useNavigation>();\n const onPress = () => {\n navigation.getParent()?.navigate(Screens.TRANSACTION_DETAILS, {\n id: activityLineItem.transactionId,\n isExpiredItem: activityLineItem.description === t('expired'),\n expireAmount: activityLineItem.amount,\n expireDate: activityLineItem.date\n });\n };\n\n return (\n \n \n \n {activityLineItem.description}\n \n {activityLineItem.isPending\n ? t('pendingRedemption')\n : toLocalShortDate(moment(activityLineItem.date))}\n \n \n \n {isMobile ? (\n {activityLineItem.amount}\n ) : (\n {activityLineItem.amount}\n )}\n \n \n\n {activityLineItem.isPending && (\n onPressDelete(activityLineItem.transactionId)}\n />\n )}\n \n \n );\n};\n\nexport default ActivityItem;\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Trophy } from 'src/components/kit/ABIcons';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst TrophyHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default TrophyHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import React from 'react';\nimport { Award } from 'react-native-feather';\nimport { Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst AwardHero: React.FC = () => {\n const { colors } = useAppTheme();\n\n return (\n \n \n \n );\n};\n\nexport default AwardHero;\n\nconst PositionContainer = styled.View`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n left: 25%;\n align-items: center;\n transform: rotate(35deg);\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport TrophyHero from './components/TrophyHero';\nimport AwardHero from './components/AwardHero';\n\nexport enum STEPS {\n DRAWER,\n BALANCE,\n REWARDS,\n EXPIRING,\n TRANSACTIONS,\n BAR\n}\n\nconst LoyaltyTourMap: TourMap = {\n [STEPS.DRAWER]: {\n id: STEPS.DRAWER,\n priority: 0\n },\n [STEPS.BALANCE]: {\n id: STEPS.BALANCE,\n priority: 1\n },\n [STEPS.REWARDS]: {\n id: STEPS.REWARDS,\n priority: 2\n },\n [STEPS.EXPIRING]: {\n id: STEPS.EXPIRING,\n priority: 3\n },\n [STEPS.TRANSACTIONS]: {\n id: STEPS.TRANSACTIONS,\n priority: 4\n },\n [STEPS.BAR]: {\n id: STEPS.BAR,\n priority: 5\n }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'loyalty:tour.slide0.title',\n body: 'loyalty:tour.slide0.body',\n image: \n },\n {\n title: 'loyalty:tour.slide1.title',\n body: 'loyalty:tour.slide1.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.LOYALTY,\n LoyaltyTourMap\n);\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { RefreshControl, SectionList } from 'react-native';\nimport { useLoyaltyTransactions, useViewMode } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport LoyaltyTransaction from 'src/interfaces/api/LoyaltyTransaction';\nimport ActivityItem from './ActivityItem';\nimport { useTranslation } from 'react-i18next';\nimport { StyledSectionTitle } from './style';\nimport { Alert, AlertHandle } from 'src/components';\nimport { AlertOption } from 'src/components/Alert';\nimport { useMutation } from 'react-query';\nimport { queryClient } from 'src/utils';\nimport Toast from 'react-native-toast-message';\nimport { deleteLoyaltyTransaction, QueryKeys } from 'src/api';\nimport { GuideElement, STEPS, useTourGuide } from 'src/routes/stacks/LoyaltyTabNavigator/tour';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { ActivityLineItem } from 'src/providers/LoyaltyTransactionProvider/types';\nimport { Margin } from 'src/constants';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\n\ninterface Section {\n title: string | undefined;\n data: ActivityLineItem[];\n}\n\nexport const tourExample: ActivityLineItem = {\n transactionId: 0,\n amount: 100,\n description: 'This is a sample transaction',\n date: new Date()\n};\n\nconst LoyaltyActivity: React.FC = () => {\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n const { enabled: isTouring, exitTour, pendingSteps } = useTourGuide();\n\n const [selectedTransaction, setSelectedTransaction] = useState();\n\n const { transactions, isFetched, isLoading, userCoinData } = useLoyaltyTransactions();\n\n const { mutate: cancelRedemption, isLoading: isCancelingRedemption } = useMutation(\n async (id: number) => await deleteLoyaltyTransaction(id),\n {\n onSuccess: () => {\n void queryClient.invalidateQueries([QueryKeys.LOYALTY_TRANSACTIONS]);\n Toast.show({ text1: t('txnDeleteSuccess') });\n },\n onError: (response: Error) => {\n Toast.show({ text1: response.message, type: 'error' });\n }\n }\n );\n\n const sectionData = useMemo(() => {\n return !isTouring\n ? userCoinData.sections\n : [{ index: 0, title: undefined, data: [tourExample] }];\n }, [isTouring, userCoinData.sections]);\n\n const onPressDelete = useCallback(\n (transactionId: number) => {\n setSelectedTransaction(transactions?.find((txn) => txn.id === transactionId));\n confirmModalRef.current?.alert();\n },\n [transactions]\n );\n\n const onPressConfirm = useCallback(() => {\n if (selectedTransaction) {\n cancelRedemption(selectedTransaction.id);\n }\n }, [cancelRedemption, selectedTransaction]);\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('common:cancel'),\n type: 'neutral'\n },\n\n {\n action: onPressConfirm,\n label: t('common:confirm')\n }\n ],\n [onPressConfirm, t]\n );\n\n const ref = useRef>(null);\n\n if (!isFetched) {\n return ;\n }\n\n return (\n <>\n \n \n await queryClient.invalidateQueries([QueryKeys.LOYALTY_TRANSACTIONS])\n }\n />\n }\n contentContainerStyle={{\n marginHorizontal: horizontalInset,\n marginVertical: Margin.Large\n }}\n renderSectionHeader={({ section }) =>\n section.data.length ? (\n {section.title ?? t('pending')}\n ) : (\n <>\n )\n }\n sections={sectionData}\n renderItem={({ item, index }) => (\n {\n if (!pendingSteps) exitTour();\n }}\n semiTransparentBg\n >\n \n \n )}\n stickySectionHeadersEnabled={false}\n />\n \n \n \n );\n};\n\nexport default LoyaltyActivity;\n","import moment from 'moment-timezone';\nimport React from 'react';\nimport { Body } from 'src/components';\nimport { usePractice } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { CoinIcon } from 'src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/style';\nimport { Weight } from 'src/theme';\nimport { toLocalDate } from 'src/utils';\nimport { CareCoinView, StyledRow } from '../style';\n\ninterface Props {\n expringAmount: number;\n expireDate?: Date;\n}\n\nconst ExpiringCareCoinItem: React.FC = ({ expringAmount, expireDate }) => {\n const { data: practice } = usePractice();\n const { colors } = useAppTheme();\n\n return (\n \n {toLocalDate(moment(expireDate), practice?.timeZone)}\n \n {expringAmount}\n \n \n \n );\n};\n\nexport default ExpiringCareCoinItem;\n","import React from 'react';\nimport { TouchableOpacity } from 'react-native';\nimport {\n ContinuitySegmentContainer,\n LineContainer,\n TopLineOne,\n TopLineTwo,\n CircleIndicator,\n BottomLine\n} from '../style';\n\ninterface Props {\n availableCoins: number;\n rewardPrice: number;\n isStart: boolean;\n isEnd: boolean;\n onPress: () => void;\n}\n\nconst ContinuitySegment: React.FC = ({\n availableCoins,\n rewardPrice,\n isStart,\n isEnd,\n onPress\n}) => {\n return (\n \n \n \n = rewardPrice} isStart={isStart} />\n \n \n = rewardPrice} />\n \n \n rewardPrice} />\n \n \n );\n};\n\nexport default ContinuitySegment;\n","import React from 'react';\nimport { Body, Shimmer, Subheading } from 'src/components';\nimport useReward from 'src/hooks/react-query/useReward';\nimport { colorShade, isDefined } from 'src/utils';\nimport cleanUrl from 'src/utils/cleanUrl';\nimport { Weight } from 'src/theme';\nimport { Trophy } from 'src/components/kit/ABIcons';\nimport { CoinIcon } from 'src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/style';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport {\n CareCoinView,\n NullImageView,\n RewardContentView,\n RewardImage,\n RewardOfferCardContainer,\n RewardOfferInnerContainer,\n RewardTitleView\n} from '../style';\nimport { IconSize, Size } from 'src/constants';\n\ninterface Props {\n rewardId: number;\n onPress: () => void;\n}\n\nconst OfferCard: React.FC = ({ rewardId, onPress }) => {\n const { colors, roundness, dark } = useAppTheme();\n\n const { data: reward, isLoading } = useReward(rewardId);\n\n const imageURL = isDefined(reward?.imageId) ? cleanUrl(reward?.image.urls.thumbnail) : undefined;\n\n return (\n \n \n \n {isDefined(imageURL) && }\n {!isDefined(imageURL) && (\n \n \n \n )}\n \n \n \n {reward?.title}\n \n \n \n \n {reward?.price}\n \n \n \n \n \n );\n};\n\nexport default OfferCard;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport React from 'react';\nimport { Row } from 'src/components';\nimport { Reward } from 'src/interfaces';\nimport LoyaltyTabParamsList from 'src/routes/stacks/LoyaltyTabNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport ContinuitySegment from './ContinuitySegment';\nimport OfferCard from './OfferCard';\n\ninterface Props {\n isStart: boolean;\n isEnd: boolean;\n reward: Reward;\n coinBalance: number;\n}\n\nconst RewardRow: React.FC = ({ reward, isStart, isEnd, coinBalance }) => {\n const navigation = useNavigation>();\n const onPress = () => {\n navigation.getParent()?.navigate(Screens.LOYALTY_REWARD, { id: reward.id });\n };\n\n return (\n \n \n \n \n );\n};\n\nexport default RewardRow;\n","import moment from 'moment-timezone';\nimport React, { useMemo, useRef } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { ActivityIndicator, RefreshControl, SectionList } from 'react-native';\nimport { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getRewards } from 'src/api/rewards';\nimport { Body } from 'src/components';\nimport { Margin } from 'src/constants';\nimport { useLoyaltyTransactions, usePractice, useViewMode } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS, useTourGuide } from 'src/routes/stacks/LoyaltyTabNavigator/tour';\nimport { Weight } from 'src/theme';\nimport { isWithin30days, queryClient, toLocalShortDate } from 'src/utils';\nimport { ExpiringCoinsHeader, StyledSectionHeader } from './style';\nimport ExpiringCareCoinItem from './components/ExpiringCareCoinItem';\nimport _ from 'lodash';\nimport RewardRow from './components/RewardRow';\nimport { RewardSectionItem } from 'src/providers/LoyaltyTransactionProvider/types';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\n\ninterface Section {\n index: number;\n title: string;\n data: RewardSectionItem[];\n}\n\nconst LoyaltyRewards: React.FC = () => {\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n const { data: practice } = usePractice();\n const { enabled: isTouring, updateScrollPositions, pendingSteps, exitTour } = useTourGuide();\n\n const { data: rewards, isFetched } = useQuery([QueryKeys.REWARDS], {\n queryFn: getRewards\n });\n\n const { coinBalance, isRefetching, aggregatedExpirations } = useLoyaltyTransactions();\n\n const sectionListData = useMemo(() => {\n const sections = [\n {\n index: 0,\n title: 'rewardsYouCanGet',\n data: rewards?.length\n ? _.sortBy(rewards, 'price').map(\n (reward): RewardSectionItem => ({\n type: 'reward',\n reward,\n expireAmount: 0,\n expireDate: undefined\n })\n )\n : []\n },\n {\n index: 1,\n title: 'expiring',\n data: aggregatedExpirations\n }\n ];\n\n const showListHeaderComponent =\n !!aggregatedExpirations.length && isWithin30days(moment(aggregatedExpirations[0].expireDate));\n\n return { sections, showListHeaderComponent };\n }, [aggregatedExpirations, rewards]);\n\n const ref = useRef>(null);\n\n if (!isFetched) {\n return ;\n }\n\n return (\n \n \n }}\n />\n \n ) : (\n <>\n )\n }\n refreshControl={\n \n await Promise.all([\n queryClient.invalidateQueries([QueryKeys.LOYALTY_TRANSACTIONS]),\n queryClient.invalidateQueries([QueryKeys.REWARDS])\n ])\n }\n />\n }\n sections={sectionListData.sections}\n renderSectionHeader={({ section }) =>\n section.data.length || isTouring ? (\n {\n if (!pendingSteps) exitTour();\n }}\n >\n {t(section.title)}\n \n ) : (\n <>\n )\n }\n renderItem={({ section, item, index }) =>\n item.reward ? (\n \n ) : (\n \n )\n }\n stickySectionHeadersEnabled={false}\n />\n \n );\n};\n\nexport default LoyaltyRewards;\n","import { useEffect, useRef, useState } from 'react';\nimport { Animated, InteractionManager } from 'react-native';\nimport { IS_WEB, Size, TOP_TAB_WIDTH } from 'src/constants';\nimport styled from 'styled-components/native';\n\nconst ANIMATED_DURATION = 300;\n\ninterface ITabBarIndicator {\n leftOffset: number;\n width: number;\n}\n\nconst TabBarIndicator: React.FC = ({ leftOffset, width }) => {\n const translateValue = useRef(new Animated.Value(TOP_TAB_WIDTH));\n const widthValue = useRef(new Animated.Value(TOP_TAB_WIDTH));\n\n const [derivedWidth, setDerivedWidth] = useState(TOP_TAB_WIDTH);\n\n useEffect(() => {\n const original = widthValue.current;\n const listener = original.addListener((w) => {\n setDerivedWidth(w.value);\n });\n return () => original.removeListener(listener);\n }, []);\n\n useEffect(() => {\n const handle = InteractionManager.createInteractionHandle();\n Animated.parallel([\n Animated.timing(translateValue.current, {\n toValue: leftOffset,\n duration: ANIMATED_DURATION,\n useNativeDriver: !IS_WEB\n }),\n Animated.timing(widthValue.current, {\n toValue: width,\n duration: ANIMATED_DURATION,\n useNativeDriver: !IS_WEB\n })\n ]).start(() => InteractionManager.clearInteractionHandle(handle));\n }, [leftOffset, width]);\n\n return (\n \n );\n};\n\nexport default TabBarIndicator;\n\nconst StyledTabIndicatorAnimatedView = styled(Animated.View)`\n position: absolute;\n width: ${TOP_TAB_WIDTH}px;\n border-bottom-color: ${({ theme }) => theme.colors.primary};\n border-bottom-width: ${Size.X4_S}px;\n bottom: 0px;\n`;\n","import React, { PropsWithChildren } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from '../../tour';\n\ninterface Props extends PropsWithChildren {\n initialIndex: number;\n thisIndex: number;\n focusNext: () => void;\n}\n\nconst GuideWrapper: React.FC = ({ initialIndex, thisIndex, children, focusNext }) => {\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n\n return (\n \n {children}\n \n );\n};\n\nexport default GuideWrapper;\n","import { MaterialTopTabBarProps } from '@react-navigation/material-top-tabs';\nimport { useFocusEffect } from '@react-navigation/native';\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Subheading } from 'src/components';\nimport {\n CoinBalanceAmountText,\n CoinBalanceContainer,\n CoinIcon,\n ExtendedHeader,\n Header,\n TabViewContainer,\n TabViewInnerContainer,\n TopTab\n} from './style';\nimport TabBarIndicator from './TabIndicator';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport GuideWrapper from './GuideWrapper';\nimport { GuideElement, STEPS } from '../../tour';\nimport { useLoyaltyTransactions } from 'src/hooks';\nimport { View } from 'react-native';\n\nconst LoyaltyTabBar: React.FC = ({ state, navigation }) => {\n const { t } = useTranslation('loyalty');\n const { coinBalance, refetch } = useLoyaltyTransactions();\n const indexTabWidths = useRef(\n Array(state.routes.length).map(() => ({ x: 0, y: 0, width: 0, height: 0 }))\n );\n\n const firstTimeRef = React.useRef(true);\n\n useEffect(() => {\n indexTabWidths.current = Array(state.routes.length).map(() => ({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }));\n }, [state.routes.length]);\n\n useFocusEffect(\n useCallback(() => {\n if (firstTimeRef.current) {\n firstTimeRef.current = false;\n return;\n }\n\n void refetch();\n }, [refetch])\n );\n\n const { top } = useSafeAreaInsets();\n\n const focusNext = useCallback(() => {\n if (state.index === 0) {\n navigation.navigate(state.routeNames[1]);\n } else if (state.index === 1) {\n navigation.navigate(state.routeNames[0]);\n }\n }, [state.index, navigation, state.routeNames]);\n\n return (\n <>\n \n
{t('rewardsScreenTitle')}
\n
\n \n \n {state.routes.map((route, index) => {\n const isFocused = state.index === index;\n\n const onPress = (): void => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true\n });\n\n if (!isFocused && !event.defaultPrevented) {\n navigation.navigate(route.name);\n }\n };\n\n return (\n {\n indexTabWidths.current[index] = event.nativeEvent.layout;\n }}\n >\n \n \n {t(`title.${route.name}`)}\n \n \n \n );\n })}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LoyaltyTabBar;\n","import React from 'react';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { useTranslation } from 'react-i18next';\nimport { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';\nimport LoyaltyActivity from 'src/scenes/LoyaltyActivity';\nimport LoyaltyRewards from 'src/scenes/LoyaltyRewards';\nimport LoyaltyTabBar from 'src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar';\nimport { FocusAwareStatusBar } from 'src/components';\nimport LoyaltyTabParamsList from './ParamsList';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { SliderElement, SLIDES, STEPS, TourGuide } from './tour';\nimport { IS_WEB } from 'src/constants';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\n\nconst Tab = createMaterialTopTabNavigator();\n\nexport const LoyaltyStackNavigator: React.FC = () => {\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n const title = (pageTitle: string) => `${t('rewardsScreenTitle')}: ${pageTitle}`;\n\n const themedHeader = useDefaultStackOptions();\n\n return (\n \n \n {({ enabled }) => (\n <>\n \n }\n screenOptions={{ ...themedHeader, animationEnabled: !IS_WEB || !enabled }}\n sceneContainerStyle={{\n backgroundColor: colors.background\n }}\n >\n \n \n \n \n \n )}\n \n \n );\n};\n","import { useNavigation } from '@react-navigation/native';\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack';\nimport React, { useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutRectangle } from 'react-native';\nimport { Caption, Headline, HoverCard } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { IconSize, Margin, MOBILE_WIDTH_MAX, PATIENT_STATUSES } from 'src/constants';\nimport { usePatient } from 'src/hooks';\nimport { Patient } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { palette } from 'src/theme';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\ninterface Props {\n numCols: number;\n patientId: Patient['patientId'];\n isFromRequestWizard?: boolean;\n}\n\nconst PatientCard: React.FC = ({ patientId, numCols, isFromRequestWizard }) => {\n const navigation =\n useNavigation<\n NativeStackNavigationProp\n >();\n const { colors } = useAppTheme();\n const [l, setLayout] = useState();\n const { t } = useTranslation('petList');\n const { data: patient } = usePatient(patientId, { suspense: false });\n\n const goToPatientProfile = (patientId: string) => {\n navigation.navigate(Screens.PATIENT_PROFILE, { id: patientId, isFromRequestWizard });\n };\n\n const patientStatus = useMemo(() => {\n if (patient?.deceasedDate) {\n return PATIENT_STATUSES.DECEASED;\n }\n return patient?.status as PATIENT_STATUSES;\n }, [patient]);\n\n return (\n \n goToPatientProfile(patientId)}>\n setLayout(e.nativeEvent.layout)}>\n \n {patientStatus && patientStatus !== PATIENT_STATUSES.ACTIVE && (\n \n {t(patientStatus)}\n \n )}\n \n \n \n {patient?.name}\n \n \n \n \n );\n};\n\nexport default PatientCard;\n\nconst Holder = styled.View<{ numCols: number }>`\n width: ${({ numCols, theme }) =>\n numCols > 1 ? Math.floor((1 / numCols) * theme.viewMode.maxContentWidth) : MOBILE_WIDTH_MAX}px;\n max-width: 100%;\n`;\n\nconst Container = styled(HoverCard)`\n border-radius: ${({ theme }) => theme.roundness}px;\n align-items: center;\n margin: ${Margin.Medium}px;\n cursor: pointer;\n`;\n\nconst ImageContainer = styled.View`\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n width: 100%;\n aspect-ratio: 1;\n align-items: center;\n justify-content: center;\n`;\n\nconst StatusContainer = styled.View`\n position: absolute;\n bottom: 0px;\n right: 0px;\n padding: ${Margin.Small}px;\n background-color: ${({ theme }) => theme.colors.backdrop};\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nconst NameContainer = styled.View`\n padding: ${Margin.Medium}px;\n`;\n\nconst StyledPatientAvatar = styled(PatientAvatar)`\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n`;\n","import React from 'react';\nimport { Body } from 'src/components';\nimport { Paw } from 'src/components/Icons';\nimport { IconSize, Size } from 'src/constants';\nimport { transparent } from 'src/utils';\nimport styled from 'styled-components/native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n message: string;\n}\nconst PatientIconMessage: React.FC = ({ message }) => {\n const { colors } = useAppTheme();\n return (\n \n \n \n \n {message}\n \n );\n};\n\nexport default PatientIconMessage;\n\nconst Container = styled.View`\n margin: ${Size.M}px;\n align-items: center;\n`;\n\nconst IconContainer = styled.View`\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.15)};\n border-radius: ${IconSize.L}px;\n padding: ${Size.XS}px;\n margin: ${Size.M}px;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport PawHero from './PawHero';\n\nexport enum STEPS {\n DRAWER,\n VIEW,\n FILTER,\n PET_ID,\n APPOINTMENTS,\n REMINDERS,\n PRESCRIPTIONS,\n TODOS,\n EDIT_INFO,\n PHOTOS,\n EDIT_BASIC_INFO,\n EDIT_ADDITIONAL_INFO,\n EDIT_COMMENTS\n}\n\nconst PatientListTourMap: TourMap = {\n [STEPS.DRAWER]: {\n id: STEPS.DRAWER,\n priority: 0\n },\n [STEPS.FILTER]: {\n id: STEPS.FILTER,\n priority: 1\n },\n [STEPS.VIEW]: {\n id: STEPS.VIEW,\n priority: 2\n },\n [STEPS.PET_ID]: {\n id: STEPS.PET_ID,\n priority: 3\n },\n [STEPS.APPOINTMENTS]: {\n id: STEPS.APPOINTMENTS,\n priority: 4\n },\n [STEPS.REMINDERS]: {\n id: STEPS.REMINDERS,\n priority: 5\n },\n [STEPS.PRESCRIPTIONS]: {\n id: STEPS.PRESCRIPTIONS,\n priority: 6\n },\n [STEPS.TODOS]: {\n id: STEPS.TODOS,\n priority: 7\n },\n [STEPS.EDIT_INFO]: {\n id: STEPS.EDIT_INFO,\n priority: 8\n },\n [STEPS.PHOTOS]: {\n id: STEPS.PHOTOS,\n priority: 9\n },\n [STEPS.EDIT_BASIC_INFO]: {\n id: STEPS.EDIT_BASIC_INFO,\n priority: 10\n },\n [STEPS.EDIT_ADDITIONAL_INFO]: {\n id: STEPS.EDIT_ADDITIONAL_INFO,\n priority: 11\n },\n [STEPS.EDIT_COMMENTS]: {\n id: STEPS.EDIT_COMMENTS,\n priority: 12\n }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'petList:tour.drawer.title',\n body: 'petList:tour.drawer.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.PETS,\n PatientListTourMap\n);\n","import React, { useCallback } from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { MOBILE_WIDTH_MAX, PATIENT_STATUSES, Size } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport PatientCard from './PatientCard';\nimport { FlatList, RefreshControl } from 'react-native';\nimport usePaginatedPatients from 'src/hooks/react-query/usePaginatedPatients';\nimport styled from 'styled-components/native';\nimport PatientIconMessage from './PatientIconMessage';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from './tour';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\n\ninterface Props {\n patientStatus?: PATIENT_STATUSES;\n isFromRequestWizard?: boolean;\n}\n\nconst PatientListContent: React.FC = ({ patientStatus, isFromRequestWizard }) => {\n const { t } = useTranslation('petList');\n const { colors } = useAppTheme();\n const { horizontalInset, isMobile } = useViewMode();\n\n const { navigate } = useNavigation>();\n\n const {\n data: patientList = [],\n isFetched,\n isRefetching,\n refetch,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage\n } = usePaginatedPatients({\n status: patientStatus,\n suspense: false\n });\n\n const tourFirstPatientProfile = useCallback(() => {\n const firstActivePatient = patientList.find((p) => p.status === PATIENT_STATUSES.ACTIVE);\n if (firstActivePatient) {\n navigate(Screens.PATIENT_PROFILE, { id: firstActivePatient?.patientId });\n }\n }, [navigate, patientList]);\n\n const numCols = (patientList?.length ?? 0) > 1 ? 2 : 1;\n const shouldNarrowDisplay = !isMobile && numCols === 1;\n\n return (\n \n }\n ListEmptyComponent={\n isFetched ? (\n \n ) : (\n \n )\n }\n contentContainerStyle={[\n {\n marginHorizontal: horizontalInset,\n flexGrow: 1\n },\n shouldNarrowDisplay && {\n width: MOBILE_WIDTH_MAX,\n alignSelf: 'center'\n }\n ]}\n numColumns={numCols}\n renderItem={({ item, index }) => (\n tourFirstPatientProfile()}\n >\n \n \n )}\n onEndReached={() => {\n if (hasNextPage && isFetched) {\n void fetchNextPage();\n }\n }}\n ListFooterComponent={\n <>\n {isFetchingNextPage && }\n {!hasNextPage && !isFetchingNextPage && !!patientList.length && (\n \n )}\n \n }\n />\n );\n};\n\nexport default PatientListContent;\n\nconst LoadingNextIndicator = styled(ActivityIndicator)`\n margin: ${Size.M}px;\n margin-bottom: 200px;\n`;\n","import React from 'react';\nimport { ChevronDown } from 'react-native-feather';\nimport { Menu } from 'react-native-paper';\nimport styled from 'styled-components/native';\nimport { Body, HoverButton } from 'src/components';\nimport { Margin, PATIENT_STATUSES } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { Weight, palette } from 'src/theme';\nimport { useTranslation } from 'react-i18next';\nimport _ from 'lodash';\nimport { fontStyles } from 'src/theme/globalStyles';\n\ninterface Props {\n selectedStatus?: PATIENT_STATUSES;\n setSelectedStatus: (patientStatus?: PATIENT_STATUSES) => void;\n}\n\nconst PatientStatusSelector: React.FC = ({ selectedStatus, setSelectedStatus }) => {\n const { toTrue: openMenu, toFalse: closeMenu, value: menuOpen } = useBoolean();\n const { t } = useTranslation('petList');\n\n const selectAndClose = (patientStatus?: PATIENT_STATUSES) => {\n setSelectedStatus(patientStatus);\n closeMenu();\n };\n\n return (\n <>\n \n {t('viewingPets', {\n status: selectedStatus ? t(selectedStatus, { count: 0 }) : t('all')\n })}\n \n }\n >\n {(Object.keys(PATIENT_STATUSES) as Array).map((key) => {\n return (\n selectAndClose(PATIENT_STATUSES[key])}>\n {_.capitalize(t(PATIENT_STATUSES[key], { count: 0 }))}\n \n );\n })}\n selectAndClose(undefined)}>\n {_.capitalize(t('all', { ns: 'common' }))}\n \n \n \n );\n};\n\nexport default PatientStatusSelector;\n\nconst Selector = styled(HoverButton).attrs(({ theme }) => ({\n hideShadow: true,\n hoverColor: palette.BLACK_OPACITY_20,\n buttonColor: theme.colors.onPrimary,\n compact: true,\n labelStyle: {\n ...fontStyles.body,\n fontWeight: Weight.BOLD\n },\n uppercase: false\n}))`\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n flex-direction: row-reverse;\n align-self: center;\n padding: 0px;\n`;\n\nconst SelectorOption = styled.Pressable<{ backgroundColor?: string }>`\n ${({ backgroundColor }) =>\n `\n flex-direction: row;\n align-items: center;\n padding-vertical: ${Margin.Medium}px;\n padding-left: ${Margin.Large}px;\n padding-right: ${Margin.ExtraLarge}px;\n background-color: ${backgroundColor ?? palette.TRANSPARENT};\n `}\n`;\n","import { useNavigation } from '@react-navigation/native';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { PATIENT_STATUSES, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport PatientListContent from './PatientListContent';\nimport PatientStatusSelector from './PatientStatusSelector';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, SliderElement, SLIDES, STEPS, TourGuide } from './tour';\nimport { TourGuideHandle } from 'src/module/TourGuide/model';\nimport { QueryKey, useQueries } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { useTranslation } from 'react-i18next';\n\nconst queries: QueryKey[] = [QueryKeys.PAGINATED_PATIENTS, QueryKeys.PATIENTS];\n\nconst PatientListRoot: React.FC = () => {\n const { t } = useTranslation();\n const { setOptions } = useNavigation();\n const { colors } = useAppTheme();\n\n const [selectedStatus, setSelectedStatus] = useState(\n PATIENT_STATUSES.ACTIVE\n );\n\n useEffect(() => {\n setOptions({\n headerShown: true,\n headerStyle: {\n backgroundColor: colors.primary\n }\n });\n }, [colors.primary, setOptions]);\n\n const results = useQueries(queries.map((key) => ({ queryKey: [key] })));\n const isRefreshing = results.some((query) => query.isRefetching && !query.isStale);\n\n const providerRef = useRef(null);\n\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default PatientListRoot;\n\nconst HeroContainer = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n align-items: center;\n padding-bottom: ${Size.XS}px;\n`;\n","import React from 'react';\nimport { createStackNavigator } from '@react-navigation/stack';\nimport { Screens } from '../screens';\nimport { FocusAwareStatusBar } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport PatientListRoot from 'src/scenes/PatientList';\nimport PatientStackParamsList from './ParamsList';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\n\nconst PetStack = createStackNavigator();\n\nexport const PatientStackNavigator: React.FC = () => {\n const { colors } = useAppTheme();\n const { t } = useTranslation([\n 'petList',\n 'patientProfile',\n 'petInfoUpdate',\n 'additionalInfoUpdate'\n ]);\n\n const themedHeader = useDefaultStackOptions();\n\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n","import { useMemo } from 'react';\nimport { UseInfiniteQueryOptions, useInfiniteQuery } from 'react-query';\nimport { getAllTodos, QueryKeys } from 'src/api';\nimport { Patient, Todo } from 'src/interfaces';\nimport { PAGE_LENGTH } from 'src/constants';\nimport _ from 'lodash';\nimport { getNextPageParam, PaginationRS } from 'src/utils';\n\ninterface Options\n extends Omit<\n UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n Array\n >,\n 'queryFn' | 'queryKey'\n > {\n length?: number;\n isComplete?: boolean;\n column?: string;\n dir?: 'asc' | 'desc';\n patientId?: Patient['patientId'];\n reason?: string;\n}\nconst usePaginatedTodos = ({\n length = PAGE_LENGTH,\n isComplete,\n column,\n dir,\n patientId,\n reason,\n ...options\n}: Options) => {\n const {\n data,\n refetch,\n hasNextPage,\n fetchNextPage,\n isLoading,\n isFetching,\n isFetchingNextPage,\n ...rest\n } = useInfiniteQuery({\n queryKey: [QueryKeys.PAGED_TODOS, length, isComplete, dir, column],\n queryFn: async ({ pageParam = 0 }) => {\n return getAllTodos(pageParam * length, length, isComplete, dir, column);\n },\n\n getNextPageParam: (...options) => getNextPageParam(...options, length),\n suspense: true,\n ...options\n });\n\n const todos = useMemo(() => {\n const _todos = data?.pages?.reduce((prev, curr) => [...prev, ...curr.data], []) ?? [];\n return filterTodos(_todos, patientId, reason);\n }, [data?.pages, patientId, reason]);\n\n return {\n isLoading,\n isFetching,\n isFetchingNextPage,\n hasNextPage,\n data: todos,\n fetchNextPage,\n refetch,\n ...rest\n };\n};\n\nexport default usePaginatedTodos;\n\nexport const filterTodos = (\n data: Todo[],\n _patientId: Patient['patientId'] | undefined,\n _reason: string | undefined\n) =>\n _(data)\n .filter(\n ({ patientId, reason }) =>\n (!_patientId || patientId === _patientId) && (!_reason || reason === _reason)\n )\n .uniqBy('id')\n .value();\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { CheckCircle } from 'react-native-feather';\nimport { IS_WEB, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst CheckCircleHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default CheckCircleHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Size.X2_L}px;\n padding-bottom: ${Size.X3_L}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport CheckCircleHero from './CheckCircleHero';\n\nexport enum STEPS {\n DRAWER,\n PASTDUE,\n TODAY,\n SCHEDULED,\n COMPLETED,\n ADD\n}\n\nconst ToDoListTourMap: TourMap = {\n [STEPS.DRAWER]: { id: STEPS.DRAWER, priority: 0 },\n [STEPS.PASTDUE]: { id: STEPS.PASTDUE, priority: 1 },\n [STEPS.TODAY]: { id: STEPS.TODAY, priority: 2 },\n [STEPS.SCHEDULED]: { id: STEPS.SCHEDULED, priority: 3 },\n [STEPS.COMPLETED]: { id: STEPS.COMPLETED, priority: 4 },\n [STEPS.ADD]: { id: STEPS.ADD, priority: 5 }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'todos:list.tour.slide0.title',\n body: 'todos:list.tour.slide0.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.TO_DOS,\n ToDoListTourMap\n);\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Animated } from 'react-native';\nimport { TouchableRipple } from 'react-native-paper';\nimport { Body } from 'src/components';\nimport { Margin } from 'src/constants';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\ninterface Props {\n remove: () => void;\n dragAnimatedValue: Animated.AnimatedInterpolation;\n}\n\nconst DeleteButton: React.FC = ({ remove, dragAnimatedValue }) => {\n const { t } = useTranslation('common');\n const opacity = dragAnimatedValue.interpolate({\n inputRange: [-50, 0],\n outputRange: [1, 0],\n extrapolate: 'clamp'\n });\n\n return (\n \n \n \n );\n};\n\nexport default DeleteButton;\n\nconst Button = styled(Animated.View)`\n background-color: ${({ theme }) => theme.colors.error}\n padding: ${Margin.Large}px;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport moment from 'moment-timezone';\nimport React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Animated, LayoutAnimation } from 'react-native';\nimport { Swipeable } from 'react-native-gesture-handler';\nimport { Checkbox } from 'react-native-paper';\nimport { Body, Caption, Column, HoverCard, Row } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { IconSize, Size } from 'src/constants';\nimport { useBoolean, usePatient, useMutateTodos } from 'src/hooks';\nimport { Todo } from 'src/interfaces';\nimport { Screens } from 'src/routes/stacks/screens';\nimport TodoStackParamList from 'src/routes/stacks/ToDoStackNavigator/ParamsList';\nimport { Weight } from 'src/theme';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { toLocalDateTime } from 'src/utils';\nimport styled from 'styled-components/native';\nimport { ReasonMap } from './model';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport DeleteButton from './DeleteButton';\nimport { debounce } from 'lodash';\n\ninterface Props {\n todo: Todo;\n tourEnabled: boolean;\n}\nconst TodoItem: React.FC = ({ todo }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('todos');\n const { navigate } = useNavigation>();\n\n const { data: patient } = usePatient(todo.patientId);\n\n const { toggleCompleteTodo, deleteTodo } = useMutateTodos();\n const isPastDue = moment(todo.dueDate).isBefore() && !todo.isComplete;\n const { value: isDeleted, toTrue: doDelete } = useBoolean();\n const { value: disabled, toTrue: disablePress, toFalse: enablePress } = useBoolean();\n const { value: willToggle, toTrue: doToggle } = useBoolean();\n\n const debounceEnablePress = useMemo(\n () =>\n debounce(enablePress, 500, {\n leading: false,\n trailing: true\n }),\n [enablePress]\n );\n\n const renderRightActions = (\n progress: Animated.AnimatedInterpolation,\n dragAnimatedValue: Animated.AnimatedInterpolation\n ) => {\n return (\n {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n doDelete();\n void deleteTodo(todo);\n }}\n />\n );\n };\n const scaleY = useRef(new Animated.Value(1)).current;\n const nameAndReason = `${String(patient?.name ?? t('list.unknown'))} - ${String(\n todo.otherReason?.length ? todo.otherReason : t(ReasonMap[todo.reason].label)\n )}`;\n\n if (isDeleted) {\n return null;\n }\n return (\n \n \n navigate(Screens.ADD_TO_DO, { todoId: todo.id })}\n >\n \n \n \n \n \n {nameAndReason}\n {!!todo.dueDate && (\n \n {toLocalDateTime(moment(todo.dueDate).utc())}\n \n )}\n {!!todo.notes && {todo.notes}}\n \n {\n disablePress();\n doToggle();\n await toggleCompleteTodo(todo);\n }}\n />\n \n \n \n \n );\n};\n\nexport default TodoItem;\n\nconst AvatarContainer = styled.View`\n align-self: center;\n margin-right: ${Size.XS}px;\n`;\n\nconst StyledItem = styled(HoverCard).attrs({ hideShadow: true })`\n background-color: ${({ theme }) => theme.colors.background};\n padding: ${Size.X2_S}px;\n`;\n","import React from 'react';\nimport { Column, Row, Shimmer } from 'src/components';\nimport { IconSize, MOBILE_WIDTH_MAX, Size } from 'src/constants';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\nconst TodoItemFallback: React.FC = () => (\n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default TodoItemFallback;\n\nconst AvatarContainer = styled.View`\n align-self: center;\n margin-right: ${Size.S}px;\n`;\n\nconst StyledItem = styled(Row)`\n background-color: ${({ theme }) => theme.colors.background};\n padding: ${Size.X2_S}px;\n`;\n","import React from 'react';\nimport Svg, { G, Rect, Circle, Path, Defs, ClipPath, NumberProp } from 'react-native-svg';\n\nconst CONFETTI_IMAGE_HEIGHT = 271;\nconst CONFETTI_IMAGE_WIDTH = 393;\n\nconst Confetti: React.FC<{\n width?: NumberProp;\n height?: NumberProp;\n preserveAspectRatio?: string;\n}> = (props) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Confetti;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Subheading } from 'src/components/Text';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport Confetti from './Confetti';\n\nconst TodayPlaceholder: React.FC = () => {\n const { t } = useTranslation();\n return (\n \n \n \n \n {t('sections.allCaughtUp', { ns: 'todos' })}\n \n );\n};\n\nexport default TodayPlaceholder;\n\nconst CompleteContainer = styled.View`\n align-items: center;\n justify-content: center;\n`;\n\nconst ConfettiBackground = styled.View`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n`;\n\nconst StyledHeading = styled(Subheading)`\n margin-top: ${Size.XL}px;\n margin-bottom: ${Size.X3_L}px;\n`;\n","import React, { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutAnimation } from 'react-native';\nimport { List } from 'react-native-paper';\nimport { Body, Row, Subheading } from 'src/components';\nimport { IS_WEB, Margin, Size } from 'src/constants';\nimport { UseBooleanHook } from 'src/hooks/useBoolean';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\ninterface Props {\n title: string;\n length: number;\n boolHook: UseBooleanHook;\n fallback?: {\n shouldDisplayPlaceholder: () => boolean;\n emptyPlaceholder: ReactNode;\n };\n completed?: boolean;\n}\n\nconst AccordionSectionHeader: React.FC = ({\n title,\n length,\n boolHook,\n fallback,\n completed = false\n}) => {\n const { t } = useTranslation();\n\n if (!length && !fallback?.shouldDisplayPlaceholder()) return null;\n\n return (\n \n {t(title)}\n {!completed && (\n \n {length}\n \n )}\n \n }\n onPress={() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n boolHook.toggle();\n }}\n expanded={boolHook.value}\n >\n {(!length && fallback?.emptyPlaceholder) ?? <>}\n \n );\n};\n\nexport default AccordionSectionHeader;\n\nconst StyledAccordion = styled(List.Accordion)`\n margin-left: 0;\n padding-left: 0;\n`;\n\nconst StyledAccordionTitle = styled(Row)`\n margin-bottom: ${IS_WEB ? 0 : -Size.X3_S}px;\n`;\n\nconst Badge = styled.View`\n margin-left: ${Margin.Medium}px;\n background-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_10 : palette.BLACK_OPACITY_10};\n border-radius: ${Size.S}px;\n padding-horizontal: ${Margin.Large}px;\n padding-vertical: ${Margin.Small}px;\n`;\n","import { StyleSheet } from 'react-native';\nimport { Size } from 'src/constants';\n\nconst style = StyleSheet.create({\n round: { borderRadius: Size.L },\n closeIcon: {\n marginLeft: Size.X3_S\n },\n drawerCardStyle: { paddingTop: Size.M, paddingBottom: Size.S },\n drawerContentContainerStyle: { gap: Size.S }\n});\n\nexport default style;\n","import React, { useMemo } from 'react';\nimport { X } from 'react-native-feather';\nimport { ChipProps, TouchableRipple } from 'react-native-paper';\nimport { IconSize, Size } from 'src/constants';\nimport style from '../scenes/ToDos/ToDoList/components/style';\nimport { useHoverEffect } from 'src/hooks';\nimport { Animated, View } from 'react-native';\nimport { Body } from 'src/components';\nimport { colorShade } from 'src/utils';\nimport { palette } from 'src/theme';\nimport { isFunction } from 'lodash';\nimport { IconProps } from 'src/components/Icons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\ninterface Props extends Omit {\n label: string;\n isSelected: boolean;\n icon?: React.ReactNode | ((props: IconProps) => React.JSX.Element);\n}\nconst FilterChip: React.FC = ({ isSelected, icon: Icon, label, onPress, onClose }) => {\n const { colors } = useAppTheme();\n const [ref, animation] = useHoverEffect();\n const backgroundColor = animation.interpolate({\n inputRange: [0, 1],\n outputRange: [\n isSelected ? colors.primary : 'transparent',\n isSelected ? colorShade(colors.primary, 0.8) : palette.BLACK_OPACITY_20\n ]\n });\n\n const renderIcon = useMemo(() => {\n if (isFunction(Icon)) {\n return ;\n } else {\n return Icon;\n }\n }, [Icon, colors, isSelected]);\n\n return (\n \n \n {!!renderIcon && {renderIcon}}\n \n {label}\n \n\n {isSelected && (\n \n \n \n )}\n \n \n );\n};\n\nexport default FilterChip;\n\nconst StyledTouchable = styled(TouchableRipple)`\n border-radius: ${Size.L}px;\n overflow: hidden;\n pointer: cursor;\n`;\n\nconst AnimatedView = styled(Animated.View)`\n border-width: 0.25px;\n padding-vertical: ${Size.XS}px;\n padding-horizontal: ${Size.S}px;\n border-radius: ${Size.L}px;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: ${Size.XS}px;\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from 'react-query';\nimport { getPatients, QueryKeys } from 'src/api';\nimport { ModalDrawer, Headline, ChipContainer } from 'src/components';\nimport { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport { Size } from 'src/constants';\nimport { Patient, TodoReason } from 'src/interfaces';\nimport { ForwardRefFC } from 'src/types';\nimport styled from 'styled-components/native';\nimport Chip from '../../../../components/Chip';\nimport style from './style';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { isPatientActive } from 'src/utils';\nimport { ReasonMap } from './model';\n\ninterface Props {\n patientId: Patient['patientId'] | undefined;\n reason: TodoReason | undefined;\n onSelectFilters: (filters: {\n patientId: Patient['patientId'] | undefined;\n reason: TodoReason | undefined;\n }) => void;\n}\n\nconst FiltersDrawer: ForwardRefFC = React.forwardRef<\n ModalDrawerHandle,\n Props\n>(({ onSelectFilters, patientId: selectedPatient, reason: selectedReason }, ref) => {\n const { t } = useTranslation('todos');\n const { colors } = useAppTheme();\n\n const { data: patients = [] } = useQuery({\n queryFn: getPatients,\n queryKey: [QueryKeys.PATIENTS],\n select: (ps) => ps.filter(isPatientActive)\n });\n\n const [pet, setPet] = useState();\n const [reason, setReason] = useState();\n\n useEffect(() => {\n setPet(selectedPatient);\n }, [selectedPatient]);\n\n useEffect(() => {\n setReason(selectedReason);\n }, [selectedReason]);\n\n return (\n {\n setPet(selectedPatient);\n setReason(selectedReason);\n }}\n bottomButton={{\n onPress: () => onSelectFilters?.({ patientId: pet, reason }),\n label: t('applyFilters', { ns: 'common' })\n }}\n cardStyle={style.drawerCardStyle}\n contentContainerStyle={style.drawerContentContainerStyle}\n >\n {t('pet', { ns: 'common' })}\n \n {patients.map((patient) => (\n }\n key={patient.patientId}\n label={patient.name}\n isSelected={patient.patientId === pet}\n onClose={() => setPet(undefined)}\n onPress={() => setPet(patient.patientId)}\n />\n ))}\n \n {t('list.reason')}\n \n {Object.values(ReasonMap).map(({ value, label, color, icon: Icon }) => (\n (\n \n )}\n isSelected={reason === value}\n onClose={() => setReason(undefined)}\n onPress={() => setReason(value)}\n />\n ))}\n \n \n );\n});\n\nexport default FiltersDrawer;\n\nconst StyledHeadline = styled(Headline)`\n margin-horizontal: ${Size.M}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RefreshControl, SectionList, View } from 'react-native';\nimport { Plus } from 'react-native-feather';\nimport { ActivityIndicator, Card, Divider } from 'react-native-paper';\nimport { Alert, AnimatedFAB, Body, HoverButton, Row, Subheading } from 'src/components';\nimport { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport { DESCENDING, IconSize, IS_WEB, Margin, PAGE_LENGTH, Size } from 'src/constants';\nimport { useBoolean, useMutateTodos, useTodos, useViewMode } from 'src/hooks';\nimport { UseBooleanHook } from 'src/hooks/useBoolean';\nimport { Patient, Todo, TodoData, TodoReason } from 'src/interfaces';\nimport { Screens } from 'src/routes/stacks/screens';\nimport styled from 'styled-components/native';\nimport { IconContainer } from 'src/scenes/Appointments/AppointmentDetails/styled';\nimport { getAllTodos, QueryKeys } from 'src/api';\nimport { useQueryClient } from 'react-query';\nimport moment, { Moment } from 'moment-timezone';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport usePaginatedTodos from 'src/hooks/react-query/todos/usePaginatedTodos';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport { GuideElement, SliderElement, SLIDES, STEPS, useTourGuide } from './tour';\nimport { propSections, Section } from './model';\nimport TodoItem from './TodoItem';\nimport TodoItemFallback from './TodoItemFallback';\nimport Confetti from './Confetti';\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack';\nimport TodoStackParamList from 'src/routes/stacks/ToDoStackNavigator/ParamsList';\nimport { todoData } from './helpers';\nimport AccordionSectionHeader from './AccordionHeader';\nimport FiltersDrawer from './FiltersDrawer';\nimport { AlertHandle, AlertOption } from 'src/components/Alert';\nimport { Toast } from 'react-native-toast-message/lib/src/Toast';\n\nconst DUEDATE = 'due_date';\n\ninterface Props {\n navigation: NativeStackNavigationProp;\n}\n\nconst TodoListContent: React.FC = ({ navigation }) => {\n const { setOptions } = useNavigation();\n const { t } = useTranslation('todos');\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n const { exitTour, enabled, focusedId, updateScrollPositions } = useTourGuide();\n\n const drawerRef = useRef(null);\n const queryClient = useQueryClient();\n\n const [filters, setFilters] = useState<{\n patientId: Patient['patientId'] | undefined;\n reason: TodoReason | undefined;\n }>({ patientId: undefined, reason: undefined });\n\n const filterCount = useMemo(() => Object.values(filters).filter((v) => !!v).length, [filters]);\n\n useEffect(() => {\n setOptions({\n title: t('list.title'),\n headerRight: () => (\n \n {t('filters', { ns: 'common' })}\n {!!filterCount && ` (${filterCount})`}\n \n )\n });\n }, [setOptions, drawerRef, t, filters, filterCount, colors]);\n\n const { todos } = useTodos({\n isComplete: false,\n patientId: filters.patientId,\n reason: filters.reason\n });\n\n const {\n data: completedTodos,\n fetchNextPage,\n isFetchingNextPage,\n isLoading,\n isFetched,\n isRefetching,\n hasNextPage\n } = usePaginatedTodos({\n isComplete: true,\n column: DUEDATE,\n dir: DESCENDING,\n patientId: filters.patientId,\n reason: filters.reason,\n suspense: false\n });\n\n const controls: { [k in keyof TodoData]: UseBooleanHook } = {\n pastDue: useBoolean(true),\n today: useBoolean(true),\n scheduled: useBoolean(true),\n complete: useBoolean(true)\n };\n\n const [now, setNow] = useState(moment());\n useFocusEffect(\n useCallback(() => {\n setNow(moment());\n }, [])\n );\n\n const { value: placeholderIsVisible, toTrue: showPlaceholder } = useBoolean(true);\n\n const sectionData = useMemo(() => {\n const sections: TodoData = {\n pastDue: [],\n today: [],\n scheduled: [],\n complete: []\n };\n\n todos?.forEach((todo) => {\n if (!todo.dueDate || moment(todo.dueDate).isSame(now, 'day')) {\n sections.today.push(todo);\n } else if (moment(todo.dueDate).isBefore(now)) {\n sections.pastDue.push(todo);\n } else {\n sections.scheduled.push(todo);\n }\n });\n\n sections.complete = completedTodos;\n\n return todoData(\n enabled,\n controls.pastDue,\n controls.today,\n controls.scheduled,\n controls.complete,\n sections\n );\n }, [\n completedTodos,\n controls.complete,\n controls.pastDue,\n controls.scheduled,\n controls.today,\n enabled,\n now,\n todos\n ]);\n\n const noTodos = !todos?.length && !completedTodos.length && !enabled;\n\n const ref = useRef>(null);\n\n const { deleteTodo } = useMutateTodos();\n\n const { value: isProcessingBatchDelete, toTrue, toFalse } = useBoolean(false);\n\n const deleteAllCompleted = useCallback(async () => {\n try {\n toTrue();\n const allCompleted = (await getAllTodos(undefined, undefined, true)).data;\n await Promise.all(allCompleted.map(async (todo) => deleteTodo(todo)));\n } catch {\n Toast.show({\n type: 'error',\n text1: t('common:error'),\n text2: t('list.errorDeletingTodos')\n });\n } finally {\n await queryClient.invalidateQueries([QueryKeys.PAGED_TODOS]);\n toFalse();\n }\n }, [deleteTodo, queryClient, t, toFalse, toTrue]);\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n type: 'neutral',\n label: t('cancel')\n },\n\n {\n action: deleteAllCompleted,\n label: t('list.yesDelete')\n }\n ],\n [deleteAllCompleted, t]\n );\n\n return (\n <>\n {noTodos && }\n {noTodos && placeholderIsVisible && (\n \n \n \n {t('list.createTo')}:\n {propSections.map(({ description, icon: Icon, color }) => (\n \n \n \n \n {t(description)}\n \n ))}\n \n {!!filterCount && (\n <>\n {t('list.noTodosFound')}\n setFilters({ patientId: undefined, reason: undefined })}\n >\n {t('clearFilters', { ns: 'common' })}\n \n \n )}\n \n \n )}\n \n await queryClient.invalidateQueries([QueryKeys.TODOS])}\n />\n }\n renderSectionHeader={({ section }) => {\n return (\n <>\n \n \n \n {section.completed && section.expanded.value && !!completedTodos.length && (\n confirmModalRef.current?.alert()}>\n {t('list.deleteAll')}\n \n )}\n \n );\n }}\n renderItem={({ item, section }) =>\n section.expanded.value ? (\n }>\n \n \n ) : null\n }\n renderSectionFooter={({ section }) =>\n section.data?.length || section.fallback?.shouldDisplayPlaceholder() ? (\n \n ) : null\n }\n initialNumToRender={!IS_WEB ? PAGE_LENGTH + (todos?.length ?? 0) : undefined}\n onEndReachedThreshold={!IS_WEB ? 0 : undefined}\n onEndReached={() => {\n if (hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }}\n stickySectionHeadersEnabled={false}\n ListFooterComponent={\n <>\n {isFetchingNextPage && }\n {!hasNextPage && !isLoading && controls.complete.value && !noTodos && (\n {t('common:noMore')}\n )}\n \n }\n />\n \n setFilters(filters)}\n />\n \n {\n if (noTodos) {\n showPlaceholder();\n }\n exitTour();\n }}\n >\n }\n label={t('list.add')}\n onPress={() => navigation.navigate(Screens.ADD_TO_DO)}\n />\n \n \n \n \n \n );\n};\n\nexport default TodoListContent;\n\nconst StyledConfetti = styled(Confetti).attrs({\n preserveAspectRatio: 'xMidYMax',\n width: '100%',\n height: '75%'\n})`\n position: absolute;\n bottom: 0;\n`;\n\nconst StyledDivider = styled(Divider)<{ expanded: boolean }>`\n margin-top: ${({ expanded }) => (expanded ? Margin.Large : 0)}px;\n`;\n\nconst CreateTodoFAB = styled(AnimatedFAB).attrs(({ theme }) => ({\n color: theme.colors.onPrimary,\n iconAnchor: 'right'\n}))<{ enabled: boolean }>`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst StyledRow = styled(Row)`\n margin: ${Size.XS}px;\n gap: ${Size.XS}px;\n`;\n\nconst StyledPropCard = styled(Card)`\n margin: ${Margin.Large}px;\n border-radius: ${Size.X2_S}px;\n padding: ${Margin.Large}px;\n`;\n\nconst Empty = styled.View`\n justify-content: space-between;\n flex: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n`;\n\nconst NoMoreText = styled(Body)`\n margin: ${Size.M}px;\n text-align: center;\n`;\n\nconst LoadingNextIndicator = styled(ActivityIndicator)`\n margin: ${Size.M}px;\n`;\n\nexport const CreateToDoFabContainer = styled.View`\n position: absolute;\n right: ${({ theme }) => theme.viewMode.horizontalInset + Number(Margin.Large)}px;\n bottom: ${Margin.Large}px;\n`;\n","import moment from 'moment';\nimport { UseBooleanHook } from 'src/hooks/useBoolean';\nimport { exampleToDo, TodoData } from './model';\nimport TodayPlaceholder from './TodayPlaceholder';\nimport { STEPS } from './tour';\n\nexport const todoData = (\n tourEnabled: boolean,\n controlsPastDue: UseBooleanHook,\n controlsToday: UseBooleanHook,\n controlsScheduled: UseBooleanHook,\n controlsCompleted: UseBooleanHook,\n sections: TodoData\n) => {\n const pastDue = {\n title: 'todos:sections.pastDue',\n data: sections.pastDue,\n expanded: controlsPastDue,\n step: STEPS.PASTDUE,\n guideText: 'todos:list.tour.pastDue'\n };\n\n const today = {\n title: 'todos:sections.today',\n data: sections.today,\n expanded: controlsToday,\n step: STEPS.TODAY,\n guideText: 'todos:list.tour.today',\n fallback: {\n shouldDisplayPlaceholder: () =>\n !usePlaceholders &&\n !sections.pastDue.length &&\n !!(sections.complete.length || sections.scheduled.length),\n emptyPlaceholder: \n }\n };\n\n const scheduled = {\n title: 'todos:sections.scheduled',\n data: sections.scheduled,\n expanded: controlsScheduled,\n step: STEPS.SCHEDULED,\n guideText: 'todos:list.tour.scheduled'\n };\n\n const completed = {\n title: 'todos:sections.completed',\n data: sections.complete,\n expanded: controlsCompleted,\n step: STEPS.COMPLETED,\n guideText: 'todos:list.tour.completed',\n completed: true\n };\n\n const usePlaceholders = tourEnabled && Object.values(sections).some((section) => !section.length);\n\n if (usePlaceholders) {\n return [\n {\n ...pastDue,\n data: [{ ...exampleToDo, dueDate: moment().subtract(1, 'day').toISOString() }]\n },\n {\n ...today,\n data: [{ ...exampleToDo, dueDate: moment().toISOString() }]\n },\n {\n ...scheduled,\n data: [{ ...exampleToDo, dueDate: moment().add(1, 'day').toISOString() }]\n },\n {\n ...completed,\n data: [\n {\n ...exampleToDo,\n dueDate: moment().toISOString(),\n isComplete: true\n }\n ]\n }\n ];\n } else {\n return [pastDue, today, scheduled, completed];\n }\n};\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React from 'react';\nimport { Screens } from 'src/routes/stacks/screens';\nimport TodoStackParamList from 'src/routes/stacks/ToDoStackNavigator/ParamsList';\nimport TodoListContent from './components/TodoListContent';\nimport { TourGuide } from './components/tour';\n\ntype Props = NativeStackScreenProps;\n\nconst TodoList: React.FC = ({ navigation }) => {\n return (\n \n \n \n );\n};\n\nexport default TodoList;\n","import _ from 'lodash';\nimport { NewTodo, PeriodUnit, Todo, TodoReason } from 'src/interfaces';\nimport { AnySchema, boolean, date, mixed, number, object, string } from 'yup';\n\nexport interface FormTodo extends NewTodo {\n repeatType: RepeatType;\n}\n\nexport type FieldNames = keyof FormTodo;\n\nexport enum AlternateRepeatTypes {\n 'custom' = 'custom',\n 'none' = 'none'\n}\n\nconst repeatTypes = {\n ..._.omit(PeriodUnit, PeriodUnit.MINUTE),\n ...AlternateRepeatTypes\n};\n\nexport type RepeatType = AlternateRepeatTypes | PeriodUnit;\n\nexport const validationSchema = object>({\n id: number().optional(),\n patientId: string().required(),\n reason: mixed().oneOf(Object.values(TodoReason)).required(),\n otherReason: string()\n .nullable()\n .when('reason', {\n is: (reason: TodoReason) => reason === TodoReason.OTHER,\n then: string().required()\n }),\n notes: string().optional(),\n dueDate: date().optional().nullable(),\n repeatType: mixed().oneOf([\n AlternateRepeatTypes.custom,\n AlternateRepeatTypes.none,\n PeriodUnit.MINUTE,\n PeriodUnit.HOUR,\n PeriodUnit.DAY,\n PeriodUnit.WEEK,\n PeriodUnit.MONTH,\n PeriodUnit.YEAR\n ]),\n period: number().when('repeatType', {\n is: (type: RepeatType) => type === repeatTypes.custom,\n then: number().min(1).required()\n }),\n periodUnit: mixed().oneOf(Object.values(PeriodUnit)),\n repeatUntilDate: date().optional().nullable(),\n allowNotify: string(),\n todoAlertsAttributes: mixed(),\n isComplete: boolean().optional()\n});\n\nexport const defaultData = {\n patientId: '',\n reason: TodoReason.GIVE_MEDICATION,\n otherReason: '',\n notes: '',\n dueDate: undefined,\n period: undefined,\n allowNotify: true,\n todoAlertsAttributes: [{ alertByMinutesPrior: 0 }],\n repeatType: AlternateRepeatTypes.none,\n isComplete: false\n};\n\nexport const mapTodoToEdit = (todo: Todo): FormTodo => {\n let repeatType: RepeatType;\n if (todo.period === 1 && todo.periodUnit) {\n repeatType = todo.periodUnit;\n } else if (todo.period ?? 0 > 1) {\n repeatType = AlternateRepeatTypes.custom;\n } else {\n repeatType = AlternateRepeatTypes.none;\n todo.periodUnit = undefined;\n todo.period = undefined;\n }\n const todoAlertsAttributes = todo.todoAlertsAttributes.map((t) =>\n _.pick(t, 'alertByMinutesPrior')\n );\n return {\n ..._.pick(todo, [\n 'id',\n 'patientId',\n 'reason',\n 'otherReason',\n 'allowNotify',\n 'isComplete',\n 'notes',\n 'repeatUntilDate',\n 'dueDate',\n 'periodUnit',\n 'period'\n ]),\n repeatType,\n todoAlertsAttributes\n };\n};\n","import _ from 'lodash';\nimport moment from 'moment-timezone';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from 'react-query';\nimport { QueryKeys, getPatients } from 'src/api';\nimport { alertOptions as alertOptionsArray } from 'src/constants';\nimport { periodUnitMap, PeriodUnit } from 'src/interfaces';\nimport { isPatientActive, plural } from 'src/utils';\nimport { ReasonMap } from '../ToDoList/components/model';\nimport { AlternateRepeatTypes, FormTodo } from './helpers';\n\nconst useAddTodoOptions = (values: FormTodo) => {\n const { t, i18n } = useTranslation('todos');\n const { data: patients = [] } = useQuery([QueryKeys.PATIENTS], {\n queryFn: getPatients,\n select: (ps) => ps.filter(isPatientActive)\n });\n\n const patientOptions = useMemo(\n () =>\n patients.map((patient) => ({\n label: patient.name,\n value: patient.patientId\n })),\n [patients]\n );\n\n const reasonOptions = useMemo(\n () =>\n Object.values(ReasonMap).map((reason) => ({\n label: t(reason.label),\n value: reason.value\n })),\n [t]\n );\n\n const repeatOptions = useMemo(\n () => [\n {\n value: AlternateRepeatTypes.none,\n label: t('frequency.doNotRepeat')\n },\n ...Object.values(_.omit(periodUnitMap, PeriodUnit.MINUTE)).map((v) => ({\n value: v.value,\n label: t(v.repeatLabel)\n })),\n {\n value: AlternateRepeatTypes.custom,\n label: t('frequency.personalize')\n }\n ],\n [t]\n );\n\n const customRepeatOptions = useMemo(\n () =>\n Object.values(periodUnitMap).map((v) => ({\n value: v.value,\n label: `${t(v.unitLabel)}${plural(values.period ?? 0)}`\n })),\n [values, t]\n );\n\n const alertOptions = useMemo(\n () =>\n alertOptionsArray.map((option) => ({\n value: { alertByMinutesPrior: option },\n label: t('createTodo.humanizedBefore', {\n humanizedMoment: moment.duration(option, 'minutes').locale(i18n.language).humanize()\n })\n })),\n [t, i18n]\n );\n\n return {\n alertOptions,\n customRepeatOptions,\n repeatOptions,\n reasonOptions,\n patientOptions\n };\n};\n\nexport default useAddTodoOptions;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\n\nexport enum STEPS {\n BASIC,\n DUE_DATE,\n NOTIFY,\n ALERT\n}\n\nconst AddToDoTourMap: TourMap = {\n [STEPS.BASIC]: { id: STEPS.BASIC, priority: 0 },\n [STEPS.DUE_DATE]: { id: STEPS.DUE_DATE, priority: 1 },\n [STEPS.NOTIFY]: { id: STEPS.NOTIFY, priority: 2 },\n [STEPS.ALERT]: { id: STEPS.ALERT, priority: 3 }\n};\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.ADD_TO_DO,\n AddToDoTourMap\n);\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { useFormik } from 'formik';\nimport _ from 'lodash';\nimport moment from 'moment-timezone';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View, ScrollView } from 'react-native';\nimport { Trash2 } from 'react-native-feather';\nimport { ActivityIndicator, Checkbox } from 'react-native-paper';\nimport { Toast } from 'react-native-toast-message/lib/src/Toast';\nimport { useQuery } from 'react-query';\nimport { QueryKeys, getTodo } from 'src/api';\nimport {\n Body,\n Column,\n Row,\n Title,\n Caption,\n StyledMasterView,\n DiscardChangesModal,\n Alert,\n AlertHandle\n} from 'src/components';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { DatePicker, HoverButton, TextInput, TimePicker } from 'src/components/kit';\nimport DropDown from 'src/components/kit/DropDown';\nimport { Margin, NOTIFICATIONS_SUPPORTED, STROKE_WIDTH_DEFAULT, Size } from 'src/constants';\nimport useMutateTodos from 'src/hooks/react-query/todos/useMutateTodos';\nimport { EditTodo, PeriodUnit, TodoReason } from 'src/interfaces';\nimport { useNotification } from 'src/providers/NotificationProvider';\nimport { Screens } from 'src/routes/stacks/screens';\nimport TodoStackParamList from 'src/routes/stacks/ToDoStackNavigator/ParamsList';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport { validationSchema, mapTodoToEdit, defaultData, FieldNames, FormTodo } from './helpers';\nimport useAddTodoOptions from './useAddTodoOptions';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS, TourGuide } from './tour';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\n\ntype Props = NativeStackScreenProps;\n\nconst AddTodoScreen: React.FC = ({ route, navigation }) => {\n const todoId = route.params?.todoId;\n const { t } = useTranslation('todos');\n const { colors } = useAppTheme();\n const { openNotificationSettings, notify } = useNotification();\n\n const { createTodo, editTodo, deleteTodo } = useMutateTodos();\n const alertHandle = useRef(null);\n const {\n values,\n errors,\n handleSubmit,\n setFieldValue,\n initialValues,\n resetForm,\n dirty,\n submitCount,\n isSubmitting\n } = useFormik({\n initialValues: defaultData,\n validateOnBlur: true,\n validationSchema,\n onSubmit: async (values, { resetForm }) => {\n if (todo) {\n const union = _.unionBy(\n todo.todoAlertsAttributes,\n values.todoAlertsAttributes,\n 'alertByMinutesPrior'\n );\n const cleaned = union.map((alert) => ({\n ...alert,\n _destroy: !values.todoAlertsAttributes.find(\n (newAlert) => newAlert.alertByMinutesPrior === alert.alertByMinutesPrior\n )\n }));\n\n const newTodo: EditTodo = {\n ...todo,\n ...values,\n todoAlertsAttributes: cleaned\n };\n\n await editTodo(newTodo);\n } else {\n await createTodo(values);\n }\n navigation.goBack();\n }\n });\n\n const { data: todo, isFetched } = useQuery({\n staleTime: Infinity,\n cacheTime: Infinity,\n queryKey: [QueryKeys.TODO, todoId],\n queryFn: async () => !!todoId && (await getTodo(todoId)),\n enabled: !!todoId,\n retry: false,\n onError: () => {\n Toast.show({\n text1: t('createTodo.todoNotFoundText1'),\n text2: t('createTodo.todoNotFoundText2'),\n type: 'error'\n });\n navigation.setParams({ todoId: undefined });\n }\n });\n\n useEffect(() => {\n navigation.setOptions({\n headerRight: () =>\n todo ? (\n \n \n \n ) : null\n });\n }, [deleteTodo, navigation, todo, colors]);\n\n useEffect(() => {\n if (todo) {\n const values = mapTodoToEdit(todo);\n resetForm({ values });\n }\n }, [todo, resetForm]);\n\n const { alertOptions, customRepeatOptions, repeatOptions, reasonOptions, patientOptions } =\n useAddTodoOptions(values);\n\n const rightProps = useCallback(\n (fieldName: FieldNames) =>\n !!values[fieldName] && {\n name: 'undo',\n onPress: async () =>\n await setFieldValue(\n fieldName,\n values[fieldName] !== initialValues[fieldName] ? initialValues[fieldName] : undefined\n )\n },\n [values, initialValues, setFieldValue]\n );\n\n const debouncedSubmit = useMemo(() => _.debounce(() => handleSubmit()), [handleSubmit]);\n\n const ref = useRef(null);\n\n if (todoId && !isFetched) {\n return ;\n }\n\n return (\n \n \n {({ exitTour }) => (\n <>\n \n \n \n <>\n await setFieldValue('patientId', patientId)}\n error={!!errors.patientId}\n />\n await setFieldValue('reason', reason)}\n error={!!errors.reason}\n />\n {values.reason === TodoReason.OTHER && (\n \n await setFieldValue('otherReason', otherReason)\n }\n error={!!errors.otherReason}\n />\n )}\n await setFieldValue('notes', notes)}\n multiline\n clearButtonMode='always'\n error={!!errors.notes}\n />\n \n \n \n \n \n {\n if (!date) {\n void setFieldValue('dueDate', undefined);\n } else if (values.dueDate) {\n void setFieldValue(\n 'dueDate',\n moment(values.dueDate).set(date).toISOString()\n );\n } else {\n const now = moment();\n void setFieldValue(\n 'dueDate',\n moment(date)\n .set({\n h: now.hours(),\n m: now.minutes()\n })\n .toISOString()\n );\n }\n }}\n />\n \n {!!values.dueDate && (\n \n {\n if (values.dueDate) {\n const date = moment(values.dueDate).startOf('day');\n void setFieldValue('dueDate', date.add(time).toISOString());\n }\n }}\n error={!!errors.dueDate}\n />\n \n )}\n \n \n\n {!!values.dueDate && (\n {\n await setFieldValue('repeatType', value);\n if (value === 'none') {\n await setFieldValue('periodUnit', undefined);\n await setFieldValue('period', undefined);\n } else if (value === 'custom') {\n if (!values.periodUnit) {\n await setFieldValue('periodUnit', PeriodUnit.DAY);\n await setFieldValue('period', 1);\n }\n } else {\n await setFieldValue('periodUnit', value);\n await setFieldValue('period', 1);\n }\n }}\n />\n )}\n {!!values.dueDate && values.repeatType === 'custom' && (\n \n \n {\n if (!isNaN(parseInt(text))) {\n void setFieldValue('period', parseInt(text));\n } else {\n void setFieldValue('period', 0);\n }\n }}\n keyboardType={'decimal-pad'}\n error={!!errors.period}\n />\n \n \n {\n void setFieldValue('periodUnit', value);\n }}\n />\n \n \n )}\n {!!values.dueDate && values.repeatType !== 'none' && (\n \n \n {\n if (!date) {\n void setFieldValue('repeatUntilDate', undefined);\n } else if (values.repeatUntilDate) {\n void setFieldValue(\n 'repeatUntilDate',\n moment(values.repeatUntilDate).set(date).toISOString()\n );\n } else {\n const now = moment();\n void setFieldValue(\n 'repeatUntilDate',\n moment(date)\n .set({\n h: now.hours(),\n m: now.minutes()\n })\n .toISOString()\n );\n }\n }}\n />\n \n {!!values.repeatUntilDate && (\n \n {\n if (values.repeatUntilDate) {\n const date = moment(values.repeatUntilDate).startOf('day');\n void setFieldValue('repeatUntilDate', date.add(time).toISOString());\n }\n }}\n error={!!errors.repeatUntilDate}\n />\n \n )}\n \n )}\n\n \n \n {t('createTodo.alerts')}\n \n \n \n <>\n {t('createTodo.notifyMe')}\n {\n const next = !values.allowNotify;\n void setFieldValue('allowNotify', next);\n void setFieldValue(\n 'todoAlertsAttributes',\n next ? [{ alertByMinutesPrior: 0 }] : []\n );\n }}\n status={values.allowNotify && !!values.dueDate ? 'checked' : 'unchecked'}\n color={colors.primary}\n />\n \n \n \n \n {NOTIFICATIONS_SUPPORTED && notify !== 1 && (\n openNotificationSettings()}>\n {t('createTodo.alertsWontDisplay')}\n \n )}\n {!NOTIFICATIONS_SUPPORTED && (\n \n \n {t('createTodo.notificationsNotSupported')}\n \n \n )}\n \n setFieldValue('todoAlertsAttributes', values)}\n />\n \n \n \n \n \n {t('submit', { ns: 'common' })}\n \n \n \n {!!todo && (\n {\n await deleteTodo(todo);\n navigation.goBack();\n },\n type: 'destructive'\n }\n ]}\n title={t('createTodo.deletePrompt')}\n ref={alertHandle}\n />\n )}\n \n )}\n \n \n );\n};\n\nexport default AddTodoScreen;\n\nconst StyledWarningContainer = styled.Pressable`\n border-radius: ${Size.X3_S}px;\n border: 1px solid ${({ theme }) => theme.colors.warn};\n padding: ${Margin.Medium}px;\n justify-content: center;\n`;\n\nconst StyledActivityIndicator = styled(ActivityIndicator)`\n flex: 1;\n`;\n\nconst StickyButtonMasterView = styled(StyledMasterView)`\n ${({ theme: { viewMode: isWeb } }) =>\n isWeb\n ? `\n flex-grow: 1;\n justify-content: flex-end;\n padding: ${Margin.Small}px;\n `\n : ''}\n`;\n\nconst StyledScrollView = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n flexGrow: 1,\n marginHorizontal: theme.viewMode.horizontalInset,\n gap: Margin.Small,\n padding: Margin.Small\n }\n}))`\n flex-grow: 1;\n`;\n\nconst StyledRow = styled(Row)`\n gap: ${Margin.Small}px;\n`;\n","import { createStackNavigator } from '@react-navigation/stack';\nimport React from 'react';\nimport { FocusAwareStatusBar } from 'src/components';\nimport TodoList from 'src/scenes/ToDos/ToDoList';\nimport AddTodoScreen from 'src/scenes/ToDos/AddTodo';\nimport { Screens } from '../screens';\nimport TodoStackParamList from './ParamsList';\nimport { useTranslation } from 'react-i18next';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\n\nconst ToDoStack = createStackNavigator();\n\nconst TodoStackNavigator: React.FC = () => {\n const { t } = useTranslation('todos');\n const themedHeader = useDefaultStackOptions();\n return (\n <>\n \n \n \n ({\n title: t(props.route.params?.todoId ? 'createTodo.titleEdit' : 'createTodo.titleCreate')\n })}\n />\n \n \n );\n};\n\nexport default TodoStackNavigator;\n","import moment from 'moment';\nimport { Patient, Request } from 'src/interfaces';\nimport _ from 'lodash';\nimport { RequestWithPatient } from './model';\n\nexport interface RequestFilterCriteria {\n patientId?: Patient['patientId'];\n fromDate?: string;\n toDate?: string;\n status?: RequestWithPatient['status'];\n type?: RequestWithPatient['type'];\n sortBy?: keyof Request;\n sortOrder?: SortOrder;\n}\nexport enum SortOrder {\n ASC = 'asc',\n DESC = 'desc'\n}\n\ntype Filter = (requests: RequestWithPatient[]) => RequestWithPatient[];\n\nexport const filterRequests = (\n requests: RequestWithPatient[],\n criteria: RequestFilterCriteria = { sortBy: 'createdAt', sortOrder: SortOrder.DESC }\n): RequestWithPatient[] => {\n const filters: Filter[] = [];\n\n if (criteria.patientId) {\n filters.push((requests) => _.filter(requests, { patientId: criteria.patientId }));\n }\n if (criteria.fromDate) {\n filters.push((requests) =>\n _.filter(requests, (request) => moment(request.createdAt).isSameOrAfter(criteria.fromDate))\n );\n }\n if (criteria.toDate) {\n filters.push((requests) =>\n _.filter(requests, (request) => moment(request.createdAt).isSameOrBefore(criteria.toDate))\n );\n }\n if (criteria.status) {\n filters.push((requests) => _.filter(requests, { status: criteria.status }));\n }\n if (criteria.type) {\n filters.push((requests) => _.filter(requests, { type: criteria.type }));\n }\n\n if (criteria.sortBy) {\n filters.push((requests) => _.orderBy(requests, criteria.sortBy, criteria.sortOrder));\n }\n\n return filters.reduce((requests, filter) => filter(requests), [...requests]);\n};\n","import React, { useEffect } from 'react';\nimport { RequestFilterCriteria, SortOrder } from '../helper/requestFilter';\nimport ModalDrawer, { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport { ForwardRefFC } from 'src/types';\nimport { useTranslation } from 'react-i18next';\nimport style from 'src/scenes/ToDos/ToDoList/components/style';\nimport { Body, ChipContainer, DatePicker, DropDown, Headline } from 'src/components';\nimport { QueryKeys, getPatients } from 'src/api';\nimport { isPatientActive } from 'src/utils';\nimport { useQuery } from 'react-query';\nimport Chip from 'src/components/Chip';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport styled from 'styled-components/native';\nimport { Margin, Size } from 'src/constants';\nimport { RequestStatus, RequestType, Request } from 'src/interfaces';\nimport moment from 'moment';\n\ninterface Props {\n filters: RequestFilterCriteria;\n setFilters: (filters: RequestFilterCriteria) => void;\n}\n\nconst RequestsFilterDrawer: ForwardRefFC = React.forwardRef<\n ModalDrawerHandle,\n Props\n>(({ filters, setFilters }, ref) => {\n const { t } = useTranslation('requests');\n const [localFilters, setLocalFilters] = React.useState(filters);\n useEffect(() => {\n setLocalFilters(filters);\n }, [filters]);\n\n const { data: patients = [] } = useQuery({\n queryFn: getPatients,\n queryKey: [QueryKeys.PATIENTS],\n select: (ps) => ps.filter(isPatientActive)\n });\n\n const [sortByOptions, sortOrderOptions] = React.useMemo(() => {\n return [\n SORT_BY_OPTIONS.map((option) => ({ ...option, label: t(option.label) })),\n SORT_ORDER_OPTIONS.map((option) => ({ ...option, label: t(option.label) }))\n ];\n }, [t]);\n\n return (\n {\n setLocalFilters(filters);\n }}\n bottomButton={{\n onPress: () => {\n setFilters(localFilters);\n },\n label: t('common:applyFilters')\n }}\n cardStyle={style.drawerCardStyle}\n contentContainerStyle={style.drawerContentContainerStyle}\n >\n {t('common:filters')}\n {t('common:pet')}\n \n {patients.map((patient) => (\n }\n key={patient.patientId}\n label={patient.name}\n isSelected={patient.patientId === localFilters.patientId}\n onClose={() => setLocalFilters((prev) => ({ ...prev, patientId: undefined }))}\n onPress={() => setLocalFilters((prev) => ({ ...prev, patientId: patient.patientId }))}\n />\n ))}\n \n {t('filters.type')}\n \n {Object.values(RequestType).map((type) => (\n setLocalFilters((prev) => ({ ...prev, type: undefined }))}\n onPress={() => setLocalFilters((prev) => ({ ...prev, type }))}\n />\n ))}\n \n {t('filters.status')}\n \n {Object.values(RequestStatus).map((s) => (\n setLocalFilters((prev) => ({ ...prev, status: undefined }))}\n onPress={() => setLocalFilters((prev) => ({ ...prev, status: s }))}\n />\n ))}\n \n {t('filters.date')}\n \n \n setLocalFilters((prev) => ({\n ...prev,\n fromDate: fromDate ? moment(fromDate).format('YYYY-MM-DD') : undefined\n }))\n }\n validRange={{\n endDate: localFilters.toDate ? new Date(localFilters.toDate) : undefined\n }}\n />\n \n setLocalFilters((prev) => ({\n ...prev,\n toDate: toDate ? moment(toDate).format('YYYY-MM-DD') : undefined\n }))\n }\n validRange={{\n startDate: localFilters.fromDate ? new Date(localFilters.fromDate) : undefined\n }}\n />\n \n {t('filters.sort')}\n \n \n setLocalFilters((prev) => ({ ...prev, sortBy }))}\n />\n \n \n setLocalFilters((prev) => ({ ...prev, sortOrder }))}\n />\n \n \n \n );\n});\n\nexport default RequestsFilterDrawer;\n\nconst StyledHeadline = styled(Headline)`\n padding-left: ${Size.L}px;\n`;\n\nconst StyledSubheading = styled(Body)`\n padding-left: ${Size.L}px;\n`;\n\nconst Row = styled.View`\n flex-direction: row;\n padding-horizontal: ${Size.L}px;\n gap: ${Margin.Small}px;\n`;\n\nconst StyledDatePicker = styled(DatePicker)`\n flex: 1;\n`;\n\ninterface SortByOption {\n label: string;\n value: keyof Request;\n}\nconst SORT_BY_OPTIONS: SortByOption[] = [\n { label: 'filters.createdAt', value: 'createdAt' },\n { label: 'filters.updatedAt', value: 'updatedAt' },\n { label: 'filters.patient', value: 'patient' },\n { label: 'filters.type', value: 'type' },\n { label: 'filters.status', value: 'status' }\n];\n\nconst SORT_ORDER_OPTIONS = [\n { label: 'filters.asc', value: SortOrder.ASC },\n { label: 'filters.desc', value: SortOrder.DESC }\n];\n\nconst StyledDropdownContainer = styled.View`\n flex: 1;\n`;\n","import { RequestStatus } from 'src/interfaces';\nimport { RequestSectionList, RequestWithPatient } from './model';\nimport _ from 'lodash';\n\nconst partitionRequests = (requests: RequestWithPatient[]) => {\n const sections: RequestSectionList[] = [];\n\n const [archived, nonArchived]: RequestWithPatient[][] = _(requests)\n .sortBy((request) => request.createdAt)\n .reverse()\n .partition((request) => request.status === RequestStatus.Archived)\n .value();\n if (nonArchived.length) {\n sections.push({ title: 'sectionTitles.newAndInProgress', data: nonArchived });\n }\n if (archived.length) {\n sections.push({ title: 'sectionTitles.archived', data: archived });\n }\n\n return sections;\n};\n\nexport default partitionRequests;\n","import { useNavigation } from '@react-navigation/native';\nimport React, { useMemo } from 'react';\nimport { Plus } from 'react-native-feather';\nimport { FAB } from 'react-native-paper';\nimport { IconSize } from 'src/constants';\nimport { useRequestSetting, useViewMode } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { palette } from 'src/theme';\nimport { styles } from './styles';\nimport { layout } from 'src/theme/globalStyles';\nimport { requestActions } from './helper';\n\ninterface Props {\n open: boolean;\n setOpen: React.Dispatch>;\n}\n\nconst RequestWizardFAB: React.FC = ({ open, setOpen }) => {\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n const { navigate } = useNavigation();\n const { requestAppointment } = useRequestSetting();\n\n const style = useMemo(() => {\n return styles(colors, horizontalInset);\n }, [colors, horizontalInset]);\n\n const { data: requestSettings } = useRequestSetting();\n\n const actions = useMemo(\n () => requestActions(requestSettings, navigate, requestAppointment, style, colors.onPrimary),\n [colors.onPrimary, navigate, requestAppointment, requestSettings, style]\n );\n\n return (\n (\n \n )}\n actions={actions}\n onStateChange={() => setOpen(!open)}\n />\n );\n};\n\nexport default RequestWizardFAB;\n","import { StyleSheet } from 'react-native';\nimport { IS_ANDROID, IS_WEB, Margin, Size } from 'src/constants';\nimport { FontSize } from 'src/theme';\nimport { AppColors } from 'src/types/paper';\n\nconst BUTTON_WIDTH = 175;\n\nexport const styles = (colors: AppColors, horizontalInset: number) =>\n StyleSheet.create({\n actionStyle: {\n backgroundColor: colors.primary,\n marginRight: horizontalInset\n },\n labelStyle: {\n color: colors.onPrimary,\n fontSize: FontSize.BODY,\n alignSelf: 'center',\n paddingVertical: Size.X4_S\n },\n containerStyle: {\n backgroundColor: colors.primary,\n borderRadius: Size.X4_L,\n width: BUTTON_WIDTH\n },\n fabStyle: {\n backgroundColor: colors.primary,\n marginHorizontal: horizontalInset + Margin.Large,\n height: Size.X3_L,\n width: Size.X3_L,\n borderRadius: Size.X3_L,\n bottom: IS_WEB || IS_ANDROID ? 0 : -Size.XL,\n paddingTop: IS_WEB ? Size.X3_S : 0\n }\n });\n","import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport { t } from 'i18next';\nimport { Size } from 'src/constants';\nimport { Patient, RequestSetting } from 'src/interfaces/api';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { FontSize } from 'src/theme';\nimport { openWebBrowser } from 'src/utils';\n\ninterface ActionStyle {\n actionStyle: {\n backgroundColor: string;\n marginRight: number;\n };\n labelStyle: {\n color: string;\n fontSize: FontSize;\n alignSelf: 'center';\n paddingVertical: Size;\n };\n containerStyle: {\n backgroundColor: string;\n borderRadius: Size;\n width: number;\n };\n}\n\nexport const requestActions = (\n requestSettings: RequestSetting | undefined,\n navigate: NavigationProp['navigate'],\n requestAppointment: (patientId?: Patient['patientId']) => void,\n style: ActionStyle,\n color: string\n) => {\n if (!requestSettings) return [];\n const baseAction = {\n style: style.actionStyle,\n labelStyle: style.labelStyle,\n containerStyle: style.containerStyle,\n color\n };\n const actions = [\n {\n ...baseAction,\n icon: 'human',\n label: t('requests:wizard.updateMyInfo'),\n onPress: () => navigate(Navigators.MAIN_STACK, { screen: Screens.PROFILE_INFORMATION_UPDATE })\n },\n {\n ...baseAction,\n icon: 'paw',\n label: t('requests:wizard.updatePetInfo'),\n onPress: () =>\n navigate(Navigators.MAIN_STACK, {\n screen: Navigators.PATIENT_UPDATE_STACK_NAVIGATOR\n })\n }\n ];\n\n if (!requestSettings?.appointmentRequestsDisabled) {\n actions.push({\n ...baseAction,\n icon: 'calendar',\n label: t('requests:wizard.newAppointment'),\n onPress: () => requestAppointment()\n });\n }\n\n if (!requestSettings?.refillRequestsDisabled) {\n actions.push({\n ...baseAction,\n icon: 'package',\n label: t('requests:wizard.productRequest'),\n onPress: () => {\n if (requestSettings?.refillRequestOverride && requestSettings?.refillRequestOverrideUrl) {\n openWebBrowser(requestSettings.refillRequestOverrideUrl);\n } else {\n navigate(Screens.REQUESTS_PRODUCT);\n }\n }\n });\n }\n\n return actions;\n};\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Inbox } from 'react-native-feather';\nimport { IS_WEB, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst InboxHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default InboxHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Size.X2_L}px;\n padding-bottom: ${Size.X3_L}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport InboxHero from './components/InboxHero';\n\nexport enum STEPS {\n DRAWER,\n NEW_AND_IN_PROGRESS,\n ARCHIVED,\n PLUS\n}\n\nconst RequestsTourMap: TourMap = {\n [STEPS.DRAWER]: { id: STEPS.DRAWER, priority: 0 },\n [STEPS.NEW_AND_IN_PROGRESS]: { id: STEPS.NEW_AND_IN_PROGRESS, priority: 1 },\n [STEPS.ARCHIVED]: { id: STEPS.ARCHIVED, priority: 2 },\n [STEPS.PLUS]: { id: STEPS.PLUS, priority: 3 }\n};\n\nexport const SLIDES: SlideItem[] = [\n {\n title: 'requests:tour.slide.title',\n body: 'requests:tour.slide.body',\n image: \n }\n];\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.REQUESTS,\n RequestsTourMap\n);\n","import { HoverCard } from 'src/components';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const Container = styled(HoverCard)`\n padding: ${Margin.Medium}px;\n flex-direction: row;\n gap: ${Margin.Medium}px;\n`;\n\nexport const StatusContainer = styled.View`\n flex: 0 1 auto\n align-items: flex-end;\n justify-content: center;\n`;\n\nexport const FabContainer = styled.View`\n position: absolute;\n right: ${({ theme }) => theme.viewMode.horizontalInset + Number(Margin.Large)}px;\n bottom: ${Margin.Large}px;\n`;\n","import React from 'react';\nimport { Shimmer } from 'src/components';\nimport {\n DataContainer,\n CaptionContainer\n} from 'src/scenes/Appointments/AppointmentsRoot/components';\nimport { StatusContainer, Container } from './style';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ICON_SIZE } from '../constants';\n\nconst ARBITRARY_STATUS_WIDTH = 50;\nconst SuspenseRequestItem: React.FC = () => {\n const { roundness } = useAppTheme();\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\nexport default SuspenseRequestItem;\n","export const ICON_SIZE = 64;\n","import { Request, RequestType } from 'src/interfaces';\n\n/*\n * Get the name of the individual that this request is targeted for\n * @param request - Request\n * @returns the name of the request's target\n */\nexport const getRequestTargetName = (request: Request) =>\n request.type === RequestType.InfoUpdate\n ? request?.patient?.name ?? 'requests:requestFields:myself'\n : request.patient?.name ?? request.content?.petName ?? 'requests:requestFields:unknown';\n","import React from 'react';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport moment from 'moment';\nimport { useTranslation } from 'react-i18next';\nimport { Body, Caption } from 'src/components';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport ClientAvatar from 'src/components/ClientAvatar';\nimport { usePractice } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport RequestStackParamList from 'src/routes/stacks/RequestStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport {\n DataContainer,\n CaptionContainer\n} from 'src/scenes/Appointments/AppointmentsRoot/components';\nimport { toLocalDateTime } from 'src/utils';\nimport { StatusContainer, Container } from './style';\nimport { ICON_SIZE } from '../constants';\nimport { getRequestTargetName } from 'src/utils/requests';\nimport { RequestWithPatient } from '../helper/model';\n\ninterface Props {\n request: RequestWithPatient;\n}\n\nconst RequestItem: React.FC = ({ request }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('requests');\n const { navigate } = useNavigation>();\n\n const isForPatient = !!request.patient;\n const patientInfo = request.notOwner ? undefined : request.patient;\n\n const targetName = t(getRequestTargetName(request));\n\n const { data: practice } = usePractice();\n\n return (\n navigate(Screens.REQUEST_DETAILS, { requestId: request.id })}>\n {isForPatient && }\n {!isForPatient && }\n \n \n {targetName}\n \n \n {t(`type.${request.type}`)}\n \n \n \n {toLocalDateTime(moment(request.createdAt), practice?.timeZone)}\n \n \n \n \n {t(`status.${request.status}`)}\n \n \n );\n};\n\nexport default RequestItem;\n","import { AnimatedFAB, Body, Headline, HoverCard, MiniHeroIcon } from 'src/components';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const SectionTitle = styled(Headline)`\n padding-vertical: ${Margin.Medium}px;\n`;\n\nexport const SectionHeaderContainer = styled.View`\n justify-content: stretch;\n gap: ${Margin.Large}px;\n`;\n\nexport const NoRequestText = styled(Body)`\n text-align: center;\n`;\n\nexport const EmptyListCard = styled(HoverCard)`\n padding: ${Margin.Large}px;\n gap: ${Margin.Large}px;\n`;\n\nexport const StyledHeroIcon = styled(MiniHeroIcon)`\n margin: ${Margin.Medium}px;\n`;\n\nexport const SurfaceText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nexport const FabContainer = styled.View`\n position: absolute;\n right: ${({ theme }) => theme.viewMode.horizontalInset + Number(Margin.Large)}px;\n bottom: ${Margin.Large}px;\n`;\n\nexport const DummyFAB = styled(AnimatedFAB).attrs(({ theme }) => ({\n color: theme.colors.onPrimary,\n iconAnchor: 'right'\n}))<{ enabled: boolean }>`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n","import React, { Suspense, useMemo } from 'react';\nimport { RefreshControl, SectionList, View } from 'react-native';\nimport { GuideElement, STEPS, useTourGuide } from '../tour';\nimport { QueryObserverResult, RefetchOptions, RefetchQueryFilters } from 'react-query';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Margin } from 'src/constants';\nimport { Headline, HoverButton, Row } from 'src/components';\nimport SuspenseRequestItem from './SuspenseRequestItem';\nimport RequestItem from './RequestItem';\nimport { useTranslation } from 'react-i18next';\nimport { useViewMode } from 'src/hooks';\nimport {\n EmptyListCard,\n NoRequestText,\n SectionHeaderContainer,\n SectionTitle,\n StyledHeroIcon\n} from '../styles';\nimport { Inbox } from 'react-native-feather';\nimport { RequestFilterCriteria } from '../helper/requestFilter';\nimport { AppointmentRequest, RequestStatus, RequestType } from 'src/interfaces';\nimport moment from 'moment';\nimport { dummyPatient } from 'src/scenes/ToDos/ToDoList/components/model';\n\ninterface Props {\n data: any;\n isFetched: boolean;\n isRefetching: boolean;\n refetch: (\n options?: (RefetchOptions & RefetchQueryFilters) | undefined\n ) => Promise>;\n setOpen: React.Dispatch>;\n setFilters: React.Dispatch>;\n filterCount: number;\n}\n\nconst RequestList: React.FC = ({\n data,\n isFetched,\n isRefetching,\n refetch,\n setOpen,\n setFilters,\n filterCount\n}) => {\n const { t } = useTranslation('requests');\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n\n const { enabled: isTouring } = useTourGuide();\n\n const tourDummyData = useMemo(() => {\n const request: AppointmentRequest = {\n type: RequestType.Appointment,\n patient: dummyPatient,\n patientId: dummyPatient.patientId,\n content: {\n preferredDate: moment().add(1, 'day').utc().toISOString(),\n preferredTime: '12:00pm'\n }\n };\n return [\n {\n title: 'sectionTitles.newAndInProgress',\n tourBody: 'tour.newAndInProgress',\n step: STEPS.NEW_AND_IN_PROGRESS,\n data: [{ ...request, status: RequestStatus.New }]\n },\n {\n title: 'sectionTitles.archived',\n tourBody: 'tour.archived',\n step: STEPS.ARCHIVED,\n data: [{ ...request, status: RequestStatus.Archived }]\n }\n ];\n }, []);\n\n return (\n \n }\n style={{ flex: 1 }}\n contentContainerStyle={{\n gap: Margin.Medium,\n padding: Margin.Medium,\n marginHorizontal: horizontalInset\n }}\n sections={isTouring ? tourDummyData : data}\n stickySectionHeadersEnabled={false}\n renderSectionHeader={({ section: { index, title, step, tourBody, data } }) => (\n \n \n \n {t(title)}\n {!!filterCount && (\n setFilters({})} compact>\n {t('common:clearFilters')}\n \n )}\n \n {!!filterCount && !data.length && {t('noResults')}}\n \n \n )}\n renderItem={({ item }) => (\n }>\n \n \n )}\n ListEmptyComponent={() => (\n \n \n {t('noRequests.title')}\n {t('noRequests.description')}\n \n setOpen(true)}>\n {t('noRequests.cta')}\n \n \n \n )}\n />\n );\n};\n\nexport default RequestList;\n","import { useQuery } from 'react-query';\nimport { QueryKeys, getPatients, getRequests } from 'src/api';\nimport { ActivityIndicator } from 'react-native';\nimport { useTranslation } from 'react-i18next';\n\nimport { isDefined, queryClient } from 'src/utils';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { RequestFilterCriteria, filterRequests } from './helper/requestFilter';\nimport RequestsFilterDrawer from './components/RequestsFilterDrawer';\nimport { ModalDrawerHandle } from 'src/components/ModalDrawer';\nimport { useNavigation } from '@react-navigation/native';\nimport { HoverButton } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport partitionRequests from './helper/partitionRequests';\nimport type { RequestSectionList, RequestWithPatient } from './helper/model';\nimport RequestWizardFAB from '../RequestWizardFAB';\nimport { Patient } from 'src/interfaces';\nimport { GuideElement, SliderElement, SLIDES, STEPS, TourGuide } from './tour';\nimport RequestList from './components/RequestList';\nimport { DummyFAB, FabContainer } from './styles';\nimport { Plus } from 'react-native-feather';\nimport _ from 'lodash';\n\nconst FALLBACK_DATA: RequestSectionList[] = [];\nconst Requests: React.FC = () => {\n const { t } = useTranslation('requests');\n const { colors } = useAppTheme();\n const [filters, setFilters] = useState({});\n const [open, setOpen] = useState(false);\n\n const {\n data = FALLBACK_DATA,\n isRefetching,\n refetch,\n isFetched\n } = useQuery({\n queryKey: [QueryKeys.REQUESTS, filters],\n queryFn: async () => {\n const data = await getRequests();\n const patients =\n (await queryClient.getQueryData([QueryKeys.PATIENTS])) ?? (await getPatients());\n const prepData: RequestWithPatient[] = data.map((request) => {\n const patient = patients.find((patient) => patient.patientId === request.patientId);\n if (patient) {\n return { ...request, patient, notOwner: false };\n }\n return { ...request, notOwner: true };\n });\n if (Object.values(filters).filter(isDefined).length > 0) {\n return [{ title: 'sectionTitles.results', data: filterRequests(prepData, filters) }];\n } else {\n return partitionRequests(prepData);\n }\n }\n });\n\n const filterCount = Object.values(filters).filter(isDefined).length;\n const { setOptions } = useNavigation();\n const filterRef = useRef(null);\n const showFilter = useCallback(() => filterRef.current?.show(), []);\n useEffect(() => {\n setOptions({\n headerRight: () => (\n \n {t('common:filters')}\n {!!filterCount && ` (${filterCount})`}\n \n )\n });\n }, [setOptions, t, colors, filters, filterCount, showFilter]);\n\n if (!isFetched) {\n return ;\n }\n\n return (\n \n \n {({ exitTour, enabled }) => (\n <>\n \n \n \n {!enabled && }\n {enabled && (\n \n \n }\n label={''}\n onPress={() => _.noop}\n />\n \n \n )}\n \n )}\n \n \n );\n};\n\nexport default Requests;\n","export const CLIENT_UPDATE_KNOWN_FIELDS = [\n 'name',\n 'address',\n 'cellPhone',\n 'workPhone',\n 'homePhone',\n 'email'\n] as const;\n\nexport const PET_UPDATE_KNOWN_FIELDS = [\n 'name',\n 'birthdate',\n 'breed',\n 'microchip',\n 'rabies',\n 'sex',\n 'weight',\n 'insuranceProvider',\n 'policyNumber',\n 'diet',\n 'medicalConditions',\n 'comments'\n] as const;\n\nexport const KNOWN_FIELDS = [...CLIENT_UPDATE_KNOWN_FIELDS, ...PET_UPDATE_KNOWN_FIELDS] as const;\n","import { camelCase, mapKeys } from 'lodash';\nimport type {\n InfoUpdateItem,\n InfoUpdateRequest,\n InfoUpdateRequestContent\n} from 'src/interfaces/api/InfoUpdateRequest';\nimport { DetailItem, KnownField } from './model';\nimport { KNOWN_FIELDS } from './constants';\nimport { Icon } from 'react-native-vector-icons/Icon';\nimport FontAwesome6 from 'react-native-vector-icons/FontAwesome6';\nimport MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';\n\nconst isInfoUpdateItem = (\n item: T | InfoUpdateRequestContent\n): item is T => {\n return (item as T).dataType !== undefined;\n};\n\nconst generateInfoUpdateData = (request: InfoUpdateRequest): DetailItem[] => {\n const updateContent: InfoUpdateItem[] = [];\n\n if (isInfoUpdateItem(request.content)) {\n updateContent.push({\n dataType: request.content.dataType,\n newValue: request.content.newValue || 'requestFields.removed'\n });\n }\n\n request.content.informationUpdates?.forEach((e) => {\n const entry = mapKeys(e, (value, key) => camelCase(key)) as unknown as InfoUpdateItem;\n if (!entry.dataType) return;\n updateContent.push({\n dataType: entry.dataType,\n newValue: entry.newValue || 'requestFields.removed'\n });\n });\n\n return updateContent.map((update) => {\n const camelized = camelCase(update.dataType);\n const knownFieldIndex = KNOWN_FIELDS.indexOf(camelized as KnownField);\n if (knownFieldIndex !== -1) {\n return {\n title: `requestFields.${camelized}` ?? '',\n value: update.newValue,\n ...KNOWN_FIELD_MAP[KNOWN_FIELDS[knownFieldIndex]]\n };\n }\n return {\n title: update.dataType ?? '',\n value: update.newValue,\n icon: undefined\n };\n });\n};\n\nexport default generateInfoUpdateData;\n\nexport const KNOWN_FIELD_MAP: Record<\n KnownField,\n { icon: string; altIcon?: Omit }\n> = {\n name: { icon: 'user' },\n address: { icon: 'home' },\n cellPhone: { icon: 'mobile-alt' },\n workPhone: { icon: 'monitor-cellphone', altIcon: MaterialCommunityIcons },\n homePhone: { icon: 'phone-classic', altIcon: MaterialCommunityIcons },\n email: { icon: 'envelope' },\n birthdate: { icon: 'birthday-cake' },\n breed: { icon: 'certificate' },\n microchip: { icon: 'id-badge', altIcon: FontAwesome6 },\n rabies: { icon: 'shield-virus' },\n sex: { icon: 'venus-mars' },\n weight: { icon: 'weight-scale', altIcon: FontAwesome6 },\n insuranceProvider: { icon: 'file-medical' },\n policyNumber: { icon: 'file-alt' },\n diet: { icon: 'utensils' },\n medicalConditions: { icon: 'stethoscope' },\n comments: { icon: 'comment' }\n};\n","import { capitalize } from 'lodash';\nimport { AppointmentRequestContent, PreferredContactMethod } from 'src/interfaces';\nimport { toLocalDate } from 'src/utils';\nimport { DetailItem } from './model';\nimport moment from 'moment';\n\nconst generateAppointmentData = (content: AppointmentRequestContent): DetailItem[] => [\n {\n title: 'requestFields.appointmentType',\n value: content.appointmentType ?? '',\n icon: 'list-alt'\n },\n {\n title: 'requestFields.preferredDate',\n value: content.preferredDate ? toLocalDate(moment(content.preferredDate)) : '',\n icon: 'calendar-check'\n },\n {\n title: 'requestFields.preferredTime',\n value: content.preferredTime ?? '',\n icon: 'clock'\n },\n {\n title: 'requestFields.withWhom',\n value: content.column ?? '',\n icon: 'user'\n },\n {\n title: 'requestFields.preferredContactMethod',\n value: capitalize(content.preferredContactMethod ?? ''),\n icon: contactMethodIcon(content.preferredContactMethod)\n }\n];\n\nexport default generateAppointmentData;\n\nconst contactMethodIcon = (method?: PreferredContactMethod) => {\n switch (method) {\n case PreferredContactMethod.Email:\n return 'envelope';\n case PreferredContactMethod.Phone:\n return 'phone';\n case PreferredContactMethod.Text:\n return 'sms';\n default:\n return 'question';\n }\n};\n","import { RefillRequestContent } from 'src/interfaces/api/RefillRequest';\nimport { DetailItem } from './model';\n\nconst generateRefillData = (content: RefillRequestContent): DetailItem[] => [\n {\n title: 'requestFields.refill',\n value: content.refill ?? '',\n icon: 'prescription-bottle-alt'\n },\n {\n title: 'requestFields.quantity',\n value: content.quantity.toString() ?? '',\n icon: 'hashtag'\n },\n {\n title: 'requestFields.comments',\n value: content.comments ?? '',\n icon: 'comments'\n }\n];\n\nexport default generateRefillData;\n","import { Request, RequestStatus } from 'src/interfaces';\nimport { DetailItem } from './model';\nimport moment from 'moment';\nimport { toLocalDateTime } from 'src/utils';\nimport Entypo from 'react-native-vector-icons/Entypo';\nimport { getRequestTargetName } from 'src/utils/requests';\n\nconst generateStandardData = (data: Request): DetailItem[] => [\n {\n title: 'requestLabels.createdAt',\n value: toLocalDateTime(moment(data.createdAt)),\n icon: 'calendar'\n },\n {\n title: 'requestLabels.type',\n value: `type.${data.type}`,\n icon: 'clipboard-list'\n },\n {\n title: 'requestLabels.for',\n value: getRequestTargetName(data),\n icon: data.patient ? 'paw' : 'user'\n },\n {\n title: 'requestLabels.status',\n value: `status.${data.status}`,\n ...statusName(data.status)\n }\n];\n\nexport default generateStandardData;\n\nconst statusName = (status: RequestStatus) => {\n switch (status) {\n case RequestStatus.New:\n return {\n altIcon: Entypo,\n icon: 'new'\n };\n case RequestStatus.InProgress:\n return {\n altIcon: Entypo,\n icon: 'progress-two'\n };\n\n case RequestStatus.Archived:\n return {\n altIcon: Entypo,\n icon: 'archive'\n };\n }\n};\n","import { RequestType, type Request } from 'src/interfaces';\nimport type { DetailItem } from './model';\nimport generateInfoUpdateData from './generateInfoUpdateData';\n\nimport generateAppointmentData from './generateAppointmentData';\nimport generateRefillData from './generateRefillData';\nimport generateStandardData from './generateStandardData';\n\nconst normalizeRequestData = (data: Request): DetailItem[] => {\n const details: DetailItem[] = [];\n details.push(...generateStandardData(data));\n switch (data.type) {\n case RequestType.Appointment:\n details.push(...generateAppointmentData(data.content));\n break;\n case RequestType.Refill:\n details.push(...generateRefillData(data.content));\n break;\n case RequestType.InfoUpdate:\n details.push(...generateInfoUpdateData(data));\n break;\n }\n return details.filter((detail) => !!detail.value);\n};\n\nexport default normalizeRequestData;\n","export { default as generateInfoUpdateData } from './generateInfoUpdateData';\nexport { default as normalizeRequestData } from './normalizeRequestData';\nexport * from './constants';\nexport type * from './model';\n\nexport const labelShimmerWidth = (index: number) => 100 + ((10 * index) % 33);\nexport const valueShimmerWidth = (index: number) => 250 + ((20 * index) % 44);\n\nexport const PLACEHOLDER_COUNT = 8;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { times } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { FlatList, LayoutAnimation, RefreshControl } from 'react-native';\nimport { useQuery } from 'react-query';\nimport { QueryKeys, getRequest } from 'src/api';\nimport { Body, Shimmer, Caption } from 'src/components';\nimport { Margin, Size } from 'src/constants';\nimport { usePractice, useViewMode } from 'src/hooks';\n\nimport RequestStackParamList from 'src/routes/stacks/RequestStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport {\n normalizeRequestData,\n labelShimmerWidth,\n valueShimmerWidth,\n PLACEHOLDER_COUNT\n} from './helper';\nimport FontAwesome5Icon from 'react-native-vector-icons/FontAwesome5';\n\ntype Props = NativeStackScreenProps;\n\nconst RequestDetails: React.FC = ({ route }) => {\n const { requestId = 0 } = route.params ?? {};\n const { horizontalInset } = useViewMode();\n const { t } = useTranslation('requests');\n const {\n data: { requests = [], attachments = [] } = {},\n isLoading,\n isFetched,\n refetch,\n isError\n } = useQuery({\n queryKey: [QueryKeys.REQUESTS, requestId],\n queryFn: async () => {\n const data = await getRequest(requestId);\n const requests = normalizeRequestData(data);\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n return { requests, attachments: data.images };\n },\n suspense: false,\n enabled: !!requestId\n });\n\n const { data: practice } = usePractice();\n\n if (!isFetched) {\n return (\n \n {times(PLACEHOLDER_COUNT, (index) => (\n \n \n \n \n ))}\n \n );\n }\n return (\n }\n data={requests}\n contentContainerStyle={{\n marginHorizontal: horizontalInset,\n gap: Margin.Large,\n padding: Margin.Large\n }}\n renderItem={({ item: { icon, altIcon: AltIcon = FontAwesome5Icon, ...item } }) => (\n \n {t(item.title)}\n \n {icon && (\n \n \n \n )}\n {t(item.value === null ? 'requestFields.removed' : item.value)}\n \n \n )}\n ListFooterComponent={() => {\n if (!attachments.length) {\n return null;\n }\n return (\n <>\n {t('requestFields.attachments')}\n {attachments.map((attachment) => (\n \n \n \n ))}\n \n );\n }}\n ListEmptyComponent={() =>\n isError && (\n \n {t('requestDetailError', { practiceName: practice?.name })}\n \n )\n }\n />\n );\n};\n\nexport default RequestDetails;\n\nconst PlaceholderView = styled.View`\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px\n padding: ${Margin.Large}px;\n gap: ${Margin.Large}px;\n`;\n\nconst DetailContainer = styled.View`\n gap: ${Margin.Large}px;\n`;\n\nconst IndentedValue = styled.View`\n flex-direction: row;\n margin-left: ${Margin.Large}px;\n gap: ${Margin.Medium}px;\n`;\n\nconst CenteredText = styled(Body)`\n text-align: center;\n vertical-align: center;\n`;\n\nconst ImageHolder = styled.View`\n width: 33%;\n padding: ${Size.X2_S}px;\n aspect-ratio: 1;\n`;\n\nconst Image = styled.Image`\n width: 100%;\n height: 100%;\n border-radius: ${({ theme }) => theme.roundness}px;\n`;\n","import { createStackNavigator } from '@react-navigation/stack';\nimport React from 'react';\nimport { FocusAwareStatusBar } from 'src/components';\nimport { Screens } from '../screens';\nimport RequestStackParamList from './ParamsList';\nimport { useTranslation } from 'react-i18next';\nimport Requests from 'src/scenes/Requests';\nimport RequestDetails from 'src/scenes/RequestDetails';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\n\nconst RequestStack = createStackNavigator();\n\nconst RequestStackNavigator: React.FC = () => {\n const { t } = useTranslation('requests');\n const themedHeader = useDefaultStackOptions();\n return (\n <>\n \n \n \n ({\n title: t('requestDetailTitle')\n })}\n />\n \n \n );\n};\n\nexport default RequestStackNavigator;\n","import React from 'react';\nimport { Text } from 'react-native-paper';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\ninterface Props {\n label: string;\n}\n\nconst RouteLabel: React.FC = ({ label }) => {\n return {label};\n};\n\nexport default RouteLabel;\n\nconst StyledTabLabel = styled(Text)`\n margin-horizontal: -${Size.X2_S}px;\n color: ${({ theme }) => theme.colors.onPrimary};\n text-align: center;\n font-size: ${Size.XS};\n`;\n","import * as React from 'react';\n\nimport { createBottomTabNavigator } from '@react-navigation/bottom-tabs';\nimport { Navigators } from '../navigators';\nimport { HomeStackNavigator } from '../HomeStackNavigator';\nimport { AppointmentsStackNavigator } from '../AppointmentStackNavigator';\nimport { LoyaltyStackNavigator } from '../LoyaltyTabNavigator';\nimport { useAbility } from 'src/hooks/react-query';\nimport { transparent } from 'src/utils';\nimport { Size } from 'src/constants';\nimport { PatientStackNavigator } from '../PatientStackNavigator';\nimport ToDoStackNavigator from '../ToDoStackNavigator';\nimport useTodos from 'src/hooks/react-query/todos/useTodos';\nimport { useState } from 'react';\nimport moment from 'moment-timezone';\nimport { AlertBadge } from 'src/components';\nimport BottomTabParamsList from './ParamsList';\nimport { Calendar, House, Trophy, Paw, AlarmClock } from 'src/components/kit/ABIcons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Inbox } from 'react-native-feather';\nimport RequestStackNavigator from '../RequestStackNavigator';\nimport { BottomNavigation } from 'react-native-paper';\nimport { CommonActions } from '@react-navigation/native';\nimport RouteLabel from './RouteLabel';\n\nconst TabNavigator = createBottomTabNavigator();\n\nexport const BottomTabNavigator: React.FC = () => {\n const { userCanViewLoyalty } = useAbility();\n const { colors } = useAppTheme();\n\n const [todoAlert, setTodoAlert] = useState(false);\n useTodos({\n isComplete: false,\n onFetchSuccess: (todos) => {\n const dueNow = todos?.some((todo) => moment(todo.dueDate).isBefore() || !todo.dueDate);\n setTodoAlert(dueNow);\n }\n });\n\n return (\n ({\n headerShown: false,\n cardStyle: { backgroundColor: colors.background },\n tabBarIcon: ({ color }) => {\n switch (route.name) {\n case Navigators.HOME_STACK:\n return ;\n case Navigators.APPOINTMENTS_STACK:\n return ;\n case Navigators.LOYALTY_STACK:\n return ;\n case Navigators.PET_STACK:\n return ;\n case Navigators.TODO_STACK:\n return (\n \n \n \n );\n case Navigators.REQUEST_STACK:\n return ;\n default:\n return null;\n }\n }\n })}\n tabBar={({ navigation, state, descriptors, insets }) => (\n {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true\n });\n\n if (event.defaultPrevented) {\n preventDefault();\n } else {\n navigation.dispatch({\n ...CommonActions.navigate(route.name, route.params),\n target: state.key\n });\n }\n }}\n renderIcon={({ route, focused, color }) => {\n const { options } = descriptors[route.key];\n if (options.tabBarIcon) {\n return options.tabBarIcon({ focused, color, size: Size.M });\n }\n\n return null;\n }}\n renderLabel={({ route }) => }\n />\n )}\n >\n \n \n \n {userCanViewLoyalty && (\n \n )}\n \n \n \n );\n};\n\nexport default BottomTabNavigator;\n","import moment from 'moment-timezone';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { IconSize, Margin } from 'src/constants';\nimport { usePatient } from 'src/hooks';\nimport { Weight } from 'src/theme';\nimport styled from 'styled-components/native';\nimport { Row } from '../common';\nimport PatientAvatar from '../PatientAvatar';\nimport { Body } from '../Text';\nimport { HoverButton } from '../kit';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Patient } from 'src/interfaces';\nimport { toLocalShortDate } from 'src/utils';\n\ninterface Props {\n sourceId: number;\n patientId: string;\n description: string;\n dateLabel: string;\n date: Date;\n overdue?: boolean;\n actionCondition?: (patient?: Patient) => boolean;\n action?:\n | {\n label: string;\n onPress: () => void;\n }\n | false;\n}\n\nconst PatientRowItem: React.FC = ({\n sourceId,\n patientId,\n description,\n dateLabel,\n date,\n overdue,\n action,\n actionCondition = () => true\n}) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('home');\n\n const { data: patient } = usePatient(patientId);\n\n const dateText = useMemo(() => {\n return toLocalShortDate(moment.utc(date));\n }, [date]);\n\n const daysPastDue = useMemo(() => {\n const numberOfDaysOverdue = overdue ? moment().diff(moment(date), 'days') : null;\n if (!numberOfDaysOverdue) return null;\n\n return `${numberOfDaysOverdue} ${numberOfDaysOverdue > 1 ? t('days') : t('day')}`;\n }, [date, overdue, t]);\n\n return (\n \n \n \n {patient?.name}\n \n {description}\n \n \n {`${dateLabel}: `}\n {dateText}\n {overdue && (\n {t('overdue', { ns: 'common', daysPastDue })}\n )}\n \n \n {action && actionCondition(patient) && (\n \n {action.label}\n \n )}\n \n );\n};\nexport default PatientRowItem;\n\nconst Container = styled.View`\n background-color: ${({ theme }) => theme.colors.surface}\n flex-direction: row;\n padding-vertical: ${Margin.Medium}px;\n padding-right: ${Margin.Small}px;\n border-bottom-width: 0.5px;\n border-bottom-color: ${({ theme }) => theme.colors.disabled};\n`;\n\nconst Avatar = styled(PatientAvatar)`\n margin-horizontal: ${Margin.Small}px;\n align-self: center;\n`;\n\nconst DataContainer = styled.View`\n flex: 1;\n`;\n","import { useMemo } from 'react';\nimport { useInfiniteQuery, UseInfiniteQueryOptions } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getPaginatedReminders } from 'src/api/reminders/getPaginatedReminders';\nimport { PAGE_LENGTH, PATIENT_STATUSES } from 'src/constants';\nimport { Patient, Reminder } from 'src/interfaces';\nimport { getNextPageParam, PaginationRS } from 'src/utils';\n\ninterface Options\n extends Omit<\n UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n >,\n 'queryFn' | 'queryKey'\n > {\n limit?: number;\n selectedPatientId: Patient['patientId'] | undefined;\n}\n\nexport const remindersOptions: (\n limit?: number\n) => UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n> = (limit = PAGE_LENGTH) => ({\n queryKey: [QueryKeys.PAGINATED_REMINDERS],\n queryFn: async ({ pageParam = 0 }) => {\n return getPaginatedReminders({\n start: pageParam * limit,\n length: PAGE_LENGTH,\n status: PATIENT_STATUSES.ACTIVE,\n order: 'asc',\n orderBy: 'pastDueDate'\n });\n },\n getNextPageParam: (...options) => getNextPageParam(...options, limit),\n suspense: true\n});\n\nconst usePaginatedReminders = ({ selectedPatientId, limit = PAGE_LENGTH, ...options }: Options) => {\n const {\n data: rawData,\n refetch,\n hasNextPage,\n fetchNextPage,\n isLoading,\n isFetching,\n isFetchingNextPage,\n ...rest\n } = useInfiniteQuery({\n ...remindersOptions(limit),\n ...options\n });\n\n const reminders = useMemo(() => {\n const data =\n rawData?.pages?.reduce((prev, current) => [...prev, ...current.data], []) ?? [];\n return data.filter(({ patientId }) => !selectedPatientId || selectedPatientId === patientId);\n }, [rawData, selectedPatientId]);\n\n return {\n isLoading,\n isFetching,\n isFetchingNextPage,\n hasNextPage,\n data: reminders,\n fetchNextPage,\n refetch,\n ...rest\n };\n};\n\nexport default usePaginatedReminders;\n","import { endpoint, PATIENT_STATUSES } from 'src/constants';\nimport { Reminder } from 'src/interfaces';\nimport { isDefinedOrThrowServerError, PaginationRS } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport interface PaginatedRemindersParams {\n length?: number;\n start?: number;\n order?: 'asc' | 'desc';\n orderBy?: keyof Pick;\n status?: PATIENT_STATUSES;\n}\n\nexport const getPaginatedReminders = async ({\n status,\n order,\n orderBy,\n ...params\n}: PaginatedRemindersParams): Promise> => {\n const response = await apiClient.get>(endpoint('REMINDERS'), {\n params: {\n ...params,\n status_filter: status ?? Object.values(PATIENT_STATUSES),\n order: {\n column: orderBy,\n dir: order\n },\n server_managed: true\n }\n });\n return isDefinedOrThrowServerError(response.data);\n};\n","import { useEffect } from 'react';\nimport { FetchNextPageOptions, InfiniteQueryObserverResult } from 'react-query';\nimport { PaginationRS } from 'src/utils';\nimport useBoolean from './useBoolean';\n\nconst useFetchNextPage = (\n hasNextPage: boolean | undefined,\n isFetched: boolean,\n fetchNextPage: (\n options?: FetchNextPageOptions\n ) => Promise, unknown>>\n) => {\n const { value: toggle, setValue: setToggle } = useBoolean();\n\n useEffect(() => {\n if (hasNextPage && isFetched) {\n void fetchNextPage();\n }\n }, [fetchNextPage, hasNextPage, isFetched, toggle]);\n\n return { setToggle };\n};\n\nexport default useFetchNextPage;\n","import moment from 'moment-timezone';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FlatList, RefreshControl, View } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Subheading } from 'src/components';\nimport PatientRowItem from 'src/components/PatientRowItem';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport usePaginatedReminders from 'src/hooks/react-query/usePaginatedReminders';\nimport useFetchNextPage from 'src/hooks/useFetchNextPage';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\nconst FilteredReminders: React.FC = () => {\n const { t } = useTranslation('patientProfile');\n const { windowHeight, horizontalInset } = useViewMode();\n const { colors } = useAppTheme();\n\n const { selectedPatient } = useSelectedPatient();\n\n const {\n data: reminders,\n isLoading,\n isFetched,\n isRefetching,\n refetch,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage\n } = usePaginatedReminders({\n selectedPatientId: selectedPatient?.patientId,\n suspense: false\n });\n\n const { setToggle } = useFetchNextPage(hasNextPage, isFetched, fetchNextPage);\n\n if (!isRefetching && isFetched && !reminders.length) {\n return (\n \n {t('noReminders')}\n \n );\n }\n\n return (\n \n }\n ListEmptyComponent={}\n renderItem={({ item }) => (\n \n )}\n onEndReached={() => setToggle((prev) => !prev)}\n ListFooterComponent={\n \n {isFetchingNextPage && }\n {!isLoading && !hasNextPage && !isFetchingNextPage && (\n \n {selectedPatient\n ? t('noRemindersFor', { petName: selectedPatient?.name })\n : t('noMoreReminders')}\n \n )}\n \n }\n />\n );\n};\n\nexport default FilteredReminders;\n\nconst ListFooterContainer = styled.View`\n margin: ${Margin.Large}px;\n`;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { Margin } from 'src/constants';\nimport { SelectedPatientProvider } from 'src/providers/SelectedPatientProvider';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport PatientSelector from '../../components/PatientSelector';\nimport FilteredReminders from './FilteredReminders';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ntype Props = NativeStackScreenProps;\n\nconst Reminders: React.FC = ({ route }) => {\n const { t } = useTranslation('patientProfile');\n const { colors } = useAppTheme();\n\n return (\n <>\n \n \n \n \n \n }>\n \n \n \n \n \n );\n};\n\nexport default Reminders;\n\nconst StatusbarOffset = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n padding-bottom: ${Margin.Small}px;\n`;\n","import { useMemo } from 'react';\nimport { useInfiniteQuery, UseInfiniteQueryOptions } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { getPaginatedPrescriptions } from 'src/api/prescriptions/getPaginatedPrescriptions';\nimport { PAGE_LENGTH, PATIENT_STATUSES } from 'src/constants';\nimport { Patient, Prescription } from 'src/interfaces';\nimport { getNextPageParam, PaginationRS } from 'src/utils';\n\ninterface Options\n extends Omit<\n UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n >,\n 'queryFn' | 'queryKey'\n > {\n limit?: number;\n selectedPatientId?: Patient['patientId'];\n}\n\nexport const prescriptionsOptions: (\n limit?: number\n) => UseInfiniteQueryOptions<\n PaginationRS,\n unknown,\n PaginationRS,\n PaginationRS,\n QueryKeys[]\n> = (limit = PAGE_LENGTH) => ({\n queryKey: [QueryKeys.PAGINATED_PRESCRIPTIONS],\n queryFn: async ({ pageParam = 0 }) => {\n return getPaginatedPrescriptions({\n start: pageParam * limit,\n length: PAGE_LENGTH,\n status: PATIENT_STATUSES.ACTIVE,\n order: 'desc',\n orderBy: 'prescribedAt'\n });\n },\n getNextPageParam: (...options) => getNextPageParam(...options, limit),\n suspense: true\n});\n\nconst usePaginatedPrescriptions = ({\n selectedPatientId,\n limit = PAGE_LENGTH,\n ...options\n}: Options) => {\n const {\n data: rawData,\n refetch,\n hasNextPage,\n fetchNextPage,\n isLoading,\n isFetching,\n isFetchingNextPage,\n ...rest\n } = useInfiniteQuery({\n ...prescriptionsOptions(limit),\n ...options\n });\n\n const prescriptions = useMemo(() => {\n const data =\n rawData?.pages?.reduce((prev, current) => [...prev, ...current.data], []) ??\n [];\n return data.filter(({ patientId }) => !selectedPatientId || selectedPatientId === patientId);\n }, [rawData, selectedPatientId]);\n\n return {\n isLoading,\n isFetching,\n isFetchingNextPage,\n hasNextPage,\n data: prescriptions,\n fetchNextPage,\n refetch,\n ...rest\n };\n};\n\nexport default usePaginatedPrescriptions;\n","import { endpoint, PATIENT_STATUSES } from 'src/constants';\nimport { Prescription } from 'src/interfaces';\nimport { isDefinedOrThrowServerError, PaginationRS } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport interface PaginatedPrescriptionsParams {\n length?: number;\n start?: number;\n order?: 'asc' | 'desc';\n orderBy?: keyof Pick;\n status?: PATIENT_STATUSES;\n}\n\nexport const getPaginatedPrescriptions = async ({\n status,\n order,\n orderBy,\n ...params\n}: PaginatedPrescriptionsParams): Promise> => {\n const response = await apiClient.get>(endpoint('PRESCRIPTIONS'), {\n params: {\n ...params,\n status_filter: status ?? Object.values(PATIENT_STATUSES),\n order: {\n column: orderBy,\n dir: order\n },\n server_managed: true\n }\n });\n return isDefinedOrThrowServerError(response.data);\n};\n","import React, { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FlatList, RefreshControl, View } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Subheading } from 'src/components';\nimport PatientRowItem from 'src/components/PatientRowItem';\nimport RefillModal, { RefillModalHandle } from 'src/components/RefillModal';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport { useRequestSetting } from 'src/hooks/react-query';\nimport usePaginatedPrescriptions from 'src/hooks/react-query/usePaginatedPrescriptions';\nimport useFetchNextPage from 'src/hooks/useFetchNextPage';\nimport { Patient } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useSelectedPatient } from 'src/providers/SelectedPatientProvider';\nimport { layout } from 'src/theme/globalStyles';\nimport { isPatientActive, isPrescriptionValid } from 'src/utils';\nimport styled from 'styled-components/native';\n\nconst FilteredPrescriptions: React.FC = () => {\n const { t } = useTranslation('patientProfile');\n const { horizontalInset, windowHeight } = useViewMode();\n const { colors } = useAppTheme();\n\n const { selectedPatient } = useSelectedPatient();\n\n const {\n data: prescriptions,\n isLoading,\n isFetched,\n isRefetching,\n refetch,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage\n } = usePaginatedPrescriptions({\n selectedPatientId: selectedPatient?.patientId,\n suspense: false\n });\n\n const refillModalRef = useRef(null);\n\n const { data: requestSettings } = useRequestSetting();\n\n const actionCondition = (p?: Patient) =>\n isPatientActive(p) && !requestSettings?.refillRequestsDisabled;\n\n const { setToggle } = useFetchNextPage(hasNextPage, isFetched, fetchNextPage);\n\n if (!isRefetching && isFetched && !prescriptions.length) {\n return selectedPatient ? (\n \n \n {t('noPrescriptionsFor', { petName: selectedPatient?.name })}\n \n \n ) : (\n \n {t('noPrescriptions')}\n \n );\n }\n\n return (\n <>\n \n }\n ListEmptyComponent={}\n renderItem={({ item }) => (\n refillModalRef.current?.request?.(item)\n }\n }\n />\n )}\n onEndReached={() => setToggle((prev) => !prev)}\n ListFooterComponent={\n \n {isFetchingNextPage && }\n {!isLoading && !hasNextPage && !isFetchingNextPage && (\n \n {selectedPatient\n ? t('noPrescriptionsFor', { petName: selectedPatient?.name })\n : t('noMorePrescriptions')}\n \n )}\n \n }\n />\n \n \n );\n};\n\nexport default FilteredPrescriptions;\n\nconst ListFooterContainer = styled.View`\n margin: ${Margin.Large}px;\n`;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { FocusAwareStatusBar } from 'src/components';\nimport PatientSelector from 'src/components/PatientSelector';\nimport { Margin } from 'src/constants';\nimport { SelectedPatientProvider } from 'src/providers/SelectedPatientProvider';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport FilteredPrescriptions from './FilteredPrescriptions';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { SafeAreaView } from 'react-native-safe-area-context';\n\ntype Props = NativeStackScreenProps;\n\nconst Prescriptions: React.FC = ({ route }) => {\n const { t } = useTranslation('patientProfile');\n const { colors } = useAppTheme();\n return (\n <>\n \n \n \n \n \n \n }>\n \n \n \n \n \n );\n};\n\nexport default Prescriptions;\n\nconst StatusbarOffset = styled.View`\n background-color: ${({ theme }) => theme.colors.primary};\n padding-bottom: ${Margin.Small}px;\n`;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst X: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default X;\n","import React, { Fragment, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Icon from 'react-native-vector-icons/MaterialCommunityIcons';\nimport {\n Facebook,\n Globe,\n Instagram,\n Mail,\n MapPin,\n MessageSquare,\n Phone\n} from 'react-native-feather';\nimport { mask } from 'react-native-mask-text';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { Body, FocusAwareStatusBar, HoverCard, Subheading } from 'src/components';\nimport { IconSize, Margin, PHONE_MASK, Size, TWO_WAY_TEXTING } from 'src/constants';\nimport { usePractice, usePracticeConfiguration } from 'src/hooks/react-query';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport {\n makePhoneCall,\n openEmail,\n openMaps,\n openSMS,\n openWebBrowser,\n simpleAddressFormatter\n} from 'src/utils';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport X from 'src/components/Icons/X';\n\ninterface DisplayData {\n icon: React.ReactNode;\n label: string;\n value: string;\n onPress: () => void;\n}\n\nconst ContactUs: React.FC = () => {\n const { t } = useTranslation('contactUs');\n const { colors } = useAppTheme();\n\n const { data: practiceConfiguration } = usePracticeConfiguration();\n const practice = practiceConfiguration?.practice;\n\n const { data: practiceInfo } = usePractice();\n\n const hasTwoWayTexting = useMemo(() => {\n return !!practice?.selectedFeatures?.find((feature) => feature === TWO_WAY_TEXTING);\n }, [practice?.selectedFeatures]);\n\n const displayData = useMemo(\n () =>\n [\n !!practice?.phoneNumber && {\n icon: ,\n value: mask(practice.phoneNumber, PHONE_MASK),\n label: t('phone', { ns: 'common' }),\n onPress: () => makePhoneCall(practice.phoneNumber)\n },\n !!practice?.smsNumber &&\n hasTwoWayTexting && {\n icon: ,\n value: mask(practice?.smsNumber, PHONE_MASK),\n label: t('sms'),\n onPress: () => openSMS(practice.smsNumber)\n },\n !!practice?.email && {\n icon: ,\n value: practice.email,\n label: t('emailLink'),\n onPress: async () => openEmail(practice.email)\n },\n !!practice && {\n icon: ,\n value: simpleAddressFormatter(practice),\n label: t('address', { ns: 'common' }),\n onPress: async () => await openMaps(simpleAddressFormatter(practice), practice.name)\n },\n !!practiceInfo?.website && {\n icon: ,\n value: practiceInfo.website,\n label: t('website'),\n onPress: () => openWebBrowser(practiceInfo.website)\n },\n !!practiceConfiguration?.onlinePharmacyLink && {\n icon: ,\n value: practiceConfiguration?.onlinePharmacyLink,\n label: t('onlinePharmacyLink'),\n onPress: () => openWebBrowser(practiceConfiguration?.onlinePharmacyLink)\n },\n !!practiceConfiguration?.facebookLink && {\n icon: ,\n value: practiceConfiguration?.facebookLink,\n label: t('facebookLink'),\n onPress: () => openWebBrowser(practiceConfiguration?.facebookLink)\n },\n !!practiceConfiguration?.instagramLink && {\n icon: ,\n value: practiceConfiguration?.instagramLink,\n label: t('instagramLink'),\n onPress: () => openWebBrowser(practiceConfiguration?.instagramLink)\n },\n !!practiceConfiguration?.twitterLink && {\n icon: ,\n value: practiceConfiguration?.twitterLink,\n label: t('twitterLink'),\n onPress: () => openWebBrowser(practiceConfiguration?.twitterLink)\n }\n ].filter((d) => d) as DisplayData[],\n [\n colors.primary,\n hasTwoWayTexting,\n practice,\n practiceConfiguration?.facebookLink,\n practiceConfiguration?.instagramLink,\n practiceConfiguration?.onlinePharmacyLink,\n practiceConfiguration?.twitterLink,\n practiceInfo?.website,\n t\n ]\n );\n return (\n <>\n \n \n \n {displayData.map(({ value, icon, label, onPress }) => (\n \n \n \n \n {icon}\n \n {value}\n \n \n \n \n ))}\n \n \n \n );\n};\n\nexport default ContactUs;\n\nconst Container = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: { marginHorizontal: theme.viewMode.horizontalInset }\n}))`\n flex: 1;\n padding: ${Margin.Medium}px;\n background-color: ${({ theme }) => theme.colors.surface};\n`;\n\nconst IconContainer = styled.View`\n width: ${IconSize.XS}px\n height: ${IconSize.XS}px\n align-items: center;\n justify-content: center;\n margin-right: ${Size.XS}px;\n`;\n\nconst Label = styled(Subheading)`\n margin-top: ${Size.S}px;\n margin-bottom: ${Size.X3_S}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst StyledRow = styled.View`\n flex-direction: row;\n align-items: center;\n`;\n\nconst PressableRow = styled(HoverCard).attrs({ hideShadow: true })`\n padding-vertical: ${Size.S}px;\n`;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Image } from 'react-native';\nimport { useTranslation } from 'react-i18next';\nimport { mask } from 'react-native-mask-text';\nimport { Body, HoverCard, Row } from 'src/components';\nimport { IconSize, Margin, PHONE_MASK, Size } from 'src/constants';\nimport { cleanUrl, openMaps } from 'src/utils';\nimport styled from 'styled-components/native';\nimport makePhoneCall from 'src/utils/makePhoneCall';\nimport { MapPin, Phone } from 'react-native-feather';\nimport { Weight } from 'src/theme';\nimport EmergencyContact from 'src/interfaces/api/EmergencyContact';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n practice: EmergencyContact;\n}\n\nconst AfterHoursContactCard: React.FC = ({ practice }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('afterHours');\n const [aspectRatio, setAspectRatio] = useState(0);\n\n const url = useMemo(() => {\n return practice.image?.urls?.original ? cleanUrl(practice.image.urls.original) : undefined;\n }, [practice]);\n\n useEffect(() => {\n if (url) {\n Image.getSize(url, (width, height) => {\n setAspectRatio(width / height);\n });\n }\n }, [url]);\n\n return (\n \n {!!url && (\n \n )}\n makePhoneCall(practice.phone)}>\n \n \n \n \n \n {t('callNow')}\n {mask(practice.phone, PHONE_MASK)}\n \n \n \n await openMaps(practice.address, practice.name)}>\n \n \n \n \n \n {t('getDirections')}\n {practice.address}\n \n \n \n {practice.instructions}\n \n );\n};\n\nexport default AfterHoursContactCard;\n\nconst Container = styled.View`\n background-color: ${({ theme }) => theme.colors.surface};\n`;\n\nconst PracticeImage = styled.Image<{ aspectRatio: number }>`\n width: 100%;\n aspect-ratio: ${({ aspectRatio }) => aspectRatio};\n`;\n\nconst ActionButton = styled(HoverCard).attrs({ hideShadow: true })`\n padding-horizontal: ${Size.X2_S}px;\n padding-vertical: ${Size.S}px;\n`;\n\nconst Column = styled.View`\n flex-direction: column;\n flex: 1;\n`;\n\nconst SectionTitle = styled(Body)`\n margin-bottom: ${Size.X3_S}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst SectionValue = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst StyledRow = styled(Row)`\n align-items: flex-start;\n`;\n\nconst IconContainer = styled.View`\n width: ${IconSize.XS}px\n height: ${IconSize.XS}px\n align-items: center;\n justify-content: center;\n margin-top: ${Size.X4_S}px;\n margin-right: ${Size.XS}px;\n`;\n\nconst Instructions = styled(Body)`\n margin-vertical: ${Margin.Large}px;\n margin-horizontal: ${Margin.Large}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React from 'react';\nimport { LayoutAnimation, Pressable } from 'react-native';\nimport { ChevronDown, ChevronUp } from 'react-native-feather';\nimport { Subheading } from 'src/components';\nimport { IS_IOS, Margin, Size } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport EmergencyContact from 'src/interfaces/api/EmergencyContact';\nimport { containers } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport AfterHoursContactCard from './AfterHoursContactCard';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\ninterface Props {\n practice: EmergencyContact;\n}\n\nconst CollapsibleSection: React.FC = ({ practice }) => {\n const { value: isOpen, toggle } = useBoolean(false);\n const { colors } = useAppTheme();\n\n return (\n \n {\n if (IS_IOS) LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n >\n \n {practice.name}\n {!isOpen ? (\n \n ) : (\n \n )}\n \n \n\n {isOpen && }\n \n );\n};\n\nexport default CollapsibleSection;\n\nconst Container = styled.View`\n margin-horizontal: ${Margin.Large}px;\n margin-bottom: ${Margin.ExtraLarge}px;\n background-color: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nconst CollapsibleSectionHeader = styled.View`\n padding: ${Size.S}px;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View, ScrollView } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useQuery } from 'react-query';\nimport { getEmergencyContacts, QueryKeys } from 'src/api';\nimport { Body, FocusAwareStatusBar, Subheading } from 'src/components';\nimport { Margin } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport CollapsibleSection from './CollapsibleSection';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst AfterHours: React.FC = () => {\n const { t } = useTranslation('afterHours');\n const { colors } = useAppTheme();\n const { horizontalInset } = useViewMode();\n\n const { data: emergencyContacts, isFetching } = useQuery([QueryKeys.EMERGENCY_CONTACTS], {\n queryFn: getEmergencyContacts\n });\n\n if (isFetching) return ;\n\n return (\n <>\n \n \n {!emergencyContacts?.length && (\n \n {t('none')}\n \n )}\n {!!emergencyContacts?.length && (\n \n
{t('header')}
\n {emergencyContacts?.map((practice) => {\n return ;\n })}\n
\n )}\n \n \n );\n};\n\nexport default AfterHours;\n\nconst Container = styled(ScrollView)`\n flex: 1;\n padding: ${Margin.Small}px;\n background-color: ${({ theme }) => theme.colors.background};\n`;\n\nconst Header = styled(Body)`\n text-align: center;\n margin-vertical: ${Margin.Large}px;\n`;\n","import { Body, Caption } from 'src/components';\nimport { Margin, Size } from 'src/constants';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\nexport const PET_ID_IMAGE_SIZE = 185;\n\nexport const PageHeader = styled.View`\n flex-direction: row;\n align-items: center;\n border-bottom-width: 0.5px;\n border-color: ${palette.GREY_SHADOW_80};\n padding-bottom: ${Size.X2_S}px;\n`;\n\nexport const ImageContainer = styled.View`\n height: ${PET_ID_IMAGE_SIZE}px;\n width: ${PET_ID_IMAGE_SIZE}px;\n align-items: center;\n border-width: 1px;\n border-color: ${({ theme }) => theme.colors.opaquePlaceholder};\n justify-content: center;\n margin-right: ${Size.X2_S}px;\n`;\n\nexport const PatientImage = styled.Image`\n width: ${PET_ID_IMAGE_SIZE}px;\n height: ${PET_ID_IMAGE_SIZE}px;\n`;\n\nexport const FieldValueContainer = styled.View`\n justify-content: space-between;\n flex: 1;\n margin-left: ${Size.X2_S}px;\n`;\n\nexport const SectionHeader = styled(Caption)`\n margin-bottom: ${Margin.ExtraSmall}px;\n`;\n\nexport const PracticeLogo = styled.Image`\n height: ${Size.X4_L}px;\n width: ${Size.X5_L}px;\n`;\n\nexport const SectionOne = styled.View`\n flex-direction: row;\n border-bottom-width: 0.5px;\n border-color: ${palette.GREY_SHADOW_80};\n padding-vertical: ${Size.S}px;\n`;\n\nexport const SectionTwo = styled.View`\n margin-top: ${Size.X3_S}px;\n border-bottom-width: 0.5px;\n border-color: ${palette.GREY_SHADOW_80};\n padding-vertical: ${Size.X2_S}px;\n`;\n\nexport const LogoContainer = styled.View`\n flex: 1;\n`;\n\nexport const Container = styled.View`\n margin-vertical: ${Margin.Small}px;\n padding-bottom: ${Size.X2_S}px;\n`;\n\nexport const TableRow = styled.View`\n flex-direction: row;\n margin-top: ${Margin.Small}px;\n justify-content: space-between;\n`;\n\nexport const RowDescription = styled(Body)`\n flex: 1;\n margin-right: ${Size.X3_S}px;\n`;\n","import moment from 'moment-timezone';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Body, Caption, Subheading } from 'src/components';\nimport { Size } from 'src/constants';\nimport { useReminders } from 'src/hooks';\nimport { Weight } from 'src/theme';\nimport { layout } from 'src/theme/globalStyles';\nimport { Container, RowDescription, TableRow } from './style';\nimport { toLocalShortDate } from 'src/utils';\n\ninterface Props {\n patientId: string;\n}\n\nconst MedicalReminders: React.FC = ({ patientId }) => {\n const { t } = useTranslation('petID');\n const { data: reminders } = useReminders();\n\n const filteredReminders = reminders.filter((r) => r.patientId === patientId);\n\n return (\n \n \n {t('medicalReminders')}\n \n {!filteredReminders.length && {t('none')}}\n {!!filteredReminders?.length && (\n \n \n {t('description', { ns: 'patientProfile' })}\n \n {t('dueDate')}\n \n )}\n {!!filteredReminders?.length &&\n filteredReminders.map((reminder, i) => {\n return (\n \n {reminder.description}\n {toLocalShortDate(moment(reminder.pastDueDate))}\n \n );\n })}\n \n );\n};\n\nexport default MedicalReminders;\n","import moment from 'moment-timezone';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Body, Caption, Subheading } from 'src/components';\nimport { Size } from 'src/constants';\nimport { usePrescriptions } from 'src/hooks';\nimport { Patient } from 'src/interfaces';\nimport { Weight } from 'src/theme';\nimport { layout } from 'src/theme/globalStyles';\nimport { Container, RowDescription, TableRow } from './style';\nimport { toLocalShortDate } from 'src/utils';\n\ninterface Props {\n patientId: Patient['patientId'];\n}\nconst CurrentPrescriptions: React.FC = ({ patientId }) => {\n const { t } = useTranslation('petID');\n const { data } = usePrescriptions({ selectedPatientId: patientId });\n\n const filteredPrescriptions = useMemo(() => {\n const aYearAgo = moment().subtract(1, 'year');\n return data.filter((p) => moment(p.prescribedAt).isAfter(aYearAgo));\n }, [data]);\n\n return (\n \n \n {t('currentPrescriptions')}\n \n {!filteredPrescriptions.length && {t('none')}}\n {!!filteredPrescriptions?.length && (\n \n \n {t('description', { ns: 'patientProfile' })}\n \n {t('rxDate')}\n \n )}\n {!!filteredPrescriptions?.length &&\n filteredPrescriptions.map((rx, i) => {\n return (\n \n {rx.description}\n {toLocalShortDate(moment(rx.prescribedAt))}\n \n );\n })}\n \n );\n};\n\nexport default CurrentPrescriptions;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator, TouchableRipple } from 'react-native-paper';\nimport { usePatient, usePracticeConfiguration, useViewMode } from 'src/hooks';\nimport { Screens } from 'src/routes/stacks/screens';\nimport * as Sharing from 'expo-sharing';\nimport { captureRef } from 'react-native-view-shot';\nimport {\n IS_ANDROID,\n IS_IOS,\n IS_WEB,\n Margin,\n PHONE_MASK,\n Size,\n TABLET_WIDTH_PORTRAIT_MIN\n} from 'src/constants';\nimport { useNavigation } from '@react-navigation/native';\nimport { Printer, Share, X } from 'react-native-feather';\nimport { View, Share as RNShare, ScrollView } from 'react-native';\nimport { cleanUrl, toLocalShortDate } from 'src/utils';\nimport { fontStyles, layout as globalLayout } from 'src/theme/globalStyles';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { defaultLightTheme, palette, Weight } from 'src/theme';\nimport {\n FieldValueContainer,\n ImageContainer,\n LogoContainer,\n PageHeader,\n PatientImage,\n PracticeLogo,\n SectionOne,\n SectionTwo\n} from './style';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { Body, Caption, Subheading, Title } from 'src/components';\nimport moment from 'moment-timezone';\nimport { mask } from 'react-native-mask-text';\nimport MedicalReminders from './MedicalReminders';\nimport Toast from 'react-native-toast-message';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport * as FileSystem from 'expo-file-system';\nimport CurrentPrescriptions from './CurrentPrescriptions';\nimport { AppColors } from 'src/types/paper';\nimport { Context, ThemeContext, defaultContext } from 'src/providers/AppThemeProvider';\nimport rateUs from 'src/utils/rateUs';\n\nconst MIN_SHEET_HEIGHT = (TABLET_WIDTH_PORTRAIT_MIN * 11) / 8;\n\ntype Props = NativeStackScreenProps;\nconst PatientID: React.FC = ({ route, navigation }) => {\n const { t } = useTranslation();\n const viewMode = useViewMode();\n const colors: AppColors = useMemo(\n () => ({\n ...defaultLightTheme.colors,\n background: palette.AB_BRIGHT_WHITE,\n text: palette.BLACK\n }),\n []\n );\n const { setOptions, goBack } = useNavigation();\n\n const patientId = route.params?.id;\n const { data: practiceConfiguration, isLoading: configLoading } = usePracticeConfiguration();\n const { data: patient, isFetched } = usePatient(patientId);\n\n const { user } = useUser();\n const fullName = `${user.firstName} ${user.lastName}`;\n const addressLine2 = `${user.city}, ${user.state} ${user.postalCode}`;\n\n const [isPrintingWeb, SetIsPrintingWeb] = useState(false);\n\n const contentRef = useRef(null);\n\n useEffect(() => {\n if (!patientId || (isFetched && !patient)) {\n Toast.show({\n text1: t('petNotFound', { ns: 'petList' }),\n type: 'error'\n });\n const timeout = setTimeout(navigation.goBack, 500);\n return () => clearTimeout(timeout);\n }\n }, [patientId, patient, navigation, isFetched, t]);\n\n const onPressSendPrint = useCallback(async () => {\n if (patient && practiceConfiguration && contentRef.current) {\n if (IS_WEB) {\n SetIsPrintingWeb(true);\n const promise = new Promise((resolve) => {\n setTimeout(() => {\n window.print();\n resolve();\n }, 100);\n });\n await promise;\n SetIsPrintingWeb(false);\n } else if ((await Sharing.isAvailableAsync()) && !!FileSystem.cacheDirectory) {\n try {\n const fileName = `${patient.name} Pet ID Card ${moment().format(\n 'YYYY-MM-DD'\n )}.jpg`.replace(/\\s/g, '_');\n const filePath = `${FileSystem.cacheDirectory}/${fileName}`;\n const image: string = await captureRef(contentRef, {\n result: 'base64',\n fileName\n });\n await FileSystem.writeAsStringAsync(filePath, image, { encoding: 'base64' });\n if (IS_IOS) {\n await RNShare.share({\n url: filePath\n });\n } else if (IS_ANDROID) {\n await Sharing.shareAsync(filePath);\n }\n void rateUs();\n } catch {\n Toast.show({\n text1: `Something went wrong`\n });\n }\n }\n }\n }, [patient, practiceConfiguration]);\n\n useEffect(() => {\n setOptions({\n cardStyle: {\n backgroundColor: colors.background\n },\n headerStyle: {\n backgroundColor: colors.background\n },\n headerTitleStyle: {\n color: colors.text,\n ...fontStyles.title\n },\n headerTitle: !isPrintingWeb ? t('title', { ns: 'petID' }) : '',\n headerLeft: !isPrintingWeb\n ? () => (\n \n \n \n )\n : null,\n headerRight: !isPrintingWeb\n ? () => (\n \n {IS_WEB ? (\n \n ) : (\n \n )}\n \n )\n : null\n });\n }, [goBack, setOptions, colors, onPressSendPrint, isPrintingWeb, t]);\n\n const [contentLayout, setContentLayout] = useState({ x: 0, y: 0, width: 0, height: 0 });\n\n const { scale, translateY } = useMemo(() => {\n const _scale = viewMode.windowWidth / TABLET_WIDTH_PORTRAIT_MIN;\n const lostHeight = (1 - _scale) * contentLayout.height;\n const _translateY = -lostHeight / 2;\n return { scale: _scale, translateY: _translateY };\n }, [contentLayout, viewMode]);\n\n const { bottom } = useSafeAreaInsets();\n\n const themeContext: Context = useMemo(\n () => ({ ...defaultContext, ...defaultLightTheme, viewMode }),\n [viewMode]\n );\n\n const contentWidth = useMemo(() => {\n return !IS_WEB ? TABLET_WIDTH_PORTRAIT_MIN : TABLET_WIDTH_PORTRAIT_MIN - Size.M;\n }, []);\n\n if (!patient || !practiceConfiguration || !isFetched || configLoading || !patientId) {\n return ;\n }\n return (\n \n \n {\n setContentLayout(layout);\n }}\n ref={contentRef}\n >\n \n \n \n \n \n {t('header', { ns: 'petID' })}\n \n {t('generated', { ns: 'petID', date: toLocalShortDate(moment()) })}\n \n \n \n \n \n {!!practiceConfiguration?.practice?.name && practiceConfiguration.practice.name}\n \n \n {!!practiceConfiguration?.practice?.phoneNumber &&\n mask(practiceConfiguration.practice.phoneNumber, PHONE_MASK)}\n \n \n {!!practiceConfiguration?.practice?.email && practiceConfiguration.practice.email}\n \n \n \n \n\n \n \n {!patient.hasPhoto && {t('noPhoto', { ns: 'petID' })}}\n {patient.hasPhoto && (\n \n )}\n \n \n {t('name', { ns: 'userInfo' })}\n {t('dob', { ns: 'petID' })}\n {t('species', { ns: 'petID' })}\n {t('breed', { ns: 'petID' })}\n {t('sex', { ns: 'petID' })}\n {t('weight', { ns: 'petID' })}\n {t('microchipTag', { ns: 'patientProfile' })}\n {t('rabiesTag', { ns: 'patientProfile' })}\n \n \n {patient.name ?? t('dash', { ns: 'common' })}\n \n {toLocalShortDate(moment(patient.birthdate)) ?? t('dash', { ns: 'common' })}\n \n {patient.species ?? t('dash', { ns: 'common' })}\n {patient.breed ?? t('dash', { ns: 'common' })}\n {patient.sex ?? t('dash', { ns: 'common' })}\n \n {patient.weight ?? t('dash', { ns: 'common' })}\n {!!patient.weight && !!patient.weightUnit && ` ${patient.weightUnit}`}\n \n \n {!patient.microchipNumber ? t('dash', { ns: 'common' }) : patient.microchipNumber}\n \n {!patient.rabiesTag ? t('dash', { ns: 'common' }) : patient.rabiesTag}\n \n \n {t('owner', { ns: 'petID' })}\n {fullName}\n {user.address}\n {addressLine2}\n {user.mobilePhone && {mask(user.mobilePhone, PHONE_MASK)}}\n {!user.mobilePhone && {t('dash', { ns: 'common' })}}\n \n \n \n \n \n \n \n \n \n {t('ownerProvidedInfo', { ns: 'petID' })}\n \n \n {t('insuranceHeader', { ns: 'petID' })}\n {!patient.insuranceProvider && !patient.policyNumber && (\n {t('dash', { ns: 'common' })}\n )}\n {(!!patient.insuranceProvider || !!patient.policyNumber) && (\n \n {patient.insuranceProvider ?? ''}\n {patient.insuranceProvider && patient.policyNumber ? '/' : ''}\n {patient.policyNumber ?? ''}\n \n )}\n \n \n {t('medicalConditions', { ns: 'petID' })}\n \n {!patient.medicalConditions\n ? t('dash', { ns: 'common' })\n : patient.medicalConditions}\n \n \n \n {t('diet', { ns: 'petID' })}\n {!patient.diet ? t('dash', { ns: 'common' }) : patient.diet}\n \n \n \n \n
\n \n );\n};\n\nexport default PatientID;\n","import { LinearGradient } from 'expo-linear-gradient';\nimport { ActivityIndicator, TouchableRipple } from 'react-native-paper';\nimport { Body, HoverButton, Title } from 'src/components';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { MOBILE_WIDTH_MAX, Margin, Size, IS_WEB } from 'src/constants';\nimport { Weight } from 'src/theme';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { colorShade } from 'src/utils';\nimport styled from 'styled-components/native';\n\nexport const InnerContainer = styled.ScrollView.attrs({\n contentContainerStyle: {\n maxWidth: MOBILE_WIDTH_MAX,\n marginHorizontal: IS_WEB ? undefined : Size.X2_S,\n alignSelf: IS_WEB ? 'center' : 'stretch',\n flexGrow: 1\n }\n})`\n flex-grow: 1;\n align-self: stretch;\n`;\n\nexport const AllyBlueGradient = styled(LinearGradient).attrs(({ theme }) => ({\n colors: [theme.colors.primary, colorShade(theme.colors.primary, 0.8)]\n}))`\n flex: 1;\n padding-horizontal: ${Margin.Large}px;\n`;\n\nexport const ScreenTitle = styled(Title)`\n align-self: center;\n`;\n\nexport const StyledTouchable = styled(TouchableRipple)`\n margin-top: ${Margin.Medium}px;\n`;\nexport const PracticeRow = styled(HoverButton).attrs(({ disabled, theme, mode }) => ({\n mode: mode ?? 'outlined',\n buttonColor: disabled ? theme.colors.disabled : theme.colors.onPrimary,\n labelStyle: { ...fontStyles.subheading, flex: 1 },\n numberOfLines: 1,\n contentStyle: {\n alignSelf: 'stretch',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between'\n }\n}))<{ selected?: boolean }>`\n margin-top: ${Margin.Medium}px;\n max-width: 100%;\n ${({ disabled, theme }) => (disabled ? theme.colors.disabled : theme.colors.onPrimary)};\n`;\n\nexport const UnselectableRow = styled(HoverButton).attrs(({ theme }) => ({\n mode: 'outlined',\n buttonColor: theme.colors.onPrimary,\n labelStyle: fontStyles.subheading,\n disabled: true,\n contentStyle: {\n alignSelf: 'stretch',\n justifyContent: 'space-between'\n }\n}))`\n margin-top: ${Margin.Medium}px;\n`;\n\nexport const ButtonView = styled.View`\n margin-top: ${Margin.ExtraLarge}px;\n`;\n\nexport const ConfirmButton = styled(CPrimaryButton)`\n border-radius: ${Size.X2_S}px;\n margin-top: ${Margin.Large}px;\n`;\n\nexport const LoadingIndicator = styled(ActivityIndicator).attrs(({ theme }) => ({\n size: 'large',\n color: theme.colors.onPrimary\n}))`\n flex: 1;\n`;\n\nexport const Section = styled.View`\n margin-top: ${Size.M}px;\n`;\n\nexport const StyledBody = styled(Body)`\n margin-top: ${Margin.ExtraLarge}px;\n`;\n\nexport const ResendContainer = styled.View`\n align-items: center;\n`;\n\nexport const Link = styled(Body)`\n text-decoration: underline;\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n color: ${({ theme }) => theme.colors.primary};\n font-weight: ${Weight.MEDIUM};\n`;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst Logo: React.FC = ({ size, color, strokeWidth, ...props }) => {\n return (\n \n \n \n );\n};\n\nexport default Logo;\n","import React from 'react';\nimport { Title } from 'src/components';\nimport Logo from 'src/components/Icons/Logo';\nimport { IconSize, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\ninterface Props {\n displayName: string;\n}\nconst LogoHeader: React.FC = ({ displayName }) => {\n const { colors } = useAppTheme();\n\n return (\n \n \n \n \n {displayName}\n \n \n \n );\n};\n\nexport default LogoHeader;\n\nconst TextContainer = styled.View`\n margin-left: ${Size.X2_S}px;\n flex-shrink: 1;\n justify-content: center;\n`;\n\nconst LogoAndNameContainer = styled.View`\n margin-bottom: ${Size.M}px;\n flex-direction: row;\n justify-content: center;\n`;\n","import _ from 'lodash';\nimport moment, { Moment } from 'moment-timezone';\nimport { useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport {\n AsyncStorageKeys,\n QueryKeys,\n resendConfirmationEmail,\n ResendConfirmationRequest\n} from 'src/api';\nimport { useBoolean, useStorage } from 'src/hooks';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { queryClient } from 'src/utils';\n\nconst MINIMUM_RESEND_DURATION = moment.duration(1, 'minutes');\n\nconst useResendConfirmationEmail = (email?: string, practice?: AvailablePractice) => {\n const { t } = useTranslation('login');\n const [lastResend, setLastResend] = useStorage([\n AsyncStorageKeys.EMAIL_CONFIRMATION_TIMESTAMP,\n email ? email.toLowerCase() : '',\n practice?.practiceId ?? ''\n ]);\n const { value: hasSentRecently, toTrue: sent, toFalse: unsent } = useBoolean(false);\n useEffect(() => {\n if (lastResend) {\n const timeSinceLastSent = moment().diff(moment(lastResend), 'milliseconds', true);\n const wait = MINIMUM_RESEND_DURATION.asMilliseconds() - timeSinceLastSent;\n if (wait > 0) {\n sent();\n const timeout = setTimeout(async () => {\n await queryClient.invalidateQueries([QueryKeys.CHECK_EMAIL]);\n unsent();\n }, wait);\n return () => clearTimeout(timeout);\n }\n }\n unsent();\n }, [lastResend, sent, unsent]);\n\n const { mutate, isLoading: isSending } = useMutation({\n mutationFn: async (request: ResendConfirmationRequest) =>\n await resendConfirmationEmail(request),\n onSuccess: () => {\n setLastResend(moment());\n Toast.show({\n text1: t('success', { ns: 'common' }),\n text2: t('confirmationEmailSent', { email })\n });\n },\n onError: () =>\n Toast.show({\n text1: t('uhOh', { ns: 'common' }),\n text2: t('error', { ns: 'common' }),\n type: 'error'\n })\n });\n\n const sendConfirmationEmail = useMemo(\n () =>\n _.debounce(async () => {\n if (!email || !practice) return;\n if (!lastResend || moment(lastResend).clone().add(MINIMUM_RESEND_DURATION).isBefore()) {\n await mutate({\n email,\n practiceId: practice.practiceId,\n practiceShortName: practice.shortName\n });\n } else {\n const timeSinceLastSent = moment().diff(moment(lastResend), 'milliseconds', true);\n const wait = MINIMUM_RESEND_DURATION.asMilliseconds() - timeSinceLastSent;\n Toast.show({\n text1: t('confirmationAlreadySent'),\n text2: t('pleaseWait', {\n humanizedTime: moment.duration(wait, 'milliseconds').humanize()\n }),\n type: 'error'\n });\n }\n }),\n [email, practice, lastResend, mutate, t]\n );\n\n return { sendConfirmationEmail, isSending, hasSentRecently };\n};\n\nexport default useResendConfirmationEmail;\n","import React, { useEffect, useRef } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Animated } from 'react-native';\nimport { AlertTriangle, Check, RefreshCcw } from 'react-native-feather';\nimport { Alert, AlertHandle, Caption, Row } from 'src/components';\nimport { ALLY_SUPPORT_EMAIL, IS_WEB, Margin, Size } from 'src/constants';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { openEmail } from 'src/utils';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport { emailBouncedOrMarkedSpam, isErroredEmail } from 'src/utils/validators/email';\nimport useResendConfirmationEmail from '../Landing/helpers/useResendConfirmationEmail';\nimport { Link, PracticeRow } from './styled';\n\ninterface Props {\n practice: AvailablePractice;\n}\n\nconst UnconfirmedPractice: React.FC = ({ practice }) => {\n const { user } = useUser();\n const { t } = useTranslation('selectPractice');\n\n const { sendConfirmationEmail, isSending, hasSentRecently } = useResendConfirmationEmail(\n user.email,\n practice\n );\n\n const animatedValue = useRef(new Animated.Value(0));\n const loopValue = animatedValue.current.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: ['0deg', '360deg', '720deg']\n });\n\n useEffect(() => {\n if (isSending) {\n const aV = animatedValue.current;\n const animation = Animated.loop(\n Animated.timing(aV, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: !IS_WEB\n })\n );\n animation.start(() => aV.setValue(0));\n return () => {\n const a = Animated.timing(aV, {\n toValue: 0,\n duration: 500,\n useNativeDriver: !IS_WEB\n });\n a.start();\n };\n }\n }, [isSending]);\n\n const alertRef = useRef(null);\n\n if (isErroredEmail(practice.emailVerificationStatus)) {\n return (\n <>\n (\n \n {t('common:error')}\n \n \n )}\n >\n {practice.practiceName}\n \n await openEmailToAlly()} />,\n contactPractice: (\n await openEmail(practice?.practiceEmail)} />\n )\n }}\n />\n }\n />\n \n );\n }\n\n if (hasSentRecently) {\n return (\n (\n \n {t('sent')}\n \n \n )}\n >\n {practice.practiceName}\n \n );\n }\n\n return (\n (\n \n {t('resend')}\n \n \n \n \n )}\n >\n {practice.practiceName}\n \n );\n};\n\nexport default UnconfirmedPractice;\n","import React, { useEffect, useMemo } from 'react';\nimport { LayoutAnimation, SafeAreaView } from 'react-native';\nimport { Caption, Headline } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport {\n InnerContainer,\n AllyBlueGradient,\n ScreenTitle,\n PracticeRow,\n LoadingIndicator,\n Section,\n UnselectableRow,\n StyledBody\n} from './styled';\nimport LogoHeader from '../Landing/components/LogoHeader';\nimport { useAvailablePractices } from 'src/hooks';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { useMutation } from 'react-query';\nimport { MutationKeys, switchPractice, SwitchPracticeRequest } from 'src/api';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { IS_WEB, MOBILE_WIDTH_MAX, Size } from 'src/constants';\nimport { useNavigation } from '@react-navigation/native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { AvailablePractice, UserConfirmationStatus } from 'src/interfaces/api/AvailablePractices';\nimport UnconfirmedPractice from './UnconfirmedPractice';\nimport * as SecureStore from 'expo-secure-store';\n\nconst SelectPractice: React.FC = () => {\n const { t } = useTranslation('selectPractice');\n const { colors } = useAppTheme();\n const { user } = useUser();\n const { logOut } = useAuth();\n\n const { setOptions } = useNavigation();\n\n useEffect(() => {\n setOptions({ headerTitle: '' });\n });\n\n const { data, isFetching } = useAvailablePractices(user.email);\n\n const { available, unconfirmed, unregistered } = useMemo(() => {\n // take in the data and return the available, unconfirmed, and unregistered practices\n const available: AvailablePractice[] = [];\n const unconfirmed: AvailablePractice[] = [];\n const unregistered: AvailablePractice[] = [];\n data?.forEach((practice) => {\n if (!practice.userRegistered) {\n unregistered.push(practice);\n } else if (practice.userConfirmationStatus === UserConfirmationStatus.PENDING) {\n unconfirmed.push(practice);\n } else {\n available.push(practice);\n }\n });\n return {\n available,\n unconfirmed,\n unregistered\n };\n }, [data]);\n\n const { mutate, isLoading: isSwitching } = useMutation({\n mutationKey: [MutationKeys.SWITCH_PRACTICE],\n mutationFn: async (user: SwitchPracticeRequest) => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n return await switchPractice(user);\n },\n onSuccess: async (data) => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n if (!IS_WEB) {\n await SecureStore.setItemAsync('id', data.id.toString());\n }\n await logOut(data);\n }\n });\n return (\n \n \n \n {t('title')}\n {(isFetching || isSwitching) && (\n \n )}\n\n {!isFetching && !isSwitching && (\n \n
\n {t('availablePractices')}\n {available?.map((practice) => (\n mutate({ userId: practice.userId })}\n >\n {practice.practiceName}\n {practice.practiceId === user.practiceId && t('active')}\n \n ))}\n {!!unconfirmed?.length && (\n \n {t('selectPractice:associatedButUnconfirmed')}\n \n )}\n {unconfirmed?.map((practice) => (\n \n ))}\n {!!unregistered?.length && (\n \n {t('selectPractice:associatedButUnregistered')}\n \n )}\n {unregistered?.map((practice) => (\n {practice.practiceName}\n ))}\n
\n
\n )}\n \n {t('practiceNotListed', { ns: 'login' })}\n \n
\n
\n );\n};\n\nexport default SelectPractice;\n","import moment from 'moment-timezone';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Calendar, MapPin } from 'react-native-feather';\nimport { Body, Column, Row, Subheading } from 'src/components';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport { IconSize, Margin, Size } from 'src/constants';\nimport { Appointment } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { simpleAddressFormatter, toLocalDateTime } from 'src/utils';\nimport styled from 'styled-components/native';\nimport useAppointment from '../Appointments/AppointmentDetails/hooks/useAppointment';\nimport { usePractice } from 'src/hooks';\n\ninterface DisplayData {\n icon: React.ReactNode;\n label: string;\n value: string;\n}\n\ninterface Props {\n appointmentId: Appointment['appointmentId'];\n species?: string;\n}\n\nconst Details: React.FC = ({ appointmentId, species }) => {\n const { t, i18n } = useTranslation();\n const { colors } = useAppTheme();\n const { data: practice } = usePractice();\n const { data: appointment } = useAppointment(appointmentId);\n const startTime = moment(appointment?.startsAt).locale(i18n.language);\n\n const displayData = useMemo(\n () =>\n [\n !!appointment?.patientDisplay && {\n icon: ,\n value: appointment.patientDisplay,\n label: t('appointments:for')\n },\n {\n icon: ,\n value: toLocalDateTime(startTime, practice?.timeZone),\n label: t('appointments:when')\n },\n !!practice && {\n icon: ,\n value: simpleAddressFormatter(practice),\n label: t('common:address')\n }\n ].filter((d) => d) as DisplayData[],\n [appointment?.patientDisplay, colors.text, species, t, startTime, practice]\n );\n\n return (\n \n {displayData.map(({ value, icon, label }) => (\n \n {icon}\n \n {label}\n {value}\n \n \n ))}\n \n );\n};\n\nexport default Details;\n\nconst Container = styled.View`\n margin-horizontal: ${Margin.Large}px;\n margin-top: ${Margin.Large}px;\n`;\n\nconst IconContainer = styled.View`\n width: ${IconSize.XS}px\n height: ${IconSize.XS}px\n align-items: center;\n justify-content: center;\n margin-right: ${Size.XS}px;\n`;\n\nconst StyledRow = styled(Row)`\n align-items: flex-start;\n margin-bottom: ${Size.M}px;\n`;\n\nconst StyledBody = styled(Body)`\n margin-top: ${Size.X3_S}px;\n`;\n","import { Alarm } from 'expo-calendar';\nimport { t } from 'i18next';\nimport { AnySchema, mixed, object, string } from 'yup';\n\nexport interface CalendarEntry {\n title: string;\n calendarId: string;\n notes?: string;\n alerts: Alarm[];\n}\n\nexport const fieldNames = ['title', 'calendarId', 'alerts', 'notes'] as const;\nexport type FieldNames = (typeof fieldNames)[number];\n\nexport const validationSchema = object>({\n title: string().required(t('common:required')),\n calendarId: string().required(),\n notes: string()\n .optional()\n .max(240, t('maxLengthOther', { ns: 'petInfoUpdate' })),\n alerts: mixed()\n});\n","import { useFocusEffect } from '@react-navigation/native';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport {\n getCalendarsAsync,\n getDefaultCalendarAsync,\n EntityTypes,\n Calendar,\n createEventAsync\n} from 'expo-calendar';\nimport { useFormik } from 'formik';\nimport _ from 'lodash';\nimport moment from 'moment-timezone';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { AsyncStorageKeys } from 'src/api';\nimport { AlertHandle, BottomButton, DropDown, TextInput } from 'src/components';\nimport Alert, { AlertOption } from 'src/components/Alert';\nimport { alertOptions as alertOptionsArray, IS_IOS } from 'src/constants';\nimport { useBoolean, usePractice, useStorage } from 'src/hooks';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport useAppointment from '../Appointments/AppointmentDetails/hooks/useAppointment';\nimport Details from './Details';\nimport { CalendarEntry, validationSchema } from './helpers';\nimport { simpleAddressFormatter } from 'src/utils';\nimport { ScrollView } from 'react-native';\nimport rateUs from 'src/utils/rateUs';\n\ntype Props = NativeStackScreenProps;\n\nconst AddToCalendar: React.FC = ({ route, navigation }) => {\n const { t, i18n } = useTranslation();\n const appointmentId = route.params?.id ?? '';\n const species = route.params?.species ?? '';\n\n const { data: appointment } = useAppointment(appointmentId);\n\n const [calendars, setCalendars] = useState();\n const [defaultCalendarId, setDefaultCalendarId] = useState();\n const { value: isAddingEvent, toTrue: addingEvent, toFalse: doneAddingEvent } = useBoolean(false);\n const { data: practice } = usePractice();\n\n const [, setCalendarEntry] = useStorage([\n AsyncStorageKeys.CALENDAR_APPOINTMENT,\n appointmentId\n ]);\n\n useFocusEffect(\n useCallback(() => {\n void getCalendarsAsync(EntityTypes.EVENT).then((calendars) => {\n setCalendars(calendars);\n if (!defaultCalendarId) setDefaultCalendarId(calendars[0].id);\n });\n\n if (IS_IOS) {\n void getDefaultCalendarAsync().then((calendar) => {\n setDefaultCalendarId(calendar.id);\n });\n }\n }, [defaultCalendarId])\n );\n\n const alertOptions = useMemo(\n () =>\n alertOptionsArray.map((option) => ({\n value: { relativeOffset: -option },\n label: t('todos:createTodo.humanizedBefore', {\n humanizedMoment: moment.duration(option, 'minutes').locale(i18n.language).humanize()\n })\n })),\n [t, i18n]\n );\n\n const { values, errors, handleSubmit, setFieldValue } = useFormik({\n enableReinitialize: true,\n initialValues: {\n calendarId: defaultCalendarId ?? '',\n title: t('addToCalendar:appointment', { petName: appointment?.patient.name }),\n alerts: [{ relativeOffset: 0 }]\n },\n validationSchema,\n onSubmit: async (values) => {\n if (IS_IOS && values.alerts.length > 2) {\n confirmModalRef.current?.alert();\n } else if (appointment) {\n addingEvent();\n await createEventAsync(values.calendarId, {\n title: values.title,\n startDate: moment(appointment.startsAt).toDate(),\n endDate: moment(appointment.startsAt).add(appointment.duration, 'minutes').toDate(),\n notes: values.notes,\n location: simpleAddressFormatter(practice),\n alarms: values.alerts\n }).then((id) => {\n setCalendarEntry(id);\n Toast.show({\n type: 'success',\n text1: t('addToCalendar:confirmed')\n });\n\n void rateUs();\n navigation.goBack();\n });\n }\n doneAddingEvent();\n }\n });\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('common:OK')\n }\n ],\n [t]\n );\n\n const debouncedSubmit = useMemo(() => _.debounce(() => handleSubmit()), [handleSubmit]);\n\n if (!calendars) return null;\n return (\n <>\n \n \n
\n await setFieldValue('title', title)}\n value={values.title}\n error={!!errors.title}\n msg={errors.title}\n />\n ({\n label: calendar.title,\n value: calendar.id\n }))}\n value={values.calendarId}\n onChange={async (calendarId) => await setFieldValue('calendarId', calendarId)}\n />\n await setFieldValue('alerts', alerts)}\n />\n await setFieldValue('notes', notes)}\n />\n \n \n {t('addToCalendar:save')}\n \n \n );\n};\n\nexport default AddToCalendar;\n","import { NavigationProp, useNavigation } from '@react-navigation/native';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Image } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { postLoyaltyTransaction } from 'src/api/loyaltyTransactions';\nimport {\n Alert,\n AlertHandle,\n Body,\n BottomButton,\n FocusAwareStatusBar,\n HoverButton,\n Row,\n Subheading,\n Title\n} from 'src/components';\nimport { IS_WEB, Margin, Size } from 'src/constants';\nimport { useLoyaltyTransactions, usePractice } from 'src/hooks';\nimport useReward from 'src/hooks/react-query/useReward';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport { isDefined } from 'src/utils';\nimport cleanUrl from 'src/utils/cleanUrl';\nimport styled from 'styled-components/native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { AlertOption } from 'src/components/Alert';\nimport { CareCoinView } from '../LoyaltyRewards/style';\nimport { Weight } from 'src/theme';\nimport { CoinIcon } from 'src/routes/stacks/LoyaltyTabNavigator/components/LoyaltyTabBar/style';\n\nconst WEB_IMAGE_WIDTH = 400;\n\ntype Props = NativeStackScreenProps;\n\nconst LoyaltyReward: React.FC = ({ route }) => {\n const navigation = useNavigation>();\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n\n const { id: rewardId } = route.params;\n const { data: reward, isFetched } = useReward(rewardId);\n const { data: practice } = usePractice();\n const { coinBalance } = useLoyaltyTransactions();\n const [hasInsufficientCoins, setHasInsufficientCoins] = useState(true);\n\n const { mutate: postTransaction, isLoading } = useMutation(\n async () => await postLoyaltyTransaction(rewardId),\n {\n onSuccess: () => {\n Toast.show({ text1: t('redemptionSuccess') });\n navigation.goBack();\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n }\n }\n );\n\n const onPressRedeem = () => {\n confirmModalRef.current?.alert();\n };\n\n const confirmTransaction = useCallback(() => {\n postTransaction();\n }, [postTransaction]);\n\n useEffect(() => {\n if (isDefined(reward) && coinBalance) {\n setHasInsufficientCoins(coinBalance < reward.price);\n }\n }, [reward, coinBalance]);\n\n const imageURL = cleanUrl(reward?.image?.urls?.original);\n\n const [ratio, setRatio] = useState(0);\n\n useEffect(() => {\n if (imageURL) {\n void Image.prefetch(imageURL).then(() => {\n Image.getSize(imageURL, (width, height) => setRatio(width / height));\n });\n }\n }, [imageURL]);\n\n useEffect(() => {\n if (!rewardId || (isFetched && !reward)) {\n Toast.show({\n text1: t('rewardNotFound'),\n type: 'error'\n });\n const timeout = setTimeout(() => {\n navigation.goBack();\n }, 500);\n return () => clearTimeout(timeout);\n }\n }, [isFetched, navigation, reward, rewardId, t]);\n\n const confirmModalRef = useRef(null);\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n label: t('cancel', { ns: 'common' }),\n type: 'neutral'\n },\n\n {\n action: confirmTransaction,\n label: t('redeem')\n }\n ],\n [confirmTransaction, t]\n );\n\n if (!reward) return ;\n\n return (\n <>\n \n \n \n \n {!!imageURL && ratio > 0 && }\n \n \n {t('rewardScreenTitle')}\n \n {reward?.price}\n \n \n \n {reward?.title}\n {reward?.description}\n \n \n navigation.goBack()}>\n {t('common:cancel')}\n \n \n \n {!hasInsufficientCoins ? t('redeem') : t('insufficientCoinsTitle')}\n \n \n \n \n \n {isLoading && (\n \n )}\n \n );\n};\n\nexport default LoyaltyReward;\n\nconst Container = styled.View`\n flex: 1;\n justify-content: ${({ theme }) => (theme.viewMode.isMobile ? 'flex-end' : 'center')};\n`;\n\nconst StyledScrollView = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n gap: Size.S\n }\n}))`\n flex-shrink: 1;\n border-radius: ${Size.M}px;\n background-color: ${({ theme }) => theme.colors.surface};\n`;\n\nconst InnerView = styled.View`\n flex-shrink: 1;\n width: ${({ theme }) => (theme.viewMode.isMobile ? '100%' : `${WEB_IMAGE_WIDTH}px`)};\n background-color: ${({ theme }) => theme.colors.surface};\n ${({ theme }) => (theme.viewMode.isMobile ? 'min-height: 50%;' : '')}\n max-height: 95%;\n border-radius: ${Size.M}px;\n overflow: hidden;\n`;\n\nconst TextContainer = styled.View`\n padding: ${Margin.ExtraLarge}px;\n gap: ${Margin.Large}px;\n`;\n\nconst OfferImage = styled.Image.attrs({ resizeMode: 'cover' })<{ ratio: number }>`\n align-self: center;\n width: 100%;\n aspect-ratio: ${({ ratio }) => ratio};\n`;\n\nconst TitleText = styled(Title)`\n margin-bottom: ${Margin.Medium}px;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst BodyText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Body, BottomButton, FocusAwareStatusBar, Row, Subheading } from 'src/components';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport styled from 'styled-components/native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { IS_WEB, Margin, Size } from 'src/constants';\nimport { palette, Weight } from 'src/theme';\nimport { toLocalShortDate } from 'src/utils';\nimport moment from 'moment';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport { useLoyaltyTransactions } from 'src/hooks';\n\nconst WEB_IMAGE_WIDTH = 400;\n\ntype Props = NativeStackScreenProps;\n\nconst TransactionDetails: React.FC = ({ route }) => {\n const { t } = useTranslation('loyalty');\n const { colors } = useAppTheme();\n const navigation = useNavigation>();\n const { transactions } = useLoyaltyTransactions();\n\n const { id: transactionId, isExpiredItem, expireAmount } = route.params;\n\n const transaction = useMemo(() => {\n return transactions.find((t) => t.id === transactionId);\n }, [transactionId, transactions]);\n\n return (\n <>\n \n \n \n \n {t('transactionDetailsTitle')}\n \n \n {!isExpiredItem ? transaction?.type : t('expiration')}\n \n {!isExpiredItem && (\n \n \n {transaction?.description}\n \n )}\n \n \n \n {!isExpiredItem ? Math.abs(transaction?.amount ?? 0) : expireAmount}{' '}\n {t('careCoins')}\n \n \n \n \n \n {toLocalShortDate(\n moment(!isExpiredItem ? transaction?.createdAt : transaction?.expiresAt)\n )}\n \n \n {!isExpiredItem && transaction?.fulfilledAt && (\n \n \n {toLocalShortDate(moment(transaction?.fulfilledAt))}\n \n )}\n \n navigation.goBack()}>\n \n {t('common:OK')}\n \n \n \n \n \n );\n};\n\nexport default TransactionDetails;\n\nconst Label = styled(Body)`\n font-weight: ${Weight.BOLD};\n flex-shrink: 0;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst Value = styled(Body)`\n flex-shrink: 1;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst Container = styled.View`\n flex: 1;\n justify-content: ${({ theme }) => (theme.viewMode.isMobile ? 'flex-end' : 'center')};\n`;\n\nconst InnerView = styled.View`\n flex-shrink: 1;\n width: ${({ theme }) => (theme.viewMode.isMobile ? '100%' : `${WEB_IMAGE_WIDTH}px`)};\n background-color: ${({ theme }) => theme.colors.surface};\n max-height: 50%;\n border-radius: ${Size.M}px;\n overflow: hidden;\n`;\n\nconst StyledRow = styled(Row)`\n justify-content: space-between;\n padding: ${Margin.Medium}px;\n gap: ${Margin.Large}px;\n border-bottom-width: 1px;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n align-items: flex-start;\n`;\n\nconst TextContainer = styled.View`\n gap: ${Margin.Large}px;\n padding: ${Margin.ExtraLarge}px;\n`;\n","import React from 'react';\nimport Svg, { G, Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst FaceRecognition: React.FC = ({ size, color }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default FaceRecognition;\n","import React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Body, BottomButton, HoverButton, Row, Subheading, Caption } from 'src/components';\nimport { IconSize, Size } from 'src/constants';\nimport { fontStyles, layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { View } from 'react-native';\nimport useGoBack from 'src/hooks/useGoBack';\nimport FaceRecognition from 'src/components/Icons/FaceRecognition';\nimport Icon from 'react-native-vector-icons/MaterialCommunityIcons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { useBiometricsPrompt } from 'src/providers/BiometricsPromptProvider';\nimport { Weight } from 'src/theme';\nimport useBiometrics from 'src/hooks/useBiometrics';\nimport * as LocalAuthentication from 'expo-local-authentication';\nimport Toast from 'react-native-toast-message';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useLinkTo } from '@react-navigation/native';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { usePractice } from 'src/hooks';\n\nconst BiometricLoginOptIn: React.FC<\n NativeStackScreenProps\n> = ({ navigation }) => {\n const { t } = useTranslation('biometricLogin');\n const { colors } = useAppTheme();\n const { setNeedsPrompt, setBiometricAuthAppSetting, hasCredentials } = useBiometricsPrompt();\n const { logOut } = useAuth();\n const { user } = useUser();\n const { data: practice } = usePractice();\n\n const linkTo = useLinkTo();\n\n const { supportsFaceRecognition } = useBiometrics();\n\n const goBack = useGoBack();\n\n const enableBiometrics = async () => {\n if (!hasCredentials) {\n await logOut();\n setBiometricAuthAppSetting(undefined);\n linkTo(`/?email=${user.email}&practice=${practice?.shortName ?? ''}`);\n return;\n }\n try {\n const result = await LocalAuthentication.authenticateAsync();\n if (result.success) {\n setBiometricAuthAppSetting(true);\n setNeedsPrompt(false);\n goBack();\n } else {\n throw new Error('Biometric authentication failed');\n }\n } catch {\n Toast.show({\n type: 'error',\n text1: t(supportsFaceRecognition ? 'faceRecognitionFailed' : 'fingerprintRecognitionFailed')\n });\n }\n };\n\n const disableBiometrics = () => {\n setBiometricAuthAppSetting(false);\n setNeedsPrompt(false);\n goBack();\n };\n\n return (\n <>\n \n \n {supportsFaceRecognition ? (\n \n ) : (\n \n )}\n \n \n \n {supportsFaceRecognition ? t('enableToFaceId') : t('enableToFingerprint')}\n \n \n \n \n }}\n />\n \n \n \n \n \n }}\n />\n \n \n {!hasCredentials && {t('logoutRequired')}}\n \n \n {t('notNow')}\n {t('enableBiometricLogin')}\n \n );\n};\n\nexport default BiometricLoginOptIn;\n\nconst HeroContainer = styled.View`\n align-self: center;\n margin-vertical: ${Size.X2_L}px;\n`;\n\nconst Content = styled.View`\n ${({ theme }) => (theme.viewMode.isMobile ? 'flex: 1;' : '')}\n margin: ${Size.M}px;\n gap: ${Size.S}px;\n`;\n\nconst Bullet = styled.View`\n width: ${Size.X3_S}px;\n height: ${Size.X3_S}px;\n border-radius: ${Size.X3_S}px;\n background-color: ${({ theme }) => theme.colors.text};\n align-self: flex-start;\n margin-top: ${fontStyles.body.lineHeight / 2 - Size.X4_S}px;\n margin-right: ${Size.XS}px;\n`;\n","import React from 'react';\nimport Svg, { Path, Rect } from 'react-native-svg';\n\ninterface Props {\n color: string;\n}\n\nconst PatientID: React.FC = ({ color }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default PatientID;\n","import { NativeStackNavigationProp } from '@react-navigation/native-stack';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Edit2 } from 'react-native-feather';\nimport { FAB } from 'react-native-paper';\nimport { Row, Title } from 'src/components';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport PatientID from 'src/components/Icons/PatientID';\nimport { IS_WEB, IconSize, Size } from 'src/constants';\nimport { Patient } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { GuideElement, STEPS } from 'src/scenes/PatientList/tour';\nimport styled from 'styled-components/native';\n\ninterface Props {\n patient: Patient;\n advance: () => void;\n navigation: NativeStackNavigationProp;\n}\n\nconst Header: React.FC = ({ patient, advance, navigation }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('patientProfile');\n\n return (\n \n \n {patient.name}\n \n \n }\n onPress={() =>\n navigation.getParent()?.navigate(Screens.PATIENT_ID, { id: patient.patientId })\n }\n />\n \n advance()}\n >\n }\n onPress={() => advance()}\n />\n \n \n \n );\n};\n\nexport default Header;\n\nconst StyledRow = styled(Row)`\n flex: 1;\n gap: ${Size.S}px;\n padding-vertical: ${IS_WEB ? Size.S : 0}px;\n`;\n\nconst PatientName = styled(Title)`\n flex: 1;\n`;\n\nconst FabRow = styled.View`\n flex-direction: row;\n justify-content: flex-end;\n gap: ${Size.S}px;\n`;\n\nconst StyledFAB = styled(FAB)`\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n","import React from 'react';\nimport { HoverCard, Subheading } from 'src/components';\nimport { IconProps } from 'src/components/Icons';\nimport { IconSize, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\ninterface Props {\n toggle?: () => void;\n isOpen: boolean;\n label: string | undefined;\n icon: (props: IconProps) => React.ReactElement;\n}\nconst HeaderToggle: React.FC = ({ toggle, isOpen, label, icon: Icon }) => {\n const { colors } = useAppTheme();\n return (\n \n \n \n \n \n {label}\n \n \n );\n};\n\nexport default HeaderToggle;\n\nconst StyledHeader = styled(HoverCard).attrs({ hideShadow: true })`\n padding: ${Size.S}px;\n flex-direction: row;\n`;\n\nconst HeadingIconContainer = styled.View`\n margin-right: ${Size.X2_S}px;\n`;\n","import React from 'react';\nimport { Caption, HoverCard, Row } from 'src/components';\nimport HeaderToggle from './HeaderToggle';\nimport { LayoutAnimation } from 'react-native';\nimport { useBoolean } from 'src/hooks';\nimport { IconProps } from 'src/components/Icons';\nimport { Weight } from 'src/theme';\nimport styled from 'styled-components/native';\nimport { Size } from 'src/constants';\n\ninterface Props {\n title: string;\n icon: (props: IconProps) => React.ReactElement;\n items: Array<{ name: string; value: string }>;\n}\n\nconst InfoCard: React.FC = ({ title, icon, items }) => {\n const { value: isOpen, toggle } = useBoolean(true);\n return (\n \n {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n toggle();\n }}\n isOpen={isOpen}\n icon={icon}\n />\n {isOpen && (\n \n {items.map((item, index) => (\n \n {item.name}\n \n {item.value}\n \n \n ))}\n \n )}\n \n );\n};\n\nexport default InfoCard;\n\nconst CardContent = styled.View`\n padding-horizontal: ${Size.L}px;\n padding-bottom: ${Size.L}px;\n gap: ${Size.X2_S}px;\n`;\n","import React, { useMemo } from 'react';\nimport { Patient } from 'src/interfaces';\nimport AppointmentsCard from 'src/scenes/Home/components/AppointmentsCard';\nimport PrescriptionsCard from 'src/scenes/Home/components/PrescriptionsCard';\nimport RemindersCard from 'src/scenes/Home/components/RemindersCard';\nimport Header from './Header';\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack';\nimport { Screens } from 'src/routes/stacks/screens';\nimport InfoCard from './InfoCard';\nimport { useTranslation } from 'react-i18next';\nimport { FolderPlus, Info } from 'react-native-feather';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { additionalInformation, basicInformation } from './helpers';\nimport MainStackParamsList from 'src/routes/stacks/MainStack/ParamsList';\nimport { GuideElement, STEPS } from 'src/scenes/PatientList/tour';\nimport ToDosCard from 'src/scenes/Home/components/ToDosCard';\nimport { useNavigation } from '@react-navigation/native';\n\ninterface Props {\n patient: Patient;\n advance: () => void;\n}\n\nconst ProfileView: React.FC = ({ patient, advance }) => {\n const { t } = useTranslation('patientProfile');\n const { colors } = useAppTheme();\n\n const navigation =\n useNavigation<\n NativeStackNavigationProp\n >();\n\n const patientInfo = useMemo(() => {\n const basicInfo = basicInformation(patient);\n const additionalInfo = additionalInformation(patient);\n return { basicInfo, additionalInfo };\n }, [patient]);\n\n return (\n <>\n
\n }\n items={patientInfo.basicInfo}\n />\n }\n items={patientInfo.additionalInfo}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ProfileView;\n","import { t } from 'i18next';\nimport { capitalize } from 'lodash';\nimport moment from 'moment';\nimport { Patient } from 'src/interfaces';\nimport { toLocalShortDate } from 'src/utils';\n\nexport const basicInformation = (patient: Patient): Array<{ name: string; value: string }> => [\n {\n name: t('patientProfile:status'),\n value: capitalize(t(`petList:${patient.status}`)) || t('unknown', { ns: 'common' })\n },\n { name: t('petID:breed'), value: capitalize(patient.breed) || t('unknown', { ns: 'common' }) },\n { name: t('petID:sex'), value: capitalize(patient.sex) || t('unknown', { ns: 'common' }) },\n {\n name: t('petID:dob'),\n value: patient.birthdate\n ? toLocalShortDate(moment(patient.birthdate))\n : t('unknown', { ns: 'common' })\n },\n {\n name: t('petID:weight'),\n value: patient.weight\n ? `${patient.weight} ${patient.weightUnit || t('pounds')}`\n : t('unknown', { ns: 'common' })\n },\n {\n name: t('patientProfile:microchipTag'),\n value: patient.microchipNumber || t('unknown', { ns: 'common' })\n },\n {\n name: t('patientProfile:rabiesTag'),\n value: patient.rabiesTag || t('unknown', { ns: 'common' })\n }\n];\n\nexport const additionalInformation = (patient: Patient): Array<{ name: string; value: string }> => [\n {\n name: t('patientProfile:insuranceProvider'),\n value: patient.insuranceProvider || t('unknown', { ns: 'common' })\n },\n {\n name: t('patientProfile:policyNumber'),\n value: patient.policyNumber || t('unknown', { ns: 'common' })\n },\n { name: t('patientProfile:diet'), value: patient.diet || t('unknown', { ns: 'common' }) },\n {\n name: t('patientProfile:medicalConditions'),\n value: patient.medicalConditions || t('unknown', { ns: 'common' })\n }\n];\n","import React from 'react';\nimport { Caption, Column, DatePicker, Headline, Row, TextInput } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport { View } from 'react-native';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { GuideElement, STEPS } from 'src/scenes/PatientList/tour';\nimport { FormSection } from '../../style';\nimport { FormStateHook } from '../../hooks/useFormState';\n\ninterface Props {\n values: FormStateHook['values'];\n setFieldValue: FormStateHook['setFieldValue'];\n errors: FormStateHook['errors'];\n}\n\nconst BasicInfo: React.FC = ({ values, setFieldValue, errors }) => {\n const { t } = useTranslation('patientProfile');\n\n return (\n \n \n {t('basicInfo')}\n {t('theseChangesAfter')}\n \n await setFieldValue('name', name)}\n error={!!errors.name}\n msg={errors.name && t(errors.name)}\n />\n \n \n await setFieldValue('breed', breed)}\n error={!!errors.breed}\n msg={errors.breed && t(errors.breed)}\n />\n \n \n await setFieldValue('sex', sex)}\n error={!!errors.sex}\n msg={errors.sex && t(errors.sex)}\n />\n \n \n \n \n {\n if (!date) {\n void setFieldValue('birthdate', undefined);\n } else {\n void setFieldValue('birthdate', moment(date).set(date).format('YYYY-MM-DD'));\n }\n }}\n />\n \n \n await setFieldValue('weight', weight)}\n error={!!errors.weight}\n msg={errors.weight && t(errors.weight)}\n />\n \n \n \n \n \n await setFieldValue('microchipNumber', microchipNumber)\n }\n error={!!errors.microchipNumber}\n msg={errors.microchipNumber && t(errors.microchipNumber)}\n />\n \n \n await setFieldValue('rabiesTag', rabiesTag)}\n error={!!errors.rabiesTag}\n msg={errors.rabiesTag && t(errors.rabiesTag)}\n />\n \n \n \n \n \n );\n};\n\nexport default BasicInfo;\n\nexport const StyledRow = styled(Row)`\n gap: ${Size.X3_S}px;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Caption, Column, Headline, TextInput } from 'src/components';\nimport { View } from 'react-native';\nimport { Size } from 'src/constants';\nimport { StyledRow } from './BasicInfo';\nimport { GuideElement, STEPS } from 'src/scenes/PatientList/tour';\nimport { FormSection } from '../../style';\nimport { FormStateHook } from '../../hooks/useFormState';\n\ninterface Props {\n values: FormStateHook['values'];\n setFieldValue: FormStateHook['setFieldValue'];\n errors: FormStateHook['errors'];\n}\n\nconst AdditionalInfo: React.FC = ({ values, setFieldValue, errors }) => {\n const { t } = useTranslation('patientProfile');\n\n return (\n \n \n {t('additionalInfo')}\n {t('theseChangesImmediately')}\n \n \n \n \n await setFieldValue('insuranceProvider', insuranceProvider)\n }\n error={!!errors.insuranceProvider}\n msg={errors.insuranceProvider && t(errors.insuranceProvider)}\n />\n \n \n \n await setFieldValue('policyNumber', policyNumber)\n }\n error={!!errors.policyNumber}\n msg={errors.policyNumber && t(errors.policyNumber)}\n />\n \n \n await setFieldValue('diet', diet)}\n error={!!errors.diet}\n msg={errors.diet && t(errors.diet)}\n multiline\n />\n \n await setFieldValue('medicalConditions', medicalConditions)\n }\n error={!!errors.medicalConditions}\n msg={errors.medicalConditions && t(errors.medicalConditions)}\n multiline\n />\n \n \n \n );\n};\n\nexport default AdditionalInfo;\n","import { useRef, useState, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { IS_WEB } from 'src/constants';\nimport { useBoolean, useHoverEffect } from 'src/hooks';\nimport { colorShade, transparent } from 'src/utils';\nimport { ImageUpload } from './model';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst useFileItemAnimation = (item: ImageUpload, progress: number) => {\n const animatedProgress = useRef(new Animated.Value(0)).current;\n const [width, setWidth] = useState(0);\n const { value: hidden, toTrue: hide } = useBoolean();\n const [ref, hoverEffect] = useHoverEffect();\n const { colors } = useAppTheme();\n const buttonColor = hoverEffect.interpolate({\n inputRange: [0, 1],\n outputRange: [colors.error, colorShade(colors.error, 0.8)]\n });\n\n const backgroundColor = hoverEffect.interpolate({\n inputRange: [0, 1],\n outputRange: [colors.disabled, transparent(colorShade(colors.error, 0.8), 0.5)]\n });\n\n const opacity = hoverEffect.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0.5]\n });\n\n useEffect(() => {\n const listener = animatedProgress.addListener(({ value }) => {\n setWidth(value);\n });\n return () => animatedProgress.removeListener(listener);\n }, [animatedProgress]);\n\n useEffect(() => {\n const _progress = progress ?? 0;\n const toValue = item.id ? _progress : _progress / 1.1;\n const animation = Animated.timing(animatedProgress, {\n toValue,\n useNativeDriver: !IS_WEB,\n easing: Easing.ease,\n duration: 500\n });\n animation.start(({ finished }) => {\n if (finished && toValue >= 1) {\n hide();\n }\n });\n return animation.stop;\n }, [animatedProgress, hide, item.id, progress]);\n\n return { backgroundColor, opacity, buttonColor, width, hidden, ref };\n};\n\nexport default useFileItemAnimation;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Animated, View } from 'react-native';\nimport { IconSize, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { X } from 'react-native-feather';\nimport palette from 'src/theme/palette';\nimport { ActivityIndicator, Caption, TouchableRipple } from 'react-native-paper';\nimport _ from 'lodash';\nimport { uploadRequestPhoto } from 'src/api';\nimport { AxiosError, AxiosProgressEvent } from 'axios';\nimport Toast from 'react-native-toast-message';\nimport { useTranslation } from 'react-i18next';\nimport { ImageUpload } from './model';\nimport useFileItemAnimation from './useFileItemAnimation';\nimport { Buffer } from 'buffer';\n\nconst MB5 = 5 * 1024 * 1024;\ninterface Props {\n item: ImageUpload;\n modifyImage: (value: Partial | undefined) => void;\n}\n\nenum Status {\n UPLOADING,\n UPLOADED,\n TOO_LARGE,\n OTHER_ERROR,\n INVALID_FILE\n}\n\nconst FileItem: React.FC = ({ item, modifyImage }) => {\n const { t } = useTranslation('common');\n const abortRef = useRef(new AbortController());\n const [progress, setProgress] = useState(0);\n const [status, setStatus] = useState(item.id ? Status.UPLOADED : Status.UPLOADING);\n\n const upload = useCallback(async () => {\n // @ts-expect-error fileSize is not available on android, addressed in future sdk https://github.com/expo/expo/pull/27293\n let fileSize = item.image.fileSize ?? item.image.filesize;\n if (!fileSize) {\n const base64str = item.image.uri.split('base64,')[1];\n if (base64str) {\n const decoded = Buffer.from(base64str, 'base64');\n fileSize = decoded.length;\n } else {\n setStatus(Status.INVALID_FILE);\n modifyImage({ error: true });\n return;\n }\n }\n if (fileSize > MB5) {\n setStatus(Status.TOO_LARGE);\n modifyImage({ error: true });\n return;\n }\n try {\n const { id } = await uploadRequestPhoto(\n item.image.uri,\n _.throttle(({ progress }: AxiosProgressEvent) => setProgress(progress ?? 0), 250, {\n leading: true,\n trailing: true\n }),\n abortRef.current\n );\n modifyImage({ id, error: false });\n setStatus(Status.UPLOADED);\n } catch (e: unknown) {\n const err = e as AxiosError;\n if (err.status === 422) {\n modifyImage({ error: true });\n setStatus(Status.INVALID_FILE);\n } else if (err.code !== AxiosError.ERR_CANCELED) {\n Toast.show({\n type: 'error',\n text1: t('uhOh'),\n text2: err.message ?? t('uploadFailed')\n });\n modifyImage({ error: true });\n setStatus(Status.OTHER_ERROR);\n }\n }\n // modifyImage and t should not change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [item.image.uri]);\n\n useEffect(() => {\n if (!item.id) {\n void upload();\n }\n }, [item.id, upload]);\n\n useEffect(\n () => () => {\n if (!abortRef.current.signal.aborted) abortRef.current.abort();\n },\n []\n );\n\n const { backgroundColor, opacity, hidden, buttonColor, ref, width } = useFileItemAnimation(\n item,\n progress\n );\n\n const hasError = [Status.INVALID_FILE, Status.OTHER_ERROR, Status.TOO_LARGE].includes(status);\n\n if (!item.image) {\n return null;\n }\n\n return (\n <>\n \n {\n setStatus(Status.UPLOADING);\n void upload();\n }}\n >\n \n {status === Status.UPLOADING && !hidden && (\n \n \n \n )}\n {status === Status.UPLOADING && !hidden && }\n\n \n {\n abortRef.current.abort();\n modifyImage(undefined);\n }}\n hitSlop={{ left: Size.XS, top: Size.XS, right: Size.XS, bottom: Size.XS }}\n >\n \n \n \n \n \n \n {status === Status.INVALID_FILE && {t('invalidFile')}}\n {status === Status.OTHER_ERROR && {t('uploadFailed')}}\n {status === Status.TOO_LARGE && {t('fileTooLarge')}}\n \n \n );\n};\n\nexport default FileItem;\n\nconst ErrorCaption = styled(Caption)`\n color: ${({ theme }) => theme.colors.error};\n text-align: center;\n`;\n\nconst ProgressContainer = styled.View`\n margin: ${Size.X2_S}px;\n border-radius: ${({ theme }) => theme.roundness}px;\n height: ${Size.XS}px;\n background-color: ${({ theme }) => theme.colors.placeholder};\n overflow: hidden;\n`;\n\nconst ProgressFill = styled.View<{ percent: number }>`\n width: ${({ percent }) => percent * 100}%;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst DeleteBadge = styled(Animated.View)`\n position: absolute;\n top: ${-Size.X2_S}px;\n right: ${-Size.X2_S}px;\n width: ${IconSize.XS}px;\n height: ${IconSize.XS}px;\n background-color: ${({ theme }) => theme.colors.error};\n border-radius: ${IconSize.XS}px;\n align-items: center;\n justify-content: center;\n`;\n\nconst ImageContainer = styled(Animated.View)<{ hasError: boolean }>`\n aspect-ratio: 1;\n border-radius: ${({ theme }) => theme.roundness}px;\n ${({ hasError, theme }) => (hasError ? `border: 1.5px solid ${theme.colors.error};` : '')};\n`;\n\nconst ActionContainer = styled.TouchableOpacity`\n width: 100%;\n height: 100%;\n justify-content: flex-end;\n`;\n\nconst AnimatedImage = styled(Animated.Image).attrs({ resizeMode: 'contain' })`\n width: 100%;\n height: 100%;\n position: absolute;\n`;\n\nconst Activity = styled(ActivityIndicator).attrs({\n size: 'large'\n})`\n position: absolute;\n align-self: center;\n width: 100%;\n height: 100%;\n`;\n","import React, { useCallback } from 'react';\nimport { IS_WEB, Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { HoverButton, Row } from 'src/components';\nimport takeImage from 'src/utils/takeImage';\nimport pickImage from 'src/utils/pickImage';\nimport { ImagePickerAsset } from 'expo-image-picker';\nimport { Camera, Image as ImageIcon } from 'react-native-feather';\nimport { LayoutAnimation, StyleProp, View, ViewStyle } from 'react-native';\nimport _ from 'lodash';\nimport FileItem from './FileItem';\nimport { useTranslation } from 'react-i18next';\nimport { ImageUpload } from './model';\n\ninterface Props {\n images: Record;\n onImageChange: React.Dispatch>>;\n buttonMode?: 'contained' | 'outlined';\n style?: StyleProp;\n}\n\nconst UploadFiles: React.FC = ({\n onImageChange,\n images,\n buttonMode = 'contained',\n style\n}) => {\n const { t } = useTranslation('common');\n\n const modifyImage = useCallback(\n (key: string, value: Partial | undefined) => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n onImageChange((prev) => {\n if (value) {\n return { ...prev, [key]: { ...prev[key], ...value } };\n } else {\n return { ..._.omit(prev, key) };\n }\n });\n },\n [onImageChange]\n );\n\n const selectImages = useCallback(\n async (camera: boolean) => {\n const imagePickerResult = camera ? await takeImage(true) : await pickImage(true);\n\n if (imagePickerResult && !imagePickerResult?.canceled) {\n imagePickerResult.assets.forEach(async (image) => {\n const key = getFileNameKey(image);\n if (!images[key]) {\n modifyImage(key, { image });\n }\n });\n }\n },\n [images, modifyImage]\n );\n\n return (\n \n {!!Object.keys(images).length && (\n \n {Object.entries(images).map(([key, value]) => (\n \n modifyImage(key, v)} />\n \n ))}\n \n )}\n \n {\n void selectImages(false);\n }}\n icon={ImageIcon}\n style={{ marginRight: Size.XS, flex: 1 }}\n >\n {t('photos', { ns: 'common' })}\n \n {!IS_WEB && (\n {\n void selectImages(true);\n }}\n icon={Camera}\n style={{ flex: 1 }}\n >\n {t('camera', { ns: 'common' })}\n \n )}\n \n \n );\n};\n\nexport default UploadFiles;\n\nconst PlaceholderView = styled.View`\n padding-vertical: ${Size.M}px;\n`;\n\nconst getFileNameKey = (image: ImagePickerAsset) =>\n image.uri.substring(image.uri.lastIndexOf('/') + 1, image.uri.length);\n\nconst ImagesHolder = styled.View`\n margin-bottom: ${Size.M}px;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n","import UploadFiles from './UploadFiles';\n\nexport type { ImageUpload } from './model';\nexport default UploadFiles;\n","import React, { SetStateAction, useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { View } from 'react-native';\nimport { Body, Caption, Headline, TextInput } from 'src/components';\nimport { Size } from 'src/constants';\nimport UploadFiles, { ImageUpload } from 'src/components/UploadFiles';\nimport styled from 'styled-components/native';\nimport { Weight, palette } from 'src/theme';\nimport { GuideElement, STEPS, useTourGuide } from 'src/scenes/PatientList/tour';\nimport useGoBack from 'src/hooks/useGoBack';\nimport color from 'color';\nimport { FormSection } from '../../style';\nimport { FormStateHook } from '../../hooks/useFormState';\n\ninterface Props {\n values: FormStateHook['values'];\n setFieldValue: FormStateHook['setFieldValue'];\n errors: FormStateHook['errors'];\n}\n\nconst CommentsAndFiles: React.FC = ({ values, setFieldValue, errors }) => {\n const { t } = useTranslation('patientProfile');\n const [images, setImages] = useState>(values.images ?? {});\n const onImageChange = useCallback(\n async (action: SetStateAction>) => {\n setImages((prev) => {\n const value = typeof action === 'function' ? action(prev) : action;\n void setFieldValue('images', value);\n return value;\n });\n },\n [setFieldValue]\n );\n\n const { exitTour } = useTourGuide();\n const goBack = useGoBack();\n const exitTourAndGoBackToMyPets = useCallback(async () => {\n await exitTour();\n goBack();\n }, [exitTour, goBack]);\n\n return (\n exitTourAndGoBackToMyPets()}\n semiTransparentBg\n >\n \n {t('commentsAndFiles')}\n\n {t('needToUpdate')}\n \n await setFieldValue('comments', comments)}\n error={!!errors.comments}\n msg={errors.comments && t(errors.comments)}\n multiline\n />\n \n \n \n \n {typeof errors.images === 'string' && {errors.images}}\n \n \n \n );\n};\n\nexport default CommentsAndFiles;\n\nconst Label = styled(Body)<{ error: boolean; hasData: boolean }>`\n color: ${({ theme, error }) => (error ? theme.colors.error : theme.colors.placeholder)};\n font-size: ${({ hasData }) => (hasData ? Size.XS : Size.S)}px;\n margin-bottom: ${({ hasData }) => (hasData ? -Size.S : 0)}px;\n margin-top: ${({ hasData }) => (hasData ? -Size.X3_S : Size.X3_S)}px;\n margin-left: ${-Size.X4_S}px;\n font-weight: ${Weight.REGULAR};\n`;\n\nconst ErrorCaption = styled(Caption)`\n color: ${({ theme }) => theme.colors.error};\n`;\n\nconst UploadContainer = styled.View`\n padding-top: ${Size.S}px;\n padding-horizontal: ${Size.S}px;\n background-color: ${({ theme }) =>\n theme.dark\n ? color(theme.colors.background).lighten(0.24).rgb().string()\n : color(theme.colors.background).darken(0.06).rgb().string()};\n color: ${({ theme }) => (theme.dark ? palette.WHITE_OPACITY_54 : palette.BLACK_OPACITY_54)};\n border-bottom-width: ${Size.X4_S}px;\n border-bottom-style: solid;\n border-bottom-color: ${({ theme }) =>\n theme.dark ? palette.WHITE_OPACITY_20 : palette.BLACK_OPACITY_10};\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n`;\n","import React from 'react';\nimport BasicInfo from './BasicInfo';\nimport AdditionalInfo from './AdditionalInfo';\nimport CommentsAndFiles from './CommentsAndFiles';\nimport { FormikData } from '../../helpers';\nimport { FormikErrors } from 'formik';\nimport { AssertsShape } from 'yup/lib/object';\nimport { FormStateHook } from '../../hooks/useFormState';\n\ninterface Props {\n values: FormikData;\n errors: FormikErrors>;\n setFieldValue: FormStateHook['setFieldValue'];\n}\n\nconst EditInfo: React.FC = ({ values, errors, setFieldValue }) => {\n return (\n <>\n \n \n \n \n );\n};\n\nexport default EditInfo;\n","import React from 'react';\nimport { Caption, Row } from 'src/components';\nimport { Size } from 'src/constants';\nimport { InfoUpdateItem } from 'src/interfaces/api/InfoUpdateRequest';\nimport { Weight } from 'src/theme';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\ninterface Props {\n infoUpdateItems: InfoUpdateItem[];\n}\n\nconst InfoUpdateItems: React.FC = ({ infoUpdateItems }) => {\n return (\n \n {infoUpdateItems.map((infoUpdateItem, i) => (\n \n {infoUpdateItem.dataType}\n \n {infoUpdateItem.newValue}\n \n \n ))}\n \n );\n};\n\nexport default InfoUpdateItems;\n\nconst Container = styled.View`\n gap: ${Size.X3_S}px;\n padding-horizontal: ${Size.S}px;\n`;\n","import { GENDER } from 'src/constants';\nimport { t } from 'i18next';\nimport moment from 'moment-timezone';\nimport { InfoUpdateItem } from 'src/interfaces/api/InfoUpdateRequest';\nimport { InferType, date, object, string } from 'yup';\nimport { Patient } from 'src/interfaces';\nimport _ from 'lodash';\nimport { ImageUpload } from 'src/components/UploadFiles';\n\nconst fieldNamesFromPatient: Array = [\n 'name',\n 'birthdate',\n 'breed',\n 'microchipNumber',\n 'rabiesTag',\n 'weight',\n 'sex',\n 'insuranceProvider',\n 'policyNumber',\n 'diet',\n 'medicalConditions'\n] as const;\nexport type FormikData = InferType;\n\nexport const validationSchema = object({\n name: string().default(null).max(80, t('patientProfile:maxLengthName')).nullable(),\n birthdate: date().default(null).nullable(),\n breed: string().default(null).max(255, t('patientProfile:maxLengthBreed')).nullable(),\n microchipNumber: string()\n .default(null)\n .max(50, t('patientProfile:maxLengthMicrochip'))\n .nullable(),\n rabiesTag: string().default(null).max(50, t('patientProfile:maxLengthRabies')).nullable(),\n weight: string().default(null).max(10, t('patientProfile:maxLengthWeight')).nullable(),\n sex: string().default(null).max(10, t('patientProfile:maxLengthSex')).nullable(),\n comments: string().default(null).max(255, t('patientProfile:maxLengthComments')).nullable(),\n insuranceProvider: string().default(undefined).max(255, t('patientProfile:maxLengthProvider')),\n policyNumber: string().default(undefined).max(255, t('patientProfile:maxLengthPolicyNum')),\n diet: string().default(undefined).max(255, t('patientProfile:maxLengthDiet')),\n medicalConditions: string().default(undefined).max(255, t('patientProfile:maxLengthMedical')),\n images: object()\n .test({\n test: (imagesDict: Record): boolean =>\n Object.values(imagesDict).every((image: ImageUpload) => !image?.error),\n message: t('patientProfile:deleteBeforeProceeding'),\n name: 'deleteBeforeProceeding'\n })\n .test({\n test: (imagesDict: Record): boolean =>\n Object.values(imagesDict).every((image: ImageUpload) => !!image?.id),\n message: t('common:imagesNotReady'),\n name: 'imagesNotReady'\n })\n .default({}),\n newPatientImageUri: string().default(null).nullable(),\n contactMethod: string().default('')\n});\n\nexport const contactRequiredFields: Array = [\n 'name',\n 'birthdate',\n 'breed',\n 'microchipNumber',\n 'rabiesTag',\n 'weight',\n 'sex',\n 'comments',\n 'images'\n] as const;\n\nexport const isFieldDirty = (\n field: keyof FormikData,\n values: FormikData,\n initialValues: FormikData\n): boolean => !_.isEqual(values[field], initialValues[field]);\n\nexport const createBasicInfoRequestItemArray = (values: FormikData, initialValues: FormikData) => {\n const contentPayloadItems: InfoUpdateItem[] = [];\n\n if (isFieldDirty('name', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('petID:name'),\n newValue: values.name\n });\n }\n\n if (isFieldDirty('birthdate', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('petID:dob'),\n newValue: moment(values.birthdate).format('M/D/YYYY') ?? ''\n });\n }\n\n if (isFieldDirty('breed', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('petID:breed'),\n newValue: values.breed\n });\n }\n\n if (isFieldDirty('microchipNumber', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:microchipTag'),\n newValue: values.microchipNumber\n });\n }\n\n if (isFieldDirty('rabiesTag', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:rabiesTag'),\n newValue: values.rabiesTag\n });\n }\n\n if (isFieldDirty('sex', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('petID:sex'),\n newValue: values.sex\n });\n }\n\n if (isFieldDirty('weight', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('petID:weight'),\n newValue: values.weight\n });\n }\n\n return contentPayloadItems;\n};\n\nexport const createAdditionalInfoItemArray = (values: FormikData, initialValues: FormikData) => {\n const contentPayloadItems: InfoUpdateItem[] = [];\n\n if (isFieldDirty('insuranceProvider', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:insuranceProvider'),\n newValue: values.insuranceProvider ?? ''\n });\n }\n\n if (isFieldDirty('policyNumber', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:policyNumber'),\n newValue: values.policyNumber ?? ''\n });\n }\n\n if (isFieldDirty('diet', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:diet'),\n newValue: values.diet ?? ''\n });\n }\n\n if (isFieldDirty('medicalConditions', values, initialValues)) {\n contentPayloadItems.push({\n dataType: t('patientProfile:medicalConditions'),\n newValue: values.medicalConditions ?? ''\n });\n }\n\n return contentPayloadItems;\n};\n\nexport const isAdditionalInfoDirty = (values: FormikData, initialValues: FormikData) => {\n return (\n isFieldDirty('insuranceProvider', values, initialValues) ||\n isFieldDirty('policyNumber', values, initialValues) ||\n isFieldDirty('diet', values, initialValues) ||\n isFieldDirty('medicalConditions', values, initialValues)\n );\n};\n\nexport const populateGenderIconName = (gender: string) => {\n if (!gender) return 'gender-male-female';\n\n switch (gender) {\n case GENDER.MALE:\n return 'gender-male';\n case GENDER.FEMALE:\n return 'gender-female';\n default:\n return 'gender-male-female';\n }\n};\n\nexport const initialValuesBuilder = (patient?: Patient): FormikData => {\n const values: FormikData = _.mergeWith(\n {\n name: patient?.name || '',\n birthdate: patient?.birthdate || null,\n breed: patient?.breed || '',\n microchipNumber: patient?.microchipNumber || '',\n rabiesTag: patient?.rabiesTag || '',\n sex: patient?.sex || '',\n weight: patient?.weight || '',\n insuranceProvider: patient?.insuranceProvider || '',\n policyNumber: patient?.policyNumber || '',\n diet: patient?.diet || '',\n medicalConditions: patient?.medicalConditions || '',\n newPatientImageUri: null,\n images: {}\n },\n _.pick(patient, fieldNamesFromPatient),\n (objValue, srcValue) => (typeof srcValue === 'string' ? srcValue : objValue)\n ) as FormikData;\n return values;\n};\n","import React, { useMemo } from 'react';\nimport { View } from 'react-native';\nimport { useTranslation } from 'react-i18next';\nimport { RadioButton } from 'react-native-paper';\nimport { Caption, Headline, Row, Subheading } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport InfoUpdateItems from './InfoUpdateItems';\nimport styled from 'styled-components/native';\nimport { IconSize, Size } from 'src/constants';\nimport { Weight } from 'src/theme';\nimport { InfoUpdateItem } from 'src/interfaces/api/InfoUpdateRequest';\nimport { FormStateHook } from '../../hooks/useFormState';\nimport { ImageUpload } from 'src/components/UploadFiles';\nimport {\n contactRequiredFields,\n createAdditionalInfoItemArray,\n createBasicInfoRequestItemArray,\n isFieldDirty\n} from '../../helpers';\n\ninterface Props {\n setContactMethod: React.Dispatch>;\n values: FormStateHook['values'];\n initialValues: FormStateHook['initialValues'];\n}\n\nconst ConfirmChanges: React.FC = ({ setContactMethod, initialValues, values }) => {\n const { t } = useTranslation('patientProfile');\n const { colors } = useAppTheme();\n\n const basicInfo = useMemo(\n () => createBasicInfoRequestItemArray(values, initialValues),\n [values, initialValues]\n );\n\n const imageInfo = useMemo(() => {\n if (values.newPatientImageUri === null) return [];\n const patientImageInfoUpdate: InfoUpdateItem = {\n dataType: t('patientImage'),\n newValue: t(values.newPatientImageUri !== '' ? 'newImageUpload' : 'deleting')\n };\n return [patientImageInfoUpdate];\n }, [values, t]);\n\n const additionalInfo = useMemo(\n () => createAdditionalInfoItemArray(values, initialValues),\n [values, initialValues]\n );\n\n return (\n <>\n {t('confirmYourChanges')}\n {!!basicInfo?.length && (\n <>\n {t('basicInfo')}\n {t('theseChangesAfter')}\n \n \n )}\n {(!!additionalInfo?.length || !!imageInfo.length) && (\n <>\n {t('additionalInfo')}\n {t('theseChangesImmediately')}\n \n \n )}\n {(!!values.comments || !!Object.values(values.images).length) && (\n {t('commentsAndFiles')}\n )}\n {!!values.comments && (\n <>\n {t('theseChangesSent')}\n \n {t('comments')}\n {values.comments}\n \n \n )}\n {!!Object.values(values.images).length && (\n <>\n \n {t('files')}\n \n {Object.values(values.images).map((image: ImageUpload, i: number) => (\n \n ))}\n \n \n \n )}\n {!!contactRequiredFields.some((field) => isFieldDirty(field, values, initialValues)) && (\n <>\n {t('preferredContactMethod')}\n \n {t('inTheEvent')}\n await setContactMethod(value)}\n value={values.contactMethod}\n >\n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default ConfirmChanges;\n\nconst CommentsAndFilesContainer = styled.View`\n gap: ${Size.X3_S}px;\n padding-horizontal: ${Size.S}px;\n`;\n\nconst StyledImage = styled.Image`\n aspect-ratio: 1;\n border-radius: ${({ theme }) => theme.roundness}px;\n height: ${IconSize.XL}px;\n width: ${IconSize.XL}px;\n`;\n\nconst ImagesHolder = styled.View`\n gap: ${Size.XS}px;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n","import React from 'react';\nimport { Image, View } from 'react-native';\nimport styled from 'styled-components/native';\nimport AnimalIcon from '../../../components/Icons/Animal';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { colorShade } from 'src/utils';\nimport { IconSize } from 'src/constants';\nimport { layout } from 'src/theme/globalStyles';\nimport { ActivityIndicator } from 'react-native-paper';\n\ninterface Props {\n uri: string;\n species: string;\n width: number;\n aspectRatio: number;\n patientIsMutating: boolean;\n}\n\nconst TempImageAvatar: React.FC = ({\n uri,\n species,\n aspectRatio,\n width,\n patientIsMutating\n}) => {\n const { colors } = useAppTheme();\n\n return (\n \n {patientIsMutating && (\n \n )}\n {!patientIsMutating && !!uri && }\n {!patientIsMutating && !uri && (\n \n \n \n )}\n \n );\n};\n\nexport default TempImageAvatar;\n\nconst PictureContainer = styled.View<{\n aspectRatio: number;\n width: number;\n}>`\n justify-content: center;\n width: ${({ width }) => width}px;\n aspect-ratio: ${({ aspectRatio }) => aspectRatio};\n border-radius: ${({ theme }) => theme.roundness}px;\n background-color: ${({ theme }) => colorShade(theme.colors.surface, 0.8)};\n`;\n","export enum FormState {\n VIEW_PROFILE,\n EDIT_INFO,\n CONFIRM_CHANGES\n}\n\nexport interface ReducerState {\n state: T;\n buttonText?: string;\n}\n\nexport enum ACTIONS {\n ADVANCE,\n GO_BACK\n}\n\nexport interface Actions {\n action: ACTIONS;\n}\n\nexport const STATES: { [state in FormState]: Omit, 'data'> } = {\n [FormState.VIEW_PROFILE]: {\n state: FormState.VIEW_PROFILE\n },\n [FormState.EDIT_INFO]: {\n state: FormState.EDIT_INFO,\n buttonText: 'patientProfile:saveChanges'\n },\n [FormState.CONFIRM_CHANGES]: {\n state: FormState.CONFIRM_CHANGES,\n buttonText: 'patientProfile:looksGood'\n }\n};\n","import { deletePatientPhoto, MutationKeys, postPatientPhoto, QueryKeys } from 'src/api';\nimport { Action, manipulateAsync } from 'expo-image-manipulator';\nimport pickImage from 'src/utils/pickImage';\nimport { UseMutateFunction, useMutation, useQueryClient } from 'react-query';\nimport Toast from 'react-native-toast-message';\nimport { useTranslation } from 'react-i18next';\nimport takeImage from 'src/utils/takeImage';\nimport { useCallback } from 'react';\nimport { Patient } from 'src/interfaces';\n\ninterface UploadPhotoHook {\n preparePhotoUpload: (camera: boolean) => Promise;\n uploadPhoto: UseMutateFunction;\n deletePhoto: () => void;\n isMutating: boolean;\n}\ninterface Options {\n /**\n * Series of actions to manipulate the photo before uploading.\n */\n manipulate?: Action[];\n}\n\nconst useUploadPatientPhoto: (patient?: Patient, options?: Options) => UploadPhotoHook = (\n patient,\n { manipulate = [] } = {}\n): UploadPhotoHook => {\n const { t } = useTranslation('patientProfile');\n\n const queryClient = useQueryClient();\n\n const { mutateAsync: uploadPhoto, isLoading: isUploading } = useMutation({\n mutationKey: [MutationKeys.PATIENT_PHOTO_UPLOAD, patient?.patientId],\n mutationFn: async ({ patient, uri }: { patient: Patient; uri: string }) =>\n await postPatientPhoto(patient.sourceId, patient.patientId, uri),\n onSuccess: async () => {\n await queryClient.refetchQueries({ queryKey: [QueryKeys.PATIENT, patient?.patientId] });\n await queryClient.invalidateQueries({\n queryKey: [QueryKeys.PATIENTS]\n });\n },\n\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n }\n });\n\n const { mutateAsync: deletePhoto, isLoading: isDeleting } = useMutation({\n mutationKey: [MutationKeys.PATIENT_PHOTO_UPLOAD, patient?.patientId],\n mutationFn: async () => {\n if (!patient) return;\n return await deletePatientPhoto(patient.sourceId, patient.patientId);\n },\n onSuccess: (_) => {\n void queryClient.invalidateQueries([QueryKeys.PATIENT, patient?.patientId]);\n Toast.show({ text1: t('deletePhotoSuccess') });\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: error.name,\n text2: error.message\n });\n }\n });\n\n const preparePhotoUpload = useCallback(\n async (camera: boolean): Promise => {\n const imagePickerResult = camera ? await takeImage() : await pickImage();\n if (imagePickerResult && !imagePickerResult?.canceled) {\n const imageResult = await manipulateAsync(imagePickerResult.assets[0].uri, manipulate);\n return imageResult.uri;\n }\n return undefined;\n },\n [manipulate]\n );\n\n return { preparePhotoUpload, uploadPhoto, deletePhoto, isMutating: isUploading || isDeleting };\n};\n\nexport default useUploadPatientPhoto;\n","import MaskedView from '@react-native-masked-view/masked-view';\nimport React, { PropsWithChildren } from 'react';\nimport { IS_WEB, Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\ninterface Props extends PropsWithChildren {\n width: number;\n aspectRatio: number;\n}\n\nconst AvatarMaskedView: React.FC = ({ width, aspectRatio, children }) => {\n if (IS_WEB) return <>{children};\n return (\n \n \n \n \n }\n >\n {children}\n \n );\n};\n\nexport default AvatarMaskedView;\n\nconst Rectangle = styled.View<{ width: number; aspectRatio: number }>`\n position: absolute;\n height: ${({ width, aspectRatio }) => width / aspectRatio - Size.S}px;\n width: ${({ width }) => width}px;\n background-color: black;\n`;\n\nconst Cutout = styled.View<{ width: number }>`\n height: ${Size.X2_L}px;\n width: ${Size.X2_L}px;\n border-radius: ${Size.X2_L}px;\n bottom: 0px;\n right: ${({ width }) => width / 2}px;\n position: absolute;\n background-color: black;\n`;\n","import React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PatientAvatar from 'src/components/PatientAvatar';\nimport TempImageAvatar from 'src/scenes/PatientProfile/components/TempImageAvatar';\nimport {\n IMG_ASPECT_RATIO_MOBILE,\n IMG_ASPECT_RATIO_STANDARD,\n IS_WEB,\n PATIENT_STATUSES,\n Size\n} from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport { Patient } from 'src/interfaces';\nimport styled from 'styled-components/native';\nimport { FormState, ReducerState } from '../model';\nimport useUploadPatientPhoto from 'src/hooks/react-query/useUploadPatientPhoto';\nimport _ from 'lodash';\nimport { Camera, Trash2, Image as FeatherImage } from 'react-native-feather';\nimport { palette } from 'src/theme';\nimport AvatarMaskedView from './AvatarMaskedView';\nimport { Caption } from 'src/components';\nimport { View } from 'react-native';\nimport { GuideElement, STEPS } from 'src/scenes/PatientList/tour';\nimport { StyledFAB } from '../style';\nimport { FormStateHook } from '../hooks/useFormState';\n\ninterface Props {\n state: ReducerState;\n patient: Patient;\n setFieldValue: FormStateHook['setFieldValue'];\n newPatientImageUri: string | null;\n patientIsMutating: boolean;\n}\n\nconst PatientProfileAvatar: React.FC = ({\n state,\n patient,\n setFieldValue,\n newPatientImageUri,\n patientIsMutating\n}) => {\n const { isMobile, maxContentWidth } = useViewMode();\n const { t } = useTranslation();\n\n const { preparePhotoUpload, isMutating } = useUploadPatientPhoto(patient);\n\n const onPressCameraOrUpload = useMemo(\n () =>\n _.debounce(async (isCamera: boolean) => {\n if (!patient) return;\n const uri = await preparePhotoUpload(isCamera);\n if (uri) void setFieldValue('newPatientImageUri', uri);\n }),\n [patient, preparePhotoUpload, setFieldValue]\n );\n\n const onPressDeletePhoto = useMemo(\n () =>\n _.debounce(() => {\n void setFieldValue('newPatientImageUri', '');\n }),\n [setFieldValue]\n );\n\n const patientStatus = useMemo(() => {\n if (patient?.deceasedDate) {\n return PATIENT_STATUSES.DECEASED;\n }\n return patient?.status as PATIENT_STATUSES;\n }, [patient]);\n\n const avatarAspectRatio = useMemo(() => {\n return isMobile ? IMG_ASPECT_RATIO_MOBILE : IMG_ASPECT_RATIO_STANDARD;\n }, [isMobile]);\n\n return (\n \n \n \n \n {newPatientImageUri === null && (\n \n )}\n {newPatientImageUri !== null && (\n \n )}\n {state.state === FormState.EDIT_INFO && !isMutating && (\n \n {!IS_WEB && (\n }\n onPress={() => onPressCameraOrUpload(true)}\n />\n )}\n (\n \n )}\n onPress={() => onPressCameraOrUpload(false)}\n />\n }\n onPress={onPressDeletePhoto}\n />\n \n )}\n {patientStatus !== PATIENT_STATUSES.ACTIVE && (\n \n {t(`petList:${patientStatus}`)}\n \n )}\n \n \n \n \n );\n};\n\nexport default PatientProfileAvatar;\n\nconst Container = styled.View`\n align-self: center;\n margin-top: ${({ theme }) => (!theme.viewMode.isMobile ? Size.S : 0)}px;\n background-color: ${({ theme }) => theme.colors.background};\n`;\n\nconst StatusContainer = styled.View`\n position: absolute;\n bottom: 0px;\n left: 0px;\n padding: ${Size.X3_S}px;\n background-color: ${({ theme }) => theme.colors.backdrop};\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nconst EditFabContainer = styled.View`\n position: absolute;\n gap: ${Size.S}px;\n right: ${({ theme }) => (theme.viewMode.isMobile ? Size.XS : Size.S)}px;\n bottom: ${!IS_WEB ? Size.L : Size.S}px;\n`;\n","import { RefObject, useReducer } from 'react';\nimport { ACTIONS, Actions, FormState, ReducerState, STATES } from '../model';\nimport { LayoutAnimation, Platform } from 'react-native';\nimport { AlertHandle } from 'src/components';\nimport { Client, Patient } from 'src/interfaces';\nimport { Request, RequestType } from 'src/interfaces/api/Request';\nimport { useFormik } from 'formik';\nimport {\n FormikData,\n createAdditionalInfoItemArray,\n createBasicInfoRequestItemArray,\n initialValuesBuilder,\n validationSchema\n} from '../helpers';\nimport { UseMutateAsyncFunction, UseMutateFunction } from 'react-query';\nimport { InfoUpdateRequest } from 'src/interfaces/api/InfoUpdateRequest';\nimport { pick } from 'lodash';\nimport { ImageUpload } from 'src/components/UploadFiles';\nimport { isDefined, queryClient } from 'src/utils';\nimport Toast from 'react-native-toast-message';\nimport { t } from 'i18next';\nimport { QueryKeys } from 'src/api';\n\nexport type FormStateHook = ReturnType;\n\nconst useFormState = (\n patient: Patient | undefined,\n user: Client,\n confirmModalRef: RefObject,\n goBack: () => void,\n submitAdditionalInfoUpdate: UseMutateAsyncFunction,\n submitInfoUpdateRequest: UseMutateAsyncFunction,\n uploadPhoto: UseMutateFunction<\n Patient,\n Error,\n {\n patient: Patient;\n uri: string;\n },\n unknown\n >,\n deletePhoto: () => void,\n dismissModal: () => void,\n isFromRequestWizard?: boolean\n) => {\n const initValues = validationSchema.cast(initialValuesBuilder(patient));\n const {\n values,\n errors,\n initialValues,\n setFieldValue,\n dirty,\n isValid,\n handleSubmit,\n resetForm,\n isSubmitting\n } = useFormik({\n initialValues: initValues,\n validationSchema,\n onSubmit: async (values, { resetForm }) => {\n const promises = [];\n\n if (!patient) {\n throw new Error('Patient is not defined');\n }\n if (values.newPatientImageUri) {\n const upload = uploadPhoto({ patient, uri: values.newPatientImageUri });\n promises.push(upload);\n } else if (values.newPatientImageUri === '') {\n const deleteP = deletePhoto();\n promises.push(deleteP);\n }\n const basicInfo = createBasicInfoRequestItemArray(values, initialValues);\n const additionalInfo = createAdditionalInfoItemArray(values, initialValues);\n const comments = values.comments ? [{ dataType: 'comments', newValue: values.comments }] : [];\n const requestImageIds = Object.values(values.images)\n .map((imageUpload: ImageUpload) => imageUpload.id)\n .filter(isDefined);\n\n if (basicInfo.length || comments.length || requestImageIds.length || additionalInfo.length) {\n const request = submitInfoUpdateRequest({\n practiceId: user.practiceId,\n patientId: patient.patientId,\n clientId: user.clientId,\n sourceId: user.sourceId,\n content: {\n informationUpdates: [...basicInfo, ...additionalInfo, ...comments],\n preferredContactMethod: values.contactMethod ?? '',\n origin: Platform.OS\n },\n requestImageIds,\n type: RequestType.InfoUpdate\n });\n promises.push(request);\n }\n\n if (additionalInfo.length) {\n const additionInfoUpdate = submitAdditionalInfoUpdate({\n ...patient,\n insuranceProvider: values.insuranceProvider ?? '',\n policyNumber: values.policyNumber ?? '',\n diet: values.diet ?? '',\n medicalConditions: values.medicalConditions ?? ''\n });\n promises.push(additionInfoUpdate);\n }\n\n await Promise.all(promises);\n await queryClient.invalidateQueries([QueryKeys.REQUESTS]);\n\n resetForm({\n values: {\n ...initialValuesBuilder(patient),\n ...pick(values, 'insuranceProvider', 'policyNumber', 'diet', 'medicalConditions')\n }\n });\n Toast.show({\n type: 'success',\n text1: t('updateSuccess', { ns: 'patientProfile' })\n });\n\n if (isFromRequestWizard) {\n dismissModal();\n } else {\n formAdvance();\n }\n }\n });\n\n const [state, dispatch] = useReducer(\n (state: ReducerState, { action }: Actions) => {\n const nextState = (state.state + 1) as FormState;\n const prevState = (state.state - 1) as FormState;\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n\n switch (action) {\n case ACTIONS.ADVANCE:\n if (!(nextState in FormState)) {\n return { ...STATES[0] };\n }\n return { ...STATES[nextState] };\n case ACTIONS.GO_BACK:\n if (state.state === FormState.EDIT_INFO && dirty) {\n confirmModalRef.current?.alert();\n return state;\n }\n if (\n !(prevState in FormState) ||\n (state.state === FormState.EDIT_INFO && isFromRequestWizard)\n ) {\n goBack();\n return state;\n }\n return { ...STATES[prevState] };\n }\n },\n { ...STATES[isFromRequestWizard ? FormState.EDIT_INFO : FormState.VIEW_PROFILE] }\n );\n\n const formAdvance = () => dispatch({ action: ACTIONS.ADVANCE });\n const formGoBack = () => dispatch({ action: ACTIONS.GO_BACK });\n\n return {\n state,\n formAdvance,\n formGoBack,\n values,\n errors,\n initialValues,\n setFieldValue,\n dirty,\n isValid,\n handleSubmit,\n resetForm,\n isSubmitting\n };\n};\n\nexport default useFormState;\n","import { Patient } from 'src/interfaces';\nimport { Request } from 'src/interfaces/api/Request';\nimport useUploadPatientPhoto from 'src/hooks/react-query/useUploadPatientPhoto';\nimport { InfoUpdateRequest } from 'src/interfaces/api/InfoUpdateRequest';\nimport { QueryKeys, patchPatient, postRequest } from 'src/api';\nimport Toast from 'react-native-toast-message';\nimport { useTranslation } from 'react-i18next';\nimport {\n UseMutateAsyncFunction,\n UseMutateFunction,\n useMutation,\n useQueryClient\n} from 'react-query';\n\nexport interface UsePatientDataHook {\n submitAdditionalInfoUpdate: UseMutateAsyncFunction;\n submitInfoUpdateRequest: UseMutateAsyncFunction;\n uploadPhoto: UseMutateFunction<\n Patient,\n Error,\n {\n patient: Patient;\n uri: string;\n },\n unknown\n >;\n deletePhoto: () => void;\n}\nconst usePatientData = (patient: Patient | undefined): UsePatientDataHook => {\n const { t } = useTranslation('patientProfile');\n const queryClient = useQueryClient();\n const { uploadPhoto, deletePhoto } = useUploadPatientPhoto(patient);\n const { mutateAsync: submitAdditionalInfoUpdate } = useMutation(\n async (patient: Patient) => await patchPatient(patient),\n {\n onSuccess: async () => queryClient.refetchQueries([QueryKeys.PATIENT, patient?.patientId]),\n onError: () => {\n Toast.show({\n type: 'error',\n text1: t('appointmentRequest:errorToast')\n });\n }\n }\n );\n\n const { mutateAsync: submitInfoUpdateRequest } = useMutation(\n async (request: InfoUpdateRequest) => await postRequest(request),\n {\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: t('appointmentRequest:errorToast'),\n text2: error.name\n });\n }\n }\n );\n\n return {\n submitAdditionalInfoUpdate,\n submitInfoUpdateRequest,\n uploadPhoto,\n deletePhoto\n };\n};\n\nexport default usePatientData;\n","import _ from 'lodash';\nimport React, { createContext, PropsWithChildren, useContext } from 'react';\nimport useGoBack from 'src/hooks/useGoBack';\n\nexport interface Context {\n closeModal: () => void;\n}\n\nconst defaultContext: Context = {\n closeModal: _.noop\n};\n\nconst ExitContext = createContext(defaultContext);\n\nexport const useExitProvider = () => useContext(ExitContext);\n\nconst ExitProvider: React.FC = ({ children }) => {\n const goBack = useGoBack();\n return {children};\n};\n\nexport default ExitProvider;\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { ScrollView } from 'react-native';\nimport { usePatient, useViewMode } from 'src/hooks';\nimport { layout } from 'src/theme/globalStyles';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { QueryKeys } from 'src/api';\nimport { Alert, AlertHandle, BottomButton, HoverButton, MasterView } from 'src/components';\nimport { QueryKey, useQueries } from 'react-query';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { TourGuideHandle } from 'src/module/TourGuide/model';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport ProfileView from './components/ViewProfile';\nimport EditInfo from './components/EditInfo';\nimport ConfirmChanges from './components/ConfirmChanges';\nimport PatientProfileAvatar from './components/PatientProfileAvatar';\nimport { useUser } from 'src/providers/ClientProvider';\nimport { FormState } from './model';\nimport { AlertOption } from 'src/components/Alert';\nimport styled from 'styled-components/native';\nimport { IS_ANDROID, Size } from 'src/constants';\nimport useUploadPatientPhoto from 'src/hooks/react-query/useUploadPatientPhoto';\nimport { ChevronLeft } from 'react-native-feather';\nimport useFormState from './hooks/useFormState';\nimport usePatientData from './hooks/usePatientData';\nimport { TourGuide } from '../PatientList/tour';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StyledFAB } from './style';\nimport { contactRequiredFields, isFieldDirty } from './helpers';\nimport _ from 'lodash';\nimport useGoBack from 'src/hooks/useGoBack';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { PseudoStackParams } from './patientProfileParams';\nimport { useExitProvider } from 'src/providers/ExitProvider';\n\nconst queries: QueryKey[] = [QueryKeys.PATIENT, QueryKeys.PATIENTS];\n\nfunction PatientProfile({\n route,\n navigation\n}: NativeStackScreenProps) {\n const { t } = useTranslation('patientProfile');\n const { user } = useUser();\n const patientId = route.params?.id;\n const isFromRequestWizard = route.params?.isFromRequestWizard;\n const { isMobile } = useViewMode();\n const exitProvider = useExitProvider();\n\n const { data: patient, isFetched } = usePatient(patientId);\n\n const { isMutating } = useUploadPatientPhoto(patient);\n const confirmModalRef = useRef(null);\n\n const { submitAdditionalInfoUpdate, submitInfoUpdateRequest, uploadPhoto, deletePhoto } =\n usePatientData(patient);\n\n const goBack = useGoBack();\n\n const dismissModal = () => {\n exitProvider.closeModal();\n };\n\n const {\n state,\n formAdvance,\n formGoBack,\n values,\n errors,\n setFieldValue,\n isValid,\n handleSubmit,\n resetForm,\n isSubmitting,\n initialValues\n } = useFormState(\n patient,\n user,\n confirmModalRef,\n goBack,\n submitAdditionalInfoUpdate,\n submitInfoUpdateRequest,\n uploadPhoto,\n deletePhoto,\n dismissModal,\n isFromRequestWizard\n );\n\n const confirmOptions: AlertOption[] = useMemo(\n () => [\n {\n action: () => {\n resetForm();\n formGoBack();\n },\n label: t('discardChanges:goBack'),\n type: 'neutral'\n },\n\n {\n label: t('discardChanges:keepEditing')\n }\n ],\n [formGoBack, resetForm, t]\n );\n\n useEffect(() => {\n if (!patientId || (isFetched && !patient)) {\n Toast.show({\n text1: t('petNotFound'),\n type: 'error'\n });\n const timeout = setTimeout(navigation.goBack, 500);\n return () => clearTimeout(timeout);\n }\n }, [patientId, isFetched, patient, navigation, t]);\n\n const bottomButtonPressed = () => {\n if (state.state === FormState.EDIT_INFO) {\n formAdvance();\n } else {\n handleSubmit();\n }\n };\n\n const results = useQueries(queries.map((key) => ({ queryKey: [key] })));\n const isRefreshing = results.some((query) => query.isRefetching && !query.isStale);\n\n const scrollRef = useRef(null);\n const providerRef = useRef(null);\n\n const submitDisabled = useMemo(() => {\n const needsContactMethod =\n state.state === FormState.CONFIRM_CHANGES &&\n contactRequiredFields.some((field) => isFieldDirty(field, values, initialValues)) &&\n !values.contactMethod;\n const submitDisabled =\n _.isEqual(values, initialValues) || !isValid || !!errors.images || needsContactMethod;\n return submitDisabled;\n }, [errors.images, initialValues, isValid, state.state, values]);\n\n const patientIsMutating = isMutating || isSubmitting;\n\n const { top, bottom } = useSafeAreaInsets();\n\n if (!patient) return ;\n\n return (\n \n \n {({ enabled }) => (\n <>\n \n }\n onPress={() => goBack()}\n disabled={patientIsMutating}\n />\n \n \n {\n providerRef.current?.updateScrollPositions();\n }}\n contentInset={{ bottom }}\n >\n \n \n {state.state === FormState.VIEW_PROFILE && (\n formAdvance()} />\n )}\n {state.state === FormState.EDIT_INFO && (\n \n )}\n {state.state === FormState.CONFIRM_CHANGES && (\n setFieldValue('contactMethod', value)}\n />\n )}\n \n \n {state.state !== FormState.VIEW_PROFILE && state.buttonText && (\n \n {isMobile && (\n bottomButtonPressed()}>\n {t(state.buttonText)}\n \n )}\n {!isMobile && (\n bottomButtonPressed()}\n >\n {t(state.buttonText)}\n \n )}\n \n )}\n \n \n \n )}\n \n \n );\n}\n\nexport default PatientProfile;\n\nconst Container = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n backgroundColor: theme.colors.background,\n flexGrow: 1,\n justifyContent: 'center'\n }\n}))`\n flex: 1;\n`;\n\nconst BottomButtonContainer = styled.View`\n margin-horizontal: ${({ theme }) =>\n !theme.viewMode.isMobile ? theme.viewMode.horizontalInset : 0}px;\n margin-bottom: ${({ theme }) => (!theme.viewMode.isMobile ? Size.S : 0)}px;\n padding-horizontal: ${({ theme }) => (!theme.viewMode.isMobile ? Size.S : 0)}px;\n`;\n\nconst BackFabContainer = styled.View<{ top: number }>`\n position: absolute;\n z-index: 1;\n left: ${({ theme }) => (theme.viewMode.isMobile ? Size.XS : Size.X2_S)}px;\n top: ${({ theme }) => (theme.viewMode.isMobile ? Size.XS : Size.L)}px;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n margin-top: ${({ top }) => (IS_ANDROID ? top : 0)}px;\n`;\n","import _ from 'lodash';\nimport { unMask } from 'react-native-mask-text';\nimport { ZIP_MASK } from 'src/constants';\nimport { Client } from 'src/interfaces/api';\nimport { InfoUpdateItem } from 'src/interfaces/api/InfoUpdateRequest';\nimport { multiMask } from 'src/utils';\nimport { AnySchema, object, string } from 'yup';\n\nexport const validationSchema = object>({\n firstName: string().required('common:required'),\n lastName: string().required('common:required'),\n email: string().email('informationUpdate:invalidEmail').required('common:required'),\n city: string().required('common:required').nullable(),\n state: string().required('common:required').nullable(),\n postalCode: string()\n .matches(/^(\\d{5}|\\d{9}|[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d)$/, 'common:invalid')\n .required('common:required')\n .nullable(),\n mobilePhone: string().length(10, 'common:invalid').nullable(),\n workPhone: string().length(10, 'common:invalid').nullable(),\n homePhone: string().length(10, 'common:invalid').nullable(),\n phone: string().test({\n test: (_, context) => {\n return !!(context.parent.homePhone ?? context.parent.mobilePhone ?? context.parent.workPhone);\n },\n message: 'informationUpdate:onePhoneRequired'\n }),\n addressLine1: string().required().nullable(),\n addressLine2: string()\n});\n\nexport const fieldNames = [\n 'firstName',\n 'lastName',\n 'email',\n 'city',\n 'state',\n 'postalCode',\n 'homePhone',\n 'workPhone',\n 'mobilePhone'\n] as const;\n\nexport type ProfileInfoFormFields = (typeof fieldNames)[number];\n\nexport type FormData = Pick & {\n addressLine1: string;\n addressLine2: string;\n};\n\nexport interface SupplementalData {\n phone: string;\n addressLine1: string;\n addressLine2: string;\n}\n\nexport type CompleteData = FormData & SupplementalData;\n\nexport const isFieldDirty = (\n field: keyof CompleteData,\n values: CompleteData,\n initialValues: CompleteData\n): boolean => values[field] !== initialValues[field];\n\nexport const addressFormatter = ({\n addressLine1,\n addressLine2,\n city,\n state,\n postalCode\n}: FormData & SupplementalData): string => {\n if (!addressLine1 || !city || !state || !postalCode) return '';\n return `${addressLine1}${addressLine2 && `\\n${addressLine2}`}\\n${city}, ${state} ${multiMask(\n postalCode,\n ZIP_MASK\n ).toUpperCase()}`;\n};\n\nexport const addressFields: Array = [\n 'addressLine1',\n 'addressLine2',\n 'city',\n 'state',\n 'postalCode'\n];\nexport const nameFields: Array = ['firstName', 'lastName'];\n\nexport const initialValuesBuilder = (user: Client): FormData => {\n const address = user.address ? user.address.split('\\n') : '';\n const values: FormData = _.defaults(\n {\n addressLine1: address[0] ?? '',\n addressLine2: address[1] ?? '',\n homePhone: unMask(user.homePhone ?? ''),\n mobilePhone: unMask(user.mobilePhone ?? ''),\n workPhone: unMask(user.workPhone ?? ''),\n postalCode: unMask(user.postalCode ?? '')\n },\n _.pick(user, fieldNames)\n ) as FormData;\n return values;\n};\n\nexport const createRequestItemArray = (values: CompleteData, initialValues: CompleteData) => {\n const contentPayloadItems: InfoUpdateItem[] = [];\n\n if (nameFields.some((f) => isFieldDirty(f, values, initialValues))) {\n contentPayloadItems.push({\n dataType: 'Name',\n newValue: `${values.firstName} ${values.lastName}`\n });\n }\n\n if (addressFields.some((f) => isFieldDirty(f, values, initialValues))) {\n const fullAddressText = addressFormatter(values);\n contentPayloadItems.push({\n dataType: 'Address',\n newValue: fullAddressText\n });\n }\n\n if (isFieldDirty('mobilePhone', values, initialValues)) {\n contentPayloadItems.push({\n dataType: 'Cell Phone',\n newValue: values.mobilePhone\n });\n }\n\n if (isFieldDirty('workPhone', values, initialValues)) {\n contentPayloadItems.push({\n dataType: 'Work Phone',\n newValue: values.workPhone\n });\n }\n\n if (isFieldDirty('homePhone', values, initialValues)) {\n contentPayloadItems.push({\n dataType: 'Home Phone',\n newValue: values.homePhone\n });\n }\n\n if (isFieldDirty('email', values, initialValues)) {\n contentPayloadItems.push({\n dataType: 'Email',\n newValue: values.email\n });\n }\n\n return contentPayloadItems;\n};\n","import React from 'react';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport { StyledModal, StyledCard } from 'src/components/common';\nimport TextInput, { TextInputProps } from 'src/components/kit/TextInput';\nimport { Margin, ZIP_MASK } from 'src/constants';\nimport { FormData } from './helpers';\nimport { useTranslation } from 'react-i18next';\nimport { CPrimaryButton, Headline } from 'src/components';\nimport { layout } from 'src/theme/globalStyles';\n\ninterface Props {\n hide: () => void;\n visible: boolean;\n onContinue?: () => void;\n propBuilder: (\n thisInput: keyof FormData,\n nextInput?: keyof FormData\n ) => Omit;\n}\n\nconst AddressChangeModal: React.FC = ({ hide, visible, onContinue, propBuilder }) => {\n const { t } = useTranslation('informationUpdate');\n return (\n \n \n \n \n {t('updateAddress')}\n \n \n \n \n \n \n {\n hide();\n onContinue?.();\n }}\n >\n {t('continue', { ns: 'common' })}\n \n \n \n \n );\n};\n\nexport default AddressChangeModal;\n","import { Divider } from 'react-native-paper';\nimport { Margin, Size } from 'src/constants/general';\nimport styled from 'styled-components/native';\nimport { Body, Row } from 'src/components';\n\nexport const StyledDivider = styled(Divider)`\n margin-vertical: ${Size.S}px;\n height: ${Size.X5_S}px;\n`;\n\nexport const StyledRow = styled(Row)`\n gap: ${Margin.Small}px;\n`;\nexport const ConfirmChangesSection = styled.View`\n margin-bottom: ${Size.S}px;\n margin-horizontal: ${Size.S}px;\n`;\n\nexport const RadioButtonGroupText = styled(Body)`\n margin-horizontal: ${Margin.ExtraLarge}px;\n margin-bottom: ${Margin.Large}px;\n align-self: center;\n text-align: center;\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RadioButton } from 'react-native-paper';\nimport { Caption, Headline, Row, Subheading } from 'src/components';\nimport { Size } from 'src/constants';\nimport { InfoUpdateItem } from 'src/interfaces/api/InfoUpdateRequest';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\ninterface Props {\n infoUpdates: InfoUpdateItem[];\n preferredContactMethod: string;\n setPreferredContactMethod: React.Dispatch>;\n}\n\nconst ConfirmChanges: React.FC = ({\n infoUpdates,\n preferredContactMethod,\n setPreferredContactMethod\n}) => {\n const { t } = useTranslation('requests:wizard');\n const { colors } = useAppTheme();\n\n return (\n \n {t('patientProfile:confirmYourChanges')}\n \n {infoUpdates.map((infoUpdateItem, i) => (\n \n {infoUpdateItem.dataType}\n \n {infoUpdateItem.newValue}\n \n \n ))}\n \n \n {t('patientProfile:preferredContactMethod')}\n {t('patientProfile:inTheEvent')}\n await setPreferredContactMethod(value)}\n value={preferredContactMethod}\n >\n \n \n \n \n \n \n \n \n );\n};\n\nexport default ConfirmChanges;\n\nconst ConfirmChangesContainer = styled.ScrollView`\n padding: ${Size.S}px;\n gap: ${Size.S}px;\n`;\n\nconst ItemContainer = styled.View`\n padding: ${Size.S}px;\n gap: ${Size.X2_S}px;\n`;\n\nconst ContactMethodContainer = styled.View`\n margin-top: ${Size.S}px;\n gap: ${Size.X2_S}px;\n`;\n","import React, { createRef, useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutAnimation, Platform, TextInput as TI, View } from 'react-native';\nimport { useFormik } from 'formik';\nimport { PHONE_MASK } from 'src/constants';\nimport TextInput, { TextInputProps } from 'src/components/kit/TextInput';\nimport { HelperText } from 'react-native-paper';\nimport {\n FormData,\n fieldNames,\n validationSchema,\n isFieldDirty,\n addressFormatter,\n CompleteData,\n addressFields,\n initialValuesBuilder,\n createRequestItemArray\n} from './helpers';\nimport { createNamedRefs, queryClient } from 'src/utils';\nimport _ from 'lodash';\nimport { useBoolean, useViewMode } from 'src/hooks';\nimport AddressChangeModal from './AddressChangeModal';\nimport {\n DiscardChangesModal,\n Column,\n StyledKeyboardAwareScrollView,\n BottomButton,\n HoverButton\n} from 'src/components';\nimport { useUser } from 'src/providers/ClientProvider';\nimport Toast from 'react-native-toast-message';\nimport { InfoUpdateItem, InfoUpdateRequest } from 'src/interfaces/api/InfoUpdateRequest';\nimport { useMutation } from 'react-query';\nimport { QueryKeys, postRequest } from 'src/api';\nimport { StyledRow } from './shared';\nimport useGoBack from 'src/hooks/useGoBack';\nimport ConfirmChanges from './ConfirmChanges';\nimport { RequestType } from 'src/interfaces';\n\nconst ProfileInformationUpdate: React.FC = () => {\n const goBack = useGoBack();\n const { t } = useTranslation('informationUpdate');\n const { user } = useUser();\n const { horizontalInset } = useViewMode();\n\n const [infoUpdates, setInfoUpdates] = useState([]);\n const [contactMethod, setContactMethod] = useState('email');\n\n const formData: FormData = Object.assign(\n { addressLine1: '', addressLine2: '' },\n _.pick(user, fieldNames)\n ) as FormData;\n\n const [inputs] = useState(createNamedRefs(formData));\n\n const fauxAddressRef = useState(createRef())[0];\n\n const { mutate: submitRequest } = useMutation(\n async (request: InfoUpdateRequest) => await postRequest(request),\n {\n onSuccess: () => {\n void queryClient.invalidateQueries([QueryKeys.REQUESTS]);\n Toast.show({ text1: t('success', { ns: 'common' }), text2: t('requestedToast') });\n goBack();\n },\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: t('errorToast', { ns: 'appointmentRequest' }),\n text2: error.name\n });\n }\n }\n );\n\n const {\n values,\n errors,\n handleSubmit,\n setFieldValue,\n dirty,\n isValid,\n initialValues,\n validateForm,\n handleBlur\n } = useFormik({\n initialValues: validationSchema.cast(initialValuesBuilder(user)),\n validationSchema,\n onSubmit: (values, { resetForm }) => {\n const changeRequests = createRequestItemArray(values, initialValues);\n submitRequest({\n practiceId: user.practiceId,\n clientId: user.clientId,\n sourceId: user.sourceId,\n content: {\n informationUpdates: changeRequests,\n preferredContactMethod: contactMethod,\n origin: Platform.OS\n },\n type: RequestType.InfoUpdate\n });\n resetForm({ values });\n setContactMethod('');\n }\n });\n\n const {\n value: addressFormVisible,\n toTrue: showAddressForm,\n toFalse: hideAddressForm\n } = useBoolean();\n\n const {\n value: confirmationVisible,\n toTrue: showConfirmation,\n toFalse: hideConfirmation\n } = useBoolean();\n\n const propBuilder = useCallback(\n (field: keyof FormData, next?: keyof FormData): Omit => {\n const errorMsg = errors[field];\n return {\n label: t(field),\n value: values[field] ?? '',\n onChangeText: (text: string) => {\n void setFieldValue(field, text, false);\n },\n error: !!errors[field],\n msg: errorMsg && t(errorMsg),\n thisRef: inputs[field],\n nextRef: next && inputs[next],\n right: initialValues[field] !== values[field] && {\n name: 'undo',\n onPress: () => {\n void setFieldValue(field, initialValues[field], true);\n }\n },\n onBlur: handleBlur(field)\n };\n },\n [errors, t, values, inputs, initialValues, handleBlur, setFieldValue]\n );\n\n const resetAddress = async (): Promise => {\n await Promise.all(addressFields.map(async (f) => await setFieldValue(f, initialValues[f])));\n void validateForm();\n };\n const fullAddressText = addressFormatter(values);\n const addressError =\n !!errors.addressLine1 || !!errors.city || !!errors.state || !!errors.postalCode;\n\n const disableSubmit = !dirty || !isValid;\n\n const bottomButtonPressed = async () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n if (!confirmationVisible) {\n const errors = await validateForm();\n if (Object.keys(errors).length) return;\n const changeRequests = createRequestItemArray(values, initialValues);\n changeRequests.forEach((change) => infoUpdates.push(change));\n showConfirmation();\n } else handleSubmit();\n };\n\n const cancelPressed = () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setInfoUpdates([]);\n hideConfirmation();\n };\n\n if (confirmationVisible) {\n return (\n <>\n \n \n cancelPressed()}>\n {t('cancel')}\n \n \n {t('requests:wizard.looksGood')}\n \n \n \n );\n }\n\n return (\n <>\n <>\n \n \n \n \n \n \n \n \n \n \n {\n showAddressForm();\n fauxAddressRef.current?.blur();\n }}\n error={addressError}\n msg={addressError ? t('invalidAddress') : ''}\n caretHidden={true}\n right={\n addressFields.some((v) => isFieldDirty(v, values, initialValues)) && {\n name: 'undo',\n onPress: resetAddress\n }\n }\n />\n \n \n \n\n {errors.phone && {t(errors.phone)}}\n \n \n \n \n \n {t('requests:wizard.submit')}\n \n \n \n \n );\n};\n\nexport default ProfileInformationUpdate;\n","import React from 'react';\nimport PatientListContent from '../PatientList/PatientListContent';\nimport { PATIENT_STATUSES } from 'src/constants';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport PatientUpdateStackParamsList from 'src/routes/stacks/PatientUpdateStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\n\nconst PatientSelector: React.FC<\n NativeStackScreenProps\n> = ({ route }) => {\n if (route?.params?.dismiss) {\n // Navigate to requests home\n }\n\n return ;\n};\n\nexport default PatientSelector;\n","import React from 'react';\nimport { createStackNavigator } from '@react-navigation/stack';\nimport { Screens } from '../screens';\nimport { FocusAwareStatusBar } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport PatientUpdateStackParamsList from './ParamsList';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport useDefaultStackOptions from '../useDefaultStackOptions';\nimport PatientProfile from 'src/scenes/PatientProfile';\nimport { NavigationContainer } from '@react-navigation/native';\nimport PatientSelector from 'src/scenes/PatientSelector';\nimport { Pressable } from 'react-native';\nimport { Margin } from 'src/constants';\nimport { X } from 'react-native-feather';\nimport useGoBack from 'src/hooks/useGoBack';\nimport ExitProvider from 'src/providers/ExitProvider';\n\nconst PatientUpdateStack = createStackNavigator();\n\nexport const PatientUpdateStackNavigator: React.FC = () => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('requests');\n const goBack = useGoBack();\n\n const themedHeader = useDefaultStackOptions();\n\n return (\n \n \n \n \n \n (\n \n \n \n )\n }}\n />\n \n \n \n \n \n );\n};\n","import React, { useEffect } from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Size } from 'src/constants';\n\nimport styled from 'styled-components/native';\nimport { HoverButton } from './kit';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useTranslation } from 'react-i18next';\nimport { useAuth } from 'src/providers/AuthProvider';\n\nconst SPINNER_MAX_TIME_ALLOWED = 10000;\n\nconst LoginLoader: React.FC = () => {\n const { t } = useTranslation();\n const { colors } = useAppTheme();\n const { logOut, token } = useAuth();\n const [showLoadingLogout, setShowLoadingLogout] = React.useState(false);\n useEffect(() => {\n const timer = setTimeout(() => setShowLoadingLogout(true), SPINNER_MAX_TIME_ALLOWED);\n return () => clearTimeout(timer);\n });\n return (\n \n \n {showLoadingLogout && !!token && (\n logOut()}>\n {t('login:error.tooLong')}\n \n )}\n \n );\n};\n\nexport default LoginLoader;\n\nconst ActivityIndicatorView = styled.View`\n flex: 1;\n background-color: ${({ theme }) => theme.colors.primary};\n justify-content: center;\n align-items: center;\n`;\n\nconst StyledHoverButton = styled(HoverButton).attrs(({ theme }) => ({\n labelStyle: { color: theme.colors.onPrimary }\n}))`\n margin-top: ${Size.L}px;\n border-color: ${({ theme }) => theme.colors.onPrimary};\n`;\n","import * as React from 'react';\nimport { createStackNavigator, TransitionPresets } from '@react-navigation/stack';\n\nimport { Navigators } from '../navigators';\nimport { Screens } from '../screens';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useTranslation } from 'react-i18next';\nimport { Portal } from 'react-native-paper';\nimport { UserProvider } from 'src/providers/ClientProvider';\nimport MainStackParamsList from './ParamsList';\nimport BottomTabNavigator from '../BottomTabNavigator';\nimport Reminders from 'src/scenes/Reminders';\nimport Prescriptions from 'src/scenes/Prescriptions';\nimport ContactUs from 'src/scenes/ContactUs';\nimport AfterHours from 'src/scenes/AfterHours';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport PatientID from 'src/scenes/PatientID';\nimport SelectPractice from 'src/scenes/SelectPractice';\nimport AddToCalendar from 'src/scenes/AddToCalendar';\nimport useDefaultModalScreenOptions from '../useDefaultModalScreenOptions';\nimport LoyaltyReward from 'src/scenes/LoyaltyReward';\nimport TransactionDetails from 'src/scenes/TransactionDetails';\nimport { IS_WEB } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useMemo } from 'react';\nimport LoyaltyTransactionProvider from 'src/providers/LoyaltyTransactionProvider';\nimport BiometricLoginOptIn from 'src/scenes/BiometricLoginOptIn';\nimport BiometricsPromptProvider from 'src/providers/BiometricsPromptProvider';\nimport PatientProfile from 'src/scenes/PatientProfile';\nimport ProfileInformationUpdate from 'src/scenes/ProfileInformationUpdate';\nimport { PatientUpdateStackNavigator } from '../PatientUpdateStackNavigator';\nimport LoginLoader from 'src/components/LoginLoader';\n\nconst MainStack = createStackNavigator();\n\nexport const MainStackScreen: React.FC = () => {\n const { _user, isLoggingOut } = useAuth();\n const { colors } = useAppTheme();\n const { t } = useTranslation();\n\n const modalScreenOptions = useDefaultModalScreenOptions();\n\n const STACK_SCREEN_OPTIONS = {\n headerShown: false,\n headerTitleStyle: fontStyles.headline\n };\n\n const transitionAnimation = useMemo(\n () => (IS_WEB ? TransitionPresets.ModalFadeTransition : undefined),\n []\n );\n\n if (!_user || isLoggingOut) {\n return ;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n null,\n headerShadowVisible: false,\n title: t('biometricLogin:biometricLogin')\n }}\n />\n \n \n \n \n \n \n \n \n \n );\n};\n","const reloadApp = async () => {\n window.location.reload();\n};\n\nexport default reloadApp;\n","import React, { useMemo } from 'react';\nimport { StyleProp, StyleSheet, TextStyle, ViewStyle } from 'react-native';\nimport { SvgProps } from 'react-native-svg';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { IconProps } from 'src/components/Icons';\nimport { Caption, TextProps } from 'src/components/Text';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { isString } from 'lodash';\n\nconst DEFAULT_STROKE_WIDTH = 2;\nconst STROKE_TO_FONT_WEIGHT_RATIO = 1 / 200;\ninterface Props extends TextProps {\n icon: React.FC;\n rowStyle?: StyleProp;\n}\nconst IconTextLink: React.FC = ({\n icon: Icon,\n children,\n color,\n style,\n rowStyle,\n ...props\n}) => {\n const { colors } = useAppTheme();\n const flatStyle: TextStyle = StyleSheet.flatten([\n { ...fontStyles.caption, color: color ?? colors.text },\n style\n ]);\n\n const strokeWidth = useMemo(() => {\n if (flatStyle.fontWeight) {\n if (isString(flatStyle.fontWeight))\n return parseInt(flatStyle.fontWeight) * STROKE_TO_FONT_WEIGHT_RATIO;\n return flatStyle.fontWeight * STROKE_TO_FONT_WEIGHT_RATIO;\n }\n return DEFAULT_STROKE_WIDTH;\n }, [flatStyle]);\n\n return (\n \n {' '}\n \n {children}\n \n \n );\n};\n\nexport default IconTextLink;\n","import { Caption, Row, Title } from 'src/components';\nimport { colorShade } from 'src/utils/colorValues';\nimport styled, { css } from 'styled-components/native';\nimport { MOBILE_WIDTH_MAX, MOBILE_WIDTH_SMALL, Size } from 'src/constants';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { palette, Weight } from 'src/theme';\nimport reloadApp from 'src/utils/reloadApp';\nimport IconTextLink from './IconTextLink';\nimport { RefreshCcw } from 'react-native-feather';\n\nconst MOBILE_HERO_HEIGHT = 290;\nexport const NOT_MOBILE_WIDTH = 850;\nconst NOT_MOBILE_HEIGHT = 700;\n\nexport const SectionTitle = styled(Title)`\n text-align: center;\n`;\n\nexport const LoadingContainer = styled.View`\n align-items: center;\n flex-grow: 1;\n justify-content: center;\n gap: ${Size.S}px;\n`;\n\nexport const CenteredIndicator = styled(ActivityIndicator).attrs({ size: 'large' })`\n flex: 1;\n`;\n\nexport const FormContainer = styled.View<{ isNarrow: boolean }>`\n padding: ${Size.M}px;\n align-self: center;\n ${(isNarrow) => (!isNarrow ? `padding-top: ${Size.S}px` : '')};\n margin-bottom: ${Size.X4_S}px;\n width: 100%;\n max-width: ${MOBILE_WIDTH_MAX}px;\n margin-horizontal: auto;\n flex-grow: 1;\n`;\n\nexport const ContentContainer = styled.SafeAreaView<{ isImageShowing: boolean; isNarrow: boolean }>`\n ${({ isNarrow }) => (isNarrow ? 'flex-grow: 1;' : 'flex: 1')}\n justify-content: space-between;\n`;\n\nexport const HeroImageContainer = styled.Image.attrs({ resizeMode: 'cover' })<{\n isNarrow: boolean;\n}>`\n opacity: ${({ theme }) => (theme.dark ? 0.75 : 1)};\n ${({ isNarrow, theme }) =>\n isNarrow\n ? css`\n width: ${theme.viewMode.windowWidth}px;\n height: ${MOBILE_HERO_HEIGHT}px;\n `\n : css`\n width: ${MOBILE_WIDTH_SMALL}px;\n height: 100%;\n `}\n`;\n\nexport const FootNoteContainer = styled.View`\n padding-horizontal: ${Size.M}px;\n padding-bottom: ${Size.M}px;\n`;\n\nexport const InnerContainer = styled.View<{ isNarrow: boolean }>`\n background-color: ${({ theme }) => colorShade(theme.colors.primary, 0.8)};\n ${({ isNarrow }) =>\n isNarrow\n ? css`\n flex-direction: column;\n flex: 1;\n `\n : css`\n flex-direction: row-reverse;\n align-self: center;\n width: ${NOT_MOBILE_WIDTH}px;\n height: ${NOT_MOBILE_HEIGHT}px;\n overflow: hidden;\n border-radius: ${Size.M}px;\n `}\n`;\n\nexport const Container = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n flexGrow: 1,\n justifyContent: 'center'\n }\n}))`\n flex: 1;\n`;\n\nexport const PrimaryColorBackground = styled.View`\n position: absolute;\n height: 100%;\n width: 100%;\n background: ${({ theme }) => theme.colors.primary};\n opacity: 0.4;\n`;\n\nexport const Link = styled(Caption)`\n color: ${({ theme }) => theme.colors.onPrimary};\n text-decoration-line: underline;\n font-weight: ${Weight.MEDIUM};\n letter-spacing: ${Size.X5_S}px;\n`;\n\nexport const DownloadOurAppContainer = styled.View`\n margin-top: ${Size.S}px;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n padding: ${Size.X2_S}px;\n gap: ${Size.XS}px;\n max-width: ${({ theme }) => theme.viewMode.maxContentWidth}px;\n`;\n\nexport const StyledRow = styled(Row)`\n gap: ${Size.X4_L}px;\n`;\n\nexport const AppStoreBadgeContainer = styled.View`\n padding: 9px;\n`;\n\nexport const AppStoreContentInnerContainer = styled.View`\n align-items: center;\n`;\n\nexport const AppStoreContentContainer = styled(Row)<{ isNarrow: boolean }>`\n gap: ${({ isNarrow }) => (isNarrow ? Size.M : Size.X4_L)}px;\n`;\n\nexport const ErrorCaption = styled(Caption)`\n color: ${palette.AB_BRIGHT_WHITE};\n font-weight: ${Weight.MEDIUM};\n`;\n\nexport const DebugContainer = styled.View`\n padding-horizontal: ${Size.M}px;\n padding-bottom: ${Size.M}px;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nexport const RefreshTextLink = styled(IconTextLink).attrs({\n onPress: reloadApp,\n icon: RefreshCcw\n})`\n text-decoration-line: underline;\n color: ${({ theme }) => theme.colors.onPrimary};\n font-weight: ${Weight.MEDIUM};\n letter-spacing: 0.5px;\n align-self: flex-end;\n`;\n","import React from 'react';\nimport { Caption } from 'src/components';\nimport { Size } from 'src/constants';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { palette, Weight } from 'src/theme';\nimport styled from 'styled-components/native';\n\ninterface Props {\n isFetched: boolean;\n}\n\nconst AuthErrorMessage: React.FC = ({ isFetched }) => {\n const { error } = useAuth();\n\n if (!isFetched) return null;\n\n return (\n <>\n {!!error?.message && (\n \n {error?.message}\n \n )}\n \n \n );\n};\n\nexport default AuthErrorMessage;\n\nconst ErrorCaption = styled(Caption)`\n color: ${({ theme }) => theme.colors.error};\n font-weight: ${Weight.REGULAR};\n letter-spacing: 0.5px;\n`;\n\nconst ErrorMessageContainer = styled.View`\n background-color: ${({ theme: { dark } }) =>\n dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70};\n border-radius: ${Size.X3_S}px;\n padding: ${Size.XS}px ${Size.XS}px;\n align-items: flex-start;\n`;\n\nconst FlexContainer = styled.View`\n flex: 1;\n`;\n","import _ from 'lodash';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { forgotPassword } from 'src/api';\nimport Practice from 'src/interfaces/api/Practice';\n\nconst useForgotPassword = () => {\n const { t } = useTranslation('login');\n const { mutate, isLoading: passwordResetSending } = useMutation({\n mutationFn: forgotPassword,\n onSuccess: (data, vars) =>\n Toast.show({\n text1: t('common:success'),\n text2: t('passwordResetSent', { email: vars.email })\n }),\n onError: () =>\n Toast.show({\n text1: t('uhOh', { ns: 'common' }),\n text2: t('error', { ns: 'common' }),\n type: 'error'\n })\n });\n\n const requestPasswordReset = useMemo(\n () => _.debounce((email: string, practiceId: Practice['id']) => mutate({ email, practiceId })),\n [mutate]\n );\n\n return { requestPasswordReset, passwordResetSending };\n};\n\nexport default useForgotPassword;\n","import { FormikErrors } from 'formik';\nimport { useMemo } from 'react';\nimport { LayoutAnimation } from 'react-native';\nimport { IS_IOS } from 'src/constants';\nimport { emailSchema, LoginForm } from './validation';\n\ninterface Props {\n values: LoginForm;\n errors: FormikErrors;\n isFetched: boolean;\n debouncedEmail: string;\n}\nconst useLoginComponentControl = ({ values, errors, isFetched, debouncedEmail }: Props) => {\n return useMemo(() => {\n const { availablePractices = [] } = values;\n if (IS_IOS) LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n const continueAllowed =\n isFetched &&\n emailSchema.isValidSync(debouncedEmail) &&\n !errors.email &&\n !errors.selectedPractices &&\n !errors.availablePractices &&\n !!values.availablePractices?.length;\n const primarySelectedPractice = values.selectedPractices?.[0];\n const loginTitle = primarySelectedPractice?.userRegistered ? 'login:signIn' : 'login:signUp';\n const longTitle = 'login:longTitle';\n return {\n showEmailActivity:\n emailSchema.isValidSync(values.email) &&\n (debouncedEmail !== values.email.toLowerCase() || !isFetched),\n showPractices:\n isFetched &&\n !errors.email &&\n !errors.availablePractices &&\n availablePractices.length > 1 &&\n !availablePractices.every((p) => !p.userRegistered),\n showPassword: continueAllowed,\n showRememberMe: continueAllowed,\n showConfirmPassword: continueAllowed && !primarySelectedPractice?.userRegistered,\n showForgotEmail: !continueAllowed,\n showForgotPassword: continueAllowed && primarySelectedPractice?.userRegistered,\n showLoginButton: continueAllowed,\n primarySelectedPractice,\n title: values.selectedPractices.length && !errors.email ? loginTitle : longTitle\n };\n }, [isFetched, debouncedEmail, errors, values]);\n};\n\nexport default useLoginComponentControl;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\n\nexport enum STEPS {\n DRAWER = 'DRAWER',\n EMAIL = 'EMAIL',\n MULTIPLE_PRACTICES_DROPDOWN = 'MULTIPLE_PRACTICES_DROPDOWN',\n MULTIPLE_PRACTICES_AVAILABLE = 'MULTIPLE_PRACTICES_AVAILABLE',\n PRACTICES_REGISTERED = 'PRACTICES_REGISTERED'\n}\n\nconst LandingTourMap: TourMap = {\n [STEPS.DRAWER]: {\n id: STEPS.DRAWER,\n priority: 0\n },\n [STEPS.EMAIL]: {\n id: STEPS.EMAIL,\n priority: 1\n },\n [STEPS.MULTIPLE_PRACTICES_DROPDOWN]: {\n id: STEPS.MULTIPLE_PRACTICES_DROPDOWN,\n priority: 2\n },\n [STEPS.MULTIPLE_PRACTICES_AVAILABLE]: {\n id: STEPS.MULTIPLE_PRACTICES_AVAILABLE,\n priority: 3\n },\n [STEPS.PRACTICES_REGISTERED]: {\n id: STEPS.PRACTICES_REGISTERED,\n priority: 4\n }\n};\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.LANDING,\n LandingTourMap\n);\n","import { AxiosError } from 'axios';\nimport { t } from 'i18next';\nimport { isEqual } from 'lodash';\nimport React from 'react';\nimport { Trans } from 'react-i18next';\nimport { Mail, RefreshCcw } from 'react-native-feather';\nimport Toast from 'react-native-toast-message';\nimport { QueryKeys } from 'src/api';\nimport { ALLY_SUPPORT_EMAIL } from 'src/constants';\nimport { availablePracticesOptions } from 'src/hooks/react-query/useAvailablePractices';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport { openEmail, queryClient, transparent } from 'src/utils';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport useResendConfirmationEmail from '../helpers/useResendConfirmationEmail';\nimport IconTextLink from './IconTextLink';\nimport { ErrorCaption } from './style';\n\ninterface Props {\n selectedPractice?: AvailablePractice;\n error: string;\n email: string;\n}\nconst ErrorMessage: React.FC = ({ selectedPractice, error, email }) => {\n const { colors } = useAppTheme();\n const { sendConfirmationEmail, isSending } = useResendConfirmationEmail(email, selectedPractice);\n\n return (\n await openEmailToAlly()}\n />\n ),\n contactPractice: (\n await openEmail(selectedPractice?.practiceEmail)}\n />\n ),\n resendConfirmation: (\n }\n onPress={async () => sendConfirmationEmail()}\n />\n ),\n refresh: (\n }\n onPress={async () => refreshData(email)}\n />\n )\n }}\n ns='login'\n >\n {error}\n \n );\n};\n\nexport default ErrorMessage;\n\nconst refreshData = async (email: string) => {\n try {\n const prevData = await queryClient.getQueryData([\n QueryKeys.CHECK_EMAIL,\n email.toLowerCase()\n ]);\n const nextData = await queryClient.fetchQuery(availablePracticesOptions(email.toLowerCase()));\n if (isEqual(prevData, nextData)) {\n Toast.show({\n text1: t('noNewDataTitle', { ns: 'login' }),\n text2: t('noNewData', { ns: 'login' }),\n type: 'error'\n });\n } else {\n Toast.show({\n text1: t('newDataTitle', { ns: 'login' }),\n text2: t('newData', { ns: 'login' })\n });\n }\n } catch (e) {\n const error = e as AxiosError;\n if (error.response?.status === 404) {\n Toast.show({\n text1: t('noAccountTitle', { ns: 'login' }),\n text2: t('noAccount', { email, ns: 'login' }),\n type: 'error'\n });\n }\n }\n};\n","import { FieldMetaProps, FormikErrors, FormikTouched } from 'formik';\nimport _ from 'lodash';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { LayoutAnimation, Pressable, TextInput as TI } from 'react-native';\nimport { ActivityIndicator, Checkbox } from 'react-native-paper';\nimport {\n SecureTextInput,\n Alert,\n TextInput,\n AlertHandle,\n Body,\n HoverButton,\n Row,\n DropDown,\n HelperButton,\n Caption\n} from 'src/components';\nimport { IconSize, Size } from 'src/constants';\nimport { AvailablePractice, UserConfirmationStatus } from 'src/interfaces/api/AvailablePractices';\nimport { palette, Weight } from 'src/theme';\nimport styled, { css } from 'styled-components/native';\nimport { LoginForm } from '../helpers/validation';\nimport { SectionTitle } from './style';\nimport AuthErrorMessage from './ErrorMessages';\nimport useForgotPassword from '../helpers/useForgotPassword';\nimport useLoginComponentControl from '../helpers/useLoginComponentControl';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS } from '../tour';\nimport { useNavigation } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport * as LocalAuthentication from 'expo-local-authentication';\nimport { isDevice } from 'expo-device';\nimport ErrorMessage from './ErrorMessage';\nimport { AlertTriangle } from 'react-native-feather';\nimport Icon from 'react-native-vector-icons/MaterialCommunityIcons';\nimport { layout } from 'src/theme/globalStyles';\nimport FaceRecognition from 'src/components/Icons/FaceRecognition';\nimport { secureStoreGetSignInCredentials } from 'src/providers/AuthProvider/helper';\nimport { AsyncStorageKeys } from 'src/api';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useStorage } from 'src/hooks';\nimport useBiometrics from 'src/hooks/useBiometrics';\nimport { isDefined } from 'src/utils';\n\ninterface Props {\n setFieldTouched: (\n field: string,\n touched?: boolean | undefined,\n shouldValidate?: boolean | undefined\n ) => Promise | Promise>;\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean | undefined\n ) => Promise | Promise>;\n values: LoginForm;\n errors: FormikErrors;\n isFetched: boolean;\n touched: FormikTouched;\n focusForm: () => void;\n setValues: (\n values: React.SetStateAction\n ) => Promise | Promise>;\n getFieldMeta: (name: string) => FieldMetaProps;\n handleSubmit: (e?: React.FormEvent | undefined) => void;\n debouncedEmail: string;\n practicesFetched: boolean;\n}\n\nconst LoginFormComponent: React.FC = ({\n setFieldTouched,\n setFieldValue,\n values,\n errors,\n isFetched,\n touched,\n focusForm,\n setValues,\n handleSubmit,\n debouncedEmail,\n practicesFetched\n}) => {\n const { t } = useTranslation('login');\n const { navigate } = useNavigation();\n const { viewMode, colors, dark } = useAppTheme();\n const {\n title,\n primarySelectedPractice,\n showEmailActivity,\n showPassword,\n showConfirmPassword,\n showPractices,\n showForgotEmail,\n showForgotPassword,\n showRememberMe,\n showLoginButton\n } = useLoginComponentControl({ values, errors, isFetched, debouncedEmail });\n const { requestPasswordReset } = useForgotPassword();\n const forgotPasswordRef = useRef(null);\n\n const { logIn } = useAuth();\n const [, setBiometricAuthAppSetting] = useStorage([\n AsyncStorageKeys.BIOMETRIC_AUTH_APP_SETTING\n ]);\n\n const { canUseBiometrics, supportsFaceRecognition } = useBiometrics();\n\n const [biometricAuthAllowed, setBiometricAuthAllowed] = useState(false);\n\n useEffect(() => {\n void secureStoreGetSignInCredentials().then((credentials) => {\n if (isDefined(canUseBiometrics)) setBiometricAuthAllowed(canUseBiometrics && !!credentials);\n });\n }, [canUseBiometrics]);\n\n const loginWithBiometrics = async () => {\n const result = await LocalAuthentication.authenticateAsync();\n if (result.success) {\n setBiometricAuthAppSetting(true);\n const credentials = await secureStoreGetSignInCredentials();\n if (credentials) {\n await logIn(credentials);\n }\n }\n };\n\n const emailRef = useRef(null);\n const passwordRef = useRef(null);\n const confirmPasswordRef = useRef(null);\n\n const emailMessage =\n (debouncedEmail.length > 4 && errors.email && practicesFetched) ||\n errors.availablePractices ||\n (!showPractices && errors.selectedPractices);\n\n return (\n \n {t(title)}\n \n setFieldValue('email', text)}\n value={values.email}\n onFocus={async () => {\n if (viewMode.isMobile) {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n focusForm();\n }\n return setFieldTouched('email', true);\n }}\n label={t('email', { ns: 'common' })}\n keyboardType={'email-address'}\n autoCapitalize='none'\n error={!!emailMessage}\n right={\n showEmailActivity && {\n name: () => \n }\n }\n autoComplete={'username'}\n msg={\n typeof emailMessage === 'string' && (\n \n )\n }\n />\n \n {showPractices && (\n \n \n style={{\n backgroundColor: dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70\n }}\n label={t('veterinaryPractice')}\n onChange={async (selectedPractice) => {\n await setFieldTouched('password', false);\n await setFieldTouched('confirmPassword', false);\n await setValues((v) => ({\n ...v,\n selectedPractices: [selectedPractice],\n password: '',\n confirmPassword: ''\n }));\n }}\n value={primarySelectedPractice}\n options={\n values.availablePractices?.map((practice: AvailablePractice) => ({\n label: practice.practiceName,\n value: practice,\n trailingIcon: !practice.userRegistered\n ? () => {t('newAccount')}\n : practice.userConfirmationStatus === UserConfirmationStatus.PENDING\n ? AlertTriangle\n : undefined\n })) ?? []\n }\n error={touched.selectedPractices && !!errors.selectedPractices}\n msg={\n typeof errors.selectedPractices === 'string' && (\n \n )\n }\n />\n \n )}\n {showPassword && (\n await setFieldValue('password', v)}\n autoComplete={!isDevice ? 'off' : showConfirmPassword ? 'password-new' : 'password'}\n onFocus={async () => await setFieldTouched('password')}\n error={touched.password && !!errors.password}\n autoCapitalize='none'\n onSubmitEditing={showConfirmPassword ? undefined : () => handleSubmit()}\n msg={touched.password && errors.password && t(errors.password)}\n />\n )}\n {showConfirmPassword && (\n await setFieldValue('confirmPassword', v)}\n autoComplete={!isDevice ? 'off' : 'password-new'}\n onFocus={async () => await setFieldTouched('confirmPassword')}\n error={touched.confirmPassword && !!errors.confirmPassword}\n autoCapitalize='none'\n onSubmitEditing={() => handleSubmit()}\n msg={touched.confirmPassword && errors.confirmPassword && t(errors.confirmPassword)}\n />\n )}\n {showForgotEmail && (\n navigate(Screens.PRACTICE_CLIENT_SEARCH)}>\n {t('forgotEmail')}\n \n )}\n {showForgotPassword && (\n \n {t('forgotPassword')}\n \n )}\n\n {showLoginButton && (\n \n {primarySelectedPractice?.userRegistered ? t('login') : t('signUp')}\n \n )}\n \n {showRememberMe && (\n \n setFieldValue('rememberMe', !values.rememberMe)}\n />\n {t('rememberMe')}\n \n )}\n {biometricAuthAllowed && (\n \n \n \n {supportsFaceRecognition ? (\n \n ) : (\n \n )}\n {t('biometricLogin')}\n \n \n \n )}\n \n \n {\n if (values.email && primarySelectedPractice) {\n requestPasswordReset(values.email, primarySelectedPractice.practiceId);\n }\n }\n }\n ]}\n body={\n }}\n />\n }\n />\n \n );\n};\nexport default LoginFormComponent;\n\nconst inputStyle = css`\n background-color: ${({ theme: { dark } }) =>\n dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70};\n`;\nconst StyledTextInput = styled(TextInput)`\n ${inputStyle}\n`;\n\nconst StyledSecureInput = styled(SecureTextInput)`\n ${inputStyle}\n`;\n\nconst Container = styled.View`\n gap: ${Size.S}px;\n flex-grow: 1;\n`;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { Checkbox } from 'react-native-paper';\nimport { SectionTitle } from './style';\nimport _ from 'lodash';\nimport { HoverButton, Headline } from 'src/components';\nimport styled from 'styled-components/native';\nimport { Margin, Size } from 'src/constants';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { GuideElement, STEPS, useTourGuide } from '../tour';\nimport { View } from 'react-native';\n\nconst isSamePractice = (a: AvailablePractice, b: AvailablePractice) =>\n a.sourceId === b.sourceId && a.practiceId === b.practiceId;\ninterface Props {\n availablePractices?: AvailablePractice[];\n selectedPractices: AvailablePractice[];\n onSubmit: (selectedPractices: AvailablePractice[]) => void;\n}\n\nconst MultiplePractices: React.FC = ({ availablePractices, onSubmit }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('login');\n const { exitTour } = useTourGuide();\n\n const { registered, unregistered } = useMemo(() => {\n const u = _.sortBy(\n availablePractices?.filter((practice) => !practice.userRegistered),\n 'practiceName'\n );\n const r = _.sortBy(\n availablePractices?.filter((practice) => practice.userRegistered),\n 'practiceName'\n );\n\n return { unregistered: u, registered: r };\n }, [availablePractices]);\n\n const [selected, setSelected] = useState(unregistered);\n\n const toggleSelect = useCallback(\n (practice: AvailablePractice) => {\n setSelected((sel) => {\n const selectedIndex = sel.findIndex((p) => isSamePractice(p, practice));\n if (selectedIndex !== -1) {\n return [...sel.slice(0, selectedIndex), ...sel.slice(selectedIndex + 1)];\n } else {\n return [...sel, practice];\n }\n });\n },\n [setSelected]\n );\n\n return (\n \n {t('multiplePracticesFound')}\n\n \n \n {t('selectPractices')}\n {unregistered.map((practice) => (\n toggleSelect(practice)}\n icon={() => (\n isSamePractice(p, practice)) ? 'checked' : 'unchecked'\n }\n />\n )}\n >\n {practice.practiceName}\n \n ))}\n \n \n\n {!!registered.length && (\n \n \n {t('Already Registered')}\n {registered.map((practice) => (\n {practice.practiceName}\n ))}\n \n \n )}\n {\n onSubmit(selected);\n exitTour();\n }}\n labelStyle={{ color: colors.onPrimary }}\n disabled={!selected.length}\n style={{ marginTop: Size.S }}\n >\n {t('signUp')}\n \n \n );\n};\n\nexport default MultiplePractices;\n\nconst Selectable = styled(HoverButton).attrs(({ theme, labelStyle }) => ({\n labelStyle: [\n {\n color: theme.colors.onPrimary,\n flexGrow: 1,\n textAlign: 'left',\n padding: Margin.Medium\n },\n labelStyle\n ],\n compact: true\n}))`\n align-items: center;\n align-self: stretch;\n justify-content: space-between;\n flex-shrink: 0;\n`;\n\nconst Container = styled.View`\n gap: ${Size.S}px;\n`;\n","import * as React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst BottomClip: React.FC = () => {\n const { colors, viewMode } = useAppTheme();\n return (\n \n \n \n );\n};\nexport default BottomClip;\n","import React, { useEffect, useState } from 'react';\nimport { Image, View } from 'react-native';\nimport { HeroImageContainer } from './style';\nimport LandingImage from 'assets/landing.jpg';\nimport { cleanUrl } from 'src/utils';\nimport BottomClip from './BottomClip';\nimport styled from 'styled-components/native';\n\ninterface Props {\n petSignInImage?: string | null;\n isNarrow: boolean;\n}\nconst HeroImage: React.FC = ({ petSignInImage, isNarrow }) => {\n const [imageOkay, setImageOkay] = useState(true);\n\n useEffect(() => {\n if (petSignInImage) {\n Image.prefetch(petSignInImage)\n .then(() => setImageOkay(true))\n .catch(() => setImageOkay(false));\n } else {\n setImageOkay(false);\n }\n }, [petSignInImage]);\n return (\n \n \n {isNarrow && (\n \n \n \n )}\n \n );\n};\n\nexport default HeroImage;\n\nconst BottomClipContainer = styled.View`\n position: absolute;\n bottom: 0;\n`;\n","enum FormState {\n LOG_IN,\n LOGGING_IN,\n SELECT_PRACTICES,\n CREATING_ACCOUNTS,\n ACCOUNTS_CREATED\n}\n\nexport default FormState;\n","import React from 'react';\nimport { View } from 'react-native';\nimport Svg, { SvgProps, Mask, Path } from 'react-native-svg';\nimport { IconProps } from 'src/components/Icons';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\nconst PawPathSuper: React.FC>> = (props) => {\n const { dark, colors } = useAppTheme();\n return (\n \n \n \n \n \n \n \n \n );\n};\nexport default PawPathSuper;\n\nconst PositionContainer = styled.View`\n position: absolute;\n left: 125px;\n top: 100px;\n opacity: 0.5;\n`;\n","import { View } from 'react-native';\nimport { Mail } from 'react-native-feather';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst MailSuper: React.FC = () => {\n const { colors } = useAppTheme();\n return (\n \n \n \n );\n};\n\nexport default MailSuper;\n\nconst PositionContainer = styled.View`\n right: -25%;\n bottom: 10%;\n opacity: 0.5;\n align-items: center;\n transform: rotate(30deg);\n`;\n","import { View } from 'react-native';\nimport Logo from 'src/components/Icons/Logo';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst LogoSuper: React.FC = () => {\n const { colors } = useAppTheme();\n return (\n \n \n \n );\n};\n\nexport default LogoSuper;\n\nconst PositionContainer = styled.View`\n position: relative;\n left: 75px;\n bottom: 75px;\n opacity: 0.5;\n`;\n","import React from 'react';\nimport { STEPS, SliderElement } from '../../tour';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport PawPathSuper from './assets/PawPathSuper';\nimport MailHero from './assets/MailSuper';\nimport LogoSuper from './assets/LogoSuper';\n\nconst slides: SlideItem[] = [\n {\n title: 'login:tour.slide0.title',\n body: 'login:tour.slide0.body',\n image: \n },\n {\n title: 'login:tour.slide1.title',\n body: 'login:tour.slide1.body',\n image: \n },\n {\n title: 'login:tour.slide2.title',\n image: ,\n body: 'login:tour.slide2.body'\n }\n];\n\nconst IntroDrawer: React.FC = () => ;\n\nexport default IntroDrawer;\n","import React from 'react';\nimport Svg, { ClipPath, Defs, G, Path, Rect } from 'react-native-svg';\n\ninterface Props {\n size: number;\n}\n\nconst QRPlayStore: React.FC = ({ size }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default QRPlayStore;\n","import React from 'react';\nimport Svg, { ClipPath, Defs, G, Path } from 'react-native-svg';\n\ninterface Props {\n size: number;\n}\n\nconst QRAppStore: React.FC = ({ size }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default QRAppStore;\n","import React from 'react';\nimport { G, Path, Svg } from 'react-native-svg';\nimport { IS_WEB } from 'src/constants';\n\ninterface Props {\n width: number;\n}\n\nconst DownloadAppStore: React.FC = ({ width }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default DownloadAppStore;\n","import React from 'react';\nimport { G, Path, Svg, Text } from 'react-native-svg';\nimport { IS_WEB } from 'src/constants';\n\ninterface Props {\n width: number;\n}\n\nconst DownloadPlayStore: React.FC = ({ width }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n GET IT ON\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default DownloadPlayStore;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Headline, Subheading } from 'src/components';\nimport QRPlayStore from 'src/components/QRPlayStore';\nimport QRAppStore from 'src/components/QRAppStore';\nimport { PETPAGE_IOS_APP_STORE, PETPAGE_PLAY_STORE, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Pressable } from 'react-native';\nimport { openWebBrowser } from 'src/utils';\nimport {\n DownloadOurAppContainer,\n AppStoreBadgeContainer,\n AppStoreContentInnerContainer,\n AppStoreContentContainer\n} from '../style';\nimport DownloadAppStore from './DownloadAppStore';\nimport DownloadPlayStore from './DownloadPlayStore';\nimport DeviceInfo from 'react-native-device-info';\n\nconst PLAY_STORE_BADGE_WIDTH = 160;\nconst BADGE_WIDTH = 142;\n\ninterface Props {\n isNarrow: boolean;\n}\n\nconst DownloadOurApp: React.FC = ({ isNarrow }) => {\n const { t } = useTranslation('login');\n const { colors } = useAppTheme();\n\n const [baseOs, setBaseOs] = useState();\n\n useEffect(() => {\n if (!baseOs) {\n void DeviceInfo.getBaseOs().then((os) => {\n setBaseOs(os);\n });\n }\n }, [baseOs]);\n\n if (!baseOs) return null;\n\n const hideAppStoreBadge = isNarrow && baseOs === 'Android';\n const hidePlayStoreBadge = isNarrow && baseOs !== 'Android';\n\n return (\n \n \n {t('downloadTitle')}\n \n {!isNarrow && (\n \n {t('downloadSubtitle')}\n \n )}\n \n {!hideAppStoreBadge && (\n \n {!isNarrow && }\n \n openWebBrowser(PETPAGE_IOS_APP_STORE)}>\n \n \n \n \n )}\n {!hidePlayStoreBadge && (\n \n {!isNarrow && }\n\n openWebBrowser(PETPAGE_PLAY_STORE)}>\n \n \n \n )}\n \n \n );\n};\n\nexport default DownloadOurApp;\n","import { useFormik } from 'formik';\nimport React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport {\n Alert,\n AlertHandle,\n BottomButton,\n Caption,\n FocusAwareStatusBar,\n Headline,\n HoverButton,\n PrimaryGradientBackground,\n SecureTextInput,\n TextInput\n} from 'src/components';\nimport { Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\nimport _ from 'lodash';\nimport { object, string } from 'yup';\nimport { emailSchema } from 'src/scenes/Landing/helpers/validation';\nimport { useMutation } from 'react-query';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { layout } from 'src/theme/globalStyles';\nimport { Weight } from 'src/theme';\nimport { AlertOption } from 'src/components/Alert';\nimport { adminSignIn } from 'src/api/admin';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useViewMode } from 'src/hooks';\nimport { View } from 'react-native';\n\ninterface AdminSignInRequest {\n email: string;\n password: string;\n}\n\ninterface Props {\n openUserSearch: (token: string) => void;\n endSession: () => void;\n}\n\nconst validationSchema = object({\n adminUserEmail: emailSchema,\n password: string().required()\n});\n\nconst AdminLogin: React.FC = ({ openUserSearch, endSession }) => {\n const { t } = useTranslation('impersonate');\n const { horizontalInset } = useViewMode();\n const { colors } = useAppTheme();\n const { top } = useSafeAreaInsets();\n const { mutateAsync: logIn, isLoading } = useMutation({\n mutationKey: ['auth-admin'],\n mutationFn: async (signInRequest: AdminSignInRequest) =>\n adminSignIn(signInRequest.email, signInRequest.password),\n onSuccess: (v) => openUserSearch(v.token)\n });\n\n const { values, errors, handleSubmit, setFieldValue } = useFormik({\n initialValues: {\n adminUserEmail: '',\n password: ''\n },\n validationSchema,\n validateOnBlur: true,\n onSubmit: async () => {\n await logIn({ email: values.adminUserEmail, password: values.password }).catch(async () => {\n modalRef.current?.alert();\n });\n }\n });\n\n const modalRef = useRef(null);\n const options: AlertOption[] = useMemo(\n () => [\n {\n label: t('common:OK')\n }\n ],\n [t]\n );\n\n return (\n <>\n \n \n \n {t('adminLogin')}\n \n {isLoading && (\n \n )}\n {!isLoading && (\n \n \n await setFieldValue('adminUserEmail', adminUserEmail)\n }\n autoCapitalize='none'\n />\n await setFieldValue('password', password)}\n autoCapitalize='none'\n />\n \n )}\n \n \n \n {t('exit')}\n \n \n handleSubmit()}\n disabled={!_.isEmpty(errors) || isLoading}\n labelStyle={{ color: colors.onPrimary }}\n uppercase\n >\n {t('login')}\n \n \n \n \n );\n};\n\nexport default AdminLogin;\n\nconst InputContainer = styled(KeyboardAwareScrollView).attrs(() => ({\n contentContainerStyle: {\n flexGrow: 1,\n justifyContent: 'center',\n gap: Size.X2_S,\n padding: Size.X2_S\n }\n}))`\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n`;\n\nexport const StyledHoverButton = styled(HoverButton)`\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset + Size.X2_S}px;\n margin-bottom: ${Size.XS}px;\n`;\n\nexport const StyledHoverTextButton = styled(HoverButton)`\n padding: ${Size.M}px;\n`;\n","import { endpoint } from 'src/constants';\nimport { IUserSignInResponse } from 'src/interfaces';\nimport UserSearchResult from 'src/interfaces/api/UserSearchResult';\nimport { isDefinedOrThrowServerError, template } from 'src/utils';\nimport { impersonateApiClient } from 'src/utils/axios';\n\nexport const impersonateUser = async (\n userId: number,\n token: string\n): Promise => {\n const response = await impersonateApiClient.get(\n template('/admin/impersonate/user/<%= id %>', { id: userId }),\n { headers: { Authorization: `Bearer ${token}` } }\n );\n\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const adminSignIn = async (email: string, password: string) => {\n const response = await impersonateApiClient.post(endpoint('USERS_SIGN_IN'), {\n user: {\n email,\n password\n }\n });\n return response.data;\n};\n\ninterface FindUsersResponse {\n data: UserSearchResult[];\n}\n\nexport const findUsers = async (search: string, token: string) => {\n if (!search) {\n throw new Error('Email is required');\n }\n\n const response = await impersonateApiClient.get('/users.json', {\n headers: { Authorization: `Bearer ${token}` },\n params: { search, type: 'pet', server_managed: true }\n });\n return isDefinedOrThrowServerError(response.data);\n};\n","import React from 'react';\nimport { UseMutateFunction } from 'react-query';\nimport { Caption, Subheading } from 'src/components';\nimport { HoverCard } from 'src/components/kit';\nimport { Size } from 'src/constants';\nimport { IUserSignInResponse } from 'src/interfaces';\nimport UserSearchResult from 'src/interfaces/api/UserSearchResult';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\ninterface Props {\n searchResult: UserSearchResult;\n impersonate: UseMutateFunction;\n}\n\nconst UserSearchResultItem: React.FC = ({ searchResult, impersonate }) => {\n return (\n impersonate(searchResult)}>\n {searchResult.name}\n {searchResult.resourceName}\n \n );\n};\n\nexport default UserSearchResultItem;\n\nconst StyledCard = styled(HoverCard)`\n align-items: center;\n padding: ${Size.S}px;\n background-color: ${({ theme }) =>\n theme.dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70};\n gap: ${Size.X2_S}px;\n margin-top: ${Size.X2_S}px;\n`;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Body,\n BottomButton,\n Caption,\n FocusAwareStatusBar,\n Headline,\n PrimaryGradientBackground,\n TextInput\n} from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useMutation } from 'react-query';\nimport { findUsers, impersonateUser } from 'src/api/admin';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { FlatList, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport UserSearchResult from 'src/interfaces/api/UserSearchResult';\nimport { StyledHoverTextButton } from './AdminLogin';\nimport { Weight } from 'src/theme';\nimport UserSearchResultItem from './components/UserSearchResultItem';\nimport { useViewMode } from 'src/hooks';\nimport _ from 'lodash';\n\ninterface Props {\n endSession: () => void;\n token: string;\n startImpersonateSession: (userToken: string) => void;\n}\n\nconst UserSearch: React.FC = ({ endSession, token, startImpersonateSession }) => {\n const { t } = useTranslation('impersonate');\n const { horizontalInset } = useViewMode();\n const { top } = useSafeAreaInsets();\n const { colors } = useAppTheme();\n\n const [petOwnerEmail, setPetOwnerEmail] = useState();\n\n const { mutate: impersonate } = useMutation({\n mutationFn: async (searchResult: UserSearchResult) =>\n await impersonateUser(searchResult.id, token),\n mutationKey: ['impersonate', token],\n onSuccess: (data) => {\n startImpersonateSession(data.token);\n }\n });\n\n const {\n data: searchResults = [],\n mutateAsync: find,\n isSuccess\n } = useMutation({\n mutationKey: 'users-find',\n mutationFn: async () => {\n if (petOwnerEmail && token) {\n const response = await findUsers(petOwnerEmail, token);\n return response.data;\n }\n return [];\n }\n });\n\n return (\n <>\n \n \n \n \n {t('userSearch')}\n \n await setPetOwnerEmail(petOwnerEmail)}\n autoCapitalize='none'\n onSubmitEditing={async () => await find()}\n />\n \n \n ListEmptyComponent={() =>\n _.isEmpty(searchResults) &&\n isSuccess && (\n \n {t('noUsersFound')}\n \n )\n }\n data={searchResults}\n renderItem={({ item, index }) => (\n \n )}\n contentContainerStyle={[\n {\n marginHorizontal: horizontalInset + Size.X2_S,\n flexGrow: 1\n }\n ]}\n />\n \n \n \n {t('endSession')}\n \n \n find()} labelStyle={{ color: colors.onPrimary }}>\n {t('findUsers')}\n \n \n \n );\n};\n\nexport default UserSearch;\n\nconst StyledTextInput = styled(TextInput)`\n margin-vertical: ${Size.S}px;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset + Size.X2_S}px;\n padding-horizontal: ${Size.X2_S}px;\n`;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { createContext, PropsWithChildren, useCallback, useContext, useEffect } from 'react';\nimport AdminLogin from './AdminLogin';\nimport _ from 'lodash';\nimport UserSearch from './UserSearch';\nimport { AsyncStorageKeys } from 'src/api';\nimport { queryClient, storage } from 'src/utils';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { layout } from 'src/theme/globalStyles';\nimport { IS_WEB } from 'src/constants';\nimport useStateRef from 'react-usestateref';\nimport { AppState } from 'react-native';\n\nexport enum AppUserState {\n CLIENT_MODE,\n ADMIN_LOGIN,\n USER_SEARCH,\n IMPERSONATE,\n ENDING_SESSION\n}\n\ninterface ProviderState {\n appUserState: AppUserState;\n adminToken: string | undefined;\n}\n\ninterface Context {\n providerState?: ProviderState;\n openAdminLogin: () => void;\n endAdminSession: () => void;\n findUser: () => void;\n}\n\nconst defaultContext: Context = {\n providerState: undefined,\n openAdminLogin: _.noop,\n endAdminSession: _.noop,\n findUser: _.noop\n};\n\nexport const ImpersonationContext = createContext(defaultContext);\n\nexport const useImpersonation = (): Context => useContext(ImpersonationContext);\n\ninterface Props extends PropsWithChildren {}\n\nexport const ImpersonationProvider: React.FC = ({ children }) => {\n const [state, setState, stateRef] = useStateRef({\n appUserState: AppUserState.CLIENT_MODE,\n adminToken: undefined\n });\n\n const goToAdminLogin = useCallback(() => {\n setState((state) => ({ ...state, appUserState: AppUserState.ADMIN_LOGIN }));\n }, []);\n\n const goToUserSearch = useCallback(async (token?: string) => {\n await setState((state) => ({\n ...state,\n adminToken: token ?? state.adminToken,\n appUserState: AppUserState.USER_SEARCH\n }));\n await storage.removeItem(AsyncStorageKeys.TOKEN);\n await queryClient.clear();\n }, []);\n\n const goToEndSession = useCallback(async () => {\n await setState((state) => ({\n ...state,\n adminToken: undefined,\n appUserState: AppUserState.ENDING_SESSION\n }));\n await storage.removeItem(AsyncStorageKeys.TOKEN);\n await queryClient.clear();\n setState((state) => ({ ...state, appUserState: AppUserState.CLIENT_MODE }));\n }, []);\n\n const goToImpersonateUser = useCallback(async (userToken: string) => {\n await storage.setTypedItem(AsyncStorageKeys.TOKEN, userToken);\n await queryClient.clear();\n setState((state) => ({ ...state, appUserState: AppUserState.IMPERSONATE }));\n }, []);\n\n useEffect(() => {\n if (IS_WEB) {\n const endSession = async () => {\n if (stateRef.current.appUserState === AppUserState.IMPERSONATE) {\n await storage.removeItem(AsyncStorageKeys.TOKEN);\n }\n };\n window.addEventListener('beforeunload', endSession);\n return () => window.removeEventListener('beforeunload', endSession);\n } else {\n const listener = AppState.addEventListener('change', async (state) => {\n if (state === 'inactive' && stateRef.current.appUserState === AppUserState.IMPERSONATE) {\n await storage.removeItem(AsyncStorageKeys.TOKEN);\n }\n });\n return listener.remove;\n }\n }, []);\n\n return (\n \n {(state.appUserState === AppUserState.CLIENT_MODE ||\n state.appUserState === AppUserState.IMPERSONATE) &&\n children}\n {state.appUserState === AppUserState.ADMIN_LOGIN && (\n \n )}\n {state.appUserState === AppUserState.USER_SEARCH && state.adminToken && (\n \n )}\n {state.appUserState === AppUserState.ENDING_SESSION && (\n \n )}\n \n );\n};\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { LayoutAnimation, TouchableWithoutFeedback } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Body, Caption, FocusAwareStatusBar, PrimaryGradientBackground } from 'src/components';\nimport { ALLY_SUPPORT_EMAIL, IconSize, IS_ANDROID, IS_WEB, VERSION_INFO } from 'src/constants';\nimport { useAppState, useAvailablePractices, useBoolean, usePracticeInfo } from 'src/hooks';\nimport { AsyncStorageKeys, QueryKeys } from 'src/api';\nimport { useFormik } from 'formik';\nimport moment from 'moment-timezone';\nimport _ from 'lodash';\nimport { emailSchema, LoginForm, validationSchema } from './helpers/validation';\nimport { AvailablePractice, UserConfirmationStatus } from 'src/interfaces/api/AvailablePractices';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { AxiosError } from 'axios';\nimport LogoHeader from './components/LogoHeader';\nimport {\n PrimaryColorBackground,\n Container,\n ContentContainer,\n FootNoteContainer,\n FormContainer,\n InnerContainer,\n LoadingContainer,\n SectionTitle,\n Link,\n DebugContainer,\n RefreshTextLink,\n NOT_MOBILE_WIDTH\n} from './components/style';\nimport LoginFormComponent from './components/LoginForm';\nimport MultiplePractices from './components/MultiplePractices';\nimport HeroImage from './components/HeroImage';\nimport { CheckCircle } from 'react-native-feather';\nimport FormState from './helpers/formState';\nimport { queryClient, storage } from 'src/utils';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { TourGuide } from './tour';\nimport IntroDrawer from './components/IntroDrawer';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport DownloadOurApp from './components/DownloadOurApp/DownloadOurApp';\nimport sentry from 'src/utils/sentry';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useImpersonation } from 'src/providers/ImpersonationProvider/ImpersonationProvider';\n\ntype Props = NativeStackScreenProps;\n\nconst Landing: React.FC = ({ route, navigation }) => {\n const { t } = useTranslation('login');\n const { colors, viewMode } = useAppTheme();\n const { value: formFocused, toTrue: focusForm } = useBoolean();\n const { logIn, error, signUp, setError } = useAuth();\n\n const desiredPracticeName = route.params?.practice;\n\n const formik = useFormik({\n validationSchema,\n initialValues: validationSchema.cast({}),\n initialStatus: {\n state: FormState.LOG_IN\n },\n onSubmit: async (v, ctx) => {\n if (v.selectedPractices[0].userRegistered) {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n try {\n ctx.setStatus({ state: FormState.LOGGING_IN });\n await storage.setTypedItem(AsyncStorageKeys.REMEMBER_ME, v.rememberMe);\n await logIn({\n email: v.email,\n password: v.password,\n practiceId: v.selectedPractices[0].practiceId,\n id: v.selectedPractices[0].userId\n }).catch(async (e: AxiosError) => {\n if (e.response?.status === 401) {\n ctx.setErrors({ password: 'error.invalidPassword' });\n } else {\n ctx.setErrors({ password: 'error.genericLoginError' });\n }\n });\n } finally {\n sentry.setUser({ id: v.selectedPractices[0].userId });\n ctx.setStatus({ state: FormState.LOG_IN });\n }\n } else {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.spring);\n const unregisteredPractices =\n v.availablePractices?.filter((practice: AvailablePractice) => !practice.userRegistered) ??\n [];\n if (unregisteredPractices.length > 1 && !status?.practicesSelected) {\n ctx.setStatus({ state: FormState.SELECT_PRACTICES });\n } else {\n try {\n ctx.setStatus({ state: FormState.CREATING_ACCOUNTS });\n await signUp({\n email: values.email,\n password: values.password,\n confirmPassword: values.confirmPassword,\n practices: values.selectedPractices\n });\n ctx.setStatus({ state: FormState.ACCOUNTS_CREATED });\n await queryClient.invalidateQueries([\n QueryKeys.CHECK_EMAIL,\n v.email.toLocaleLowerCase()\n ]);\n setTimeout(() => {\n ctx.resetForm();\n navigation.setParams({ practice: v.selectedPractices[0].shortName });\n }, moment.duration(3, 'seconds').asMilliseconds());\n } catch {\n ctx.setStatus({ state: FormState.LOG_IN });\n }\n }\n }\n }\n });\n\n const { previewThemeSet, removePreview } = useAppTheme();\n const [displayName, setDisplayName] = useState('');\n const [canShowCustomContent, setCanShowCustomContent] = useState();\n\n const { data: practiceCustomization } = usePracticeInfo(\n formik.values?.selectedPractices?.[0]?.shortName ?? desiredPracticeName,\n {\n suspense: !!desiredPracticeName && !formik.values?.selectedPractices?.[0],\n enabled: canShowCustomContent,\n onError: () => {\n removePreview();\n navigation.setParams({ practice: undefined });\n }\n }\n );\n\n useEffect(() => {\n setCanShowCustomContent(\n !!desiredPracticeName ||\n formik.values?.availablePractices?.length === 1 ||\n formik.values?.availablePractices?.some((practice) => practice.userRegistered)\n );\n\n if (\n canShowCustomContent &&\n practiceCustomization?.theme.custom &&\n practiceCustomization?.theme.useCustomTheme\n ) {\n previewThemeSet(practiceCustomization.theme.custom);\n } else {\n removePreview();\n }\n\n setDisplayName(\n canShowCustomContent && practiceCustomization ? practiceCustomization?.name : t('appName')\n );\n }, [\n canShowCustomContent,\n desiredPracticeName,\n formik.values?.availablePractices,\n formik.values.selectedPractices,\n practiceCustomization,\n previewThemeSet,\n removePreview,\n t\n ]);\n\n const { values, setValues, setFieldTouched, handleSubmit, status, setStatus } = formik;\n\n useEffect(() => {\n if (route.params?.email) {\n void setFieldTouched('email').then(async () =>\n setValues((v) => ({ ...v, email: route.params?.email ?? '' }))\n );\n focusForm();\n }\n }, [setValues, route.params?.email, setFieldTouched, focusForm]);\n\n const { value: isSelected, toTrue: doSelect, toFalse: unselect } = useBoolean(false);\n const [debouncedEmail, setDebouncedEmail] = useState('');\n const checkEmail = useMemo(\n () =>\n _.debounce(\n (email: string) => {\n if (email.toLowerCase() === debouncedEmail) return;\n void setValues((v) => ({ ...v, availablePractices: undefined, selectedPractices: [] }));\n setDebouncedEmail(email.toLowerCase());\n },\n moment.duration(1, 'seconds').asMilliseconds(),\n {\n leading: false,\n trailing: true\n }\n ),\n [debouncedEmail, setValues]\n );\n\n useEffect(() => {\n checkEmail(values.email);\n }, [checkEmail, values.email]);\n\n const {\n data,\n isFetched: rawIsFetched,\n isFetching\n } = useAvailablePractices(debouncedEmail, {\n beforeFetch: unselect,\n onError: (e: AxiosError) => {\n if (e.response?.status === 404) {\n setError(t('error.emailNotFound', { ns: 'login' }));\n }\n },\n onSuccess: () => {\n setError(undefined);\n },\n enabled: emailSchema.isValidSync(debouncedEmail)\n });\n\n // The default selected practice is set in order of priority to the desired practice (if provided),\n // and if not, the first available user confirmed practice, followed by the first available registered\n // practice.\n const updatePractices = useCallback(\n async (availablePractices: AvailablePractice[] = []) => {\n const desiredPractice = availablePractices?.find(\n (practice) => desiredPracticeName === practice.shortName\n );\n const confirmedPractice = availablePractices?.find(\n (practice) => practice.userConfirmationStatus === UserConfirmationStatus.CONFIRMED\n );\n const registeredPractice = availablePractices?.find((practice) => practice.userRegistered);\n\n const selectedPractices = [\n desiredPractice ?? confirmedPractice ?? registeredPractice ?? availablePractices?.[0]\n ];\n\n await setFieldTouched('selectedPractices');\n await setFieldTouched('availablePractices');\n await setValues((v) => ({ ...v, availablePractices, selectedPractices }));\n doSelect();\n },\n [desiredPracticeName, doSelect, setValues, setFieldTouched]\n );\n\n const isFetched = isSelected && rawIsFetched && !isFetching;\n const triggerUpdate = rawIsFetched && !isFetching;\n useEffect(() => {\n if (triggerUpdate) {\n void updatePractices(data);\n }\n }, [data, triggerUpdate, updatePractices, debouncedEmail]);\n\n useEffect(() => () => LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut), []);\n\n const submitMultiplePracticeRegistration = (selectedPractices: AvailablePractice[]) => {\n void setValues((v: LoginForm) => ({\n ...v,\n selectedPractices\n }))\n .then(() =>\n setStatus({\n practicesSelected: true\n })\n )\n .then(() => handleSubmit());\n };\n\n useEffect(() => {\n const selectedPractice: AvailablePractice | undefined = values.selectedPractices?.[0];\n if (selectedPractice && canShowCustomContent) {\n navigation.setParams({ practice: selectedPractice?.shortName });\n }\n }, [canShowCustomContent, navigation, values.email, values.selectedPractices]);\n\n const [isNarrow, setIsNarrow] = useState(viewMode.windowWidth < NOT_MOBILE_WIDTH);\n useLayoutEffect(() => {\n setIsNarrow(viewMode.windowWidth < NOT_MOBILE_WIDTH);\n }, [viewMode.windowWidth]);\n\n const { top } = useSafeAreaInsets();\n\n const { openAdminLogin } = useImpersonation();\n\n useEffect(() => {\n if (values.email && debouncedEmail) {\n const user = {\n email: debouncedEmail,\n id: values.selectedPractices?.[0]?.userId,\n practice: values.selectedPractices?.[0]?.shortName,\n practiceId: values.selectedPractices?.[0]?.practiceId,\n registered: values.selectedPractices?.[0]?.userRegistered,\n confirmed:\n values.selectedPractices?.[0]?.userConfirmationStatus ===\n UserConfirmationStatus.CONFIRMED,\n clientFound: !!values.selectedPractices?.[0]\n };\n sentry.setUser(user);\n }\n }, [values.selectedPractices, values.email, debouncedEmail]);\n\n const state = useAppState();\n useEffect(() => {\n if (state === 'active') void queryClient.invalidateQueries([QueryKeys.CHECK_EMAIL]);\n }, [state]);\n\n return (\n \n \n \n \n \n\n {!formFocused && (\n \n )}\n \n \n \n \n \n {status.state === FormState.LOG_IN && (\n \n )}\n {status.state === FormState.SELECT_PRACTICES && (\n \n )}\n {status.state === FormState.ACCOUNTS_CREATED && (\n \n {t('allDone')}\n \n \n \n {t('accountsCreated')}\n \n \n \n )}\n {status.state === FormState.CREATING_ACCOUNTS && (\n <>\n \n {t('creatingYourAccounts')}\n \n \n \n \n {t('justAFewMoments')}\n \n \n \n )}\n {status.state === FormState.LOGGING_IN && (\n <>\n {t('loggingIn')}\n \n \n \n {t('justAFewMoments')}\n \n \n \n )}\n \n \n \n {\n void openEmailToAlly();\n }}\n />\n )\n }}\n />\n \n \n \n {t('refreshApp')}\n openAdminLogin()}>\n \n {VERSION_INFO}\n \n \n \n {isNarrow && IS_WEB && }\n \n \n \n {!isNarrow && IS_WEB && }\n \n \n \n );\n};\n\nexport default Landing;\n","import React, { memo, useMemo } from 'react';\nimport RenderHTML from 'react-native-render-html';\nimport { endpoint, Margin } from 'src/constants';\nimport config from 'src/environment';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { layout } from 'src/theme/globalStyles';\n\nconst termsUri = `${config.API_URL}/${endpoint('EULA')}`;\n\nconst TermsHtml: React.FC = () => {\n const { token } = useAuth();\n const { viewMode, colors } = useAppTheme();\n\n const bearerToken = `Bearer ${token ?? ''}`;\n\n const source = useMemo(() => {\n return { uri: termsUri, headers: { Authorization: bearerToken } };\n }, [bearerToken]);\n if (!token) return null;\n\n return (\n \n );\n};\n\nexport default memo(TermsHtml);\n","import React, { useEffect, useState } from 'react';\nimport { endpoint, Margin } from 'src/constants';\nimport { Body, Row, StyledKeyboardAwareScrollView, StyledResponsiveView } from 'src/components';\nimport { Checkbox } from 'react-native-paper';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { layout } from 'src/theme/globalStyles';\nimport CPrimaryButton from 'src/components/CPrimaryButton';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components/native';\nimport TermsHtml from './TermsHtml';\nimport { useNavigation } from '@react-navigation/native';\nimport { useMutation } from 'react-query';\nimport { apiClient } from 'src/utils/axios';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst TermsAndConditions: React.FC = () => {\n const { resetError } = useAuth();\n const { setOptions } = useNavigation();\n const { t } = useTranslation('eula');\n const [agree, setAgree] = useState(false);\n const { colors } = useAppTheme();\n\n useEffect(() => {\n setOptions({\n title: t('title'),\n headerShadowVisible: false\n });\n }, [setOptions, t]);\n\n const { mutate } = useMutation({\n mutationFn: async (accept: boolean) =>\n await apiClient.post(endpoint('TERMS'), {\n terms: {\n accept,\n signature: ''\n }\n }),\n onSuccess: resetError\n });\n\n return (\n \n \n {t('pleaseReadTheTerms')}\n \n \n \n \n \n \n \n setAgree((prev) => !prev)}\n color={colors.primary}\n />\n {t('iAccept')}\n \n {t('byCheckingThisBox')}\n \n \n \n mutate(agree)}>\n {t('continue', { ns: 'common' })}\n \n \n \n );\n};\n\nconst StyledPrimaryButton = styled(CPrimaryButton)`\n margin: ${Margin.Large}px;\n`;\n\nconst ContentContainer = styled.View`\n padding-horizontal: ${Margin.Medium}px;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n`;\n\nexport default TermsAndConditions;\n","import React from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { layout } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\n\nimport ChangePassword from './ChangePassword';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useIsMutating } from 'react-query';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\n\nconst ChangePasswordModal: React.FC = () => {\n const { colors } = useAppTheme();\n\n const isMutating = useIsMutating();\n\n return (\n \n \n {isMutating > 0 && (\n 0}\n size='large'\n color={colors.primary}\n />\n )}\n \n );\n};\n\nexport default ChangePasswordModal;\n\nconst Container = styled(SafeAreaView)`\n flex: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n`;\n","import React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Body, BottomButton, CPrimaryButton, Headline, Title } from 'src/components';\nimport { ALLY_SUPPORT_EMAIL, Size } from 'src/constants';\nimport { useViewMode } from 'src/hooks';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { Weight } from 'src/theme';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport styled from 'styled-components/native';\n\nconst PetPageDisabled: React.FC = () => {\n const { isWeb } = useViewMode();\n const { logOut } = useAuth();\n const { t } = useTranslation('petPageDisabled');\n return (\n <>\n \n {t('heading')}\n {t('message')}\n {t('otherAccounts')}\n \n await openEmailToAlly()}\n />\n )\n }}\n />\n \n {isWeb && logOut(undefined)}>{t('logOut')}}\n \n {!isWeb && logOut(undefined)}>{t('logOut')}}\n \n );\n};\n\nexport default PetPageDisabled;\n\nconst Container = styled.View`\n flex: 1;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset + Size.M}px;\n align-items: center;\n justify-content: center;\n margin-top: ${Size.M}px;\n`;\n\nconst StyledHeadline = styled(Headline)`\n text-align: center;\n margin-top: ${Size.S}px;\n`;\n\nconst WebButton = styled(CPrimaryButton)`\n margin-top: ${Size.M}px;\n`;\n\nconst StyledBody = styled(Body)`\n margin-top: ${Size.S}px;\n`;\n\nconst EmailLink = styled(Body)`\n color: ${({ theme }) => theme.colors.primary};\n font-weight: ${Weight.MEDIUM};\n`;\n","import React from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { CheckCircle } from 'react-native-feather';\nimport { mask } from 'react-native-mask-text';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { Body, Headline, HelperButton, Subheading, Title } from 'src/components';\nimport { IconSize, PHONE_MASK, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Weight } from 'src/theme';\nimport styled from 'styled-components/native';\nimport { ReducerState } from '../helpers/model';\nimport { makePhoneCall } from 'src/utils';\n\ninterface Props {\n state: ReducerState;\n moveNext: () => void;\n}\n\nconst AccountLocated: React.FC = ({ state, moveNext }) => {\n const { t } = useTranslation('practiceClientSearch');\n const { colors } = useAppTheme();\n\n const maskedPracticePhoneNumber = state.data.selectedPractice?.phoneNumber\n ? mask(state.data.selectedPractice?.phoneNumber, PHONE_MASK)\n : undefined;\n\n return (\n \n \n {t('allDone')}\n \n\n \n {t('recoveryEmailSent')}\n \n \n {state.data.email}\n \n \n makePhoneCall(state.data.selectedPractice?.phoneNumber)} />\n )\n }}\n t={t}\n i18nKey={'followInstructions'}\n values={{ phone: maskedPracticePhoneNumber }}\n />\n \n \n {t('backToLogin')}\n \n );\n};\n\nexport default AccountLocated;\n\nconst StyledView = styled.View`\n flex: 1;\n align-items: center;\n justify-content: center;\n gap: ${Size.S}px;\n`;\n\nconst Link = styled(Body)`\n color: ${({ theme }) => theme.colors.onPrimary};\n text-decoration: underline;\n text-decoration-color: ${({ theme }) => theme.colors.onPrimary};\n font-weight: ${Weight.BOLD};\n`;\n","import { TextInput } from 'src/components';\nimport { Size } from 'src/constants';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\nexport const ContentContainer = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n marginHorizontal: theme.viewMode.horizontalInset,\n gap: Size.S\n }\n}))`\n flex: 1;\n margin: ${Size.M}px;\n`;\n\nexport const StyledTextInput = styled(TextInput)<{ addBottomGap?: boolean }>`\n background-color: ${({ theme: { dark } }) =>\n dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70};\n margin-bottom: ${({ addBottomGap }) => (addBottomGap ? Size.S : 0)}px;\n`;\n","import createTourGuideContext from 'src/module/TourGuide/TourGuideFactory';\nimport { TOUR, TourMap } from 'src/module/TourGuide/model';\n\nexport enum STEPS {\n DRAWER,\n HOSPITAL_SEARCH,\n SEARCH_BY,\n SEARCH_BY_CITY,\n HOSPITAL_SEARCH_RESULTS,\n CLIENT_SEARCH\n}\n\nconst PracticeClientSearchTourMap: TourMap = {\n [STEPS.DRAWER]: {\n id: STEPS.DRAWER,\n priority: 0\n },\n [STEPS.HOSPITAL_SEARCH]: {\n id: STEPS.HOSPITAL_SEARCH,\n priority: 1\n },\n [STEPS.SEARCH_BY]: {\n id: STEPS.SEARCH_BY,\n priority: 2\n },\n [STEPS.SEARCH_BY_CITY]: {\n id: STEPS.SEARCH_BY_CITY,\n priority: 3\n },\n [STEPS.HOSPITAL_SEARCH_RESULTS]: {\n id: STEPS.HOSPITAL_SEARCH_RESULTS,\n priority: 4\n },\n [STEPS.CLIENT_SEARCH]: {\n id: STEPS.CLIENT_SEARCH,\n priority: 5\n }\n};\n\nexport const { useTourGuide, TourGuide, GuideElement, SliderElement } = createTourGuideContext(\n TOUR.PRACTICE_CLIENT_SEARCH,\n PracticeClientSearchTourMap\n);\n","import { t } from 'i18next';\nimport { object, string } from 'yup';\n\nexport const clientSearchValidationSchema = object().shape({\n firstName: string().required(t('common:required')),\n lastName: string().required(t('common:required')),\n phoneNumber: string().length(10, t('common:invalid')).required(t('common:required'))\n});\n\nexport const practiceSearchValidationSchema = object().shape(\n {\n name: string().required(t('common:required')),\n zip: string().when(['city', 'state'], {\n is: (city: string, state: string) => !city || !state,\n then: string().required(t('common:required'))\n }),\n city: string().when('zip', {\n is: (zip: string) => !zip,\n then: string().required(t('common:required'))\n }),\n state: string().when('zip', {\n is: (zip: string) => !zip,\n then: string().required(t('common:required'))\n })\n },\n [\n ['zip', 'city'],\n ['zip', 'state'],\n ['city', 'zip'],\n ['state', 'zip']\n ]\n);\n","import { useNavigation } from '@react-navigation/native';\nimport { useFormik } from 'formik';\nimport _ from 'lodash';\nimport React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ScrollView, View } from 'react-native';\nimport { mask } from 'react-native-mask-text';\nimport { ActivityIndicator } from 'react-native-paper';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { clientSearch, forgotPassword, MutationKeys } from 'src/api';\nimport { BottomButton, CPrimaryButton } from 'src/components';\nimport { ALLY_SUPPORT_EMAIL, IS_WEB, PHONE_MASK, Size } from 'src/constants';\nimport { EmailVerificationStatus } from 'src/interfaces';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { layout } from 'src/theme/globalStyles';\nimport { Actions, ReducerState } from '../helpers/model';\nimport { ContentContainer, StyledTextInput } from '../style';\nimport { GuideElement, STEPS, useTourGuide } from '../tour';\nimport { clientSearchValidationSchema } from '../validation';\n\ninterface Props {\n state: ReducerState;\n setModalTitle: React.Dispatch>;\n setModalText: React.Dispatch>;\n showAlert: () => void;\n moveNext: () => void;\n updateData: (data: Actions['data']) => void;\n}\n\nconst ClientSearch: React.FC = ({\n state,\n setModalTitle,\n setModalText,\n showAlert,\n moveNext,\n updateData\n}) => {\n const { t } = useTranslation('practiceClientSearch');\n const { viewMode } = useAppTheme();\n const { navigate } = useNavigation();\n\n const maskedPracticePhoneNumber = useMemo(() => {\n return state.data.selectedPractice?.phoneNumber\n ? mask(state.data.selectedPractice?.phoneNumber, PHONE_MASK)\n : undefined;\n }, [state.data.selectedPractice?.phoneNumber]);\n\n const { mutate: sendVerificationEmail, isLoading: sendVerificationEmailLoading } = useMutation({\n mutationFn: forgotPassword,\n onSuccess: moveNext,\n onError: () =>\n Toast.show({\n text1: t('uhOh', { ns: 'common' }),\n text2: t('error', { ns: 'common' }),\n type: 'error'\n })\n });\n\n const { mutate: performClientSearch, isLoading: performClientSearchLoading } = useMutation({\n mutationKey: [MutationKeys.CLIENT_SEARCH],\n mutationFn: clientSearch,\n onSuccess: (client, vars) => {\n switch (client.emailVerificationStatus) {\n case EmailVerificationStatus.VERIFIED:\n case EmailVerificationStatus.UNKNOWN:\n case EmailVerificationStatus.IN_PROGRESS:\n updateData({ email: client.email });\n sendVerificationEmail({ practiceId: vars.practiceId, clientId: client.clientId });\n break;\n case EmailVerificationStatus.INVALID:\n case EmailVerificationStatus.BAD:\n case EmailVerificationStatus.DECLINED:\n setModalTitle(\n t('emailContactPracticeTitle', { name: state.data.selectedPractice?.name })\n );\n setModalText(\n t('emailContactPracticeText', {\n name: state.data.selectedPractice?.name,\n email: state.data.selectedPractice?.email,\n phone: maskedPracticePhoneNumber\n })\n );\n showAlert();\n break;\n case EmailVerificationStatus.MISSING:\n setModalTitle(t('emailMissingTitle'));\n setModalText(t('emailMissingText', { phone: maskedPracticePhoneNumber }));\n showAlert();\n break;\n default:\n setModalTitle(t('otherStatusTitle'));\n setModalText(t('otherStatusText', { email: ALLY_SUPPORT_EMAIL }));\n showAlert();\n }\n },\n onError: () => {\n setModalTitle(t('noClientFoundTitle'));\n setModalText(t('noClientFoundText', { phone: maskedPracticePhoneNumber }));\n showAlert();\n }\n });\n\n const { values, errors, setFieldValue, handleSubmit } = useFormik({\n initialValues: {\n firstName: '',\n lastName: '',\n phoneNumber: '',\n practiceId: state.data.selectedPractice?.id ?? NaN\n },\n validateOnChange: false,\n validationSchema: clientSearchValidationSchema,\n onSubmit: async (values) => {\n await performClientSearch(values);\n }\n });\n\n const debouncedSubmit = useMemo(() => _.debounce(() => handleSubmit()), [handleSubmit]);\n\n const lastNameRef = useRef(null);\n const phoneNumberRef = useRef(null);\n\n const { enabled, exitTour } = useTourGuide();\n\n const scrollRef = useRef(null);\n\n return (\n <>\n \n \n {\n exitTour();\n navigate(Screens.LANDING);\n }}\n >\n <>\n await setFieldValue('firstName', firstName)}\n label={t('firstName')}\n error={!!errors.firstName}\n msg={errors.firstName}\n />\n await setFieldValue('lastName', lastName)}\n label={t('lastName')}\n error={!!errors.lastName}\n msg={errors.lastName}\n />\n \n await setFieldValue('phoneNumber', phoneNumber)\n }\n mask={PHONE_MASK}\n label={t('phoneNumber')}\n error={!!errors.phoneNumber}\n msg={errors.phoneNumber}\n onSubmitEditing={() => handleSubmit()}\n />\n \n \n \n \n {(sendVerificationEmailLoading || performClientSearchLoading) && (\n \n )}\n {IS_WEB && (\n \n {t('next')}\n \n )}\n {!IS_WEB && (\n \n {t('next')}\n \n )}\n \n );\n};\n\nexport default ClientSearch;\n","import { Client } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\n\nexport enum FormState {\n PRACTICE_SEARCH,\n PRACTICE_SEARCH_RESULTS,\n CLIENT_SEARCH,\n ACCOUNT_LOCATED\n}\n\nexport interface FormData {\n practiceOptions?: Practice[];\n selectedPractice?: Practice;\n email?: Client['email'];\n clientId?: Client['clientId'];\n}\n\nexport interface ReducerState {\n state: T;\n title: string;\n data: FormData;\n showModal?: boolean;\n exit?: boolean;\n}\n\nexport enum ACTIONS {\n ADVANCE,\n GO_BACK,\n SHOW_MODAL,\n UPDATE_DATA\n}\n\nexport interface Actions {\n action: ACTIONS;\n data?: Partial;\n}\n\nexport const STATES: { [state in FormState]: Omit, 'data'> } = {\n [FormState.PRACTICE_SEARCH]: {\n state: FormState.PRACTICE_SEARCH,\n title: 'practiceClientSearch:practiceSearchTitle'\n },\n [FormState.PRACTICE_SEARCH_RESULTS]: {\n state: FormState.PRACTICE_SEARCH_RESULTS,\n title: 'practiceClientSearch:searchResultsTitle'\n },\n [FormState.CLIENT_SEARCH]: {\n state: FormState.CLIENT_SEARCH,\n title: 'practiceClientSearch:clientSearchTitle'\n },\n [FormState.ACCOUNT_LOCATED]: {\n state: FormState.ACCOUNT_LOCATED,\n title: 'practiceClientSearch:accountLocatedTitle'\n }\n};\n\nexport const examplePractice: Practice = {\n id: 0,\n address: '1234 Park Place',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n name: 'Ally Example Veterinarian',\n sourceId: 0,\n fingerprint: 0,\n firstSyncedAt: new Date(),\n lastSyncedAt: new Date(),\n createdAt: new Date(),\n email: '',\n phoneNumber: '2128675309',\n faxNumber: '',\n shortName: '',\n website: '',\n country: '',\n businessContactName: '',\n businessContactEmail: '',\n timeZone: '',\n selectedFeatures: [],\n features: '',\n googletagManagerToken: '',\n status: '',\n syncStatus: '',\n visitable: false,\n pms: '',\n smsNumber: ''\n};\n","import { useFormik } from 'formik';\nimport _ from 'lodash';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LayoutAnimation, ScrollView, View } from 'react-native';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useQuery, useQueryClient } from 'react-query';\nimport { practiceSearch, QueryKeys } from 'src/api';\nimport { BottomButton, CPrimaryButton, HelperButton } from 'src/components';\nimport { ALLY_SUPPORT_EMAIL, IS_WEB, Size, ZIP_MASK } from 'src/constants';\nimport { useBoolean, useViewMode } from 'src/hooks';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport { layout } from 'src/theme/globalStyles';\nimport { Actions, examplePractice } from '../helpers/model';\nimport { ContentContainer, StyledTextInput } from '../style';\nimport { GuideElement, STEPS, useTourGuide } from '../tour';\nimport { practiceSearchValidationSchema as validationSchema } from '../validation';\n\ninterface Props {\n showAlert: () => void;\n setModalTitle: React.Dispatch>;\n setModalText: React.Dispatch>;\n moveNext: () => void;\n updateData: (data: Actions['data']) => void;\n}\n\nconst PracticeSearch: React.FC = ({\n showAlert,\n setModalTitle,\n setModalText,\n moveNext,\n updateData\n}) => {\n const { horizontalInset } = useViewMode();\n const { t } = useTranslation('practiceClientSearch');\n const queryClient = useQueryClient();\n\n const { value: searchByZip, toggle: toggleSearchBy } = useBoolean(true);\n\n const { enabled } = useTourGuide();\n\n const { values, errors, handleSubmit, setFieldValue, setErrors } = useFormik({\n initialValues: {\n name: '',\n zip: '',\n city: '',\n state: ''\n },\n validationSchema,\n validateOnChange: false,\n onSubmit: async () => {\n void queryClient.invalidateQueries([QueryKeys.PRACTICE_SEARCH]);\n const response = await refetch();\n if (!response.data?.length) {\n setModalTitle(t('noPracticesFoundTitle'));\n setModalText(t('noPracticesFoundText', { email: ALLY_SUPPORT_EMAIL }));\n showAlert();\n } else {\n updateData({ practiceOptions: response.data });\n moveNext();\n }\n }\n });\n\n const { refetch, isFetching } = useQuery({\n queryFn: async () => await practiceSearch(values.name, values.zip, values.city, values.state),\n queryKey: [QueryKeys.PRACTICE_SEARCH, values.name, values.zip, values.city, values.state],\n enabled: false\n });\n\n useEffect(() => {\n if (searchByZip) {\n void setFieldValue('zip', '');\n setErrors({\n city: '',\n state: ''\n });\n } else {\n void setFieldValue('city', '');\n void setFieldValue('state', '');\n setErrors({\n zip: ''\n });\n }\n }, [searchByZip, setErrors, setFieldValue]);\n\n const debouncedSubmit = useMemo(() => _.debounce(() => handleSubmit()), [handleSubmit]);\n\n const zipRef = useRef(null);\n const cityRef = useRef(null);\n const stateRef = useRef(null);\n\n const continuePressed = () => {\n updateData({\n practiceOptions: [examplePractice]\n });\n moveNext();\n };\n\n const scrollRef = useRef(null);\n\n return (\n <>\n \n \n \n <>\n await setFieldValue('name', name)}\n label={t('practiceName')}\n error={!!errors.name}\n msg={errors.name}\n />\n {searchByZip && (\n await setFieldValue('zip', zip)}\n label={t('postalCode')}\n mask={ZIP_MASK}\n error={!!errors.zip}\n msg={errors.zip}\n onSubmitEditing={() => handleSubmit()}\n />\n )}\n \n \n \n {!searchByZip && (\n <>\n await setFieldValue('city', city)}\n label={t('informationUpdate:city')}\n error={!!errors.city}\n msg={errors.city}\n />\n await setFieldValue('state', state)}\n label={t('informationUpdate:state')}\n mask={'AA'}\n error={!!errors.state}\n msg={errors.state}\n onSubmitEditing={() => handleSubmit()}\n />\n \n )}\n \n\n \n {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.spring);\n toggleSearchBy();\n }}\n >\n {searchByZip ? t('cityStateSearch') : t('zipSearch')}\n \n \n \n \n {isFetching && }\n \n {!IS_WEB && (\n \n {t('next')}\n \n )}\n {IS_WEB && {t('next')}}\n \n \n );\n};\n\nexport default PracticeSearch;\n","import React from 'react';\nimport { mask } from 'react-native-mask-text';\nimport { Caption, Subheading } from 'src/components';\nimport { HoverCard } from 'src/components/kit';\nimport { PHONE_MASK, Size } from 'src/constants';\nimport { palette } from 'src/theme';\nimport styled from 'styled-components/native';\n\ninterface Props {\n name: string;\n address: string;\n city: string;\n state: string;\n postalCode: string;\n phoneNumber: string;\n onPress: () => void;\n}\n\nconst PracticeSearchResult: React.FC = ({\n name,\n address,\n city,\n state,\n postalCode,\n phoneNumber,\n onPress\n}) => {\n return (\n \n {name}\n {address}\n {`${city}, ${state} ${postalCode}`}\n {mask(phoneNumber, PHONE_MASK)}\n \n );\n};\n\nexport default PracticeSearchResult;\n\nexport const StyledCard = styled(HoverCard)`\n align-items: center;\n padding: ${Size.S}px;\n background-color: ${({ theme }) =>\n theme.dark ? palette.BLACK_OPACITY_70 : palette.WHITE_OPACITY_70};\n gap: ${Size.X2_S}px;\n`;\n","import React, { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ScrollView } from 'react-native';\nimport { Body } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ScrollRefProvider } from 'src/providers/ScrollableRefProvider';\nimport { Weight } from 'src/theme';\nimport styled from 'styled-components/native';\nimport { Actions, examplePractice, ReducerState } from '../helpers/model';\nimport { ContentContainer } from '../style';\nimport { GuideElement, STEPS, useTourGuide } from '../tour';\nimport PracticeSearchResult from './PracticeSearchResult';\n\ninterface Props {\n state: ReducerState;\n moveNext: () => void;\n updateData: (data: Actions['data']) => void;\n}\n\nconst PracticeSearchResults: React.FC = ({ state, updateData, moveNext }) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('practiceClientSearch');\n\n const { enabled } = useTourGuide();\n const scrollRef = useRef(null);\n\n return (\n <>\n
\n \n {!!state.data.practiceOptions &&\n `${state.data.practiceOptions.length} ${t('hospitalsFound')}`}\n \n {t('tapToSelect')}\n
\n \n \n {!!state.data.practiceOptions &&\n state.data.practiceOptions.map((practice) => {\n return (\n {\n updateData({ selectedPractice: examplePractice });\n moveNext();\n }}\n >\n {\n updateData({ selectedPractice: practice });\n moveNext();\n }}\n />\n \n );\n })}\n \n \n \n );\n};\n\nexport default PracticeSearchResults;\n\nexport const Header = styled.View`\n align-items: center;\n margin-horizontal: ${({ theme }) => theme.viewMode.horizontalInset}px;\n`;\n","import moment from 'moment-timezone';\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { Search } from 'react-native-feather';\nimport { IS_WEB, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\n\nconst SearchHero: React.FC = () => {\n const { colors } = useAppTheme();\n const scale = useRef(new Animated.Value(0.5));\n useEffect(() => {\n const animation = Animated.timing(scale.current, {\n toValue: 1,\n duration: moment.duration(0.75, 'seconds').asMilliseconds(),\n useNativeDriver: !IS_WEB,\n easing: Easing.bounce\n });\n animation.start();\n }, [scale]);\n return (\n \n \n \n );\n};\n\nexport default SearchHero;\n\nconst PositionContainer = styled(Animated.View)`\n padding: ${Margin.ExtraLarge}px;\n opacity: 0.5;\n align-items: center;\n`;\n","import { HeaderBackButton, HeaderBackButtonProps } from '@react-navigation/elements';\nimport { useNavigation } from '@react-navigation/native';\nimport React, { useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { LayoutAnimation } from 'react-native';\nimport {\n Alert,\n AlertHandle,\n Body,\n FocusAwareStatusBar,\n PrimaryGradientBackground\n} from 'src/components';\nimport { AlertOption } from 'src/components/Alert';\nimport { SlideItem } from 'src/components/kit/Slider/Slide';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Screens } from 'src/routes/stacks/screens';\nimport AccountLocated from './components/AccountLocated';\nimport ClientSearch from './components/ClientSearch';\nimport PracticeSearch from './components/PracticeSearch';\nimport PracticeSearchResults from './components/PracticeSearchResults';\nimport SearchHero from './components/SearchHero';\nimport { FormState, STATES, Actions, ReducerState, ACTIONS } from './helpers/model';\nimport { SliderElement, STEPS, TourGuide } from './tour';\nimport styled from 'styled-components/native';\nimport { Weight } from 'src/theme';\nimport openEmailToAlly from 'src/utils/openEmailToAlly';\nimport { makePhoneCall, openEmail } from 'src/utils';\nimport useGoBack from 'src/hooks/useGoBack';\n\nconst SLIDES: SlideItem[] = [\n {\n title: 'practiceClientSearch:tour.drawerTitle',\n body: 'practiceClientSearch:tour.drawerBody',\n image: \n }\n];\n\nconst PracticeClientSearch: React.FC = () => {\n const { t } = useTranslation('practiceClientSearch');\n const { colors } = useAppTheme();\n const { navigate, setOptions } = useNavigation();\n const goBack = useGoBack();\n\n const modalRef = useRef(null);\n\n const [state, dispatch] = useReducer(\n (state: ReducerState, { action, data }: Actions) => {\n const nextState = (state.state + 1) as FormState;\n const prevState = (state.state - 1) as FormState;\n const combinedData = { ...state.data, ...data };\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n\n switch (action) {\n case ACTIONS.SHOW_MODAL:\n modalRef.current?.alert();\n return state;\n case ACTIONS.ADVANCE:\n if (state.state === FormState.ACCOUNT_LOCATED || !(nextState in FormState)) {\n return {\n ...state,\n exit: true\n };\n }\n return { ...STATES[nextState], data: state.data };\n case ACTIONS.GO_BACK:\n if (state.state === FormState.PRACTICE_SEARCH || !(prevState in FormState)) {\n return {\n ...state,\n exit: true\n };\n }\n return { ...STATES[prevState], data: state.data };\n case ACTIONS.UPDATE_DATA:\n return { ...state, data: combinedData };\n }\n },\n { ...STATES[FormState.PRACTICE_SEARCH], data: {} }\n );\n\n const [modalTitle, setModalTitle] = useState('');\n const [modalText, setModalText] = useState('');\n\n useEffect(() => {\n setOptions({\n title: t(state.title),\n headerLeft: (props: HeaderBackButtonProps) => (\n {\n dispatch({ action: ACTIONS.GO_BACK });\n }}\n />\n )\n });\n }, [setOptions, t, state]);\n\n useEffect(() => {\n if (state.exit) {\n goBack();\n }\n }, [goBack, state.exit]);\n\n const options: AlertOption[] = useMemo(\n () =>\n state.state === FormState.CLIENT_SEARCH\n ? [\n {\n label: t('exit'),\n type: 'neutral',\n action: () => navigate(Screens.LANDING)\n },\n {\n label: t('practiceClientSearch:tryAgain')\n }\n ]\n : [\n {\n label: t('OK'),\n type: 'neutral'\n }\n ],\n [navigate, state.state, t]\n );\n\n const showModal = () => dispatch({ action: ACTIONS.SHOW_MODAL });\n const advance = () => dispatch({ action: ACTIONS.ADVANCE });\n const updateData = (data: Actions['data']) => dispatch({ action: ACTIONS.UPDATE_DATA, data });\n\n return (\n \n \n \n {state.state === FormState.PRACTICE_SEARCH && (\n \n )}\n {state.state === FormState.PRACTICE_SEARCH_RESULTS && (\n \n )}\n {state.state === FormState.CLIENT_SEARCH && (\n \n )}\n {state.state === FormState.ACCOUNT_LOCATED && (\n \n )}\n\n ,\n phone: (\n makePhoneCall(state.data.selectedPractice?.phoneNumber)} />\n ),\n email: openEmail(state.data.selectedPractice?.email)} />\n }}\n >\n {modalText}\n \n }\n ref={modalRef}\n options={options}\n />\n \n \n );\n};\n\nexport default PracticeClientSearch;\n\nconst Link = styled(Body)`\n color: ${({ theme }) => theme.colors.primary};\n text-decoration: underline;\n text-decoration-color: ${({ theme }) => theme.colors.primary};\n font-weight: ${Weight.BOLD};\n`;\n","import { Body } from 'src/components';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const StyledBody = styled(Body)`\n color: ${({ theme: { colors } }) => colors.onPrimary};\n text-align: center;\n`;\n\nexport const Container = styled.View<{ bottom: number }>`\n align-self: stretch;\n align-items: center;\n flex-grow: 1;\n justify-content: center;\n gap: ${Size.S}px;\n padding-bottom: ${({ bottom }) => bottom}px;\n`;\n","import { useHeaderHeight } from '@react-navigation/elements';\nimport { StackActions, useNavigation } from '@react-navigation/native';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { AxiosError } from 'axios';\nimport moment from 'moment-timezone';\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Pressable } from 'react-native';\nimport { AlertTriangle, CheckCircle, X } from 'react-native-feather';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useMutation } from 'react-query';\nimport {\n ConfirmationError,\n ConfirmationSuccess,\n ConfirmationVariables,\n confirmEmail,\n MutationKeys,\n QueryKeys\n} from 'src/api';\nimport { PrimaryGradientBackground } from 'src/components';\nimport { IconSize, Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { Navigators } from 'src/routes/stacks/navigators';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { paramToBoolean, queryClient } from 'src/utils';\nimport sentry from 'src/utils/sentry';\nimport { LoadingContainer, SectionTitle } from '../Landing/components/style';\nimport { Container, StyledBody } from './styled';\n\ntype Props = NativeStackScreenProps;\n\nconst DISPLAY_MESSAGE_DURATION = moment.duration(5, 'seconds').asMilliseconds();\n\nconst EmailConfirmation: React.FC = ({ route }) => {\n const token = useRef(route.params?.token);\n const email = useRef(route.params?.email);\n const multipleAccounts = useRef(paramToBoolean(route.params?.multipleAccounts));\n\n const { t } = useTranslation('emailConfirmation');\n const { setOptions, canGoBack, goBack, dispatch } = useNavigation();\n const { colors } = useAppTheme();\n const { _user } = useAuth();\n\n const timeout = useRef();\n\n useEffect(() => {\n sentry.addBreadcrumb({\n type: 'debug',\n message: 'Email Confirmation Data',\n data: {\n email: email.current,\n token: token.current,\n multipleAccounts: multipleAccounts.current\n }\n });\n }, []);\n\n const { mutate, isLoading, error, isSuccess } = useMutation<\n ConfirmationSuccess,\n AxiosError,\n ConfirmationVariables,\n MutationKeys.CONFIRM_EMAIL\n >({\n mutationKey: MutationKeys.CONFIRM_EMAIL,\n mutationFn: async (vars) => {\n sentry.addBreadcrumb({\n type: 'debug',\n message: 'Confirmation Request Sent'\n });\n return confirmEmail(vars);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries([QueryKeys.CHECK_EMAIL]);\n },\n onSettled: (data, error) => {\n timeout.current = setTimeout(exit, DISPLAY_MESSAGE_DURATION);\n sentry.addBreadcrumb({\n type: 'debug',\n message: 'Confirmation Request Settled',\n data: { data, error }\n });\n }\n });\n\n const exit = useCallback(() => {\n if (canGoBack()) {\n goBack();\n } else {\n const action = StackActions.replace(_user ? Navigators.MAIN_STACK : Screens.LANDING);\n dispatch(action);\n }\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n }, [_user, canGoBack, goBack, dispatch]);\n\n useEffect(() => {\n if (!token.current) {\n const timeout = setTimeout(exit, DISPLAY_MESSAGE_DURATION);\n return () => clearTimeout(timeout);\n } else {\n mutate({\n token: token.current,\n email: email.current,\n multipleAccounts: multipleAccounts.current\n });\n }\n }, [mutate, exit]);\n\n useEffect(() => {\n setOptions({\n headerTitle: t('title'),\n headerLeft: () => (\n \n \n \n )\n });\n }, [colors.onPrimary, exit, setOptions, t]);\n\n const headerHeight = useHeaderHeight();\n\n const { confirmation_token: confirmationToken, email: emailError } = error?.response?.data || {};\n\n useEffect(() => {\n if (emailError) {\n void queryClient.invalidateQueries([QueryKeys.CHECK_EMAIL]);\n }\n }, [emailError]);\n\n if (isLoading || headerHeight === 0) {\n return (\n \n \n \n \n \n \n );\n }\n\n if (isSuccess) {\n return (\n \n \n {t('successHeading')}\n \n {t('success')}\n {t('redirecting')}\n \n \n \n );\n }\n\n return (\n \n \n \n {emailError ? t('alreadyConfirmedHeading') : t('errorHeading')}\n \n \n {!!confirmationToken && {t('invalidToken')}}\n {!!emailError && {t('emailAlreadyConfirmed')}}\n {!confirmationToken && !emailError && {t('unknownError')}}\n {t('redirecting')}\n \n \n \n );\n};\nexport default EmailConfirmation;\n","import { Row } from 'src/components';\nimport { Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nexport const Container = styled.SafeAreaView`\n align-items: center;\n justify-content: center;\n flex: 1;\n gap: ${Size.S}px;\n`;\n\nexport const ContentContainer = styled.View`\n flex: 1;\n justify-content: center;\n align-items: center;\n gap: ${Size.S}px;\n`;\n\nexport const StyledButtonRow = styled(Row)`\n align-self: stretch;\n padding: ${Size.S}px;\n`;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { HoverButton, Subheading } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Container, ContentContainer, StyledButtonRow } from './style';\nimport * as LocalAuthentication from 'expo-local-authentication';\nimport { secureStoreGetSignInCredentials } from 'src/providers/AuthProvider/helper';\nimport { AuthStatus, useAuth } from 'src/providers/AuthProvider';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { layout } from 'src/theme/globalStyles';\nimport Icon from 'react-native-vector-icons/MaterialCommunityIcons';\nimport { IconSize } from 'src/constants';\nimport FaceRecognition from 'src/components/Icons/FaceRecognition';\nimport useBiometrics from 'src/hooks/useBiometrics';\nimport Toast from 'react-native-toast-message';\nimport { useNavigation } from '@react-navigation/native';\n\nconst MAX_RETRY_ATTEMPTS = 2;\n\nconst BiometricLogin: React.FC = () => {\n const { t } = useTranslation('biometricLogin');\n const { colors } = useAppTheme();\n const { canGoBack, goBack } = useNavigation();\n\n const { logIn, logOut, setError, setAuthStatus, isLoggedIn } = useAuth();\n const [retryAttempts, setRetryAttempts] = useState(0);\n\n const { supportsFaceRecognition } = useBiometrics();\n\n const login = useRef(\n useCallback(async () => {\n const credentials = await secureStoreGetSignInCredentials();\n try {\n if (credentials) {\n const result = await LocalAuthentication.authenticateAsync();\n if (result.success) {\n if (!isLoggedIn) {\n const loginResult = await logIn(credentials);\n if (!!loginResult && loginResult.error) {\n throw new Error(loginResult.error);\n }\n } else if (canGoBack()) goBack();\n setAuthStatus(AuthStatus.AUTHENTICATED);\n } else {\n setRetryAttempts((i) => i + 1);\n if (retryAttempts === MAX_RETRY_ATTEMPTS) {\n throw new Error(t('maxAttemptsReached'));\n }\n }\n } else {\n throw new Error(t('loginError'));\n }\n } catch (e) {\n Toast.show({\n type: 'error',\n text1: t('loginError')\n });\n await logOut(undefined);\n setError(e as Error);\n }\n }, [canGoBack, goBack, isLoggedIn, logIn, logOut, retryAttempts, setAuthStatus, setError, t])\n );\n\n useEffect(() => {\n if (retryAttempts === 0) void login.current();\n }, [retryAttempts]);\n\n if (retryAttempts === 0)\n return ;\n\n return (\n \n \n {supportsFaceRecognition ? (\n \n ) : (\n \n )}\n {t('title')}\n \n \n logOut(undefined)}>\n {t('common:logout')}\n \n \n {t('tryAgain')}\n \n \n \n );\n};\n\nexport default BiometricLogin;\n","import { object } from 'yup';\nimport { confirmPasswordSchema, passwordSchema } from '../Landing/helpers/validation';\n\nexport default object({\n password: passwordSchema,\n passwordConfirmation: confirmPasswordSchema\n});\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { useMutation } from 'react-query';\nimport { MutationKeys, PasswordResetError, PasswordResetRQ, resetPasswordWithToken } from 'src/api';\nimport { InteractionManager, LayoutAnimation } from 'react-native';\nimport { AllyBlueGradient } from '../SelectPractice/styled';\nimport { Body, HoverButton, SecureTextInput } from 'src/components';\nimport styled from 'styled-components/native';\nimport { IconSize, Size } from 'src/constants';\nimport { palette } from 'src/theme';\nimport { css } from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport { CheckCircle } from 'react-native-feather';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { AxiosError } from 'axios';\nimport { debounce, isEmpty } from 'lodash';\nimport { Toast } from 'react-native-toast-message/lib/src/Toast';\nimport { isDarkColor } from 'src/utils';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { SectionTitle } from '../HelpCenter/style';\nimport { FootNoteContainer } from '../Landing/components/style';\nimport moment from 'moment-timezone';\nimport useGoBack from 'src/hooks/useGoBack';\nimport { useFormik } from 'formik';\nimport validationSchema from './validation';\nimport { InferType } from 'yup';\n\ntype Props = NativeStackScreenProps;\n\nconst TokenResetPassword: React.FC = ({ route, navigation }) => {\n const { t } = useTranslation('tokenPasswordReset');\n const { colors } = useAppTheme();\n const token = route.params?.token;\n\n const goBack = useGoBack();\n\n useEffect(() => {\n if (token) return;\n const subscribe = InteractionManager.runAfterInteractions(goBack);\n return () => subscribe.cancel();\n }, [navigation, goBack, token]);\n\n const mutation = useMutation, PasswordResetRQ, unknown>({\n mutationKey: MutationKeys.TOKEN_PASSWORD_RESET,\n mutationFn: async (args: PasswordResetRQ) => {\n try {\n if (!token) throw new Error('Token is required');\n await resetPasswordWithToken(args);\n } catch (e) {\n const error = e as AxiosError;\n if (error.response?.data.errors.resetPasswordToken) {\n Toast.show({\n type: 'error',\n text1: t('errors.invalidToken'),\n text2: error.response?.data.errors.resetPasswordToken\n .map((error) => t(`errors.${error}`))\n .join('\\n')\n });\n }\n throw error;\n } finally {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n }\n }\n });\n\n const {\n values,\n submitForm,\n setFieldValue,\n errors,\n isSubmitting,\n setFieldTouched,\n dirty,\n touched\n } = useFormik({\n validationSchema,\n initialValues: {\n password: '',\n passwordConfirmation: ''\n },\n validateOnChange: true,\n onSubmit: async (values) => mutation.mutate({ token, ...values })\n });\n\n const handleResetPassword = useMemo(\n () =>\n debounce(async () => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n return submitForm();\n }, 500),\n [submitForm]\n );\n\n useEffect(() => {\n if (mutation.error?.response?.data.errors.resetPasswordToken) {\n goBack();\n }\n if (mutation.isSuccess) {\n const timeout = setTimeout(goBack, moment.duration(5, 'seconds').asMilliseconds());\n return () => clearTimeout(timeout);\n }\n }, [mutation, goBack]);\n\n const getFieldError = useCallback(\n (key: keyof InferType) =>\n touched[key] && errors[key] && t(errors[key]!, { ns: 'login' }),\n [errors, touched, t]\n );\n\n if (mutation.isSuccess) {\n return (\n \n \n {t('success', { ns: 'common' })}\n \n \n \n {t('passwordReset')}\n \n \n \n \n );\n } else if (isSubmitting || mutation.isLoading) {\n return (\n \n \n \n );\n }\n return (\n \n \n <>\n setFieldValue('password', text)}\n onFocus={async () => setFieldTouched('password')}\n error={!!getFieldError('password')}\n msg={getFieldError('password')}\n />\n setFieldValue('passwordConfirmation', text)}\n onFocus={async () => setFieldTouched('passwordConfirmation')}\n error={!!getFieldError('passwordConfirmation')}\n msg={getFieldError('passwordConfirmation')}\n />\n \n {t('submit', { ns: 'common' })}\n \n \n \n \n );\n};\n\nexport default TokenResetPassword;\n\nconst inputStyle = css`\n background-color: ${({ theme: { colors } }) =>\n isDarkColor(colors.primary) ? palette.WHITE_OPACITY_70 : palette.BLACK_OPACITY_70};\n`;\n\nconst StyledSecureInput = styled(SecureTextInput)`\n ${inputStyle}\n`;\n\nconst Container = styled.View`\n gap: ${Size.S}px;\n margin-horizontal: ${({ theme: { viewMode } }) => viewMode.narrowHorizontalInset}px;\n`;\n\nconst SuccessContainer = styled.View`\n flex: 1;\n justify-content: center;\n align-items: center;\n gap: ${Size.S}px;\n padding-horizontal: ${({ theme: { viewMode } }) => viewMode.narrowHorizontalInset}px;\n`;\n","import React from 'react';\nimport Svg, { G, Path, Rect, Defs, Stop, LinearGradient } from 'react-native-svg';\n\nconst NotificationHero: React.FC = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* */}\n \n {/* */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default NotificationHero;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Body, BottomButton, HoverButton, Row, Subheading } from 'src/components';\nimport { Size } from 'src/constants';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport styled from 'styled-components/native';\nimport NotificationHero from './asset/NotificationHero';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport { ScrollView } from 'react-native';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { useNotificationPrompt } from 'src/providers/NotificationPromptProvider';\nimport useGoBack from 'src/hooks/useGoBack';\n\nconst PushNotificationsOptIn: React.FC<\n NativeStackScreenProps\n> = ({ navigation }) => {\n const { t } = useTranslation('pushNotifications');\n const { requestNotificationPermission, setHasPrompted } = useNotificationPrompt();\n\n const goBack = useGoBack();\n\n const promptUser = async () => {\n await requestNotificationPermission();\n goBack();\n };\n const notNowPushed = () => {\n setHasPrompted(true);\n goBack();\n };\n\n return (\n <>\n \n \n \n \n \n {t('enableTo')}\n \n \n {t('point1')}\n \n \n \n {t('point2')}\n \n \n \n {t('point3')}\n \n \n \n {t('common:notNow')}\n {\n void promptUser();\n }}\n >\n {t('enableNotifications')}\n \n \n );\n};\n\nexport default PushNotificationsOptIn;\n\nconst HeroContainer = styled.View`\n align-self: center;\n margin-vertical: ${Size.M}px;\n`;\n\nconst Content = styled.View`\n ${({ theme }) => (theme.viewMode.isMobile ? 'flex: 1;' : '')}\n margin: ${Size.M}px;\n`;\n\nconst BulletItem = styled(Row)`\n margin: ${Size.X3_S}px;\n`;\n\nconst StyledSubheading = styled(Subheading)`\n margin-bottom: ${Size.XS}px;\n`;\n\nconst Bullet = styled.View`\n width: ${Size.X3_S}px;\n height: ${Size.X3_S}px;\n border-radius: ${Size.X3_S}px;\n background-color: ${({ theme }) => theme.colors.text};\n align-self: flex-start;\n margin-top: ${fontStyles.body.lineHeight / 2 - Size.X4_S}px;\n margin-right: ${Size.XS}px;\n`;\n","import { Schedule } from 'src/interfaces';\n\nexport const NO_PREFERENCE = 'No Preference';\nexport interface ColumnOption {\n label: string;\n value: string;\n categoryId?: number;\n appointmentLength?: number;\n colKey?: string;\n duplicateOfAppointmentCategoryId?: string | undefined;\n}\n\nconst extractColumnOptions = (schedule: Schedule): ColumnOption[] => {\n const categories = [];\n if (schedule?.allowNoPreference) {\n categories.push({\n label: 'common:noPreference',\n value: NO_PREFERENCE\n });\n }\n if (schedule.categories) {\n for (const [colKey, value] of Object.entries(schedule.categories)) {\n const key = value.duplicateOfAppointmentCategoryId ?? value.id;\n\n const appointmentLength = schedule.useAppointmentTypes\n ? schedule.appointmentTypes?.find((v) => v.id === key)?.length\n : schedule.categories[key]?.appointmentLength;\n\n categories.push({\n label: value.descriptionOverride ? value.descriptionOverride : value.description,\n value: value.descriptionOverride ? value.descriptionOverride : value.description,\n categoryId: value.id,\n appointmentLength: appointmentLength ?? schedule.categories[key]?.appointmentLength,\n colKey,\n duplicateOfAppointmentCategoryId: value.duplicateOfAppointmentCategoryId\n });\n }\n }\n return categories;\n};\n\nexport default extractColumnOptions;\n","// use yup to generate validation schema\nimport * as yup from 'yup';\nimport { t } from 'i18next';\nimport { ImageUpload } from 'src/components/UploadFiles';\nimport { PreferredContactMethod } from 'src/interfaces';\n\nexport const clientSchema = yup.object().shape({\n fullName: yup\n .string()\n .required('errors.nameRequired')\n .matches(/^.+ .+/, 'errors.firstAndLastRequired'),\n emailAddress: yup.string().required('errors.emailRequired').email('errors.emailInvalid'),\n phoneNumber: yup\n .string()\n .required('errors.phoneRequired')\n .matches(/^\\d{10}$/, 'errors.phoneInvalid'),\n acceptConditions: yup.boolean().test({\n test: (value) => !!value,\n message: 'errors.acceptConditionsRequired',\n name: 'acceptConditions'\n })\n});\n\nexport const patientSchema = yup.object().shape({\n name: yup.string().required('errors.patientNameRequired'),\n breed: yup.string().when('isNewPatient', {\n is: (isNewPatient: boolean) => !!isNewPatient,\n then: yup.string().required('errors.patientBreedRequired')\n }),\n age: yup.string().when('isNewPatient', {\n is: (isNewPatient: boolean) => !!isNewPatient,\n then: yup.string().required('errors.patientAgeRequired')\n }),\n sex: yup.string().when('isNewPatient', {\n is: (isNewPatient: boolean) => !!isNewPatient,\n then: yup.string().required('errors.patientSexRequired')\n }),\n isNewPatient: yup.boolean()\n});\n\nexport const notificationSchema = yup.object().shape({\n smsOptIn: yup.boolean().required('errors.smsOptInRequired'),\n preferredContactMethod: yup\n .mixed()\n .required('errors.preferredContactMethodRequired')\n .oneOf(Object.values(PreferredContactMethod), 'errors.preferredContactMethodInvalid')\n});\n\nexport const imageUploadSchema = yup\n .object()\n .test({\n test: (imagesDict: Record): boolean =>\n Object.values(imagesDict).every((image: ImageUpload) => !image?.error),\n message: t('patientProfile:deleteBeforeProceeding'),\n name: 'deleteBeforeProceeding'\n })\n .test({\n test: (imagesDict: Record): boolean =>\n Object.values(imagesDict).every((image: ImageUpload) => !!image?.id),\n message: t('common:imagesNotReady'),\n name: 'imagesNotReady'\n })\n .default({});\n\nexport const additionalInfoSchema = yup.object().shape({\n requireComments: yup.boolean(),\n comments: yup.string().when('requireComments', {\n is: (requireComments: boolean) => !!requireComments,\n then: yup.string().required('errors.commentsRequired')\n }),\n images: imageUploadSchema\n});\n","// use yup to generate validation schema\nimport * as yup from 'yup';\nimport { AppointmentOption } from 'src/hooks/useAppointmentOptions/types';\nimport { ColumnOption, NO_PREFERENCE } from 'src/hooks/useAppointmentOptions/extractColumnOptions';\nimport {\n additionalInfoSchema,\n clientSchema,\n notificationSchema,\n patientSchema\n} from 'src/module/FormKit/validators';\n\nconst columnSchema = yup.object().shape({\n label: yup.string().nullable(),\n value: yup.string().nullable(),\n categoryId: yup.number().nullable(),\n appointmentLength: yup.number().nullable(),\n colKey: yup.string().nullable(),\n duplicateOfAppointmentCategoryId: yup.string().nullable()\n});\n\nexport const appointmentSchema = yup.object().shape({\n useAppointmentTypes: yup.boolean(),\n appointmentOption: yup.object().when('useAppointmentTypes', {\n is: (useAppointmentTypes: boolean) => !!useAppointmentTypes,\n then: yup.object().required('errors.selectionRequired')\n }),\n allowCategorySelection: yup.boolean(),\n columnOption: yup.object().when('allowCategorySelection', {\n is: (allowCategorySelection: boolean) => !!allowCategorySelection,\n then: columnSchema.required('errors.selectionRequired').test({\n name: 'isValidCategory',\n message: 'errors.notValidCategory',\n test: function (value: ColumnOption) {\n const { appointmentOption } = this.parent;\n if (appointmentOption as AppointmentOption) {\n return (\n value.value === NO_PREFERENCE ||\n appointmentOption.categories?.includes(value.colKey) ||\n appointmentOption.categories?.includes(value.duplicateOfAppointmentCategoryId)\n );\n }\n return true;\n }\n })\n }),\n preferredTime: yup\n .string()\n .required('errors.timeRequired')\n .when(['preferredDate', 'availableDates'], {\n is: (preferredDate: string | undefined, availableDates: string[] | undefined) => {\n return preferredDate && availableDates?.includes(preferredDate);\n },\n then: (schema) =>\n schema.test({\n name: 'isValidTime',\n message: 'errors.timeNotAvailable',\n test: function (value) {\n const { availableTimes = [] } = this.parent;\n return !!availableTimes?.includes(value);\n }\n })\n }),\n preferredDate: yup\n .string()\n .required('errors.dateRequired')\n .when(['allowCategorySelection', 'columnOption', 'appointmentOption', 'useAppointmentTypes'], {\n is: (\n allowCategorySelection: boolean,\n columnOption: ColumnOption | undefined,\n appointmentOption: AppointmentOption | undefined,\n useAppointmentTypes: boolean | undefined\n ) => {\n if (!allowCategorySelection) {\n return false;\n } else if (useAppointmentTypes) {\n return !!appointmentOption?.categories?.find((cat) => cat === columnOption?.colKey);\n }\n return true;\n },\n then: yup.string().test({\n name: 'isValidDate',\n message: 'errors.dateNotAvailable',\n test: function (value) {\n const { availableDates = [] } = this.parent;\n return !!availableDates?.includes(value);\n }\n })\n }),\n availableDates: yup.array().of(yup.string()),\n availableTimes: yup.array().of(yup.string()),\n availableColumns: yup.array().of(columnSchema)\n});\n\nexport const validationSchema = yup.object().shape({\n clientInfo: clientSchema,\n patientInfo: patientSchema,\n appointmentInfo: appointmentSchema,\n additionalInfo: additionalInfoSchema,\n notificationSettings: notificationSchema\n});\n","export enum BOOKING_STEPS {\n CLIENT_INFO,\n PATIENT_INFO,\n NOTIFICATION_SETTINGS,\n ADDITIONAL_INFO,\n SELECT_APPOINTMENT,\n CONFIRMATION,\n STATUS\n}\n","import { Body, Caption } from 'src/components';\nimport { IconSize, Margin } from 'src/constants';\nimport { transparent } from 'src/utils';\nimport styled from 'styled-components/native';\n\nexport const Row = styled.View`\n flex-flow: row wrap;\n flex-shrink: 0;\n row-gap: ${Margin.Medium}px;\n`;\n\nexport const DetailRow = styled.View`\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const DetailColumn = styled.View`\n flex-direction: column;\n gap: ${Margin.Medium}px;\n`;\n\nexport const InputContainer = styled.View<{ halfSize?: boolean }>`\n flex-basis: ${({ theme, halfSize }) => (!theme.viewMode.isMobile && halfSize ? '50%' : '100%')};\n padding: 0 ${Margin.Small}px;\n`;\n\nexport const ContentContainer = styled.View`\n padding-horizontal: ${Margin.Large}px;\n gap: ${Margin.Large}px;\n`;\n\nexport const NoticeContainer = styled.View`\n padding: ${Margin.Large}px;\n gap: ${Margin.Large}px\n background-color: ${({ theme }) => transparent(theme.colors.primary, 0.1)};\n border-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nexport const NoticeSection = styled.View`\n flex-direction: row;\n gap: ${Margin.Small}px;\n`;\n\nexport const NoticeText = styled(Body)<{ error?: boolean }>`\n color: ${({ theme, error }) =>\n error\n ? theme.colors.error\n : theme.viewMode.isMobile\n ? theme.colors.text\n : theme.colors.onSurface};\n`;\n\nexport const NoticeIcon = styled.View`\n width: ${IconSize.S}px;\n height: ${IconSize.S}px;\n justify-content: center;\n align-items: center;\n`;\n\nexport const NoticeTextContainer = styled.View`\n flex: 1;\n gap: ${Margin.Medium}px;\n`;\n\nexport const ErrorText = styled(Caption)`\n color: ${({ theme }) => theme.colors.error};\n`;\n\nexport const FormScrollView = styled.ScrollView.attrs(({ theme }) => ({\n contentContainerStyle: {\n flexGrow: 1,\n gap: Margin.Large,\n alignItems: 'stretch',\n paddingVertical: Margin.ExtraLarge,\n paddingHorizontal: theme.viewMode.isMobile ? Margin.Medium : Margin.ExtraLarge\n },\n keyboardShouldPersistTaps: 'handled'\n}))`\n flex: 1;\n`;\n\nexport const MainText = styled(Body)`\n color: ${({ theme }) => (theme.viewMode.isMobile ? theme.colors.text : theme.colors.onSurface)};\n`;\n","import React, { SetStateAction, useCallback, useState } from 'react';\nimport { ContentContainer, InputContainer, MainText, Row, FormScrollView } from './shared';\nimport { Headline, TextInput } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport UploadFiles, { ImageUpload } from 'src/components/UploadFiles';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { FormData, FormState } from '../model';\nimport { getIn } from 'formik';\n\nconst AdditionalInfo = function ({\n values,\n setFieldValue,\n validateField,\n errors\n}: FormState): ReturnType>> {\n const { t } = useTranslation('onlineBooking');\n\n const [images, setImages] = useState>(\n values.additionalInfo.images ?? {}\n );\n const onImageChange = useCallback(\n async (action: SetStateAction>) => {\n setImages((prev) => {\n const value = typeof action === 'function' ? action(prev) : action;\n void setFieldValue('additionalInfo.images', value);\n setTimeout(async () => validateField('additionalInfo.images'), 100);\n return value;\n });\n },\n [setFieldValue, validateField]\n );\n\n return (\n \n \n {t('additionalInfo.title')}\n {t('additionalInfo.description')}\n \n \n \n setFieldValue('additionalInfo.comments', text, false)}\n onBlur={async () => validateField('additionalInfo.comments')}\n error={!!getIn(errors, 'additionalInfo.comments')}\n msg={t(getIn(errors, 'additionalInfo.comments'))}\n />\n \n \n \n \n );\n};\n\nexport default AdditionalInfo;\n\nconst StyledUpload = styled(UploadFiles)`\n flex-direction: column-reverse;\n gap: ${Margin.Large}px;\n`;\n","import React, { useLayoutEffect, useRef, useState } from 'react';\nimport { Checkbox } from 'react-native-paper';\nimport { IS_WEB, IconSize } from 'src/constants';\nimport { NoticeSection, NoticeIcon, NoticeText } from './shared';\nimport { useTranslation } from 'react-i18next';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Caption } from 'src/components';\nimport { Animated } from 'react-native';\nimport { FormState, FormData } from '../model';\nimport { getIn } from 'formik';\n\nconst TermsCheckbox = function (\n props: FormState\n) {\n const { t } = useTranslation('onlineBooking');\n const { colors, viewMode } = useAppTheme();\n const {\n setFieldValue,\n validateField,\n errors,\n values: { clientInfo }\n } = props;\n\n const [displayedError, setDisplayedError] = useState(\n getIn(errors, `clientInfo.acceptConditions`)\n );\n const shakeValue = useRef(new Animated.Value(0)).current;\n\n const shake = useRef(() =>\n Animated.sequence([\n Animated.timing(shakeValue, { toValue: 10, duration: 100, useNativeDriver: !IS_WEB }),\n Animated.timing(shakeValue, { toValue: -10, duration: 100, useNativeDriver: !IS_WEB }),\n Animated.timing(shakeValue, { toValue: 10, duration: 100, useNativeDriver: !IS_WEB }),\n Animated.timing(shakeValue, { toValue: 0, duration: 100, useNativeDriver: !IS_WEB })\n ]).start((o) => {\n shakeValue.setValue(0);\n })\n );\n\n useLayoutEffect(() => {\n if (getIn(errors, 'clientInfo.acceptConditions')) {\n const timeout = setTimeout(() => {\n setDisplayedError(getIn(errors, 'clientInfo.acceptConditions'));\n shake.current();\n }, 100);\n return () => clearTimeout(timeout);\n } else {\n setDisplayedError(getIn(errors, 'clientInfo.acceptConditions'));\n shakeValue.setValue(0);\n }\n }, [errors, shakeValue]);\n\n return (\n \n \n \n {\n await setFieldValue('clientInfo.acceptConditions', !clientInfo.acceptConditions);\n setTimeout(() => {\n void validateField('clientInfo.acceptConditions');\n }, 0);\n }}\n />\n \n \n {t('clientInfo.disclaimer.acceptConditions')}\n \n \n \n );\n};\n\nexport default TermsCheckbox;\n","import React, { useMemo } from 'react';\nimport { StyleSheet } from 'react-native';\nimport RenderHTML, { MixedStyleDeclaration } from 'react-native-render-html';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { fonts } from 'src/theme';\nimport { fontStyles } from 'src/theme/globalStyles';\n\ninterface Props {\n fallback?: React.ReactNode;\n children?: string | null;\n baseStyle?: MixedStyleDeclaration | undefined;\n}\n\n/**\n * Component to formatted practice provided text\n * @param children - text to render\n * @param fallback - fallback component to render if no text is provided, must be a react node\n *\n * @remark This should never be a child of Text component, as it will not render correctly\n */\nconst RichTextRenderer: React.FC = ({ children, fallback, baseStyle }) => {\n const { colors } = useAppTheme();\n const style = useMemo(\n () =>\n StyleSheet.flatten([\n { color: colors.onSurface, fontFamily: fonts.roboto.regular },\n baseStyle\n ]),\n [baseStyle, colors.onSurface]\n );\n\n if (!children?.length) {\n if (fallback) {\n return <>{fallback};\n } else return null;\n }\n return (\n \n );\n};\n\nexport default RichTextRenderer;\n","import React, { useCallback } from 'react';\nimport { Headline, Subheading, TextInput } from 'src/components';\nimport { IconSize, PHONE_MASK } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport {\n ContentContainer,\n InputContainer,\n MainText,\n NoticeContainer,\n NoticeIcon,\n NoticeSection,\n NoticeText,\n Row,\n FormScrollView\n} from './shared';\nimport { Info } from 'react-native-feather';\nimport { useTranslation } from 'react-i18next';\nimport { mask, unMask } from 'react-native-mask-text';\nimport { ValidationError } from 'yup';\nimport TermsCheckbox from './TermsCheckbox';\nimport RichTextRenderer from 'src/components/PracticeTextRenderer';\nimport { FormData, FormState } from '../model';\nimport { getIn } from 'formik';\nimport { clientSchema } from '../validators';\n\nconst ClientInformation = function (\n props: FormState\n) {\n const {\n headerText,\n practiceInfo,\n values: { clientInfo },\n setFieldValue,\n validateField,\n errors,\n clientPatientQuery: { mutateAsync },\n formTitle,\n disclaimer\n } = props;\n const { t } = useTranslation('onlineBooking');\n const { colors, viewMode } = useAppTheme();\n\n const checkForTerms = useCallback(async () => {\n try {\n await clientSchema.validate(clientInfo, { abortEarly: false });\n } catch (e) {\n const { errors } = e as ValidationError;\n if (errors.length === 1 && errors[0] === 'errors.acceptConditionsRequired') {\n await validateField('clientInfo.acceptConditions');\n }\n }\n }, [clientInfo, validateField]);\n\n return (\n \n \n {formTitle}\n {practiceInfo.name}\n \n {headerText}\n \n \n \n \n \n \n \n {disclaimer}\n \n \n \n \n {t('clientInfo.fillInformation')}\n {t('clientInfo.useEmail')}\n \n \n \n setFieldValue('clientInfo.fullName', value, false)}\n onBlur={async () => {\n await validateField('clientInfo.fullName');\n await checkForTerms();\n }}\n error={!!getIn(errors, 'clientInfo.fullName')}\n msg={t(getIn(errors, 'clientInfo.fullName'))}\n />\n \n \n setFieldValue('clientInfo.emailAddress', value, false)}\n onBlur={async (e) => {\n const email = e.nativeEvent.text;\n await validateField('clientInfo.emailAddress').then(async () => {\n void checkForTerms();\n if (!email) return;\n await mutateAsync({\n email: clientInfo.emailAddress,\n practiceId: practiceInfo.practiceId,\n phoneNumber: clientInfo.phoneNumber\n });\n });\n }}\n error={!!getIn(errors, 'clientInfo.emailAddress')}\n msg={t(getIn(errors, 'clientInfo.emailAddress'))}\n />\n \n \n {\n const unmasked = unMask(value);\n await setFieldValue('clientInfo.phoneNumber', unmasked, false);\n }}\n onBlur={async (e) => {\n await validateField('clientInfo.phoneNumber');\n await checkForTerms();\n await mutateAsync({\n email: clientInfo.emailAddress,\n phoneNumber: unMask(e.nativeEvent.text),\n practiceId: practiceInfo.practiceId\n });\n }}\n error={!!getIn(errors, 'clientInfo?.phoneNumber')}\n msg={t(getIn(errors, 'clientInfo?.phoneNumber'))}\n />\n \n \n \n );\n};\n\nexport default ClientInformation;\n","import React from 'react';\nimport styled from 'styled-components/native';\nimport { Edit2 } from 'react-native-feather';\nimport { TouchableRipple } from 'react-native-paper';\nimport { Margin } from 'src/constants';\n\ninterface Props {\n onPress: () => void;\n}\nconst EditButton: React.FC = ({ onPress }) => {\n return (\n \n \n \n );\n};\n\nexport default EditButton;\n\nconst Edit = styled(Edit2)`\n color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst StyleButton = styled(TouchableRipple)`\n padding: ${Margin.ExtraSmall}px;\n border-radius: ${({ theme }) => theme.roundness}px;\n`;\n","import React, { Fragment, useMemo } from 'react';\nimport { Body, Subheading } from 'src/components';\nimport { isDefined } from 'src/utils';\nimport EditButton from './EditButton';\nimport { NoticeContainer, ErrorText, MainText } from './shared';\nimport styled, { css } from 'styled-components/native';\nimport { Margin } from 'src/constants';\nimport { Weight } from 'src/theme';\nimport { useTranslation } from 'react-i18next';\nimport { FormData, FormState, Section } from '../model';\nimport { FormikErrors, getIn } from 'formik';\nimport { isEmpty } from 'lodash';\n\ninterface Props\n extends FormState {\n section: Section;\n disableEditing?: boolean;\n errors: FormikErrors;\n values: Data;\n goToStep: (to: StateEnum) => void;\n}\nconst ConfirmationSection = function ({\n disableEditing,\n section,\n ...props\n}: Props): ReturnType>> {\n const { errors, values, goToStep } = props;\n const { t } = useTranslation('onlineBooking');\n const { title, fields, stateKey, fieldDisplay, dataKey } = section;\n\n const labelValues = useMemo(() => {\n const valueSection = values[dataKey];\n const errorsSection = errors[dataKey];\n return Object.values(fields)\n .map((field) => {\n const f = typeof field === 'string' ? field : field.field;\n const value = getIn(valueSection, f);\n const error = getIn(errorsSection, f);\n const component = typeof field === 'object' ? field.component : undefined;\n const fieldDisplay = typeof field === 'object' ? field.fieldDisplay : undefined;\n return { field: f as keyof typeof fields, value, error, component, fieldDisplay };\n })\n .filter(({ value, error }) => isDefined(value) || error);\n }, [fields, values, errors, dataKey]);\n\n return (\n \n \n {t(title)}\n {!disableEditing && goToStep(stateKey)} />}\n \n \n {labelValues.map(({ field, value, error, fieldDisplay: orientation, component }) => {\n if ((!isDefined(value) || (typeof value === 'object' && isEmpty(value))) && !error) {\n return null;\n }\n const transformedValue = component?.(props) ?? value;\n\n return (\n \n \n \n {t(`form.${String(field)}`)}\n \n {transformedValue &&\n (typeof transformedValue === 'string' || typeof transformedValue === 'number' ? (\n {t(`${transformedValue}`)}\n ) : (\n transformedValue\n ))}\n \n {error && {t(error)}}\n \n );\n })}\n {!labelValues.length && {t('common:n/a')}}\n {!!errors[dataKey] && !isEmpty(errors[dataKey]) && (\n {t(`errors.${String(dataKey)}`)}\n )}\n \n \n );\n};\n\nexport default ConfirmationSection;\n\nconst Container = styled.View<{ fieldDisplay: 'row' | 'column' }>`\n ${({ fieldDisplay }) => (fieldDisplay === 'row' ? RowStyle : ColumnStyle)}\n`;\n\nconst RowStyle = css`\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst ColumnStyle = css`\n flex-direction: column;\n gap: ${Margin.Medium}px;\n`;\n\nconst Column = styled.View`\n flex-direction: column;\n gap: ${Margin.Large}px;\n`;\n\nconst SectionTitle = styled(Body)<{ fieldDisplay: 'row' | 'column' }>`\n color: ${({ theme }) => (theme.viewMode.isMobile ? theme.colors.text : theme.colors.onSurface)};\n ${({ fieldDisplay }) => fieldDisplay === 'column' && `font-weight: ${Weight.BOLD};`}\n`;\n\nconst Value = styled(Body)`\n color: ${({ theme }) => (theme.viewMode.isMobile ? theme.colors.text : theme.colors.onSurface)};\n`;\n","import React from 'react';\nimport { ContentContainer, MainText, FormScrollView } from './shared';\nimport { Headline } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport ConfirmationSection from './ConfirmationSection';\nimport { ConfirmationSections, FormData, FormState, Section } from '../model';\n\ninterface Props\n extends FormState {\n confirmationSections: ConfirmationSections;\n}\n\nconst Confirmation = function (\n props: Props\n): ReturnType>> {\n const { confirmationSections } = props;\n const { t } = useTranslation('onlineBooking');\n\n return (\n \n \n {t('confirmation.title')}\n {t('confirmation.description')}\n \n\n {Object.values>(confirmationSections).map((sectionProps) => (\n \n key={String(sectionProps.dataKey)}\n section={confirmationSections[sectionProps.dataKey]}\n {...sectionProps}\n {...props}\n />\n ))}\n \n );\n};\n\nexport default Confirmation;\n","import React from 'react';\nimport { FormData, FormState } from '../model';\nimport { IconSize, Size } from 'src/constants';\nimport styled from 'styled-components/native';\n\nconst ImageHolderSection = function ({\n values\n}: FormState): ReturnType>> {\n return (\n \n {Object.values(values.additionalInfo.images ?? {}).map((image) => (\n \n ))}\n \n );\n};\n\nexport default ImageHolderSection;\n\nconst ImagesHolder = styled.View`\n gap: ${Size.XS}px;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst StyledImage = styled.Image`\n height: ${IconSize.XL}px;\n width: ${IconSize.XL}px;\n flex: 1 0 31%;\n max-width: 32%\n aspect-ratio: 1;\n border-radius: ${({ theme }) => theme.roundness}px;\n background-color: ${({ theme }) => theme.colors.disabled};\n`;\n","import { IconSize, Size } from 'src/constants';\n\nexport const SIDEBAR_WIDTH = 300;\nexport const SIDEBAR_PADDING = Size.M;\nexport const SIDE_BAR_LOGO_SIZE = IconSize.XXL;\nexport const LEFT_HERO_WIDTH = 362;\nexport const LEFT_HERO_HEIGHT = 768;\n\nexport const MAX_CARD_WIDTH = 900;\nexport const MAX_CARD_HEIGHT = 768;\n\nexport enum STEP_STATUS {\n ACTIVE = 'ACTIVE',\n INCOMPLETE = 'INCOMPLETE',\n COMPLETE = 'COMPLETE',\n ERROR = 'ERROR'\n}\n","import { AppColors } from 'src/types/paper';\nimport { STEP_STATUS } from './components/constants';\nimport { transparent } from 'src/utils';\n\nexport const switchColors = (stepState: STEP_STATUS, colors: AppColors) => {\n switch (stepState) {\n case STEP_STATUS.ACTIVE:\n return colors.primary;\n case STEP_STATUS.ERROR:\n return colors.error;\n case STEP_STATUS.INCOMPLETE:\n return transparent(colors.disabled, 0.1);\n default:\n return colors.text;\n }\n};\n\nexport const switchTextColors = (stepState: STEP_STATUS, colors: AppColors) => {\n switch (stepState) {\n case STEP_STATUS.ACTIVE:\n return colors.surface;\n case STEP_STATUS.ERROR:\n return colors.surface;\n default:\n return colors.onSurface;\n }\n};\n\nexport const getStepState = (valid: boolean, visited: boolean, isActive: boolean): STEP_STATUS => {\n if (isActive) {\n return STEP_STATUS.ACTIVE;\n } else if (!visited) {\n return STEP_STATUS.INCOMPLETE;\n } else if (valid) {\n return STEP_STATUS.COMPLETE;\n } else {\n return STEP_STATUS.ERROR;\n }\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { SIDEBAR_WIDTH, SIDE_BAR_LOGO_SIZE, STEP_STATUS } from './constants';\nimport styled from 'styled-components/native';\nimport { INTL_PHONE_MASK, IconSize, Margin, PHONE_MASK, Language, Size } from 'src/constants';\nimport { Body, Headline, HoverButton, DropDown } from 'src/components';\nimport { mask } from 'react-native-mask-text';\nimport { useTranslation } from 'react-i18next';\nimport { Weight } from 'src/theme';\nimport { Check } from 'react-native-feather';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { transparent } from 'src/utils';\nimport { getStepState, switchColors, switchTextColors } from '../helper';\nimport { ApiPracticeInfo } from 'src/interfaces';\nimport { omit } from 'lodash';\n\nconst MARKER_SIZE = IconSize.S;\n\nexport type Info = {\n title: string;\n field: string | null;\n validator: (data: any) => boolean;\n key: StateEnum;\n};\n\nexport type StepInfo = {\n [key in StateEnum]: Info;\n};\n\ninterface Props {\n disableNav: boolean;\n stepInfo: StepInfo;\n currentStep: StateEnum;\n visited: Partial>;\n validationResults: Record;\n goToStep: (step: StateEnum) => void;\n practiceInfo: ApiPracticeInfo;\n}\n\nconst LeftNavBar = function ({\n disableNav,\n stepInfo,\n currentStep,\n visited,\n validationResults,\n practiceInfo,\n goToStep\n}: Props): ReturnType>> {\n const { colors } = useAppTheme();\n const { t, i18n } = useTranslation('onlineBooking');\n const [language, setLanguage] = useState(i18n.language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n void i18n.changeLanguage(language);\n }\n }, [i18n, language]);\n\n const countableSteps = useMemo(() => {\n const lastStep = Math.max(...Object.keys(stepInfo).map((k) => (k === '' ? NaN : +k)));\n return omit(stepInfo, lastStep);\n }, [stepInfo]);\n\n return (\n \n \n {!!practiceInfo.petPageLogo && }\n {practiceInfo.name} \n {mask(practiceInfo.phoneNumber, [PHONE_MASK, INTL_PHONE_MASK])}\n \n \n {Object.values>(countableSteps).map((step) => {\n const status = getStepState(\n validationResults[step.key],\n !!visited[step.key],\n currentStep === step.key\n );\n return (\n goToStep(step.key)}\n key={step.key}\n icon={\n \n {status === STEP_STATUS.COMPLETE ? (\n \n ) : (\n {step.key + 1}\n )}\n {!!stepInfo[step.key].field && }\n \n }\n >\n {t(step.title)}\n \n );\n })}\n \n \n {\n setLanguage(value.toString());\n }}\n />\n \n \n );\n};\n\nexport default LeftNavBar;\n\nconst NavigationIndicatorContainer = styled.View`\n padding: ${Margin.Large}px;\n flex: 1;\n`;\n\nconst SidebarContainer = styled.View`\n align-self: stretch;\n flex-basis: ${SIDEBAR_WIDTH}px;\n background-color: ${({ theme }) => theme.colors.surface};\n`;\n\nconst PracticeInfoContainer = styled.View`\n gap: ${Margin.Medium}px;\n padding: ${Margin.ExtraLarge}px;\n`;\n\nconst PracticeLogo = styled.Image.attrs({\n resizeMode: 'contain'\n})`\n height: ${SIDE_BAR_LOGO_SIZE}px;\n`;\n\nconst CenteredText = styled(Body)`\n text-align: center;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst SectionTitle = styled(Body)<{ isActive: boolean }>`\n font-weight: ${({ isActive }) => (isActive ? Weight.BOLD : Weight.REGULAR)};\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst IndicatorRow = styled(HoverButton).attrs({\n labelStyle: {\n lineHeight: MARKER_SIZE,\n letterSpacing: 0.5\n },\n numberOfLines: 1\n})`\n cursor: pointer;\n flex-direction: row;\n align-items: top;\n justify-content: flex-start;\n gap: ${Margin.Medium}px;\n padding: ${MARKER_SIZE / 2}px;\n overflow: visible;\n`;\n\nconst IconContainer = styled.View<{ status: STEP_STATUS }>`\n align-items: center;\n justify-content: center;\n width: ${MARKER_SIZE}px;\n height: ${MARKER_SIZE}px;\n border-radius: ${MARKER_SIZE}px;\n background-color: ${({ theme, status }) => switchColors(status, theme.colors)};\n`;\n\nconst IconText = styled(Body)<{ status: STEP_STATUS }>`\n text-align: center;\n color: ${({ theme, status }) => switchTextColors(status, theme.colors)};\n`;\n\nconst Marker = styled.View`\n width: 2px;\n height: ${MARKER_SIZE}px;\n background-color: ${({ theme }) => transparent(theme.colors.disabled, 0.1)};\n position: absolute;\n bottom: ${-MARKER_SIZE}px;\n`;\n\nconst LanguagePickerContainer = styled.View`\n margin: ${Size.X2_S}px;\n`;\n","import React, { useLayoutEffect, useMemo, useRef } from 'react';\nimport styled from 'styled-components/native';\nimport { getStepState } from '../helper';\nimport { Size } from 'src/constants';\nimport { AppColors } from 'src/types/paper';\nimport { colorShade, transparent } from 'src/utils';\nimport { Animated } from 'react-native';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Info, StepInfo } from './LeftNavBar';\nimport { omit } from 'lodash';\nimport { STEP_STATUS } from './constants';\n\ninterface Props {\n disableNav: boolean;\n validationResults: Record;\n visited: Partial>;\n currentStep: StateEnum;\n goToStep: (step: StateEnum) => void;\n stepInfo: StepInfo;\n}\n\nconst TopNavBar = function ({\n disableNav,\n validationResults,\n visited,\n currentStep,\n goToStep,\n stepInfo\n}: Props): ReturnType>> {\n const {\n viewMode: { windowWidth }\n } = useAppTheme();\n const indicatorPosition = useRef(new Animated.Value(0));\n\n const { countableSteps, lastStep } = useMemo(() => {\n const lastStep = Math.max(...Object.keys(stepInfo).map((k) => (k === '' ? NaN : +k)));\n return {\n countableSteps: omit(stepInfo, lastStep),\n lastStep\n };\n }, [stepInfo]);\n\n useLayoutEffect(() => {\n Animated.timing(indicatorPosition.current, {\n toValue: +currentStep * stepWidth(windowWidth, 0.25, lastStep),\n duration: 300,\n useNativeDriver: false\n }).start();\n }, [currentStep, windowWidth, lastStep]);\n\n return (\n \n {Object.values>(countableSteps).map((step) => {\n const status = getStepState(\n validationResults[step.key],\n !!visited[step.key],\n currentStep === step.key\n );\n return (\n goToStep(step.key)}\n />\n );\n })}\n \n \n );\n};\n\nexport default TopNavBar;\n\nconst TopBarContainer = styled.View`\n flex-direction: row;\n align-items: stretch;\n height: ${Size.XS}px;\n`;\n\nconst TabBarIndicator = styled.Pressable<{\n status: STEP_STATUS;\n step: number;\n totalSteps: number;\n disableNav: boolean;\n}>`\n flex: 1;\n background-color: ${({ theme, status }) => barIndicatorColor(status, theme.colors)};\n border-right-width: ${({ step, totalSteps }) => (step === totalSteps ? 0 : 0.5)}px;\n border-left-width: ${({ step }) => (step === 0 ? 0 : 0.5)}px;\n border-right-color: ${({ theme }) => theme.colors.surface};\n border-left-color: ${({ theme }) => theme.colors.surface};\n opacity: ${({ disableNav }) => (disableNav ? 0.5 : 1)};\n`;\n\nconst TabBarHighlight = styled(Animated.View)<{ stepCount: number }>`\n width: ${({ theme, stepCount }) => stepWidth(theme.viewMode.windowWidth, -2, stepCount)}px;\n height: 100%;\n background-color: ${({ theme }) => colorShade(theme.colors.primary, 0.7)};\n position: absolute;\n bottom: 0;\n pointer-events: none;\n`;\n\nconst barIndicatorColor = (status: STEP_STATUS, colors: AppColors) => {\n switch (status) {\n case STEP_STATUS.INCOMPLETE:\n return transparent(colors.primary, 0.2);\n case STEP_STATUS.ERROR:\n return transparent(colors.error, 0.5);\n default:\n return colorShade(colors.primary, 0.8);\n }\n};\n\nconst stepWidth = (windowWidth: number, compensation: number, stepCount: number) =>\n windowWidth / stepCount + compensation;\n","import DogAndCat from 'assets/customizations/onlineBooking/leftHero/dog_and_cat.png';\nimport CanineFelineEquineExotic from 'assets/customizations/onlineBooking/leftHero/canine_feline_equine_exotic.jpg';\nimport CanineFelineEquine from 'assets/customizations/onlineBooking/leftHero/canine_feline_equine.jpg';\nimport CanineFelineExotic2 from 'assets/customizations/onlineBooking/leftHero/canine_feline_exotic_2.jpg';\nimport CanineFelineExotic from 'assets/customizations/onlineBooking/leftHero/canine_feline_exotic.jpg';\nimport Equine from 'assets/customizations/onlineBooking/leftHero/equine.jpg';\nimport Exotic from 'assets/customizations/onlineBooking/leftHero/exotic.jpg';\nimport Feline from 'assets/customizations/onlineBooking/leftHero/feline.jpg';\nimport { LeftImageCustomization } from 'src/interfaces';\n\nconst getOnlineBookingHero = (leftImage?: LeftImageCustomization) => {\n switch (leftImage) {\n case LeftImageCustomization.DOG_AND_CAT:\n return DogAndCat;\n case LeftImageCustomization.CANINE_FELINE_EQUINE_EXOTIC:\n return CanineFelineEquineExotic;\n case LeftImageCustomization.CANINE_FELINE_EQUINE:\n return CanineFelineEquine;\n case LeftImageCustomization.CANINE_FELINE_EXOTIC_2:\n return CanineFelineExotic2;\n case LeftImageCustomization.CANINE_FELINE_EXOTIC:\n return CanineFelineExotic;\n case LeftImageCustomization.EQUINE:\n return Equine;\n case LeftImageCustomization.EXOTIC:\n return Exotic;\n case LeftImageCustomization.FELINE:\n return Feline;\n default:\n return DogAndCat;\n }\n};\n\nexport default getOnlineBookingHero;\n","import Paws from 'assets/customizations/onlineBooking/backgroundPattern/paws.png';\nimport HorseShoes from 'assets/customizations/onlineBooking/backgroundPattern/horse_shoes.png';\nimport PawsAndHorseshoes from 'assets/customizations/onlineBooking/backgroundPattern/paws_and_horseshoes.png';\nimport PawsAndLizards from 'assets/customizations/onlineBooking/backgroundPattern/paws_and_lizards.png';\nimport { BackgroundPatternCustomization } from 'src/interfaces/api/PracticeTheme';\n\nconst getOnlineBookingBackground = (backgroundPattern?: BackgroundPatternCustomization) => {\n switch (backgroundPattern) {\n case BackgroundPatternCustomization.HORSE_SHOES:\n return HorseShoes;\n case BackgroundPatternCustomization.PAWS:\n return Paws;\n case BackgroundPatternCustomization.PAWS_AND_HORSESHOES:\n return PawsAndHorseshoes;\n case BackgroundPatternCustomization.PAWS_AND_LIZARDS:\n return PawsAndLizards;\n default:\n return Paws;\n }\n};\n\nexport default getOnlineBookingBackground;\n","import { PropsWithChildren, useCallback, useEffect, useLayoutEffect } from 'react';\nimport styled from 'styled-components/native';\nimport LeftNavBar, { StepInfo } from './LeftNavBar';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Margin, Size } from 'src/constants';\nimport { LEFT_HERO_HEIGHT, LEFT_HERO_WIDTH, MAX_CARD_HEIGHT, MAX_CARD_WIDTH } from './constants';\nimport { containers } from 'src/theme/globalStyles';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport { BottomButton, CPrimaryButton, HoverButton } from 'src/components';\nimport { Divider } from 'react-native-paper';\nimport { useTranslation } from 'react-i18next';\nimport { ErrorText } from './shared';\nimport { ChevronLeft, X } from 'react-native-feather';\nimport { LayoutAnimation, Pressable } from 'react-native';\nimport TopNavBar from './TopNavBar';\nimport getOnlineBookingHero from 'src/utils/theme/getOnlineBookingHero';\nimport getOnlineBookingBackground from 'src/utils/theme/getOnlineBookingBackground';\nimport { ApiPracticeInfo } from 'src/interfaces';\n\ninterface Props extends PropsWithChildren {\n practiceInfo: ApiPracticeInfo;\n currentStep: StateEnum;\n disableTabNav: boolean;\n disableNav: boolean;\n canExit: boolean;\n showReturnToConfirmation: boolean;\n showReturnToPetPage: boolean;\n showContinueButton: boolean;\n goToConfirmation: () => void;\n goToStep: (step: StateEnum) => void;\n goBack: () => void;\n advance: () => void;\n exit: () => void;\n errorMessage: string | undefined;\n isSubmitting: boolean;\n continueText: string;\n bottomButtonText: string;\n bottomButtonAction: () => void;\n bottomButtonDisabled: boolean;\n title: string;\n visited: Partial>;\n validationResults: Record;\n stepInfo: StepInfo;\n}\n\nconst LayoutController = function ({\n children,\n ...props\n}: Props): ReturnType>> {\n const {\n practiceInfo,\n currentStep,\n disableTabNav,\n disableNav,\n exit,\n canExit,\n showReturnToConfirmation,\n showReturnToPetPage,\n goToConfirmation,\n goBack,\n advance,\n errorMessage,\n isSubmitting,\n showContinueButton,\n continueText,\n bottomButtonAction,\n bottomButtonText,\n bottomButtonDisabled,\n title,\n visited,\n goToStep,\n validationResults,\n stepInfo\n } = props;\n const { setOptions } = useNavigation();\n const { t } = useTranslation('common');\n\n const {\n previewThemeSet,\n removePreview,\n colors,\n viewMode: { isMobile, isWeb }\n } = useAppTheme();\n useFocusEffect(\n useCallback(() => {\n if (practiceInfo?.theme?.custom) {\n previewThemeSet(practiceInfo.theme.custom);\n return removePreview;\n }\n }, [practiceInfo?.theme?.custom, previewThemeSet, removePreview])\n );\n\n useLayoutEffect(() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n }, [currentStep]);\n\n useEffect(() => {\n if (isMobile) {\n setOptions({\n headerLeft: () =>\n canExit ? (\n \n \n \n ) : (\n \n \n \n ),\n title\n });\n }\n }, [\n canExit,\n colors.disabled,\n colors.onPrimary,\n disableTabNav,\n exit,\n goBack,\n isMobile,\n setOptions,\n title\n ]);\n\n if (isMobile) {\n return (\n <>\n \n {children}\n \n {bottomButtonText}\n \n \n );\n } else {\n return (\n <>\n \n \n \n \n \n {isWeb && (\n \n )}\n \n {children}\n \n \n {!canExit && (\n \n {t('back')}\n \n )}\n\n {showReturnToPetPage && (\n \n {t('onlineBooking:returnToPetPage')}\n \n )}\n {showContinueButton && (\n \n {continueText}\n \n )}\n {!!errorMessage && {errorMessage}}\n {showReturnToConfirmation && (\n \n {t('onlineBooking:confirmation.returnNewline')}\n \n )}\n \n \n \n \n \n \n );\n }\n};\n\nexport default LayoutController;\n\nconst BackgroundPattern = styled.ImageBackground.attrs({\n resizeMode: 'repeat'\n})`\n opacity: 0.2;\n position: absolute;\n width: 100%;\n height: 100%;\n`;\n\nconst LeftHero = styled.Image`\n width: ${LEFT_HERO_WIDTH}px;\n height: ${LEFT_HERO_HEIGHT}px;\n`;\n\nconst FullScreen = styled.View`\n flex: 1;\n justify-content: center;\n align-items: stretch;\n flex-direction: row;\n background-color: ${({ theme }) => theme.colors.primary};\n`;\n\nconst OuterContainer = styled.View`\n flex: 1;\n align-self: stretch;\n max-width: ${MAX_CARD_HEIGHT}px;\n`;\n\nconst Container = styled.View`\n flex: 1;\n align-items: center;\n justify-content: center;\n padding: ${Size.X3_L}px;\n`;\n\nconst ContentCard = styled.View`\n width: 100%;\n max-width: ${({ theme }) =>\n theme.viewMode.isWeb ? MAX_CARD_WIDTH : MAX_CARD_WIDTH - LEFT_HERO_WIDTH}px;\n height: 100%;\n ${({ theme: { viewMode } }) =>\n viewMode.isTablet && !viewMode.isLandscape ? '' : `max-height: ${MAX_CARD_HEIGHT}px;`}\n flex-direction: row;\n background-color: ${({ theme }) => theme.colors.surface};\n border-radius: ${({ theme }) => theme.roundness}px;\n overflow: hidden;\n`;\n\nconst BottomNavigation = styled.View`\n flex-direction: row;\n align-items: center;\n padding: ${Margin.ExtraLarge}px;\n gap: ${Margin.Medium}px;\n`;\n","import React from 'react';\nimport {\n ContentContainer,\n InputContainer,\n MainText,\n NoticeContainer,\n NoticeIcon,\n NoticeSection,\n NoticeText,\n NoticeTextContainer,\n FormScrollView\n} from './shared';\nimport { Caption, DropDown, Headline } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport { Checkbox } from 'react-native-paper';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { PreferredContactMethod } from 'src/interfaces';\nimport { FormData, FormState } from '../model';\n\nconst NotificationSettings = function ({\n values,\n setFieldValue,\n practiceInfo,\n validateField\n}: FormState): ReturnType>> {\n const { t } = useTranslation('onlineBooking');\n const { colors, viewMode } = useAppTheme();\n\n return (\n \n \n {t('notificationSettings.title')}\n \n \n \n \n {\n await setFieldValue('notificationSettings.smsOptIn', true);\n await validateField('notificationSettings.smsOptIn');\n }}\n />\n \n \n {t('notificationSettings.optInTitle')}\n \n {t('notificationSettings.optInDescription', {\n practiceName: practiceInfo.name,\n website: practiceInfo.website\n })}\n \n \n \n \n \n \n \n {\n await setFieldValue('notificationSettings.smsOptIn', false);\n await validateField('notificationSettings.smsOptIn');\n }}\n />\n \n \n {t('notificationSettings.optOutTitle')}\n \n {t('notificationSettings.optOutDescription', { practiceName: practiceInfo.name })}\n \n \n \n \n \n {\n await setFieldValue('notificationSettings.preferredContactMethod', value);\n await validateField('notificationSettings.preferredContactMethod');\n }}\n />\n \n \n );\n};\n\nexport default NotificationSettings;\n","import React, { useMemo } from 'react';\nimport { Image } from 'react-native';\nimport { Body, Headline, HoverCard } from 'src/components';\nimport { ContentContainer, MainText } from './shared';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components/native';\nimport { IconSize, IS_WEB, Margin } from 'src/constants';\nimport AnimalIcon from 'src/components/Icons/Animal';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { FlatList } from 'react-native-gesture-handler';\nimport { FormData, FormState, PatientInfo } from '../model';\nimport Color from 'color';\nimport { partition } from 'lodash';\nimport { cleanUrl } from 'src/utils';\n\nconst NUM_COLS = 2;\nconst SelectPatient = function (\n props: FormState\n) {\n const { t } = useTranslation('onlineBooking');\n const { colors, viewMode } = useAppTheme();\n const {\n values: { patientInfo },\n clientPatientQuery,\n setFieldValue,\n setFieldError,\n initialValues\n } = props;\n\n const reorderedPatientList = useMemo(() => {\n if (!clientPatientQuery.data) return [];\n const [initial, rest] = partition(\n clientPatientQuery.data.patients,\n (p) => p.patientId === initialValues.patientInfo?.patientId\n );\n return [newPatient, ...initial, ...rest];\n }, [clientPatientQuery.data, initialValues.patientInfo?.patientId]);\n\n return (\n <>\n \n ListHeaderComponent={\n \n {t('selectPet.title')}\n {t('selectPet.description')}\n \n }\n contentContainerStyle={{\n height: IS_WEB ? 0 : undefined,\n paddingVertical: Margin.ExtraLarge,\n paddingHorizontal: viewMode.isMobile ? Margin.Medium : Margin.ExtraLarge\n }}\n ListHeaderComponentStyle={{ marginBottom: Margin.ExtraLarge }}\n data={reorderedPatientList}\n numColumns={NUM_COLS}\n renderItem={({ item: patient }) => {\n const isSelected =\n !!patientInfo?.patientId && patientInfo?.patientId === patient.patientId;\n\n return (\n \n {\n await setFieldValue('patientInfo', patient);\n setFieldError('patientInfo', undefined);\n }}\n >\n \n {patient?.hasPhoto ? (\n \n ) : (\n \n )}\n \n \n \n {patient.isNewPatient ? t('selectPet.addNewPet') : patient.name}\n \n \n \n \n );\n }}\n />\n \n );\n};\n\nconst newPatient: PatientInfo = {\n name: '',\n species: '',\n breed: '',\n age: '',\n sex: '',\n isNewPatient: true,\n hasPhoto: undefined\n};\n\nexport default SelectPatient;\n\nconst Card = styled(HoverCard)<{ isSelected?: boolean }>`\n aspect-ratio: ${({ theme }) => (theme.viewMode.isMobile ? 1 : 1.18)};\n border: ${Margin.Small}px solid ${({ isSelected, theme }) =>\n isSelected ? theme.colors.primary : 'transparent'}};\n background-color: ${({ theme }) => theme.colors.surface}};\n`;\n\nconst CardContainer = styled.View`\n flex-basis: 50%;\n padding: ${Margin.Medium}px;\n`;\n\nconst IconContainer = styled.View`\n align-items: center;\n justify-content: center;\n flex: 1;\n background-color: ${({ theme }) => Color(theme.colors.primary).alpha(0.1).hexa()};\n border-top-left-radius: ${({ theme }) => theme.roundness}px;\n border-top-right-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nconst PatientLabelContainer = styled.View`\n flex-direction: row;\n gap: ${Margin.Small}px;\n padding: ${Margin.Medium}px ${Margin.Large}px;\n background-color: ${({ theme }) => theme.colors.surface};\n border-bottom-left-radius: ${({ theme }) => theme.roundness}px;\n border-bottom-right-radius: ${({ theme }) => theme.roundness}px;\n`;\n\nconst PatientName = styled(Body).attrs({ numberOfLines: 1 })`\n flex: 1;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n","import React, { useLayoutEffect } from 'react';\nimport { ContentContainer, InputContainer, MainText, Row, FormScrollView } from './shared';\nimport { Headline, HoverButton, TextInput } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components/native';\nimport SelectPatient from './SelectPatient';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { LayoutAnimation } from 'react-native';\nimport { FormData, FormState } from '../model';\nimport { getIn } from 'formik';\n\nconst PatientInfo = function (\n props: FormState\n) {\n const {\n practiceInfo,\n values: { clientInfo, patientInfo },\n clientPatientQuery: { mutateAsync, variables },\n setFieldValue,\n validateField,\n errors,\n clientPatientQuery\n } = props;\n const { t } = useTranslation('onlineBooking');\n const { colors } = useAppTheme();\n\n useLayoutEffect(() => {\n if (clientInfo.emailAddress !== variables?.email) {\n void mutateAsync({\n email: clientInfo.emailAddress,\n practiceId: practiceInfo.practiceId\n });\n }\n }, [clientInfo.emailAddress, mutateAsync, practiceInfo.practiceId, variables?.email]);\n\n useLayoutEffect(() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n }, [patientInfo]);\n\n if (clientPatientQuery.isLoading) {\n return ;\n }\n\n if (!clientPatientQuery.data?.patients?.length || !!patientInfo?.isNewPatient) {\n return (\n \n \n {t('patientInfo.title')}\n {t('patientInfo.description')}\n \n \n \n setFieldValue('patientInfo.name', text, false)}\n onBlur={async () => validateField('patientInfo.name')}\n error={!!getIn(errors, 'patientInfo.name')}\n msg={t(getIn(errors, 'patientInfo.name'))}\n />\n \n \n setFieldValue('patientInfo.breed', text, false)}\n onBlur={async () => validateField('patientInfo.breed')}\n error={!!getIn(errors, 'patientInfo.breed')}\n msg={t(getIn(errors, 'patientInfo.breed'))}\n />\n \n \n setFieldValue('patientInfo.sex', text, false)}\n onBlur={async () => validateField('patientInfo.sex')}\n error={!!getIn(errors, 'patientInfo.sex')}\n msg={t(getIn(errors, 'patientInfo.sex'))}\n />\n \n \n setFieldValue('patientInfo.age', text, false)}\n onBlur={async () => validateField('patientInfo.age')}\n error={!!getIn(errors, 'patientInfo.age')}\n msg={t(getIn(errors, 'patientInfo.age'))}\n />\n \n \n {!!clientPatientQuery.data?.patients?.length && (\n setFieldValue('patientInfo.isNewPatient', undefined)}>\n {t('patientInfo.selectExisting')}\n \n )}\n \n );\n }\n return ;\n};\n\nexport default PatientInfo;\n\nconst StyledButton = styled(HoverButton).attrs({\n compact: true\n})`\n align-self: flex-start;\n`;\n","import { AlertTriangle } from 'react-native-feather';\nimport { MiniHeroIcon, HoverButton, BottomButton, Headline, Body } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Margin, MOBILE_WIDTH_MAX } from 'src/constants';\nimport styled from 'styled-components/native';\nimport useGoBack from 'src/hooks/useGoBack';\nimport { useEffect } from 'react';\nimport { useNavigation } from '@react-navigation/native';\nimport { useTranslation } from 'react-i18next';\n\nconst PracticeNotFound: React.FC = () => {\n const { setOptions } = useNavigation();\n const { t } = useTranslation('onlineBooking');\n\n const {\n colors,\n viewMode: { isMobile }\n } = useAppTheme();\n const exit = useGoBack();\n\n useEffect(() => {\n setOptions({\n title: 'Online Booking Unavailable'\n });\n }, [setOptions]);\n\n return (\n <>\n \n \n {t('practiceUnavailable.title')}\n {t('practiceUnavailable.description')}\n {!isMobile && {t('returnToPetPage')}}\n \n {isMobile && {t('returnToPetPage')}}\n \n );\n};\n\nexport default PracticeNotFound;\n\nconst ErrorContainer = styled.View`\n flex: 1;\n justify-content: center;\n align-items: center;\n gap: ${Margin.Medium}px;\n max-width: ${MOBILE_WIDTH_MAX}px;\n padding: ${Margin.ExtraLarge}px;\n align-self: center;\n`;\n\nconst CenteredText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n text-align: center;\n`;\n","import { ConfirmationSections } from 'src/module/FormKit/model';\nimport { OnlineBookingFormData } from '../model';\nimport { BOOKING_STEPS } from './enums';\nimport { ApiPracticeInfo } from 'src/interfaces';\nimport moment from 'moment';\nimport { toLocalDate, toLocalTime } from 'src/utils';\nimport { mask } from 'react-native-mask-text';\nimport { INTL_PHONE_MASK, PHONE_MASK } from 'src/constants';\nimport { ImageHolderSection } from 'src/module/FormKit/components';\nimport { capitalize } from 'lodash';\n\nconst CONFIRMATION_SECTIONS: ConfirmationSections = {\n appointmentInfo: {\n title: 'section.appointmentInfo',\n dataKey: 'appointmentInfo',\n fields: [\n {\n field: 'appointmentOption',\n component: ({ values: { appointmentInfo } }) =>\n appointmentInfo?.appointmentOption?.label ?? ''\n },\n {\n field: 'columnOption',\n component: ({ values: { appointmentInfo } }) => appointmentInfo?.columnOption?.label ?? ''\n },\n {\n field: 'preferredTime',\n component: ({ values, practiceInfo }) =>\n toLocalTime(makeMoment(values, practiceInfo), practiceInfo.timeZone)\n },\n {\n field: 'preferredDate',\n component: ({ values, practiceInfo }) =>\n toLocalDate(makeMoment(values, practiceInfo), practiceInfo.timeZone)\n }\n ],\n stateKey: BOOKING_STEPS.SELECT_APPOINTMENT,\n fieldDisplay: 'row'\n },\n clientInfo: {\n title: 'section.clientInfo',\n dataKey: 'clientInfo',\n fields: [\n 'fullName',\n 'emailAddress',\n {\n field: 'phoneNumber',\n component: ({ values }) =>\n mask(values.clientInfo?.phoneNumber ?? '', [PHONE_MASK, INTL_PHONE_MASK])\n }\n ],\n stateKey: BOOKING_STEPS.CLIENT_INFO,\n fieldDisplay: 'row'\n },\n patientInfo: {\n title: 'section.patientInfo',\n dataKey: 'patientInfo',\n fields: [\n 'name',\n 'breed',\n {\n field: 'sex',\n component: ({ values }) => capitalize(values.patientInfo.sex)\n },\n 'age'\n ],\n stateKey: BOOKING_STEPS.PATIENT_INFO,\n fieldDisplay: 'row'\n },\n additionalInfo: {\n title: 'section.additionalInfo',\n dataKey: 'additionalInfo',\n fields: [\n 'comments',\n {\n field: 'images',\n component: ImageHolderSection\n }\n ],\n stateKey: BOOKING_STEPS.ADDITIONAL_INFO,\n fieldDisplay: 'column'\n },\n notificationSettings: {\n title: 'section.notificationSettings',\n dataKey: 'notificationSettings',\n fields: [\n {\n field: 'smsOptIn',\n component: ({ values: { notificationSettings } }) =>\n notificationSettings?.smsOptIn ? 'form.smsTrue' : 'form.smsFalse'\n },\n {\n field: 'preferredContactMethod',\n component: ({ values: { notificationSettings } }) =>\n `form.${notificationSettings?.preferredContactMethod ?? ''}`\n }\n ],\n stateKey: BOOKING_STEPS.NOTIFICATION_SETTINGS,\n fieldDisplay: 'row'\n }\n};\n\nconst makeMoment = (\n { appointmentInfo }: Partial,\n { timeZone }: ApiPracticeInfo\n) =>\n moment.tz(\n `${appointmentInfo?.preferredDate ?? ''} ${appointmentInfo?.preferredTime ?? ''}`,\n timeZone\n );\n\nexport default CONFIRMATION_SECTIONS;\n","import { OnlineBookingFormData } from '../model';\n\nconst INITIAL_FORM_DATA: OnlineBookingFormData = {\n clientInfo: {\n fullName: '',\n phoneNumber: '',\n emailAddress: '',\n acceptConditions: false\n },\n patientInfo: {},\n appointmentInfo: {},\n notificationSettings: {},\n additionalInfo: {}\n};\n\nexport default INITIAL_FORM_DATA;\n","import { endpoint } from 'src/constants';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\ninterface OnDemandRequest {\n practiceId: number;\n}\ninterface OnDemandResponse {\n status: OnDemandStatus;\n}\n\nexport enum OnDemandStatus {\n SUCCESS = 'SUCCESS',\n RUNNING = 'RUNNING'\n}\n\nexport const onDemandSync = async (request: OnDemandRequest): Promise => {\n const url = endpoint('ON_DEMAND_SYNC', {\n practiceId: request.practiceId\n });\n const response = await apiClient.post(url);\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const onDemandStatus = async (request: OnDemandRequest): Promise => {\n if (!request.practiceId) {\n throw new Error('commandId is required');\n }\n const url = endpoint('ON_DEMAND_STATUS', {\n practiceId: request.practiceId\n });\n const response = await apiClient.get(url);\n return isDefinedOrThrowServerError(response.data);\n};\n\ninterface GetWritebackStatusRequest {\n requestId: number;\n}\n\ninterface RawWritebackStatusResponse {\n id: number;\n writeback_status: WritebackStatus;\n}\n\ninterface GetWritebackStatusResponse {\n id: number;\n writeback_status: WritebackStatus;\n}\n\nenum WritebackStatus {\n MANUAL_ENTRY_REQUIRED = 'manual_entry_required',\n SUCCESS = 'success'\n}\n\nexport const getWritebackStatus = async (\n request: GetWritebackStatusRequest\n): Promise => {\n const url = endpoint('REQUEST_STATUS', {\n request_id: request.requestId\n });\n const response = await apiClient.get(url);\n const rawData = isDefinedOrThrowServerError(response.data);\n return {\n id: rawData.id,\n writeback_status: rawData.writeback_status\n };\n};\n","import moment from 'moment';\nimport { useMemo } from 'react';\nimport { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { onDemandSync, onDemandStatus, OnDemandStatus } from 'src/api/onDemandSync';\nimport { ApiPracticeInfo } from 'src/interfaces';\nimport { queryClient } from 'src/utils';\n\nconst VALID_DURATION = moment.duration(5, 'm').asMilliseconds();\nconst POLL_INTERVAL = moment.duration(5, 's').asMilliseconds();\nconst TIMEOUT = moment.duration(90, 's').asMilliseconds();\n\nconst useOnDemandPoll = (practiceInfo: ApiPracticeInfo) => {\n const { isFetched, isError: syncError } = useQuery({\n queryKey: [QueryKeys.ON_DEMAND_SYNC, practiceInfo.practiceId],\n queryFn: async () => {\n const data = await onDemandSync({ practiceId: practiceInfo.practiceId });\n await queryClient.setQueryData([QueryKeys.ON_DEMAND_STATUS, practiceInfo.practiceId], data);\n return data;\n },\n enabled: !!practiceInfo,\n staleTime: VALID_DURATION,\n cacheTime: VALID_DURATION\n });\n\n const timeoutTime = useMemo(() => {\n if (!isFetched) {\n return undefined;\n }\n return moment().add(TIMEOUT, 'ms').valueOf();\n }, [isFetched]);\n\n const timedOut = moment().isAfter(timeoutTime);\n\n const {\n data: { status } = {},\n isError: statusError,\n isFetched: statusFetched\n } = useQuery({\n queryKey: [QueryKeys.ON_DEMAND_STATUS, practiceInfo.practiceId],\n queryFn: async () => onDemandStatus({ practiceId: practiceInfo.practiceId }),\n enabled: isFetched,\n refetchInterval: (data) =>\n data?.status === OnDemandStatus.RUNNING && !timedOut ? POLL_INTERVAL : false,\n staleTime: Infinity,\n cacheTime: Infinity\n });\n\n return {\n onDemandReady:\n statusError || syncError || timedOut || (statusFetched && status !== OnDemandStatus.RUNNING)\n };\n};\n\nexport default useOnDemandPoll;\n","import { Schedule } from 'src/interfaces';\n\nexport interface AppointmentOption {\n label: string;\n value: number;\n length: number;\n categories?: string[];\n}\n\nconst extractAppointmentOptions = (schedule: Schedule): AppointmentOption[] =>\n (schedule?.appointmentTypes ?? []).map((at) => ({\n label: at.description,\n value: at.id,\n length: at.length,\n categories: at.categories\n }));\n\nexport default extractAppointmentOptions;\n","import { Schedule } from 'src/interfaces';\n\nexport interface FieldDisplayOptions {\n minDays: Schedule['daysInAdvanceMin'];\n maxDays: Schedule['daysInAdvanceMax'];\n useAppointmentTypes: Schedule['useAppointmentTypes'];\n allowCategorySelection: Schedule['allowCategorySelection'];\n categoryType: Schedule['categoryType'] | undefined;\n requireComments: Schedule['requireComments'];\n}\n\nconst extractFieldDisplayOptions = (schedule: Schedule): FieldDisplayOptions => ({\n minDays: schedule?.daysInAdvanceMin,\n maxDays: schedule?.daysInAdvanceMax,\n useAppointmentTypes: !!schedule?.useAppointmentTypes,\n allowCategorySelection: !!schedule?.allowCategorySelection,\n categoryType: schedule?.categoryType,\n requireComments: !!schedule?.requireComments\n});\n\nexport default extractFieldDisplayOptions;\n","import { useQuery } from 'react-query';\nimport { QueryKeys, getSchedule } from 'src/api';\nimport Practice from 'src/interfaces/api/Practice';\nimport extractAppointmentOptions, { AppointmentOption } from './extractAppointmentOptions';\nimport extractColumnOptions, { ColumnOption } from './extractColumnOptions';\nimport extractFieldDisplayOptions, { FieldDisplayOptions } from './extractFieldDisplaySettings';\n\nexport type AppointmentOptions = {\n appointment: AppointmentOption[];\n fieldDisplay: FieldDisplayOptions;\n columns: ColumnOption[];\n};\n\nconst useAppointmentOptions = (practiceId: Practice['id']) => {\n return useQuery({\n queryFn: async (): Promise => {\n const schedule = await getSchedule(practiceId);\n const appointment = extractAppointmentOptions(schedule);\n const fieldDisplay = extractFieldDisplayOptions(schedule);\n const columns = extractColumnOptions(schedule);\n return {\n appointment,\n fieldDisplay,\n columns\n };\n },\n queryKey: [QueryKeys.SCHEDULE, practiceId]\n });\n};\n\nexport default useAppointmentOptions;\n\nexport type { AppointmentOption, ColumnOption, FieldDisplayOptions };\n","import type RequestSetting from 'src/interfaces/api/RequestSetting';\nimport type { AppointmentRequestSettings, OnlineBookingFormData } from './model';\nimport { capitalize, defaults } from 'lodash';\nimport { AppointmentSettingsOptions } from 'src/hooks/useAppointmentOptions/types';\nimport { INITIAL_FORM_DATA } from './helpers';\nimport { ApiPracticeInfo, AppointmentRequest, Client, Patient, RequestType } from 'src/interfaces';\nimport { fullNameAndTitle, isDefined } from 'src/utils';\nimport moment from 'moment-timezone';\nimport { Visit } from 'src/utils/utmTracking';\n\nexport const getAppointmentRequestSettings = (\n requestSetting: RequestSetting\n): AppointmentRequestSettings => {\n return {\n confirmationText: requestSetting.appointmentRequestConfirmationText,\n headerText: requestSetting.appointmentRequestHeaderText,\n onlineBookingConfirmationText: requestSetting.onlineBookingConfirmationText,\n requireComments: requestSetting.requireComments,\n appointmentRequestsDisabled: requestSetting.appointmentRequestsDisabled,\n onlineBookingEnabled: requestSetting.writebackAppointmentRequests\n };\n};\n\nexport const getInitialValues = (\n user: Client | undefined,\n appointmentOptionsData: AppointmentSettingsOptions | undefined,\n patient: Patient | undefined,\n lastSubmittedValues?: Partial,\n isAnotherAppointment?: boolean\n) => {\n const apiData = {\n clientInfo: {\n fullName: fullNameAndTitle(user),\n emailAddress: user?.email,\n phoneNumber: user?.mobilePhone ?? user?.homePhone ?? user?.workPhone,\n clientId: user?.clientId\n },\n patientInfo: isAnotherAppointment\n ? undefined\n : {\n patientId: patient?.patientId,\n name: patient?.name ? capitalize(patient.name) : undefined,\n breed:\n patient?.breed || patient?.species\n ? capitalize(patient.breed ?? patient.species)\n : undefined,\n age: patient?.birthdate,\n sex: patient?.sex ? capitalize(patient.sex) : undefined,\n isNewPatient: patient ? false : undefined\n },\n additionalInfo: {\n requireComments: appointmentOptionsData?.fieldDisplay.requireComments\n },\n appointmentInfo: {\n allowCategorySelection: appointmentOptionsData?.fieldDisplay.allowCategorySelection,\n useAppointmentTypes: appointmentOptionsData?.fieldDisplay.useAppointmentTypes,\n categoryType: appointmentOptionsData?.fieldDisplay.categoryType\n }\n };\n return Object.assign(defaults(apiData, INITIAL_FORM_DATA), lastSubmittedValues);\n};\n\nexport const generateSubmissionValues = (\n practiceInfo: ApiPracticeInfo,\n values: OnlineBookingFormData,\n visitData?: Visit\n): AppointmentRequest => {\n const {\n notificationSettings: { smsOptIn, preferredContactMethod },\n clientInfo: { fullName, emailAddress, phoneNumber, clientId },\n patientInfo: { name, breed, age, sex, isNewPatient, patientId },\n additionalInfo: { comments, images },\n appointmentInfo: {\n preferredDate,\n preferredTime,\n appointmentOption,\n columnOption,\n useAppointmentTypes,\n categoryType\n }\n } = values;\n if (!preferredDate || !preferredTime) {\n throw new Error('Preferred date and time are required');\n }\n const date = moment.tz(`${preferredDate} ${preferredTime}`, practiceInfo.timeZone).toDate();\n return {\n patientId,\n clientId,\n practiceId: practiceInfo.practiceId,\n sourceId: practiceInfo.sourceId,\n type: RequestType.Appointment,\n newClient: !clientId,\n content: {\n appointmentLength: columnOption?.appointmentLength,\n appointmentType: appointmentOption?.label,\n appointmentTypeId: appointmentOption?.value,\n categoryId: columnOption?.categoryId,\n categoryType,\n column: columnOption?.value,\n comments,\n emailAddress,\n fullName,\n length: columnOption?.appointmentLength,\n origin: 'PetPage - Online Booking',\n petName: name,\n phoneNumber,\n preferredContactMethod,\n preferredDate,\n preferredTime: Intl.DateTimeFormat('en', {\n hour: 'numeric',\n minute: 'numeric',\n timeZone: practiceInfo.timeZone\n }).format(date),\n smsOptIn,\n smsOptOut: !smsOptIn,\n useAppointmentTypes,\n isNewPatient,\n petAge: age,\n petSex: sex,\n breed\n },\n requestImageIds:\n images &&\n Object.values(images)\n .map((image) => image.id)\n .filter(isDefined),\n visitorToken: visitData?.visitorToken,\n visitToken: visitData?.visitToken\n };\n};\n\nexport const isClientMatch = ({\n practiceInfo,\n clientInfo,\n user\n}: {\n practiceInfo: ApiPracticeInfo;\n clientInfo: OnlineBookingFormData['clientInfo'];\n user: Client;\n}) => {\n if (!user) return false;\n if (practiceInfo.practiceId !== user?.practiceId) return false;\n if (clientInfo.emailAddress === user?.email) return true;\n if (user.mobilePhone && clientInfo.phoneNumber === user.mobilePhone) return true;\n if (user.homePhone && clientInfo.phoneNumber === user.homePhone) return true;\n if (user.workPhone && clientInfo.phoneNumber === user.workPhone) return true;\n return false;\n};\n","import { ClientPatientSearchResponse } from 'src/api';\nimport { MappedClientPatientSearch, PatientInfo } from 'src/module/FormKit/model';\n\nconst mapClientPatientSearch = (data: ClientPatientSearchResponse): MappedClientPatientSearch => {\n return {\n ...data,\n patients: data.patients?.map((patient) => {\n const patientInfo: PatientInfo = {\n ...patient,\n breed: patient.species,\n isNewPatient: false\n };\n return patientInfo;\n })\n };\n};\n\nexport default mapClientPatientSearch;\n","import { useEffect } from 'react';\nimport { ColumnOption } from 'src/hooks/useAppointmentOptions';\nimport { NO_PREFERENCE } from 'src/hooks/useAppointmentOptions/extractColumnOptions';\nimport { OnlineBookingState } from '../model';\n\ntype Props = Pick<\n OnlineBookingState,\n | 'values'\n | 'openingsQuery'\n | 'appointmentOptions'\n | 'setFieldValue'\n | 'validateField'\n | 'practiceInfo'\n>;\n\nconst useFilterAppointmentOptions = ({\n openingsQuery: { data: openings },\n appointmentOptions: { data: appointmentOptions },\n setFieldValue,\n validateField,\n practiceInfo: { timeZone },\n values\n}: Props) => {\n useEffect(() => {\n void setFieldValue(\n 'appointmentInfo.availableDates',\n openings ? Object.keys(openings).sort() : undefined\n ).then(() => {\n if (values.appointmentInfo.preferredDate) {\n void validateField('appointmentInfo.preferredDate');\n }\n });\n }, [openings, setFieldValue, validateField, values.appointmentInfo.preferredDate]);\n\n useEffect(() => {\n if (values.appointmentInfo.preferredDate) {\n void setFieldValue(\n 'appointmentInfo.availableTimes',\n openings?.[values.appointmentInfo.preferredDate]\n ).then(() => {\n if (values.appointmentInfo.preferredTime) {\n void validateField('appointmentInfo.preferredTime');\n }\n });\n }\n }, [\n openings,\n values.appointmentInfo.preferredDate,\n timeZone,\n values.appointmentInfo.preferredTime,\n setFieldValue,\n validateField\n ]);\n\n useEffect(() => {\n let availableColumns: ColumnOption[] = [];\n\n if (!appointmentOptions?.columns) {\n return;\n }\n if (values.appointmentInfo?.useAppointmentTypes) {\n availableColumns = appointmentOptions.columns.filter(\n (columnOption: ColumnOption) =>\n columnOption.value === NO_PREFERENCE ||\n (columnOption.colKey &&\n values.appointmentInfo.appointmentOption?.categories?.includes(columnOption.colKey)) ||\n (columnOption.duplicateOfAppointmentCategoryId &&\n values.appointmentInfo.appointmentOption?.categories?.includes(\n columnOption.duplicateOfAppointmentCategoryId\n ))\n );\n } else {\n availableColumns = appointmentOptions.columns;\n }\n\n void setFieldValue('appointmentInfo.availableColumns', availableColumns);\n if (values.appointmentInfo.columnOption) {\n void validateField('appointmentInfo.columnOption');\n }\n }, [\n values.appointmentInfo?.useAppointmentTypes,\n values.appointmentInfo.appointmentOption?.categories,\n setFieldValue,\n appointmentOptions?.columns,\n values.appointmentInfo.columnOption,\n validateField\n ]);\n};\n\nexport default useFilterAppointmentOptions;\n","import React, {\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { AppointmentRequestSettings, OnlineBookingFormData, OnlineBookingState } from './model';\nimport { State } from 'src/module/FormKit/model';\nimport { useFormik } from 'formik';\nimport { validationSchema } from './validation';\nimport { ApiPracticeInfo, Client, Openings, Patient, Request } from 'src/interfaces';\nimport { BOOKING_STEPS } from './helpers';\nimport { useMutation, useQuery } from 'react-query';\nimport useOnDemandPoll from './useOnDemandPoll';\nimport {\n ClientPatientSearchParams,\n QueryKeys,\n clientUnauthenticatedSearch,\n getPatients\n} from 'src/api';\nimport useAppointmentOptions from 'src/hooks/useAppointmentOptions';\nimport { generateSubmissionValues, getInitialValues, isClientMatch } from './helper';\nimport { DiscardChangesModal } from 'src/components';\nimport { isDefinedOrThrowServerError, isPatientActive, queryClient } from 'src/utils';\nimport mapClientPatientSearch from './helpers/mapClientPatientSearch';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\nimport { endpoint, TRACKING_EVENTS } from 'src/constants';\nimport useFilterAppointmentOptions from './helpers/useFilterAppointmentOptions';\nimport { useTrackVisit } from 'src/hooks';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useTranslation } from 'react-i18next';\n\nconst BookingContext = createContext(undefined);\n\nexport const useBookingState = () => {\n const context = useContext(BookingContext);\n if (context === undefined) {\n throw new Error('useBookingState must be used within a BookingStateProvider');\n }\n return context;\n};\n\nexport const BookingStateConsumer = BookingContext.Consumer;\n\ninterface BookingProviderProps extends PropsWithChildren {\n practiceInfo: ApiPracticeInfo;\n user: Client | undefined;\n requestSetting: AppointmentRequestSettings;\n patient: Patient | undefined;\n}\n\nexport const BookingProvider: React.FC = ({\n practiceInfo,\n children,\n user,\n requestSetting,\n patient\n}) => {\n const { t } = useTranslation();\n const { isLoggedIn } = useAuth();\n const [isAnotherAppointment, setIsAnotherAppointment] = useState(false);\n const { data: visitData, trackEvent } = useTrackVisit({\n initialEventName: TRACKING_EVENTS.APPOINTMENT_REQUEST_PAGE,\n practiceId: practiceInfo.practiceId,\n sourceId: practiceInfo.sourceId,\n clientId: user?.clientId\n });\n\n const [state, setState] = useState>({\n current: BOOKING_STEPS.CLIENT_INFO,\n visited: { [BOOKING_STEPS.CLIENT_INFO]: true }\n });\n\n const currentStep = state.current;\n\n const appointmentOptions = useAppointmentOptions(practiceInfo.practiceId);\n const [lastSubmittedValues, setLastSubmittedValues] = useState<\n Partial | undefined\n >();\n const initialValues = useMemo(\n () =>\n getInitialValues(\n user,\n appointmentOptions.data,\n patient,\n lastSubmittedValues,\n isAnotherAppointment\n ),\n [user, appointmentOptions.data, patient, lastSubmittedValues, isAnotherAppointment]\n );\n\n const formik = useFormik({\n initialValues,\n validateOnChange: false,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values, { setFieldValue }) => {\n trackEvent(TRACKING_EVENTS.APPOINTMENT_REQUEST_SUBMITTED);\n const submissionData = generateSubmissionValues(practiceInfo, values, visitData);\n const response = await unauthenticatedApiClient.post(endpoint('REQUESTS'), {\n request: submissionData\n });\n const data = isDefinedOrThrowServerError(response.data);\n await setFieldValue('requestId', data.id);\n setLastSubmittedValues({ ...values, requestId: data.id });\n queryClient.setQueryData([QueryKeys.REQUESTS, data.id], data);\n }\n });\n\n const { setFieldValue, submitForm, resetForm, values, dirty, validateField, validateForm } =\n formik;\n\n const { onDemandReady } = useOnDemandPoll(practiceInfo);\n\n const { mutateAsync, ...clientPatientQuery } = useMutation({\n mutationFn: async (args: ClientPatientSearchParams) => {\n if (\n user &&\n isLoggedIn &&\n isClientMatch({ practiceInfo, clientInfo: values.clientInfo, user })\n ) {\n if (user.patients) {\n return { ...user, patients: user.patients.filter(isPatientActive) };\n }\n const patientData = await queryClient.fetchQuery([QueryKeys.PATIENT], {\n queryFn: getPatients\n });\n const data = mapClientPatientSearch({\n patients: patientData.filter(isPatientActive),\n clientId: user?.clientId\n });\n return data;\n }\n const data = await clientUnauthenticatedSearch(args);\n return mapClientPatientSearch(data);\n }\n });\n useEffect(() => {\n if (clientPatientQuery.isSuccess) {\n void setFieldValue('clientInfo.clientId', clientPatientQuery.data?.clientId);\n }\n }, [clientPatientQuery.data?.clientId, clientPatientQuery.isSuccess, setFieldValue]);\n\n useEffect(() => {\n if (initialValues.clientInfo.emailAddress) {\n void mutateAsync({\n email: initialValues.clientInfo.emailAddress,\n practiceId: practiceInfo.practiceId,\n phoneNumber: initialValues.clientInfo.phoneNumber\n });\n }\n }, [\n mutateAsync,\n initialValues.clientInfo.emailAddress,\n practiceInfo.practiceId,\n initialValues.clientInfo.phoneNumber\n ]);\n\n const openingsQuery = useQuery({\n queryFn: async () => {\n await queryClient.invalidateQueries([\n QueryKeys.REQUEST_SETTING,\n practiceInfo?.practiceId,\n 'online-booking'\n ]);\n const response = await unauthenticatedApiClient.get(\n endpoint('SCHEDULE_OPENINGS', {\n practiceId: practiceInfo.practiceId\n }),\n {\n params: {\n appointment_type_id: values.appointmentInfo.appointmentOption?.value,\n category_id: values.appointmentInfo.columnOption?.categoryId\n }\n }\n );\n\n return isDefinedOrThrowServerError(response.data);\n },\n queryKey: [\n QueryKeys.SCHEDULE_OPENINGS,\n values.appointmentInfo.appointmentOption?.value,\n values.appointmentInfo.columnOption?.categoryId\n ],\n suspense: false,\n enabled: onDemandReady && !!state.visited[BOOKING_STEPS.SELECT_APPOINTMENT]\n });\n\n const advance = useCallback(async () => {\n if (currentStep === BOOKING_STEPS.CONFIRMATION) {\n void submitForm();\n }\n setState((prev) => {\n if (prev.current === BOOKING_STEPS.STATUS) return prev;\n let next: BOOKING_STEPS = prev.current + 1;\n if (next === BOOKING_STEPS.NOTIFICATION_SETTINGS && isAnotherAppointment) {\n prev.visited[next] = true;\n next += 1;\n }\n prev.current = next;\n prev.visited[next] = true;\n return { ...prev };\n });\n }, [currentStep, isAnotherAppointment, submitForm]);\n\n const goBack = useCallback(() => {\n setState(({ visited, current }) => ({ visited, current: current - 1 }));\n }, []);\n\n const goToStep = useCallback((step: BOOKING_STEPS) => {\n setState((prev) => {\n prev.current = step;\n prev.visited[step] = true;\n return { ...prev };\n });\n }, []);\n\n const bookAnotherAppointment = useCallback(async () => {\n const { clientInfo, notificationSettings } = lastSubmittedValues ?? {};\n\n setState({\n current: BOOKING_STEPS.PATIENT_INFO,\n visited: { [BOOKING_STEPS.CLIENT_INFO]: true, [BOOKING_STEPS.PATIENT_INFO]: true }\n });\n\n setLastSubmittedValues(undefined);\n setIsAnotherAppointment(true);\n resetForm();\n\n return new Promise((resolve) => {\n setTimeout(async () => {\n await Promise.all([\n queryClient.invalidateQueries([QueryKeys.SCHEDULE_OPENINGS]),\n queryClient.invalidateQueries([QueryKeys.ON_DEMAND_SYNC, practiceInfo.practiceId]),\n setFieldValue('clientInfo', { ...clientInfo }),\n setFieldValue('notificationSettings', { ...notificationSettings })\n ]);\n resolve();\n }, 0);\n });\n }, [lastSubmittedValues, practiceInfo.practiceId, resetForm, setFieldValue]);\n\n useFilterAppointmentOptions({\n openingsQuery,\n appointmentOptions,\n setFieldValue,\n validateField,\n practiceInfo,\n values\n });\n\n useEffect(() => {\n if (currentStep === BOOKING_STEPS.CONFIRMATION) {\n void validateForm();\n }\n }, [currentStep, validateForm]);\n\n const userFound = !!clientPatientQuery.data?.clientId || !!user;\n useEffect(() => {\n if (userFound) {\n trackEvent(TRACKING_EVENTS.APPOINTMENT_REQUEST_PAGE_CLIENT_FOUND);\n }\n }, [trackEvent, userFound]);\n\n if (!requestSetting || !appointmentOptions) {\n return null;\n }\n\n return (\n \n {children}\n \n \n );\n};\n","import { ApiPracticeInfo } from 'src/interfaces';\nimport { AppColors } from 'src/types/paper';\nimport { AppointmentRequestSettings, OnlineBookingFormData } from '../../BookingProvider/model';\nimport { FormikErrors } from 'formik';\n\nexport enum SUBMISSION_STATE {\n SUBMITTING = 'SUBMITTING',\n\n MANUAL = 'MANUAL',\n PENDING = 'PENDING',\n SCHEDULED = 'SCHEDULED',\n\n UNAVAILABLE = 'UNAVAILABLE',\n INVALID = 'INVALID'\n}\n\nexport enum WRITEBACK_STATUS {\n SUCCESS = 'success',\n FAILURE = 'failure',\n INVALID = 'invalid',\n MANUAL = 'manual_entry_required',\n PENDING = 'pending'\n}\n\nexport interface RequestStatus {\n id: number;\n writeback_status: WRITEBACK_STATUS;\n}\n\nexport const getNextState = ({\n isSubmitting,\n isError,\n data,\n values,\n practiceInfo,\n errors\n}: {\n isSubmitting: boolean;\n isError: boolean;\n data: RequestStatus | undefined;\n values: Partial;\n practiceInfo: ApiPracticeInfo;\n errors: FormikErrors;\n}): SUBMISSION_STATE => {\n if (isError || (!isSubmitting && !values.requestId)) return SUBMISSION_STATE.INVALID;\n if (isSubmitting || (practiceInfo.onlineBooking && !data)) return SUBMISSION_STATE.SUBMITTING;\n if (data?.writeback_status === WRITEBACK_STATUS.INVALID) return SUBMISSION_STATE.INVALID;\n if (data?.writeback_status === WRITEBACK_STATUS.FAILURE) {\n if (errors.appointmentInfo) return SUBMISSION_STATE.UNAVAILABLE;\n return SUBMISSION_STATE.INVALID;\n }\n if (!values.clientInfo?.clientId || !values.patientInfo?.patientId || !practiceInfo.onlineBooking)\n return SUBMISSION_STATE.MANUAL;\n if (data?.writeback_status === WRITEBACK_STATUS.SUCCESS) return SUBMISSION_STATE.SCHEDULED;\n return SUBMISSION_STATE.PENDING;\n};\n\nexport const isFinalState = (status?: WRITEBACK_STATUS) => {\n if (!status) return false;\n return [WRITEBACK_STATUS.SUCCESS, WRITEBACK_STATUS.FAILURE, WRITEBACK_STATUS.INVALID].includes(\n status\n );\n};\n\nexport const switchColor = (state: SUBMISSION_STATE, colors: AppColors) => {\n switch (state) {\n case SUBMISSION_STATE.SUBMITTING:\n return colors.warn;\n case SUBMISSION_STATE.UNAVAILABLE:\n case SUBMISSION_STATE.INVALID:\n return colors.error;\n default:\n return colors.primary;\n }\n};\n\nexport const switchProgress = (state: SUBMISSION_STATE) => {\n switch (state) {\n case SUBMISSION_STATE.PENDING:\n case SUBMISSION_STATE.SUBMITTING:\n return undefined;\n case SUBMISSION_STATE.UNAVAILABLE:\n case SUBMISSION_STATE.INVALID:\n return 0;\n case SUBMISSION_STATE.MANUAL:\n case SUBMISSION_STATE.SCHEDULED:\n return 1;\n }\n};\n\nexport const getPracticeText = (\n state: SUBMISSION_STATE,\n requestSetting: AppointmentRequestSettings\n) => {\n switch (state) {\n case SUBMISSION_STATE.SCHEDULED:\n return requestSetting.onlineBookingConfirmationText;\n case SUBMISSION_STATE.MANUAL:\n return requestSetting.confirmationText;\n default:\n return undefined;\n }\n};\n","import React, { memo } from 'react';\nimport { AlertCircle, Clock } from 'react-native-feather';\nimport { SvgProps } from 'react-native-svg';\nimport { Calendar } from 'src/components/kit/ABIcons';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { SUBMISSION_STATE } from './helper';\n\ninterface Props extends SvgProps {\n state: SUBMISSION_STATE;\n}\n\nconst BookingStateIcon: React.FC = ({ state, ...props }) => {\n switch (state) {\n case SUBMISSION_STATE.SUBMITTING:\n case SUBMISSION_STATE.PENDING:\n return ;\n case SUBMISSION_STATE.UNAVAILABLE:\n case SUBMISSION_STATE.INVALID:\n return ;\n case SUBMISSION_STATE.SCHEDULED:\n return ;\n case SUBMISSION_STATE.MANUAL:\n return ;\n }\n};\n\nexport default memo(BookingStateIcon);\n","import { debounce } from 'lodash';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport { Body, Headline, HoverButton, HoverCard, MiniHeroIcon } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { INTL_PHONE_MASK, Margin, PHONE_MASK, endpoint } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { ConfirmationSection, FormScrollView } from 'src/module/FormKit/components';\nimport { useTranslation } from 'react-i18next';\nimport { useQuery } from 'react-query';\nimport { QueryKeys } from 'src/api';\nimport { isDefinedOrThrowServerError, queryClient } from 'src/utils';\nimport { BOOKING_STEPS, CONFIRMATION_SECTIONS } from '../../BookingProvider/helpers';\nimport { ProgressBar } from 'react-native-paper';\nimport { LayoutAnimation } from 'react-native';\nimport Confetti from 'src/scenes/ToDos/ToDoList/components/Confetti';\nimport RichTextRenderer from 'src/components/PracticeTextRenderer';\nimport BookingStateIcon from './BookingStateIcon';\nimport moment from 'moment-timezone';\nimport { SvgProps } from 'react-native-svg';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\nimport { mask } from 'react-native-mask-text';\nimport {\n isFinalState,\n getNextState,\n switchColor,\n switchProgress,\n getPracticeText,\n WRITEBACK_STATUS,\n RequestStatus,\n SUBMISSION_STATE\n} from './helper';\nimport { OnlineBookingState } from '../../BookingProvider/model';\n\nconst REFETCH_INTERVAL = moment.duration(5, 'seconds').asMilliseconds();\nconst MIN_STATE_DURATION = moment.duration(1, 'seconds').asMilliseconds();\n\nconst BookingStatus: React.FC = (props) => {\n const {\n values,\n errors,\n practiceInfo,\n goToStep,\n isSubmitting,\n requestSetting,\n setFieldValue,\n openingsQuery,\n validateField,\n bookAnotherAppointment\n } = props;\n const { colors } = useAppTheme();\n const { t } = useTranslation('onlineBooking');\n\n const { data, isError: isApiError } = useQuery({\n queryKey: [QueryKeys.WRITEBACK_STATUS, values.requestId],\n queryFn: async () => {\n const response = await unauthenticatedApiClient.get(\n endpoint('REQUEST_STATUS'),\n {\n params: {\n request_id: values.requestId\n }\n }\n );\n const data = isDefinedOrThrowServerError(response?.data);\n\n if (data.writeback_status === WRITEBACK_STATUS.FAILURE) {\n await openingsQuery.refetch();\n await validateField('appointmentInfo');\n }\n\n return data;\n },\n enabled: !isSubmitting && !!values.requestId && practiceInfo.onlineBooking,\n refetchInterval: (data) => (isFinalState(data?.writeback_status) ? false : REFETCH_INTERVAL)\n });\n\n const [state, setStringsKey] = React.useState(SUBMISSION_STATE.SUBMITTING);\n\n const setNextState = useMemo(\n () =>\n debounce(\n (state: SUBMISSION_STATE) =>\n setStringsKey((prev) => {\n if (prev === state) return prev;\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n return state;\n }),\n MIN_STATE_DURATION,\n {\n leading: false,\n trailing: true\n }\n ),\n []\n );\n\n useEffect(() => {\n const nextState = getNextState({\n isSubmitting,\n errors,\n isError: isApiError,\n data,\n values,\n practiceInfo\n });\n if (state !== nextState) {\n setNextState(nextState);\n }\n }, [\n errors,\n data,\n isApiError,\n isSubmitting,\n setNextState,\n values,\n values.clientInfo.clientId,\n state,\n practiceInfo\n ]);\n\n const isSchedulingError = state === SUBMISSION_STATE.UNAVAILABLE;\n const isError = isApiError || isSchedulingError || state === SUBMISSION_STATE.INVALID;\n const Icon = useCallback(\n (props: SvgProps) => ,\n [state]\n );\n\n return (\n \n {state === SUBMISSION_STATE.SCHEDULED && }\n \n \n {t(`status.${state}.title`)}\n\n \n\n \n {t(`status.${state}.description`, {\n email: values.clientInfo.emailAddress,\n phone: mask(practiceInfo.phoneNumber, [PHONE_MASK, INTL_PHONE_MASK])\n })}\n \n }\n >\n {getPracticeText(state, requestSetting)}\n \n\n {isSchedulingError && data?.writeback_status === WRITEBACK_STATUS.FAILURE && (\n {\n await setFieldValue('requestId', undefined);\n await queryClient.invalidateQueries([QueryKeys.ON_DEMAND_SYNC]);\n await queryClient.invalidateQueries([QueryKeys.ON_DEMAND_STATUS]);\n await queryClient.invalidateQueries([QueryKeys.SCHEDULE_OPENINGS]);\n goToStep(BOOKING_STEPS.SELECT_APPOINTMENT);\n }}\n >\n {t(`status.UNAVAILABLE.retry`)}\n \n )}\n \n \n {state !== SUBMISSION_STATE.SUBMITTING && !isError && (\n \n {t(`status.bookAnotherAppointment`)}\n \n )}\n \n );\n};\n\nexport default BookingStatus;\n\nconst StyledCard = styled(HoverCard)`\n padding: ${Margin.ExtraLarge}px;\n gap: ${Margin.Large}px;\n`;\n\nconst CenteredText = styled(Body)`\n text-align: center;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst StyledConfetti = styled(Confetti).attrs({\n preserveAspectRatio: 'xMidYMid slice'\n})`\n position: absolute;\n width: 100%;\n bottom: 0px;\n left: 0px;\n`;\n","import { Openings } from 'src/interfaces';\nimport moment from 'moment-timezone';\n\nconst enumerateDaysBetweenDates = (startDate: Date, endDate: Date) => {\n const dates = [];\n\n const currDate = moment(startDate).startOf('day');\n const lastDate = moment(endDate).startOf('day');\n\n while (currDate.diff(lastDate) <= 0) {\n dates.push(currDate.clone().format('YYYY-MM-DD'));\n currDate.add(1, 'days');\n }\n\n return dates;\n};\n\nexport const findUnavailableDates = (\n openings: Openings | undefined,\n minDays: number | undefined,\n maxDays: number | undefined\n) => {\n const allDates = enumerateDaysBetweenDates(\n moment().startOf('day').add(minDays, 'days').toDate(),\n moment().startOf('day').add(maxDays, 'days').toDate()\n );\n\n if (!openings) {\n return allDates.map((x) => moment(x).startOf('day').toDate());\n }\n\n const available = Object.keys(openings).map((d: any) =>\n moment(d).startOf('day').format('YYYY-MM-DD')\n );\n\n const result = allDates\n .filter((x) => !available.includes(x))\n .map((x) => moment(x).startOf('day').toDate());\n\n return result;\n};\n\nexport const datePickerValueFromString = (date?: string): Date | undefined => {\n return date\n ? new Date(new Date(date).getTime() + Math.abs(new Date(date).getTimezoneOffset() * 60000))\n : undefined;\n};\n","import { Moment, tz } from 'moment-timezone';\nimport React, { useMemo } from 'react';\nimport { Body, Caption } from 'src/components';\nimport { Margin } from 'src/constants';\nimport { toLocalTime } from 'src/utils';\nimport styled from 'styled-components/native';\n\ninterface Props {\n time: Moment;\n practiceTimeZone?: string;\n}\nconst CustomLabel: React.FC = ({ time, practiceTimeZone }) => {\n const timeString = useMemo(() => toLocalTime(time, practiceTimeZone), [practiceTimeZone, time]);\n\n const isLocal = useMemo(() => {\n return tz.guess() === practiceTimeZone;\n }, [practiceTimeZone]);\n\n const localTimeString = useMemo(() => toLocalTime(time), [time]);\n\n return (\n \n {timeString}\n {!isLocal && {localTimeString}}\n \n );\n};\n\nexport default CustomLabel;\n\nconst Container = styled.View`\n gap: ${Margin.Small}px;\n justify-content: center;\n flex-grow: 1;\n`;\n","import React from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\n\nimport styled from 'styled-components/native';\nimport AnimalIcon from './Icons/Animal';\n\ninterface Props {\n color: string;\n size: number;\n species?: string;\n}\n\nconst AnimalLoader: React.FC = ({ color, size, species }) => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default AnimalLoader;\n\nconst AnimalContainer = styled.View`\n align-items: center;\n align-self: center;\n`;\n\nconst IconContainer = styled.View`\n position: absolute;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n`;\n","import LottieView from 'lottie-react-native';\nimport { useMemo } from 'react';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { Body } from 'src/components';\nimport AnimalLoader from 'src/components/AnimalLoader';\nimport { Species, IconSize, Margin, MOBILE_WIDTH_SMALL } from 'src/constants';\nimport { lottieWholeColorReplace } from 'src/utils/lottie';\nimport styled from 'styled-components/native';\nimport LoadingAnimation from '../assets/loading_animation.json';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useTranslation } from 'react-i18next';\nimport { OnlineBookingState } from '../BookingProvider/model';\n\nconst AppointmentLoader: React.FC = ({\n practiceInfo: { appointmentBooking }\n}) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('onlineBooking');\n\n const animationColorReplaced = useMemo(() => {\n return lottieWholeColorReplace(LoadingAnimation, colors.primary);\n }, [colors.primary]);\n\n const showDogAndCatLoader = appointmentBooking?.loader === 'dog_and_cat';\n const showAnimalLoader = Object.values(Species).includes(appointmentBooking?.loader as Species);\n const showEmptyLoader = !showDogAndCatLoader && !showAnimalLoader;\n return (\n \n {showDogAndCatLoader && (\n \n )}\n {showAnimalLoader && (\n \n )}\n {showEmptyLoader && }\n {t('selectAppointment.loading')}\n \n );\n};\n\nexport default AppointmentLoader;\n\nconst LoadingContainer = styled.View`\n flex: 1;\n justify-content: center;\n align-items: center;\n align-self: center;\n gap: ${Margin.Large}px;\n max-width: ${MOBILE_WIDTH_SMALL}px;\n`;\n\nconst CenteredText = styled(Body)`\n color: ${({ theme }) => theme.colors.onSurface};\n text-align: center;\n`;\n","import Color from 'color';\nimport { cloneDeep } from 'lodash';\nimport { AnimationObject } from 'lottie-react-native';\n\nexport type ColorParam = Color | string | ArrayLike | number | { [key: string]: any };\n\nexport const lottieWholeColorReplace = (lottieData: AnimationObject, color: ColorParam) => {\n const cloned = cloneDeep(lottieData);\n cloned.assets.forEach((asset) => {\n asset.layers.forEach((layer: { shapes: any[] }) => {\n layer.shapes.forEach((shape) => {\n shape.it.forEach((item: { c: { k: number[] } }) => {\n if (item.c) {\n item.c.k = Color(color)\n .rgb()\n .array()\n .map((c) => c / 255);\n }\n });\n });\n });\n });\n return cloned;\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n ContentContainer,\n InputContainer,\n MainText,\n Row,\n FormScrollView\n} from 'src/module/FormKit/components/shared';\nimport { DatePicker, DropDown, Headline, HoverButton } from 'src/components';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport { datePickerValueFromString, findUnavailableDates } from './helpers';\nimport { isDefined, toLocalTime } from 'src/utils';\nimport CustomLabel from 'src/scenes/AppointmentRequest/CustomLabel';\nimport Toast from 'react-native-toast-message';\nimport { omit } from 'lodash';\nimport { AppointmentOption, ColumnOption } from 'src/hooks/useAppointmentOptions';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { ActivityIndicator } from 'react-native-paper';\nimport AppointmentLoader from '../AppointmentLoader';\nimport { OnlineBookingState } from '../../BookingProvider/model';\nimport { getIn } from 'formik';\n\nconst SelectAppointment: React.FC = ({\n values,\n practiceInfo: { timeZone },\n appointmentOptions: { data: { appointment, fieldDisplay } = {} },\n openingsQuery: { data: openings, isFetched, isFetching },\n errors,\n setFieldValue,\n validateField\n}) => {\n const { colors } = useAppTheme();\n const { t } = useTranslation('onlineBooking');\n const unavailableDates = useMemo(\n () => findUnavailableDates(openings, fieldDisplay?.minDays, fieldDisplay?.maxDays),\n [openings, fieldDisplay]\n );\n const openingsAllowed = isFetched && !!openings;\n\n return (\n \n \n {t('selectAppointment.title')}\n {t('selectAppointment.description')}\n \n\n {(values.appointmentInfo.useAppointmentTypes ||\n values.appointmentInfo.allowCategorySelection) && (\n \n {values.appointmentInfo.useAppointmentTypes && (\n \n \n label={t('form.appointmentOption')}\n labelTransform={(option) => t(option.label)}\n options={appointment ?? []}\n value={values.appointmentInfo.appointmentOption?.value}\n onChange={async (selected) => {\n const appointmentOption = appointment?.find(\n (a: AppointmentOption) => a.value === selected\n );\n await setFieldValue('appointmentInfo.appointmentOption', appointmentOption);\n await validateField('appointmentInfo.appointmentOption');\n if (values.appointmentInfo?.columnOption) {\n void validateField('appointmentInfo.columnOption');\n }\n if (values.appointmentInfo?.preferredDate) {\n void validateField('appointmentInfo.preferredDate');\n }\n if (values.appointmentInfo?.preferredTime) {\n void validateField('appointmentInfo.preferredTime');\n }\n }}\n error={!!getIn(errors, 'appointmentInfo.appointmentOption')}\n msg={t(getIn(errors, 'appointmentInfo.appointmentOption'))}\n />\n \n )}\n {values.appointmentInfo.allowCategorySelection && (\n \n \n label={t('form.columnOption')}\n options={values.appointmentInfo?.availableColumns ?? []}\n disabled={\n !!getIn(errors, 'appointmentInfo.appointmentOption') ||\n (!values.appointmentInfo?.appointmentOption &&\n values.appointmentInfo.useAppointmentTypes)\n }\n value={values.appointmentInfo.columnOption?.value}\n labelTransform={(option) => t(option.label)}\n onChange={async (option) => {\n if (!values.appointmentInfo?.availableColumns) {\n return;\n }\n const column = values.appointmentInfo?.availableColumns.find(\n (c: ColumnOption) => c.value === option\n );\n if (column?.value === 'No Preference') {\n await setFieldValue('appointmentInfo.columnOption', omit(column, 'categoryId'));\n } else if (values.appointmentInfo?.useAppointmentTypes) {\n await setFieldValue(\n 'appointmentInfo.columnOption',\n omit(column, 'appointmentLength')\n );\n } else {\n await setFieldValue('appointmentInfo.columnOption', column);\n }\n await validateField('appointmentInfo.columnOption');\n if (values.appointmentInfo?.preferredDate) {\n void validateField('appointmentInfo.preferredDate');\n }\n if (values.appointmentInfo?.preferredTime) {\n void validateField('appointmentInfo.preferredTime');\n }\n }}\n error={!!errors?.appointmentInfo?.columnOption}\n msg={t(errors?.appointmentInfo?.columnOption ?? '', {\n type: values.appointmentInfo?.appointmentOption?.label,\n category: t(values.appointmentInfo.columnOption?.label ?? '')\n })}\n />\n \n )}\n \n )}\n \n \n {\n if (!openings) {\n Toast.show({\n type: 'error',\n text1: t('selectAppointment.noneAvailable')\n });\n return;\n }\n const firstDay = Object.keys(openings).sort()?.[0];\n const firstTime = openings[firstDay]?.[0];\n if (\n firstDay === values.appointmentInfo.preferredDate &&\n firstTime === values.appointmentInfo.preferredTime\n ) {\n Toast.show({\n type: 'info',\n text1: t('selectAppointment.nextAlreadySelected')\n });\n } else if (firstDay && firstTime) {\n Toast.show({\n type: 'success',\n text1: t('selectAppointment.nextSelected')\n });\n await setFieldValue('appointmentInfo.preferredDate', firstDay);\n await setFieldValue('appointmentInfo.preferredTime', firstTime);\n }\n await validateField('appointmentInfo.preferredDate');\n await validateField('appointmentInfo.preferredTime');\n }}\n >\n {t('selectAppointment.nextAvailable')}\n \n \n \n {\n if (!date) {\n await setFieldValue('appointmentInfo.preferredDate', undefined);\n } else {\n await setFieldValue(\n 'appointmentInfo.preferredDate',\n moment(date).format('YYYY-MM-DD')\n );\n }\n await validateField('appointmentInfo.preferredDate');\n }}\n />\n \n \n {\n if (!value || !values.appointmentInfo.preferredDate) {\n return undefined;\n }\n const date = moment.tz(\n `${values.appointmentInfo.preferredDate} ${value}`,\n timeZone\n );\n return {\n value,\n label: toLocalTime(date, timeZone),\n custom: \n };\n })\n .filter(isDefined) ?? []\n }\n value={values.appointmentInfo.preferredTime}\n onChange={async (preferredTime) => {\n await setFieldValue('appointmentInfo.preferredTime', preferredTime);\n await validateField('appointmentInfo.preferredTime');\n }}\n error={!!errors?.appointmentInfo?.preferredTime}\n msg={t(getIn(errors, 'appointmentInfo.preferredTime'))}\n />\n \n {isFetching && (\n \n )}\n \n \n );\n};\nconst SelectAppointmentWrapper: React.FC = (props) => {\n const {\n onDemandReady,\n appointmentOptions,\n openingsQuery: { isFetched }\n } = props;\n\n const [hasLoadedOnce, setHasLoadedOnce] = useState(false);\n useEffect(() => {\n if (isFetched) {\n setHasLoadedOnce(true);\n }\n }, [isFetched]);\n\n if (!hasLoadedOnce || !onDemandReady || !appointmentOptions) {\n return ;\n }\n\n return ;\n};\n\nexport default SelectAppointmentWrapper;\n","import { BOOKING_STEPS } from './enums';\nimport { OnlineBookingFormData, OnlineBookingState } from '../model';\nimport { appointmentSchema, validationSchema } from '../validation';\nimport {\n additionalInfoSchema,\n clientSchema,\n notificationSchema,\n patientSchema\n} from 'src/module/FormKit/validators';\nimport BookingStatus from '../../components/BookingStatus';\nimport SelectAppointment from '../../components/SelectAppointment';\nimport {\n Confirmation,\n ClientInformation,\n PatientInfo,\n NotificationSettings,\n AdditionalInfo\n} from 'src/module/FormKit/components';\nimport { StepInfo } from 'src/module/FormKit/model';\n\nconst STEP_INFO: StepInfo = {\n [BOOKING_STEPS.CLIENT_INFO]: {\n title: 'section.clientInfo',\n field: 'clientInfo',\n validator: (data) => clientSchema.isValidSync(data.clientInfo),\n key: BOOKING_STEPS.CLIENT_INFO,\n component: ClientInformation\n },\n [BOOKING_STEPS.PATIENT_INFO]: {\n title: 'section.patientInfo',\n field: 'patientInfo',\n validator: (data) => patientSchema.isValidSync(data.patientInfo),\n key: BOOKING_STEPS.PATIENT_INFO,\n component: PatientInfo\n },\n [BOOKING_STEPS.NOTIFICATION_SETTINGS]: {\n title: 'section.notificationSettings',\n field: 'notificationSettings',\n validator: (data) => notificationSchema.isValidSync(data.notificationSettings),\n key: BOOKING_STEPS.NOTIFICATION_SETTINGS,\n component: NotificationSettings\n },\n [BOOKING_STEPS.ADDITIONAL_INFO]: {\n title: 'section.additionalInfo',\n field: 'additionalInfo',\n validator: (data) => additionalInfoSchema.isValidSync(data.additionalInfo),\n key: BOOKING_STEPS.ADDITIONAL_INFO,\n component: AdditionalInfo\n },\n [BOOKING_STEPS.SELECT_APPOINTMENT]: {\n title: 'section.selectAppointment',\n field: 'appointmentInfo',\n validator: (data) => appointmentSchema.isValidSync(data.appointmentInfo),\n key: BOOKING_STEPS.SELECT_APPOINTMENT,\n component: SelectAppointment\n },\n [BOOKING_STEPS.CONFIRMATION]: {\n title: 'section.confirmation',\n field: null,\n validator: (data) => validationSchema.isValidSync(data),\n key: BOOKING_STEPS.CONFIRMATION,\n component: Confirmation\n },\n [BOOKING_STEPS.STATUS]: {\n title: 'section.status',\n field: null,\n validator: () => true,\n key: BOOKING_STEPS.STATUS,\n component: BookingStatus\n }\n};\n\nexport default STEP_INFO;\n","import React, { useCallback, useMemo } from 'react';\nimport { useBookingState } from '../BookingProvider';\nimport LayoutController from 'src/module/FormKit/components/LayoutController';\nimport { BOOKING_STEPS, CONFIRMATION_SECTIONS } from '../BookingProvider/helpers';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { useTranslation } from 'react-i18next';\nimport useGoBack from 'src/hooks/useGoBack';\nimport _ from 'lodash';\nimport STEP_INFO from '../BookingProvider/helpers/stepInfo';\nimport { getIn } from 'formik';\n\nconst OBLayoutController: React.FC = () => {\n const { t } = useTranslation();\n const exit = useGoBack();\n\n const bookingStateResult = useBookingState();\n const {\n practiceInfo,\n state: bookingState,\n errors,\n isSubmitting,\n values,\n goToStep,\n advance,\n goBack\n } = bookingStateResult;\n\n const { isLoggedIn } = useAuth();\n\n const hasCompleted = !!bookingState.visited[BOOKING_STEPS.CONFIRMATION];\n\n const currentStepInfo = useMemo(() => STEP_INFO[bookingState.current], [bookingState]);\n\n const disableTabNav =\n !!getIn(errors, 'additionalInfo.images') ||\n isSubmitting ||\n bookingState.current === BOOKING_STEPS.STATUS;\n const disableNav = !currentStepInfo?.validator?.(values) || disableTabNav;\n\n const canExit = [BOOKING_STEPS.STATUS, BOOKING_STEPS.CLIENT_INFO].includes(bookingState.current);\n\n const showReturnToConfirmation =\n hasCompleted &&\n ![BOOKING_STEPS.CONFIRMATION, BOOKING_STEPS.STATUS].includes(bookingState.current);\n\n const showReturnToPetPage = bookingState.current === BOOKING_STEPS.STATUS && !!isLoggedIn;\n\n const goToConfirmation = useCallback(() => {\n goToStep(BOOKING_STEPS.CONFIRMATION);\n }, [goToStep]);\n\n const errorMessage = useMemo(() => {\n if (getIn(errors, 'clientInfo.acceptConditions')) {\n return t(`onlineBooking:${String(getIn(errors, 'clientInfo.acceptConditions'))}`);\n }\n if (getIn(errors, 'additionalInfo.images')) {\n return getIn(errors, 'additionalInfo.images');\n }\n }, [errors, t]);\n\n const { bottomButtonText, bottomButtonAction } = useMemo(() => {\n if (bookingState.current === BOOKING_STEPS.STATUS) {\n return {\n bottomButtonText: t('onlineBooking:returnToPetPage'),\n bottomButtonAction: exit\n };\n } else if (bookingState.current === BOOKING_STEPS.CONFIRMATION) {\n return {\n bottomButtonText: t('submit'),\n bottomButtonAction: advance\n };\n } else {\n return {\n bottomButtonText: hasCompleted ? t('onlineBooking:confirmation.return') : t('continue'),\n bottomButtonAction: hasCompleted ? goToConfirmation : advance\n };\n }\n }, [advance, bookingState, exit, goToConfirmation, hasCompleted, t]);\n\n const validationResults = useMemo(\n () =>\n _(STEP_INFO)\n .mapValues((info) => info.validator(values))\n .value(),\n [values]\n );\n const Component = STEP_INFO[bookingState.current]?.component;\n\n return (\n \n \n \n );\n};\n\nexport default OBLayoutController;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React from 'react';\nimport { useQuery } from 'react-query';\nimport { practiceOptions } from 'src/hooks/react-query/usePractice';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { BookingProvider } from './BookingProvider';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { getPatient, QueryKeys } from 'src/api';\nimport PracticeNotFound from 'src/module/FormKit/components/PracticeNotFound';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\nimport { endpoint } from 'src/constants';\nimport { Client, Patient } from 'src/interfaces';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { getAppointmentRequestSettings } from './BookingProvider/helper';\nimport Practice from 'src/interfaces/api/Practice';\nimport OBLayoutController from './components/OBLayoutController';\nimport GoogleAnalytics from 'src/providers/GoogleTagManager';\nimport { usePracticeInfo } from 'src/hooks';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\n\nconst PLACEHOLDER_TOKEN_DATA = {\n practice: undefined,\n client: undefined,\n patient: undefined\n};\n\nconst OnlineBooking: React.FC<\n NativeStackScreenProps\n> = ({ route, navigation }) => {\n const { _user } = useAuth();\n const { colors } = useAppTheme();\n const practiceName = route.params?.practice;\n const patientId = route.params?.patientId;\n const token = route.params?.token;\n const { t } = useTranslation('onlineBooking');\n useQuery({\n ...practiceOptions(_user?.practiceId),\n onSuccess: (data) => {\n navigation.setParams({ practice: data.shortName });\n },\n\n enabled: !practiceName && !!_user && !token\n });\n\n const {\n data: { client, patient } = PLACEHOLDER_TOKEN_DATA,\n isError: autoFillError,\n isFetched: isTokenDataFetched\n } = useQuery({\n queryKey: [QueryKeys.AUTOFILL_APT, token],\n queryFn: async () => {\n const response = await unauthenticatedApiClient.get<{\n practice: Practice;\n client: Client;\n patient: Patient;\n }>(endpoint('AUTO_FILL_TOKEN', { token }), { params: { type: 'autofill' } });\n const data = isDefinedOrThrowServerError(response.data);\n navigation.setParams({ practice: data.practice.shortName });\n return data;\n },\n onError: () => {\n Toast.show({\n type: 'error',\n text1: t('errors.tokenExpired'),\n text2: t('errors.tokenExpiredDesc')\n });\n },\n cacheTime: Infinity,\n staleTime: 0,\n enabled: !!token\n });\n\n const patientQuery = useQuery({\n queryKey: [QueryKeys.PATIENT, patientId, _user?.sourceId],\n queryFn: async () => getPatient(_user!.sourceId, patientId!),\n enabled: !!patientId && !!_user?.sourceId && !token\n });\n\n const {\n data: practiceInfo,\n isFetched: practiceInfoIsFetched,\n isError\n } = usePracticeInfo(practiceName, {\n retry: false,\n enabled: !!practiceName && (!token || isTokenDataFetched)\n });\n\n const { data: requestSetting, isFetched: requestSettingsIsFetched } = useQuery({\n queryKey: [QueryKeys.REQUEST_SETTING, practiceInfo?.practiceId, 'online-booking'],\n queryFn: async () => {\n try {\n const response = await unauthenticatedApiClient.get(\n endpoint('GET_REQUEST_SETTING', { practiceId: practiceInfo?.practiceId })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return getAppointmentRequestSettings(data);\n } catch {}\n },\n enabled: !!practiceInfo\n });\n\n const practiceId = practiceInfo?.practiceId ?? _user?.practiceId;\n\n if (\n !practiceName ||\n (!isError &&\n !autoFillError &&\n ((token && !isTokenDataFetched) ||\n (practiceName && (!practiceInfoIsFetched || !requestSettingsIsFetched))))\n ) {\n return ;\n }\n\n if (\n !practiceId ||\n !practiceInfo ||\n isError ||\n !requestSetting ||\n requestSetting.appointmentRequestsDisabled\n ) {\n return ;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default OnlineBooking;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React from 'react';\nimport { SectionList } from 'react-native';\nimport { Headline, HoverButton } from 'src/components';\nimport { Margin } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { AppColors } from 'src/types/paper';\nimport styled from 'styled-components/native';\n\ntype Props = NativeStackScreenProps;\n\nconst Sandbox: React.FC = ({ navigation }) => {\n const { colors } = useAppTheme();\n return (\n {title}}\n renderItem={({ item }) => (\n {\n // @ts-expect-error\n navigation.navigate(item.target, item.params);\n }}\n >\n {item.title}\n \n )}\n />\n );\n};\n\nconst Sections: Section[] = [\n {\n title: 'Online Booking',\n description: 'Links to online booking for various practices',\n data: [\n {\n title: 'Ally Test',\n target: Screens.ONLINE_BOOKING,\n params: {\n practice: 'ally_test'\n }\n },\n {\n title: 'Evet Test',\n target: Screens.ONLINE_BOOKING,\n params: {\n practice: 'evet_test'\n }\n },\n {\n title: 'Unknown Practice',\n target: Screens.ONLINE_BOOKING,\n params: {\n practice: 'bad'\n },\n color: 'error'\n }\n ]\n }\n];\n\nexport default Sandbox;\n\ninterface Section {\n title: string;\n data: NavLocation[];\n description: string;\n}\n\ninterface NavLocation {\n title: string;\n target: Screens;\n params: Record;\n custom?: React.ReactNode;\n color?: keyof AppColors;\n}\n\nconst NavButton = styled(HoverButton)`\n align-self: flex-start;\n`;\n\nconst StyledHeadline = styled(Headline)`\n background: ${({ theme }) => theme.colors.background};\n`;\n","import { capitalize, defaultsDeep } from 'lodash';\nimport { RefillFormData } from '../model';\nimport { fullNameAndTitle } from 'src/utils';\nimport { Client, Patient } from 'src/interfaces';\n\nexport const INITIAL_FORM_DATA: {\n [key in keyof RefillFormData]?: Partial;\n} = {\n clientInfo: {\n fullName: '',\n phoneNumber: '',\n emailAddress: '',\n acceptConditions: false\n },\n patientInfo: {},\n additionalInfo: {},\n notificationSettings: {}\n};\n\nexport const getInitialValues = (\n user: Client | undefined,\n patient: Patient | undefined,\n lastSubmittedValues?: Partial\n): RefillFormData => {\n const apiData = {\n clientInfo: {\n fullName: fullNameAndTitle(user),\n emailAddress: user?.email,\n phoneNumber: user?.mobilePhone ?? user?.homePhone ?? user?.workPhone,\n clientId: user?.clientId\n },\n patientInfo: {\n patientId: patient?.patientId,\n name: patient?.name ? capitalize(patient.name) : undefined,\n breed:\n patient?.breed || patient?.species\n ? capitalize(patient.breed ?? patient.species)\n : undefined,\n age: patient?.birthdate,\n sex: patient?.sex ? capitalize(patient.sex) : undefined,\n isNewPatient: patient ? false : undefined\n }\n };\n return Object.assign(defaultsDeep(apiData, INITIAL_FORM_DATA), lastSubmittedValues);\n};\n","import * as yup from 'yup';\nimport {\n additionalInfoSchema as _additionalInfoSchema,\n clientSchema,\n notificationSchema,\n patientSchema\n} from 'src/module/FormKit/validators';\n\nexport const additionalInfoSchema = yup\n .object()\n .shape({\n productQuantity: yup\n .number()\n .required('errors.productQuantityRequired')\n .integer('errors.productQuantityRequired'),\n productDescription: yup\n .string()\n .required('errors.productDescriptionRequired')\n .min(3, 'errors.productDescriptionMinLength'),\n productComments: yup.string()\n })\n .concat(_additionalInfoSchema);\n\nexport const validationSchema = yup.object().shape({\n clientInfo: clientSchema,\n patientInfo: patientSchema,\n notificationSettings: notificationSchema,\n additionalInfo: additionalInfoSchema\n});\n","export enum REFILL_STEPS {\n CLIENT_INFO,\n PATIENT_INFO,\n ADDITIONAL_INFO,\n NOTIFICATION_SETTINGS,\n CONFIRMATION,\n STATUS\n}\n","import { useFormik } from 'formik';\nimport { Platform } from 'react-native';\nimport {\n ClientPatientSearchParams,\n clientUnauthenticatedSearch,\n getPatients,\n postRequest,\n QueryKeys\n} from 'src/api';\nimport { ImageUpload } from 'src/components/UploadFiles';\nimport { ApiPracticeInfo, Client, Patient, RefillRequest, RequestType } from 'src/interfaces';\nimport { isDefined, isPatientActive, queryClient } from 'src/utils';\nimport { RefillFormData, RefillFormState } from '../model';\nimport { getInitialValues } from './initialFormData';\nimport { validationSchema } from './productValidation';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\nimport { useMutation } from 'react-query';\nimport { useCallback, useState } from 'react';\nimport { State } from 'src/module/FormKit/model';\nimport { REFILL_STEPS } from './productSteps';\nimport { INTL_PHONE_MASK, PHONE_MASK, TRACKING_EVENTS } from 'src/constants';\nimport { isClientMatch } from 'src/scenes/OnlineBooking/BookingProvider/helper';\nimport mapClientPatientSearch from 'src/scenes/OnlineBooking/BookingProvider/helpers/mapClientPatientSearch';\nimport { useBoolean, useTrackVisit } from 'src/hooks';\nimport { getRefillRequestSettings } from './getRefillRequestSettings';\nimport sentry from 'src/utils/sentry';\nimport { AxiosError } from 'axios';\nimport { mask } from 'react-native-mask-text';\n\ninterface Args {\n practiceInfo: ApiPracticeInfo;\n user: Client | undefined;\n patient: Patient | undefined;\n requestSettings: ReturnType;\n}\n\nconst useRefillFormContext = ({\n practiceInfo,\n user,\n patient,\n requestSettings\n}: Args): RefillFormState => {\n const { data: visitData, trackEvent } = useTrackVisit({\n initialEventName: TRACKING_EVENTS.APPOINTMENT_REQUEST_PAGE,\n practiceId: practiceInfo.practiceId,\n sourceId: practiceInfo.sourceId,\n clientId: user?.clientId\n });\n\n const [state, setState] = useState>({\n current: REFILL_STEPS.CLIENT_INFO,\n visited: { [REFILL_STEPS.CLIENT_INFO]: true }\n });\n const currentStep = state.current;\n const { t } = useTranslation('requests');\n\n const { mutateAsync: submitProductRequest } = useMutation(\n async (request: RefillRequest) => await postRequest(request),\n {\n onError: (error: Error) => {\n Toast.show({\n type: 'error',\n text1: t('appointmentRequest:errorToast'),\n text2: error.name\n });\n }\n }\n );\n\n const { value: isSubmitError, toTrue: toError, toFalse: toNoError } = useBoolean(false);\n const formik = useFormik({\n initialValues: getInitialValues(user, patient),\n enableReinitialize: true,\n validateOnChange: false,\n validationSchema,\n onSubmit: async (values, { setErrors }) => {\n toNoError();\n const requestImageIds = Object.values(values.additionalInfo.images ?? [])\n .map((imageUpload: ImageUpload) => imageUpload.id)\n .filter(isDefined);\n try {\n await submitProductRequest({\n clientId: values.clientInfo.clientId,\n content: {\n comments: values.additionalInfo.productComments,\n emailAddress: values.clientInfo.emailAddress,\n fullName: values.clientInfo.fullName,\n origin: Platform.OS,\n petName: values.patientInfo.patientId ? undefined : values.patientInfo.name,\n phoneNumber: mask(values.clientInfo?.phoneNumber ?? '', [PHONE_MASK, INTL_PHONE_MASK]),\n preferredContactMethod: values.notificationSettings.preferredContactMethod,\n quantity: values.additionalInfo.productQuantity,\n refill: values.additionalInfo.productDescription,\n smsOptIn: values.notificationSettings.smsOptIn,\n smsOptOut: !values.notificationSettings.smsOptIn\n },\n patientId: values.patientInfo.patientId,\n practiceId: practiceInfo.practiceId,\n requestImageIds,\n sourceId: practiceInfo.sourceId,\n type: RequestType.Refill,\n visitorToken: visitData?.visitorToken,\n visitToken: visitData?.visitToken\n });\n } catch (e) {\n const error = e as AxiosError;\n sentry.addBreadcrumb({\n message: 'Refill request submission failed',\n category: 'error',\n level: 'error',\n data: {\n data: JSON.parse(error.config?.data ?? '{}'),\n url: error.config?.url,\n code: error.code,\n message: error.message\n }\n });\n toError();\n }\n\n void queryClient.invalidateQueries([QueryKeys.REQUESTS]);\n trackEvent(TRACKING_EVENTS.REFILL_REQUEST_SUBMITTED);\n }\n });\n const { submitForm, values } = formik;\n\n const advance = useCallback(async () => {\n if (currentStep === REFILL_STEPS.CONFIRMATION) {\n void submitForm();\n }\n setState((prev) => {\n if (prev.current === REFILL_STEPS.STATUS) return prev;\n const next: REFILL_STEPS = prev.current + 1;\n prev.current = next;\n prev.visited[next] = true;\n return { ...prev };\n });\n }, [currentStep, submitForm]);\n\n const goBack = useCallback(() => {\n setState(({ visited, current }) => ({ visited, current: current - 1 }));\n }, []);\n\n const goToStep = useCallback((step: REFILL_STEPS) => {\n setState((prev) => {\n prev.current = step;\n prev.visited[step] = true;\n return { ...prev };\n });\n }, []);\n\n const clientPatientQuery = useMutation({\n mutationFn: async (args: ClientPatientSearchParams) => {\n if (user && isClientMatch({ practiceInfo, clientInfo: values.clientInfo, user })) {\n const patientData = await queryClient.fetchQuery([QueryKeys.PATIENT], {\n queryFn: getPatients\n });\n const data = mapClientPatientSearch({\n patients: patientData.filter(isPatientActive),\n clientId: user?.clientId\n });\n return data;\n }\n const data = await clientUnauthenticatedSearch(args);\n if (isDefined(data.clientId)) {\n await formik.setFieldValue('clientInfo.clientId', data.clientId);\n trackEvent(TRACKING_EVENTS.REFILL_REQUEST_PAGE_CLIENT_FOUND);\n }\n\n return mapClientPatientSearch(data);\n }\n });\n\n return {\n ...formik,\n practiceInfo,\n state,\n setState,\n advance,\n goBack,\n goToStep,\n clientPatientQuery,\n headerText: requestSettings.headerText,\n confirmationText: requestSettings.confirmationText,\n isSubmitError,\n formTitle: t('requests:refillRequest.title'),\n disclaimer: t('requests:refillRequest.disclaimer')\n };\n};\n\nexport default useRefillFormContext;\n","import React, { SetStateAction, useCallback, useState } from 'react';\nimport { RefillFormState } from '../model';\nimport {\n ContentContainer,\n FormScrollView,\n InputContainer,\n MainText,\n Row\n} from 'src/module/FormKit/components';\nimport { Headline, TextInput } from 'src/components';\nimport { getIn } from 'formik';\nimport { useTranslation } from 'react-i18next';\nimport UploadFiles, { ImageUpload } from 'src/components/UploadFiles';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\n\nconst ProductInfoSection: React.FC = ({\n values: { additionalInfo },\n setFieldValue,\n validateField,\n errors\n}) => {\n const { t } = useTranslation('onlineBooking');\n\n const [images, setImages] = useState>(additionalInfo.images ?? {});\n const onImageChange = useCallback(\n async (action: SetStateAction>) => {\n setImages((prev) => {\n const value = typeof action === 'function' ? action(prev) : action;\n void setFieldValue('additionalInfo.images', value);\n setTimeout(async () => validateField('additionalInfo.images'), 100);\n return value;\n });\n },\n [setFieldValue, validateField]\n );\n\n return (\n \n \n {t('productInfo.title')}\n \n \n \n \n setFieldValue('additionalInfo.productDescription', value, false)\n }\n onBlur={async () => {\n await validateField('additionalInfo.productDescription');\n }}\n error={!!getIn(errors, 'additionalInfo.productDescription')}\n msg={t(getIn(errors, 'additionalInfo.productDescription'))}\n />\n \n \n {\n const sanitizedText = value.replace(/\\D+/g, '');\n const parsed = parseInt(sanitizedText);\n void setFieldValue(\n 'additionalInfo.productQuantity',\n isNaN(parsed) ? undefined : parsed,\n false\n );\n }}\n onBlur={async () => {\n await validateField('additionalInfo.productQuantity');\n }}\n error={!!getIn(errors, 'additionalInfo.productQuantity')}\n msg={t(getIn(errors, 'additionalInfo.productQuantity'))}\n />\n \n \n \n {t('productInfo.description')}\n \n \n \n \n setFieldValue('additionalInfo.productComments', text, false)\n }\n onBlur={async () => validateField('additionalInfo.productComments')}\n error={!!getIn(errors, 'additionalInfo.productComments')}\n msg={t(getIn(errors, 'additionalInfo.productComments'))}\n />\n \n \n \n \n );\n};\n\nexport default ProductInfoSection;\n\nconst StyledUpload = styled(UploadFiles)`\n flex-direction: column-reverse;\n gap: ${Margin.Large}px;\n`;\n","import { ConfirmationSections } from 'src/module/FormKit/model';\nimport { RefillFormData } from '../model';\n\nimport { REFILL_STEPS } from './productSteps';\nimport { mask } from 'react-native-mask-text';\nimport { PHONE_MASK, INTL_PHONE_MASK } from 'src/constants';\nimport { capitalize } from 'lodash';\n\nexport const REFILL_CONFIRMATION: ConfirmationSections = {\n patientInfo: {\n title: 'section.patientInfo',\n dataKey: 'patientInfo',\n fields: [\n 'name',\n 'breed',\n {\n field: 'sex',\n component: ({ values }) => capitalize(values.patientInfo.sex)\n },\n 'age'\n ],\n stateKey: REFILL_STEPS.PATIENT_INFO,\n fieldDisplay: 'row'\n },\n clientInfo: {\n title: 'section.clientInfo',\n dataKey: 'clientInfo',\n fields: [\n 'fullName',\n 'emailAddress',\n {\n field: 'phoneNumber',\n component: ({ values }) =>\n mask(values.clientInfo?.phoneNumber ?? '', [PHONE_MASK, INTL_PHONE_MASK])\n }\n ],\n stateKey: REFILL_STEPS.CLIENT_INFO,\n fieldDisplay: 'row'\n },\n additionalInfo: {\n title: 'section.productInfo',\n dataKey: 'additionalInfo',\n fields: [\n {\n field: 'productDescription',\n fieldDisplay: 'row'\n },\n {\n field: 'productQuantity',\n fieldDisplay: 'row'\n },\n 'productComments'\n ],\n stateKey: REFILL_STEPS.ADDITIONAL_INFO,\n fieldDisplay: 'column',\n namespace: 'refill'\n },\n notificationSettings: {\n title: 'section.notificationSettings',\n dataKey: 'notificationSettings',\n fields: [\n {\n field: 'smsOptIn',\n component: ({ values: { notificationSettings } }) =>\n notificationSettings?.smsOptIn ? 'form.smsTrue' : 'form.smsFalse'\n },\n {\n field: 'preferredContactMethod',\n component: ({ values: { notificationSettings } }) =>\n `form.${notificationSettings?.preferredContactMethod ?? ''}`\n }\n ],\n stateKey: REFILL_STEPS.NOTIFICATION_SETTINGS,\n fieldDisplay: 'row'\n }\n};\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { Body, Headline, HoverButton, HoverCard, MiniHeroIcon } from 'src/components';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { Margin } from 'src/constants';\nimport styled from 'styled-components/native';\nimport { ConfirmationSection, FormScrollView } from 'src/module/FormKit/components';\nimport { useTranslation } from 'react-i18next';\nimport { ActivityIndicator, ProgressBar } from 'react-native-paper';\nimport Confetti from 'src/scenes/ToDos/ToDoList/components/Confetti';\nimport RichTextRenderer from 'src/components/PracticeTextRenderer';\nimport { RefillFormState } from '../model';\nimport { REFILL_CONFIRMATION } from '../helpers/productConfirmation';\nimport { LayoutAnimation } from 'react-native';\nimport { AlertCircle, Prescriptions } from 'src/components/kit/ABIcons';\n\nconst MAX_ERRORED_SUBMISSIONS = 3;\n\nconst RefillStatus: React.FC = (props) => {\n const {\n confirmationText,\n isSubmitting: _isSubmitting,\n submitCount,\n isSubmitError,\n handleSubmit\n } = props;\n const { colors } = useAppTheme();\n const { t } = useTranslation('requests');\n\n const [isSubmitting, setIsSubmitting] = useState(_isSubmitting);\n const [isError, setIsError] = useState(isSubmitError);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setIsSubmitting(_isSubmitting);\n setIsError(isSubmitError);\n }, 1000);\n return () => clearTimeout(timeout);\n }, [_isSubmitting, isSubmitError]);\n useLayoutEffect(() => {\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n }, [isSubmitting]);\n\n return (\n \n {submitCount > 0 && !isSubmitting && !isError && }\n \n \n isSubmitting ? (\n \n ) : isError ? (\n \n ) : (\n \n )\n }\n color={isSubmitting ? colors.warn : isError ? colors.error : colors.primary}\n />\n {isSubmitting && {t(`refillRequest.submitting`)}}\n {!isSubmitting && !isError && (\n {t(`refillRequest.success`)}\n )}\n {isError && {t(`refillRequest.error`)}}\n \n\n {!isSubmitting && !isError && (\n {t('refillRequest.successMessage')}}\n >\n {confirmationText}\n \n )}\n {isError && submitCount < MAX_ERRORED_SUBMISSIONS && (\n <>\n {t('refillRequest.submitErrorRetry')}\n \n {'Resubmit'}\n \n \n )}\n {isError && submitCount >= MAX_ERRORED_SUBMISSIONS && (\n {t('refillRequest.submitErrorMax')}\n )}\n \n \n \n );\n};\n\nexport default RefillStatus;\n\nconst StyledCard = styled(HoverCard)`\n padding: ${Margin.ExtraLarge}px;\n gap: ${Margin.Large}px;\n`;\n\nconst CenteredText = styled(Body)`\n text-align: center;\n color: ${({ theme }) => theme.colors.onSurface};\n`;\n\nconst StyledConfetti = styled(Confetti).attrs({\n preserveAspectRatio: 'xMidYMid slice'\n})`\n position: absolute;\n width: 100%;\n bottom: 0px;\n left: 0px;\n`;\n","import { StepInfo } from 'src/module/FormKit/model';\nimport { RefillFormData, RefillFormState } from '../model';\nimport {\n ClientInformation,\n Confirmation,\n NotificationSettings,\n PatientInfo\n} from 'src/module/FormKit/components';\nimport { clientSchema, notificationSchema, patientSchema } from 'src/module/FormKit/validators';\nimport { REFILL_STEPS } from './productSteps';\nimport { additionalInfoSchema, validationSchema } from './productValidation';\nimport ProductInfoSection from '../components/ProductInfoSection';\nimport RefillStatus from '../components/RefillStatus';\n\nexport const PRODUCT_STEP_INFO: StepInfo = {\n [REFILL_STEPS.CLIENT_INFO]: {\n title: 'section.clientInfo',\n field: 'clientInfo',\n validator: (data) => clientSchema.isValidSync(data.clientInfo),\n key: REFILL_STEPS.CLIENT_INFO,\n component: ClientInformation\n },\n [REFILL_STEPS.PATIENT_INFO]: {\n title: 'section.patientInfo',\n field: 'patientInfo',\n validator: (data) => patientSchema.isValidSync(data.patientInfo),\n key: REFILL_STEPS.PATIENT_INFO,\n component: PatientInfo\n },\n [REFILL_STEPS.ADDITIONAL_INFO]: {\n title: 'section.productInfo',\n field: 'additionalInfo',\n validator: (data) => additionalInfoSchema.isValidSync(data.additionalInfo),\n key: REFILL_STEPS.ADDITIONAL_INFO,\n component: ProductInfoSection\n },\n [REFILL_STEPS.NOTIFICATION_SETTINGS]: {\n title: 'section.notificationSettings',\n field: 'notificationSettings',\n validator: (data) => notificationSchema.isValidSync(data.notificationSettings),\n key: REFILL_STEPS.NOTIFICATION_SETTINGS,\n component: NotificationSettings\n },\n [REFILL_STEPS.CONFIRMATION]: {\n title: 'section.confirmation',\n field: null,\n validator: (data) => validationSchema.isValidSync(data),\n key: REFILL_STEPS.CONFIRMATION,\n component: Confirmation\n },\n [REFILL_STEPS.STATUS]: {\n title: 'section.status',\n field: null,\n validator: () => true,\n key: REFILL_STEPS.STATUS,\n component: RefillStatus\n }\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { ApiPracticeInfo, Client, Patient } from 'src/interfaces';\nimport { LayoutController } from 'src/module/FormKit/components';\nimport useRefillFormContext from '../helpers/useRefillFormContext';\nimport { REFILL_STEPS } from '../helpers/productSteps';\nimport { PRODUCT_STEP_INFO } from '../helpers/productStepInfo';\nimport { useTranslation } from 'react-i18next';\nimport _ from 'lodash';\nimport { REFILL_CONFIRMATION } from '../helpers/productConfirmation';\nimport useGoBack from 'src/hooks/useGoBack';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport { getIn } from 'formik';\nimport { getRefillRequestSettings } from '../helpers/getRefillRequestSettings';\n\ninterface Props {\n practiceInfo: ApiPracticeInfo;\n user: Client | undefined;\n patient: Patient | undefined;\n requestSettings: ReturnType;\n}\nconst RefillLayoutController: React.FC = ({\n practiceInfo,\n user,\n patient,\n requestSettings\n}) => {\n const { isLoggedIn } = useAuth();\n\n const { t } = useTranslation();\n const context = useRefillFormContext({ practiceInfo, user, patient, requestSettings });\n const { goToStep, goBack, advance, isSubmitting, state, values, errors } = context;\n const exit = useGoBack();\n const currentStepInfo = PRODUCT_STEP_INFO[state.current];\n\n const validationResults = useMemo(\n () =>\n _(PRODUCT_STEP_INFO)\n .mapValues((info) => info.validator(values))\n .value(),\n [values]\n );\n const Component = PRODUCT_STEP_INFO[state.current]?.component;\n const hasCompleted = !!state.visited[REFILL_STEPS.CONFIRMATION];\n const disableTabNav =\n !!getIn(errors, 'additionalInfo.images') ||\n isSubmitting ||\n state.current === REFILL_STEPS.STATUS;\n const disableNav = !currentStepInfo?.validator?.(values) || disableTabNav;\n\n const canExit = [REFILL_STEPS.STATUS, REFILL_STEPS.CLIENT_INFO].includes(state.current);\n\n const showReturnToConfirmation =\n hasCompleted && ![REFILL_STEPS.CONFIRMATION, REFILL_STEPS.STATUS].includes(state.current);\n\n const showReturnToPetPage = state.current === REFILL_STEPS.STATUS && !!isLoggedIn;\n\n const goToConfirmation = useCallback(() => {\n goToStep(REFILL_STEPS.CONFIRMATION);\n }, [goToStep]);\n\n const errorMessage = useMemo(() => {\n if (getIn(errors, 'clientInfo.acceptConditions')) {\n return t(`onlineBooking:${String(getIn(errors, 'clientInfo.acceptConditions'))}`);\n }\n if (getIn(errors, 'additionalInfo.images')) {\n return getIn(errors, 'additionalInfo.images');\n }\n }, [errors, t]);\n\n const { bottomButtonText, bottomButtonAction } = useMemo(() => {\n if (state.current === REFILL_STEPS.STATUS) {\n return {\n bottomButtonText: t('onlineBooking:returnToPetPage'),\n bottomButtonAction: exit\n };\n } else if (state.current === REFILL_STEPS.CONFIRMATION) {\n return {\n bottomButtonText: t('submit'),\n bottomButtonAction: advance\n };\n } else {\n return {\n bottomButtonText: hasCompleted ? t('onlineBooking:confirmation.return') : t('continue'),\n bottomButtonAction: hasCompleted ? goToConfirmation : advance\n };\n }\n }, [advance, state, exit, goToConfirmation, hasCompleted, t]);\n\n return (\n \n \n \n );\n};\n\nexport default RefillLayoutController;\n","import { NativeStackScreenProps } from '@react-navigation/native-stack';\nimport React from 'react';\nimport { useQuery } from 'react-query';\nimport { practiceOptions } from 'src/hooks/react-query/usePractice';\nimport { useAuth } from 'src/providers/AuthProvider';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { getPatient, QueryKeys } from 'src/api';\nimport PracticeNotFound from 'src/module/FormKit/components/PracticeNotFound';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\nimport { endpoint } from 'src/constants';\nimport { Client, Patient } from 'src/interfaces';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport Practice from 'src/interfaces/api/Practice';\nimport GoogleAnalytics from 'src/providers/GoogleTagManager';\nimport { usePracticeInfo } from 'src/hooks';\nimport RefillLayoutController from './components/RefillLayoutController';\nimport { getRefillRequestSettings } from './helpers/getRefillRequestSettings';\nimport { useTranslation } from 'react-i18next';\nimport Toast from 'react-native-toast-message';\n\nconst PLACEHOLDER_TOKEN_DATA = {\n practice: undefined,\n client: undefined,\n patient: undefined\n};\n\nconst ProductRequest: React.FC<\n NativeStackScreenProps\n> = ({ route, navigation }) => {\n const { _user } = useAuth();\n const { colors } = useAppTheme();\n const practiceName = route.params?.practice;\n const patientId = route.params?.patientId;\n const token = route.params?.token;\n const { t } = useTranslation('onlineBooking');\n\n useQuery({\n ...practiceOptions(_user?.practiceId),\n onSuccess: (data) => {\n navigation.setParams({ practice: data.shortName });\n },\n\n enabled: !practiceName && !!_user && !token\n });\n\n const {\n data: { client, patient } = PLACEHOLDER_TOKEN_DATA,\n isError: autoFillError,\n isFetched: isTokenDataFetched\n } = useQuery({\n queryKey: [QueryKeys.AUTOFILL_REFILL, token],\n queryFn: async () => {\n const response = await unauthenticatedApiClient.get<{\n practice: Practice;\n client: Client;\n patient: Patient;\n }>(endpoint('AUTO_FILL_TOKEN', { token }), { params: { type: 'refill' } });\n const data = isDefinedOrThrowServerError(response.data);\n navigation.setParams({ practice: data.practice.shortName });\n return data;\n },\n onError: () =>\n Toast.show({\n type: 'error',\n text1: t('errors.tokenExpired'),\n text2: t('errors.tokenExpiredDesc')\n }),\n cacheTime: Infinity,\n staleTime: 0,\n enabled: !!token\n });\n\n const patientQuery = useQuery({\n queryKey: [QueryKeys.PATIENT, patientId, _user?.sourceId],\n queryFn: async () => getPatient(_user!.sourceId, patientId!),\n enabled: !!patientId && !!_user?.sourceId && !token\n });\n\n const {\n data: practiceInfo,\n isFetched: practiceInfoIsFetched,\n isError\n } = usePracticeInfo(practiceName, {\n retry: false,\n enabled: !!practiceName && (!token || isTokenDataFetched)\n });\n\n const { data: requestSetting, isFetched: requestSettingsIsFetched } = useQuery({\n queryKey: [QueryKeys.REQUEST_SETTING, practiceInfo?.practiceId, 'product-request'],\n queryFn: async () => {\n try {\n const response = await unauthenticatedApiClient.get(\n endpoint('GET_REQUEST_SETTING', { practiceId: practiceInfo?.practiceId })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return getRefillRequestSettings(data);\n } catch {}\n },\n enabled: !!practiceInfo\n });\n\n const practiceId = practiceInfo?.practiceId ?? _user?.practiceId;\n\n if (\n !practiceName ||\n (!isError &&\n !autoFillError &&\n ((token && !isTokenDataFetched) ||\n (practiceName && (!practiceInfoIsFetched || !requestSettingsIsFetched))))\n ) {\n return ;\n }\n\n if (\n !practiceId ||\n !practiceInfo ||\n isError ||\n !requestSetting ||\n requestSetting.refillRequestsDisabled\n ) {\n return ;\n }\n\n return (\n \n \n \n );\n};\n\nexport default ProductRequest;\n","import { RequestSetting } from 'src/interfaces';\n\nexport const getRefillRequestSettings = (requestSetting: RequestSetting) => {\n return {\n confirmationText: requestSetting.refillRequestConfirmationText,\n headerText: requestSetting.refillRequestHeaderText,\n requireComments: false,\n refillRequestsDisabled: requestSetting.refillRequestsDisabled\n };\n};\n","import { createStackNavigator, StackNavigationOptions } from '@react-navigation/stack';\nimport React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Image, View } from 'react-native';\nimport { useAuth, AuthStatus } from 'src/providers/AuthProvider';\nimport { fontStyles } from 'src/theme/globalStyles';\nimport { MainStackScreen } from '../MainStack';\nimport { Navigators } from '../navigators';\nimport {\n useFonts,\n Roboto_100Thin,\n Roboto_100Thin_Italic,\n Roboto_300Light,\n Roboto_300Light_Italic,\n Roboto_400Regular,\n Roboto_400Regular_Italic,\n Roboto_500Medium,\n Roboto_500Medium_Italic,\n Roboto_700Bold,\n Roboto_700Bold_Italic,\n Roboto_900Black,\n Roboto_900Black_Italic\n} from '@expo-google-fonts/roboto';\nimport { Screens } from '../screens';\nimport Landing from 'src/scenes/Landing';\nimport TermsAndConditions from 'src/scenes/TermsAndConditions';\nimport ChangePasswordModal from 'src/scenes/ChangePassword';\nimport { useTranslation } from 'react-i18next';\nimport RootStackParamList from './ParamsList';\nimport PetPageDisabled from 'src/scenes/PetPageDisabled';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport PracticeClientSearch from 'src/scenes/PracticeClientSearch';\nimport { AsyncStorageKeys } from 'src/api';\nimport { buildRecords } from 'src/utils/expoStorage';\nimport { imageCache } from 'src/utils/checkImageCache';\nimport { APP_ENV, TOKEN } from 'src/constants';\nimport { isDefined, storage } from 'src/utils';\nimport EmailConfirmation from 'src/scenes/EmailConfirmation';\nimport useDefaultModalScreenOptions from '../useDefaultModalScreenOptions';\nimport BiometricLogin from 'src/scenes/BiometricLogin';\nimport TokenResetPassword from 'src/scenes/TokenResetPassword';\nimport { useNotificationPrompt } from 'src/providers/NotificationPromptProvider';\nimport PushNotificationsOptIn from 'src/scenes/PushNotificationsOptIn';\nimport OnlineBooking from 'src/scenes/OnlineBooking';\nimport Sandbox from 'src/scenes/Sandbox';\nimport LoginLoader from 'src/components/LoginLoader';\nimport ProductRequest from 'src/scenes/ProductRequest';\n\nconst RootStack = createStackNavigator();\n\nconst RootStackScreen: FC = () => {\n const { t } = useTranslation();\n const [fontsLoaded] = useFonts({\n Roboto_100Thin,\n Roboto_100Thin_Italic,\n Roboto_300Light,\n Roboto_300Light_Italic,\n Roboto_400Regular,\n Roboto_400Regular_Italic,\n Roboto_500Medium,\n Roboto_500Medium_Italic,\n Roboto_700Bold,\n Roboto_700Bold_Italic,\n Roboto_900Black,\n Roboto_900Black_Italic\n });\n const { ready, authStatus, practice } = useAuth();\n const {\n colors,\n viewMode: { isMobile }\n } = useAppTheme();\n\n const [imageRecordsBuilt, setImageRecordsBuilt] = useState(false);\n\n useEffect(() => {\n if (!imageRecordsBuilt)\n void buildRecords().then(async (records) => {\n Object.assign(imageCache, records);\n try {\n await Promise.all(\n Object.values(imageCache).map(async (uri) => Image.prefetch(await uri))\n );\n setImageRecordsBuilt(true);\n } catch (error) {\n console.error('Error prefetching images', error);\n }\n });\n }, [imageRecordsBuilt, setImageRecordsBuilt]);\n\n useEffect(() => {\n // Set the token in the storage if the flag is set\n if (TOKEN) {\n void storage.setTypedItem(AsyncStorageKeys.TOKEN, TOKEN);\n }\n }, []);\n\n const practiceClientSearchScreenOptions: StackNavigationOptions = useMemo(\n () => ({\n headerShown: true,\n headerTitleAlign: 'center',\n headerTintColor: colors.onPrimary,\n headerStyle: { backgroundColor: colors.primary },\n headerShadowVisible: false,\n headerBackTitleVisible: false\n }),\n [colors.onPrimary, colors.primary]\n );\n\n const modalScreenOptions = useDefaultModalScreenOptions();\n const { hasPrompted } = useNotificationPrompt();\n\n if (\n !fontsLoaded ||\n !ready ||\n !imageRecordsBuilt ||\n !isDefined(authStatus) ||\n authStatus === AuthStatus.SWITCHING_PRACTICE\n ) {\n return ;\n }\n return (\n \n \n \n {authStatus === AuthStatus.LOGGED_OUT && (\n <>\n \n \n \n )}\n {authStatus === AuthStatus.FORBIDDEN && (\n \n )}\n {authStatus === AuthStatus.NEEDS_BIOMETRIC && (\n \n )}\n \n \n {authStatus === AuthStatus.NEEDS_TERMS && (\n \n )}\n {authStatus === AuthStatus.NEEDS_PASSWORD_RESET && (\n \n )}\n {authStatus === AuthStatus.AUTHENTICATED && (\n \n )}\n \n \n \n \n {!hasPrompted && (\n null,\n headerShadowVisible: false,\n title: t('pushNotifications', { ns: 'pushNotifications' })\n }}\n />\n )}\n {APP_ENV !== 'PROD' && (\n \n )}\n \n \n \n \n \n );\n};\n\nexport default RootStackScreen;\n\nconst getInitialRouteName = (\n authStatus: AuthStatus | undefined\n): Navigators.MAIN_STACK | Screens.LANDING | undefined => {\n if (authStatus === AuthStatus.AUTHENTICATED) {\n return Navigators.MAIN_STACK;\n }\n if (authStatus === AuthStatus.LOGGED_OUT) {\n return Screens.LANDING;\n }\n return undefined;\n};\n","import { pick, map, startCase } from 'lodash';\nimport { Client } from 'src/interfaces';\n\nexport const prepareUserMetadata = (user?: Client) =>\n pick(user, [\n 'clientId',\n 'sourceId',\n 'emailVerificationStatus',\n 'primaryPractice',\n 'petRecordStatus',\n 'loyaltyToggle'\n ]);\n\ntype ObjectWithToString = {\n toString: () => string;\n};\n\nexport const mapPropertiesToLabels = (\n obj: Record\n) => map(obj, (value, key) => `${startCase(key)}: ${value?.toString() ?? 'undefined'}`).join('\\n');\n","import { NavigationContainer } from '@react-navigation/native';\nimport React from 'react';\nimport { View, ScrollView } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { Title, BottomButton, MasterView, TextInput, Body } from 'src/components';\nimport { FallBackProps } from 'src/components/ErrorBoundary';\nimport sentry from 'src/utils/sentry';\nimport { AsyncStorageKeys, QueryKeys } from 'src/api';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { useTranslation } from 'react-i18next';\nimport {} from 'react-native-paper';\nimport { fullNameAndTitle, queryClient, storage } from 'src/utils';\nimport { Client } from 'src/interfaces';\nimport { prepareUserMetadata, mapPropertiesToLabels } from './helper';\nconst AppError: React.FC = ({ resetError, eventId }) => {\n const { top } = useSafeAreaInsets();\n const { colors } = useAppTheme();\n const { t } = useTranslation('appError');\n\n const [comments, setComments] = React.useState('');\n\n return (\n \n \n \n \n {t('title')}\n {t('headline')}\n \n \n \n {\n resetError();\n if (!comments.trim().length) return;\n const token = await storage.getTypedItem(AsyncStorageKeys.TOKEN);\n const user = queryClient.getQueryData([QueryKeys.CLIENT, token]);\n const selectUserProperties = prepareUserMetadata(user);\n const message = mapPropertiesToLabels({ comments, ...selectUserProperties });\n sentry.captureUserFeedback({\n event_id: eventId,\n comments: message,\n email: user?.email,\n name: fullNameAndTitle(user) ?? 'Anonymous'\n });\n }}\n >\n {t(!comments.length ? 'reset' : 'sendAndReset')}\n \n \n \n );\n};\n\nexport default AppError;\n","/**\n * This file is only used for web. It's a placeholder for the web implementation of the remote notifications and to prevent errors when building the web app.\n */\n\nimport { noop } from 'lodash';\n\nexport const messageHandler = noop;\n","/**\n * DebugFAB\n */\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Animated,\n LayoutRectangle,\n PanResponder,\n ScaledSize,\n useWindowDimensions\n} from 'react-native';\nimport { FAB, Portal, Menu } from 'react-native-paper';\nimport { EdgeInsets, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { AsyncStorageKeys } from 'src/api';\nimport { IS_ANDROID, Size } from 'src/constants';\nimport { useBoolean } from 'src/hooks';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport { queryClient, storage } from 'src/utils';\nimport styled from 'styled-components/native';\n\nimport { useTourGuideMaster } from 'src/module/TourGuide/TourGuideMaster';\nimport { TOUR } from 'src/module/TourGuide/model';\nimport { secureStoreDeleteCredentials } from 'src/providers/AuthProvider/helper';\nimport { NavigationProp, useNavigation } from '@react-navigation/native';\nimport { Screens } from 'src/routes/stacks/screens';\nimport RootStackParamList from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport {\n AppUserState,\n useImpersonation\n} from 'src/providers/ImpersonationProvider/ImpersonationProvider';\n/*\n * FAB component that moves when you drag it\n */\nconst DebugFAB: React.FC = () => {\n const { colors } = useAppTheme();\n const dimensions = useWindowDimensions();\n const edges = useSafeAreaInsets();\n const [layout, setLayout] = useState({ width: 0, height: 0, x: 0, y: 0 });\n\n const { navigate } = useNavigation>();\n\n const { verticalLimits, horizontalLimits } = useMemo(\n () => calcRange(edges, dimensions, layout),\n [edges, dimensions, layout]\n );\n\n const pan = useRef(new Animated.ValueXY({ x: 0, y: 0 })).current;\n useEffect(() => {\n pan.extractOffset();\n }, [pan]);\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderMove: Animated.event([null, { dx: pan.x, dy: pan.y }], {\n useNativeDriver: false\n }),\n onPanResponderRelease: (evt, gestureState) => {\n if (gestureState.dx <= Size.X3_S && gestureState.dy <= Size.X3_S) {\n openMenu();\n }\n pan.extractOffset();\n }\n })\n ).current;\n\n const positionX = pan.x.interpolate({\n inputRange: horizontalLimits,\n outputRange: horizontalLimits,\n extrapolate: 'clamp'\n });\n\n const positionY = pan.y.interpolate({\n inputRange: verticalLimits,\n outputRange: verticalLimits,\n extrapolate: 'clamp'\n });\n\n const { value: visible, toTrue: openMenu, toFalse: hideMenu } = useBoolean(false);\n\n const { toursInFocus, resetTour } = useTourGuideMaster();\n\n const { providerState, endAdminSession, findUser } = useImpersonation();\n\n // used to simulate a react-native javascript layer crash\n const [shouldCrash, setShouldCrash] = useState(false);\n\n if (shouldCrash) {\n throw new Error('Simulated crash');\n }\n\n return (\n \n {\n const layout = event.nativeEvent.layout;\n setLayout(layout);\n }}\n {...panResponder.panHandlers}\n >\n \n }\n contentStyle={{\n backgroundColor: 'transparent',\n gap: Size.X2_S,\n shadowColor: 'transparent'\n }}\n style={{ marginVertical: layout.height }}\n >\n {DEBUG_MENU_ITEMS.map(({ label, onPress, icon }) => (\n {\n onPress();\n hideMenu();\n }}\n size='small'\n style={{ backgroundColor: colors.surface }}\n />\n ))}\n {toursInFocus.map((tour) => (\n {\n if (tour.tourId.description) {\n resetTour(tour.tourId.description as TOUR);\n }\n hideMenu();\n }}\n onLongPress={() => {\n void tour.ref.current?.removeStorageVisited();\n hideMenu();\n }}\n />\n ))}\n {\n await storage.setTypedItem(AsyncStorageKeys.WHATS_NEW_VIEWED, 0);\n await queryClient.refetchQueries(AsyncStorageKeys.WHATS_NEW_VIEWED);\n hideMenu();\n }}\n size='small'\n style={{ backgroundColor: colors.surface }}\n />\n {\n setShouldCrash(true);\n }}\n size='small'\n style={{ backgroundColor: colors.surface }}\n />\n {\n navigate(Screens.SANDBOX);\n hideMenu();\n }}\n size='small'\n style={{ backgroundColor: colors.surface }}\n />\n {providerState?.appUserState === AppUserState.IMPERSONATE && (\n <>\n await findUser()}\n size='small'\n style={{ backgroundColor: colors.error }}\n />\n await endAdminSession()}\n size='small'\n style={{ backgroundColor: colors.error }}\n />\n \n )}\n \n \n \n );\n};\n\ninterface DebugOption {\n label: string;\n icon: string;\n onPress: () => void;\n}\n\nconst DEBUG_MENU_ITEMS: DebugOption[] = [\n {\n icon: 'database-off',\n label: 'Reset Tutorials',\n onPress: async () => {\n const storageKeys = await storage.getAllKeys();\n const tutorialKeys = storageKeys.filter((key) => key.includes(AsyncStorageKeys.TUTORIALS));\n await storage.multiRemove(tutorialKeys);\n await queryClient.invalidateQueries([AsyncStorageKeys.TUTORIALS]);\n }\n },\n {\n icon: 'delete',\n label: 'Clear Secure Store',\n onPress: secureStoreDeleteCredentials\n },\n {\n icon: 'cookie',\n label: 'Clear Storage',\n onPress: async () => {\n await storage.clear();\n await queryClient.clear();\n }\n }\n].filter((k: DebugOption | false): k is DebugOption => !!k);\n\nexport default DebugFAB;\n\nconst StyledFABContainer = styled(Animated.View)`\n position: absolute;\n`;\n\nconst calcRange = (edges: EdgeInsets, dimensions: ScaledSize, layout: LayoutRectangle) => {\n const { width, height } = dimensions;\n const { top, bottom, left, right } = edges;\n\n if (width === 0 || height === 0) {\n return {\n verticalLimits: [0, 1],\n horizontalLimits: [0, 1]\n };\n }\n\n return {\n verticalLimits: [top + Size.S, height - bottom - layout.height - Size.S],\n horizontalLimits: [left + Size.S, width - right - layout.width - Size.S]\n };\n};\n","import { NavigationContainer } from '@react-navigation/native';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Linking } from 'react-native';\nimport { FocusAwareStatusBar, Headline, PrimaryGradientBackground, Title } from 'src/components';\nimport { IS_ANDROID, PETPAGE_APP_STORE, Size } from 'src/constants';\nimport { useAppTheme } from 'src/providers/AppThemeProvider';\nimport styled from 'styled-components/native';\nimport DownloadAppStore from '../Landing/components/DownloadOurApp/DownloadAppStore';\nimport DownloadPlayStore from '../Landing/components/DownloadOurApp/DownloadPlayStore';\n\nconst ForcedUpdate: React.FC = () => {\n const { t } = useTranslation('forcedUpdate');\n const { colors } = useAppTheme();\n\n const openStore = useCallback(async () => Linking.openURL(PETPAGE_APP_STORE), []);\n\n return (\n \n \n \n \n \n {t('subtitle')}\n \n \n {t('message')}\n \n \n {IS_ANDROID ? (\n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default ForcedUpdate;\n\nconst Container = styled.View`\n flex: 1;\n margin: ${Size.M}px;\n align-items: center;\n justify-content: center;\n`;\n\nconst StyledHeadline = styled(Headline)`\n text-align: center;\n margin-top: ${Size.S}px;\n`;\n\nconst StyledPressable = styled.Pressable`\n justify-content: flex-end;\n align-self: center;\n margin-top: ${Size.L}px;\n`;\n","import { PropsWithChildren, useEffect, useState } from 'react';\nimport { IS_WEB } from 'src/constants';\nimport ForcedUpdate from 'src/scenes/ForcedUpdate';\nimport { appNeedsUpdate, getAppStoreVersionInfo } from './helper';\nimport pkg from '../../../package.json';\nimport { isDefined } from 'src/utils';\n\nconst GRACE_PERIOD_DAYS = 5;\n\nexport const ForcedUpdateProvider: React.FC = ({ children }) => {\n const [needsUpdate, setNeedsUpdate] = useState();\n\n useEffect(() => {\n if (IS_WEB) {\n setNeedsUpdate(false);\n } else {\n void getAppStoreVersionInfo()\n .then((versionInfo) => {\n setNeedsUpdate(\n appNeedsUpdate(\n pkg.version,\n versionInfo.versionNumber,\n versionInfo.releaseDate,\n GRACE_PERIOD_DAYS\n )\n );\n })\n // check for update failed, allow user to use app\n .catch(() => setNeedsUpdate(false));\n }\n }, []);\n\n if (!isDefined(needsUpdate)) return null;\n if (needsUpdate) return ;\n return children;\n};\n","import { AxiosError } from 'axios';\nimport { compareVersions } from 'compare-versions';\nimport moment from 'moment';\nimport { IS_DEBUG } from 'src/constants';\nimport config from 'src/environment';\nimport { debugConfig } from 'src/environment/config.debug';\n\nexport interface VersionInfo {\n versionNumber: string;\n releaseDate: Date;\n}\n\nexport const appNeedsUpdate = (\n userAppVersionNumber: string,\n criticalVersionNumber: string,\n releaseDate: Date,\n gracePeriodDays: number\n) => {\n const isCriticalReleaseAvailable =\n compareVersions(userAppVersionNumber, criticalVersionNumber) < 0;\n const isPastGracePeriod = moment(releaseDate, 'MM-DD-YYYY')\n .add(gracePeriodDays, 'days')\n .endOf('day')\n .isBefore();\n return isCriticalReleaseAvailable && isPastGracePeriod;\n};\n\nexport const getAppStoreVersionInfo = async (): Promise => {\n try {\n const url = `${IS_DEBUG ? debugConfig.BASE_URL : config.BASE_URL}/version.json`;\n const response = await fetch(url);\n const json = await response.json();\n return { versionNumber: json.versionNumber, releaseDate: json.releaseDate };\n } catch (e) {\n throw e as AxiosError;\n }\n};\n","import './src/i18n';\nimport './src/dates-setup';\nimport { setupURLPolyfill } from 'react-native-url-polyfill';\nimport { LinkingOptions, NavigationContainer } from '@react-navigation/native';\nimport React, { FC, Suspense, useEffect, useRef } from 'react';\nimport RootStackNavigator from 'src/routes/stacks/RootStackNavigator';\nimport { ActivityIndicator } from 'react-native-paper';\nimport { StatusBar } from 'expo-status-bar';\nimport Toast, {\n BaseToastProps,\n ErrorToast,\n InfoToast,\n SuccessToast\n} from 'react-native-toast-message';\nimport { AuthProvider } from 'src/providers/AuthProvider';\nimport { QueryClientProvider } from 'react-query';\nimport styled from 'styled-components/native';\nimport { useBoolean, useFlushEvents } from 'src/hooks';\nimport 'moment/min/locales';\nimport { IS_PROD, IS_WEB, NOTIFICATIONS_SUPPORTED } from 'src/constants';\nimport * as Linking from 'expo-linking';\nimport { queryClient as sharedQueryClient } from 'src/utils';\nimport AppThemeProvider, { ThemeConsumer } from 'src/providers/AppThemeProvider';\nimport {\n RootStackParamList,\n ROOT_STACK_PATHS\n} from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { useTranslation } from 'react-i18next';\nimport { TourGuideMasterProvider } from 'src/module/TourGuide/TourGuideMaster';\nimport Sentry, { routingInstrumentation } from 'src/utils/sentry';\nimport ErrorBoundary from 'src/components/ErrorBoundary';\nimport AppError from 'src/scenes/AppError';\nimport { LogBox } from 'react-native';\nimport { messageHandler } from 'src/utils/remoteNotifications';\nimport { onMessage } from 'src/utils/firebase';\nimport NotificationPromptProvider from 'src/providers/NotificationPromptProvider';\nimport { palette } from 'src/theme';\nimport {\n AppUserState,\n ImpersonationContext,\n ImpersonationProvider\n} from 'src/providers/ImpersonationProvider/ImpersonationProvider';\nimport DebugFAB from 'src/scenes/Landing/components/DebugFAB';\nimport { ForcedUpdateProvider } from 'src/providers/ForcedUpdateProvider';\nimport Constants from 'expo-constants';\n\nif (NOTIFICATIONS_SUPPORTED) require('src/providers/NotificationProvider/Notifee');\nif (!IS_WEB) setupURLPolyfill();\n\n// Disables the error UI from showing in the simulator\nLogBox.ignoreAllLogs();\nconst prefix = Linking.createURL('');\nconst linking: LinkingOptions = {\n prefixes: [prefix],\n config: ROOT_STACK_PATHS\n};\n\nconst INITIAL_LOAD_DELAY = 300;\n\nconst App: FC = () => {\n useEffect(() => onMessage(messageHandler), []);\n\n const { t } = useTranslation();\n const queryClient = useRef(sharedQueryClient).current;\n const { value: isNavReady, toTrue: readyNav } = useBoolean();\n\n const toastConfig = {\n success: (props: BaseToastProps) => (\n \n ),\n error: (props: BaseToastProps) => (\n \n ),\n info: (props: BaseToastProps) => (\n \n )\n };\n\n useFlushEvents();\n\n const navigationRef = useRef(null);\n\n return (\n \n \n \n \n \n \n {(theme) => (\n {\n if (!IS_WEB) {\n routingInstrumentation.registerNavigationContainer(navigationRef);\n }\n setTimeout(readyNav, INITIAL_LOAD_DELAY);\n }}\n documentTitle={{\n formatter: (options, route) =>\n `${String(options?.title ?? route?.name ?? t('login:longAppName'))}`\n }}\n >\n }>\n \n \n {(context) => (\n <>\n \n \n \n \n \n \n \n {(!IS_PROD ||\n Constants.expoConfig?.extra?.DEBUG_MENU === 'true' ||\n context.providerState?.appUserState ===\n AppUserState.IMPERSONATE) && }\n \n )}\n \n \n \n \n )}\n \n \n \n \n \n \n );\n};\n\nexport default IS_WEB ? App : Sentry.wrap(Sentry.withTouchEventBoundary(App));\n\nconst StyledActivityIndicator = styled(ActivityIndicator)`\n flex: 1;\n`;\n","import { endpoint } from 'src/constants';\nimport { Client } from 'src/interfaces';\nimport Appointment from 'src/interfaces/api/Appointment';\nimport { PaginationRS, isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getAppointments = async (\n start?: number,\n length?: number\n): Promise> => {\n const response = await apiClient.get>(\n endpoint('APPOINTMENTS', { start, length })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return data;\n};\n\nexport const getAppointment = async (\n sourceId: Client['sourceId'],\n appointmentId: Appointment['appointmentId']\n) => {\n const response = await apiClient.get(\n endpoint('APPOINTMENT', { appointmentId, sourceId })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return data;\n};\n","import { endpoint } from 'src/constants/api';\nimport { IUserSignInResponse } from 'src/interfaces/IUserSignInResponse';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport {\n SignInRequest,\n SignUpRequest,\n ForgotPasswordRequest,\n ResendConfirmationRequest,\n SwitchPracticeRequest,\n SwitchPracticeResponse\n} from './model';\nimport { mapKeys, snakeCase } from 'lodash';\n\nexport * from './model';\n\nexport const signIn = async (user: SignInRequest): Promise => {\n const response = await apiClient.post(endpoint('USERS_SIGN_IN'), {\n user: mapKeys(user, (_, key) => snakeCase(key))\n });\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const renewSession = async (): Promise => {\n const response = await apiClient.post(endpoint('SESSION_RENEW'));\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const register = async (user: SignUpRequest): Promise => {\n const response = await apiClient.post(endpoint('PET_SIGN_UP'), {\n user: {\n email: user.email,\n password: user.password,\n password_confirmation: user.confirmPassword,\n practice_id: user.practices.map((p) => p.practiceId),\n patient_portal: true\n }\n });\n return response.data;\n};\n\nexport const forgotPassword = async ({\n practiceId,\n clientId,\n email\n}: ForgotPasswordRequest): Promise => {\n await apiClient.post(endpoint('USERS_PASSWORD'), {\n user: {\n email,\n client_id: clientId,\n practice_id: practiceId\n }\n });\n};\n\nexport const resendConfirmationEmail = async ({\n practiceId,\n practiceShortName,\n email\n}: ResendConfirmationRequest): Promise => {\n await apiClient.post(endpoint('CONFIRMATION', { practiceShortName }), {\n user: {\n email,\n practice_id: practiceId\n }\n });\n};\n\nexport const switchPractice = async ({ userId }: SwitchPracticeRequest) => {\n const response = await apiClient.post(endpoint('SWITCH_PRACTICE'), {\n user_id: userId.toString()\n });\n\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport interface PasswordResetError {\n errors: {\n resetPasswordToken?: string[];\n password?: string[];\n passwordConfirmation?: string[];\n };\n}\n\nexport interface PasswordResetRQ {\n token?: string;\n password: string;\n passwordConfirmation: string;\n}\n\nexport const resetPasswordWithToken = async ({\n token,\n password,\n passwordConfirmation\n}: PasswordResetRQ): Promise => {\n await apiClient.put(endpoint('USERS_PASSWORD'), {\n user: {\n resetPasswordToken: token,\n password,\n passwordConfirmation\n }\n });\n};\n","import { AxiosError } from 'axios';\nimport { endpoint } from 'src/constants/api';\nimport { ChangePasswordPayload, ChangePasswordError, Client } from 'src/interfaces/api';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\ninterface PasswordError {\n errors: {\n current_password: string[];\n password: string[];\n };\n}\n\ntype ChangePasswordResponse = Pick;\n\nexport const changePassword = async (\n user: ChangePasswordPayload\n): Promise => {\n try {\n const response = await apiClient.put(endpoint('USERS'), { user });\n return isDefinedOrThrowServerError(response.data);\n } catch (e: unknown) {\n const response = isDefinedOrThrowServerError((e as AxiosError).response?.data);\n const passwordError = new ChangePasswordError({\n current_password: [],\n password: [],\n password_confirmation: []\n });\n\n passwordError.errors.current_password = response.errors.current_password;\n passwordError.errors.password = response.errors.password;\n\n throw passwordError;\n }\n};\n","import { endpoint } from 'src/constants/api';\nimport { ClientPracticeConfiguration } from 'src/interfaces/api';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getClientPracticeConfiguration = async (\n sourceId: number,\n clientId: string\n): Promise => {\n const response = await apiClient.get(\n endpoint('GET_CLIENT_PRACTICE_CONFIG', { sourceId, clientId })\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const patchClientPracticeConfiguration = async (\n clientPracticeConfiguration: ClientPracticeConfiguration\n): Promise => {\n const response = await apiClient.patch(\n endpoint('PATCH_CLIENT_PRACTICE_CONFIG', { id: clientPracticeConfiguration.id }),\n { clientPracticeConfiguration }\n );\n return isDefinedOrThrowServerError(response.data);\n};\n","import { AxiosRequestConfig, GenericAbortSignal } from 'axios';\nimport { endpoint, ENDPOINTS } from 'src/constants';\nimport { Client } from 'src/interfaces/api';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { hasPhoto, isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport createImageFormData, { PictureType } from 'src/utils/createImageFormData';\n\nexport const getClient = async (): Promise => {\n const response = await apiClient.get(ENDPOINTS.CLIENTS);\n const user = isDefinedOrThrowServerError(response.data);\n return { ...user, hasPhoto: hasPhoto(user) };\n};\n\nexport const postClientPhoto = async (\n sourceId: number,\n clientId: string,\n uri: string\n): Promise => {\n const config: AxiosRequestConfig = {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'multipart/form-data'\n }\n };\n\n const formData = await createImageFormData(uri, PictureType.CLIENT);\n\n const response = await apiClient.post(\n endpoint('POST_CLIENT_PHOTO', { sourceId, clientId }),\n formData,\n config\n );\n\n const user = isDefinedOrThrowServerError(response.data);\n return { ...user, hasPhoto: hasPhoto(user) };\n};\n\nexport const deleteClientPhoto = async (sourceId: number, clientId: string): Promise => {\n await apiClient.delete(endpoint('CLIENT_PHOTO_DELETE', { sourceId, clientId }));\n};\n\ninterface GetClientListRQ {\n email: string;\n signal?: GenericAbortSignal;\n}\nexport const getActiveClientList = async ({\n email,\n signal\n}: GetClientListRQ): Promise => {\n const response = await apiClient.get(endpoint('ACTIVE_CLIENT_LIST'), {\n params: {\n email\n },\n signal\n });\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport { Client, Patient } from 'src/interfaces';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\n\ninterface Variables {\n firstName: string;\n lastName: string;\n phoneNumber: string;\n practiceId: number;\n}\n\nexport const clientSearch = async ({ firstName, lastName, phoneNumber, practiceId }: Variables) => {\n const response = await apiClient.get(\n endpoint('CLIENT_SEARCH', { firstName, lastName, phoneNumber, practiceId })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return data;\n};\n\nexport interface ClientPatientSearchParams {\n practiceId: number;\n email?: string;\n phoneNumber?: string;\n}\nexport interface ClientPatientSearchResponse {\n clientId: string;\n patients: Array>;\n}\nexport const clientUnauthenticatedSearch = async ({\n practiceId,\n email,\n phoneNumber\n}: ClientPatientSearchParams) => {\n if (!email) {\n throw new Error('Email is required');\n }\n const response = await unauthenticatedApiClient.get(\n endpoint('CLIENT_UNAUTHENTICATED_SEARCH'),\n { params: { practiceId, email, phoneNumber } }\n );\n const data = isDefinedOrThrowServerError(response.data);\n return data;\n};\n","import { endpoint } from 'src/constants/api';\nimport { apiClient } from 'src/utils/axios';\n\nexport const logout = async (): Promise => {\n await apiClient.get(endpoint('USERS_SIGN_OUT'));\n};\n\nexport const deleteUser = async (): Promise => {\n await apiClient.delete(endpoint('USERS'));\n};\n","import { endpoint } from 'src/constants';\nimport { Employee } from 'src/interfaces';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getEmployees = async (): Promise => {\n const url = endpoint('EMPLOYEES');\n const response = await apiClient.get(url);\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n","import { endpoint } from 'src/constants';\nimport { ApiPracticeInfo } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\nimport PracticeConfiguration from 'src/interfaces/api/PracticeConfiguration';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport { unauthenticatedApiClient } from 'src/utils/axios/unauthenticated';\n\nexport const getPractice = async (practiceId?: number): Promise => {\n if (!practiceId) {\n throw new Error('Practice ID is required');\n }\n const response = await apiClient.get(endpoint('GET_PRACTICE', { id: practiceId }));\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const getPractices = async (): Promise => {\n const response = await apiClient.get(endpoint('GET_PRACTICES'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n\nexport const getPracticeConfiguration = async (\n practiceId: number\n): Promise => {\n const response = await apiClient.get(endpoint('GET_PRACTICE_CONFIG', { practiceId }));\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const getPracticeInfo = async (shortName?: string): Promise => {\n if (!shortName) {\n throw new Error('Practice short name is required');\n }\n const response = await unauthenticatedApiClient.get(\n endpoint('PRACTICE_INFO', {\n shortName\n })\n );\n const data = isDefinedOrThrowServerError(response.data);\n return {\n ...data,\n phoneNumber: data.phoneNumber.replace(/\\D/g, '')\n };\n};\n","import { endpoint } from 'src/constants';\nimport Ability from 'src/interfaces/api/Ability';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getAbility = async (): Promise => {\n const response = await apiClient.get(endpoint('ABILITY'));\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport { EditTodo, NewTodo, Todo } from 'src/interfaces';\nimport { isDefinedOrThrowServerError, PaginationRS } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getAllTodos = async (\n start?: number,\n length?: number,\n isComplete?: boolean,\n dir?: 'asc' | 'desc',\n column?: string\n): Promise> => {\n const response = await apiClient.get>(endpoint('TODOS'), {\n params: { start, length, todo: { isComplete }, order: { dir, column } }\n });\n const todoRS = isDefinedOrThrowServerError(response.data);\n return todoRS;\n};\n\nexport const getTodo = async (id: Todo['id']) =>\n isDefinedOrThrowServerError((await apiClient.get(endpoint('TODO', { id }))).data);\n\nexport const postTodo = async (todo: NewTodo) =>\n isDefinedOrThrowServerError(\n isDefinedOrThrowServerError((await apiClient.post(endpoint('TODOS'), todo)).data)\n );\n\nexport const patchTodo = async (todo: EditTodo) =>\n isDefinedOrThrowServerError(\n await (\n await apiClient.patch(endpoint('TODO', { id: todo.id }), { todo })\n ).data\n );\n\nexport const deleteTodo = async (todo: Todo) =>\n (await apiClient.delete(endpoint('TODO', { id: todo.id }))).data;\n","import { endpoint } from 'src/constants';\nimport Announcement from 'src/interfaces/api/Announcement';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getAnnouncements = async (): Promise => {\n const response = await apiClient.get(endpoint('ANNOUNCEMENTS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n","import { endpoint } from 'src/constants';\nimport Reminder from 'src/interfaces/api/Reminder';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getReminders = async (): Promise => {\n const response = await apiClient.get(endpoint('REMINDERS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n","import { endpoint } from 'src/constants';\nimport Practice from 'src/interfaces/api/Practice';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const practiceSearch = async (\n name: string,\n postalCode: string,\n city: string,\n state: string\n) => {\n const response = await apiClient.get(\n endpoint('PRACTICE_SEARCH', { name, postalCode, city, state })\n );\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport Prescription from 'src/interfaces/api/Prescription';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getPrescriptions = async (): Promise => {\n const response = await apiClient.get(endpoint('PRESCRIPTIONS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n","import { endpoint } from 'src/constants';\nimport EmergencyContact from 'src/interfaces/api/EmergencyContact';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getEmergencyContacts = async (): Promise => {\n const response = await apiClient.get(endpoint('EMERGENCY_CONTACTS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n","import { endpoint } from 'src/constants';\nimport { Schedule, Openings } from 'src/interfaces';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getSchedule = async (practiceId: number): Promise => {\n const url = endpoint('SCHEDULE', {\n practiceId\n });\n\n const response = await apiClient.get(url);\n return isDefinedOrThrowServerError(response.data);\n};\n\ninterface OpeningsParams {\n practiceId: number;\n appointmentTypeId?: number;\n categoryId?: number;\n}\n\nexport const getOpenings = async ({\n practiceId,\n appointmentTypeId,\n categoryId\n}: OpeningsParams): Promise => {\n const url = endpoint('SCHEDULE_OPENINGS', {\n practiceId\n });\n\n const params = {\n appointment_type_id: appointmentTypeId,\n category_id: categoryId\n };\n\n const response = await apiClient.get(url, { params });\n\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport RequestSetting from 'src/interfaces/api/RequestSetting';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getRequestSetting = async (practiceId: number): Promise => {\n const response = await apiClient.get(endpoint('GET_REQUEST_SETTING', { practiceId }));\n return isDefinedOrThrowServerError(response.data);\n};\n","import { AxiosProgressEvent, AxiosRequestConfig } from 'axios';\nimport { endpoint } from 'src/constants';\nimport { Request, MixRequest } from 'src/interfaces/api/Request';\n\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport createImageFormData, { PictureType } from 'src/utils/createImageFormData';\n\nexport const postRequest = async (request: MixRequest): Promise => {\n const response = await apiClient.post(endpoint('REQUESTS'), {\n request\n });\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const uploadRequestPhoto = async (\n uri: string,\n onUploadProgress?: (progressEvent: AxiosProgressEvent) => void,\n abortController?: AbortController\n): Promise<{ id: number }> => {\n const config: AxiosRequestConfig = {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'multipart/form-data'\n },\n signal: abortController?.signal,\n onUploadProgress\n };\n\n const formData = await createImageFormData(uri, PictureType.REQUEST);\n return (await apiClient.post(endpoint('REQUEST_IMAGE'), formData, config)).data;\n};\n\nexport const getRequests = async (): Promise => {\n const response = await apiClient.get(endpoint('REQUESTS'));\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const getRequest = async (id: Request['id']): Promise => {\n const response = await apiClient.get(endpoint(`REQUEST`, { id }));\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const confirmEmail = async ({\n token,\n multipleAccounts,\n email\n}: ConfirmationVariables): Promise => {\n const response = await apiClient.get(endpoint('EMAIL_CONFIRMATION'), {\n params: {\n confirmation_token: token,\n multiple_accounts: multipleAccounts,\n email\n }\n });\n return isDefinedOrThrowServerError(response.data, isConfirmation);\n};\n\nconst isConfirmation = (data: any): data is ConfirmationSuccess => {\n return typeof data.success === 'string';\n};\n\nexport interface ConfirmationVariables {\n token: string;\n multipleAccounts?: boolean;\n email?: string;\n}\n\nexport interface ConfirmationSuccess {\n success: string;\n}\n\nexport interface ConfirmationError {\n confirmation_token: string[];\n email: string[];\n}\n","/**\n * Keys to access members of AsyncStorage\n */\nenum AsyncStorageKeys {\n ANDROID_INITIAL_PN_PROMPT = 'ANDROID_INITIAL_PN_PROMPT',\n BIOMETRIC_AUTH_APP_SETTING = 'BIOMETRIC_AUTH_APP_SETTING',\n CALENDAR_APPOINTMENT = 'CALENDAR_APPOINTMENT',\n DEVICE_TOKEN = 'DEVICE_TOKEN',\n EMAIL_CONFIRMATION_TIMESTAMP = 'EMAIL_CONFIRMATION_TIMESTAMP',\n LAST_REVIEW_REQUEST_DATE = 'LAST_REVIEW_REQUEST_DATE',\n LOCALE_PERSISTENCE_KEY = 'app_locale',\n NOTIFICATION_DECIDED = 'NOTIFICATION_DECIDED',\n REMEMBER_ME = 'REMEMBER_ME',\n TOKEN = 'TOKEN',\n TUTORIALS = 'TUTORIALS',\n TUTORIALS_DISABLED = 'TUTORIALS_DISABLED',\n VISIT_TOKEN = 'VISIT',\n VISITOR_TOKEN = 'VISITOR',\n WHATS_NEW_VIEWED = 'WHATS_NEW_VIEWED'\n}\n\nexport default AsyncStorageKeys;\n","/**\n * Mutation keys for react-query useMutation.\n */\nenum MutationKeys {\n AUTHENTICATION = 'AUTHENTICATION',\n CONFIRMING_APPOINTMENT = 'CONFIRMING_APPOINTMENT',\n DEAUTHENTICATION = 'DEAUTHENTICATION',\n EDITING_TODOS = 'EDITING_TODOS',\n SESSION_RENEW = 'SESSION_RENEW',\n SIGN_UP = 'SIGN_UP',\n PATIENT_PHOTO_UPLOAD = 'PATIENT_PHOTO_UPLOAD',\n SWITCH_PRACTICE = 'SWITCH_PRACTICE',\n LOGGING_OUT = 'LOGGING_OUT',\n CLIENT_SEARCH = 'CLIENT_SEARCH',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n TOKEN_PASSWORD_RESET = 'TOKEN_PASSWORD_RESET',\n PROFILE_PHOTO_UPLOAD = 'PROFILE_PHOTO_UPLOAD',\n PROFILE_PHOTO_DELETE = 'PROFILE_PHOTO_DELETE'\n}\n\nexport default MutationKeys;\n","/**\n * Query keys for react-query useQuery\n */\n\nenum QueryKeys {\n ABILITY = 'ability',\n ANNOUNCEMENTS = 'announcements',\n APPOINTMENT = 'appointment',\n APPOINTMENTS = 'appointments',\n CLIENT = 'Client',\n CLIENT_PRACTICE_CONFIGURATION = 'client_practice_configuration',\n EMERGENCY_CONTACTS = 'emergency_contacts',\n EMPLOYEES = 'employees',\n LIFELEARN_ARTICLES = 'lifelearn_articles',\n LOYALTY_COIN_BALANCE = 'loyalty_coin_balance',\n LOYALTY_TRANSACTIONS = 'loyalty_transactions',\n PATIENT = 'patient',\n PATIENT_APPOINTMENTS = 'patient_appointments',\n PATIENT_PHOTO = 'patient_photo',\n PATIENT_PRESCRIPTIONS = 'patient_prescriptions',\n PATIENT_REMINDERS = 'patient_reminders',\n PATIENTS = 'patients',\n PAGINATED_PATIENTS = 'paginated_patients',\n PAGINATED_PRESCRIPTIONS = 'paginated_prescriptions',\n PAGINATED_REMINDERS = 'paginated_reminders',\n PRACTICE = 'practice',\n PRACTICE_INFO = 'practice_info',\n PRACTICE_SEARCH = 'practice_search',\n PRACTICES = 'practices',\n PRACTICE_CONFIGURATION = 'practice_configuration',\n PRESCRIPTIONS = 'prescriptions',\n REMINDERS = 'reminders',\n REQUEST_SETTING = 'request_setting',\n REQUESTS = 'requests',\n REWARD = 'reward',\n REWARDS = 'rewards',\n SCHEDULE = 'schedule',\n SCHEDULE_OPENINGS = 'schedule_openings',\n TODOS = 'todos',\n PAGED_TODOS = 'paged-todos',\n TODO = 'todo',\n CHECK_EMAIL = 'active_client_list',\n CUSTOM_THEME = 'custom_theme',\n CLIENT_SEARCH = 'client_search',\n ON_DEMAND_SYNC = 'on_demand_sync',\n ON_DEMAND_STATUS = 'on_demand_status',\n WRITEBACK_STATUS = 'writeback_status',\n AUTOFILL_APT = 'autofill_apt',\n AUTOFILL_REFILL = 'autofill_refill'\n}\n\nexport default QueryKeys;\n","import { endpoint } from 'src/constants';\nimport { LifelearnArticlesResponse } from 'src/interfaces';\nimport { LifelearnFeedback } from 'src/interfaces/api/Lifelearn';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getLifelearnArticles = async (): Promise => {\n const response = await apiClient.get(endpoint('GET_LIFELEARN_ARTICLES'));\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const postLifelearnFeedback = async (\n feedback: LifelearnFeedback\n): Promise<{ message: string }> => {\n const response = await apiClient.post(endpoint('POST_LIFELEARN_FEEDBACK'), {\n article_id: feedback.articleId,\n rating: feedback.rating,\n time_spent_in_sec: feedback.timeSpentInSec,\n feedback: feedback.feedback\n });\n return isDefinedOrThrowServerError(response.data);\n};\n","import { endpoint } from 'src/constants';\nimport LoyaltyCoinBalanceTotal from 'src/interfaces/api/LoyaltyCoinBalanceTotal';\nimport LoyaltyTransaction from 'src/interfaces/api/LoyaltyTransaction';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport const getLoyaltyTransactions = async (): Promise => {\n const response = await apiClient.get(endpoint('LOYALTY_TRANSACTIONS'));\n return isDefinedOrThrowServerError(response.data, Array.isArray);\n};\n\nexport const postLoyaltyTransaction = async (rewardId: number): Promise => {\n const response = await apiClient.post(endpoint('LOYALTY_TRANSACTIONS'), {\n type: 'reward',\n rewardId\n });\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const deleteLoyaltyTransaction = async (id: number): Promise =>\n await apiClient.delete(endpoint('DELETE_LOYALTY_TRANSACTION', { id }));\n\nexport const getLoyaltyCoinBalanceTotal = async (): Promise => {\n const response = await apiClient.get(\n endpoint('LOYALTY_COIN_BALANCE_TOTAL')\n );\n return isDefinedOrThrowServerError(response.data.total);\n};\n","import { PATIENT_STATUSES, endpoint } from 'src/constants';\nimport { Patient } from 'src/interfaces';\nimport { isDefinedOrThrowServerError, hasPhoto, PaginationRS } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\n\nexport interface PaginatedPatientsParams {\n length?: number;\n start?: number;\n order?: 'asc' | 'desc';\n orderBy?: keyof Pick;\n search?: string;\n status?: PATIENT_STATUSES;\n}\n\nexport const getPaginatedPatients = async ({\n status,\n order,\n orderBy,\n ...params\n}: PaginatedPatientsParams): Promise> => {\n const response = await apiClient.get>(endpoint('PATIENTS'), {\n params: {\n ...params,\n status: status ?? Object.values(PATIENT_STATUSES),\n order: {\n column: orderBy,\n dir: order\n },\n server_managed: true\n }\n });\n const responseData = isDefinedOrThrowServerError(response.data);\n return {\n ...responseData,\n data: responseData.data.map((p) => ({ ...p, hasPhoto: hasPhoto(p) }))\n };\n};\n","import { AxiosRequestConfig } from 'axios';\nimport { endpoint } from 'src/constants';\nimport { Appointment, Patient } from 'src/interfaces';\nimport Prescription from 'src/interfaces/api/Prescription';\nimport Reminder from 'src/interfaces/api/Reminder';\nimport { isDefinedOrThrowServerError, hasPhoto } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport createImageFormData, { PictureType } from 'src/utils/createImageFormData';\n\nexport { getPaginatedPatients } from './getPaginatedPatients';\n\nexport const getPatients = async (): Promise => {\n const response = await apiClient.get(endpoint('PATIENTS'));\n const patients = isDefinedOrThrowServerError(response.data, Array.isArray);\n return patients.map((p) => ({ ...p, hasPhoto: hasPhoto(p) }));\n};\n\nexport const getPatient = async (sourceId: number, patientId: string): Promise => {\n const url = endpoint('PATIENT', {\n sourceId,\n patientId\n });\n\n const response = await apiClient.get(url);\n const patient = isDefinedOrThrowServerError(response.data);\n return {\n ...patient,\n hasPhoto: hasPhoto(patient),\n insuranceProvider: patient.insuranceProvider ?? '',\n policyNumber: patient.policyNumber ?? '',\n medicalConditions: patient.medicalConditions ?? '',\n diet: patient.diet ?? ''\n };\n};\n\nexport const getPatientAppointments = async (\n sourceId: Patient['sourceId'],\n patientId: Patient['patientId']\n): Promise => {\n const response = await apiClient.get(\n endpoint('GET_PATIENT_APPOINTMENTS', { sourceId, patientId })\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const getPatientPrescriptions = async (\n sourceId: Patient['sourceId'],\n patientId: Patient['patientId']\n): Promise => {\n const response = await apiClient.get(\n endpoint('GET_PATIENT_PRESCRIPTIONS', { sourceId, patientId })\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const getPatientReminders = async (\n sourceId: Patient['sourceId'],\n patientId: Patient['patientId']\n): Promise => {\n const response = await apiClient.get(\n endpoint('GET_PATIENT_REMINDERS', { sourceId, patientId })\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const postPatientPhoto = async (\n sourceId: Patient['sourceId'],\n patientId: Patient['patientId'],\n uri: string\n): Promise => {\n const config: AxiosRequestConfig = {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'multipart/form-data'\n }\n };\n\n const formData = await createImageFormData(uri, PictureType.PATIENT);\n\n const response = await apiClient.post(\n endpoint('POST_PATIENT_PHOTO', { sourceId, patientId }),\n formData,\n config\n );\n\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const patchPatient = async (patient: Patient): Promise => {\n const response = await apiClient.patch(\n endpoint('PATIENT', { sourceId: patient.sourceId, patientId: patient.patientId }),\n {\n patient\n }\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport const deletePatientPhoto = async (\n sourceId: Patient['sourceId'],\n patientId: Patient['patientId']\n): Promise => {\n await apiClient.delete(endpoint('PATIENT_PHOTO_DELETE', { sourceId, patientId }));\n};\n","import { Platform } from 'react-native';\nimport { AsyncStorageKeys } from 'src/api/keys';\nimport storage from './storage';\nimport packageJson from 'package.json';\nimport { getToken } from './firebase';\nimport { AxiosError } from 'axios';\n\nconst generateGenericHeaders = async () => {\n const token = (await storage.getTypedItem(AsyncStorageKeys.TOKEN)) ?? '';\n let sourceToken;\n const headers = new Headers({\n Authorization: `Bearer ${token}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-App-Platform': Platform.OS,\n 'X-App-Version': packageJson.version\n });\n if (!token) {\n const error = new AxiosError('Authentication token is missing', '401');\n error.name = 'Unauthorized';\n error.status = 401;\n throw error;\n }\n try {\n sourceToken = await getToken();\n } finally {\n if (sourceToken) {\n headers.append('Source-Token', sourceToken);\n }\n }\n return headers;\n};\n\nexport default generateGenericHeaders;\n","import { AxiosError } from 'axios';\nimport { Platform } from 'react-native';\nimport { endpoint } from 'src/constants/api';\nimport environment from 'src/environment';\nimport { Client } from 'src/interfaces/api';\nimport Practice from 'src/interfaces/api/Practice';\nimport NotificationCategory from 'src/providers/NotificationProvider/NotificationCategory';\nimport { isDefinedOrThrowServerError } from 'src/utils';\nimport { apiClient } from 'src/utils/axios';\nimport { getToken } from 'src/utils/firebase';\nimport generateGenericHeaders from 'src/utils/generateGenericHeaders';\nimport { NotificationEntry, NotificationStatus } from 'src/utils/remoteNotifications/types';\nimport sentry from 'src/utils/sentry';\n\ninterface PostRegisterRS {\n message: string;\n data: PushNotificationTokenEntry;\n}\n\ninterface PushNotificationTokenEntry {\n clientId: Client['clientId'];\n token: string;\n platform: Platform['OS'];\n createdAt: string;\n practiceId: Client['practiceId'];\n}\n\ninterface PostRegisterRQ {\n deviceToken: string;\n platform: Platform['OS'];\n authToken: string;\n practiceId: Client['practiceId'];\n sourceId: Practice['sourceId'];\n}\n\nexport const postRegister = async ({\n deviceToken,\n platform,\n authToken,\n practiceId,\n sourceId\n}: PostRegisterRQ): Promise => {\n const response = await apiClient.post(\n endpoint('PUSH_REGISTER'),\n { platform, deviceToken, practiceId, sourceId },\n {\n baseURL: environment.PUSH_URL,\n headers: {\n Authorization: `Bearer ${authToken}`\n }\n }\n );\n return isDefinedOrThrowServerError(response.data);\n};\n\nexport interface PostStatusRQ {\n id: string;\n status: NotificationStatus;\n sourceId: Practice['sourceId'];\n practiceId: Client['practiceId'];\n}\n\nexport interface PostStatusRS {\n data: NotificationEntry;\n}\n\n/**\n * Posts the status of a notification to the server. Uses fetch instead of axios to due to lack of react context.\n * @param args\n * @param config\n * @returns\n */\nexport const postStatus = async (args: PostStatusRQ) => {\n const headers = await generateGenericHeaders();\n const response = await fetch(`${environment.PUSH_URL}${endpoint('PUSH_STATUS')}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(args)\n });\n const data = await response.json();\n return data as PostStatusRS;\n};\n\ninterface PostPushRQ {\n type: NotificationCategory;\n sourceId: Practice['sourceId'];\n practiceId: Client['practiceId'];\n}\ninterface PostPushRS {\n notification?: {\n title: string;\n body: string;\n image?: string;\n icon?: string;\n };\n data?: Record;\n sourceId: Practice['sourceId'];\n practiceId: Client['practiceId'];\n pushNotificationId: string;\n audience: [number] | [];\n unavailableAudience: [number] | [];\n}\n\nexport const postSelfPush = async ({ type, practiceId, sourceId }: PostPushRQ) => {\n let sourceToken: string | undefined;\n let response;\n try {\n sourceToken = await getToken();\n } finally {\n response = apiClient.post(\n endpoint('PUSH'),\n {\n practiceId,\n sourceId,\n data: {\n type\n }\n },\n { baseURL: environment.PUSH_URL, headers: { 'source-token': sourceToken } }\n );\n }\n let data;\n try {\n data = (await response)?.data;\n } catch (e) {\n const error = e as AxiosError<{ message: string }>;\n if (error.response?.data?.message.includes('no audience')) {\n sentry.addBreadcrumb({\n message: 'User has no additional devices to send a push notification to',\n data: { type, practiceId, sourceId },\n category: 'info',\n level: 'info'\n });\n } else {\n throw error;\n }\n }\n return data;\n};\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst CalendarConfirmed: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default CalendarConfirmed;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst CalendarPending: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default CalendarPending;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst OfficeBuilding: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default OfficeBuilding;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst Paw: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Paw;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst AutoRenew: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default AutoRenew;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst HairDryer: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default HairDryer;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst MedicalBag: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default MedicalBag;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst Needle: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Needle;\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\nimport IconProps from './IconProps';\n\nconst Pill: React.FC = ({ color, size }) => {\n return (\n \n \n \n );\n};\n\nexport default Pill;\n","import { template } from 'src/utils/strings';\n\nexport const ENDPOINTS = {\n AHOY_VISITS: '/ahoy/visits',\n AHOY_EVENTS: '/ahoy/events',\n USERS: '/users',\n USERS_SIGN_IN: '/users/sign_in',\n USERS_SIGN_OUT: '/users/sign_out',\n USERS_FIND: '/users.json',\n PET_SIGN_UP: '/pet/sign_up',\n USERS_CURRENT: '/users/current',\n CLIENTS: '/clients',\n TERMS: '/terms',\n EULA: 'terms/end-user-license-agreement',\n GET_CLIENT_PRACTICE_CONFIG:\n '/clients/<%= sourceId %>,<%= clientId %>/client_practice_configuration',\n PATCH_CLIENT_PRACTICE_CONFIG: '/client_practice_configurations/<%= id %>',\n GET_PRACTICE: '/practices/<%= id %>',\n GET_PRACTICES: '/practices',\n LOYALTY_COIN_BALANCE_TOTAL: '/loyalty_transactions/loyalty_coin_balance_total',\n LOYALTY_TRANSACTIONS: '/loyalty_transactions',\n REWARDS: '/rewards',\n GET_REWARD: '/rewards/<%= id %>',\n ABILITY: '/ability',\n ANNOUNCEMENTS: '/announcements',\n APPOINTMENTS: '/appointments?start=<%= start %>&length=<%= length %>',\n APPOINTMENT: '/appointments/<%= sourceId %>,<%= appointmentId %>',\n AUTO_FILL_TOKEN: '/auto_fill_token_verifications/<%= token %>',\n PATIENTS: '/patients',\n PATIENT: '/patients/<%= sourceId %>,<%= patientId %>',\n GET_PATIENT_APPOINTMENTS: '/patients/<%= sourceId %>,<%= patientId %>/appointments',\n GET_PATIENT_PRESCRIPTIONS: '/patients/<%= sourceId %>,<%= patientId %>/prescriptions',\n GET_PATIENT_REMINDERS: '/patients/<%= sourceId %>,<%= patientId %>/reminders',\n GET_PRACTICE_CONFIG: '/practices/<%= practiceId %>/practice_configuration',\n POST_CLIENT_PHOTO: '/clients/<%= sourceId %>,<%= clientId %>/photo',\n CLIENT_PHOTO_DELETE: '/clients/<%= sourceId %>,<%= clientId %>/destroy_photo',\n POST_PATIENT_PHOTO: '/patients/<%= sourceId %>,<%= patientId %>/photo',\n PATIENT_PHOTO_DELETE: '/patients/<%= sourceId %>,<%= patientId %>/destroy_photo',\n EMPLOYEES: '/employees',\n DELETE_LOYALTY_TRANSACTION: '/loyalty_transactions/<%= id %>',\n TODOS: '/todos',\n TODO: '/todos/<%= id %>',\n SCHEDULE: '/practice/<%= practiceId %>/schedule',\n SCHEDULE_OPENINGS: '/practice/<%= practiceId %>/schedule/openings',\n REQUESTS: '/requests',\n REQUEST: '/requests/<%= id %>',\n GET_REQUEST_SETTING: '/practices/<%= practiceId %>/request_setting',\n REMINDERS: '/reminders',\n PRESCRIPTIONS: '/prescriptions',\n EMERGENCY_CONTACTS: '/emergency_contacts',\n ACTIVE_CLIENT_LIST: '/active_client_list',\n USERS_PASSWORD: '/users/password',\n CONFIRMATION: '/pet/<%= practiceShortName %>/confirmation',\n EMAIL_CONFIRMATION: '/users/confirmation',\n SWITCH_PRACTICE: '/switch_practice',\n APPOINTMENT_CONFIRMATION: '/appointments/<%= sourceId %>,<%= appointmentId %>/confirm',\n CUSTOM_THEME: '/practice/<%= practiceId %>/mobile_app_setting',\n SESSION_RENEW: '/session_renew/',\n PRACTICE_INFO: '/practice_info/<%= shortName %>',\n REQUEST_IMAGE: '/request_images',\n PRACTICE_SEARCH:\n '/practice_search?name=<%= name %>&postal_code=<%= postalCode %>&city=<%= city %>&state=<%= state %>',\n CLIENT_SEARCH:\n '/client_search?first_name=<%= firstName %>&last_name=<%= lastName %>&phone_number=<%= phoneNumber %>&practice_id=<%= practiceId %>',\n CLIENT_UNAUTHENTICATED_SEARCH: '/client_unauthenticated_search',\n PUSH_REGISTER: '/register',\n PUSH_STATUS: '/status',\n PUSH: '/push',\n GET_LIFELEARN_ARTICLES: '/lifelearn/articles',\n POST_LIFELEARN_FEEDBACK: '/lifelearn/feedback',\n ON_DEMAND_SYNC: '/on_demand/sync/<%= practiceId %>',\n ON_DEMAND_STATUS: '/on_demand/status/<%= practiceId %>',\n REQUEST_STATUS: '/request_status'\n};\n\nexport const endpoint = (\n route: keyof typeof ENDPOINTS,\n variables?: { [key: string]: string | number | boolean | undefined }\n): string => {\n const records = { ...variables };\n if (variables) {\n Object.entries(records).forEach(([key, value]) => {\n if (value) records[key] = encodeURIComponent(value);\n });\n }\n return template(ENDPOINTS[route], records);\n};\n","export enum ErrorName {\n CONNECTION_ERROR = 'Connection Error',\n SERVER_ERROR = 'Server Error',\n REQUEST_ERROR = 'Request Error',\n LOGIN_ERROR = 'Login Error',\n CHANGE_PASSWORD_ERROR = 'Change Password Error'\n}\n\nexport enum ErrorMsg {\n INVALID_RESPONSE = 'Invalid Response'\n}\n","enum TRACKING_EVENTS {\n APPOINTMENT_REQUEST_PAGE = 'Appointment Request Page',\n APPOINTMENT_REQUEST_PAGE_CLIENT_FOUND = 'Appointment Request Page Client Found',\n APPOINTMENT_REQUEST_SUBMITTED = 'Appointment Request Submitted',\n REFILL_REQUEST_PAGE = 'Refill Request Page',\n REFILL_REQUEST_PAGE_CLIENT_FOUND = 'Refill Request Page Client Found',\n REFILL_REQUEST_SUBMITTED = 'Refill Request Submitted'\n}\n\nexport default TRACKING_EVENTS;\n","import { Platform } from 'react-native';\nimport Constants from 'expo-constants';\nimport moment from 'moment-timezone';\nimport { nativeBuildVersion } from 'expo-application';\nimport appPackage from '../../package.json';\n\nexport const APP_ENV = Constants?.expoConfig?.extra?.APP_ENV;\n\nexport const IS_IOS = Platform.OS === 'ios';\nexport const IS_ANDROID = Platform.OS === 'android';\nexport const IS_WEB = Platform.OS === 'web';\nexport const IS_EXPO_GO = Constants.appOwnership === 'expo';\n\nexport const NOTIFICATIONS_SUPPORTED = !IS_WEB && !IS_EXPO_GO;\n\nexport const SCHEME = IS_EXPO_GO ? 'exp' : IS_WEB ? 'http' : 'asteroid';\n\nexport const IS_PROD = APP_ENV === 'PROD';\nexport const IS_DEV = APP_ENV === 'DEV';\nexport const IS_DEBUG = !IS_PROD && !IS_DEV;\n\nexport const MOBILE_WIDTH_EXTRA_SMALL = 375;\nexport const MOBILE_WIDTH_SMALL = 400;\nexport const MOBILE_WIDTH_MAX = 640;\nexport const NOT_MOBILE_WIDTH = 850;\nexport const TABLET_WIDTH_PORTRAIT_MIN = 768;\nexport const TABLET_WIDTH_PORTRAIT_MAX = 1024;\nexport const TABLET_WIDTH_LANDSCAPE_MAX = 1368;\n\nexport const MODAL_EXTRA_SCROLL_HEIGHT = 100;\n\nexport const VERSION_INFO = `v${appPackage.version} ${\n nativeBuildVersion ? `(${nativeBuildVersion})` : ''\n} `;\n\nexport enum Size {\n X5_S = 1,\n X4_S = 2,\n X3_S = 4,\n X2_S = 8,\n XS = 12,\n S = 16,\n M = 24,\n L = 28,\n XL = 32,\n X2_L = 48,\n X3_L = 64,\n X4_L = 72,\n X5_L = 128\n}\n\nexport enum Margin {\n ExtraSmall = Size.X4_S,\n Small = Size.X3_S,\n Medium = Size.X2_S,\n Large = Size.S,\n ExtraLarge = Size.M\n}\n\nexport const PHONE_MASK = '(999) 999-9999';\nexport const INTL_PHONE_MASK = '+9 (999) 999-9999';\nexport const SMS_MASK = '999999';\nconst ZIP_MASK_CANADA = 'SSS SSS';\nconst ZIP_MASK_USA = '99999-9999';\nexport const ZIP_MASK = [ZIP_MASK_USA, ZIP_MASK_CANADA];\n\nexport const ALLY_SUPPORT_EMAIL = 'support@allydvm.com';\n\nexport enum Language {\n en = 'en',\n es = 'es',\n fr = 'fr-ca'\n}\n\nexport enum IconSize {\n XS = 20,\n S = 28,\n M = 32,\n L = 48,\n XL = 96,\n XXL = 128,\n XXXL = 192\n}\nexport const TOP_TAB_WIDTH = 100;\n\nexport const STROKE_WIDTH_DEFAULT = 1.5;\n\nexport const PAGE_LENGTH = 10;\n\nexport const ASCENDING = 'asc';\nexport const DESCENDING = 'desc';\n\nexport const TWO_WAY_TEXTING = 'two_way_texting';\n\nexport const FIXED_INPUT_HEIGHT = 68;\n\nexport const alertOptions: number[] = [\n moment.duration(0, 'seconds').asMinutes(),\n moment.duration(5, 'minutes').asMinutes(),\n moment.duration(15, 'minutes').asMinutes(),\n moment.duration(30, 'minutes').asMinutes(),\n moment.duration(1, 'hour').asMinutes(),\n moment.duration(2, 'hours').asMinutes(),\n moment.duration(1, 'day').asMinutes(),\n moment.duration(2, 'days').asMinutes()\n];\n\nexport const IMAGES_DIRECTORY = 'images';\nexport const OLD_IMAGES_DIRECTORY = 'patient_images';\nexport const IMAGE_CACHE_VERSION = 'v1.0.1';\nexport const DEBUG_CACHE = Constants?.expoConfig?.extra?.DEBUG_CACHE;\nexport const TOKEN = Constants?.expoConfig?.extra?.TOKEN;\nexport const DEBUG_NOTIFICATIONS = Constants?.expoConfig?.extra?.DEBUG_NOTIFICATIONS;\n\nexport const PETPAGE_IOS_APP_STORE = 'https://apps.apple.com/us/app/petpage/id6443568264';\nexport const PETPAGE_PLAY_STORE = 'https://play.google.com/store/apps/details?id=com.allydvm.ast';\nexport const PETPAGE_APP_STORE = IS_ANDROID ? PETPAGE_PLAY_STORE : PETPAGE_IOS_APP_STORE;\n\nexport const HOSTNAME = Constants?.expoConfig?.extra?.REACT_NATIVE_PACKAGER_HOSTNAME as string;\n\nexport const NEW_PET = 'New Pet';\n\nexport const IMG_ASPECT_RATIO_MOBILE = 4 / 3;\nexport const IMG_ASPECT_RATIO_STANDARD = 16 / 9;\n","export default {\n landing: {\n email: 'email',\n password: 'password',\n submit: 'submit'\n },\n home: {\n container: 'homeScreen'\n }\n};\n","export enum PRACTICE_FEATURES {\n LOYALTY_PROGRAM = 'loyalty_program'\n}\n","export enum PATIENT_STATUSES {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n DECEASED = 'deceased'\n}\n\nexport enum GENDER {\n MALE = 'male',\n FEMALE = 'female'\n}\n","export enum Species {\n AVIAN = 'avian',\n BIRD = 'bird',\n BOVINE = 'bovine',\n BUNNY = 'bunny',\n CANINE = 'canine',\n CAT = 'cat',\n COW = 'cow',\n DOG = 'dog',\n EQUINE = 'equine',\n FELINE = 'feline',\n GECKO = 'gecko',\n HORSE = 'horse',\n LAGOMORPH = 'lagomorph',\n OTHER = 'other',\n RODENT = 'rodent'\n}\n","import { Platform } from 'react-native';\nimport { Config } from './Config';\nimport { HOSTNAME, IS_WEB } from 'src/constants';\n\nconst getHostname = (): string => {\n if (IS_WEB) {\n return 'localhost';\n }\n if (HOSTNAME) {\n return HOSTNAME;\n }\n if (Platform.OS === 'android') {\n return `10.0.2.2`;\n } else {\n return 'localhost';\n }\n};\n\nconst firebaseAppId = Platform.select({\n android: '1:859221759384:android:99d12940642616d2c247ed',\n ios: '1:859221759384:ios:d5035204a07b395dc247ed',\n web: '1:859221759384:web:d9050fbd090c22f5c247ed',\n default: ''\n});\n\nexport const debugConfig: Config = {\n API_URL: `http://${getHostname()}:3000`,\n BASE_URL: `http://${getHostname()}:19006`,\n ENVIRONMENT: 'Debug',\n PUSH_URL: `https://9xpw5erfge.execute-api.us-east-1.amazonaws.com/production`,\n FIREBASE: {\n apiKey: 'AIzaSyDVNuDc9tFS4qYMFZAoPVV1WVma0tPQAHo',\n authDomain: 'allydvm-1.firebaseapp.com',\n projectId: 'allydvm-1',\n storageBucket: 'allydvm-1.appspot.com',\n databaseURL: 'https://allydvm-1.firebaseio.com',\n messagingSenderId: '859221759384',\n appId: firebaseAppId\n },\n DEEPLINK_REDIRECT_DOMAINS: [\n 'url5711.notifications.dev.allydvm.com',\n 'url1325.messages.dev.allydvm.com'\n ]\n};\n","import { Platform } from 'react-native';\nimport { Config } from './Config';\n\nconst firebaseAppId = Platform.select({\n android: '1:859221759384:android:c4df232b642bd32fc247ed',\n ios: '1:859221759384:ios:71c2117ecb445ebcc247ed',\n web: '1:859221759384:web:408c10d0e76c6660c247ed',\n default: ''\n});\n\nexport const prodConfig: Config = {\n API_URL: 'https://connect.allydvm.com',\n BASE_URL: 'https://practices.allydvm.com',\n ENVIRONMENT: 'Production',\n PUSH_URL: 'https://push.allydvm.com',\n FIREBASE: {\n apiKey: 'AIzaSyDVNuDc9tFS4qYMFZAoPVV1WVma0tPQAHo',\n authDomain: 'allydvm-1.firebaseapp.com',\n projectId: 'allydvm-1',\n storageBucket: 'allydvm-1.appspot.com',\n databaseURL: 'https://allydvm-1.firebaseio.com',\n messagingSenderId: '859221759384',\n appId: firebaseAppId\n },\n DEEPLINK_REDIRECT_DOMAINS: ['url5711.notifications.allydvm.com', 'url1325.messages.allydvm.com']\n};\n","import { Platform } from 'react-native';\nimport { Config } from './Config';\n\nconst firebaseAppId = Platform.select({\n android: '1:859221759384:android:99d12940642616d2c247ed',\n ios: '1:859221759384:ios:d5035204a07b395dc247ed',\n web: '1:859221759384:web:d9050fbd090c22f5c247ed',\n default: ''\n});\n\nexport const qaConfig: Config = {\n API_URL: 'https://connect.dev.allydvm.com',\n BASE_URL: 'https://practices.dev.allydvm.com',\n ENVIRONMENT: 'Staging',\n PUSH_URL: 'https://push.dev.allydvm.com',\n FIREBASE: {\n apiKey: 'AIzaSyDVNuDc9tFS4qYMFZAoPVV1WVma0tPQAHo',\n authDomain: 'allydvm-1.firebaseapp.com',\n projectId: 'allydvm-1',\n storageBucket: 'allydvm-1.appspot.com',\n databaseURL: 'https://allydvm-1.firebaseio.com',\n messagingSenderId: '859221759384',\n appId: firebaseAppId\n },\n DEEPLINK_REDIRECT_DOMAINS: [\n 'url5711.notifications.dev.allydvm.com',\n 'url1325.messages.dev.allydvm.com'\n ]\n};\n","import { APP_ENV } from 'src/constants';\nimport { Config } from './Config';\nimport { debugConfig } from './config.debug';\nimport { prodConfig } from './config.production';\nimport { qaConfig } from './config.qa';\n\nlet config: Config;\n\nif (APP_ENV === 'PROD') {\n config = prodConfig;\n} else if (APP_ENV === 'DEV') {\n config = qaConfig;\n} else {\n config = debugConfig;\n}\n\nif (__DEV__) {\n console.debug({ APP_ENV, config });\n}\n\nexport default config;\n","import jwtDecode from 'jwt-decode';\nimport _ from 'lodash';\nimport EventEmitter from 'events';\nimport { AsyncStorageKeys, SwitchPracticeResponse, switchPractice, QueryKeys } from 'src/api';\nimport { Client } from 'src/interfaces';\nimport { AvailablePractice } from 'src/interfaces/api/AvailablePractices';\nimport { ROOT_STACK_PATHS } from 'src/routes/stacks/RootStackNavigator/ParamsList';\nimport { Screens } from 'src/routes/stacks/screens';\nimport { storage, isDefined, queryClient } from 'src/utils';\nimport { AuthStatus } from '../../providers/AuthProvider/model';\nimport { TokenPayload } from '../../providers/AuthProvider/token/type';\nimport { UrlInfo } from './model';\n\nexport const pathAndParams = (url: URL) =>\n [url.pathname, url.searchParams.toString()].filter((s) => !!s.trim().length).join('?');\n\nexport const shouldSwitchUsers = async (urlInfo: UrlInfo): Promise => {\n const token = await storage.getTypedItem(AsyncStorageKeys.TOKEN);\n if (!token) {\n return false;\n }\n const { user_id: currentUserId } = jwtDecode(token);\n const targetUserId = urlInfo?.userId;\n return isDefined(targetUserId) && targetUserId !== currentUserId;\n};\n\nexport const handlePracticeSwitch = async (\n urlInfo: UrlInfo,\n applyPractice: (np: SwitchPracticeResponse) => Promise\n) => {\n const token = await storage.getTypedItem(AsyncStorageKeys.TOKEN);\n if (!token) return;\n const user = await queryClient.getQueryData([QueryKeys.CLIENT, token]);\n if (!user) return;\n const availablePractices = await queryClient.getQueryData([\n QueryKeys.CHECK_EMAIL,\n user.email\n ]);\n if (!availablePractices) return;\n const practice = availablePractices?.find((p) => p.userId === urlInfo.userId);\n if (!practice) return;\n const nextPractice = await switchPractice(practice).catch(() => undefined);\n if (!nextPractice) return;\n await applyPractice(nextPractice);\n};\n\nexport const qualifiedAuthStatus = (authStatus: AuthStatus | undefined) => {\n const allowedStatuses = [AuthStatus.AUTHENTICATED, AuthStatus.LOGGED_OUT];\n return isDefined(authStatus) && allowedStatuses.includes(authStatus);\n};\n\nexport const urlAllowsNoAuth = (url: URL) => {\n const noAuthRequiredUris = _(ROOT_STACK_PATHS.screens)\n .pick([\n Screens.PRACTICE_CLIENT_SEARCH,\n Screens.EMAIL_CONFIRMATION,\n Screens.TOKEN_PASSWORD_RESET,\n Screens.ONLINE_BOOKING,\n Screens.REQUESTS_PRODUCT\n ])\n .values();\n return noAuthRequiredUris.includes(url.pathname.replace(/\\//, ''));\n};\n\nexport const isLoginPath = (url: URL) => url.pathname.replace(/^\\//, '') === '';\n\nexport const urlEmitter = new EventEmitter();\n\nexport let urlInfo: UrlInfo | undefined;\n\nexport enum LINKING_ERRORS {\n UNAUTHORIZED = 403,\n NOT_FOUND = 404,\n INVALID = 501,\n NAVIGATION = 500,\n NETWORK = 'NETWORK',\n EXTERNAL = 'EXTERNAL'\n}\n\nexport const cleanURL = (urlString: string) => {\n const url = new URL(urlString);\n if (url.protocol === 'asteroid:') {\n url.pathname = `${url.hostname}/${url.pathname}`.replace(/\\/$/, '');\n url.hostname = '';\n }\n return url;\n};\n","import { useLayoutEffect, useMemo, useState } from 'react';\nimport { Dimensions, useWindowDimensions } from 'react-native';\nimport { DeviceType, getDeviceTypeAsync } from 'expo-device';\nimport {\n IS_WEB,\n MOBILE_WIDTH_MAX,\n MOBILE_WIDTH_SMALL,\n TABLET_WIDTH_PORTRAIT_MAX,\n TABLET_WIDTH_PORTRAIT_MIN\n} from 'src/constants/general';\n\nexport interface ViewModeHook {\n isMobile: boolean;\n isTablet: boolean;\n isWeb: boolean;\n isLandscape: boolean;\n windowWidth: number;\n maxContentWidth: number;\n horizontalInset: number;\n narrowHorizontalInset: number;\n narrowMaxContentWidth: number;\n windowHeight: number;\n}\n\nexport const viewModeDefaults: ViewModeHook = {\n isMobile: true,\n isTablet: false,\n isWeb: false,\n isLandscape: false,\n windowWidth: Dimensions.get('window').width,\n maxContentWidth: Dimensions.get('window').width,\n horizontalInset: 0,\n narrowHorizontalInset: 0,\n narrowMaxContentWidth: 0,\n windowHeight: Dimensions.get('window').height\n};\n\nconst useViewMode = (): ViewModeHook => {\n const { width, height } = useWindowDimensions();\n\n const isLandscape = !IS_WEB && width > height;\n\n const [mode, setMode] = useState(DeviceType.UNKNOWN);\n useLayoutEffect(() => {\n void getDeviceTypeAsync().then((deviceType) => {\n if (deviceType === DeviceType.PHONE || width < MOBILE_WIDTH_MAX) {\n setMode(DeviceType.PHONE);\n } else if (deviceType === DeviceType.TABLET || width < TABLET_WIDTH_PORTRAIT_MAX) {\n setMode(DeviceType.TABLET);\n } else {\n setMode(DeviceType.DESKTOP);\n }\n });\n }, [width]);\n\n const isMobile = mode === DeviceType.PHONE;\n const isTablet = mode === DeviceType.TABLET;\n const isWeb = mode === DeviceType.DESKTOP;\n\n const horizontalInset = Math.max((width - TABLET_WIDTH_PORTRAIT_MIN) / 2, 0);\n const narrowHorizontalInset = Math.max((width - MOBILE_WIDTH_SMALL) / 2, 0);\n const maxContentWidth = Math.min(TABLET_WIDTH_PORTRAIT_MIN, width);\n const narrowMaxContentWidth = isMobile ? width : Math.min(MOBILE_WIDTH_SMALL, width);\n\n return useMemo(\n () => ({\n isMobile,\n isTablet,\n isWeb,\n isLandscape,\n horizontalInset,\n narrowHorizontalInset,\n windowWidth: width,\n maxContentWidth,\n narrowMaxContentWidth,\n windowHeight: height\n }),\n [\n horizontalInset,\n isLandscape,\n isMobile,\n isTablet,\n isWeb,\n maxContentWidth,\n narrowMaxContentWidth,\n narrowHorizontalInset,\n width,\n height\n ]\n );\n};\n\nexport default useViewMode;\n","import { AppColors } from 'src/types/paper';\nimport { UseQueryOptions } from 'react-query';\nimport Practice from './Practice';\nimport { Species } from 'src/constants';\n\nexport interface BasicColors\n extends Pick<\n AppColors,\n | 'primary'\n | 'onPrimary'\n | 'confirmation'\n | 'background'\n | 'surface'\n | 'error'\n | 'text'\n | 'onSurface'\n | 'notification'\n | 'warn'\n > {}\n\nexport interface PracticeTheme {\n useCustomTheme: boolean;\n custom?: {\n dark: BasicColors;\n light: BasicColors;\n };\n}\n\nexport type ApiPracticeInfo = {\n practiceId: Practice['id'];\n sourceId: Practice['sourceId'];\n name: Practice['name'];\n petPageLogo: string | null;\n mobileBannerImage: string | null;\n petSignInImage: string | null;\n theme: PracticeTheme;\n onlineBooking: boolean;\n appointmentBooking: BookingTheme | null;\n website: string | null;\n phoneNumber: string;\n timeZone: string;\n hideBannerImage: boolean;\n\n useGoogleTagManager?: boolean;\n googleTagManagerContainerId: string;\n googleTagManagerContainerId2: string;\n googleAnalyticsMeasurementId?: string;\n};\n\nexport type BookingTheme = {\n backgroundPattern: BackgroundPatternCustomization;\n leftImage: LeftImageCustomization;\n loader: LoaderCustomization;\n};\n\nexport type LoaderCustomization = 'dog_and_cat' | 'empty' | Species;\n\nexport enum LeftImageCustomization {\n CANINE_FELINE_EQUINE_EXOTIC = 'canine_feline_equine_exotic',\n CANINE_FELINE_EQUINE = 'canine_feline_equine',\n CANINE_FELINE_EXOTIC_2 = 'canine_feline_exotic_2',\n CANINE_FELINE_EXOTIC = 'canine_feline_exotic',\n DOG_AND_CAT = 'dog_and_cat',\n EQUINE = 'equine',\n EXOTIC = 'exotic',\n FELINE = 'feline'\n}\n\nexport enum BackgroundPatternCustomization {\n HORSE_SHOES = 'horse_shoes',\n PAWS = 'paws',\n PAWS_AND_HORSESHOES = 'paws_and_horseshoes',\n PAWS_AND_LIZARDS = 'paws_and_lizards'\n}\n\nexport type Options = Omit<\n UseQueryOptions>,\n 'queryFn' | 'queryKey'\n>;\n\nexport type PracticeInfo = Omit & {\n theme: PracticeTheme;\n};\n","import { AppointmentRequest, AppointmentRequestContent } from './AppointmentRequest';\nimport Client from './Client';\nimport { InfoUpdateRequest, InfoUpdateRequestContent } from './InfoUpdateRequest';\nimport Patient from './Patient';\nimport RefillRequest, { RefillRequestContent } from './RefillRequest';\n\nexport interface NewRequest {\n appointmentId?: string;\n archivedAt?: Date;\n clientId?: string;\n content?: AppointmentRequestContent | RefillRequestContent | InfoUpdateRequestContent;\n createdAt?: Date;\n newClient?: boolean;\n notes?: string;\n patient?: PartialPatient;\n patientId?: string;\n practiceId?: number;\n requestImageIds?: number[];\n sourceId?: number;\n type: RequestType;\n updatedAt?: Date;\n updatedBy?: string;\n visitId?: number;\n visitToken?: string;\n visitorToken?: string;\n}\n\nexport enum RequestType {\n Appointment = 'appointment',\n Refill = 'refill',\n InfoUpdate = 'information'\n}\n\nexport enum RequestStatus {\n New = 'new',\n InProgress = 'in_progress',\n Archived = 'archived'\n}\n\nexport type Request = MixRequest & {\n id: number;\n images: ImageAttachment[];\n status: RequestStatus;\n patientId?: Patient['patientId'];\n clientId?: Client['clientId'];\n sourceId: number;\n};\n\nexport type MixRequest = AppointmentRequest | RefillRequest | InfoUpdateRequest;\n\nexport interface ImageAttachment {\n id: number;\n urls: {\n fullScreen: string;\n original: string;\n thumbnail: string;\n };\n}\n\ntype PartialPatient = Pick<\n Patient,\n 'deceasedDate' | 'displayId' | 'name' | 'patientId' | 'practiceId' | 'sourceId' | 'status'\n>;\n","// TODO: Remove this when Nova updates appointments api to include isVirtual\n// Followup ticket: https://allydvm.atlassian.net/browse/AST-126\n\nenum AppointmentType {\n 'DEN', // Dental cleaning\n 'RBS', // Rabies vaccine\n 'TEL', // Telemedicine\n 'VID', // Virtual\n 'DEN1', // Dental cleaning 1\n 'RBS1', // Rabies vaccine 1\n 'TEL1', // Telemedicine 1\n 'VID1' // Virtual 1\n}\n\nexport default AppointmentType;\n","import { ErrorMsg, ErrorName } from 'src/constants/api';\n\nclass ChangePasswordError extends Error {\n errors: {\n current_password: string[];\n password: string[];\n password_confirmation: string[];\n };\n\n constructor(errors: {\n current_password: string[];\n password: string[];\n password_confirmation: string[];\n }) {\n super(ErrorMsg.INVALID_RESPONSE);\n this.errors = errors;\n this.name = ErrorName.CHANGE_PASSWORD_ERROR;\n }\n}\n\nexport default ChangePasswordError;\n","enum EmailVerificationStatus {\n UNKNOWN = 'unknown',\n IN_PROGRESS = 'in_progress',\n VERIFIED = 'verified',\n BAD = 'bad',\n INVALID = 'invalid',\n DECLINED = 'declined',\n BOUNCED = 'bounced',\n SPAM_REPORT = 'spam_report',\n MISSING = 'missing'\n}\n\nexport default EmailVerificationStatus;\n","export interface Todo extends NewTodo {\n id: number;\n createdAt: string; // ISO date string',\n updatedAt: string; // ISO date string'\n sourceId: string;\n clientId: string;\n practiceId: string;\n userId: string;\n todoAlertsAttributes: TodoAlert[];\n}\nexport interface TodoAlert extends NewAlert {\n id: number;\n todoId: Todo['id'];\n createdAt: string; // ISO date string,\n updatedAt: string; // ISO date string;\n _destroy: boolean;\n}\n\nexport interface NewAlert {\n alertByMinutesPrior: number;\n}\n\nexport interface NewTodo {\n id?: number;\n notes?: string | null; // notes provided by user\n todoAlertsAttributes: NewAlert[];\n reason: TodoReason; // The reason will allow the user to perform a specific action in the app\n otherReason?: string | null; // user specified reason,\n allowNotify: boolean;\n isComplete: boolean;\n patientId: string;\n period?: number | null; // number of periods for calculating the next recurrence, must be greater than 0 for the todo to be repeated\n periodUnit?: PeriodUnit | null; // the unit of time for calculating the next recurrence calculating the next recurrence. (hour, day, week, month, year)\n dueDate?: string | null; // ISO date string. A null value indicates no notification will be made\n repeatUntilDate?: string | null; // ISO date string. A non null interval with a null repeated until date indicates the todo is repeated forever.\n}\n\nexport interface EditTodo extends Omit {\n todoAlertsAttributes: Array;\n}\n\nexport enum TodoReason {\n GIVE_MEDICATION = 'GIVE_MEDICATION',\n REFILL_MEDICATION = 'REFILL_MEDICATION',\n VACCINATIONS = 'VACCINATIONS',\n ANNUAL_EXAM = 'ANNUAL_EXAM',\n GROOMING = 'GROOMING',\n OTHER = 'OTHER'\n}\n\nexport enum PeriodUnit {\n YEAR = 'y',\n MONTH = 'M',\n WEEK = 'w',\n DAY = 'd',\n HOUR = 'h',\n MINUTE = 'm'\n}\n\ninterface PeriodUnitMap {\n value: PeriodUnit;\n unitLabel: string;\n repeatLabel: string;\n}\nexport const periodUnitMap: Record = {\n [PeriodUnit.MINUTE]: {\n value: PeriodUnit.MINUTE,\n unitLabel: 'todos:frequency.minute',\n repeatLabel: 'todos:frequency.onceEveryMinute'\n },\n [PeriodUnit.HOUR]: {\n value: PeriodUnit.HOUR,\n unitLabel: 'todos:frequency.hour',\n repeatLabel: 'todos:frequency.onceEveryHour'\n },\n [PeriodUnit.DAY]: {\n value: PeriodUnit.DAY,\n unitLabel: 'todos:frequency.day',\n repeatLabel: 'todos:frequency.onceEveryDay'\n },\n [PeriodUnit.WEEK]: {\n value: PeriodUnit.WEEK,\n unitLabel: 'todos:frequency.week',\n repeatLabel: 'todos:frequency.onceEveryWeek'\n },\n [PeriodUnit.MONTH]: {\n value: PeriodUnit.MONTH,\n unitLabel: 'todos:frequency.month',\n repeatLabel: 'todos:frequency.onceEveryMonth'\n },\n [PeriodUnit.YEAR]: {\n value: PeriodUnit.YEAR,\n unitLabel: 'todos:frequency.year',\n repeatLabel: 'todos:frequency.onceEveryYear'\n }\n};\n\nexport interface TodoData {\n pastDue: Todo[];\n today: Todo[];\n scheduled: Todo[];\n complete: Todo[];\n}\n\nexport const isPeriodUnit = (unit: any): unit is PeriodUnit => {\n return Object.values(PeriodUnit).includes(unit as PeriodUnit);\n};\n","import { NewRequest, RequestType } from './Request';\n\nexport interface AppointmentRequest extends Omit {\n type: RequestType.Appointment;\n content: AppointmentRequestContent;\n newClient?: boolean;\n}\n\nexport interface AppointmentRequestContent {\n preferredDate?: string; // YYYY-MM-DD e.g. \"2023-02-21\"\n preferredTime?: string; // HH:mm e.g. \"11:00 AM\"\n preferredContactMethod?: PreferredContactMethod;\n appointmentLength?: number; // unclear on when this is sent vs length\n appointmentType?: string;\n appointmentTypeId?: number;\n categoryId?: number;\n categoryType?: string;\n column?: string; // \"No Preference\" or from With whom / What resource\n comments?: string;\n emailAddress?: string;\n fullName?: string;\n length?: number; // unclear on when this is sent vs appointmentLength\n phoneNumber?: string;\n smsOptIn?: boolean;\n smsOptOut?: boolean;\n useAppointmentTypes?: boolean;\n petName?: string; // only sent if it's a new pet\n origin?: string; // added so we can more easily track where request is from\n isNewPatient?: boolean;\n petAge?: string;\n breed?: string;\n petSex?: string;\n}\n\nexport enum PreferredContactMethod {\n Email = 'email',\n Phone = 'phone',\n Text = 'text'\n}\n","import AppointmentType from './AppointmentType';\n\nexport interface Schedule {\n id: number;\n practiceId: number;\n type: string;\n createdAt?: Date;\n updatedAt?: Date;\n categoryType?: CategoryType;\n useAppointmentTypes?: boolean;\n allowCategorySelection?: boolean;\n daysInAdvanceMin?: number;\n daysInAdvanceMax?: number;\n allowNoPreference?: boolean;\n requireComments?: boolean;\n appointmentTypes?: ScheduleAppointmentType[];\n categories?: Record;\n}\n\nexport enum CategoryType {\n RESOURCE = 'resource',\n TYPE = 'type',\n EMPLOYEE = 'employee'\n}\n\nexport interface ScheduleAppointmentType {\n id: number;\n description: string;\n length: number;\n createdAt?: Date;\n updatedAt?: Date;\n appointmentType?: AppointmentType;\n categories?: string[];\n appointmentTypeEntries: ScheduleAppointmentTypeEntry[];\n appointmentTypeEntryIds: number[];\n}\n\nexport interface Category {\n id: number;\n description: string;\n descriptionOverride?: string;\n duplicateOfAppointmentCategoryId?: string;\n appointmentLength?: number;\n updatedAt: Date;\n createdAt: Date;\n toggleEntryAppointmentType?: false;\n entries: ScheduleEntry[];\n}\n\ninterface ScheduleEntry {\n id: number;\n startTime?: string;\n endTime?: string;\n updatedAt?: Date;\n createdAt?: Date;\n days?: string[]; // days of week\n breakTimes?: BreakTime[];\n appointmentTypeCount?: number;\n}\n\n// for some reason these don't come through as camelcase\n// probably doesn't matter for us\ninterface ScheduleAppointmentTypeEntry {\n id: number;\n start_time?: string;\n end_time?: string;\n updated_at?: Date;\n created_at?: Date;\n days?: boolean[]; // length 7, true or false for days of week\n owner_id?: number;\n owner_type?: string;\n message: string;\n message_sends?: string;\n all_day?: boolean;\n}\n\ninterface BreakTime {\n breakStartTime: string;\n breakEndTime: string;\n}\n\nexport interface Openings {\n [key: string]: string[];\n}\n","import { Dispatch, SetStateAction } from 'react';\nimport { UseMutateAsyncFunction } from 'react-query';\nimport { ExtendedSignInRequest, SignUpRequest, SwitchPracticeResponse } from 'src/api';\nimport { IUserSignInResponse, Client } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\n\nexport enum AuthStatus {\n AUTHENTICATED,\n NEEDS_TERMS,\n NEEDS_PASSWORD_RESET,\n NEEDS_UPGRADE,\n LOGGED_OUT,\n FORBIDDEN,\n NEEDS_BIOMETRIC,\n SWITCHING_PRACTICE\n}\n\nexport interface Context {\n token: string | undefined;\n ready: boolean;\n logIn: UseMutateAsyncFunction;\n logOut: (switchPractice?: SwitchPracticeResponse) => Promise;\n signUp: UseMutateAsyncFunction;\n resetError: () => void;\n isError: boolean;\n error: Error | undefined;\n setError: Dispatch>;\n /**\n * This user is not guaranteed to be defined. useUser where possible.\n */\n _user?: Client | undefined;\n authStatus: AuthStatus | undefined;\n isLoggingOut: boolean;\n setAuthStatus: Dispatch>;\n isLoggedIn: boolean;\n practice: Practice | undefined;\n}\n","import { AndroidChannel, IOSNotificationCategoryAction } from '@notifee/react-native';\nimport { NotificationCategory } from './NotificationCategory';\n\nexport const CHANNELS: { [k in NotificationCategory]: AndroidChannel } = {\n [NotificationCategory.TODO]: {\n id: NotificationCategory.TODO,\n name: 'To Do reminders',\n sound: 'default',\n vibration: true\n },\n [NotificationCategory.GENERAL]: {\n id: NotificationCategory.GENERAL,\n name: 'General notifications',\n sound: 'default',\n vibration: true\n },\n [NotificationCategory.CONFIRMATION_UPDATE]: {\n id: NotificationCategory.CONFIRMATION_UPDATE,\n name: 'Confirmation status updates',\n sound: 'default',\n vibration: true\n },\n [NotificationCategory.TO_DO_UPDATE]: {\n id: NotificationCategory.TO_DO_UPDATE,\n name: 'To Do Updates',\n sound: 'default',\n vibration: true\n }\n};\n\nexport const CATEGORIES: IOSNotificationCategoryAction[] = [\n {\n id: NotificationCategory.TODO,\n title: 'View todo',\n foreground: true,\n authenticationRequired: true\n },\n {\n id: NotificationCategory.GENERAL,\n title: 'Notification',\n foreground: true,\n authenticationRequired: true\n },\n {\n id: NotificationCategory.CONFIRMATION_UPDATE,\n title: 'Receive confirmation email updates',\n foreground: true,\n authenticationRequired: true\n },\n {\n id: NotificationCategory.TO_DO_UPDATE,\n title: 'Receive todo notification updates',\n foreground: true,\n authenticationRequired: true\n }\n];\n\nexport const notificationCategoryOrDefault = (category: string | undefined) => {\n return category && Object.values(NotificationCategory).includes(category as NotificationCategory)\n ? (category as NotificationCategory)\n : NotificationCategory.GENERAL;\n};\n","import { Linking } from 'react-native';\nimport { SCHEME } from 'src/constants';\n\nexport const navigateToPath = async (path: string) => {\n await Linking.openURL(`${SCHEME}://${path}`);\n};\n\nexport const navigateToTodos = () => {\n void navigateToPath('/to-dos');\n};\n","import { Client } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\nimport { NotificationCategory } from 'src/providers/NotificationProvider/NotificationCategory';\n\nexport interface NotificationEntry {\n id: string;\n status: NotificationStatus;\n sourceId: Practice['sourceId'];\n practiceId: Client['practiceId'];\n deliveredAt?: string;\n openedAt?: string;\n dismissedAt?: string;\n createdAt?: string;\n deletedAt?: string;\n data: Record;\n}\n\nexport enum NotificationStatus {\n DELIVERED = 'DELIVERED',\n OPENED = 'OPENED',\n DISMISSED = 'DISMISSED',\n QUEUED = 'QUEUED',\n SENT = 'SENT',\n FAILED = 'FAILED',\n UNDELIVERABLE = 'UNDELIVERABLE'\n}\n\nexport interface NotifeeOptions {\n image: string;\n ios: {\n attachments: Array<{ url: string; thumbnailHidden: boolean }>;\n foregroundPresentationOptions: {\n alert: boolean;\n badge: boolean;\n sound: boolean;\n list: boolean;\n };\n };\n}\n\nexport interface Metadata {\n id: string;\n userId: number;\n practiceId: Practice['id'];\n sourceId: Practice['sourceId'];\n deviceToken: string;\n}\n\nexport interface RemoteMessageData {\n $metadata: string;\n data: string;\n fcm_options: {\n image: string;\n };\n headers: { [key: string]: string };\n notifee_options: NotifeeOptions;\n notification: string;\n url?: string;\n}\n\nexport interface NotificationData {\n type: NotificationCategory;\n [key: string]: string;\n}\n","import { isPeriodUnit, Patient, PeriodUnit, Todo, TodoAlert } from 'src/interfaces';\nimport notifee, {\n AndroidCategory,\n AndroidImportance,\n Event,\n EventDetail,\n EventType,\n Notification,\n Trigger,\n TriggerNotification,\n TriggerType\n} from '@notifee/react-native';\nimport moment, { MomentInput } from 'moment-timezone';\nimport { NotificationCategory } from './NotificationCategory';\nimport { CHANNELS } from './ChannelsAndCategories';\nimport { navigateToTodos } from 'src/utils/linking';\nimport { todoAlertId, todoBody, todoTitle } from './notificationIdGenerators';\nimport { debounce, defaultsDeep, isNumber } from 'lodash';\nimport { DEBUG_NOTIFICATIONS } from 'src/constants';\nimport { postStatus } from 'src/api/push';\nimport { urlEmitter } from 'src/hooks/useDeeplink/helper';\nimport { Linking } from 'react-native';\nimport { NotificationStatus } from 'src/utils/remoteNotifications/types';\nimport { palette } from 'src/theme';\n\ninterface TodoNotification extends Notification {\n id: string;\n data: {\n category: 'Todo';\n todoAlertId: string;\n period?: number;\n periodUnit?: PeriodUnit;\n alertByMinutesPrior?: number;\n dueDate: Date;\n notes: string;\n };\n}\n\ninterface TodoTriggerNotification extends TriggerNotification {\n notification: TodoNotification;\n}\n\n/**\n * Extracts alerts from a todo list into dictionary.\n * @param todos\n * @returns\n */\nconst extractAlerts = (todos: Todo[]) => {\n const alerts: Record = {};\n todos.forEach(({ todoAlertsAttributes }) => {\n todoAlertsAttributes.forEach((alert) => {\n alerts[todoAlertId(alert)] = alert;\n });\n });\n return alerts;\n};\n\n/**\n * Fetches pending notifications on the system categorized as TODO.\n * @returns\n */\nconst getTodoNotifications = async () =>\n (await notifee.getTriggerNotifications()).filter(\n ({ notification }) => notification.data?.category === NotificationCategory.TODO\n ) as TodoTriggerNotification[];\n\n/**\n * Cancels any pending TODO system notifications that have been deleted from the todos api.\n * @param todos\n */\nconst cancelDeletedTodos = async (todos: Todo[]) => {\n const alerts = extractAlerts(todos);\n const notifications = await getTodoNotifications();\n notifications.forEach(({ notification: { data, id } }) => {\n if (!alerts[data.todoAlertId]) {\n void notifee.cancelTriggerNotification(id);\n }\n });\n};\n\n/**\n * Generates a trigger configuration based on a todo repeat type\n * @param todo\n * @param alert\n * @returns Trigger\n */\n\nconst generateTrigger = (todo: Todo, alert: TodoAlert): Trigger | undefined => {\n if (todo.isComplete || !todo.dueDate || !todo.allowNotify) {\n return;\n }\n\n if (todo.periodUnit && todo.period) {\n const diff = calculateNextAlert(\n todo.dueDate,\n todo.periodUnit,\n todo.period,\n alert.alertByMinutesPrior\n );\n return {\n type: TriggerType.TIMESTAMP,\n timestamp: diff.valueOf()\n };\n }\n\n const timestamp = moment(todo.dueDate).subtract(alert.alertByMinutesPrior ?? 0, 'minutes');\n if (timestamp.isAfter(moment())) {\n return {\n type: TriggerType.TIMESTAMP,\n timestamp: timestamp.valueOf()\n };\n }\n};\n\n/**\n * Schedules an alert notification for a todo.\n * @param todo\n * @param alert\n * @returns\n */\nconst scheduleTodoAlert = async (todo: Todo, alert: TodoAlert, patients: Patient[]) => {\n const trigger = generateTrigger(todo, alert);\n const patientName = patients.find((p) => p.patientId === todo.patientId)?.name;\n if (!trigger) return;\n const nextNotification = {\n id: todoAlertId(alert),\n title: todoTitle(todo, patientName),\n body: todoBody(todo, alert, trigger),\n data: generateTodoData(todo, alert, trigger),\n ...addDeviceSettings(NotificationCategory.TODO)\n };\n await notifee.createTriggerNotification(nextNotification, trigger);\n};\n\n/**\n * Adds device specific settings to notification to fire properly.\n * @param t\n * @returns\n */\nexport const addDeviceSettings = (type: NotificationCategory) => ({\n android: {\n channelId: CHANNELS[type].id,\n pressAction: {\n id: 'default'\n },\n category: AndroidCategory.REMINDER,\n importance: AndroidImportance.HIGH,\n smallIcon: 'notification_icon',\n color: palette.AB_ELECTRIC_BLUE\n },\n ios: {\n categoryId: type,\n sound: 'default'\n }\n});\n\nexport const generateTodoData = (todo: Todo, alert: TodoAlert, trigger: Trigger) => {\n const todoDetails = {\n category: NotificationCategory.TODO,\n todoAlertId: alert.id,\n todoId: todo.id,\n alertByMinutesPrior: alert.alertByMinutesPrior ?? 0\n };\n\n if (isNumber(todo.period) && isPeriodUnit(todo.periodUnit) && moment(todo.dueDate).isValid()) {\n Object.assign(todoDetails, {\n period: todo.period,\n periodUnit: todo.periodUnit,\n dueDate: todo.dueDate\n });\n }\n\n if (trigger.type === TriggerType.TIMESTAMP && trigger.timestamp) {\n Object.assign(todoDetails, {\n alertTimestamp: moment(trigger.timestamp).toISOString()\n });\n }\n\n return todoDetails;\n};\n\n/**\n * Cancels notifications if the corresponding todo does not exist on the todos list.\n * Updates or creates notifications for each alert in the todos list.\n * @param todos\n */\nexport const scheduleTodos = debounce(async (todos: Todo[], patients: Patient[]) => {\n await cancelDeletedTodos(todos);\n for (const todo of todos) {\n for (const alertOffset of todo.todoAlertsAttributes) {\n await scheduleTodoAlert(todo, alertOffset, patients);\n }\n }\n}, 1000);\n\n/**\n * Handles a notification action by category\n */\nexport const handlePressAction = async (detail: EventDetail) => {\n reportStatus(NotificationStatus.OPENED, detail.notification);\n const url = detail.notification?.data?.url;\n if (typeof url === 'string') {\n const match = url.match(/^((https:\\/\\/practices(.dev)?.allydvm.com)|(asteroid:\\/\\/))/);\n if (match) {\n const $meta = detail.notification?.data?.$metadata;\n const metadata = typeof $meta === 'string' ? JSON.parse($meta) : $meta;\n urlEmitter.emit('url', { url, userId: metadata.userId });\n } else if (url.match(/^https:\\/\\//) && (await Linking.canOpenURL(url))) {\n void Linking.openURL(url);\n }\n } else {\n const { category } = detail.notification?.data ?? {};\n switch (category) {\n case NotificationCategory.TODO:\n navigateToTodos();\n }\n }\n};\n\n/**\n * Handles a notification delivery by category\n */\nconst handleDelivered = (detail: EventDetail) => {\n const { category } = detail.notification?.data ?? {};\n reportStatus(NotificationStatus.DELIVERED, detail.notification);\n switch (category) {\n case NotificationCategory.TODO:\n rescheduleRepeatingTodoAlert(detail.notification);\n break;\n }\n};\n\n/**\n * Schedules repeating alerts for a todo after delivery.\n * @param notification\n * @returns\n */\nconst rescheduleRepeatingTodoAlert = (notification?: Notification) => {\n const { data } = notification ?? {};\n if (\n !notification?.data ||\n !data ||\n !isNumber(data.period) ||\n !isPeriodUnit(data.periodUnit) ||\n !moment(data?.dueDate).isValid() ||\n !isNumber(data.alertByMinutesPrior)\n )\n return;\n\n const nextAlertTimestamp = calculateNextAlert(\n data.alertTimestamp,\n data.periodUnit,\n data.period,\n 0,\n 1\n );\n\n const trigger: Trigger = {\n type: TriggerType.TIMESTAMP,\n timestamp: nextAlertTimestamp.valueOf()\n };\n\n const nextAlertBody = todoBody(\n data,\n {\n alertByMinutesPrior: data.alertByMinutesPrior\n },\n trigger\n );\n\n const nextNotification = defaultsDeep(\n {\n data: { alertTimestamp: nextAlertTimestamp.toISOString() },\n body: nextAlertBody\n },\n notification\n );\n void notifee.createTriggerNotification(nextNotification, trigger);\n};\n\n/**\n * Listener for notification events on notifee onBackgroundEvent and onForegroundEvent methods\n */\nexport const notificationEventListener = async ({ type, detail }: Event) => {\n if (DEBUG_NOTIFICATIONS) {\n console.debug(\n '[DEBUG_NOTIFICATIONS]',\n EventType[type],\n JSON.stringify(detail.notification?.id)\n );\n }\n switch (type) {\n case EventType.DELIVERED:\n handleDelivered(detail);\n break;\n case EventType.ACTION_PRESS:\n case EventType.PRESS:\n void handlePressAction(detail);\n break;\n case EventType.DISMISSED:\n handleDismissed(detail);\n break;\n default:\n }\n};\n\n/**\n * Calculates the next alert for a repeating todo.\n * Note, this has issues repeating alerts at an interval of once every minute.\n *\n * @param dueDate\n * @param periodUnit\n * @param period\n * @param alertByMinutesPrior\n * @returns\n */\nconst calculateNextAlert = (\n dueDate: MomentInput,\n periodUnit: PeriodUnit,\n period: number,\n alertByMinutesPrior = 0,\n minInterval = 0\n) => {\n const timestamp = moment(dueDate).subtract(alertByMinutesPrior ?? 0, 'minutes');\n const intervalIncrease = Math.max(\n Math.ceil(moment().diff(timestamp, periodUnit, true) / period),\n minInterval\n );\n const nextAlert = timestamp.clone().add(intervalIncrease * period, periodUnit);\n return nextAlert;\n};\n\nconst handleDismissed = (detail: EventDetail) => {\n reportStatus(NotificationStatus.DISMISSED, detail.notification);\n};\n\nconst reportStatus = (status: NotificationStatus, notification?: Notification) => {\n if (typeof notification?.data?.$metadata === 'string') {\n const $metadata = JSON.parse(notification.data.$metadata);\n void postStatus({\n id: $metadata.id,\n status,\n sourceId: $metadata.sourceId,\n practiceId: $metadata.practiceId\n });\n }\n};\n","import notifee from '@notifee/react-native';\nimport _ from 'lodash';\nimport { CATEGORIES, CHANNELS } from './ChannelsAndCategories';\nimport { notificationEventListener } from './helpers';\n\nvoid notifee.createChannels(_.values(CHANNELS));\nvoid notifee.setNotificationCategories(CATEGORIES);\nnotifee.onBackgroundEvent(notificationEventListener);\nnotifee.onForegroundEvent(notificationEventListener);\n","export enum NotificationCategory {\n TODO = 'TODO',\n GENERAL = 'GENERAL',\n TO_DO_UPDATE = 'TO_DO_UPDATE',\n CONFIRMATION_UPDATE = 'CONFIRMATION_UPDATE'\n}\n\nexport default NotificationCategory;\n","import { TimestampTrigger, Trigger, TriggerType } from '@notifee/react-native';\nimport { t } from 'i18next';\nimport moment, { Moment } from 'moment-timezone';\nimport { Patient, Todo, TodoAlert } from 'src/interfaces';\nimport { ReasonMap } from 'src/scenes/ToDos/ToDoList/components/model';\nimport { toLocalDateTime } from 'src/utils/date';\n\nconst isTimestampTrigger = (trigger?: Trigger): trigger is TimestampTrigger =>\n trigger?.type === TriggerType.TIMESTAMP;\n\ninterface ShadowAlert {\n alertByMinutesPrior: number;\n}\n\ntype ShadowTodo = Pick;\n\nexport const todoAlertId = (todo: TodoAlert) => `todo-${todo.id}`;\nexport const todoTitle = (todo: Todo, patientName?: Patient['name']) =>\n [\n patientName,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n String(todo.otherReason || t(ReasonMap[todo.reason].label, { ns: 'todos' }) || todo.reason)\n ]\n .filter((v) => !!v)\n .join(' - ');\n\nexport const todoBody = (\n todo: ST,\n alert: SA,\n trigger: Trigger\n) => {\n if (!isTimestampTrigger(trigger)) return;\n let useDate: Moment;\n if (!todo.periodUnit || !todo.period) {\n useDate = moment(todo.dueDate).utc();\n } else {\n useDate = calculateUpcomingDueDate(todo, alert, trigger);\n }\n return [toLocalDateTime(useDate), todo.notes].join('\\n').trim();\n};\n\n/**\n * Calculates the next alert for a repeating todo.\n * Note, this has issues repeating alerts at an interval of once every minute.\n *\n * @param dueDate\n * @param periodUnit\n * @param period\n * @param alertByMinutesPrior\n * @returns\n */\nexport const calculateUpcomingDueDate = (\n todo: ST,\n alert: SA,\n trigger: TimestampTrigger\n) => {\n if (moment().isBefore(todo.dueDate)) {\n return moment(todo.dueDate).utc();\n }\n\n const triggerAlert = moment(trigger.timestamp);\n return triggerAlert.add(alert.alertByMinutesPrior, 'm');\n};\n","import { Appointment, Patient } from 'src/interfaces';\nimport { PathConfig } from 'src/routes/types';\nimport { Screens } from '../screens';\n\nexport type AppointmentStackParamsList = {\n [Screens.APPOINTMENTS]?: {\n id?: Patient['patientId'];\n };\n [Screens.APPOINTMENT_DETAILS]: {\n id: Appointment['appointmentId'];\n };\n};\n\nexport const APPOINTMENT_STACK_PATHS: PathConfig = {\n initialRouteName: Screens.APPOINTMENTS,\n path: 'appointment',\n screens: {\n [Screens.APPOINTMENTS]: '',\n [Screens.APPOINTMENT_DETAILS]: 'details'\n }\n};\n\nexport default AppointmentStackParamsList;\n","import { LifelearnArticle } from 'src/interfaces';\nimport { Screens } from '../screens';\nimport { PathConfig } from 'src/routes/types';\n\ntype HomeStackParamsList = {\n [Screens.ARTICLE]: {\n id: LifelearnArticle['id'];\n };\n [Screens.ARTICLES_HUB]?: undefined;\n [Screens.HOME]?: undefined;\n [Screens.HELP_CENTER]?: undefined;\n [Screens.PROFILE_ROOT]?: undefined;\n [Screens.PROFILE_USERINFO]?: undefined;\n [Screens.PROFILE_APPSETTINGS]?: undefined;\n [Screens.PROFILE_CLIENT_PRACTICE_CONFIGURATION]?: undefined;\n};\n\nexport const HOME_STACK_PATHS: PathConfig = {\n initialRouteName: Screens.HOME,\n screens: {\n [Screens.ARTICLE]: 'article',\n [Screens.ARTICLES_HUB]: 'articles',\n [Screens.HOME]: 'home',\n [Screens.HELP_CENTER]: 'help',\n [Screens.PROFILE_ROOT]: 'profile',\n [Screens.PROFILE_USERINFO]: 'profile/info',\n [Screens.PROFILE_APPSETTINGS]: 'profile/app-settings',\n [Screens.PROFILE_CLIENT_PRACTICE_CONFIGURATION]: 'profile/communication'\n }\n};\n\nexport default HomeStackParamsList;\n","import { PathConfig } from 'src/routes/types';\nimport { Screens } from '../screens';\n\nexport type LoyaltyTabParamsList = {\n [Screens.LOYALTY_REWARDS]?: undefined;\n [Screens.LOYALTY_ACTIVITY]?: undefined;\n};\n\nexport const LOYALTY_TAB_PATHS: PathConfig = {\n initialRouteName: Screens.LOYALTY_REWARDS,\n path: 'loyalty',\n screens: {\n [Screens.LOYALTY_REWARDS]: 'rewards',\n [Screens.LOYALTY_ACTIVITY]: 'activity'\n }\n};\n\nexport default LoyaltyTabParamsList;\n","import { PathConfig } from 'src/routes/types';\nimport { Screens } from '../screens';\n\nexport type PatientStackParamsList = {\n [Screens.PATIENT_LIST]?: undefined;\n};\n\nexport const PET_STACK_PATHS: PathConfig = {\n initialRouteName: Screens.PATIENT_LIST,\n path: 'pet',\n screens: {\n [Screens.PATIENT_LIST]: ''\n }\n};\n\nexport default PatientStackParamsList;\n","import { PathConfig } from 'src/routes/types';\nimport { Screens } from '../screens';\n\nexport type TodoStackParamList = {\n [Screens.TO_DOS]?: {\n selectedPatientId?: string;\n };\n [Screens.ADD_TO_DO]?: {\n todoId?: number;\n };\n};\n\nexport const TODO_STACK_PATHS: PathConfig = {\n initialRouteName: Screens.TO_DOS,\n path: 'to-dos',\n screens: {\n [Screens.TO_DOS]: '',\n [Screens.ADD_TO_DO]: 'add'\n }\n};\n\nexport default TodoStackParamList;\n","import { PathConfig } from 'src/routes/types';\nimport { Screens } from '../screens';\n\nexport type RequestStackParamList = {\n [Screens.REQUEST]?: {\n selectedPatientId?: string;\n };\n [Screens.REQUEST_DETAILS]?: {\n requestId?: number;\n };\n};\n\nexport const REQUEST_STACK_PATHS: PathConfig = {\n initialRouteName: Screens.REQUEST,\n path: 'requests',\n screens: {\n [Screens.REQUEST]: '',\n [Screens.REQUEST_DETAILS]: 'detail'\n }\n};\n\nexport default RequestStackParamList;\n","import { NavigatorScreenParams } from '@react-navigation/native';\nimport { PathConfig } from 'src/routes/types';\nimport AppointmentStackParamsList, {\n APPOINTMENT_STACK_PATHS\n} from '../AppointmentStackNavigator/ParamsList';\nimport HomeStackParamsList, { HOME_STACK_PATHS } from '../HomeStackNavigator/ParamsList';\nimport LoyaltyTabParamsList, { LOYALTY_TAB_PATHS } from '../LoyaltyTabNavigator/ParamsList';\nimport { Navigators } from '../navigators';\nimport PatientStackParamsList, { PET_STACK_PATHS } from '../PatientStackNavigator/ParamsList';\nimport TodoStackParamList, { TODO_STACK_PATHS } from '../ToDoStackNavigator/ParamsList';\nimport RequestStackParamList, { REQUEST_STACK_PATHS } from '../RequestStackNavigator/ParamsList';\n\ntype BottomTabParamsList = {\n [Navigators.HOME_STACK]: NavigatorScreenParams;\n [Navigators.LOYALTY_STACK]: NavigatorScreenParams;\n [Navigators.APPOINTMENTS_STACK]: NavigatorScreenParams;\n [Navigators.PET_STACK]: NavigatorScreenParams;\n [Navigators.TODO_STACK]: NavigatorScreenParams;\n [Navigators.REQUEST_STACK]: NavigatorScreenParams;\n};\n\nexport const BOTTOM_TAB_PATHS: PathConfig = {\n initialRouteName: Navigators.HOME_STACK,\n screens: {\n [Navigators.HOME_STACK]: HOME_STACK_PATHS,\n [Navigators.LOYALTY_STACK]: LOYALTY_TAB_PATHS,\n [Navigators.APPOINTMENTS_STACK]: APPOINTMENT_STACK_PATHS,\n [Navigators.PET_STACK]: PET_STACK_PATHS,\n [Navigators.TODO_STACK]: TODO_STACK_PATHS,\n [Navigators.REQUEST_STACK]: REQUEST_STACK_PATHS\n }\n};\n\nexport default BottomTabParamsList;\n","import { Appointment, Patient, Reward } from 'src/interfaces';\nimport LoyaltyTransaction from 'src/interfaces/api/LoyaltyTransaction';\nimport { PathConfig } from 'src/routes/types';\nimport BottomTabParamsList, { BOTTOM_TAB_PATHS } from '../BottomTabNavigator/ParamsList';\nimport { Navigators } from '../navigators';\nimport { Screens } from '../screens';\nimport PatientProfileParams from 'src/scenes/PatientProfile/patientProfileParams';\n\nexport type MainStackParamsList = {\n [Navigators.BOTTOM_TAB_STACK]: BottomTabParamsList;\n [Screens.LOYALTY_REWARD]: {\n id: Reward['id'];\n };\n [Screens.TRANSACTION_DETAILS]: {\n id?: LoyaltyTransaction['id'];\n isExpiredItem?: boolean;\n expireAmount?: number;\n expireDate?: Date;\n };\n [Screens.REMINDERS]?: {\n id?: Patient['patientId'];\n };\n [Screens.PRESCRIPTIONS]?: {\n id?: Patient['patientId'];\n };\n [Screens.PATIENT_ID]?: {\n id: Patient['patientId'];\n };\n [Screens.SELECT_PRACTICE]?: undefined;\n [Screens.CONTACT_US]?: undefined;\n [Screens.AFTER_HOURS]?: undefined;\n [Screens.ADD_TO_CALENDAR]?: {\n id?: Appointment['appointmentId'];\n species?: string;\n };\n [Screens.BIOMETRIC_LOGIN_OPT_IN]?: undefined;\n [Screens.PATIENT_PROFILE]: PatientProfileParams;\n [Screens.PROFILE_INFORMATION_UPDATE]?: undefined;\n [Navigators.PATIENT_UPDATE_STACK_NAVIGATOR]?: undefined;\n};\n\nexport const MAIN_STACK_PATHS: PathConfig = {\n initialRouteName: Navigators.BOTTOM_TAB_STACK,\n screens: {\n [Navigators.BOTTOM_TAB_STACK]: BOTTOM_TAB_PATHS,\n [Screens.LOYALTY_REWARD]: 'loyalty-reward',\n [Screens.TRANSACTION_DETAILS]: 'transaction-details',\n [Screens.REMINDERS]: 'pet-reminders',\n [Screens.PRESCRIPTIONS]: 'pet-prescriptions',\n [Screens.PATIENT_ID]: 'pet-id',\n [Screens.SELECT_PRACTICE]: 'practices',\n [Screens.CONTACT_US]: 'contact-us',\n [Screens.AFTER_HOURS]: 'emergency',\n [Screens.ADD_TO_CALENDAR]: 'add-to-calendar',\n [Screens.BIOMETRIC_LOGIN_OPT_IN]: 'biometric-log-in-opt-in',\n [Screens.PATIENT_PROFILE]: 'patient-profile',\n [Screens.PROFILE_INFORMATION_UPDATE]: 'profile-information-update',\n [Navigators.PATIENT_UPDATE_STACK_NAVIGATOR]: 'request-patient-update'\n }\n};\n\nexport default MainStackParamsList;\n","import { NavigatorScreenParams } from '@react-navigation/native';\nimport { Client } from 'src/interfaces';\nimport Practice from 'src/interfaces/api/Practice';\nimport { PathConfig } from 'src/routes/types';\nimport MainStackParamsList, { MAIN_STACK_PATHS } from '../MainStack/ParamsList';\nimport { Navigators } from '../navigators';\nimport { Screens } from '../screens';\n\nexport type RootStackParamList = {\n [Screens.LANDING]?: {\n practice?: Practice['shortName'];\n email?: Client['email'];\n };\n [Screens.ACCEPT_TERMS]?: undefined;\n [Screens.RESET_PASSWORD_REQUIRED]?: undefined;\n [Navigators.MAIN_STACK]: NavigatorScreenParams;\n [Screens.PET_PAGE_DISABLED]: undefined;\n [Screens.PRACTICE_CLIENT_SEARCH]: undefined;\n [Screens.EMAIL_CONFIRMATION]?: {\n token?: string;\n multipleAccounts?: boolean;\n email?: string;\n };\n [Screens.BIOMETRIC_LOGIN_AUTH]?: undefined;\n [Screens.TOKEN_PASSWORD_RESET]?: {\n token: string;\n };\n [Screens.PUSH_NOTIFICATIONS_OPT_IN]?: undefined;\n [Screens.ONLINE_BOOKING]?: {\n practice?: string;\n token?: string;\n patientId?: string;\n };\n [Screens.REQUESTS_PRODUCT]: {\n practice?: string;\n token?: string;\n patientId?: string;\n };\n [Screens.SANDBOX]?: undefined;\n};\n\nexport const ROOT_STACK_PATHS: PathConfig = {\n screens: {\n [Navigators.MAIN_STACK]: MAIN_STACK_PATHS,\n [Screens.LANDING]: '',\n [Screens.ACCEPT_TERMS]: 'terms',\n [Screens.RESET_PASSWORD_REQUIRED]: 'reset-password-required',\n [Screens.PET_PAGE_DISABLED]: 'no-access',\n [Screens.PRACTICE_CLIENT_SEARCH]: 'practice-client-search',\n [Screens.EMAIL_CONFIRMATION]: 'email-confirmation',\n [Screens.BIOMETRIC_LOGIN_AUTH]: 'biometric-login',\n [Screens.TOKEN_PASSWORD_RESET]: 'password-reset',\n [Screens.PUSH_NOTIFICATIONS_OPT_IN]: 'notifications',\n [Screens.ONLINE_BOOKING]: 'online-booking',\n [Screens.SANDBOX]: 'sandbox',\n [Screens.REQUESTS_PRODUCT]: 'product-request'\n }\n};\n\nexport default RootStackParamList;\n","export enum Navigators {\n BOTTOM_TAB_STACK = 'Tabs',\n HOME_STACK = 'Home',\n MAIN_STACK = 'Main',\n REQUEST_STACK = 'Request',\n\n LOYALTY_STACK = 'Loyalty',\n APPOINTMENTS_STACK = 'Appointment',\n PET_STACK = 'Pets',\n TODO_STACK = 'Todo',\n PATIENT_UPDATE_STACK_NAVIGATOR = 'PATIENT_UPDATE_STACK_NAVIGATOR'\n}\n","export enum Screens {\n ACCEPT_TERMS = 'accept-terms',\n ADD_TO_CALENDAR = 'add-to-calendar',\n ADD_TO_DO = 'add-todo',\n AFTER_HOURS = 'after-hours',\n APPOINTMENTS = 'appointments',\n APPOINTMENT_DETAILS = 'appointment-details',\n APPOINTMENT_REQUEST = 'appointment-request',\n ARTICLE = 'article',\n ARTICLES_HUB = 'articles-hub',\n BIOMETRIC_LOGIN_AUTH = 'biometric-login-auth',\n BIOMETRIC_LOGIN_OPT_IN = 'biometric-login-opt-in',\n CONTACT_US = 'contact-us',\n EMAIL_CONFIRMATION = 'email-confirmation',\n HELP_CENTER = 'help-center',\n HOME = 'home',\n LANDING = 'landing',\n LOYALTY_ACTIVITY = 'loyalty-activity',\n LOYALTY_REWARD = 'loyalty-reward',\n LOYALTY_REWARDS = 'loyalty-rewards',\n ONLINE_BOOKING = 'online-booking',\n PATIENT_ID = 'patient-id',\n PATIENT_LIST = 'my-pets',\n PATIENT_PROFILE = 'patient-profile',\n PET_PAGE_DISABLED = 'no-access',\n PRACTICE_CLIENT_SEARCH = 'practice-client-search',\n PRESCRIPTIONS = 'prescriptions',\n PROFILE_APPSETTINGS = 'app-settings',\n PROFILE_CLIENT_PRACTICE_CONFIGURATION = 'communication-settings',\n PROFILE_INFORMATION_UPDATE = 'information-update-request',\n PROFILE_ROOT = 'profile',\n PROFILE_USERINFO = 'user-info',\n PUSH_NOTIFICATIONS_OPT_IN = 'push-notifications-opt-in',\n REMINDERS = 'reminders',\n RESET_PASSWORD_REQUIRED = 'reset-password',\n REQUESTS_INFORMATION_UPDATE = 'profile-information-update',\n REQUESTS_PATIENT_SELECTOR = 'request-patient-selector',\n REQUESTS_PRODUCT = 'requests-product',\n SANDBOX = 'sandbox',\n SELECT_PRACTICE = 'select-practice',\n TO_DOS = 'to-dos',\n TOKEN_PASSWORD_RESET = 'token-password-reset',\n TRANSACTION_DETAILS = 'transaction-details',\n REQUEST = 'request',\n REQUEST_DETAILS = 'request-details'\n}\n","import { MoreHorizontal } from 'react-native-feather';\nimport { AutoRenew, HairDryer, IconProps, MedicalBag, Needle, Pill } from 'src/components/Icons';\nimport { UseBooleanHook } from 'src/hooks/useBoolean';\nimport { Patient, Todo, TodoReason } from 'src/interfaces';\nimport { AppColors } from 'src/types/paper';\nimport { STEPS } from './tour';\n\nexport interface TodoData {\n pastDue: Todo[];\n today: Todo[];\n scheduled: Todo[];\n complete: Todo[];\n}\n\ninterface PropSection {\n icon: React.FC;\n description: string;\n color: keyof AppColors;\n}\n\nexport const exampleToDo: Todo = {\n id: 0,\n reason: TodoReason.GIVE_MEDICATION,\n allowNotify: false,\n isComplete: false,\n patientId: '',\n createdAt: '',\n updatedAt: '',\n sourceId: '',\n clientId: '',\n practiceId: '',\n userId: '',\n todoAlertsAttributes: []\n};\n\nexport const dummyPatient: Patient = {\n sourceId: 0,\n patientId: '',\n practiceId: 0,\n name: 'Rover',\n diet: '',\n displayId: null,\n birthdate: null,\n deceasedDate: null,\n insuranceProvider: '',\n status: '',\n species: 'dog',\n breed: '',\n sex: '',\n photoUrl: '',\n photo: {\n urls: {\n small: '',\n original: '',\n large: ''\n }\n },\n policyNumber: '',\n hasPhoto: false,\n weight: '',\n weightUnit: '',\n medicalConditions: '',\n rabiesTag: '',\n microchipNumber: ''\n};\n\nexport interface Section {\n title: string;\n step: STEPS;\n guideText: string;\n expanded: UseBooleanHook;\n data: Todo[];\n fallback?: {\n shouldDisplayPlaceholder: () => boolean;\n emptyPlaceholder: React.JSX.Element;\n };\n completed?: boolean;\n}\n\nexport const propSections: PropSection[] = [\n {\n icon: Pill,\n description: 'todos:list.medication',\n color: 'accent'\n },\n {\n icon: Needle,\n description: 'todos:list.vaccine',\n color: 'warn'\n },\n {\n icon: HairDryer,\n description: 'todos:list.grooming',\n color: 'notification'\n },\n {\n icon: MoreHorizontal,\n description: 'todos:list.more',\n color: 'text'\n }\n];\n\nexport interface ReasonItem {\n label: string;\n value: TodoReason;\n icon: React.FC;\n color: keyof AppColors;\n}\n\nexport const ReasonMap: {\n [k in TodoReason]: ReasonItem;\n} = {\n [TodoReason.GIVE_MEDICATION]: {\n label: 'todos:reasons.giveMedication',\n value: TodoReason.GIVE_MEDICATION,\n icon: Pill,\n color: 'accent'\n },\n [TodoReason.REFILL_MEDICATION]: {\n label: 'todos:reasons.refillMedication',\n value: TodoReason.REFILL_MEDICATION,\n icon: AutoRenew,\n color: 'error'\n },\n [TodoReason.VACCINATIONS]: {\n label: 'todos:reasons.vaccinations',\n value: TodoReason.VACCINATIONS,\n icon: Needle,\n color: 'warn'\n },\n [TodoReason.ANNUAL_EXAM]: {\n label: 'todos:reasons.annualExam',\n value: TodoReason.ANNUAL_EXAM,\n icon: MedicalBag,\n color: 'minorAccent'\n },\n [TodoReason.GROOMING]: {\n label: 'todos:reasons.grooming',\n value: TodoReason.GROOMING,\n icon: HairDryer,\n color: 'notification'\n },\n [TodoReason.OTHER]: {\n label: 'todos:reasons.other',\n value: TodoReason.OTHER,\n icon: MoreHorizontal,\n color: 'text'\n }\n};\n","const palette = {\n AB_ELECTRIC_BLUE: '#00B4E6',\n ALLY_BLUE_DARK: '#00789A',\n ALLY_BLACK: '#121212',\n ALLY_SURFACE_BLACK: '#1E1E1E',\n WARN_YELLOW: '#E5A300',\n AB_BRIGHT_WHITE: '#FFF',\n EGG_WHITE: '#FFFDFB',\n BLACK: '#000',\n TRANSPARENT: '#FFFFFF00',\n PURPLE: '#9747FF',\n GREY_SHADOW_80: '#D8D8D8CC',\n\n WHITE_OPACITY_10: '#FFFFFF1A',\n WHITE_OPACITY_20: '#FFFFFF33',\n WHITE_OPACITY_30: '#FFFFFF4D',\n WHITE_OPACITY_38: '#FFFFFF61',\n WHITE_OPACITY_54: '#FFFFFF8A',\n WHITE_OPACITY_70: '#FFFFFFB3',\n\n BLACK_OPACITY_10: '#0000001A',\n BLACK_OPACITY_20: '#00000033',\n BLACK_OPACITY_26: '#00000042',\n BLACK_OPACITY_30: '#0000004D',\n BLACK_OPACITY_38: '#00000061',\n BLACK_OPACITY_54: '#0000008A',\n BLACK_OPACITY_70: '#000000B3',\n\n LIGHT_GREY: '#E7E7E7',\n DARK_GREY: '#161616',\n GREEN_ACCENT: '#00CD93',\n GREEN_ACCENT_DARK: '#009A6E',\n GOLD: '#A38A00',\n GOLD_DARK: '#FFE55C',\n SOLID_GREY: '#C4C4C4',\n SURFACE_GREY: '#313131',\n RED_WARNING: '#c22800',\n AB_SOLAR_YELLOW: '#FAEB1E',\n AB_STONE_GRAY: '#464646',\n AB_STONE_GREY_10: '#ECECEC',\n AB_MUSHROOM: '#796E65',\n AB_MUSHROOJM_50: '#BCB7B2'\n};\n\nexport default palette;\n","import {\n configureFonts,\n MD2DarkTheme as DarkTheme,\n MD2LightTheme as LightTheme\n} from 'react-native-paper';\nimport { Size } from 'src/constants';\nimport { viewModeDefaults } from 'src/hooks/useViewMode';\nimport { colorShade } from 'src/utils/colorValues';\nimport palette from './palette';\nimport { themeFontsConfig } from './typography';\nimport { AppTheme } from 'src/types/paper';\n\nexport const defaultLightTheme: AppTheme = {\n ...LightTheme,\n roundness: Size.X3_S,\n colors: {\n ...LightTheme.colors,\n primary: palette.AB_ELECTRIC_BLUE,\n onPrimary: palette.AB_BRIGHT_WHITE,\n warn: palette.WARN_YELLOW,\n confirmation: palette.GREEN_ACCENT,\n minorAccent: palette.PURPLE,\n text: palette.ALLY_BLACK,\n opaquePlaceholder: palette.SOLID_GREY,\n disabled: palette.BLACK_OPACITY_26,\n placeholder: palette.BLACK_OPACITY_54,\n error: palette.RED_WARNING,\n onSurface: palette.ALLY_BLACK\n },\n fonts: configureFonts({\n config: {\n ios: themeFontsConfig,\n android: themeFontsConfig,\n web: themeFontsConfig\n },\n isV3: false\n }),\n viewMode: viewModeDefaults\n};\n\nexport const defaultDarkTheme: AppTheme = {\n ...DarkTheme,\n roundness: Size.X3_S,\n colors: {\n ...DarkTheme.colors,\n surface: palette.ALLY_SURFACE_BLACK,\n primary: colorShade(palette.AB_ELECTRIC_BLUE, 0.5),\n onPrimary: palette.AB_BRIGHT_WHITE,\n warn: palette.WARN_YELLOW,\n confirmation: palette.GREEN_ACCENT_DARK,\n minorAccent: palette.PURPLE,\n opaquePlaceholder: palette.SOLID_GREY,\n disabled: palette.WHITE_OPACITY_38,\n placeholder: palette.WHITE_OPACITY_54\n },\n fonts: configureFonts({\n config: {\n ios: themeFontsConfig,\n android: themeFontsConfig,\n web: themeFontsConfig\n },\n isV3: false\n }),\n viewMode: viewModeDefaults\n};\n","import { Fonts } from 'react-native-paper/lib/typescript/src/types';\n\nexport enum FontSize {\n CAPTION = 14,\n BODY = 16,\n SUBHEADING = 18,\n HEADLINE = 20,\n TITLE = 24\n}\n\nexport const fonts = {\n roboto: {\n thin: 'Roboto_100Light',\n light: 'Roboto_300Light',\n regular: 'Roboto_400Regular',\n medium: 'Roboto_500Medium',\n bold: 'Roboto_700Bold',\n black: 'Roboto_900Black',\n thinItalic: 'Roboto_100Light_Italic',\n lightItalic: 'Roboto_300Light_Italic',\n regularItalic: 'Roboto_400Regular_Italic',\n mediumItalic: 'Roboto_500Medium_Italic',\n semiboldItalic: 'Roboto_600Semibold_Italic',\n boldItalic: 'Roboto_700Bold_Italic',\n blackItalic: 'Roboto_900Black_Italic'\n }\n};\n\nexport enum Weight {\n THIN = '100',\n LIGHT = '300',\n REGULAR = '400',\n MEDIUM = '500',\n BOLD = '700',\n BLACK = '900'\n}\n\nexport const WeightNames: { [w in Weight]: string } = {\n [Weight.THIN]: 'Thin',\n [Weight.LIGHT]: 'Light',\n [Weight.REGULAR]: 'Regular',\n [Weight.MEDIUM]: 'Medium',\n [Weight.BOLD]: 'Bold',\n [Weight.BLACK]: 'Black'\n};\n\nexport const themeFontsConfig: Fonts = {\n light: {\n fontFamily: fonts.roboto.light,\n fontWeight: Weight.LIGHT\n },\n regular: {\n fontFamily: fonts.roboto.regular,\n fontWeight: Weight.REGULAR\n },\n medium: {\n fontFamily: fonts.roboto.medium,\n fontWeight: Weight.MEDIUM\n },\n thin: {\n fontFamily: fonts.roboto.thin,\n fontWeight: Weight.THIN\n }\n};\n","export enum ALLY_ERROR_CODE {\n NEED_TO_ACCEPT_TERMS = 1001,\n PASSWORD_RESET_REQUIRED = 1002,\n CLIENT_NEEDS_UPGRADE = 1003\n}\n\nexport interface AllyError {\n allyErrorCode?: ALLY_ERROR_CODE;\n error: string;\n}\n","import config from 'src/environment';\nimport axios, { AxiosError } from 'axios';\nimport { t } from 'i18next';\nimport { AllyError, ALLY_ERROR_CODE } from './model';\nimport { AuthStatus } from 'src/providers/AuthProvider/model';\nimport { Platform } from 'react-native';\nimport packageConfig from '../../../package.json';\nconst GENERIC_ERROR_FALLBACK = 'Oh no!';\n\nexport const apiClient = axios.create({\n baseURL: config.API_URL\n});\n\napiClient.defaults.headers.common = {};\napiClient.defaults.headers.common.Accept = 'application/json';\napiClient.defaults.headers.common['Content-Type'] = 'application/json';\napiClient.defaults.headers.Authorization = null;\napiClient.defaults.headers['X-App-Version'] = packageConfig.version;\napiClient.defaults.headers['X-App-Platform'] = Platform.OS;\n\nexport const impersonateApiClient = axios.create({\n baseURL: config.API_URL\n});\nimpersonateApiClient.defaults.headers.common = {};\nimpersonateApiClient.defaults.headers.common.Accept = 'application/json';\nimpersonateApiClient.defaults.headers.common['Content-Type'] = 'application/json';\n\nexport const responseFailureInterceptor = (\n error: AxiosError\n): AuthStatus | undefined => {\n const allyErrorCode = error?.response?.data?.allyErrorCode;\n\n if (allyErrorCode === ALLY_ERROR_CODE.NEED_TO_ACCEPT_TERMS) {\n error.message = t('1001', { ns: 'onboardingErrors' });\n error.name = t('userActionRequired', { ns: 'onboardingErrors' });\n return AuthStatus.NEEDS_TERMS;\n } else if (allyErrorCode === ALLY_ERROR_CODE.PASSWORD_RESET_REQUIRED) {\n error.message = t('1002', { ns: 'onboardingErrors' });\n error.name = t('userActionRequired', { ns: 'onboardingErrors' });\n return AuthStatus.NEEDS_PASSWORD_RESET;\n } else if (allyErrorCode === ALLY_ERROR_CODE.CLIENT_NEEDS_UPGRADE) {\n error.message = t('1003', { ns: 'onboardingErrors' });\n error.name = t('userActionRequired', { ns: 'onboardingErrors' });\n return AuthStatus.NEEDS_UPGRADE;\n } else if (error?.response?.status === 401) {\n error.message = t('401', { ns: 'onboardingErrors' });\n error.name = t('userActionRequired', { ns: 'onboardingErrors' });\n return AuthStatus.LOGGED_OUT;\n } else if (error?.response?.status === 403) {\n error.message = t('403', { ns: 'onboardingErrors' });\n error.name = t('accessDenied', { ns: 'onboardingErrors' });\n return AuthStatus.FORBIDDEN;\n } else {\n error.message =\n error?.response?.data?.error ??\n t('errorMessage', { ns: 'genericError' }) ??\n GENERIC_ERROR_FALLBACK;\n error.name = t('errorName', { ns: 'genericError' });\n return undefined;\n }\n};\n\nexport * from './model';\n","import axios from 'axios';\nimport { Platform } from 'react-native';\nimport packageConfig from '../../../package.json';\nimport config from 'src/environment';\nexport const unauthenticatedApiClient = axios.create({\n baseURL: config.API_URL\n});\n\nunauthenticatedApiClient.defaults.headers.common = {};\nunauthenticatedApiClient.defaults.headers.common.Accept = 'application/json';\nunauthenticatedApiClient.defaults.headers.common['Content-Type'] = 'application/json';\nunauthenticatedApiClient.defaults.headers.Authorization = null;\nunauthenticatedApiClient.defaults.headers['X-App-Version'] = packageConfig.version;\nunauthenticatedApiClient.defaults.headers['X-App-Platform'] = Platform.OS;\n","import { HOSTNAME, IS_ANDROID } from 'src/constants';\n\nfunction cleanUrl(url: string): string;\nfunction cleanUrl(url?: string): undefined;\nfunction cleanUrl(url?: string): string | undefined {\n return __DEV__ && IS_ANDROID && HOSTNAME ? url?.replace('localhost:', `${HOSTNAME}:`) : url;\n}\n\nexport default cleanUrl;\n","const colorToValue = (color: string): number => {\n const rgbMatch = color.match(/^rgba?\\((\\d+), ?(\\d+), ?(\\d+),? ?(\\d+?(\\.\\d+)?)?\\)$/);\n\n if (rgbMatch) {\n const [, red, green, blue] = rgbMatch;\n return rgbToNumber(parseInt(red), parseInt(green), parseInt(blue));\n }\n\n const hexMatch = color.match(\n /^#([\\da-fA-F]{1,2})([\\da-fA-F]{1,2})([\\da-fA-F]{1,2})([\\da-fA-F]{1,2})?$/\n );\n if (hexMatch) {\n const [, red, green, blue] = hexMatch;\n return rgbToNumber(parseInt(red, 16), parseInt(green, 16), parseInt(blue, 16));\n }\n throw new Error(`${color} is not a valid color`);\n};\n\nconst rgbToNumber = (red: number, green: number, blue: number): number =>\n red * 0.299 + green * 0.587 + blue * 0.114;\n\nexport const isDarkColor = (value: string): boolean => colorToValue(value) < 186;\nexport default colorToValue;\n\nexport const colorShade = (color: string, percentage: number) => {\n color = color.replace(/^#/, '');\n if (color.length === 3) color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n\n const match = color.match(/.{2}/g);\n if (match) {\n let [_r, _g, _b, _a] = match;\n\n const [r, g, b] = [\n Math.floor(parseInt(_r, 16) * percentage),\n Math.floor(parseInt(_g, 16) * percentage),\n Math.floor(parseInt(_b, 16) * percentage)\n ];\n\n _r = Math.max(Math.min(255, r), 0).toString(16);\n _g = Math.max(Math.min(255, g), 0).toString(16);\n _b = Math.max(Math.min(255, b), 0).toString(16);\n\n const rr = (_r.length < 2 ? '0' : '') + _r;\n const gg = (_g.length < 2 ? '0' : '') + _g;\n const bb = (_b.length < 2 ? '0' : '') + _b;\n\n return `#${rr}${gg}${bb}${_a ?? ''}`;\n }\n\n return color;\n};\n\nexport const transparent = (color: string, percentage: number) => {\n color = color.replace(/^#/, '');\n if (color.length === 3) color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n\n const match = color.match(/.{2}/g);\n if (match) {\n const [r, g, b] = match;\n const a = Math.max(Math.min(255, Math.floor(percentage * 255)), 0)\n .toString(16)\n .padStart(2, '0');\n color = `#${r}${g}${b}${a}`;\n }\n return color;\n};\n","import * as mime from 'mime';\nimport moment from 'moment-timezone';\nimport { IS_WEB } from 'src/constants';\n\nexport enum PictureType {\n CLIENT = 'client',\n PATIENT = 'patient',\n REQUEST = 'request_image'\n}\n\nconst keyMap: { [k in PictureType]: string } = {\n [PictureType.CLIENT]: 'photo',\n [PictureType.PATIENT]: 'photo',\n [PictureType.REQUEST]: 'image'\n};\n\nconst createImageFormData = async (uri: string, pictureType: PictureType): Promise => {\n const dateTimeStamp = moment().unix().toString();\n const formData = new FormData();\n if (IS_WEB) {\n const photoBlob = await fetch(uri).then(async (i) => await i.blob());\n formData.append(`${pictureType}[${keyMap[pictureType]}]`, photoBlob, dateTimeStamp);\n } else {\n formData.append(`${pictureType}[${keyMap[pictureType]}]`, {\n uri,\n name: dateTimeStamp,\n type: mime.getType(uri)\n } as any);\n }\n\n return formData;\n};\n\nexport default createImageFormData;\n","import i18next, { t } from 'i18next';\nimport moment, { Moment, tz } from 'moment-timezone';\n\nexport const toLocalDateTime = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n day: 'numeric',\n year: 'numeric',\n month: 'long',\n hour: 'numeric',\n minute: 'numeric',\n timeZoneName: 'short',\n timeZone\n }).format(m.toDate());\n\nexport const toLocalShortDateTime = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n day: 'numeric',\n year: 'numeric',\n month: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n timeZoneName: 'short',\n timeZone\n }).format(m.toDate());\n\nexport const timeReference = (m: Moment, today: Moment = moment()) => {\n const date = moment(m);\n if (moment(today).isAfter(date)) {\n return t('wasOn', {\n ns: 'timeReference',\n day: date.format('dddd'),\n time: date.format('h:mm A')\n });\n }\n if (moment(today).isSame(date, 'day')) {\n return t('todayAt', {\n ns: 'timeReference',\n day: date.format('dddd'),\n time: date.format('h:mm A')\n });\n }\n if (moment(today).add(1, 'day').isSame(date, 'day')) {\n return t('tomorrowAt', {\n ns: 'timeReference',\n day: date.format('dddd'),\n time: date.format('h:mm A')\n });\n }\n if (moment(date).diff(today, 'week') < 1) {\n return t('thisWeekAt', {\n ns: 'timeReference',\n day: date.format('dddd'),\n time: date.format('h:mm A')\n });\n }\n if (moment(date).diff(today, 'week') < 2) {\n return t('nextWeekAt', {\n ns: 'timeReference',\n day: date.format('dddd'),\n time: date.format('h:mm A')\n });\n }\n return t('onXDate', {\n ns: 'timeReference',\n day: date.format(t('shortDate')),\n time: date.format('h:mm A')\n });\n};\n\nexport const toLocalDate = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n day: 'numeric',\n year: 'numeric',\n month: 'long',\n timeZone\n }).format(m.toDate());\n\nexport const toLocalTime = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n hour: 'numeric',\n minute: 'numeric',\n timeZoneName: 'short',\n timeZone\n }).format(m.toDate());\n\nexport const toLocalShortDate = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n day: 'numeric',\n year: 'numeric',\n month: 'numeric',\n timeZone\n }).format(m.toDate());\n\nexport const toLocalMonthYear = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n year: 'numeric',\n month: 'long',\n timeZone\n }).format(m.toDate());\n\nexport const toLocalMonthDayTime = (m: Moment, timeZone = tz.guess()) =>\n Intl.DateTimeFormat(i18next.language, {\n day: 'numeric',\n month: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n timeZone\n }).format(m.toDate());\n\nexport const isWithin30days = (m: Moment) => {\n const diff = moment(m).diff(moment(), 'days');\n return diff <= 30 && diff > -1;\n};\n","import { ViewStyle, StyleSheet } from 'react-native';\n\nconst extractStyles = (\n style: ViewStyle | undefined\n): {\n innerStyle: ViewStyle;\n outerStyle: ViewStyle;\n} => {\n if (!style) {\n return {\n innerStyle: {},\n outerStyle: {}\n };\n }\n\n const {\n backgroundColor,\n\n padding,\n paddingBottom,\n paddingEnd,\n paddingLeft,\n paddingRight,\n paddingHorizontal,\n paddingStart,\n paddingTop,\n paddingVertical,\n\n borderRadius,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderBottomRightRadius,\n borderBottomLeftRadius,\n borderBottomEndRadius,\n borderBottomStartRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n\n borderBottomColor,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopWidth,\n borderWidth,\n\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n\n gap,\n rowGap,\n columnGap,\n\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n\n aspectRatio,\n height,\n width,\n minHeight,\n minWidth,\n maxHeight,\n maxWidth,\n\n ...rest\n } = style;\n\n const borderProps = {\n borderBottomColor,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopWidth,\n borderWidth\n };\n\n const borderRadiusProps = {\n borderRadius,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderBottomRightRadius,\n borderBottomLeftRadius,\n borderBottomEndRadius,\n borderBottomStartRadius,\n borderTopRightRadius,\n borderTopStartRadius\n };\n\n const paddingProps = {\n padding,\n paddingBottom,\n paddingEnd,\n paddingLeft,\n paddingRight,\n paddingHorizontal,\n paddingStart,\n paddingTop,\n paddingVertical\n };\n\n const contentAlignmentProps = {\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n gap,\n rowGap,\n columnGap\n };\n\n const shadowProps = {\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius\n };\n\n const backgroundProps = {\n backgroundColor\n };\n\n const sizingProps = {\n aspectRatio,\n height,\n width,\n minHeight,\n minWidth,\n maxHeight,\n maxWidth\n };\n\n const innerStyle = StyleSheet.flatten([\n backgroundProps,\n borderProps,\n borderRadiusProps,\n paddingProps,\n contentAlignmentProps,\n shadowProps,\n sizingProps\n ]);\n\n const outerStyle = StyleSheet.flatten([rest, borderRadiusProps]);\n\n return {\n innerStyle: filterUndefined(innerStyle),\n outerStyle: filterUndefined(outerStyle)\n };\n};\n\nexport default extractStyles;\n\nconst filterUndefined = (obj: Record) =>\n Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined));\n","/**\n * This file is used to mock the firebase messaging module on the web.\n */\n\nimport { FirebaseApp, initializeApp, getApps } from 'firebase/app';\nimport {\n onMessage as _onMessage,\n getMessaging,\n Messaging,\n getToken as _getToken,\n Observer,\n MessagePayload,\n isSupported\n} from 'firebase/messaging';\nimport { noop } from 'lodash';\nimport config from 'src/environment';\n\nlet firebase: FirebaseApp;\nlet messaging: Messaging;\n\nconst initialize = () => {\n if (getApps().length) return;\n void isSupported().then((supported) => {\n if (supported) {\n firebase = initializeApp(config.FIREBASE);\n messaging = getMessaging(firebase);\n }\n });\n};\n\ninitialize();\n\nexport const getToken = async () => {\n const supported = await isSupported();\n return supported ? _getToken(messaging) : noop;\n};\n\nexport const onMessage = (listener: Observer) => {\n void isSupported().then((supported) => {\n return supported ? _onMessage(messaging, listener) : noop;\n });\n};\n","import { createRef, RefObject } from 'react';\n\n/**\n * Maps the first order properties of an existing object to a ref\n * @param input\n * @returns object refs\n */\nconst createNamedRefs = (\n input: V\n): {\n [key in keyof V]: RefObject;\n} => {\n const object: Partial<{ [key in keyof V]: RefObject }> = {};\n Object.keys(input).forEach((key) => {\n Object.assign(object, { [key]: createRef() });\n });\n return object as { [key in keyof V]: RefObject };\n};\n\nexport default createNamedRefs;\n","import { Client, Patient } from 'src/interfaces';\n\nconst hasPhoto = (obj: Patient | Client) =>\n !!obj.photo.urls.original && !obj.photo.urls.original?.match(/photo_missing/);\n\nexport default hasPhoto;\n","import { ErrorMsg, ErrorName } from 'src/constants';\nimport isDefined from './isDefined';\n\nconst isDefinedOrThrowServerError = (value: T, isT?: (v: unknown) => boolean) => {\n if (isDefined(value)) {\n if (!isT || isT(value)) {\n return value;\n }\n }\n const parseError = new Error(ErrorMsg.INVALID_RESPONSE);\n parseError.name = ErrorName.SERVER_ERROR;\n throw parseError;\n};\n\nexport default isDefinedOrThrowServerError;\n","import { Platform, Linking } from 'react-native';\n\nconst openMaps = async (address?: string, label?: string) => {\n if (!address) {\n return;\n }\n const scheme =\n Platform.select({\n ios: 'maps://0,0?q=',\n android: 'geo:0,0?q=',\n web: 'https://www.google.com/maps/dir/'\n }) ?? '';\n const url =\n Platform.select({\n ios: `${scheme}${label ?? ''}&address=${address}`,\n android: `${scheme}${address}(${label ?? ''})`,\n web: `${scheme}?api=1&destination=${address}`\n }) ?? '';\n\n if (await Linking.canOpenURL(url)) {\n await Linking.openURL(url);\n }\n};\n\nexport default openMaps;\n","import * as Linking from 'expo-linking';\nimport Toast from 'react-native-toast-message';\nimport { t } from 'i18next';\n\nconst openSMS = (phone: string) => {\n Linking.canOpenURL(`sms:${phone}`)\n .then((supported) => {\n if (!supported) {\n Toast.show({\n type: 'error',\n text1: t('phoneUnavailable', { ns: 'common' })\n });\n } else {\n return Linking.openURL(`sms:${phone}`);\n }\n })\n .catch((err) => console.error(err));\n};\n\nexport default openSMS;\n","import * as Linking from 'expo-linking';\nimport Toast from 'react-native-toast-message';\nimport { t } from 'i18next';\n\nconst openEmail = async (email: string | undefined) => {\n if (!email)\n return Toast.show({\n type: 'error',\n text1: t('noEmailProvided', { ns: 'common' })\n });\n const url = `mailto:${email}`;\n try {\n if (await Linking.canOpenURL(url)) {\n return await Linking.openURL(url);\n }\n } catch {}\n Toast.show({\n type: 'error',\n text1: t('unableToEmail', { ns: 'common' })\n });\n};\n\nexport default openEmail;\n","import * as Linking from 'expo-linking';\nimport { t } from 'i18next';\nimport { Platform } from 'react-native';\nimport Toast from 'react-native-toast-message';\n\nconst openWebBrowser = (url: string) => {\n const cleanUrl = url.match('^http(s)?://') ? url : `https://${url}`;\n\n Linking.canOpenURL(cleanUrl)\n .then((supported) => {\n if (!supported) {\n Toast.show({\n type: 'error',\n text1: t('unableToOpen', { ns: 'common', url })\n });\n } else if (Platform.OS === 'web') {\n window.open(cleanUrl, '_blank');\n } else {\n return Linking.openURL(cleanUrl);\n }\n })\n .catch((err) => console.error(err));\n};\n\nexport default openWebBrowser;\n","import { PathConfig } from 'src/routes/types';\n\nconst appLinkingPaths = (\n config: PathConfig,\n tree: string[] = []\n): string[] => {\n const newPaths = [...tree];\n if (config.path) {\n newPaths.push(config.path);\n }\n const childPaths: string[] = [];\n const screens: Array> = Object.values(config.screens);\n for (const screen of screens) {\n if (screen === null) {\n return [];\n } else if (typeof screen === 'string') {\n childPaths.push([...newPaths, screen].filter((v) => v.length > 0).join('/'));\n } else if (typeof screen === 'object') {\n childPaths.push(...appLinkingPaths(screen, newPaths));\n }\n }\n return childPaths;\n};\n\nexport default appLinkingPaths;\n","import moment from 'moment-timezone';\nimport { Prescription } from 'src/interfaces';\n\nexport const VALID_PRESCRIPTION_THRESHOLD = moment.duration(1, 'year');\n\nexport const isPrescriptionValid = (p: Prescription) =>\n moment.utc(p.prescribedAt).isSameOrAfter(moment().subtract(VALID_PRESCRIPTION_THRESHOLD), 'day');\n","export interface PaginationRS {\n draw: number;\n recordsTotal: number;\n recordsFiltered: number;\n data: T[];\n}\n\nexport const getNextPageParam = (\n lastPage: PaginationRS,\n allPages: Array>,\n length: number\n) => {\n const availablePages = Math.ceil(lastPage.recordsFiltered / length);\n if (availablePages > allPages.length) {\n return allPages.length;\n }\n};\n","import { PATIENT_STATUSES } from 'src/constants';\nimport { Patient } from 'src/interfaces';\n\nexport const isPatientActive = (p?: Patient) =>\n !!p && !p.deceasedDate && p.status === PATIENT_STATUSES.ACTIVE;\n","import type * as React from 'react';\n\nexport default function mergeRefs(\n ...refs: Array | React.LegacyRef>\n): React.RefCallback {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject).current = value;\n }\n });\n };\n}\n","const paramToBoolean = (param: null | string | boolean | undefined) => {\n if (param === null) {\n // occurs when query param is listed as a flag e.g. /?param === /?param=true\n return true;\n }\n if (typeof param === 'string') {\n return param === 'true';\n }\n if (typeof param === 'boolean') {\n return param;\n }\n return false;\n};\n\nexport default paramToBoolean;\n","const isDefined = (value: T | null | undefined): value is Exclude =>\n value !== null && value !== undefined;\nexport default isDefined;\n","import * as Linking from 'expo-linking';\nimport Toast from 'react-native-toast-message';\nimport { t } from 'i18next';\nimport { unMask } from 'react-native-mask-text';\n\nconst makePhoneCall = (phone?: string) => {\n if (!phone)\n return Toast.show({\n type: 'error',\n text1: t('noPhoneProvided', { ns: 'common' })\n });\n const unmaskedPhone = unMask(phone);\n const phoneNumber = `tel:${unmaskedPhone}`;\n Linking.canOpenURL(phoneNumber)\n .then((supported) => {\n if (!supported) {\n Toast.show({\n type: 'error',\n text1: t('phoneUnavailable', { ns: 'common' })\n });\n } else {\n return Linking.openURL(phoneNumber);\n }\n })\n .catch((err) => console.error(err));\n};\n\nexport default makePhoneCall;\n","import moment from 'moment-timezone';\nimport { QueryClient } from 'react-query';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n staleTime: moment.duration(1, 'minutes').asMilliseconds(),\n cacheTime: moment.duration(24, 'hours').asMilliseconds(),\n retry: false // if a query is failing, we do not want to bombard the server\n }\n }\n});\n\nexport default queryClient;\n","import { IS_PROD } from 'src/constants';\nimport pkg from '../../../package.json';\n\nexport const interpolateName = (name: string, node?: React.ReactNode): string => {\n if (typeof node === 'string') {\n return `${name}: ${node}`;\n }\n return name;\n};\n\nexport const getRelease = () => pkg.version;\n\nexport const SAMPLE_RATE = IS_PROD ? 0.05 : 1;\n\nexport const ignoreErrors = [\n 'Non-Error exception captured',\n 'Something went wrong!',\n 'AxiosError',\n 'CancelledError',\n 'User action required' // Defined by us - only for log in errors\n];\n","import * as SentryReact from '@sentry/browser';\nimport * as Application from 'expo-application';\nimport Constants from 'expo-constants';\nimport config from 'src/environment';\nimport { IS_DEBUG } from 'src/constants';\nimport { noop } from 'lodash';\nimport { ignoreErrors, SAMPLE_RATE } from './helper';\n\nexport * from './helper';\n\nconst getRelease = () => (IS_DEBUG ? undefined : Application.nativeApplicationVersion) ?? undefined;\nSentryReact.init({\n dsn: 'https://60098ef5659f90ed44a40ea25530a0c2@o513175.ingest.sentry.io/4505874876203008',\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n release: getRelease(),\n sampleRate: SAMPLE_RATE,\n replaysOnErrorSampleRate: SAMPLE_RATE,\n replaysSessionSampleRate: 0,\n environment: config.ENVIRONMENT,\n integrations: [\n SentryReact.replayIntegration({\n maskAllInputs: false,\n maskAllText: false\n }),\n SentryReact.browserProfilingIntegration(),\n SentryReact.browserTracingIntegration(),\n SentryReact.httpClientIntegration()\n ],\n attachStacktrace: true,\n debug: Constants?.expoConfig?.extra?.DEBUG_SENTRY === 'true',\n ignoreErrors,\n sendDefaultPii: true\n});\n\n// stub the following to avoid errors in web\nconst wrap = (fn: T): T => fn;\nconst withTouchEventBoundary = wrap;\nexport const routingInstrumentation: {\n registerRoutingInstrumentation: () => void;\n} = { registerRoutingInstrumentation: noop };\n\nexport default {\n ...SentryReact,\n wrap,\n withTouchEventBoundary\n};\n","/**\n * Exports the correct local storage option for native and web apps.\n * Includes a typed setter/getter to automatically parse storage content.\n */\n\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport isDefined from 'src/utils/isDefined';\n\nconst getItem = async (key: string): Promise => await AsyncStorage.getItem(key);\n\nconst setItem = async (key: string, value: string): Promise =>\n await AsyncStorage.setItem(key, value);\n\nasync function getTypedItem(key: string): Promise {\n const raw = await getItem(key);\n if (isDefined(raw)) {\n return JSON.parse(raw) as T;\n }\n return undefined;\n}\nasync function setTypedItem(key: string, value: T): Promise {\n await setItem(key, JSON.stringify(value));\n}\n\nconst storage = {\n ...AsyncStorage,\n getTypedItem,\n setTypedItem\n};\n\nexport default storage;\n","import { mask } from 'react-native-mask-text';\nexport interface Person {\n firstName?: string;\n lastName?: string;\n title?: string;\n}\n\nexport const fullNameAndTitle = (person?: T) => {\n if (!person) return;\n const fullName = [person.title, person.firstName, person.lastName].filter((v) => !!v).join(' ');\n return fullName.length ? fullName : undefined;\n};\n\ninterface SimpleAddress {\n address: string;\n city: string;\n state: string;\n postalCode: string;\n}\nexport const simpleAddressFormatter = (location?: T) =>\n location\n ? `${location.address} ${location.city}, ${location.state} ${location.postalCode}`\n : undefined;\n\nexport const plural = (v: number) => (Math.abs(v) > 1 ? 's' : '');\n\nexport const multiMask = (value: string, pattern: string | string[]) => {\n if (typeof pattern === 'string') return mask(value, pattern);\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const p of pattern) {\n const masked = mask(value, p);\n if (masked) return masked;\n }\n\n return '';\n};\n\nexport const template = (url: string, params: any) => {\n let urlResult = url;\n for (const key in params) {\n urlResult = urlResult.replace('<%= ' + key + ' %>', params[key]);\n }\n return urlResult;\n};\n\nexport const durationFormatter = (durationInMinutes?: number) => {\n if (!durationInMinutes) return '';\n const value = durationInMinutes / 60;\n const hours = Math.floor(value);\n const minutes = Math.floor((value % 1) * 60);\n let result = '';\n if (hours > 0) {\n result = `${hours} ${hours > 1 ? 'hours' : 'hour'}`;\n }\n if (minutes > 0) {\n if (hours > 0) result += ', ';\n result += `${minutes} ${minutes > 1 ? 'minutes' : 'minute'}`;\n }\n\n return result;\n};\n","import { times } from 'lodash';\n\nconst uuid = () =>\n times(4, () => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(36)).join('-');\n\nexport default uuid;\n","var map = {\n\t\"./af\": 17582,\n\t\"./af.js\": 17582,\n\t\"./ar\": 93042,\n\t\"./ar-dz\": 54265,\n\t\"./ar-dz.js\": 54265,\n\t\"./ar-kw\": 92553,\n\t\"./ar-kw.js\": 92553,\n\t\"./ar-ly\": 85352,\n\t\"./ar-ly.js\": 85352,\n\t\"./ar-ma\": 67097,\n\t\"./ar-ma.js\": 67097,\n\t\"./ar-ps\": 76150,\n\t\"./ar-ps.js\": 76150,\n\t\"./ar-sa\": 84427,\n\t\"./ar-sa.js\": 84427,\n\t\"./ar-tn\": 7221,\n\t\"./ar-tn.js\": 7221,\n\t\"./ar.js\": 93042,\n\t\"./az\": 60458,\n\t\"./az.js\": 60458,\n\t\"./be\": 17596,\n\t\"./be.js\": 17596,\n\t\"./bg\": 93830,\n\t\"./bg.js\": 93830,\n\t\"./bm\": 27044,\n\t\"./bm.js\": 27044,\n\t\"./bn\": 58573,\n\t\"./bn-bd\": 13296,\n\t\"./bn-bd.js\": 13296,\n\t\"./bn.js\": 58573,\n\t\"./bo\": 25614,\n\t\"./bo.js\": 25614,\n\t\"./br\": 62041,\n\t\"./br.js\": 62041,\n\t\"./bs\": 91786,\n\t\"./bs.js\": 91786,\n\t\"./ca\": 75833,\n\t\"./ca.js\": 75833,\n\t\"./cs\": 52711,\n\t\"./cs.js\": 52711,\n\t\"./cv\": 71036,\n\t\"./cv.js\": 71036,\n\t\"./cy\": 84977,\n\t\"./cy.js\": 84977,\n\t\"./da\": 8770,\n\t\"./da.js\": 8770,\n\t\"./de\": 67342,\n\t\"./de-at\": 81566,\n\t\"./de-at.js\": 81566,\n\t\"./de-ch\": 87544,\n\t\"./de-ch.js\": 87544,\n\t\"./de.js\": 67342,\n\t\"./dv\": 82875,\n\t\"./dv.js\": 82875,\n\t\"./el\": 78536,\n\t\"./el.js\": 78536,\n\t\"./en-au\": 38617,\n\t\"./en-au.js\": 38617,\n\t\"./en-ca\": 79227,\n\t\"./en-ca.js\": 79227,\n\t\"./en-gb\": 59754,\n\t\"./en-gb.js\": 59754,\n\t\"./en-ie\": 37217,\n\t\"./en-ie.js\": 37217,\n\t\"./en-il\": 85418,\n\t\"./en-il.js\": 85418,\n\t\"./en-in\": 80800,\n\t\"./en-in.js\": 80800,\n\t\"./en-nz\": 67299,\n\t\"./en-nz.js\": 67299,\n\t\"./en-sg\": 76305,\n\t\"./en-sg.js\": 76305,\n\t\"./eo\": 8673,\n\t\"./eo.js\": 8673,\n\t\"./es\": 71301,\n\t\"./es-do\": 3187,\n\t\"./es-do.js\": 3187,\n\t\"./es-mx\": 48223,\n\t\"./es-mx.js\": 48223,\n\t\"./es-us\": 37634,\n\t\"./es-us.js\": 37634,\n\t\"./es.js\": 71301,\n\t\"./et\": 4976,\n\t\"./et.js\": 4976,\n\t\"./eu\": 11847,\n\t\"./eu.js\": 11847,\n\t\"./fa\": 74372,\n\t\"./fa.js\": 74372,\n\t\"./fi\": 41628,\n\t\"./fi.js\": 41628,\n\t\"./fil\": 56802,\n\t\"./fil.js\": 56802,\n\t\"./fo\": 42874,\n\t\"./fo.js\": 42874,\n\t\"./fr\": 9853,\n\t\"./fr-ca\": 87170,\n\t\"./fr-ca.js\": 87170,\n\t\"./fr-ch\": 22825,\n\t\"./fr-ch.js\": 22825,\n\t\"./fr.js\": 9853,\n\t\"./fy\": 68876,\n\t\"./fy.js\": 68876,\n\t\"./ga\": 93533,\n\t\"./ga.js\": 93533,\n\t\"./gd\": 82770,\n\t\"./gd.js\": 82770,\n\t\"./gl\": 98602,\n\t\"./gl.js\": 98602,\n\t\"./gom-deva\": 63059,\n\t\"./gom-deva.js\": 63059,\n\t\"./gom-latn\": 48212,\n\t\"./gom-latn.js\": 48212,\n\t\"./gu\": 23409,\n\t\"./gu.js\": 23409,\n\t\"./he\": 17210,\n\t\"./he.js\": 17210,\n\t\"./hi\": 4750,\n\t\"./hi.js\": 4750,\n\t\"./hr\": 51315,\n\t\"./hr.js\": 51315,\n\t\"./hu\": 47626,\n\t\"./hu.js\": 47626,\n\t\"./hy-am\": 91317,\n\t\"./hy-am.js\": 91317,\n\t\"./id\": 26892,\n\t\"./id.js\": 26892,\n\t\"./is\": 97577,\n\t\"./is.js\": 97577,\n\t\"./it\": 57628,\n\t\"./it-ch\": 3046,\n\t\"./it-ch.js\": 3046,\n\t\"./it.js\": 57628,\n\t\"./ja\": 92504,\n\t\"./ja.js\": 92504,\n\t\"./jv\": 25917,\n\t\"./jv.js\": 25917,\n\t\"./ka\": 64513,\n\t\"./ka.js\": 64513,\n\t\"./kk\": 94935,\n\t\"./kk.js\": 94935,\n\t\"./km\": 96661,\n\t\"./km.js\": 96661,\n\t\"./kn\": 89964,\n\t\"./kn.js\": 89964,\n\t\"./ko\": 98067,\n\t\"./ko.js\": 98067,\n\t\"./ku\": 61165,\n\t\"./ku-kmr\": 85158,\n\t\"./ku-kmr.js\": 85158,\n\t\"./ku.js\": 61165,\n\t\"./ky\": 11177,\n\t\"./ky.js\": 11177,\n\t\"./lb\": 2967,\n\t\"./lb.js\": 2967,\n\t\"./lo\": 81972,\n\t\"./lo.js\": 81972,\n\t\"./lt\": 58469,\n\t\"./lt.js\": 58469,\n\t\"./lv\": 33155,\n\t\"./lv.js\": 33155,\n\t\"./me\": 87935,\n\t\"./me.js\": 87935,\n\t\"./mi\": 74483,\n\t\"./mi.js\": 74483,\n\t\"./mk\": 32501,\n\t\"./mk.js\": 32501,\n\t\"./ml\": 73120,\n\t\"./ml.js\": 73120,\n\t\"./mn\": 20266,\n\t\"./mn.js\": 20266,\n\t\"./mr\": 19406,\n\t\"./mr.js\": 19406,\n\t\"./ms\": 80109,\n\t\"./ms-my\": 90864,\n\t\"./ms-my.js\": 90864,\n\t\"./ms.js\": 80109,\n\t\"./mt\": 22904,\n\t\"./mt.js\": 22904,\n\t\"./my\": 44067,\n\t\"./my.js\": 44067,\n\t\"./nb\": 21301,\n\t\"./nb.js\": 21301,\n\t\"./ne\": 81152,\n\t\"./ne.js\": 81152,\n\t\"./nl\": 76735,\n\t\"./nl-be\": 97761,\n\t\"./nl-be.js\": 97761,\n\t\"./nl.js\": 76735,\n\t\"./nn\": 37569,\n\t\"./nn.js\": 37569,\n\t\"./oc-lnc\": 20833,\n\t\"./oc-lnc.js\": 20833,\n\t\"./pa-in\": 3044,\n\t\"./pa-in.js\": 3044,\n\t\"./pl\": 34249,\n\t\"./pl.js\": 34249,\n\t\"./pt\": 87585,\n\t\"./pt-br\": 26826,\n\t\"./pt-br.js\": 26826,\n\t\"./pt.js\": 87585,\n\t\"./ro\": 62526,\n\t\"./ro.js\": 62526,\n\t\"./ru\": 62204,\n\t\"./ru.js\": 62204,\n\t\"./sd\": 43270,\n\t\"./sd.js\": 43270,\n\t\"./se\": 61541,\n\t\"./se.js\": 61541,\n\t\"./si\": 71921,\n\t\"./si.js\": 71921,\n\t\"./sk\": 49935,\n\t\"./sk.js\": 49935,\n\t\"./sl\": 46254,\n\t\"./sl.js\": 46254,\n\t\"./sq\": 59897,\n\t\"./sq.js\": 59897,\n\t\"./sr\": 42496,\n\t\"./sr-cyrl\": 11135,\n\t\"./sr-cyrl.js\": 11135,\n\t\"./sr.js\": 42496,\n\t\"./ss\": 32215,\n\t\"./ss.js\": 32215,\n\t\"./sv\": 84716,\n\t\"./sv.js\": 84716,\n\t\"./sw\": 50803,\n\t\"./sw.js\": 50803,\n\t\"./ta\": 31538,\n\t\"./ta.js\": 31538,\n\t\"./te\": 2302,\n\t\"./te.js\": 2302,\n\t\"./tet\": 25280,\n\t\"./tet.js\": 25280,\n\t\"./tg\": 14100,\n\t\"./tg.js\": 14100,\n\t\"./th\": 95385,\n\t\"./th.js\": 95385,\n\t\"./tk\": 736,\n\t\"./tk.js\": 736,\n\t\"./tl-ph\": 79726,\n\t\"./tl-ph.js\": 79726,\n\t\"./tlh\": 41873,\n\t\"./tlh.js\": 41873,\n\t\"./tr\": 36463,\n\t\"./tr.js\": 36463,\n\t\"./tzl\": 27491,\n\t\"./tzl.js\": 27491,\n\t\"./tzm\": 29500,\n\t\"./tzm-latn\": 80196,\n\t\"./tzm-latn.js\": 80196,\n\t\"./tzm.js\": 29500,\n\t\"./ug-cn\": 91287,\n\t\"./ug-cn.js\": 91287,\n\t\"./uk\": 35341,\n\t\"./uk.js\": 35341,\n\t\"./ur\": 36246,\n\t\"./ur.js\": 36246,\n\t\"./uz\": 55550,\n\t\"./uz-latn\": 77254,\n\t\"./uz-latn.js\": 77254,\n\t\"./uz.js\": 55550,\n\t\"./vi\": 78796,\n\t\"./vi.js\": 78796,\n\t\"./x-pseudo\": 22736,\n\t\"./x-pseudo.js\": 22736,\n\t\"./yo\": 28621,\n\t\"./yo.js\": 28621,\n\t\"./zh-cn\": 67601,\n\t\"./zh-cn.js\": 67601,\n\t\"./zh-hk\": 39053,\n\t\"./zh-hk.js\": 39053,\n\t\"./zh-mo\": 71248,\n\t\"./zh-mo.js\": 71248,\n\t\"./zh-tw\": 74725,\n\t\"./zh-tw.js\": 74725\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkweb\"] = self[\"webpackChunkweb\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [221], () => (__webpack_require__(55819)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["defaultLanguage","Language","en","languagesResources","addToCalendar","AddToCalendarEN","afterHours","AfterHoursEN","appError","AppErrorEN","appointments","AppointmentsEN","articleHub","ArticleHubEN","biometricLogin","BiometricLoginEN","changePassword","ChangePasswordEN","changePasswordModal","ChangePasswordModalEN","common","CommonEN","contactAlly","ContactAllyEN","contactUs","ContactUsEN","deeplinking","DeeplinkingEN","discardChanges","DiscardChangesEN","emailConfirmation","EmailConfirmationEN","eula","EulaEN","forcedUpdate","ForcedUpdateEN","genericError","GenericErrorEN","helpCenter","HelpCenterEN","home","HomeEN","impersonate","ImpersonateEN","informationUpdate","InfoUpdateEN","login","LoginEN","loyalty","LoyaltyEN","onboardingErrors","OnboardingErrorsEN","onlineBooking","OnlineBookingEN","patientProfile","PatientProfileEN","permissions","PermissionsEN","petID","PetIDEN","petList","PetListEN","petPageDisabled","PetPageDisabledEN","practiceClientSearch","PracticeClientSearchEN","profileClientPracticeConfig","ProfileClientPracticeConfigEN","profileRoot","ProfileRootEN","pushNotifications","PushNotificationsEN","requests","RequestsEN","selectPractice","SelectPracticeEN","settings","SettingsEN","timeReference","TimeRefEN","todos","TodosEN","tokenPasswordReset","TokenResetPasswordEN","userInfo","UserInfoEN","validation","ValidationEN","es","AddToCalendarES","AfterHoursES","AppErrorES","AppointmentsES","ArticleHubES","BiometricLoginES","ChangePasswordES","ChangePasswordModalES","CommonES","ContactAllyES","ContactUsES","DeeplinkingES","DiscardChangesES","EmailConfirmationES","EulaES","ForcedUpdateES","GenericErrorES","HelpCenterES","HomeES","ImpersonateES","InfoUpdateES","LoginES","LoyaltyES","OnboardingErrorsES","OnlineBookingES","PatientProfileES","PermissionsES","PetIDES","PetListES","PetPageDisabledES","PracticeClientSearchES","ProfileClientPracticeConfigES","ProfileRootES","PushNotificationsES","RequestsES","SelectPracticeES","SettingsES","TimeRefES","TodosES","TokenResetPasswordES","UserInfoES","ValidationES","fr","AddToCalendarFR","AfterHoursFR","AppErrorFR","AppointmentsFR","ArticleHubFR","BiometricLoginFR","ChangePasswordFR","ChangePasswordModalFR","CommonFR","ContactAllyFR","ContactUsFR","DeeplinkingFR","DiscardChangesFR","EmailConfirmationFR","EulaFR","ForcedUpdateFR","GenericErrorFR","HelpCenterFR","HomeFR","ImpersonateFR","InfoUpdateFR","LoginFR","LoyaltyFR","OnboardingErrorsFR","OnlineBookingFR","PatientProfileFR","PermissionsFR","PetIDFR","PetListFR","PetPageDisabledFR","PracticeClientSearchFR","ProfileClientPracticeConfigFR","ProfileRootFR","PushNotificationsFR","RequestsFR","SelectPracticeFR","SettingsFR","TimeRefFR","TodosFR","TokenResetPasswordFR","UserInfoFR","ValidationFR","type","async","detect","cb","storage","getItem","AsyncStorageKeys","LOCALE_PERSISTENCE_KEY","init","noop","cacheUserLanguage","locale","setItem","i18n","RNLanguageDetector","use","initReactI18next","debug","resources","compatibilityJSON","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","useSuspense","transSupportBasicHtmlNodes","registerTranslation","announcementOptions","queryKey","QueryKeys","ANNOUNCEMENTS","queryFn","getAnnouncements","refetchInterval","refetchIntervalInBackground","useAnnouncements","useQuery","availablePracticesOptions","email","options","CHECK_EMAIL","signal","beforeFetch","getActiveClientList","select","d","_","staleTime","moment","asMilliseconds","cacheTime","Infinity","useAvailablePractices","optionRef","useRef","useEffect","current","Object","assign","notificationWarning","NOTIFICATIONS_SUPPORTED","console","warn","defaultContext","notify","hasPrompted","fireNotification","openNotificationSettings","clearNotification","Notification","createContext","useNotification","useContext","NotificationProvider","children","_jsx","_Fragment","UserContext","createGenericContext","genericContext","React","undefined","useGenericContext","contextIsDefined","Error","Provider","useUser","TrueUserProvider","UserProvider","user","value","Portal","Host","practiceConfigurationOptions","practiceId","PRACTICE_CONFIGURATION","getPracticeConfiguration","retryDelay","usePracticeConfiguration","PLACEHOLDER","prescriptionsOptions","PRESCRIPTIONS","getPrescriptions","prescriptions","suspense","usePrescriptions","_ref","selectedPatientId","_objectWithoutPropertiesLoose","_excluded","_useQuery","data","rest","_excluded2","useMemo","filter","patientId","remindersOptions","REMINDERS","getReminders","reminders","useReminders","AppointmentType","VID","VID1","TEL","TEL1","checkCanConfirm","appointment","confirmed","confirmedAt","appointmentDate","startsAt","now","isBefore","isAfter","clone","subtract","checkIsSoon","add","checkIsExpired","checkIsPast","appointmentsOptions","limit","PAGE_LENGTH","APPOINTMENTS","pageParam","getAppointments","getNextPageParam","onSuccess","pages","length","forEach","queryClient","setQueryData","APPOINTMENT","appointmentId","selectedPatient","_useInfiniteQuery","useInfiniteQuery","refetch","hasNextPage","fetchNextPage","isLoading","isFetching","isFetchingNextPage","appts","reduce","prev","curr","extractAppointments","filtered","filterAppointments","uniqBy","firstPastAppt","findIndex","hasPastAppt","future","slice","reverse","past","next","useFocusEffect","useCallback","invalidateQueries","abilityOptions","ABILITY","getAbility","useAbility","query","userCanViewLoyalty","isDefined","rules","loyaltyTransaction","find","lt","can","actions","a","practiceOptions","PRACTICE","getPractice","usePracticeInfo","practiceShortName","PRACTICE_INFO","getPracticeInfo","enabled","requestSettingsOptions","REQUEST_SETTING","getRequestSetting","useRequestSetting","navigate","useNavigation","practiceQuery","usePractice","practiceInfoQuery","shortName","queryResults","requestAppointment","appointmentRequestsDisabled","appointmentRequestOverride","appointmentRequestOverrideUrl","openWebBrowser","Screens","ONLINE_BOOKING","requestRefill","callback","refillRequestsDisabled","refillRequestOverride","refillRequestOverrideUrl","onlineBookingEnabled","isFetched","token","decoded","jwtDecode","expiresLater","expires_at","user_id","isTokenValid","minimumDaysFromNow","isSameOrBefore","key","placeholderData","storageKey","Array","isArray","join","remove","getTypedItem","mutate","useMutation","mutationKey","mutationFn","setTypedItem","removeItem","useAppState","appState","setAppState","useState","AppState","currentState","addEventListener","secureStoreGetSignInCredentials","IS_WEB","store","Promise","all","SecureStore","getItemAsync","password","id","parseInt","isBiometrics","asyncSetToken","TOKEN","usePracticeTheme","CUSTOM_THEME","apiClient","get","endpoint","params","mobile","fetchRetry","url","retryOptions","fetchOptions","requestId","uniqueId","fetch","catch","onFetchError","then","onfulfilled","aborted","sentry","addBreadcrumb","message","err","tries","resolve","setTimeout","delay","wait","validateHostname","parsed","URL","protocol","domain","config","DEEPLINK_REDIRECT_DOMAINS","hostname","followRedirect","category","response","ok","error","name","reportErrorAndResponse","redirect","captureException","tags","section","text","pick","responseData","source","handleSetUrlOrAbort","destination","setUrlToHandle","success","displayDeeplinkError","urlToHandle","code","Toast","show","text1","t","text2","reportError","e","lng","cause","useDeeplink","ready","authStatus","logOut","applyPractice","linkTo","useLinkTo","urlInfo","urlEmitter","on","removeListener","useLayoutEffect","Linking","abortCtl","ctl","AbortController","abort","resolveSendGridLink","shouldHandleExternally","canOpenURL","erroredUrl","status","openURL","LINKING_ERRORS","INVALID","NETWORK","EXTERNAL","resolveOrCatchSendGridLink","getInitialURL","sub","removeAllListeners","handleDeeplink","qualifiedAuthStatus","isLoggedIn","AuthStatus","AUTHENTICATED","shouldSwitchUsers","handlePracticeSwitch","cleanURL","isLoginPath","appLinkingPaths","ROOT_STACK_PATHS","includes","pathname","replace","NOT_FOUND","urlAllowsNoAuth","pathAndParams","NAVIGATION","UNAUTHORIZED","defaultThemeColors","light","defaultLightTheme","colors","dark","defaultDarkTheme","setThemeSet","removePreview","previewThemeSet","applyDefaultTheme","ThemeContext","useAppTheme","ThemeConsumer","Consumer","AppThemeProvider","colorScheme","useColorScheme","viewMode","useViewMode","themeSet","previewSet","theme","context","ThemeProvider","PaperContainer","PaperProvider","styled","View","setHasPrompted","requestNotificationPermission","setIsReady","NotificationPromptContext","useNotificationPrompt","NotificationPromptProvider","useBiometrics","canUseBiometrics","setCanUseBiometrics","supportsFaceRecognition","setSupportsFaceRecognition","LocalAuthentication","hasHardwareAsync","hasHardware","isEnrolledAsync","isEnrolled","supportedAuthenticationTypesAsync","localAuthTypes","FACIAL_RECOGNITION","logIn","signUp","setError","resetError","isError","_user","isLoggingOut","setAuthStatus","practice","AuthContext","useAuth","AuthProvider","isNavReady","navReady","useTranslation","state","useLoginState","tokenFetched","useStorage","rememberMe","REMEMBER_ME","isLoggingIn","useIsMutating","MutationKeys","AUTHENTICATION","isRefreshing","SESSION_RENEW","biometricAuthAppSetting","biometricAuthFetched","BIOMETRIC_AUTH_APP_SETTING","userIsMutating","shouldRefresh","shouldRefreshToken","hasToken","prepareAuthenticatedState","mutateAsync","isLoginError","setUser","signInRequest","toString","signIn","request","userId","switchPractice","storedCredentials","setItemAsync","secureStoreSaveSignInCredentials","renew","level","LOGGED_OUT","decodedToken","renewSession","clientId","SIGN_UP","register","biometricNotRequired","NEEDS_BIOMETRIC","refetchUser","userFetched","CLIENT","getClient","emailVerificationStatus","EmailVerificationStatus","VERIFIED","clientFound","registered","prefetchQuery","prefetchInfiniteQuery","prefetchQueries","themeFetched","themes","custom","useCustomTheme","onError","setIsLoggingOut","SWITCHING_PRACTICE","clearKeys","getAllKeys","k","TUTORIALS","map","clear","isAppReady","hasError","undefinedClientAllowed","FORBIDDEN","NEEDS_PASSWORD_RESET","NEEDS_TERMS","NEEDS_UPGRADE","expireSession","needsInitialState","isExpiredToken","appCanBeReady","responseInterceptor","interceptors","JSON","stringify","statusCode","captureAxiosException","nextStatus","responseFailureInterceptor","requestInterceptor","headers","Authorization","eject","containers","StyleSheet","create","default","flex","margin","webOrTablet","width","MOBILE_WIDTH_MAX","alignSelf","shadow","shadowColor","palette","BLACK_OPACITY_30","shadowRadius","Size","X2_S","shadowOpacity","shadowOffset","height","X3_S","elevation","shadowDarker","BLACK","XS","shadowSharper","X4_S","mobileBottomButton","justifyContent","layout","smallGap","gap","Margin","Small","flexRow","flexDirection","flexWrap","flexRowWrap","flex1","flex2","flex3","flex4","flex5","flexGrow1","flexGrow","padding0","padding","paddingV0","paddingVertical","paddingH0","paddingHorizontal","alignSelfCenter","alignSelfEnd","alignItemsCenter","alignItems","justifyStart","textAlignCenter","textAlign","textAlignVertical","justifyCenter","justifyAround","justifyBetween","justifyEnd","activityIndicator","position","top","left","right","bottom","mobileWidth","tabletWidth","TABLET_WIDTH_LANDSCAPE_MAX","fontStyles","whiteBackground","backgroundColor","background","blackBackground","errorLight","color","errorDark","DarkTheme","body","letterSpacing","fontSize","FontSize","BODY","fontWeight","Weight","REGULAR","fontFamily","fonts","roboto","regular","lineHeight","caption","CAPTION","LIGHT","subheading","SUBHEADING","MEDIUM","medium","headline","HEADLINE","title","TITLE","BOLD","bold","h1","marginTop","marginBottom","h2","h3","h4","h5","h6","p","emailBouncedOrMarkedSpam","BOUNCED","valueOf","SPAM_REPORT","isErroredEmail","BAD","DECLINED","emailIssuesInvalid","TOUR","STATE","useBoolean","initial","setValue","toTrue","toFalse","toggle","useHoverEffect","disabled","onAnimationEnd","ref","isHovered","useHover","animatedValue","Animated","Value","animation","timing","toValue","duration","useNativeDriver","start","stop","useInteractionFocusEffect","deps","cleanup","timeout","clearTimeout","interactions","InteractionManager","runAfterInteractions","cancel","awards","leftoverBalance","this","constructor","initialLeftoverBalance","addAward","transactions","push","cloneDeep","txn","amount","getBalance","acc","removeExpiring","date","expiring","remaining","partition","expiresAt","adjustBalance","previous","shift","getQueue","LOYALTY_TRANSACTION_TYPES","groupExpiringRewards","Date","sortBy","groupBy","startOf","expireAmount","expireDate","toDate","reward","item","createActivitySections","activityEntries","isPending","fulfilledDate","toLocalMonthYear","sort","b","diff","createActivityItems","rewards","AwardQueue","pending","REWARD","createLineItem","fulfilledAt","expiringAwards","description","createdAt","expired","transactionId","_useLoyaltyTransactions","isRefetching","LOYALTY_TRANSACTIONS","getLoyaltyTransactions","_useMemo","sections","aggregatedExpirations","userCoinData","coinBalance","LOYALTY_COIN_BALANCE","getLoyaltyCoinBalanceTotal","LoyaltyTransactionContext","useLoyaltyTransactions","LoyaltyTransactionProvider","DEFAULT_CONTEXT","isActivelyTouring","toursEnabled","queueTour","dequeueTour","registerTour","unregisterTour","resetTour","stopTours","toursInFocus","TourGuideMasterContext","TourGuideMasterProvider","tourQueue","setTourQueue","tutorialsDisabled","TUTORIALS_DISABLED","setToursInFocus","tourId","tour","v","priority","Number","MAX_SAFE_INTEGER","queue","newTour","insertPosition","activeTour","values","tourController","reset","useTourGuideMaster","usePatients","PATIENTS","getPatients","usePatient","patients","PATIENT","sourceId","getPatient","patient","dummyPatient","getRewards","isDefinedOrThrowServerError","rewardId","getReward","reviewActionIsAvailable","hasAction","lastReviewRequestDate","LAST_REVIEW_REQUEST_DATE","lastReviewDateIsUndefinedOrPastThreshold","getFirstInstallTime","requestReview","confirmAppointment","isConfirming","CONFIRMING_APPOINTMENT","patch","rateUs","allowsMultipleSelection","getMediaLibraryPermissionsAsync","granted","requestMediaLibraryPermissionsAsync","launchImageLibraryAsync","mediaTypes","MediaTypeOptions","Images","allowsEditing","getCameraPermissionsAsync","requestCameraPermissionsAsync","launchCameraAsync","useUploadProfilePhoto","manipulate","useQueryClient","upload","isUploading","postClientPhoto","uri","PROFILE_PHOTO_UPLOAD","deletePhoto","isDeleting","deleteClientPhoto","PROFILE_PHOTO_DELETE","uploadPhoto","imagePickerResult","camera","takeImage","pickImage","canceled","processed","manipulateAsync","assets","isMutating","debounceClearInvalidateQueries","todoId","jobs","TODOS","TODO","PAGED_TODOS","postSelfPush","NotificationCategory","TO_DO_UPDATE","trailing","leading","useMutateTodos","createTodo","isCreating","EDITING_TODOS","postTodo","editTodo","isEditing","patchTodo","toggleCompleteTodo","isCompleting","complete","todo","isComplete","todoJob","period","periodUnit","repeatUntilDate","newTodo","dueDate","toISOString","deleteTodo","_deleteTodo","todoAlertsAttributes","alert","todoAlertId","useTodos","onFetchSuccess","reason","dir","column","queryOptions","pageRS","todosAreFetched","todoQueryProps","getAllTodos","defaultVisit","uuid","expires","defaultVisitor","getTokenOrDefault","defaultValue","raw","atob","parse","encoded","btoa","getVisitToken","VISIT_TOKEN","getVisitorToken","VISITOR_TOKEN","queuedEvents","submitEvents","throttle","events","splice","visitToken","visitorToken","post","visit_token","visitor_token","events_json","flushEvents","flush","setupTagManager","containerId","script","document","createElement","innerHTML","googleTagManagerScript","appendChild","noscript","iframe","src","style","display","removeChild","setupDataLayer","dataLayerScript","window","dataLayer","googleAnalyticsScript","pushEvent","TagManagerContext","GoogleAnalytics","practiceInfo","practiceInfoRef","useGoogleTagManager","googleTagManagerContainerId","googleTagManagerContainerId2","googleAnalyticsMeasurementId","measurementsId","scriptAsync","setupGoogleAnalytics","eventQueue","event","times","time","initialEventName","sessionInfo","path","useRoute","utmParams","trackEvent","eventName","queueEvent","properties","isEmpty","landing_page","practice_id","source_id","client_id","trackVisit","defaults","useFlushEvents","useNativeFlushEvents","removeEventListener","Body","fontStyle","textDecorationLine","textDecorationStyle","textDecorationColor","textShadowColor","textShadowOffset","textShadowRadius","textTransform","numberOfLines","props","flatStyle","flatten","finalWeight","font","WeightNames","flattenedStyle","flexShrink","Text","Caption","_ref2","Subheading","_ref3","_excluded3","Headline","_ref4","_excluded4","Title","_ref5","_excluded5","parentValue","onChangeText","parentOnChangeText","mask","maskArray","msg","nextRef","onSubmitEditing","thisRef","onFocus","parentOnFocus","masked","setMasked","multiMask","sentryLabel","interpolateName","label","innerStyle","outerStyle","extractStyles","_jsxs","PaperInput","maskedText","unMask","focus","clearButtonMode","Icon","icon","WHITE_OPACITY_30","onPress","ErrorContainer","omit","ErrorText","getRadiusFromStyle","leftRadius","borderBottomLeftRadius","borderRadius","rightRadius","borderBottomRightRadius","getBackgroundFromStyle","attrs","Tooltip","tooltipText","openTooltip","closeTooltip","isTooltipOpen","Menu","anchor","onStartShouldSetResponder","onTouchEnd","stopPropagation","preventDefault","Pressable","onDismiss","visible","contentStyle","onSurface","StyledItem","titleStyle","surface","Item","onConfirm","startYear","endYear","validRange","textInputProps","datePickerVisible","openDatePicker","closeDatePicker","buttonSentryLabel","modalSentryLabel","onOpenDatePicker","onChooseDate","toDateString","getDate","month","getMonth","year","getFullYear","TouchableRipple","TextInput","toLocaleDateString","language","day","showSoftInputOnFocus","focusable","caretHidden","DatePickerModal","mode","dateMode","inputProps","timePickerVisible","openTimePicker","closeTimePicker","pointerEvents","editable","toLocalTime","TimePickerModal","hours","minutes","DropDown","forwardRef","DropDownRender","activeTheme","labelTransform","multiSelect","onChange","onSelect","activeColor","placeholder","dropDownContainerMaxHeight","dropDownContainerHeight","dropDownStyle","accessibilityLabel","inputLayout","setInputLayout","x","y","displayValue","option","some","_item","isActive","currentValue","setActive","isSelected","showDropDown","onShowDropdown","onChooseItem","onLayout","nativeEvent","onBlur","marginVertical","ScrollView","bounces","maxHeight","_index","Fragment","Large","leadingIcon","primary","trailingIcon","Checkbox","Android","Divider","HoverCard","parentOnPress","hoverColor","hideShadow","sentryName","roundness","combinedStyle","innerRef","hoverAnimationValue","interpolate","inputRange","outputRange","colorShade","disableTouches","mergeRefs","buttonColor","parentColor","labelStyle","uppercase","compact","contentColor","labelStyles","onPrimary","isDarkColor","AB_BRIGHT_WHITE","AB_STONE_GRAY","TRANSPARENT","BLACK_OPACITY_10","borderColor","overflow","Medium","borderWidth","isFunction","size","IconSize","M","ActivityIndicator","toLocaleUpperCase","loading","SMALL_FAB_SIZE","LARGE_FAB_SIZE","AnimatedFAB","parentButtonColor","labelColor","parentLabelColor","iconAnchor","small","setWidth","fabWidth","setFabWidth","listener","addListener","renderIcon","StyledImage","Container","AnimatedContainer","StyledButton","IconContainer","AnimatedLabel","opacity","Image","S","DotTouchable","hitSlop","DotView","Dot","index","scrollX","sliderWidth","focusedIndex","slideRef","dotWidth","extrapolate","dotXCenter","dotColor","scrollToIndex","animated","transform","translateX","Pagination","slides","other","fixOffsetOnLayout","BulletContainer","BulletSpacer","TextContainer","BulletText","bulletStyle","Slide","bodyStyle","imageStyle","scale","obj","returnObjects","image","StyledImageContainer","hasImage","StyledText","as","ListContainer","narrowMaxContentWidth","X3_L","viewabilityConfig","itemVisiblePercentThreshold","onScroll","parentOnScroll","parentOnLayout","SlideComponent","isAutoPlay","setIndex","currentIndexRef","useStateRef","interval","isPlaying","play","pause","resetIntervalTrigger","resetInterval","onHandleLayout","intervalVal","setInterval","nextIndex","flatListRef","scrollToOffset","offset","clearInterval","FlatList","CellRendererComponent","FixCellOffsetOnWeb","r","renderItem","horizontal","pagingEnabled","snapToAlignment","showsHorizontalScrollIndicator","Math","round","contentOffset","scrollEventThrottle","onScrollBeginDrag","onScrollEndDrag","_borderRadius","sizeProps","loop","sequence","easing","Easing","quad","tempProps","isCircular","Invisible","MasterView","horizontalInset","StyledMasterView","StyledCard","Card","isMobile","Row","justify","Column","FlexColumn","align","numCols","StyledModal","ReactNativeModal","StyledKeyboardAwareScrollView","RadioButton","KeyboardAwareScrollView","contentContainerStyle","maxContentWidth","StyledSectionHeader","L","StyledResponsiveView","BottomButtonView","isWeb","BottomButtonViewForScrollView","HelperButton","Shimmer","HoverButton","PrimaryGradientBackground","LinearGradient","ChipContainer","lighten","rgb","string","darken","WHITE_OPACITY_54","BLACK_OPACITY_54","WHITE_OPACITY_20","contentInset","defaultOption","Alert","dismissOnBackdropPress","nativeIsVisible","isVisible","hide","useImperativeHandle","onBackdropPress","onBackButtonPress","avoidKeyboard","maxWidth","Content","BodyContent","ButtonsContainer","isColumn","action","i","AlertButton","isFirst","isLast","DiscardChangesModal","isDirty","dispatch","discardCallback","confirmModalRef","confirmOptions","useIsFocused","StatusBar","AlertBadge","hasAlert","Badge","notification","useKeyboardStatus","setStatus","setHeight","willHideListener","Keyboard","IS_ANDROID","endCoordinates","willShowListener","shade","useSafeAreaInsets","textColor","transparent","iOSKeyboardCompensation","IS_IOS","ButtonContainer","paddingBottom","alignContent","DarkPrimaryStrip","button","parentStyle","startOpen","onClose","bottomButton","cardStyle","onOpen","disableBackgroundDismiss","open","close","setVisible","onAction","dismiss","Modal","onModalShow","statusBarTranslucent","onModalHide","ModalContent","paddingTop","StyledBottomButtonContainer","BottomButton","alwaysBounceHorizontal","alwaysBounceVertical","isSecureTextEntry","setIsSecureTextEntry","secureTextEntry","fill","Svg","viewBox","preserveAspectRatio","G","clipPath","Path","topColor","bottomColor","FullContainer","AbsoluteContainer","InnerContainer","MiniHeroIcon","VERTICAL_CARET_ADJUSTMENT","HORIZONTAL_CARET_ADJUSTMENT","CARET_SIZE","calculatePosition","currLayout","helperLayout","alignHorizontally","alignVertically","computedGuidePosition","computedCaretPosition","computedCaretRotation","min","max","xPos","focusView","scrollRef","itemIndex","sectionIndex","viewOffset","scrollView","scrollTo","flatList","sectionList","scrollableNode","getScrollableNode","scrollToLocation","invertLayout","invertDimensions","dimensions","invertedCurrLayout","invertedHelperLayout","invertedWindow","_guidePosition","_caretPosition","_caretRotation","normalizeX","windowWidth","ErrorBoundary","super","getDerivedStateFromError","componentDidCatch","errorInfo","eventId","Sentry","APP_ENV","setState","render","Fallback","ScrollRefContext","ScrollRefProvider","focused","clearScrollTimeout","applyScrollCoords","helperBox","viewRef","debounce","measure","pageX","pageY","measureInWindow","exitTour","updateAnimationConfig","inOut","ease","onContinue","unregisterStep","semiTransparentBg","autoStart","startTour","parentBackgroundColor","setLayout","setHelperBox","useWindowDimensions","ValueXY","guidePosition","guideOpacity","cloneOpacity","caretPosition","caretRotation","caretRotationValue","guideDimensions","setGuideDimensions","setPosition","l","applyCoords","h","opacityAnimation","parallel","Color","updateScrollPosition","useUpdateScrollPosition","handle","internalRef","getInnerViewNode","measureLayout","node","refNode","helperDims","measureRefWithoutScrollView","getTranslateTransform","TouchableWithoutFeedback","minWidth","MOBILE_WIDTH_SMALL","X2_L","hex","borderTopWidth","borderLeftWidth","rotate","collapsable","focusedId","modalRef","sliderRef","handleViewableItemsChanged","info","viewableItems","exit","ModalDrawer","Slider","onViewableItemsChanged","StyledSkipButton","StyledSkipAllButton","ExtraLarge","IDLE","registerStep","hasViewedTutorial","shouldUpdate","pendingSteps","updateScrollPositions","createTourGuideContext","steps","_TourGuide","useTourGuide","tourSymbol","Symbol","storageId","setHasViewedTutorial","stepQueue","setStepQueue","visited","isTouring","stepId","step","newStep","forceUpdate","removeStorageVisited","absoluteFill","backdrop","GuideElement","tourGuide","shouldDisplay","_GuideElement","TourGuide","SliderElement","_SliderElement","ProfileHero","bounce","PositionContainer","User","stroke","strokeWidth","STEPS","ProfileSettingsTourMap","DRAWER","PHOTO","INFO","APP","COMMUNICATION","NOTIFICATION","PRIVACY","TERMS","HELP","SLIDES","PROFILE","freeze","Info","STROKE_WIDTH_DEFAULT","location","PROFILE_USERINFO","requiresAttention","mobilePhone","badPhysicalAddress","tourDescription","Settings","PROFILE_APPSETTINGS","MessageSquare","PROFILE_CLIENT_PRACTICE_CONFIGURATION","Bell","Shield","Edit","isLastStep","HelpCircle","HELP_CENTER","PROFILE_IMAGE_PREVIEW_SIZE","largeContainer","addPhotoButton","profilePicture","profileIcon","navContainer","navIcon","warnIcon","paddingLeft","extractNameFromOriginalImageUrl","URI","filename","match","encodeKeyFromPatient","photo","urls","original","encodeKeyFromUser","encodeKeyFromPackedImageName","imageName","split","decodeURIComponent","unpackImageName","tryCreateDirectory","documentDirectory","getInfoAsync","exists","makeDirectoryAsync","resolveImageInfoState","buildPath","deleteAsync","isDirectory","logCache","consoleParams","DEBUG_CACHE","IMAGE_CACHE_VERSION","directory","IMAGES_DIRECTORY","updateDirectories","docDir","deleteOldVersions","oldDirs","readDirectoryAsync","oldFolders","folder","OLD_IMAGES_DIRECTORY","imageCache","keys","cacheDir","tempUri","targetUri","download","downloadAsync","cleanUrl","moveAsync","from","to","downloadImageAsync","Avatar","parentUri","aspectRatio","EmptyComponent","iconSize","iconColor","setUri","setFetched","isReady","getImage","PictureContainer","useIsFetching","hasPhoto","large","ProfileScreen","navigation","openNotificationsSettings","setOptions","headerTitle","firstName","resize","isOpen","openMenu","closeMenu","onPressDeletePhoto","onPressUploadPhoto","ProfileImageContainer","StyledUserAvatar","StyledMenuContainer","FilledIconContainer","navLocations","StyledHoverCard","getParent","IonIcon","FeatherIcon","FlexedView","CPrimaryButton","ClientAvatar","sectionWeb","switch","AB_ELECTRIC_BLUE","marginRight","marginLeft","errorText","marginHorizontal","sms","encodeURI","CONFIG_STRUCTURE","subheader","disabledText","disabledAction","draftSms","smsNumber","field","disabledField","languageView","marginVerticalSmall","languagePickerView","height140","pickerLabel","buttonView","z99","zIndex","StyledPrimaryButton","StyledSettingsView","ProfileClientPracticeConfiguration","clientPracticeConfiguration","setClientPracticeConfiguration","remoteClientPracticeConfiguration","CLIENT_PRACTICE_CONFIGURATION","getClientPracticeConfiguration","updatePracticeConfig","patchClientPracticeConfiguration","practiceConfiguration","SMS_MASK","PHONE_MASK","List","descriptionNumberOfLines","Switch","onValueChange","onToggle","onSubmit","paddingTopMedium","infoFields","infoFieldsWebOrTablet","fieldLabel","darkRedBorder","lightRedBorder","borderWidthHalf","fieldValueContainer","errorLabel","fieldContainer","helperTextContainer","pleaseContactText","paddingRight","verifyText","StyledHeader","ALLY_SUPPORT_EMAIL","encodeURIComponent","appVersion","VERSION_INFO","platform","device","Device","modelName","os","getOSInfo","browser","getBrowserInfo","osName","osVersion","Boolean","navigator","userAgent","detected","version","capitalize","CContactAlly","CLink","openEmailToAlly","CHelperText","CUserInfo","line1","line2","contactUsVisible","Ionicons","phoneNumber","UserInfoTourMap","INFO_UPDATE","USER_INFO","ProfileUserInfo","providerRef","fullName","lastName","addressLine2","address","city","postalCode","isEmailBouncedOrMarkedSpam","emailError","UNKNOWN","IN_PROGRESS","mobilePhoneError","addressError","formatPhoneNumber","homePhone","workPhone","onPressRequestInfoUpdate","Navigators","MAIN_STACK","screen","PROFILE_INFORMATION_UPDATE","UserConfirmationStatus","emailSchema","required","passwordSchema","matches","confirmPasswordSchema","when","is","schema","test","newPassword","validationSchema","object","boolean","selectedPractices","userRegistered","confirmPassword","availablePractices","array","isValidSync","ctx","userConfirmationStatus","PENDING","createError","currentPassword","_objectDestructuringEmpty","onPressEye","ChangePassword","submitForm","setFieldValue","errors","isSubmitting","setFieldTouched","setFieldError","dirty","touched","useFormik","initialValues","validateOnChange","current_password","password_confirmation","vars","invalidPasswordEntered","newPasswordSameAsCurrent","getFieldError","ButtonView","PasswordInput","CChangeLanguage","changeLanguage","StyledView","AccountDeleteConfirmationModal","doDelete","useTheme","confirmDisabled","setConfirmDisabled","typedText","setTypedText","toLowerCase","DeleteAccountInput","autoCapitalize","ExtraSmall","ManageAccountSection","promptDelete","StyledDeleteButton","needsPrompt","setNeedsPrompt","setBiometricAuthAppSetting","hasCredentials","biometricsAuthAppSetting","BiometricsPromptContext","useBiometricsPrompt","BiometricsPromptProvider","BiometricAuth","biometricsEnabled","setBiometricEnabled","enableBiometrics","enable","BIOMETRIC_LOGIN_OPT_IN","titleNumberOfLines","ProfileAppSettings","setLanguage","controlConfirmationModal","useControlConfirmationModal","deleteAccount","deleteUser","animating","DeleteAccountConfirmationModal","DEFAULT_BANNER_RATIO","Banner","practiceFetching","dim","setDim","bannerUri","mobileBannerImage","imageFetching","setImageFetching","prefetch","finally","getSize","practiceCustomization","practiceCustomizationIsFetching","hideBannerImage","StyledImageBackground","blurRadius","DEFAULT_BANNER","resizeMode","ALLY_SURFACE_BLACK","locations","ImageBackground","HomeHero","Home","HomePageTourMap","SWITCH_PRACTICE","QUICK_ACCESS","TO_DOS","LIFELEARN","HOME","AnnouncementSlide","CarouselItemView","AnnouncementsCarousel","announcements","toggleAuto","activeAnnouncements","archivedAt","announcement","StyledTitle","HomeHeader","hasMultiplePractices","PROFILE_ROOT","StyledHoverButton","SELECT_PRACTICE","ChevronDown","AVATAR_SIZE","strokeLinecap","strokeLinejoin","strokeMiterlimit","QuickAccess","requestSettings","emergencyContacts","EMERGENCY_CONTACTS","getEmergencyContacts","quickLinkData","quickLinks","child","Calendar","isDisabled","Pill","onlinePharmacyLink","Information","CONTACT_US","AlertTriangle","AFTER_HOURS","QuickLinksHolder","SingleContainer","Child","LinkContainer","OpaqueContainer","Label","Bird","AnimalIcon","species","Paw","Species","AVIAN","BIRD","CAT","FELINE","Cat","CANINE","DOG","Dog","EQUINE","HORSE","Horse","BOVINE","COW","Cow","RODENT","Rodent","BUNNY","LAGOMORPH","Bunny","GECKO","Gecko","PATIENT_PHOTO_UPLOAD","predicate","isInvalidated","ItemDetail","tag","isLate","actionCondition","StyledRow","StyledAvatar","StyledBody","DateRow","CalendarContainer","PatientAvatar","CallToAction","FullActivityIndicator","StyledHeading","HeadingIconContainer","WHITE_OPACITY_10","CaughtUpText","CardContent","X5_S","StyledHoverView","HeaderToggle","count","DISPLAY_THRESHHOLD","Reminders","maxItems","setCount","setReminders","pastDue","pastDueDate","AlarmBell","LayoutAnimation","configureNext","Presets","easeInEaseOut","Suspense","fallback","reminder","toLocalShortDate","reminderId","itemType","RefillModal","requestSetting","comments","setComments","prescription","setPrescription","dialogTitle","cancelText","refillRequestHeaderTextSanitized","quantity","refill","petName","patientName","submitRequest","postRequest","REQUESTS","confirmedModalRef","refillConfirmed","RequestType","Refill","content","origin","confirmedOptions","AlertBodyContent","refillRequestConfirmationTextSanitized","search","userSearch","order","orderBy","setSearch","setSearchTerm","PAGINATED_PATIENTS","getPaginatedPatients","rawData","queryResult","PrescriptionsCard","setPrescriptions","prescriptionsLoading","usePaginatedPatients","requestLoading","isPrescriptionValid","isPatientActive","refillModalRef","Prescriptions","prescribedAt","prescriptionId","TodoCardItem","navToEditToDo","onComplete","willComplete","otherReason","ReasonMap","notes","toLocalDateTime","utc","OffsetActivityIndicator","ToDosCard","today","setToday","scheduled","setScheduled","debouncedToggle","hasTodos","TODO_STACK","ADD_TO_DO","AlarmClock","StyledSubheading","SpacedDivider","topSpacer","AppointmentCardNone","ContentContainer","StyledCta","AppointmentsCard","setAppointments","appointmentsLoading","useAppointments","upcoming","navToAppointmentDetail","APPOINTMENTS_STACK","APPOINTMENT_DETAILS","timeZone","HelpCenterCard","Trans","i18nKey","components","HOME_STACK","PawHero","WHATS_NEW_SLIDE","PET_STACK","PATIENT_LIST","screenName","feature","targetTours","PETS","WhatsNew","hasSeen","setWhatsNewViewed","WHATS_NEW_VIEWED","navigateToNewTourScreen","notReady","canShow","selectedFeatures","f","articles","lifelearnOptions","LIFELEARN_ARTICLES","getLifelearnArticles","articleId","article","LifelearnSlide","imageError","setImageError","IMG_ASPECT_RATIO_MOBILE","IMG_ASPECT_RATIO_STANDARD","imageUri","AnimalIconContainer","XXXL","summary","strongLink","openArticle","ARTICLE","LifelearnCard","useLifelearnArticles","slideItems","featured_image","BookOpen","ARTICLES_HUB","queries","refresh","refetchQueries","results","useQueries","every","isStale","someQueryLoading","guideRef","FocusAwareStatusBar","barStyle","refreshControl","RefreshControl","refreshing","onRefresh","onMomentumScrollEnd","scrollsToTop","RemindersCard","HelpCenterHoverCard","StyledHoverCardRow","AnswerText","SectionTitle","Link","SearchInput","ToggleIconContainer","ChevronUp","FaqCard","question","answer","showButtons","ourEmail","FA5","ANT","Header","tourGuideHasResults","faqHasResults","searchText","setSearchText","TourGuideCard","stack","tours","ChevronRight","FAQS","TOUR_GUIDES","PATIENT_PROFILE","LOYALTY_STACK","LOYALTY_ACTIVITY","LOYALTY","REQUEST_STACK","REQUEST","activeTourGuides","PRACTICE_FEATURES","LOYALTY_PROGRAM","searchResult","faq","HelpCenter","useSearchResults","setSearchValue","SectionList","ListHeaderComponent","renderSectionHeader","stickySectionHeadersEnabled","ArticleCard","Holder","floor","ArticleHub","numColumns","StyledFAB","FAB","ActionButtons","print","rate","ratingButtonsDisabled","Printer","ThumbsUp","ThumbsDown","useGoBack","getState","parent","back","s","routeNames","routes","focusedName","getAvailableRoutes","CommonActions","captureMessage","FormSection","Article","route","goBack","setRatingButtonsDisabled","setStart","rateArticle","postLifelearnFeedback","htmlRef","handleWebPrint","useReactToPrint","handleNativePrint","Print","printAsync","html","isPrinting","setIsPrinting","handlePrint","onPressRate","timeSpentInSec","rating","isThumbsUp","feedback","BackFabContainer","ChevronLeft","LowerContainer","RenderHTML","baseStyle","enableExperimentalMarginCollapsing","enableCSSInlineProcessing","tagsStyles","ignoredStyles","ActionButtonsContainer","useDefaultModalScreenOptions","headerShown","headerTitleAlign","headerTitleStyle","headerTintColor","headerStyle","headerShadowVisible","headerLeftContainerStyle","headerLeft","X","headerRightContainerStyle","TransitionPresets","ModalTransition","HomeStack","createStackNavigator","HomeStackNavigator","mainThemedHeader","headerBackTitleVisible","modalScreenOptions","Navigator","Group","screenOptions","Screen","component","setSelectedPatient","SelectedPatientContext","useSelectedPatient","SelectedPatientProvider","ps","StyledHeadline","PaperCard","AvatarContainer","DataContainer","RightIconContainer","CaptionContainer","AppointmentListItem","startTime","appointmentTimeNotPassed","shouldDisable","patientDisplay","CalendarConfirmed","confirmation","CalendarPending","PatientSelector","typeName","menuOpen","selectAndClose","SelectorCta","PatientOption","StyledSlash","opaquePlaceholder","StyledPatientAvatar","BLACK_OPACITY_20","Slash","AppointmentStatusCta","isSoon","isExpired","canConfirm","useAppointmentConfirmation","openMaps","simpleAddressFormatter","Map","openModal","toLocaleString","dateStyle","timeStyle","AppointmentCardNext","patientIsLoading","toLocalDate","Clock","setIsSoon","setIsExpired","setCanConfirm","XXL","detail","StyledIcon","StyledCtaContainer","StyledAppointmentStatusCta","AppointmentCardLoading","StyledActivityIndicatorContainer","RequestAppointmentCta","Plus","CalendarHero","AppointmentsTourMap","NEXT","UPCOMING","PAST","AppointmentListItemLoading","numRightIcons","StyledShimmer","AllAppointmentsLoading","numItems","AppointmentsListItemLoading","HeroSection","HeroContainer","NextAppointmentCard","PetSelectSuspenseContainer","HeroBottom","EMPLOYEES","AppointmentsList","touring","TwoColorView","onEndReached","tintColor","ListFooterComponent","LoadingNextIndicator","NoMoreText","AppointmentsRoot","StatusbarOffset","TABLET_WIDTH_PORTRAIT_MIN","BackgroundStrip","XL","StyledShimmerBody","StyledShimmerHeading","StyledConfirmationNote","StyledPressable","LoadingDetails","useAppointment","getAppointment","AppointmentDetailsTourMap","STATUS","CALENDAR","MAP","CALL","GuideElementWrapper","guideData","guide","isDisplayData","Details","displayData","MapPin","Phone","makePhoneCall","AddToCalendar","isPast","addToCalendarPressed","useCalendarPermissions","calendarEventId","setCalendarEventId","CALENDAR_APPOINTMENT","calendarEvent","setCalendarEvent","getEventAsync","AppointmentDetails","addToCalendarWidth","setAddToCalendarWidth","employeeId","permissionStatus","requestCalendarPermissionsAsync","ADD_TO_CALENDAR","useDefaultStackOptions","headerLeftLabelVisible","AppointmentsStack","AppointmentsStackNavigator","themedHeader","initialRouteName","STEPS_DEFAULT","TIME_DEFAULT","formatFn","formatter","viewValue","setViewValue","viewValueRef","timerRef","stopAnimation","minimumStep","stepSize","valuePerStep","updateValueInSteps","clampValue","bind","TabViewContainer","TabViewInnerContainer","ExtendedHeader","topMargin","TopTab","CoinBalanceContainer","CoinBalanceAmountText","AnimatedNumber","CoinIcon","CareCoin","ExpiringCoinsHeader","CareCoinView","RewardOfferCardContainer","X4_L","RewardOfferInnerContainer","RewardContentView","RewardTitleView","NullImageView","RewardImage","ContinuitySegmentContainer","LineContainer","TopLineOne","isPartialFill","TopLineTwo","isStart","isFilled","CircleIndicator","BottomLine","StyledSectionTitle","ActivityItem","activityLineItem","onPressDelete","TRANSACTION_DETAILS","isExpiredItem","Trash","TrophyHero","Trophy","AwardHero","Award","LoyaltyTourMap","BALANCE","REWARDS","EXPIRING","TRANSACTIONS","BAR","tourExample","LoyaltyActivity","selectedTransaction","setSelectedTransaction","cancelRedemption","isCancelingRedemption","deleteLoyaltyTransaction","sectionData","onPressConfirm","ExpiringCareCoinItem","expringAmount","ContinuitySegment","availableCoins","rewardPrice","isEnd","TouchableOpacity","OfferCard","useReward","imageURL","imageId","thumbnail","price","RewardRow","LOYALTY_REWARD","LoyaltyRewards","sectionListData","showListHeaderComponent","isWithin30days","strong","TabBarIndicator","leftOffset","translateValue","TOP_TAB_WIDTH","widthValue","derivedWidth","setDerivedWidth","w","createInteractionHandle","clearInteractionHandle","StyledTabIndicatorAnimatedView","GuideWrapper","initialIndex","thisIndex","focusNext","LoyaltyTabBar","indexTabWidths","firstTimeRef","isFocused","accessibilityRole","accessibilityState","selected","emit","target","canPreventDefault","defaultPrevented","Tab","createMaterialTopTabNavigator","LoyaltyStackNavigator","pageTitle","tabBar","animationEnabled","sceneContainerStyle","LOYALTY_REWARDS","PatientCard","isFromRequestWizard","patientStatus","deceasedDate","PATIENT_STATUSES","DECEASED","goToPatientProfile","ImageContainer","ACTIVE","StatusContainer","NameContainer","PatientIconMessage","PatientListTourMap","FILTER","VIEW","PET_ID","EDIT_INFO","PHOTOS","EDIT_BASIC_INFO","EDIT_ADDITIONAL_INFO","EDIT_COMMENTS","PatientListContent","patientList","tourFirstPatientProfile","firstActivePatient","shouldNarrowDisplay","ListEmptyComponent","PatientStatusSelector","selectedStatus","setSelectedStatus","Selector","SelectorOption","PatientListRoot","PetStack","PatientStackNavigator","_todos","filterTodos","_patientId","_reason","CheckCircleHero","CheckCircle","ToDoListTourMap","PASTDUE","TODAY","SCHEDULED","COMPLETED","ADD","DeleteButton","dragAnimatedValue","Button","TodoItem","isPastDue","isDeleted","disablePress","enablePress","willToggle","doToggle","debounceEnablePress","scaleY","nameAndReason","String","Swipeable","renderRightActions","progress","onSwipeableWillOpen","onSwipeableWillClose","uncheckedColor","TodoItemFallback","Rect","fillOpacity","Circle","cx","cy","Defs","ClipPath","TodayPlaceholder","CompleteContainer","ConfettiBackground","Confetti","AccordionSectionHeader","boolHook","completed","shouldDisplayPlaceholder","StyledAccordion","StyledAccordionTitle","expanded","emptyPlaceholder","closeIcon","drawerCardStyle","drawerContentContainerStyle","FilterChip","StyledTouchable","AnimatedView","FiltersDrawer","onSelectFilters","selectedReason","pet","setPet","setReason","Chip","TodoListContent","drawerRef","filters","setFilters","filterCount","headerRight","completedTodos","usePaginatedTodos","DESCENDING","controls","setNow","placeholderIsVisible","showPlaceholder","isSame","todoData","tourEnabled","controlsPastDue","controlsToday","controlsScheduled","controlsCompleted","guideText","usePlaceholders","exampleToDo","noTodos","isProcessingBatchDelete","deleteAllCompleted","allCompleted","StyledConfetti","Empty","StyledPropCard","propSections","renderSectionFooter","StyledDivider","initialNumToRender","onEndReachedThreshold","CreateToDoFabContainer","CreateTodoFAB","TodoList","AlternateRepeatTypes","repeatTypes","PeriodUnit","MINUTE","number","optional","mixed","oneOf","TodoReason","nullable","OTHER","repeatType","none","HOUR","DAY","WEEK","MONTH","YEAR","allowNotify","defaultData","GIVE_MEDICATION","alertByMinutesPrior","patientOptions","reasonOptions","repeatOptions","periodUnitMap","repeatLabel","customRepeatOptions","unitLabel","plural","alertOptions","alertOptionsArray","humanizedMoment","humanize","AddToDoTourMap","BASIC","DUE_DATE","NOTIFY","ALERT","AddTodoScreen","alertHandle","handleSubmit","resetForm","submitCount","validateOnBlur","cleaned","_destroy","newAlert","getTodo","retry","setParams","Trash2","mapTodoToEdit","useAddTodoOptions","rightProps","fieldName","debouncedSubmit","StyledActivityIndicator","StyledScrollView","multiline","DatePicker","startDate","set","m","TimePicker","isNaN","keyboardType","StyledWarningContainer","StickyButtonMasterView","ToDoStack","TodoStackNavigator","SortOrder","filterRequests","criteria","sortOrder","DESC","fromDate","isSameOrAfter","RequestsFilterDrawer","localFilters","setLocalFilters","sortByOptions","sortOrderOptions","SORT_BY_OPTIONS","SORT_ORDER_OPTIONS","RequestStatus","StyledDatePicker","format","endDate","StyledDropdownContainer","ASC","archived","nonArchived","Archived","RequestWizardFAB","setOpen","styles","actionStyle","containerStyle","fabStyle","requestActions","baseAction","PATIENT_UPDATE_STACK_NAVIGATOR","REQUESTS_PRODUCT","backdropColor","onStateChange","InboxHero","Inbox","RequestsTourMap","NEW_AND_IN_PROGRESS","ARCHIVED","PLUS","SuspenseRequestItem","getRequestTargetName","InfoUpdate","RequestItem","isForPatient","patientInfo","notOwner","targetName","REQUEST_DETAILS","SectionHeaderContainer","NoRequestText","EmptyListCard","StyledHeroIcon","FabContainer","DummyFAB","RequestList","tourDummyData","Appointment","preferredDate","preferredTime","tourBody","New","FALLBACK_DATA","Requests","getRequests","getQueryData","prepData","partitionRequests","filterRef","showFilter","KNOWN_FIELDS","updateContent","dataType","newValue","informationUpdates","entry","mapKeys","camelCase","update","camelized","knownFieldIndex","indexOf","KNOWN_FIELD_MAP","cellPhone","altIcon","MaterialCommunityIcons","birthdate","breed","microchip","FontAwesome6","rabies","sex","weight","insuranceProvider","policyNumber","diet","medicalConditions","appointmentType","preferredContactMethod","contactMethodIcon","method","PreferredContactMethod","Email","statusName","Entypo","InProgress","details","generateStandardData","generateAppointmentData","generateRefillData","generateInfoUpdateData","labelShimmerWidth","valueShimmerWidth","RequestDetails","attachments","getRequest","normalizeRequestData","images","AltIcon","FontAwesome5Icon","DetailContainer","IndentedValue","attachment","ImageHolder","PlaceholderView","CenteredText","practiceName","RequestStack","RequestStackNavigator","RouteLabel","StyledTabLabel","TabNavigator","createBottomTabNavigator","BottomTabNavigator","todoAlert","setTodoAlert","dueNow","backBehavior","tabBarIcon","House","descriptors","insets","BottomNavigation","Bar","navigationState","safeAreaInsets","inactiveColor","onTabPress","renderLabel","ToDoStackNavigator","PatientRowItem","dateLabel","overdue","dateText","daysPastDue","numberOfDaysOverdue","PAGINATED_REMINDERS","status_filter","server_managed","getPaginatedReminders","useFetchNextPage","setToggle","FilteredReminders","windowHeight","usePaginatedReminders","ListFooterContainer","SafeAreaView","edges","PAGINATED_PRESCRIPTIONS","getPaginatedPrescriptions","FilteredPrescriptions","usePaginatedPrescriptions","ContactUs","hasTwoWayTexting","TWO_WAY_TEXTING","openSMS","Mail","openEmail","website","Globe","facebookLink","Facebook","instagramLink","Instagram","twitterLink","PressableRow","AfterHoursContactCard","setAspectRatio","PracticeImage","ActionButton","phone","SectionValue","Instructions","instructions","CollapsibleSection","CollapsibleSectionHeader","AfterHours","PET_ID_IMAGE_SIZE","PageHeader","GREY_SHADOW_80","PatientImage","FieldValueContainer","PracticeLogo","X5_L","SectionOne","SectionTwo","LogoContainer","TableRow","RowDescription","MedicalReminders","filteredReminders","CurrentPrescriptions","filteredPrescriptions","aYearAgo","rx","MIN_SHEET_HEIGHT","PatientID","configLoading","isPrintingWeb","SetIsPrintingWeb","contentRef","onPressSendPrint","promise","Sharing","isAvailableAsync","FileSystem","cacheDirectory","fileName","filePath","captureRef","result","writeAsStringAsync","encoding","RNShare","share","shareAsync","Share","contentLayout","setContentLayout","translateY","_scale","themeContext","contentWidth","scrollEnabled","minHeight","petRecordsLogoImage","globalLayout","weightUnit","microchipNumber","rabiesTag","AllyBlueGradient","ScreenTitle","PracticeRow","UnselectableRow","LoadingIndicator","Section","LogoHeader","displayName","LogoAndNameContainer","Logo","verticalAlign","MINIMUM_RESEND_DURATION","useResendConfirmationEmail","lastResend","setLastResend","EMAIL_CONFIRMATION_TIMESTAMP","hasSentRecently","sent","unsent","timeSinceLastSent","isSending","resendConfirmationEmail","sendConfirmationEmail","humanizedTime","UnconfirmedPractice","loopValue","aV","alertRef","practiceEmail","contactPractice","Check","scaleX","RefreshCcw","SelectPractice","available","unconfirmed","unregistered","isSwitching","calendarId","alerts","calendars","setCalendars","defaultCalendarId","setDefaultCalendarId","isAddingEvent","addingEvent","doneAddingEvent","setCalendarEntry","getCalendarsAsync","EntityTypes","EVENT","getDefaultCalendarAsync","calendar","relativeOffset","enableReinitialize","createEventAsync","alarms","LoyaltyReward","hasInsufficientCoins","setHasInsufficientCoins","postTransaction","postLoyaltyTransaction","confirmTransaction","ratio","setRatio","InnerView","OfferImage","BodyText","TitleText","onPressRedeem","provider","rewardTitle","TransactionDetails","transaction","abs","FaceRecognition","fillRule","BiometricLoginOptIn","Bullet","disableBiometrics","authenticateAsync","advance","PatientName","FabRow","PATIENT_ID","Edit2","InfoCard","items","ProfileView","basicInfo","basicInformation","additionalInfo","additionalInformation","FolderPlus","BasicInfo","AdditionalInfo","useFileItemAnimation","animatedProgress","hidden","hoverEffect","_progress","finished","Status","FileItem","modifyImage","abortRef","setProgress","UPLOADED","UPLOADING","fileSize","filesize","base64str","INVALID_FILE","Buffer","TOO_LARGE","uploadRequestPhoto","AxiosError","ERR_CANCELED","OTHER_ERROR","ActionContainer","AnimatedImage","ProgressContainer","ProgressFill","percent","Activity","DeleteBadge","ErrorCaption","UploadFiles","onImageChange","buttonMode","selectImages","getFileNameKey","ImagesHolder","entries","ImageIcon","Camera","substring","lastIndexOf","CommentsAndFiles","setImages","exitTourAndGoBackToMyPets","UploadContainer","hasData","EditInfo","InfoUpdateItems","infoUpdateItems","infoUpdateItem","fieldNamesFromPatient","imagesDict","newPatientImageUri","contactMethod","contactRequiredFields","isFieldDirty","createBasicInfoRequestItemArray","contentPayloadItems","createAdditionalInfoItemArray","initialValuesBuilder","objValue","srcValue","ConfirmChanges","setContactMethod","imageInfo","CommentsAndFilesContainer","TempImageAvatar","patientIsMutating","FormState","ACTIONS","STATES","VIEW_PROFILE","buttonText","CONFIRM_CHANGES","useUploadPatientPhoto","postPatientPhoto","deletePatientPhoto","preparePhotoUpload","AvatarMaskedView","MaskedView","maskElement","Rectangle","Cutout","PatientProfileAvatar","onPressCameraOrUpload","isCamera","avatarAspectRatio","EditFabContainer","FeatherImage","useFormState","submitAdditionalInfoUpdate","submitInfoUpdateRequest","dismissModal","initValues","cast","isValid","promises","deleteP","requestImageIds","imageUpload","additionInfoUpdate","formAdvance","useReducer","nextState","prevState","ADVANCE","GO_BACK","formGoBack","patchPatient","closeModal","ExitContext","ExitProvider","exitProvider","usePatientData","bottomButtonPressed","submitDisabled","needsContactMethod","BottomButtonContainer","addressLine1","fieldNames","addressFormatter","ZIP_MASK","toUpperCase","addressFields","nameFields","createRequestItemArray","fullAddressText","AddressChangeModal","propBuilder","infoUpdates","setPreferredContactMethod","ConfirmChangesContainer","ItemContainer","ContactMethodContainer","ProfileInformationUpdate","setInfoUpdates","formData","inputs","createNamedRefs","fauxAddressRef","createRef","validateForm","handleBlur","changeRequests","addressFormVisible","showAddressForm","hideAddressForm","confirmationVisible","showConfirmation","hideConfirmation","errorMsg","disableSubmit","change","blur","HelperText","PatientUpdateStack","PatientUpdateStackNavigator","NavigationContainer","independent","REQUESTS_PATIENT_SELECTOR","PatientProfile","LoginLoader","showLoadingLogout","setShowLoadingLogout","timer","ActivityIndicatorView","MainStack","MainStackScreen","STACK_SCREEN_OPTIONS","transitionAnimation","ModalFadeTransition","BOTTOM_TAB_STACK","presentation","reload","isString","LoadingContainer","FormContainer","isNarrow","HeroImageContainer","css","FootNoteContainer","PrimaryColorBackground","DownloadOurAppContainer","AppStoreBadgeContainer","AppStoreContentInnerContainer","AppStoreContentContainer","DebugContainer","RefreshTextLink","IconTextLink","reloadApp","AuthErrorMessage","ErrorMessageContainer","FlexContainer","BLACK_OPACITY_70","WHITE_OPACITY_70","useForgotPassword","passwordResetSending","forgotPassword","requestPasswordReset","useLoginComponentControl","debouncedEmail","continueAllowed","primarySelectedPractice","loginTitle","showEmailActivity","showPractices","showPassword","showRememberMe","showConfirmPassword","showForgotEmail","showForgotPassword","showLoginButton","LandingTourMap","EMAIL","MULTIPLE_PRACTICES_DROPDOWN","MULTIPLE_PRACTICES_AVAILABLE","PRACTICES_REGISTERED","LANDING","ErrorMessage","selectedPractice","resendConfirmation","refreshData","prevData","nextData","fetchQuery","isEqual","LoginFormComponent","focusForm","setValues","practicesFetched","forgotPasswordRef","biometricAuthAllowed","setBiometricAuthAllowed","credentials","emailRef","passwordRef","confirmPasswordRef","emailMessage","StyledTextInput","autoComplete","StyledSecureInput","isDevice","PRACTICE_CLIENT_SEARCH","inputStyle","SecureTextInput","isSamePractice","MultiplePractices","setSelected","toggleSelect","sel","selectedIndex","Selectable","BottomClip","HeroImage","petSignInImage","imageOkay","setImageOkay","LandingImage","BottomClipContainer","Mask","MailSuper","LogoSuper","PawPathSuper","MailHero","IntroDrawer","QRPlayStore","QRAppStore","DownloadAppStore","DownloadPlayStore","DownloadOurApp","baseOs","setBaseOs","DeviceInfo","hideAppStoreBadge","hidePlayStoreBadge","PETPAGE_IOS_APP_STORE","PETPAGE_PLAY_STORE","adminUserEmail","AdminLogin","openUserSearch","endSession","impersonateApiClient","adminSignIn","InputContainer","StyledHoverTextButton","UserSearchResultItem","resourceName","UserSearch","startImpersonateSession","petOwnerEmail","setPetOwnerEmail","template","impersonateUser","searchResults","isSuccess","findUsers","AppUserState","providerState","openAdminLogin","endAdminSession","findUser","ImpersonationContext","useImpersonation","ImpersonationProvider","stateRef","appUserState","CLIENT_MODE","adminToken","goToAdminLogin","ADMIN_LOGIN","goToUserSearch","USER_SEARCH","goToEndSession","ENDING_SESSION","goToImpersonateUser","userToken","IMPERSONATE","Landing","formFocused","desiredPracticeName","formik","initialStatus","LOG_IN","LOGGING_IN","setErrors","spring","practicesSelected","SELECT_PRACTICES","CREATING_ACCOUNTS","practices","ACCOUNTS_CREATED","toLocaleLowerCase","setDisplayName","canShowCustomContent","setCanShowCustomContent","doSelect","unselect","setDebouncedEmail","checkEmail","rawIsFetched","updatePractices","desiredPractice","confirmedPractice","CONFIRMED","registeredPractice","triggerUpdate","setIsNarrow","isImageShowing","keyboardShouldPersistTaps","onLongPress","termsUri","API_URL","memo","TermsHtml","bearerToken","li","ignoredDomTags","TermsAndConditions","agree","setAgree","terms","accept","signature","ChangePasswordModal","PetPageDisabled","EmailLink","WebButton","AccountLocated","moveNext","maskedPracticePhoneNumber","addBottomGap","PracticeClientSearchTourMap","HOSPITAL_SEARCH","SEARCH_BY","SEARCH_BY_CITY","HOSPITAL_SEARCH_RESULTS","CLIENT_SEARCH","clientSearchValidationSchema","shape","practiceSearchValidationSchema","zip","ClientSearch","setModalTitle","setModalText","showAlert","updateData","sendVerificationEmail","sendVerificationEmailLoading","performClientSearch","performClientSearchLoading","clientSearch","client","MISSING","NaN","lastNameRef","phoneNumberRef","PRACTICE_SEARCH","PRACTICE_SEARCH_RESULTS","ACCOUNT_LOCATED","examplePractice","fingerprint","firstSyncedAt","lastSyncedAt","faxNumber","country","businessContactName","businessContactEmail","features","googletagManagerToken","syncStatus","visitable","pms","PracticeSearch","searchByZip","toggleSearchBy","practiceSearch","zipRef","cityRef","continuePressed","PracticeSearchResult","PracticeSearchResults","SearchHero","Search","PracticeClientSearch","combinedData","SHOW_MODAL","UPDATE_DATA","modalTitle","modalText","HeaderBackButton","showModal","allyEmail","DISPLAY_MESSAGE_DURATION","EmailConfirmation","multipleAccounts","paramToBoolean","canGoBack","CONFIRM_EMAIL","confirmEmail","onSettled","StackActions","headerHeight","useHeaderHeight","confirmation_token","confirmationToken","StyledButtonRow","BiometricLogin","retryAttempts","setRetryAttempts","loginResult","passwordConfirmation","TokenResetPassword","subscribe","mutation","TOKEN_PASSWORD_RESET","resetPasswordWithToken","args","resetPasswordToken","handleResetPassword","SuccessContainer","narrowHorizontalInset","NotificationHero","clipRule","x1","y1","x2","y2","gradientUnits","Stop","stopColor","PushNotificationsOptIn","BulletItem","notNowPushed","promptUser","NO_PREFERENCE","schedule","categories","allowNoPreference","colKey","duplicateOfAppointmentCategoryId","appointmentLength","useAppointmentTypes","appointmentTypes","descriptionOverride","categoryId","clientSchema","yup","emailAddress","acceptConditions","patientSchema","isNewPatient","age","notificationSchema","smsOptIn","imageUploadSchema","additionalInfoSchema","requireComments","columnSchema","appointmentSchema","appointmentOption","allowCategorySelection","columnOption","availableDates","availableTimes","cat","of","availableColumns","clientInfo","appointmentInfo","notificationSettings","BOOKING_STEPS","halfSize","NoticeContainer","NoticeSection","NoticeText","NoticeIcon","NoticeTextContainer","FormScrollView","MainText","validateField","getIn","StyledUpload","displayedError","setDisplayedError","shakeValue","shake","o","RichTextRenderer","headerText","clientPatientQuery","formTitle","disclaimer","checkForTerms","validate","abortEarly","TermsCheckbox","textContentType","unmasked","EditButton","StyleButton","disableEditing","goToStep","fields","stateKey","fieldDisplay","dataKey","labelValues","valueSection","errorsSection","orientation","transformedValue","RowStyle","ColumnStyle","confirmationSections","sectionProps","ConfirmationSection","SIDE_BAR_LOGO_SIZE","STEP_STATUS","getStepState","valid","COMPLETE","ERROR","INCOMPLETE","MARKER_SIZE","disableNav","stepInfo","currentStep","validationResults","countableSteps","lastStep","SidebarContainer","PracticeInfoContainer","petPageLogo","INTL_PHONE_MASK","NavigationIndicatorContainer","IndicatorRow","IconText","Marker","LanguagePickerContainer","switchColors","stepState","switchTextColors","indicatorPosition","stepWidth","TopBarContainer","totalSteps","TabBarHighlight","stepCount","barIndicatorColor","compensation","leftImage","LeftImageCustomization","DOG_AND_CAT","DogAndCat","CANINE_FELINE_EQUINE_EXOTIC","CanineFelineEquineExotic","CANINE_FELINE_EQUINE","CanineFelineEquine","CANINE_FELINE_EXOTIC_2","CanineFelineExotic2","CANINE_FELINE_EXOTIC","CanineFelineExotic","Equine","EXOTIC","Exotic","Feline","backgroundPattern","BackgroundPatternCustomization","HORSE_SHOES","HorseShoes","PAWS","Paws","PAWS_AND_HORSESHOES","PawsAndHorseshoes","PAWS_AND_LIZARDS","PawsAndLizards","disableTabNav","canExit","showReturnToConfirmation","showReturnToPetPage","goToConfirmation","errorMessage","showContinueButton","continueText","bottomButtonAction","bottomButtonText","bottomButtonDisabled","TopNavBar","FullScreen","BackgroundPattern","getOnlineBookingBackground","appointmentBooking","LeftNavBar","ContentCard","LeftHero","getOnlineBookingHero","OuterContainer","MAX_CARD_WIDTH","isTablet","isLandscape","newPatient","reorderedPatientList","ListHeaderComponentStyle","CardContainer","PatientLabelContainer","alpha","hexa","variables","SelectPatient","PracticeNotFound","CONFIRMATION_SECTIONS","makeMoment","SELECT_APPOINTMENT","CLIENT_INFO","PATIENT_INFO","ImageHolderSection","ADDITIONAL_INFO","NOTIFICATION_SETTINGS","OnDemandStatus","WritebackStatus","VALID_DURATION","POLL_INTERVAL","TIMEOUT","syncError","ON_DEMAND_SYNC","onDemandSync","ON_DEMAND_STATUS","timeoutTime","timedOut","statusError","statusFetched","onDemandStatus","RUNNING","onDemandReady","at","minDays","daysInAdvanceMin","maxDays","daysInAdvanceMax","categoryType","getSchedule","extractAppointmentOptions","extractFieldDisplayOptions","columns","extractColumnOptions","SCHEDULE","isClientMatch","useFilterAppointmentOptions","openingsQuery","openings","appointmentOptions","BookingContext","BookingProvider","isAnotherAppointment","setIsAnotherAppointment","visitData","useTrackVisit","TRACKING_EVENTS","APPOINTMENT_REQUEST_PAGE","useAppointmentOptions","lastSubmittedValues","setLastSubmittedValues","getInitialValues","appointmentOptionsData","apiData","fullNameAndTitle","INITIAL_FORM_DATA","APPOINTMENT_REQUEST_SUBMITTED","submissionData","generateSubmissionValues","newClient","appointmentTypeId","Intl","DateTimeFormat","hour","minute","smsOptOut","petAge","petSex","unauthenticatedApiClient","useOnDemandPoll","_useMutation","patientData","mapClientPatientSearch","clientUnauthenticatedSearch","appointment_type_id","category_id","SCHEDULE_OPENINGS","CONFIRMATION","bookAnotherAppointment","userFound","APPOINTMENT_REQUEST_PAGE_CLIENT_FOUND","SUBMISSION_STATE","WRITEBACK_STATUS","switchColor","SUBMITTING","UNAVAILABLE","switchProgress","MANUAL","getPracticeText","onlineBookingConfirmationText","confirmationText","AlertCircle","REFETCH_INTERVAL","MIN_STATE_DURATION","isApiError","request_id","writeback_status","FAILURE","isFinalState","SUCCESS","setStringsKey","setNextState","getNextState","isSchedulingError","BookingStateIcon","ProgressBar","indeterminate","findUnavailableDates","allDates","enumerateDaysBetweenDates","dates","currDate","lastDate","CustomLabel","practiceTimeZone","timeString","isLocal","tz","guess","localTimeString","AnimalLoader","AnimalContainer","AppointmentLoader","animationColorReplaced","lottieWholeColorReplace","lottieData","cloned","asset","layers","layer","shapes","it","c","LoadingAnimation","showDogAndCatLoader","loader","showAnimalLoader","showEmptyLoader","LottieView","webStyle","renderMode","autoPlay","SelectAppointment","unavailableDates","openingsAllowed","firstDay","firstTime","disabledDates","getTime","getTimezoneOffset","hasLoadedOnce","setHasLoadedOnce","validator","ClientInformation","PatientInfo","NotificationSettings","Confirmation","BookingStatus","OBLayoutController","bookingStateResult","useBookingState","bookingState","hasCompleted","currentStepInfo","STEP_INFO","mapValues","Component","LayoutController","PLACEHOLDER_TOKEN_DATA","OnlineBooking","autoFillError","isTokenDataFetched","AUTOFILL_APT","patientQuery","practiceInfoIsFetched","requestSettingsIsFetched","appointmentRequestConfirmationText","appointmentRequestHeaderText","writebackAppointmentRequests","getAppointmentRequestSettings","Sections","Sandbox","NavButton","defaultsDeep","productQuantity","integer","productDescription","productComments","concat","_additionalInfoSchema","REFILL_STEPS","useRefillFormContext","submitProductRequest","isSubmitError","toError","toNoError","REFILL_REQUEST_SUBMITTED","REFILL_REQUEST_PAGE_CLIENT_FOUND","ProductInfoSection","sanitizedText","REFILL_CONFIRMATION","namespace","_isSubmitting","setIsSubmitting","setIsError","PRODUCT_STEP_INFO","RefillStatus","RefillLayoutController","ProductRequest","AUTOFILL_REFILL","refillRequestConfirmationText","refillRequestHeaderText","getRefillRequestSettings","RootStack","RootStackScreen","fontsLoaded","useFonts","Roboto_100Thin","Roboto_100Thin_Italic","Roboto_300Light","Roboto_300Light_Italic","Roboto_400Regular","Roboto_400Regular_Italic","Roboto_500Medium","Roboto_500Medium_Italic","Roboto_700Bold","Roboto_700Bold_Italic","Roboto_900Black","Roboto_900Black_Italic","imageRecordsBuilt","setImageRecordsBuilt","imageRecords","imagesInfo","imagesToDelete","imagesToRecord","modificationTime","buildRecords","records","practiceClientSearchScreenOptions","getInitialRouteName","PET_PAGE_DISABLED","BIOMETRIC_LOGIN_AUTH","ACCEPT_TERMS","RESET_PASSWORD_REQUIRED","EMAIL_CONFIRMATION","PUSH_NOTIFICATIONS_OPT_IN","SANDBOX","initialParams","AppError","trim","selectUserProperties","prepareUserMetadata","startCase","captureUserFeedback","event_id","messageHandler","DEBUG_MENU_ITEMS","tutorialKeys","multiRemove","deleteItemAsync","DebugFAB","verticalLimits","horizontalLimits","calcRange","pan","extractOffset","panResponder","PanResponder","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderMove","dx","dy","onPanResponderRelease","evt","gestureState","positionX","positionY","hideMenu","shouldCrash","setShouldCrash","StyledFABContainer","panHandlers","ForcedUpdate","openStore","PETPAGE_APP_STORE","ForcedUpdateProvider","needsUpdate","setNeedsUpdate","IS_DEBUG","debugConfig","BASE_URL","json","versionNumber","releaseDate","getAppStoreVersionInfo","versionInfo","appNeedsUpdate","userAppVersionNumber","criticalVersionNumber","gracePeriodDays","isCriticalReleaseAvailable","compareVersions","isPastGracePeriod","endOf","pkg","require","setupURLPolyfill","LogBox","ignoreAllLogs","linking","prefixes","App","onMessage","sharedQueryClient","readyNav","toastConfig","SuccessToast","text1NumberOfLines","text2NumberOfLines","ErrorToast","borderLeftColor","RED_WARNING","InfoToast","navigationRef","QueryClientProvider","card","border","onReady","routingInstrumentation","registerNavigationContainer","documentTitle","RootStackNavigator","IS_PROD","Constants","expoConfig","extra","DEBUG_MENU","wrap","withTouchEventBoundary","snakeCase","patient_portal","put","passwordError","ChangePasswordError","ENDPOINTS","CLIENTS","createImageFormData","PictureType","Accept","delete","logout","getEmployees","getPractices","getOpenings","onUploadProgress","abortController","multiple_accounts","isConfirmation","article_id","time_spent_in_sec","total","getPatientAppointments","getPatientPrescriptions","getPatientReminders","sourceToken","Headers","packageJson","getToken","append","postRegister","deviceToken","authToken","baseURL","environment","PUSH_URL","postStatus","generateGenericHeaders","OfficeBuilding","AutoRenew","HairDryer","MedicalBag","Needle","AHOY_VISITS","AHOY_EVENTS","USERS","USERS_SIGN_IN","USERS_SIGN_OUT","USERS_FIND","PET_SIGN_UP","USERS_CURRENT","EULA","GET_CLIENT_PRACTICE_CONFIG","PATCH_CLIENT_PRACTICE_CONFIG","GET_PRACTICE","GET_PRACTICES","LOYALTY_COIN_BALANCE_TOTAL","GET_REWARD","AUTO_FILL_TOKEN","GET_PATIENT_APPOINTMENTS","GET_PATIENT_PRESCRIPTIONS","GET_PATIENT_REMINDERS","GET_PRACTICE_CONFIG","POST_CLIENT_PHOTO","CLIENT_PHOTO_DELETE","POST_PATIENT_PHOTO","PATIENT_PHOTO_DELETE","DELETE_LOYALTY_TRANSACTION","GET_REQUEST_SETTING","ACTIVE_CLIENT_LIST","USERS_PASSWORD","APPOINTMENT_CONFIRMATION","REQUEST_IMAGE","CLIENT_UNAUTHENTICATED_SEARCH","PUSH_REGISTER","PUSH_STATUS","PUSH","GET_LIFELEARN_ARTICLES","POST_LIFELEARN_FEEDBACK","REQUEST_STATUS","ErrorName","ErrorMsg","IS_EXPO_GO","appOwnership","SCHEME","IS_DEV","MOBILE_WIDTH_EXTRA_SMALL","NOT_MOBILE_WIDTH","TABLET_WIDTH_PORTRAIT_MAX","MODAL_EXTRA_SCROLL_HEIGHT","appPackage","nativeBuildVersion","ASCENDING","FIXED_INPUT_HEIGHT","asMinutes","DEBUG_NOTIFICATIONS","HOSTNAME","REACT_NATIVE_PACKAGER_HOSTNAME","NEW_PET","landing","submit","container","GENDER","getHostname","ENVIRONMENT","FIREBASE","apiKey","authDomain","projectId","storageBucket","databaseURL","messagingSenderId","appId","prodConfig","qaConfig","searchParams","currentUserId","targetUserId","nextPractice","allowedStatuses","screens","EventEmitter","urlString","viewModeDefaults","Dimensions","setMode","DeviceType","getDeviceTypeAsync","deviceType","PHONE","TABLET","DESKTOP","INVALID_RESPONSE","CHANGE_PASSWORD_ERROR","isPeriodUnit","unit","CategoryType","CHANNELS","sound","vibration","GENERAL","CONFIRMATION_UPDATE","CATEGORIES","foreground","authenticationRequired","navigateToTodos","navigateToPath","NotificationStatus","cancelDeletedTodos","extractAlerts","notifee","getTodoNotifications","scheduleTodoAlert","trigger","generateTrigger","calculateNextAlert","TriggerType","TIMESTAMP","timestamp","nextNotification","todoTitle","todoBody","generateTodoData","addDeviceSettings","android","channelId","pressAction","AndroidCategory","REMINDER","importance","AndroidImportance","HIGH","smallIcon","ios","todoDetails","isNumber","alertTimestamp","rescheduleRepeatingTodoAlert","alertOffset","nextAlertTimestamp","nextAlertBody","notificationEventListener","EventType","DELIVERED","reportStatus","handleDelivered","ACTION_PRESS","PRESS","OPENED","$meta","$metadata","metadata","handlePressAction","DISMISSED","handleDismissed","minInterval","intervalIncrease","ceil","isTimestampTrigger","useDate","calculateUpcomingDueDate","APPOINTMENT_STACK_PATHS","HOME_STACK_PATHS","LOYALTY_TAB_PATHS","PET_STACK_PATHS","TODO_STACK_PATHS","REQUEST_STACK_PATHS","BOTTOM_TAB_PATHS","MAIN_STACK_PATHS","updatedAt","displayId","photoUrl","MoreHorizontal","REFILL_MEDICATION","VACCINATIONS","ANNUAL_EXAM","GROOMING","ALLY_BLUE_DARK","ALLY_BLACK","WARN_YELLOW","EGG_WHITE","PURPLE","WHITE_OPACITY_38","BLACK_OPACITY_26","BLACK_OPACITY_38","LIGHT_GREY","DARK_GREY","GREEN_ACCENT","GREEN_ACCENT_DARK","GOLD","GOLD_DARK","SOLID_GREY","SURFACE_GREY","AB_SOLAR_YELLOW","AB_STONE_GREY_10","AB_MUSHROOM","AB_MUSHROOJM_50","LightTheme","minorAccent","configureFonts","themeFontsConfig","web","isV3","thin","black","thinItalic","lightItalic","regularItalic","mediumItalic","semiboldItalic","boldItalic","blackItalic","THIN","ALLY_ERROR_CODE","axios","packageConfig","allyErrorCode","NEED_TO_ACCEPT_TERMS","PASSWORD_RESET_REQUIRED","CLIENT_NEEDS_UPGRADE","colorToValue","rgbMatch","red","green","blue","rgbToNumber","hexMatch","percentage","_r","_g","_b","_a","g","padStart","keyMap","pictureType","dateTimeStamp","unix","FormData","photoBlob","blob","mime","i18next","timeZoneName","toLocalShortDateTime","toLocalMonthDayTime","paddingEnd","paddingStart","borderTopEndRadius","borderTopLeftRadius","borderBottomEndRadius","borderBottomStartRadius","borderTopRightRadius","borderTopStartRadius","borderBottomColor","borderBottomWidth","borderEndColor","borderEndWidth","borderRightColor","borderRightWidth","borderStartColor","borderStartWidth","borderStyle","borderTopColor","rowGap","columnGap","borderProps","borderRadiusProps","paddingProps","contentAlignmentProps","shadowProps","backgroundProps","sizingProps","filterUndefined","fromEntries","firebase","messaging","getApps","isSupported","supported","initializeApp","getMessaging","_getToken","_onMessage","input","isT","parseError","SERVER_ERROR","tree","newPaths","childPaths","VALID_PRESCRIPTION_THRESHOLD","lastPage","allPages","recordsFiltered","refs","param","QueryClient","defaultOptions","refetchOnWindowFocus","getRelease","SAMPLE_RATE","ignoreErrors","SentryReact","dsn","release","Application","nativeApplicationVersion","sampleRate","replaysOnErrorSampleRate","replaysSessionSampleRate","integrations","maskAllInputs","maskAllText","attachStacktrace","DEBUG_SENTRY","sendDefaultPii","fn","registerRoutingInstrumentation","AsyncStorage","person","pattern","urlResult","durationFormatter","durationInMinutes","random","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","call","amdO","deferred","O","chunkIds","notFulfilled","fulfilled","j","n","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","prop","prototype","hasOwnProperty","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","nc","__webpack_exports__"],"sourceRoot":""}