@nocios/crudify-components 2.0.60 → 2.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.scannerwork/report-task.txt +2 -2
- package/coverage/components/CrudiaAutoGenerate.tsx.html +616 -0
- package/coverage/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
- package/coverage/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
- package/coverage/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
- package/coverage/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
- package/coverage/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
- package/coverage/components/CrudiaFileField/components/index.html +176 -0
- package/coverage/components/CrudiaFileField/components/index.ts.html +115 -0
- package/coverage/components/CrudiaFileField/hooks/index.html +146 -0
- package/coverage/components/CrudiaFileField/hooks/index.ts.html +112 -0
- package/coverage/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
- package/coverage/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
- package/coverage/components/CrudiaFileField/index.html +131 -0
- package/coverage/components/CrudiaFileField/index.ts.html +112 -0
- package/coverage/components/CrudiaFileField/utils/formatters.ts.html +169 -0
- package/coverage/components/CrudiaFileField/utils/icons.tsx.html +253 -0
- package/coverage/components/CrudiaFileField/utils/index.html +146 -0
- package/coverage/components/CrudiaFileField/utils/index.ts.html +103 -0
- package/coverage/components/CrudiaMarkdownField.tsx.html +676 -0
- package/coverage/components/CrudifyInitializer.tsx.html +712 -0
- package/coverage/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
- package/coverage/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
- package/coverage/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
- package/coverage/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
- package/coverage/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
- package/coverage/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
- package/coverage/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
- package/coverage/components/CrudifyLogin/Forms/components/index.html +161 -0
- package/coverage/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
- package/coverage/components/CrudifyLogin/Forms/index.html +176 -0
- package/coverage/components/CrudifyLogin/Forms/index.ts.html +145 -0
- package/coverage/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
- package/coverage/components/CrudifyLogin/Forms/utils/index.html +161 -0
- package/coverage/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
- package/coverage/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
- package/coverage/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
- package/coverage/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
- package/coverage/components/CrudifyLogin/components/index.html +116 -0
- package/coverage/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
- package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
- package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
- package/coverage/components/CrudifyLogin/context/index.html +161 -0
- package/coverage/components/CrudifyLogin/context/index.ts.html +91 -0
- package/coverage/components/CrudifyLogin/hooks/index.html +131 -0
- package/coverage/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
- package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
- package/coverage/components/CrudifyLogin/index.html +116 -0
- package/coverage/components/CrudifyLogin/index.tsx.html +466 -0
- package/coverage/components/CrudifyLogin/utils/index.html +116 -0
- package/coverage/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
- package/coverage/components/GlobalNotificationProvider.tsx.html +844 -0
- package/coverage/components/LoginComponent.tsx.html +676 -0
- package/coverage/components/PasswordRequirements/index.html +116 -0
- package/coverage/components/PasswordRequirements/index.tsx.html +232 -0
- package/coverage/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
- package/coverage/components/PublicPolicies/FieldSelector/index.html +131 -0
- package/coverage/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
- package/coverage/components/PublicPolicies/Policies.tsx.html +625 -0
- package/coverage/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
- package/coverage/components/PublicPolicies/PolicyItem/index.html +131 -0
- package/coverage/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
- package/coverage/components/PublicPolicies/constants.ts.html +106 -0
- package/coverage/components/PublicPolicies/index.html +146 -0
- package/coverage/components/PublicPolicies/index.ts.html +88 -0
- package/coverage/components/Routing/AuthRoute.tsx.html +382 -0
- package/coverage/components/Routing/GuestRoute.tsx.html +352 -0
- package/coverage/components/Routing/ProtectedRoute.tsx.html +316 -0
- package/coverage/components/Routing/index.html +161 -0
- package/coverage/components/Routing/index.ts.html +109 -0
- package/coverage/components/SessionLoadingScreen/index.html +116 -0
- package/coverage/components/SessionLoadingScreen/index.tsx.html +379 -0
- package/coverage/components/SessionTimeIndicator/index.html +116 -0
- package/coverage/components/SessionTimeIndicator/index.tsx.html +523 -0
- package/coverage/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
- package/coverage/components/UserProfile/index.html +131 -0
- package/coverage/components/UserProfile/index.ts.html +88 -0
- package/coverage/components/index.html +191 -0
- package/coverage/components/index.ts.html +178 -0
- package/coverage/core/CrossTabSyncManager.ts.html +853 -0
- package/coverage/core/CrudifyInitializationManager.ts.html +1279 -0
- package/coverage/core/SessionManager.ts.html +3064 -0
- package/coverage/core/index.html +146 -0
- package/coverage/coverage-final.json +76 -79
- package/coverage/hooks/index.html +191 -0
- package/coverage/hooks/index.ts.html +136 -0
- package/coverage/hooks/useAuth.ts.html +529 -0
- package/coverage/hooks/useAutoGenerate.ts.html +571 -0
- package/coverage/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
- package/coverage/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
- package/coverage/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
- package/coverage/hooks/useCrudifyWithNotifications/index.html +146 -0
- package/coverage/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
- package/coverage/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
- package/coverage/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
- package/coverage/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
- package/coverage/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
- package/coverage/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
- package/coverage/hooks/useData.ts.html +829 -0
- package/coverage/hooks/useFileUpload/index.html +131 -0
- package/coverage/hooks/useFileUpload/index.ts.html +112 -0
- package/coverage/hooks/useFileUpload/services/index.html +131 -0
- package/coverage/hooks/useFileUpload/services/index.ts.html +106 -0
- package/coverage/hooks/useFileUpload/services/uploadService.ts.html +610 -0
- package/coverage/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
- package/coverage/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
- package/coverage/hooks/useFileUpload/utils/index.html +161 -0
- package/coverage/hooks/useFileUpload/utils/index.ts.html +109 -0
- package/coverage/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
- package/coverage/hooks/useFileUpload/utils/validation.ts.html +403 -0
- package/coverage/hooks/useSession/constants.ts.html +217 -0
- package/coverage/hooks/useSession/hooks/index.html +176 -0
- package/coverage/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
- package/coverage/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
- package/coverage/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
- package/coverage/hooks/useSession/hooks/useSessionState.ts.html +295 -0
- package/coverage/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
- package/coverage/hooks/useSession/index.html +161 -0
- package/coverage/hooks/useSession/index.ts.html +127 -0
- package/coverage/hooks/useSession/types.ts.html +427 -0
- package/coverage/hooks/useSession/useSession.ts.html +526 -0
- package/coverage/hooks/useSession/utils/index.html +131 -0
- package/coverage/hooks/useSession/utils/initializeSession.ts.html +424 -0
- package/coverage/hooks/useSession/utils/tokenUtils.ts.html +298 -0
- package/coverage/hooks/useUserData.ts.html +1210 -0
- package/coverage/hooks/useUserProfile.ts.html +820 -0
- package/coverage/index.html +205 -235
- package/coverage/lcov-report/components/CrudiaAutoGenerate.tsx.html +616 -0
- package/coverage/lcov-report/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/index.html +176 -0
- package/coverage/lcov-report/components/CrudiaFileField/components/index.ts.html +115 -0
- package/coverage/lcov-report/components/CrudiaFileField/hooks/index.html +146 -0
- package/coverage/lcov-report/components/CrudiaFileField/hooks/index.ts.html +112 -0
- package/coverage/lcov-report/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
- package/coverage/lcov-report/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
- package/coverage/lcov-report/components/CrudiaFileField/index.html +131 -0
- package/coverage/lcov-report/components/CrudiaFileField/index.ts.html +112 -0
- package/coverage/lcov-report/components/CrudiaFileField/utils/formatters.ts.html +169 -0
- package/coverage/lcov-report/components/CrudiaFileField/utils/icons.tsx.html +253 -0
- package/coverage/lcov-report/components/CrudiaFileField/utils/index.html +146 -0
- package/coverage/lcov-report/components/CrudiaFileField/utils/index.ts.html +103 -0
- package/coverage/lcov-report/components/CrudiaMarkdownField.tsx.html +676 -0
- package/coverage/lcov-report/components/CrudifyInitializer.tsx.html +712 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.html +161 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/index.html +176 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/index.ts.html +145 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.html +161 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
- package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
- package/coverage/lcov-report/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
- package/coverage/lcov-report/components/CrudifyLogin/components/index.html +116 -0
- package/coverage/lcov-report/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
- package/coverage/lcov-report/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
- package/coverage/lcov-report/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
- package/coverage/lcov-report/components/CrudifyLogin/context/index.html +161 -0
- package/coverage/lcov-report/components/CrudifyLogin/context/index.ts.html +91 -0
- package/coverage/lcov-report/components/CrudifyLogin/hooks/index.html +131 -0
- package/coverage/lcov-report/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
- package/coverage/lcov-report/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
- package/coverage/lcov-report/components/CrudifyLogin/index.html +116 -0
- package/coverage/lcov-report/components/CrudifyLogin/index.tsx.html +466 -0
- package/coverage/lcov-report/components/CrudifyLogin/utils/index.html +116 -0
- package/coverage/lcov-report/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
- package/coverage/lcov-report/components/GlobalNotificationProvider.tsx.html +844 -0
- package/coverage/lcov-report/components/LoginComponent.tsx.html +676 -0
- package/coverage/lcov-report/components/PasswordRequirements/index.html +116 -0
- package/coverage/lcov-report/components/PasswordRequirements/index.tsx.html +232 -0
- package/coverage/lcov-report/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
- package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.html +131 -0
- package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
- package/coverage/lcov-report/components/PublicPolicies/Policies.tsx.html +625 -0
- package/coverage/lcov-report/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
- package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.html +131 -0
- package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
- package/coverage/lcov-report/components/PublicPolicies/constants.ts.html +106 -0
- package/coverage/lcov-report/components/PublicPolicies/index.html +146 -0
- package/coverage/lcov-report/components/PublicPolicies/index.ts.html +88 -0
- package/coverage/lcov-report/components/Routing/AuthRoute.tsx.html +382 -0
- package/coverage/lcov-report/components/Routing/GuestRoute.tsx.html +352 -0
- package/coverage/lcov-report/components/Routing/ProtectedRoute.tsx.html +316 -0
- package/coverage/lcov-report/components/Routing/index.html +161 -0
- package/coverage/lcov-report/components/Routing/index.ts.html +109 -0
- package/coverage/lcov-report/components/SessionLoadingScreen/index.html +116 -0
- package/coverage/lcov-report/components/SessionLoadingScreen/index.tsx.html +379 -0
- package/coverage/lcov-report/components/SessionTimeIndicator/index.html +116 -0
- package/coverage/lcov-report/components/SessionTimeIndicator/index.tsx.html +523 -0
- package/coverage/lcov-report/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
- package/coverage/lcov-report/components/UserProfile/index.html +131 -0
- package/coverage/lcov-report/components/UserProfile/index.ts.html +88 -0
- package/coverage/lcov-report/components/index.html +191 -0
- package/coverage/lcov-report/components/index.ts.html +178 -0
- package/coverage/lcov-report/core/CrossTabSyncManager.ts.html +853 -0
- package/coverage/lcov-report/core/CrudifyInitializationManager.ts.html +1279 -0
- package/coverage/lcov-report/core/SessionManager.ts.html +3064 -0
- package/coverage/lcov-report/core/index.html +146 -0
- package/coverage/lcov-report/hooks/index.html +191 -0
- package/coverage/lcov-report/hooks/index.ts.html +136 -0
- package/coverage/lcov-report/hooks/useAuth.ts.html +529 -0
- package/coverage/lcov-report/hooks/useAutoGenerate.ts.html +571 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.html +146 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
- package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
- package/coverage/lcov-report/hooks/useData.ts.html +829 -0
- package/coverage/lcov-report/hooks/useFileUpload/index.html +131 -0
- package/coverage/lcov-report/hooks/useFileUpload/index.ts.html +112 -0
- package/coverage/lcov-report/hooks/useFileUpload/services/index.html +131 -0
- package/coverage/lcov-report/hooks/useFileUpload/services/index.ts.html +106 -0
- package/coverage/lcov-report/hooks/useFileUpload/services/uploadService.ts.html +610 -0
- package/coverage/lcov-report/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
- package/coverage/lcov-report/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
- package/coverage/lcov-report/hooks/useFileUpload/utils/index.html +161 -0
- package/coverage/lcov-report/hooks/useFileUpload/utils/index.ts.html +109 -0
- package/coverage/lcov-report/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
- package/coverage/lcov-report/hooks/useFileUpload/utils/validation.ts.html +403 -0
- package/coverage/lcov-report/hooks/useSession/constants.ts.html +217 -0
- package/coverage/lcov-report/hooks/useSession/hooks/index.html +176 -0
- package/coverage/lcov-report/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
- package/coverage/lcov-report/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
- package/coverage/lcov-report/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
- package/coverage/lcov-report/hooks/useSession/hooks/useSessionState.ts.html +295 -0
- package/coverage/lcov-report/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
- package/coverage/lcov-report/hooks/useSession/index.html +161 -0
- package/coverage/lcov-report/hooks/useSession/index.ts.html +127 -0
- package/coverage/lcov-report/hooks/useSession/types.ts.html +427 -0
- package/coverage/lcov-report/hooks/useSession/useSession.ts.html +526 -0
- package/coverage/lcov-report/hooks/useSession/utils/index.html +131 -0
- package/coverage/lcov-report/hooks/useSession/utils/initializeSession.ts.html +424 -0
- package/coverage/lcov-report/hooks/useSession/utils/tokenUtils.ts.html +298 -0
- package/coverage/lcov-report/hooks/useUserData.ts.html +1210 -0
- package/coverage/lcov-report/hooks/useUserProfile.ts.html +820 -0
- package/coverage/lcov-report/index.html +205 -235
- package/coverage/lcov-report/providers/CrudifyThemeProvider.tsx.html +316 -0
- package/coverage/lcov-report/providers/SessionProvider.tsx.html +1120 -0
- package/coverage/lcov-report/providers/TranslationsProvider.tsx.html +1756 -0
- package/coverage/lcov-report/providers/index.html +146 -0
- package/coverage/lcov-report/services/credentialsEventBus.ts.html +319 -0
- package/coverage/lcov-report/services/crudifyAdminWrapper.ts.html +754 -0
- package/coverage/lcov-report/services/index.html +146 -0
- package/coverage/lcov-report/services/translationService.ts.html +1558 -0
- package/coverage/lcov-report/translations/critical.ts.html +1216 -0
- package/coverage/lcov-report/translations/index.html +116 -0
- package/coverage/lcov-report/types/index.html +116 -0
- package/coverage/lcov-report/types/password.ts.html +178 -0
- package/coverage/lcov-report/utils/authErrorDetector.ts.html +793 -0
- package/coverage/lcov-report/utils/authEventBus.ts.html +454 -0
- package/coverage/lcov-report/utils/configResolver.ts.html +460 -0
- package/coverage/lcov-report/utils/cookieSync.ts.html +595 -0
- package/coverage/lcov-report/utils/errorHandler.ts.html +1480 -0
- package/coverage/lcov-report/utils/errorTranslation.ts.html +868 -0
- package/coverage/lcov-report/utils/index.html +341 -0
- package/coverage/lcov-report/utils/index.ts.html +193 -0
- package/coverage/lcov-report/utils/jwtUtils.ts.html +325 -0
- package/coverage/lcov-report/utils/logger.ts.html +952 -0
- package/coverage/lcov-report/utils/navigationTracker.ts.html +562 -0
- package/coverage/lcov-report/utils/passwordValidation.ts.html +259 -0
- package/coverage/lcov-report/utils/preAuthCheck.ts.html +442 -0
- package/coverage/lcov-report/utils/redirectSecurity.ts.html +733 -0
- package/coverage/lcov-report/utils/tenantConfig.ts.html +712 -0
- package/coverage/lcov-report/utils/tokenStorage.ts.html +1825 -0
- package/coverage/lcov-report/utils/webCrypto.ts.html +490 -0
- package/coverage/lcov.info +15262 -14283
- package/coverage/providers/CrudifyThemeProvider.tsx.html +316 -0
- package/coverage/providers/SessionProvider.tsx.html +1120 -0
- package/coverage/providers/TranslationsProvider.tsx.html +1756 -0
- package/coverage/providers/index.html +146 -0
- package/coverage/services/credentialsEventBus.ts.html +319 -0
- package/coverage/services/crudifyAdminWrapper.ts.html +754 -0
- package/coverage/services/index.html +146 -0
- package/coverage/services/translationService.ts.html +1558 -0
- package/coverage/translations/critical.ts.html +1216 -0
- package/coverage/translations/index.html +116 -0
- package/coverage/types/index.html +116 -0
- package/coverage/types/password.ts.html +178 -0
- package/coverage/utils/authErrorDetector.ts.html +793 -0
- package/coverage/utils/authEventBus.ts.html +454 -0
- package/coverage/utils/configResolver.ts.html +460 -0
- package/coverage/utils/cookieSync.ts.html +595 -0
- package/coverage/utils/errorHandler.ts.html +1480 -0
- package/coverage/utils/errorTranslation.ts.html +868 -0
- package/coverage/utils/index.html +341 -0
- package/coverage/utils/index.ts.html +193 -0
- package/coverage/utils/jwtUtils.ts.html +325 -0
- package/coverage/utils/logger.ts.html +952 -0
- package/coverage/utils/navigationTracker.ts.html +562 -0
- package/coverage/utils/passwordValidation.ts.html +259 -0
- package/coverage/utils/preAuthCheck.ts.html +442 -0
- package/coverage/utils/redirectSecurity.ts.html +733 -0
- package/coverage/utils/tenantConfig.ts.html +712 -0
- package/coverage/utils/tokenStorage.ts.html +1825 -0
- package/coverage/utils/webCrypto.ts.html +490 -0
- package/dist/{CrudiaMarkdownField-CkiBwG-U.d.ts → CrudiaMarkdownField-DM6NR8zw.d.mts} +22 -22
- package/dist/{CrudiaMarkdownField-D-DqiXMQ.d.mts → CrudiaMarkdownField-UJaiSq9_.d.ts} +22 -22
- package/dist/{GlobalNotificationProvider-CdwdNv_8.d.mts → GlobalNotificationProvider-Cx540WKg.d.mts} +15 -15
- package/dist/{GlobalNotificationProvider-CdwdNv_8.d.ts → GlobalNotificationProvider-Cx540WKg.d.ts} +15 -15
- package/dist/chunk-2DXLCBOT.mjs +1 -0
- package/dist/chunk-DYRZIARH.js +1 -0
- package/dist/chunk-GCSJXEGT.mjs +1 -0
- package/dist/chunk-GJUZD5ZN.js +1 -0
- package/dist/chunk-K47I475N.js +1 -0
- package/dist/chunk-OCYZGEM5.mjs +1 -0
- package/dist/chunk-PI7HPRDB.js +1 -0
- package/dist/chunk-QVEUGJBY.mjs +1 -0
- package/dist/chunk-UROR7G7N.mjs +1 -0
- package/dist/chunk-XFT47DEL.js +1 -0
- package/dist/components.d.mts +8 -8
- package/dist/components.d.ts +8 -8
- package/dist/components.js +1 -1
- package/dist/components.mjs +1 -1
- package/dist/{errorTranslation-CF-5JClP.d.ts → errorTranslation-BEWwDbCH.d.ts} +1 -1
- package/dist/{errorTranslation-BcX8AaK7.d.mts → errorTranslation-DsGZon0M.d.mts} +1 -1
- package/dist/hooks.d.mts +3 -3
- package/dist/hooks.d.ts +3 -3
- package/dist/hooks.js +1 -1
- package/dist/hooks.mjs +1 -1
- package/dist/{index-DEDnmsdO.d.ts → index-Dnmttf62.d.ts} +131 -114
- package/dist/{index-D06kTP0C.d.mts → index-ZcF6nJt4.d.mts} +131 -114
- package/dist/index.d.mts +153 -106
- package/dist/index.d.ts +153 -106
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{tenantConfig-CYnS9TPV.d.mts → tenantConfig-DxpfrAof.d.mts} +1 -1
- package/dist/{tenantConfig-CYnS9TPV.d.ts → tenantConfig-DxpfrAof.d.ts} +1 -1
- package/dist/utils.d.mts +25 -25
- package/dist/utils.d.ts +25 -25
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/eslint.config.mjs +2 -2
- package/package.json +3 -3
- package/tests/helpers/mockFactories.ts +218 -0
- package/tests/helpers/testUtils.tsx +66 -1
- package/vitest.config.ts +1 -0
- package/dist/chunk-2WAUZ6KI.js +0 -1
- package/dist/chunk-3IGZNZCT.mjs +0 -1
- package/dist/chunk-43L2PP77.mjs +0 -1
- package/dist/chunk-6VS5OT3A.mjs +0 -1
- package/dist/chunk-BWJTTMKS.js +0 -1
- package/dist/chunk-EMPPCCVU.js +0 -1
- package/dist/chunk-J43UPGBE.js +0 -1
- package/dist/chunk-K6ZRXOJ7.mjs +0 -1
- package/dist/chunk-RYQQZTEP.js +0 -1
- package/dist/chunk-VTMSOK4V.mjs +0 -1
|
@@ -0,0 +1,1210 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for hooks/useUserData.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">hooks</a> useUserData.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">93.33% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>350/375</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">82.6% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>57/69</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>7/7</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">93.33% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>350/375</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
442
|
+
<span class="cline-any cline-yes">1x</span>
|
|
443
|
+
<span class="cline-any cline-yes">1x</span>
|
|
444
|
+
<span class="cline-any cline-yes">1x</span>
|
|
445
|
+
<span class="cline-any cline-yes">1x</span>
|
|
446
|
+
<span class="cline-any cline-yes">1x</span>
|
|
447
|
+
<span class="cline-any cline-yes">1x</span>
|
|
448
|
+
<span class="cline-any cline-yes">1x</span>
|
|
449
|
+
<span class="cline-any cline-yes">1x</span>
|
|
450
|
+
<span class="cline-any cline-yes">1x</span>
|
|
451
|
+
<span class="cline-any cline-yes">1x</span>
|
|
452
|
+
<span class="cline-any cline-yes">1x</span>
|
|
453
|
+
<span class="cline-any cline-yes">1x</span>
|
|
454
|
+
<span class="cline-any cline-yes">1x</span>
|
|
455
|
+
<span class="cline-any cline-yes">1x</span>
|
|
456
|
+
<span class="cline-any cline-yes">1x</span>
|
|
457
|
+
<span class="cline-any cline-yes">1x</span>
|
|
458
|
+
<span class="cline-any cline-yes">1x</span>
|
|
459
|
+
<span class="cline-any cline-yes">1x</span>
|
|
460
|
+
<span class="cline-any cline-yes">1x</span>
|
|
461
|
+
<span class="cline-any cline-yes">1x</span>
|
|
462
|
+
<span class="cline-any cline-yes">1x</span>
|
|
463
|
+
<span class="cline-any cline-yes">1x</span>
|
|
464
|
+
<span class="cline-any cline-yes">1x</span>
|
|
465
|
+
<span class="cline-any cline-yes">1x</span>
|
|
466
|
+
<span class="cline-any cline-yes">1x</span>
|
|
467
|
+
<span class="cline-any cline-yes">1x</span>
|
|
468
|
+
<span class="cline-any cline-yes">1x</span>
|
|
469
|
+
<span class="cline-any cline-yes">1x</span>
|
|
470
|
+
<span class="cline-any cline-yes">1x</span>
|
|
471
|
+
<span class="cline-any cline-yes">1x</span>
|
|
472
|
+
<span class="cline-any cline-yes">1x</span>
|
|
473
|
+
<span class="cline-any cline-yes">1x</span>
|
|
474
|
+
<span class="cline-any cline-yes">38x</span>
|
|
475
|
+
<span class="cline-any cline-yes">38x</span>
|
|
476
|
+
<span class="cline-any cline-yes">38x</span>
|
|
477
|
+
<span class="cline-any cline-yes">38x</span>
|
|
478
|
+
<span class="cline-any cline-yes">38x</span>
|
|
479
|
+
<span class="cline-any cline-yes">38x</span>
|
|
480
|
+
<span class="cline-any cline-yes">38x</span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-yes">38x</span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-no"> </span>
|
|
486
|
+
<span class="cline-any cline-yes">38x</span>
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-yes">38x</span>
|
|
490
|
+
<span class="cline-any cline-yes">38x</span>
|
|
491
|
+
<span class="cline-any cline-yes">1x</span>
|
|
492
|
+
<span class="cline-any cline-yes">1x</span>
|
|
493
|
+
<span class="cline-any cline-yes">1x</span>
|
|
494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
495
|
+
<span class="cline-any cline-yes">2x</span>
|
|
496
|
+
<span class="cline-any cline-yes">2x</span>
|
|
497
|
+
<span class="cline-any cline-yes">2x</span>
|
|
498
|
+
<span class="cline-any cline-yes">2x</span>
|
|
499
|
+
<span class="cline-any cline-yes">2x</span>
|
|
500
|
+
<span class="cline-any cline-yes">2x</span>
|
|
501
|
+
<span class="cline-any cline-yes">2x</span>
|
|
502
|
+
<span class="cline-any cline-yes">2x</span>
|
|
503
|
+
<span class="cline-any cline-yes">2x</span>
|
|
504
|
+
<span class="cline-any cline-yes">2x</span>
|
|
505
|
+
<span class="cline-any cline-yes">2x</span>
|
|
506
|
+
<span class="cline-any cline-yes">1x</span>
|
|
507
|
+
<span class="cline-any cline-yes">1x</span>
|
|
508
|
+
<span class="cline-any cline-yes">1x</span>
|
|
509
|
+
<span class="cline-any cline-yes">1x</span>
|
|
510
|
+
<span class="cline-any cline-yes">5x</span>
|
|
511
|
+
<span class="cline-any cline-yes">5x</span>
|
|
512
|
+
<span class="cline-any cline-yes">3x</span>
|
|
513
|
+
<span class="cline-any cline-yes">3x</span>
|
|
514
|
+
<span class="cline-any cline-yes">5x</span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-no"> </span>
|
|
517
|
+
<span class="cline-any cline-yes">5x</span>
|
|
518
|
+
<span class="cline-any cline-yes">5x</span>
|
|
519
|
+
<span class="cline-any cline-yes">5x</span>
|
|
520
|
+
<span class="cline-any cline-yes">1x</span>
|
|
521
|
+
<span class="cline-any cline-yes">1x</span>
|
|
522
|
+
<span class="cline-any cline-yes">1x</span>
|
|
523
|
+
<span class="cline-any cline-yes">1x</span>
|
|
524
|
+
<span class="cline-any cline-yes">1x</span>
|
|
525
|
+
<span class="cline-any cline-yes">1x</span>
|
|
526
|
+
<span class="cline-any cline-yes">1x</span>
|
|
527
|
+
<span class="cline-any cline-yes">1x</span>
|
|
528
|
+
<span class="cline-any cline-yes">1x</span>
|
|
529
|
+
<span class="cline-any cline-yes">1x</span>
|
|
530
|
+
<span class="cline-any cline-yes">1x</span>
|
|
531
|
+
<span class="cline-any cline-yes">1x</span>
|
|
532
|
+
<span class="cline-any cline-yes">1x</span>
|
|
533
|
+
<span class="cline-any cline-yes">5x</span>
|
|
534
|
+
<span class="cline-any cline-yes">5x</span>
|
|
535
|
+
<span class="cline-any cline-yes">5x</span>
|
|
536
|
+
<span class="cline-any cline-yes">5x</span>
|
|
537
|
+
<span class="cline-any cline-yes">5x</span>
|
|
538
|
+
<span class="cline-any cline-yes">5x</span>
|
|
539
|
+
<span class="cline-any cline-yes">5x</span>
|
|
540
|
+
<span class="cline-any cline-yes">5x</span>
|
|
541
|
+
<span class="cline-any cline-yes">5x</span>
|
|
542
|
+
<span class="cline-any cline-yes">5x</span>
|
|
543
|
+
<span class="cline-any cline-yes">5x</span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
545
|
+
<span class="cline-any cline-no"> </span>
|
|
546
|
+
<span class="cline-any cline-yes">5x</span>
|
|
547
|
+
<span class="cline-any cline-yes">5x</span>
|
|
548
|
+
<span class="cline-any cline-yes">1x</span>
|
|
549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-yes">1x</span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-yes">1x</span>
|
|
554
|
+
<span class="cline-any cline-yes">5x</span>
|
|
555
|
+
<span class="cline-any cline-yes">4x</span>
|
|
556
|
+
<span class="cline-any cline-yes">4x</span>
|
|
557
|
+
<span class="cline-any cline-yes">4x</span>
|
|
558
|
+
<span class="cline-any cline-yes">5x</span>
|
|
559
|
+
<span class="cline-any cline-yes">1x</span>
|
|
560
|
+
<span class="cline-any cline-yes">1x</span>
|
|
561
|
+
<span class="cline-any cline-yes">1x</span>
|
|
562
|
+
<span class="cline-any cline-yes">1x</span>
|
|
563
|
+
<span class="cline-any cline-yes">2x</span>
|
|
564
|
+
<span class="cline-any cline-yes">2x</span>
|
|
565
|
+
<span class="cline-any cline-yes">2x</span>
|
|
566
|
+
<span class="cline-any cline-yes">2x</span>
|
|
567
|
+
<span class="cline-any cline-yes">2x</span>
|
|
568
|
+
<span class="cline-any cline-yes">2x</span>
|
|
569
|
+
<span class="cline-any cline-yes">2x</span>
|
|
570
|
+
<span class="cline-any cline-no"> </span>
|
|
571
|
+
<span class="cline-any cline-no"> </span>
|
|
572
|
+
<span class="cline-any cline-no"> </span>
|
|
573
|
+
<span class="cline-any cline-no"> </span>
|
|
574
|
+
<span class="cline-any cline-yes">1x</span>
|
|
575
|
+
<span class="cline-any cline-yes">1x</span>
|
|
576
|
+
<span class="cline-any cline-yes">1x</span>
|
|
577
|
+
<span class="cline-any cline-yes">1x</span>
|
|
578
|
+
<span class="cline-any cline-yes">1x</span>
|
|
579
|
+
<span class="cline-any cline-yes">13x</span>
|
|
580
|
+
<span class="cline-any cline-yes">13x</span>
|
|
581
|
+
<span class="cline-any cline-yes">1x</span>
|
|
582
|
+
<span class="cline-any cline-yes">1x</span>
|
|
583
|
+
<span class="cline-any cline-yes">12x</span>
|
|
584
|
+
<span class="cline-any cline-yes">12x</span>
|
|
585
|
+
<span class="cline-any cline-yes">13x</span>
|
|
586
|
+
<span class="cline-any cline-yes">8x</span>
|
|
587
|
+
<span class="cline-any cline-yes">8x</span>
|
|
588
|
+
<span class="cline-any cline-yes">4x</span>
|
|
589
|
+
<span class="cline-any cline-yes">13x</span>
|
|
590
|
+
<span class="cline-any cline-yes">1x</span>
|
|
591
|
+
<span class="cline-any cline-yes">1x</span>
|
|
592
|
+
<span class="cline-any cline-yes">3x</span>
|
|
593
|
+
<span class="cline-any cline-yes">3x</span>
|
|
594
|
+
<span class="cline-any cline-yes">13x</span>
|
|
595
|
+
<span class="cline-any cline-yes">1x</span>
|
|
596
|
+
<span class="cline-any cline-yes">1x</span>
|
|
597
|
+
<span class="cline-any cline-yes">1x</span>
|
|
598
|
+
<span class="cline-any cline-yes">1x</span>
|
|
599
|
+
<span class="cline-any cline-yes">1x</span>
|
|
600
|
+
<span class="cline-any cline-yes">2x</span>
|
|
601
|
+
<span class="cline-any cline-yes">2x</span>
|
|
602
|
+
<span class="cline-any cline-yes">13x</span>
|
|
603
|
+
<span class="cline-any cline-yes">1x</span>
|
|
604
|
+
<span class="cline-any cline-yes">1x</span>
|
|
605
|
+
<span class="cline-any cline-yes">1x</span>
|
|
606
|
+
<span class="cline-any cline-yes">1x</span>
|
|
607
|
+
<span class="cline-any cline-yes">13x</span>
|
|
608
|
+
<span class="cline-any cline-yes">1x</span>
|
|
609
|
+
<span class="cline-any cline-yes">1x</span>
|
|
610
|
+
<span class="cline-any cline-yes">1x</span>
|
|
611
|
+
<span class="cline-any cline-yes">1x</span>
|
|
612
|
+
<span class="cline-any cline-yes">1x</span>
|
|
613
|
+
<span class="cline-any cline-no"> </span>
|
|
614
|
+
<span class="cline-any cline-no"> </span>
|
|
615
|
+
<span class="cline-any cline-no"> </span>
|
|
616
|
+
<span class="cline-any cline-yes">1x</span>
|
|
617
|
+
<span class="cline-any cline-yes">1x</span>
|
|
618
|
+
<span class="cline-any cline-yes">1x</span>
|
|
619
|
+
<span class="cline-any cline-yes">1x</span>
|
|
620
|
+
<span class="cline-any cline-yes">1x</span>
|
|
621
|
+
<span class="cline-any cline-yes">1x</span>
|
|
622
|
+
<span class="cline-any cline-yes">1x</span>
|
|
623
|
+
<span class="cline-any cline-yes">1x</span>
|
|
624
|
+
<span class="cline-any cline-yes">1x</span>
|
|
625
|
+
<span class="cline-any cline-yes">1x</span>
|
|
626
|
+
<span class="cline-any cline-yes">1x</span>
|
|
627
|
+
<span class="cline-any cline-yes">1x</span>
|
|
628
|
+
<span class="cline-any cline-yes">1x</span>
|
|
629
|
+
<span class="cline-any cline-yes">1x</span>
|
|
630
|
+
<span class="cline-any cline-yes">1x</span>
|
|
631
|
+
<span class="cline-any cline-yes">1x</span>
|
|
632
|
+
<span class="cline-any cline-yes">1x</span>
|
|
633
|
+
<span class="cline-any cline-yes">1x</span>
|
|
634
|
+
<span class="cline-any cline-yes">1x</span>
|
|
635
|
+
<span class="cline-any cline-yes">1x</span>
|
|
636
|
+
<span class="cline-any cline-yes">1x</span>
|
|
637
|
+
<span class="cline-any cline-yes">1x</span>
|
|
638
|
+
<span class="cline-any cline-yes">1x</span>
|
|
639
|
+
<span class="cline-any cline-yes">1x</span>
|
|
640
|
+
<span class="cline-any cline-yes">1x</span>
|
|
641
|
+
<span class="cline-any cline-yes">1x</span>
|
|
642
|
+
<span class="cline-any cline-yes">1x</span>
|
|
643
|
+
<span class="cline-any cline-yes">1x</span>
|
|
644
|
+
<span class="cline-any cline-yes">1x</span>
|
|
645
|
+
<span class="cline-any cline-yes">1x</span>
|
|
646
|
+
<span class="cline-any cline-yes">1x</span>
|
|
647
|
+
<span class="cline-any cline-yes">1x</span>
|
|
648
|
+
<span class="cline-any cline-yes">1x</span>
|
|
649
|
+
<span class="cline-any cline-yes">1x</span>
|
|
650
|
+
<span class="cline-any cline-yes">1x</span>
|
|
651
|
+
<span class="cline-any cline-yes">1x</span>
|
|
652
|
+
<span class="cline-any cline-yes">1x</span>
|
|
653
|
+
<span class="cline-any cline-yes">1x</span>
|
|
654
|
+
<span class="cline-any cline-yes">1x</span>
|
|
655
|
+
<span class="cline-any cline-yes">1x</span>
|
|
656
|
+
<span class="cline-any cline-yes">1x</span>
|
|
657
|
+
<span class="cline-any cline-yes">1x</span>
|
|
658
|
+
<span class="cline-any cline-yes">1x</span>
|
|
659
|
+
<span class="cline-any cline-yes">1x</span>
|
|
660
|
+
<span class="cline-any cline-yes">1x</span>
|
|
661
|
+
<span class="cline-any cline-yes">1x</span>
|
|
662
|
+
<span class="cline-any cline-yes">1x</span>
|
|
663
|
+
<span class="cline-any cline-yes">1x</span>
|
|
664
|
+
<span class="cline-any cline-yes">49x</span>
|
|
665
|
+
<span class="cline-any cline-yes">49x</span>
|
|
666
|
+
<span class="cline-any cline-yes">49x</span>
|
|
667
|
+
<span class="cline-any cline-yes">49x</span>
|
|
668
|
+
<span class="cline-any cline-yes">49x</span>
|
|
669
|
+
<span class="cline-any cline-yes">49x</span>
|
|
670
|
+
<span class="cline-any cline-yes">49x</span>
|
|
671
|
+
<span class="cline-any cline-yes">49x</span>
|
|
672
|
+
<span class="cline-any cline-yes">49x</span>
|
|
673
|
+
<span class="cline-any cline-yes">49x</span>
|
|
674
|
+
<span class="cline-any cline-yes">49x</span>
|
|
675
|
+
<span class="cline-any cline-yes">49x</span>
|
|
676
|
+
<span class="cline-any cline-yes">49x</span>
|
|
677
|
+
<span class="cline-any cline-yes">49x</span>
|
|
678
|
+
<span class="cline-any cline-yes">49x</span>
|
|
679
|
+
<span class="cline-any cline-yes">49x</span>
|
|
680
|
+
<span class="cline-any cline-yes">49x</span>
|
|
681
|
+
<span class="cline-any cline-yes">49x</span>
|
|
682
|
+
<span class="cline-any cline-yes">49x</span>
|
|
683
|
+
<span class="cline-any cline-yes">49x</span>
|
|
684
|
+
<span class="cline-any cline-yes">21x</span>
|
|
685
|
+
<span class="cline-any cline-yes">1x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-yes">20x</span>
|
|
688
|
+
<span class="cline-any cline-yes">21x</span>
|
|
689
|
+
<span class="cline-any cline-yes">49x</span>
|
|
690
|
+
<span class="cline-any cline-yes">49x</span>
|
|
691
|
+
<span class="cline-any cline-yes">49x</span>
|
|
692
|
+
<span class="cline-any cline-yes">49x</span>
|
|
693
|
+
<span class="cline-any cline-yes">49x</span>
|
|
694
|
+
<span class="cline-any cline-yes">49x</span>
|
|
695
|
+
<span class="cline-any cline-yes">3x</span>
|
|
696
|
+
<span class="cline-any cline-yes">3x</span>
|
|
697
|
+
<span class="cline-any cline-yes">3x</span>
|
|
698
|
+
<span class="cline-any cline-yes">3x</span>
|
|
699
|
+
<span class="cline-any cline-yes">49x</span>
|
|
700
|
+
<span class="cline-any cline-yes">49x</span>
|
|
701
|
+
<span class="cline-any cline-yes">49x</span>
|
|
702
|
+
<span class="cline-any cline-yes">49x</span>
|
|
703
|
+
<span class="cline-any cline-yes">49x</span>
|
|
704
|
+
<span class="cline-any cline-yes">49x</span>
|
|
705
|
+
<span class="cline-any cline-yes">49x</span>
|
|
706
|
+
<span class="cline-any cline-yes">21x</span>
|
|
707
|
+
<span class="cline-any cline-yes">21x</span>
|
|
708
|
+
<span class="cline-any cline-yes">21x</span>
|
|
709
|
+
<span class="cline-any cline-yes">2x</span>
|
|
710
|
+
<span class="cline-any cline-yes">2x</span>
|
|
711
|
+
<span class="cline-any cline-yes">2x</span>
|
|
712
|
+
<span class="cline-any cline-yes">19x</span>
|
|
713
|
+
<span class="cline-any cline-yes">21x</span>
|
|
714
|
+
<span class="cline-any cline-no"> </span>
|
|
715
|
+
<span class="cline-any cline-no"> </span>
|
|
716
|
+
<span class="cline-any cline-no"> </span>
|
|
717
|
+
<span class="cline-any cline-yes">19x</span>
|
|
718
|
+
<span class="cline-any cline-yes">19x</span>
|
|
719
|
+
<span class="cline-any cline-yes">21x</span>
|
|
720
|
+
<span class="cline-any cline-no"> </span>
|
|
721
|
+
<span class="cline-any cline-no"> </span>
|
|
722
|
+
<span class="cline-any cline-yes">19x</span>
|
|
723
|
+
<span class="cline-any cline-yes">19x</span>
|
|
724
|
+
<span class="cline-any cline-yes">19x</span>
|
|
725
|
+
<span class="cline-any cline-yes">19x</span>
|
|
726
|
+
<span class="cline-any cline-yes">19x</span>
|
|
727
|
+
<span class="cline-any cline-yes">19x</span>
|
|
728
|
+
<span class="cline-any cline-yes">19x</span>
|
|
729
|
+
<span class="cline-any cline-yes">19x</span>
|
|
730
|
+
<span class="cline-any cline-yes">19x</span>
|
|
731
|
+
<span class="cline-any cline-yes">19x</span>
|
|
732
|
+
<span class="cline-any cline-yes">19x</span>
|
|
733
|
+
<span class="cline-any cline-yes">19x</span>
|
|
734
|
+
<span class="cline-any cline-yes">19x</span>
|
|
735
|
+
<span class="cline-any cline-yes">19x</span>
|
|
736
|
+
<span class="cline-any cline-yes">19x</span>
|
|
737
|
+
<span class="cline-any cline-yes">14x</span>
|
|
738
|
+
<span class="cline-any cline-yes">14x</span>
|
|
739
|
+
<span class="cline-any cline-yes">14x</span>
|
|
740
|
+
<span class="cline-any cline-yes">14x</span>
|
|
741
|
+
<span class="cline-any cline-yes">13x</span>
|
|
742
|
+
<span class="cline-any cline-yes">1x</span>
|
|
743
|
+
<span class="cline-any cline-yes">14x</span>
|
|
744
|
+
<span class="cline-any cline-yes">14x</span>
|
|
745
|
+
<span class="cline-any cline-yes">11x</span>
|
|
746
|
+
<span class="cline-any cline-yes">11x</span>
|
|
747
|
+
<span class="cline-any cline-yes">11x</span>
|
|
748
|
+
<span class="cline-any cline-yes">14x</span>
|
|
749
|
+
<span class="cline-any cline-yes">3x</span>
|
|
750
|
+
<span class="cline-any cline-yes">3x</span>
|
|
751
|
+
<span class="cline-any cline-yes">3x</span>
|
|
752
|
+
<span class="cline-any cline-yes">14x</span>
|
|
753
|
+
<span class="cline-any cline-yes">21x</span>
|
|
754
|
+
<span class="cline-any cline-yes">5x</span>
|
|
755
|
+
<span class="cline-any cline-yes">5x</span>
|
|
756
|
+
<span class="cline-any cline-yes">5x</span>
|
|
757
|
+
<span class="cline-any cline-yes">5x</span>
|
|
758
|
+
<span class="cline-any cline-yes">5x</span>
|
|
759
|
+
<span class="cline-any cline-yes">5x</span>
|
|
760
|
+
<span class="cline-any cline-yes">5x</span>
|
|
761
|
+
<span class="cline-any cline-yes">5x</span>
|
|
762
|
+
<span class="cline-any cline-yes">5x</span>
|
|
763
|
+
<span class="cline-any cline-yes">5x</span>
|
|
764
|
+
<span class="cline-any cline-yes">21x</span>
|
|
765
|
+
<span class="cline-any cline-yes">19x</span>
|
|
766
|
+
<span class="cline-any cline-yes">19x</span>
|
|
767
|
+
<span class="cline-any cline-yes">19x</span>
|
|
768
|
+
<span class="cline-any cline-yes">19x</span>
|
|
769
|
+
<span class="cline-any cline-yes">19x</span>
|
|
770
|
+
<span class="cline-any cline-yes">19x</span>
|
|
771
|
+
<span class="cline-any cline-yes">19x</span>
|
|
772
|
+
<span class="cline-any cline-yes">19x</span>
|
|
773
|
+
<span class="cline-any cline-yes">49x</span>
|
|
774
|
+
<span class="cline-any cline-yes">49x</span>
|
|
775
|
+
<span class="cline-any cline-yes">49x</span>
|
|
776
|
+
<span class="cline-any cline-yes">49x</span>
|
|
777
|
+
<span class="cline-any cline-yes">49x</span>
|
|
778
|
+
<span class="cline-any cline-yes">49x</span>
|
|
779
|
+
<span class="cline-any cline-yes">28x</span>
|
|
780
|
+
<span class="cline-any cline-yes">19x</span>
|
|
781
|
+
<span class="cline-any cline-yes">28x</span>
|
|
782
|
+
<span class="cline-any cline-yes">2x</span>
|
|
783
|
+
<span class="cline-any cline-yes">2x</span>
|
|
784
|
+
<span class="cline-any cline-yes">49x</span>
|
|
785
|
+
<span class="cline-any cline-yes">49x</span>
|
|
786
|
+
<span class="cline-any cline-yes">49x</span>
|
|
787
|
+
<span class="cline-any cline-yes">49x</span>
|
|
788
|
+
<span class="cline-any cline-yes">49x</span>
|
|
789
|
+
<span class="cline-any cline-yes">49x</span>
|
|
790
|
+
<span class="cline-any cline-yes">27x</span>
|
|
791
|
+
<span class="cline-any cline-yes">27x</span>
|
|
792
|
+
<span class="cline-any cline-yes">27x</span>
|
|
793
|
+
<span class="cline-any cline-yes">27x</span>
|
|
794
|
+
<span class="cline-any cline-yes">27x</span>
|
|
795
|
+
<span class="cline-any cline-yes">27x</span>
|
|
796
|
+
<span class="cline-any cline-no"> </span>
|
|
797
|
+
<span class="cline-any cline-no"> </span>
|
|
798
|
+
<span class="cline-any cline-no"> </span>
|
|
799
|
+
<span class="cline-any cline-yes">27x</span>
|
|
800
|
+
<span class="cline-any cline-yes">49x</span>
|
|
801
|
+
<span class="cline-any cline-yes">49x</span>
|
|
802
|
+
<span class="cline-any cline-yes">49x</span>
|
|
803
|
+
<span class="cline-any cline-yes">49x</span>
|
|
804
|
+
<span class="cline-any cline-yes">49x</span>
|
|
805
|
+
<span class="cline-any cline-yes">49x</span>
|
|
806
|
+
<span class="cline-any cline-yes">49x</span>
|
|
807
|
+
<span class="cline-any cline-yes">49x</span>
|
|
808
|
+
<span class="cline-any cline-yes">49x</span>
|
|
809
|
+
<span class="cline-any cline-yes">49x</span>
|
|
810
|
+
<span class="cline-any cline-yes">49x</span>
|
|
811
|
+
<span class="cline-any cline-yes">49x</span>
|
|
812
|
+
<span class="cline-any cline-yes">49x</span>
|
|
813
|
+
<span class="cline-any cline-yes">49x</span>
|
|
814
|
+
<span class="cline-any cline-yes">49x</span>
|
|
815
|
+
<span class="cline-any cline-yes">49x</span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">// =============================
|
|
817
|
+
// USE USER DATA HOOK (COMPLETE NEW SYSTEM)
|
|
818
|
+
// =============================
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Complete hook for user data management that combines:
|
|
822
|
+
* 1. Session data from the JWT (sessionData)
|
|
823
|
+
* 2. Full user data from the database (userData)
|
|
824
|
+
* 3. All functionality from the legacy useCrudifyUser system
|
|
825
|
+
*
|
|
826
|
+
* This hook fully replaces useCrudifyUser from the legacy system
|
|
827
|
+
* while maintaining 100% API compatibility but using the new SessionProvider
|
|
828
|
+
*/
|
|
829
|
+
|
|
830
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
831
|
+
import { CrudifyInstance } from '@nocios/crudify-sdk';
|
|
832
|
+
import { useSessionContext } from '../providers/SessionProvider';
|
|
833
|
+
import type { UserProfile } from '../types/api';
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
* Dynamic response data structure for user queries
|
|
837
|
+
* The API can return data in multiple formats depending on the query type
|
|
838
|
+
*/
|
|
839
|
+
interface UserDataResponseData {
|
|
840
|
+
response?: { data?: string | object };
|
|
841
|
+
data?: { response?: { data?: string | object } };
|
|
842
|
+
items?: UserProfile[];
|
|
843
|
+
[key: string]: unknown;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* Check if a request is still the current active request
|
|
848
|
+
*/
|
|
849
|
+
function isStaleRequest(
|
|
850
|
+
currentRequestId: number,
|
|
851
|
+
requestIdRef: React.RefObject<number>,
|
|
852
|
+
mountedRef: React.RefObject<boolean>,
|
|
853
|
+
abortController?: AbortController
|
|
854
|
+
): boolean {
|
|
855
|
+
if (currentRequestId !== requestIdRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
856
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
857
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
858
|
+
if (!mountedRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
859
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
860
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
861
|
+
if (abortController?.signal.aborted) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
862
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
863
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
864
|
+
return false;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
/**
|
|
868
|
+
* Set error state if the component is still mounted
|
|
869
|
+
*/
|
|
870
|
+
function setErrorIfMounted(
|
|
871
|
+
mountedRef: React.RefObject<boolean>,
|
|
872
|
+
setError: React.Dispatch<React.SetStateAction<string | null>>,
|
|
873
|
+
setLoading: React.Dispatch<React.SetStateAction<boolean>>,
|
|
874
|
+
message: string
|
|
875
|
+
): void {
|
|
876
|
+
if (mountedRef.current) {
|
|
877
|
+
setError(message);
|
|
878
|
+
setLoading(false);
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* Determine whether a failed request should be retried based on error type and retry config
|
|
884
|
+
*/
|
|
885
|
+
function shouldRetryRequest(error: Error, retryOnError: boolean, retryCount: number, maxRetries: number): boolean {
|
|
886
|
+
if (!retryOnError) {
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
if (retryCount >= maxRetries) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
890
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
891
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
892
|
+
const message = error.<span class="branch-0 cbranch-no" title="branch not covered" >message ?? '';</span>
|
|
893
|
+
return message.includes('Network Error') || message.includes('Failed to fetch');
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
/**
|
|
897
|
+
* Grouped retry-related parameters for handleRefreshError
|
|
898
|
+
*/
|
|
899
|
+
interface RetryContext {
|
|
900
|
+
retryCountRef: React.RefObject<number>;
|
|
901
|
+
maxRetries: number;
|
|
902
|
+
mountedRef: React.RefObject<boolean>;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
/**
|
|
906
|
+
* Handle error cases with retry logic for refreshProfile
|
|
907
|
+
*/
|
|
908
|
+
function handleRefreshError(
|
|
909
|
+
err: unknown,
|
|
910
|
+
retryOnError: boolean,
|
|
911
|
+
retryCtx: RetryContext,
|
|
912
|
+
setError: React.Dispatch<React.SetStateAction<string | null>>,
|
|
913
|
+
setUserData: React.Dispatch<React.SetStateAction<UserProfile | null>>,
|
|
914
|
+
refreshProfile: () => Promise<void>
|
|
915
|
+
): void {
|
|
916
|
+
const error = err as Error;
|
|
917
|
+
|
|
918
|
+
if (error.name === 'AbortError') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
919
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
920
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
921
|
+
|
|
922
|
+
if (shouldRetryRequest(error, retryOnError, retryCtx.retryCountRef.current, retryCtx.maxRetries)) {
|
|
923
|
+
retryCtx.retryCountRef.current++;
|
|
924
|
+
setTimeout(() => {
|
|
925
|
+
if (retryCtx.mountedRef.current) {
|
|
926
|
+
refreshProfile();
|
|
927
|
+
}
|
|
928
|
+
}, 1000 * retryCtx.retryCountRef.current);
|
|
929
|
+
} else {
|
|
930
|
+
setError('Failed to load user profile from database');
|
|
931
|
+
setUserData(null);
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* Parse raw response data (string or object) to extract user items
|
|
937
|
+
*/
|
|
938
|
+
function parseRawResponseData(rawData: string | object): UserProfile | null {
|
|
939
|
+
try {
|
|
940
|
+
const parsedData = typeof rawData === 'string' ? JSON.parse(rawData<span class="branch-0 cbranch-no" title="branch not covered" >) : rawData;</span>
|
|
941
|
+
if (parsedData?.items && Array.isArray(parsedData.items) && parsedData.items.length > 0) {
|
|
942
|
+
return parsedData.items[0] as UserProfile;
|
|
943
|
+
}
|
|
944
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
|
|
945
|
+
<span class="cstat-no" title="statement not covered" > /* JSON parse error - ignored */</span>
|
|
946
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
947
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
948
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
949
|
+
|
|
950
|
+
/**
|
|
951
|
+
* Extract user profile from various API response formats
|
|
952
|
+
* Handles: array, nested response.data, nested data.response.data, items array
|
|
953
|
+
*/
|
|
954
|
+
function extractUserFromResponse(responseData: UserDataResponseData | UserProfile[] | null): UserProfile | null {
|
|
955
|
+
if (!responseData) {
|
|
956
|
+
return null;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
// Format 1: Direct array
|
|
960
|
+
if (Array.isArray(responseData) && responseData.length > 0) {
|
|
961
|
+
return responseData[0];
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
if (typeof responseData !== 'object' || Array.isArray(responseData)) {
|
|
965
|
+
return null;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
// Format 2: Wrapped in response.data (string or object)
|
|
969
|
+
if (responseData.response?.data) {
|
|
970
|
+
const parsed = parseRawResponseData(responseData.response.data);
|
|
971
|
+
if (parsed) {
|
|
972
|
+
return parsed;
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
// Format 3: Direct items array
|
|
977
|
+
if (responseData.items && Array.isArray(responseData.items) && responseData.items.length > 0) {
|
|
978
|
+
return responseData.items[0];
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// Format 4: Nested data.response.data structure
|
|
982
|
+
if (responseData.data?.response?.data) {
|
|
983
|
+
const parsed = parseRawResponseData(responseData.data.response.data);
|
|
984
|
+
if (parsed) {
|
|
985
|
+
return parsed;
|
|
986
|
+
}
|
|
987
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > }</span>
|
|
988
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
989
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
990
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
991
|
+
|
|
992
|
+
/**
|
|
993
|
+
* Complete user data structure (legacy-compatible)
|
|
994
|
+
*/
|
|
995
|
+
export interface UserData {
|
|
996
|
+
session: Record<string, unknown> | null; // JWT token data (sessionData)
|
|
997
|
+
data: UserProfile | null; // Full data from the database
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* Return type compatible with legacy useCrudifyUser
|
|
1002
|
+
*/
|
|
1003
|
+
export interface UseUserDataReturn {
|
|
1004
|
+
// Complete user object (legacy-compatible)
|
|
1005
|
+
user: UserData;
|
|
1006
|
+
|
|
1007
|
+
// Loading and error states (legacy-compatible)
|
|
1008
|
+
loading: boolean;
|
|
1009
|
+
error: string | null;
|
|
1010
|
+
|
|
1011
|
+
// Actions (legacy-compatible)
|
|
1012
|
+
refreshProfile: () => Promise<void>;
|
|
1013
|
+
clearProfile: () => void;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
/**
|
|
1017
|
+
* Options compatible with legacy useCrudifyUser
|
|
1018
|
+
*/
|
|
1019
|
+
export interface UseUserDataOptions {
|
|
1020
|
+
autoFetch?: boolean;
|
|
1021
|
+
retryOnError?: boolean;
|
|
1022
|
+
maxRetries?: number;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
/**
|
|
1026
|
+
* useUserData - Complete hook that replaces useCrudifyUser from the legacy system
|
|
1027
|
+
*
|
|
1028
|
+
* Full feature set:
|
|
1029
|
+
* - Auto-fetch of user data from the database
|
|
1030
|
+
* - Smart cache management and deduplication
|
|
1031
|
+
* - Retry mechanism for network errors
|
|
1032
|
+
* - Cross-tab synchronization via SessionProvider
|
|
1033
|
+
* - Extended data formatting for display
|
|
1034
|
+
* - Proper cleanup and memory management
|
|
1035
|
+
* - 100% compatible with the legacy useCrudifyUser API
|
|
1036
|
+
* - Uses the new refresh token system under the hood
|
|
1037
|
+
*/
|
|
1038
|
+
export const useUserData = (options: UseUserDataOptions = {}): UseUserDataReturn => {
|
|
1039
|
+
const { autoFetch = true, retryOnError = false, maxRetries = 3 } = options;
|
|
1040
|
+
|
|
1041
|
+
// Use the new SessionProvider instead of the legacy CrudifyDataProvider
|
|
1042
|
+
const { isAuthenticated, isInitialized, sessionData } = useSessionContext();
|
|
1043
|
+
|
|
1044
|
+
// User data state
|
|
1045
|
+
const [userData, setUserData] = useState<UserProfile | null>(null);
|
|
1046
|
+
const [loading, setLoading] = useState(autoFetch && isAuthenticated);
|
|
1047
|
+
const [error, setError] = useState<string | null>(null);
|
|
1048
|
+
|
|
1049
|
+
// Request management (same as in legacy)
|
|
1050
|
+
const abortControllerRef = useRef<AbortController | null>(null);
|
|
1051
|
+
const mountedRef = useRef(true);
|
|
1052
|
+
const requestIdRef = useRef(0);
|
|
1053
|
+
const retryCountRef = useRef(0);
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
* Extract user email from sessionData (replaces getUserEmailFromJWT from legacy)
|
|
1057
|
+
*/
|
|
1058
|
+
const getUserEmail = useCallback((): string | null => {
|
|
1059
|
+
if (!sessionData) {
|
|
1060
|
+
return null;
|
|
1061
|
+
}
|
|
1062
|
+
const cognitoUsername = sessionData['cognito:username'];
|
|
1063
|
+
return sessionData.email || (typeof cognitoUsername === 'string' ? cognitoUsername : null);
|
|
1064
|
+
}, [sessionData]);
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Clear all user data (legacy-compatible)
|
|
1068
|
+
*/
|
|
1069
|
+
const clearProfile = useCallback(() => {
|
|
1070
|
+
setUserData(null);
|
|
1071
|
+
setError(null);
|
|
1072
|
+
setLoading(false);
|
|
1073
|
+
retryCountRef.current = 0;
|
|
1074
|
+
}, []);
|
|
1075
|
+
|
|
1076
|
+
/**
|
|
1077
|
+
* Refresh user profile from database (legacy-compatible)
|
|
1078
|
+
* This function is identical to the legacy system but uses sessionData
|
|
1079
|
+
*/
|
|
1080
|
+
const refreshProfile = useCallback(async (): Promise<void> => {
|
|
1081
|
+
const userEmail = getUserEmail();
|
|
1082
|
+
|
|
1083
|
+
if (!userEmail) {
|
|
1084
|
+
setErrorIfMounted(mountedRef, setError, setLoading, 'No user email available from session data');
|
|
1085
|
+
return;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
if (!isInitialized) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1089
|
+
<span class="cstat-no" title="statement not covered" > setErrorIfMounted(mountedRef, setError, setLoading, 'Session not initialized');</span>
|
|
1090
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1091
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1092
|
+
|
|
1093
|
+
// Cancel any ongoing request
|
|
1094
|
+
if (abortControllerRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1095
|
+
<span class="cstat-no" title="statement not covered" > abortControllerRef.current.abort();</span>
|
|
1096
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1097
|
+
|
|
1098
|
+
const abortController = new AbortController();
|
|
1099
|
+
abortControllerRef.current = abortController;
|
|
1100
|
+
const currentRequestId = ++requestIdRef.current;
|
|
1101
|
+
|
|
1102
|
+
try {
|
|
1103
|
+
if (mountedRef.current) {
|
|
1104
|
+
setLoading(true);
|
|
1105
|
+
setError(null);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
const response = await CrudifyInstance.readItems('users', {
|
|
1109
|
+
filter: { email: userEmail },
|
|
1110
|
+
pagination: { limit: 1 },
|
|
1111
|
+
});
|
|
1112
|
+
|
|
1113
|
+
if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef, abortController)) {
|
|
1114
|
+
// Handle different response formats from crudify using extracted helper
|
|
1115
|
+
const extractedUserData = response.success
|
|
1116
|
+
? extractUserFromResponse(response.data as UserDataResponseData | UserProfile[] | null)
|
|
1117
|
+
: null;
|
|
1118
|
+
|
|
1119
|
+
if (extractedUserData) {
|
|
1120
|
+
setUserData(extractedUserData);
|
|
1121
|
+
setError(null);
|
|
1122
|
+
retryCountRef.current = 0;
|
|
1123
|
+
} else {
|
|
1124
|
+
setError('User profile not found in database');
|
|
1125
|
+
setUserData(null);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
} catch (err: unknown) {
|
|
1129
|
+
if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef)) {
|
|
1130
|
+
handleRefreshError(
|
|
1131
|
+
err,
|
|
1132
|
+
retryOnError,
|
|
1133
|
+
{ retryCountRef, maxRetries, mountedRef },
|
|
1134
|
+
setError,
|
|
1135
|
+
setUserData,
|
|
1136
|
+
refreshProfile
|
|
1137
|
+
);
|
|
1138
|
+
}
|
|
1139
|
+
} finally {
|
|
1140
|
+
if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef)) {
|
|
1141
|
+
setLoading(false);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
if (abortControllerRef.current === abortController) {
|
|
1145
|
+
abortControllerRef.current = null;
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
}, [isInitialized, getUserEmail, retryOnError, maxRetries]);
|
|
1149
|
+
|
|
1150
|
+
/**
|
|
1151
|
+
* Auto-fetch profile when authenticated and initialized (legacy-compatible)
|
|
1152
|
+
*/
|
|
1153
|
+
useEffect(() => {
|
|
1154
|
+
if (autoFetch && isAuthenticated && isInitialized) {
|
|
1155
|
+
refreshProfile();
|
|
1156
|
+
} else if (!isAuthenticated) {
|
|
1157
|
+
clearProfile();
|
|
1158
|
+
}
|
|
1159
|
+
}, [autoFetch, isAuthenticated, isInitialized, refreshProfile, clearProfile]);
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
* Cleanup on unmount (identical to legacy)
|
|
1163
|
+
*/
|
|
1164
|
+
useEffect(() => {
|
|
1165
|
+
mountedRef.current = true;
|
|
1166
|
+
|
|
1167
|
+
return () => {
|
|
1168
|
+
mountedRef.current = false;
|
|
1169
|
+
|
|
1170
|
+
if (abortControllerRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1171
|
+
<span class="cstat-no" title="statement not covered" > abortControllerRef.current.abort();</span>
|
|
1172
|
+
<span class="cstat-no" title="statement not covered" > abortControllerRef.current = null;</span>
|
|
1173
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1174
|
+
};
|
|
1175
|
+
}, []);
|
|
1176
|
+
|
|
1177
|
+
// Create the unified user object (legacy API-compatible)
|
|
1178
|
+
const user: UserData = {
|
|
1179
|
+
session: sessionData, // Use sessionData from the new system
|
|
1180
|
+
data: userData, // Keep userData from the database same as legacy
|
|
1181
|
+
};
|
|
1182
|
+
|
|
1183
|
+
return {
|
|
1184
|
+
user,
|
|
1185
|
+
loading,
|
|
1186
|
+
error,
|
|
1187
|
+
refreshProfile,
|
|
1188
|
+
clearProfile,
|
|
1189
|
+
};
|
|
1190
|
+
};
|
|
1191
|
+
</pre></td></tr></table></pre>
|
|
1192
|
+
|
|
1193
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1194
|
+
</div><!-- /wrapper -->
|
|
1195
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1196
|
+
Code coverage generated by
|
|
1197
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1198
|
+
at 2026-02-07T06:55:20.810Z
|
|
1199
|
+
</div>
|
|
1200
|
+
<script src="../prettify.js"></script>
|
|
1201
|
+
<script>
|
|
1202
|
+
window.onload = function () {
|
|
1203
|
+
prettyPrint();
|
|
1204
|
+
};
|
|
1205
|
+
</script>
|
|
1206
|
+
<script src="../sorter.js"></script>
|
|
1207
|
+
<script src="../block-navigation.js"></script>
|
|
1208
|
+
</body>
|
|
1209
|
+
</html>
|
|
1210
|
+
|