@os-team/profile 1.2.1 → 1.2.2
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/dist/@types/emotion.d.js +1 -0
- package/dist/@types/i18next.d.js +1 -0
- package/dist/@types/relay.d.js +0 -0
- package/dist/{types/components → components}/profile/ProfileButton.d.ts +1 -1
- package/dist/components/profile/ProfileButton.d.ts.map +1 -0
- package/dist/components/profile/ProfileButton.js +9 -0
- package/dist/components/profile/ProfileConfigContext.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileConfigContext.js +1 -2
- package/dist/components/profile/ProfileContext.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileContext.js +1 -2
- package/dist/{types/components → components}/profile/ProfileDrawer.d.ts +2 -2
- package/dist/components/profile/ProfileDrawer.d.ts.map +1 -0
- package/dist/components/profile/ProfileDrawer.js +28 -0
- package/dist/{types/components → components}/profile/ProfileDrawerContent.d.ts +7 -0
- package/dist/components/profile/ProfileDrawerContent.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileDrawerContent.js +66 -41
- package/dist/{types/components → components}/profile/ProfileNavigationItem.d.ts +1 -1
- package/dist/components/profile/ProfileNavigationItem.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileNavigationItem.js +8 -7
- package/dist/components/profile/ProfileUpdateNameModal.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileUpdateNameModal.js +38 -31
- package/dist/components/profile/ProfileUpdatePasswordModal.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProfileUpdatePasswordModal.js +40 -33
- package/dist/components/profile/ProtectedWrapper.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/ProtectedWrapper.js +19 -14
- package/dist/{types/components → components}/profile/UserAvatar.d.ts +1 -1
- package/dist/components/profile/UserAvatar.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/UserAvatar.js +7 -6
- package/dist/{types/components → components}/profile/UserAvatarAddon.d.ts +1 -1
- package/dist/components/profile/UserAvatarAddon.d.ts.map +1 -0
- package/dist/components/profile/UserAvatarAddon.js +50 -0
- package/dist/{types/components → components}/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.d.ts +5 -0
- package/dist/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.js +2 -3
- package/dist/{types/components → components}/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.d.ts +5 -0
- package/dist/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.js +2 -3
- package/dist/{types/components → components}/profile/__generated__/ProfileUpdateNameModalMutation.graphql.d.ts +5 -0
- package/dist/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/__generated__/ProfileUpdateNameModalMutation.graphql.js +2 -3
- package/dist/{types/components → components}/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.d.ts +5 -0
- package/dist/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.js +2 -3
- package/dist/{types/components → components}/profile/__generated__/ProtectedWrapperQuery.graphql.d.ts +5 -0
- package/dist/components/profile/__generated__/ProtectedWrapperQuery.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/profile/__generated__/ProtectedWrapperQuery.graphql.js +2 -3
- package/dist/{types/components → components}/session/SessionDrawer.d.ts +1 -1
- package/dist/components/session/SessionDrawer.d.ts.map +1 -0
- package/dist/components/session/SessionDrawer.js +45 -0
- package/dist/components/session/SessionDrawerContent.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/SessionDrawerContent.js +12 -10
- package/dist/{types/components → components}/session/SessionList.d.ts +5 -5
- package/dist/components/session/SessionList.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/SessionList.js +33 -17
- package/dist/{types/components → components}/session/SessionListItem.d.ts +9 -9
- package/dist/components/session/SessionListItem.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/SessionListItem.js +37 -19
- package/dist/components/session/SessionListSkeleton.d.ts.map +1 -0
- package/dist/components/session/SessionListSkeleton.js +43 -0
- package/dist/{types/components → components}/session/__generated__/SessionDrawerContentQuery.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionDrawerContentQuery.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionDrawerContentQuery.graphql.js +2 -3
- package/dist/{types/components → components}/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.js +2 -3
- package/dist/{types/components → components}/session/__generated__/SessionListItemDestroySessionMutation.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionListItemDestroySessionMutation.graphql.js +2 -3
- package/dist/{types/components → components}/session/__generated__/SessionListItem_session.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionListItem_session.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionListItem_session.graphql.js +2 -3
- package/dist/{types/components → components}/session/__generated__/SessionListRefetchQuery.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionListRefetchQuery.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionListRefetchQuery.graphql.js +2 -3
- package/dist/{types/components → components}/session/__generated__/SessionList_sessions.graphql.d.ts +5 -0
- package/dist/components/session/__generated__/SessionList_sessions.graphql.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/__generated__/SessionList_sessions.graphql.js +2 -3
- package/dist/{types/components → components}/session/formatDate.d.ts +1 -1
- package/dist/components/session/formatDate.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/formatDate.js +1 -2
- package/dist/components/session/getLastSeen.d.ts +3 -0
- package/dist/components/session/getLastSeen.d.ts.map +1 -0
- package/dist/{esm/components → components}/session/getLastSeen.js +1 -2
- package/dist/{types/components → components}/shared/ButtonUpdate.d.ts +1 -1
- package/dist/components/shared/ButtonUpdate.d.ts.map +1 -0
- package/dist/{esm/components → components}/shared/ButtonUpdate.js +6 -3
- package/dist/components/shared/ErrorResult.d.ts.map +1 -0
- package/dist/{esm/components → components}/shared/ErrorResult.js +4 -4
- package/dist/components/shared/FormError.d.ts.map +1 -0
- package/dist/{esm/components → components}/shared/FormError.js +6 -5
- package/dist/components/shared/MainLoader.d.ts.map +1 -0
- package/dist/{esm/components → components}/shared/MainLoader.js +5 -3
- package/dist/{types/components → components}/shared/icons/AndroidIcon.d.ts +1 -1
- package/dist/components/shared/icons/AndroidIcon.d.ts.map +1 -0
- package/dist/components/shared/icons/AndroidIcon.js +12 -0
- package/dist/{types/components → components}/shared/icons/AppleIcon.d.ts +1 -1
- package/dist/components/shared/icons/AppleIcon.d.ts.map +1 -0
- package/dist/components/shared/icons/AppleIcon.js +12 -0
- package/dist/{types/components → components}/shared/icons/BrowserIcon.d.ts +1 -1
- package/dist/components/shared/icons/BrowserIcon.d.ts.map +1 -0
- package/dist/components/shared/icons/BrowserIcon.js +12 -0
- package/dist/{types/components → components}/shared/icons/ProfileIcon.d.ts +1 -1
- package/dist/components/shared/icons/ProfileIcon.d.ts.map +1 -0
- package/dist/components/shared/icons/ProfileIcon.js +12 -0
- package/dist/{types/components → components}/shared/icons/UnknownDeviceIcon.d.ts +1 -1
- package/dist/components/shared/icons/UnknownDeviceIcon.d.ts.map +1 -0
- package/dist/components/shared/icons/UnknownDeviceIcon.js +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/utils/getError.d.ts.map +1 -0
- package/dist/{esm/utils → utils}/getError.js +1 -2
- package/dist/utils/getUserFullName.d.ts.map +1 -0
- package/dist/{esm/utils → utils}/getUserFullName.js +1 -2
- package/dist/{types/utils → utils}/handleFormErrors.d.ts +1 -1
- package/dist/utils/handleFormErrors.d.ts.map +1 -0
- package/dist/{esm/utils → utils}/handleFormErrors.js +1 -2
- package/package.json +50 -56
- package/src/@types/react-app-env.d.ts +3 -0
- package/src/App.tsx +42 -0
- package/src/AppRouter.tsx +12 -0
- package/src/components/ErrorResult.tsx +23 -0
- package/src/components/Layout.tsx +70 -0
- package/src/components/MainLoader.tsx +22 -0
- package/src/components/icons/HomeIcon.tsx +12 -0
- package/src/i18next.ts +34 -0
- package/src/index.tsx +6 -0
- package/src/lib/@types/emotion.d.ts +7 -0
- package/src/lib/@types/i18next.d.ts +12 -0
- package/src/lib/@types/relay.d.ts +3 -0
- package/src/lib/components/profile/ProfileButton.tsx +8 -0
- package/src/lib/components/profile/ProfileConfigContext.ts +16 -0
- package/src/lib/components/profile/ProfileContext.ts +20 -0
- package/src/lib/components/profile/ProfileDrawer.tsx +31 -0
- package/src/lib/components/profile/ProfileDrawerContent.tsx +276 -0
- package/src/lib/components/profile/ProfileNavigationItem.tsx +36 -0
- package/src/lib/components/profile/ProfileUpdateNameModal.tsx +117 -0
- package/src/lib/components/profile/ProfileUpdatePasswordModal.tsx +129 -0
- package/src/lib/components/profile/ProtectedWrapper.tsx +81 -0
- package/src/lib/components/profile/UserAvatar.tsx +23 -0
- package/src/lib/components/profile/UserAvatarAddon.tsx +62 -0
- package/src/lib/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.ts +74 -0
- package/src/lib/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.ts +100 -0
- package/src/lib/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.ts +124 -0
- package/src/lib/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.ts +93 -0
- package/src/lib/components/profile/__generated__/ProtectedWrapperQuery.graphql.ts +106 -0
- package/src/lib/components/session/SessionDrawer.tsx +50 -0
- package/src/lib/components/session/SessionDrawerContent.tsx +34 -0
- package/src/lib/components/session/SessionList.tsx +138 -0
- package/src/lib/components/session/SessionListItem.tsx +318 -0
- package/src/lib/components/session/SessionListSkeleton.tsx +48 -0
- package/src/lib/components/session/__generated__/SessionDrawerContentQuery.graphql.ts +181 -0
- package/src/lib/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.ts +74 -0
- package/src/lib/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.ts +92 -0
- package/src/lib/components/session/__generated__/SessionListItem_session.graphql.ts +154 -0
- package/src/lib/components/session/__generated__/SessionListRefetchQuery.graphql.ts +181 -0
- package/src/lib/components/session/__generated__/SessionList_sessions.graphql.ts +83 -0
- package/src/lib/components/session/formatDate.ts +21 -0
- package/{dist/cjs/components/session/getLastSeen.js → src/lib/components/session/getLastSeen.ts} +9 -9
- package/src/lib/components/shared/ButtonUpdate.tsx +10 -0
- package/src/lib/components/shared/ErrorResult.tsx +28 -0
- package/src/lib/components/shared/FormError.tsx +11 -0
- package/src/lib/components/shared/MainLoader.tsx +22 -0
- package/src/lib/components/shared/icons/AndroidIcon.tsx +12 -0
- package/src/lib/components/shared/icons/AppleIcon.tsx +12 -0
- package/src/lib/components/shared/icons/BrowserIcon.tsx +12 -0
- package/src/lib/components/shared/icons/ProfileIcon.tsx +12 -0
- package/src/lib/components/shared/icons/UnknownDeviceIcon.tsx +14 -0
- package/{dist/esm/index.js → src/lib/index.ts} +1 -1
- package/src/lib/utils/getError.ts +101 -0
- package/src/lib/utils/getUserFullName.ts +14 -0
- package/src/lib/utils/handleFormErrors.ts +16 -0
- package/src/pages/HomePage.tsx +11 -0
- package/src/schema.graphql +2494 -0
- package/src/utils/createRelayEnvironment.ts +22 -0
- package/src/utils/getError.ts +101 -0
- package/dist/cjs/@types/emotion.d.js +0 -4
- package/dist/cjs/@types/emotion.d.js.map +0 -1
- package/dist/cjs/@types/i18next.d.js +0 -4
- package/dist/cjs/@types/i18next.d.js.map +0 -1
- package/dist/cjs/components/profile/ProfileButton.js +0 -16
- package/dist/cjs/components/profile/ProfileButton.js.map +0 -1
- package/dist/cjs/components/profile/ProfileConfigContext.js +0 -17
- package/dist/cjs/components/profile/ProfileConfigContext.js.map +0 -1
- package/dist/cjs/components/profile/ProfileContext.js +0 -18
- package/dist/cjs/components/profile/ProfileContext.js.map +0 -1
- package/dist/cjs/components/profile/ProfileDrawer.js +0 -35
- package/dist/cjs/components/profile/ProfileDrawer.js.map +0 -1
- package/dist/cjs/components/profile/ProfileDrawerContent.js +0 -167
- package/dist/cjs/components/profile/ProfileDrawerContent.js.map +0 -1
- package/dist/cjs/components/profile/ProfileNavigationItem.js +0 -35
- package/dist/cjs/components/profile/ProfileNavigationItem.js.map +0 -1
- package/dist/cjs/components/profile/ProfileUpdateNameModal.js +0 -106
- package/dist/cjs/components/profile/ProfileUpdateNameModal.js.map +0 -1
- package/dist/cjs/components/profile/ProfileUpdatePasswordModal.js +0 -106
- package/dist/cjs/components/profile/ProfileUpdatePasswordModal.js.map +0 -1
- package/dist/cjs/components/profile/ProtectedWrapper.js +0 -54
- package/dist/cjs/components/profile/ProtectedWrapper.js.map +0 -1
- package/dist/cjs/components/profile/UserAvatar.js +0 -42
- package/dist/cjs/components/profile/UserAvatar.js.map +0 -1
- package/dist/cjs/components/profile/UserAvatarAddon.js +0 -41
- package/dist/cjs/components/profile/UserAvatarAddon.js.map +0 -1
- package/dist/cjs/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.js +0 -63
- package/dist/cjs/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.js.map +0 -1
- package/dist/cjs/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.js +0 -78
- package/dist/cjs/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.js.map +0 -1
- package/dist/cjs/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.js +0 -95
- package/dist/cjs/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.js.map +0 -1
- package/dist/cjs/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.js +0 -72
- package/dist/cjs/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.js.map +0 -1
- package/dist/cjs/components/profile/__generated__/ProtectedWrapperQuery.graphql.js +0 -87
- package/dist/cjs/components/profile/__generated__/ProtectedWrapperQuery.graphql.js.map +0 -1
- package/dist/cjs/components/session/SessionDrawer.js +0 -46
- package/dist/cjs/components/session/SessionDrawer.js.map +0 -1
- package/dist/cjs/components/session/SessionDrawerContent.js +0 -39
- package/dist/cjs/components/session/SessionDrawerContent.js.map +0 -1
- package/dist/cjs/components/session/SessionList.js +0 -73
- package/dist/cjs/components/session/SessionList.js.map +0 -1
- package/dist/cjs/components/session/SessionListItem.js +0 -150
- package/dist/cjs/components/session/SessionListItem.js.map +0 -1
- package/dist/cjs/components/session/SessionListSkeleton.js +0 -31
- package/dist/cjs/components/session/SessionListSkeleton.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionDrawerContentQuery.graphql.js +0 -154
- package/dist/cjs/components/session/__generated__/SessionDrawerContentQuery.graphql.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.js +0 -63
- package/dist/cjs/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.js +0 -72
- package/dist/cjs/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionListItem_session.graphql.js +0 -118
- package/dist/cjs/components/session/__generated__/SessionListItem_session.graphql.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionListRefetchQuery.graphql.js +0 -154
- package/dist/cjs/components/session/__generated__/SessionListRefetchQuery.graphql.js.map +0 -1
- package/dist/cjs/components/session/__generated__/SessionList_sessions.graphql.js +0 -65
- package/dist/cjs/components/session/__generated__/SessionList_sessions.graphql.js.map +0 -1
- package/dist/cjs/components/session/formatDate.js +0 -19
- package/dist/cjs/components/session/formatDate.js.map +0 -1
- package/dist/cjs/components/session/getLastSeen.js.map +0 -1
- package/dist/cjs/components/shared/ButtonUpdate.js +0 -18
- package/dist/cjs/components/shared/ButtonUpdate.js.map +0 -1
- package/dist/cjs/components/shared/ErrorResult.js +0 -31
- package/dist/cjs/components/shared/ErrorResult.js.map +0 -1
- package/dist/cjs/components/shared/FormError.js +0 -21
- package/dist/cjs/components/shared/FormError.js.map +0 -1
- package/dist/cjs/components/shared/MainLoader.js +0 -17
- package/dist/cjs/components/shared/MainLoader.js.map +0 -1
- package/dist/cjs/components/shared/icons/AndroidIcon.js +0 -18
- package/dist/cjs/components/shared/icons/AndroidIcon.js.map +0 -1
- package/dist/cjs/components/shared/icons/AppleIcon.js +0 -18
- package/dist/cjs/components/shared/icons/AppleIcon.js.map +0 -1
- package/dist/cjs/components/shared/icons/BrowserIcon.js +0 -18
- package/dist/cjs/components/shared/icons/BrowserIcon.js.map +0 -1
- package/dist/cjs/components/shared/icons/ProfileIcon.js +0 -18
- package/dist/cjs/components/shared/icons/ProfileIcon.js.map +0 -1
- package/dist/cjs/components/shared/icons/UnknownDeviceIcon.js +0 -18
- package/dist/cjs/components/shared/icons/UnknownDeviceIcon.js.map +0 -1
- package/dist/cjs/index.js +0 -142
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/utils/getError.js +0 -59
- package/dist/cjs/utils/getError.js.map +0 -1
- package/dist/cjs/utils/getUserFullName.js +0 -19
- package/dist/cjs/utils/getUserFullName.js.map +0 -1
- package/dist/cjs/utils/handleFormErrors.js +0 -25
- package/dist/cjs/utils/handleFormErrors.js.map +0 -1
- package/dist/esm/@types/emotion.d.js +0 -2
- package/dist/esm/@types/emotion.d.js.map +0 -1
- package/dist/esm/@types/i18next.d.js +0 -2
- package/dist/esm/@types/i18next.d.js.map +0 -1
- package/dist/esm/components/profile/ProfileButton.js +0 -9
- package/dist/esm/components/profile/ProfileButton.js.map +0 -1
- package/dist/esm/components/profile/ProfileConfigContext.js.map +0 -1
- package/dist/esm/components/profile/ProfileContext.js.map +0 -1
- package/dist/esm/components/profile/ProfileDrawer.js +0 -25
- package/dist/esm/components/profile/ProfileDrawer.js.map +0 -1
- package/dist/esm/components/profile/ProfileDrawerContent.js.map +0 -1
- package/dist/esm/components/profile/ProfileNavigationItem.js.map +0 -1
- package/dist/esm/components/profile/ProfileUpdateNameModal.js.map +0 -1
- package/dist/esm/components/profile/ProfileUpdatePasswordModal.js.map +0 -1
- package/dist/esm/components/profile/ProtectedWrapper.js.map +0 -1
- package/dist/esm/components/profile/UserAvatar.js.map +0 -1
- package/dist/esm/components/profile/UserAvatarAddon.js +0 -47
- package/dist/esm/components/profile/UserAvatarAddon.js.map +0 -1
- package/dist/esm/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.js.map +0 -1
- package/dist/esm/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.js.map +0 -1
- package/dist/esm/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.js.map +0 -1
- package/dist/esm/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.js.map +0 -1
- package/dist/esm/components/profile/__generated__/ProtectedWrapperQuery.graphql.js.map +0 -1
- package/dist/esm/components/session/SessionDrawer.js +0 -39
- package/dist/esm/components/session/SessionDrawer.js.map +0 -1
- package/dist/esm/components/session/SessionDrawerContent.js.map +0 -1
- package/dist/esm/components/session/SessionList.js.map +0 -1
- package/dist/esm/components/session/SessionListItem.js.map +0 -1
- package/dist/esm/components/session/SessionListSkeleton.js +0 -31
- package/dist/esm/components/session/SessionListSkeleton.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionDrawerContentQuery.graphql.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionListItem_session.graphql.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionListRefetchQuery.graphql.js.map +0 -1
- package/dist/esm/components/session/__generated__/SessionList_sessions.graphql.js.map +0 -1
- package/dist/esm/components/session/formatDate.js.map +0 -1
- package/dist/esm/components/session/getLastSeen.js.map +0 -1
- package/dist/esm/components/shared/ButtonUpdate.js.map +0 -1
- package/dist/esm/components/shared/ErrorResult.js.map +0 -1
- package/dist/esm/components/shared/FormError.js.map +0 -1
- package/dist/esm/components/shared/MainLoader.js.map +0 -1
- package/dist/esm/components/shared/icons/AndroidIcon.js +0 -11
- package/dist/esm/components/shared/icons/AndroidIcon.js.map +0 -1
- package/dist/esm/components/shared/icons/AppleIcon.js +0 -11
- package/dist/esm/components/shared/icons/AppleIcon.js.map +0 -1
- package/dist/esm/components/shared/icons/BrowserIcon.js +0 -11
- package/dist/esm/components/shared/icons/BrowserIcon.js.map +0 -1
- package/dist/esm/components/shared/icons/ProfileIcon.js +0 -11
- package/dist/esm/components/shared/icons/ProfileIcon.js.map +0 -1
- package/dist/esm/components/shared/icons/UnknownDeviceIcon.js +0 -11
- package/dist/esm/components/shared/icons/UnknownDeviceIcon.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/utils/getError.js.map +0 -1
- package/dist/esm/utils/getUserFullName.js.map +0 -1
- package/dist/esm/utils/handleFormErrors.js.map +0 -1
- package/dist/types/components/profile/ProfileButton.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileConfigContext.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileContext.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileDrawer.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileDrawerContent.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileNavigationItem.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileUpdateNameModal.d.ts.map +0 -1
- package/dist/types/components/profile/ProfileUpdatePasswordModal.d.ts.map +0 -1
- package/dist/types/components/profile/ProtectedWrapper.d.ts.map +0 -1
- package/dist/types/components/profile/UserAvatar.d.ts.map +0 -1
- package/dist/types/components/profile/UserAvatarAddon.d.ts.map +0 -1
- package/dist/types/components/profile/__generated__/ProfileDrawerContentSignOutMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/profile/__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/profile/__generated__/ProfileUpdateNameModalMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/profile/__generated__/ProtectedWrapperQuery.graphql.d.ts.map +0 -1
- package/dist/types/components/session/SessionDrawer.d.ts.map +0 -1
- package/dist/types/components/session/SessionDrawerContent.d.ts.map +0 -1
- package/dist/types/components/session/SessionList.d.ts.map +0 -1
- package/dist/types/components/session/SessionListItem.d.ts.map +0 -1
- package/dist/types/components/session/SessionListSkeleton.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionDrawerContentQuery.graphql.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionListDestroyAllOtherSessionsMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionListItemDestroySessionMutation.graphql.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionListItem_session.graphql.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionListRefetchQuery.graphql.d.ts.map +0 -1
- package/dist/types/components/session/__generated__/SessionList_sessions.graphql.d.ts.map +0 -1
- package/dist/types/components/session/formatDate.d.ts.map +0 -1
- package/dist/types/components/session/getLastSeen.d.ts +0 -3
- package/dist/types/components/session/getLastSeen.d.ts.map +0 -1
- package/dist/types/components/shared/ButtonUpdate.d.ts.map +0 -1
- package/dist/types/components/shared/ErrorResult.d.ts.map +0 -1
- package/dist/types/components/shared/FormError.d.ts.map +0 -1
- package/dist/types/components/shared/MainLoader.d.ts.map +0 -1
- package/dist/types/components/shared/icons/AndroidIcon.d.ts.map +0 -1
- package/dist/types/components/shared/icons/AppleIcon.d.ts.map +0 -1
- package/dist/types/components/shared/icons/BrowserIcon.d.ts.map +0 -1
- package/dist/types/components/shared/icons/ProfileIcon.d.ts.map +0 -1
- package/dist/types/components/shared/icons/UnknownDeviceIcon.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/utils/getError.d.ts.map +0 -1
- package/dist/types/utils/getUserFullName.d.ts.map +0 -1
- package/dist/types/utils/handleFormErrors.d.ts.map +0 -1
- /package/dist/{types/components → components}/profile/ProfileConfigContext.d.ts +0 -0
- /package/dist/{types/components → components}/profile/ProfileContext.d.ts +0 -0
- /package/dist/{types/components → components}/profile/ProfileUpdateNameModal.d.ts +0 -0
- /package/dist/{types/components → components}/profile/ProfileUpdatePasswordModal.d.ts +0 -0
- /package/dist/{types/components → components}/profile/ProtectedWrapper.d.ts +0 -0
- /package/dist/{types/components → components}/session/SessionDrawerContent.d.ts +0 -0
- /package/dist/{types/components → components}/session/SessionListSkeleton.d.ts +0 -0
- /package/dist/{types/components → components}/shared/ErrorResult.d.ts +0 -0
- /package/dist/{types/components → components}/shared/FormError.d.ts +0 -0
- /package/dist/{types/components → components}/shared/MainLoader.d.ts +0 -0
- /package/dist/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/utils → utils}/getError.d.ts +0 -0
- /package/dist/{types/utils → utils}/getUserFullName.d.ts +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generated SignedSource<<0e663480ed80dc8424202b84f5f750a1>>
|
|
3
|
+
* @lightSyntaxTransform
|
|
4
|
+
* @nogrep
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* tslint:disable */
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
// @ts-nocheck
|
|
10
|
+
|
|
11
|
+
import { ConcreteRequest } from 'relay-runtime';
|
|
12
|
+
export type UpdateProfileInput = {
|
|
13
|
+
firstName?: string | null | undefined;
|
|
14
|
+
lastName?: string | null | undefined;
|
|
15
|
+
};
|
|
16
|
+
export type ProfileUpdateNameModalMutation$variables = {
|
|
17
|
+
input: UpdateProfileInput;
|
|
18
|
+
};
|
|
19
|
+
export type ProfileUpdateNameModalMutation$data = {
|
|
20
|
+
readonly updateProfile: {
|
|
21
|
+
readonly firstName: string | null | undefined;
|
|
22
|
+
readonly lastName: string | null | undefined;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export type ProfileUpdateNameModalMutation = {
|
|
26
|
+
response: ProfileUpdateNameModalMutation$data;
|
|
27
|
+
variables: ProfileUpdateNameModalMutation$variables;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const node: ConcreteRequest = (function(){
|
|
31
|
+
var v0 = [
|
|
32
|
+
{
|
|
33
|
+
"defaultValue": null,
|
|
34
|
+
"kind": "LocalArgument",
|
|
35
|
+
"name": "input"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
v1 = [
|
|
39
|
+
{
|
|
40
|
+
"kind": "Variable",
|
|
41
|
+
"name": "input",
|
|
42
|
+
"variableName": "input"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
v2 = {
|
|
46
|
+
"alias": null,
|
|
47
|
+
"args": null,
|
|
48
|
+
"kind": "ScalarField",
|
|
49
|
+
"name": "firstName",
|
|
50
|
+
"storageKey": null
|
|
51
|
+
},
|
|
52
|
+
v3 = {
|
|
53
|
+
"alias": null,
|
|
54
|
+
"args": null,
|
|
55
|
+
"kind": "ScalarField",
|
|
56
|
+
"name": "lastName",
|
|
57
|
+
"storageKey": null
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
"fragment": {
|
|
61
|
+
"argumentDefinitions": (v0/*: any*/),
|
|
62
|
+
"kind": "Fragment",
|
|
63
|
+
"metadata": null,
|
|
64
|
+
"name": "ProfileUpdateNameModalMutation",
|
|
65
|
+
"selections": [
|
|
66
|
+
{
|
|
67
|
+
"alias": null,
|
|
68
|
+
"args": (v1/*: any*/),
|
|
69
|
+
"concreteType": "User",
|
|
70
|
+
"kind": "LinkedField",
|
|
71
|
+
"name": "updateProfile",
|
|
72
|
+
"plural": false,
|
|
73
|
+
"selections": [
|
|
74
|
+
(v2/*: any*/),
|
|
75
|
+
(v3/*: any*/)
|
|
76
|
+
],
|
|
77
|
+
"storageKey": null
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"type": "Mutation",
|
|
81
|
+
"abstractKey": null
|
|
82
|
+
},
|
|
83
|
+
"kind": "Request",
|
|
84
|
+
"operation": {
|
|
85
|
+
"argumentDefinitions": (v0/*: any*/),
|
|
86
|
+
"kind": "Operation",
|
|
87
|
+
"name": "ProfileUpdateNameModalMutation",
|
|
88
|
+
"selections": [
|
|
89
|
+
{
|
|
90
|
+
"alias": null,
|
|
91
|
+
"args": (v1/*: any*/),
|
|
92
|
+
"concreteType": "User",
|
|
93
|
+
"kind": "LinkedField",
|
|
94
|
+
"name": "updateProfile",
|
|
95
|
+
"plural": false,
|
|
96
|
+
"selections": [
|
|
97
|
+
(v2/*: any*/),
|
|
98
|
+
(v3/*: any*/),
|
|
99
|
+
{
|
|
100
|
+
"alias": null,
|
|
101
|
+
"args": null,
|
|
102
|
+
"kind": "ScalarField",
|
|
103
|
+
"name": "id",
|
|
104
|
+
"storageKey": null
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"storageKey": null
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
"params": {
|
|
112
|
+
"cacheID": "f70f0aaabf917dc446c3a71cf7b4f25f",
|
|
113
|
+
"id": null,
|
|
114
|
+
"metadata": {},
|
|
115
|
+
"name": "ProfileUpdateNameModalMutation",
|
|
116
|
+
"operationKind": "mutation",
|
|
117
|
+
"text": "mutation ProfileUpdateNameModalMutation(\n $input: UpdateProfileInput!\n) {\n updateProfile(input: $input) {\n firstName\n lastName\n id\n }\n}\n"
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
})();
|
|
121
|
+
|
|
122
|
+
(node as any).hash = "7264a05b6738d5417df9f1dc462486aa";
|
|
123
|
+
|
|
124
|
+
export default node;
|
package/src/lib/components/profile/__generated__/ProfileUpdatePasswordModalMutation.graphql.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generated SignedSource<<98f5f690dc69060f35dc48468bd2f481>>
|
|
3
|
+
* @lightSyntaxTransform
|
|
4
|
+
* @nogrep
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* tslint:disable */
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
// @ts-nocheck
|
|
10
|
+
|
|
11
|
+
import { ConcreteRequest } from 'relay-runtime';
|
|
12
|
+
export type UpdatePasswordInput = {
|
|
13
|
+
currentPassword: string;
|
|
14
|
+
password: string;
|
|
15
|
+
};
|
|
16
|
+
export type ProfileUpdatePasswordModalMutation$variables = {
|
|
17
|
+
input: UpdatePasswordInput;
|
|
18
|
+
};
|
|
19
|
+
export type ProfileUpdatePasswordModalMutation$data = {
|
|
20
|
+
readonly updatePassword: {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type ProfileUpdatePasswordModalMutation = {
|
|
25
|
+
response: ProfileUpdatePasswordModalMutation$data;
|
|
26
|
+
variables: ProfileUpdatePasswordModalMutation$variables;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const node: ConcreteRequest = (function(){
|
|
30
|
+
var v0 = [
|
|
31
|
+
{
|
|
32
|
+
"defaultValue": null,
|
|
33
|
+
"kind": "LocalArgument",
|
|
34
|
+
"name": "input"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
v1 = [
|
|
38
|
+
{
|
|
39
|
+
"alias": null,
|
|
40
|
+
"args": [
|
|
41
|
+
{
|
|
42
|
+
"kind": "Variable",
|
|
43
|
+
"name": "input",
|
|
44
|
+
"variableName": "input"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"concreteType": "User",
|
|
48
|
+
"kind": "LinkedField",
|
|
49
|
+
"name": "updatePassword",
|
|
50
|
+
"plural": false,
|
|
51
|
+
"selections": [
|
|
52
|
+
{
|
|
53
|
+
"alias": null,
|
|
54
|
+
"args": null,
|
|
55
|
+
"kind": "ScalarField",
|
|
56
|
+
"name": "id",
|
|
57
|
+
"storageKey": null
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"storageKey": null
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
return {
|
|
64
|
+
"fragment": {
|
|
65
|
+
"argumentDefinitions": (v0/*: any*/),
|
|
66
|
+
"kind": "Fragment",
|
|
67
|
+
"metadata": null,
|
|
68
|
+
"name": "ProfileUpdatePasswordModalMutation",
|
|
69
|
+
"selections": (v1/*: any*/),
|
|
70
|
+
"type": "Mutation",
|
|
71
|
+
"abstractKey": null
|
|
72
|
+
},
|
|
73
|
+
"kind": "Request",
|
|
74
|
+
"operation": {
|
|
75
|
+
"argumentDefinitions": (v0/*: any*/),
|
|
76
|
+
"kind": "Operation",
|
|
77
|
+
"name": "ProfileUpdatePasswordModalMutation",
|
|
78
|
+
"selections": (v1/*: any*/)
|
|
79
|
+
},
|
|
80
|
+
"params": {
|
|
81
|
+
"cacheID": "64308136a7a18e3fb1ab2d16aa93add7",
|
|
82
|
+
"id": null,
|
|
83
|
+
"metadata": {},
|
|
84
|
+
"name": "ProfileUpdatePasswordModalMutation",
|
|
85
|
+
"operationKind": "mutation",
|
|
86
|
+
"text": "mutation ProfileUpdatePasswordModalMutation(\n $input: UpdatePasswordInput!\n) {\n updatePassword(input: $input) {\n id\n }\n}\n"
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
})();
|
|
90
|
+
|
|
91
|
+
(node as any).hash = "efa37ccbe82fbace709f7e3992643c05";
|
|
92
|
+
|
|
93
|
+
export default node;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @generated SignedSource<<a105331072d86f186651d3270145cc53>>
|
|
3
|
+
* @lightSyntaxTransform
|
|
4
|
+
* @nogrep
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* tslint:disable */
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
// @ts-nocheck
|
|
10
|
+
|
|
11
|
+
import { ConcreteRequest } from 'relay-runtime';
|
|
12
|
+
export type ProtectedWrapperQuery$variables = Record<PropertyKey, never>;
|
|
13
|
+
export type ProtectedWrapperQuery$data = {
|
|
14
|
+
readonly profile: {
|
|
15
|
+
readonly avatar: string | null | undefined;
|
|
16
|
+
readonly email: string;
|
|
17
|
+
readonly firstName: string | null | undefined;
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly lastName: string | null | undefined;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type ProtectedWrapperQuery = {
|
|
23
|
+
response: ProtectedWrapperQuery$data;
|
|
24
|
+
variables: ProtectedWrapperQuery$variables;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const node: ConcreteRequest = (function(){
|
|
28
|
+
var v0 = [
|
|
29
|
+
{
|
|
30
|
+
"alias": null,
|
|
31
|
+
"args": null,
|
|
32
|
+
"concreteType": "User",
|
|
33
|
+
"kind": "LinkedField",
|
|
34
|
+
"name": "profile",
|
|
35
|
+
"plural": false,
|
|
36
|
+
"selections": [
|
|
37
|
+
{
|
|
38
|
+
"alias": null,
|
|
39
|
+
"args": null,
|
|
40
|
+
"kind": "ScalarField",
|
|
41
|
+
"name": "id",
|
|
42
|
+
"storageKey": null
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"alias": null,
|
|
46
|
+
"args": null,
|
|
47
|
+
"kind": "ScalarField",
|
|
48
|
+
"name": "email",
|
|
49
|
+
"storageKey": null
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"alias": null,
|
|
53
|
+
"args": null,
|
|
54
|
+
"kind": "ScalarField",
|
|
55
|
+
"name": "firstName",
|
|
56
|
+
"storageKey": null
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"alias": null,
|
|
60
|
+
"args": null,
|
|
61
|
+
"kind": "ScalarField",
|
|
62
|
+
"name": "lastName",
|
|
63
|
+
"storageKey": null
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"alias": null,
|
|
67
|
+
"args": null,
|
|
68
|
+
"kind": "ScalarField",
|
|
69
|
+
"name": "avatar",
|
|
70
|
+
"storageKey": null
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"storageKey": null
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
return {
|
|
77
|
+
"fragment": {
|
|
78
|
+
"argumentDefinitions": [],
|
|
79
|
+
"kind": "Fragment",
|
|
80
|
+
"metadata": null,
|
|
81
|
+
"name": "ProtectedWrapperQuery",
|
|
82
|
+
"selections": (v0/*: any*/),
|
|
83
|
+
"type": "Query",
|
|
84
|
+
"abstractKey": null
|
|
85
|
+
},
|
|
86
|
+
"kind": "Request",
|
|
87
|
+
"operation": {
|
|
88
|
+
"argumentDefinitions": [],
|
|
89
|
+
"kind": "Operation",
|
|
90
|
+
"name": "ProtectedWrapperQuery",
|
|
91
|
+
"selections": (v0/*: any*/)
|
|
92
|
+
},
|
|
93
|
+
"params": {
|
|
94
|
+
"cacheID": "c77ada94a5456167ef4c0c17a1fd7cd7",
|
|
95
|
+
"id": null,
|
|
96
|
+
"metadata": {},
|
|
97
|
+
"name": "ProtectedWrapperQuery",
|
|
98
|
+
"operationKind": "query",
|
|
99
|
+
"text": "query ProtectedWrapperQuery {\n profile {\n id\n email\n firstName\n lastName\n avatar\n }\n}\n"
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
})();
|
|
103
|
+
|
|
104
|
+
(node as any).hash = "903b234e48f53b4a44dc0b4974ebc521";
|
|
105
|
+
|
|
106
|
+
export default node;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import styled from '@emotion/styled';
|
|
2
|
+
import {
|
|
3
|
+
Alert,
|
|
4
|
+
Drawer,
|
|
5
|
+
type DrawerProps,
|
|
6
|
+
Layout,
|
|
7
|
+
PageHeader,
|
|
8
|
+
} from '@os-design/core';
|
|
9
|
+
import { useIsMinWidth } from '@os-design/media';
|
|
10
|
+
import { type Theme, ThemeOverrider } from '@os-design/theming';
|
|
11
|
+
import React, { lazy, Suspense } from 'react';
|
|
12
|
+
import { useTranslation } from 'react-i18next';
|
|
13
|
+
import SessionListSkeleton from './SessionListSkeleton';
|
|
14
|
+
|
|
15
|
+
const LazySessionDrawerContent = lazy(() => import('./SessionDrawerContent'));
|
|
16
|
+
|
|
17
|
+
const overrides: Partial<Theme> = { horizontalPadding: [1, 1] };
|
|
18
|
+
|
|
19
|
+
const StyledPageHeader = styled(PageHeader)`
|
|
20
|
+
position: relative;
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
const StyledAlert = styled(Alert)`
|
|
24
|
+
border-radius: 0;
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const SessionDrawer: React.FC<DrawerProps> = (props) => {
|
|
28
|
+
const { t } = useTranslation(['profile']);
|
|
29
|
+
const isMinSm = useIsMinWidth('sm');
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<Drawer placement='right' width={isMinSm ? '24em' : '90%'} {...props}>
|
|
33
|
+
<ThemeOverrider overrides={overrides}>
|
|
34
|
+
<Layout>
|
|
35
|
+
<StyledPageHeader title={t('profile:sessions.title')} />
|
|
36
|
+
|
|
37
|
+
<StyledAlert type='info' size='small'>
|
|
38
|
+
{t('profile:sessions.description')}
|
|
39
|
+
</StyledAlert>
|
|
40
|
+
|
|
41
|
+
<Suspense fallback={<SessionListSkeleton />}>
|
|
42
|
+
<LazySessionDrawerContent />
|
|
43
|
+
</Suspense>
|
|
44
|
+
</Layout>
|
|
45
|
+
</ThemeOverrider>
|
|
46
|
+
</Drawer>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default SessionDrawer;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React, { Suspense } from 'react';
|
|
2
|
+
import { useLazyLoadQuery } from 'react-relay';
|
|
3
|
+
import { ErrorBoundary, type FallbackFn } from '@os-design/utils';
|
|
4
|
+
import graphql from 'babel-plugin-relay/macro';
|
|
5
|
+
import ErrorResult from '../shared/ErrorResult';
|
|
6
|
+
import SessionList from './SessionList';
|
|
7
|
+
import SessionListSkeleton from './SessionListSkeleton';
|
|
8
|
+
import { type SessionDrawerContentQuery } from './__generated__/SessionDrawerContentQuery.graphql';
|
|
9
|
+
|
|
10
|
+
const SessionDrawerContentLoader: React.FC = () => {
|
|
11
|
+
const props = useLazyLoadQuery<SessionDrawerContentQuery>(
|
|
12
|
+
graphql`
|
|
13
|
+
query SessionDrawerContentQuery {
|
|
14
|
+
...SessionList_sessions
|
|
15
|
+
}
|
|
16
|
+
`,
|
|
17
|
+
{},
|
|
18
|
+
{ fetchPolicy: 'network-only' }
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
return <SessionList sessionsKey={props} />;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const errorFallback: FallbackFn = ({ error }) => <ErrorResult error={error} />;
|
|
25
|
+
|
|
26
|
+
const SessionDrawerContent: React.FC = () => (
|
|
27
|
+
<ErrorBoundary fallback={errorFallback}>
|
|
28
|
+
<Suspense fallback={<SessionListSkeleton />}>
|
|
29
|
+
<SessionDrawerContentLoader />
|
|
30
|
+
</Suspense>
|
|
31
|
+
</ErrorBoundary>
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
export default SessionDrawerContent;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import styled from '@emotion/styled';
|
|
2
|
+
import { Button, message } from '@os-design/core';
|
|
3
|
+
import { clr } from '@os-design/theming';
|
|
4
|
+
import graphql from 'babel-plugin-relay/macro';
|
|
5
|
+
import React, { useCallback, useMemo } from 'react';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { useFragment, useMutation } from 'react-relay';
|
|
8
|
+
import SessionListItem from './SessionListItem';
|
|
9
|
+
import { type SessionListDestroyAllOtherSessionsMutation } from './__generated__/SessionListDestroyAllOtherSessionsMutation.graphql';
|
|
10
|
+
import { type SessionList_sessions$key } from './__generated__/SessionList_sessions.graphql';
|
|
11
|
+
|
|
12
|
+
const sessionsFragment = graphql`
|
|
13
|
+
fragment SessionList_sessions on Query
|
|
14
|
+
@refetchable(queryName: "SessionListRefetchQuery") {
|
|
15
|
+
sessions {
|
|
16
|
+
id
|
|
17
|
+
current
|
|
18
|
+
lastSeenAt
|
|
19
|
+
...SessionListItem_session
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
interface SessionListProps {
|
|
25
|
+
sessionsKey: SessionList_sessions$key;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const Title = styled.div`
|
|
29
|
+
font-weight: 500;
|
|
30
|
+
margin: 1em 1em 0.5em;
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export const List = styled.div`
|
|
34
|
+
border-top: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};
|
|
35
|
+
border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
const DestroyAllOtherSessionsButton = styled(Button)`
|
|
39
|
+
& > span {
|
|
40
|
+
flex: 1;
|
|
41
|
+
text-align: left;
|
|
42
|
+
}
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
const OtherSessions = styled.div`
|
|
46
|
+
margin-top: 2em;
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
export const SESSION_LIST_PADDING_VERTICAL = 0.5;
|
|
50
|
+
|
|
51
|
+
const SessionList: React.FC<SessionListProps> = ({ sessionsKey }) => {
|
|
52
|
+
const { sessions } = useFragment(sessionsFragment, sessionsKey);
|
|
53
|
+
const { t } = useTranslation(['profile']);
|
|
54
|
+
|
|
55
|
+
const currentSession = useMemo(
|
|
56
|
+
() => sessions.find((session) => session.current),
|
|
57
|
+
[sessions]
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const otherSessions = useMemo(
|
|
61
|
+
() =>
|
|
62
|
+
sessions
|
|
63
|
+
.filter((session) => !session.current)
|
|
64
|
+
.sort((a, b) => b.lastSeenAt - a.lastSeenAt),
|
|
65
|
+
[sessions]
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const [commitDestroyAllOtherSessions, loadingDestroyAllOtherSessions] =
|
|
69
|
+
useMutation<SessionListDestroyAllOtherSessionsMutation>(graphql`
|
|
70
|
+
mutation SessionListDestroyAllOtherSessionsMutation {
|
|
71
|
+
destroyAllOtherSessions {
|
|
72
|
+
ok
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
`);
|
|
76
|
+
|
|
77
|
+
const destroyAllOtherSessions = useCallback(() => {
|
|
78
|
+
commitDestroyAllOtherSessions({
|
|
79
|
+
variables: {},
|
|
80
|
+
updater: (store) => {
|
|
81
|
+
// Delete all other sessions from the store
|
|
82
|
+
const rootRP = store.getRoot();
|
|
83
|
+
const sessionsRP = rootRP
|
|
84
|
+
.getLinkedRecords('sessions')
|
|
85
|
+
?.filter((item) => item.getDataID() === currentSession?.id);
|
|
86
|
+
if (!sessionsRP) return;
|
|
87
|
+
rootRP.setLinkedRecords(sessionsRP, 'sessions');
|
|
88
|
+
},
|
|
89
|
+
onError: (error) => {
|
|
90
|
+
message.error(error.message);
|
|
91
|
+
},
|
|
92
|
+
onCompleted: () => {
|
|
93
|
+
message.success(t('profile:sessions.destroyedAllOther'));
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}, [commitDestroyAllOtherSessions, currentSession?.id, t]);
|
|
97
|
+
|
|
98
|
+
return (
|
|
99
|
+
<>
|
|
100
|
+
{currentSession && (
|
|
101
|
+
<>
|
|
102
|
+
<Title>{t('profile:sessions.current')}</Title>
|
|
103
|
+
<List>
|
|
104
|
+
<SessionListItem sessionKey={currentSession} hideLastSeenAt />
|
|
105
|
+
</List>
|
|
106
|
+
</>
|
|
107
|
+
)}
|
|
108
|
+
|
|
109
|
+
{otherSessions.length > 0 && (
|
|
110
|
+
<>
|
|
111
|
+
<DestroyAllOtherSessionsButton
|
|
112
|
+
type='ghost'
|
|
113
|
+
danger
|
|
114
|
+
size='small'
|
|
115
|
+
wide='always'
|
|
116
|
+
loading={loadingDestroyAllOtherSessions}
|
|
117
|
+
onClick={destroyAllOtherSessions}
|
|
118
|
+
>
|
|
119
|
+
{t('profile:sessions.destroyAllOther')}
|
|
120
|
+
</DestroyAllOtherSessionsButton>
|
|
121
|
+
|
|
122
|
+
<OtherSessions>
|
|
123
|
+
<Title>
|
|
124
|
+
{t('profile:sessions.other')} ({otherSessions.length})
|
|
125
|
+
</Title>
|
|
126
|
+
<List>
|
|
127
|
+
{otherSessions.map((session) => (
|
|
128
|
+
<SessionListItem key={session.id} sessionKey={session} />
|
|
129
|
+
))}
|
|
130
|
+
</List>
|
|
131
|
+
</OtherSessions>
|
|
132
|
+
</>
|
|
133
|
+
)}
|
|
134
|
+
</>
|
|
135
|
+
);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export default SessionList;
|