@os-team/profile 1.1.6 → 1.1.8
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/cjs/components/profile/ProfileDrawerContent.js.map +1 -1
- package/dist/cjs/components/profile/ProfileUpdatePasswordModal.js.map +1 -1
- package/dist/cjs/components/session/SessionDrawer.js +7 -6
- package/dist/cjs/components/session/SessionDrawer.js.map +1 -1
- package/dist/cjs/components/session/SessionList.js +13 -11
- package/dist/cjs/components/session/SessionList.js.map +1 -1
- package/dist/cjs/components/session/SessionListItem.js +8 -6
- package/dist/cjs/components/session/SessionListItem.js.map +1 -1
- package/dist/cjs/components/session/__generated__/SessionListItem_session.graphql.js +1 -1
- package/dist/cjs/components/session/__generated__/SessionListItem_session.graphql.js.map +1 -1
- package/dist/cjs/components/session/__generated__/SessionList_sessions.graphql.js +1 -1
- package/dist/cjs/components/session/__generated__/SessionList_sessions.graphql.js.map +1 -1
- package/dist/cjs/components/session/formatDate.js.map +1 -1
- package/dist/esm/components/profile/ProfileDrawerContent.js.map +1 -1
- package/dist/esm/components/profile/ProfileUpdatePasswordModal.js.map +1 -1
- package/dist/esm/components/session/SessionDrawer.js +7 -6
- package/dist/esm/components/session/SessionDrawer.js.map +1 -1
- package/dist/esm/components/session/SessionList.js +11 -9
- package/dist/esm/components/session/SessionList.js.map +1 -1
- package/dist/esm/components/session/SessionListItem.js +7 -5
- package/dist/esm/components/session/SessionListItem.js.map +1 -1
- package/dist/esm/components/session/__generated__/SessionListItem_session.graphql.js +1 -1
- package/dist/esm/components/session/__generated__/SessionListItem_session.graphql.js.map +1 -1
- package/dist/esm/components/session/__generated__/SessionList_sessions.graphql.js +1 -1
- package/dist/esm/components/session/__generated__/SessionList_sessions.graphql.js.map +1 -1
- package/dist/esm/components/session/formatDate.js.map +1 -1
- package/dist/types/src/lib/components/profile/ProfileDrawerContent.d.ts.map +1 -1
- package/dist/types/src/lib/components/profile/ProfileUpdatePasswordModal.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/SessionDrawer.d.ts +1 -1
- package/dist/types/src/lib/components/session/SessionDrawer.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/SessionList.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/__generated__/SessionListItem_session.graphql.d.ts +1 -1
- package/dist/types/src/lib/components/session/__generated__/SessionListItem_session.graphql.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/__generated__/SessionList_sessions.graphql.d.ts +1 -1
- package/dist/types/src/lib/components/session/__generated__/SessionList_sessions.graphql.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/formatDate.d.ts +1 -1
- package/dist/types/src/lib/components/session/formatDate.d.ts.map +1 -1
- package/package.json +46 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList_sessions.graphql.js","names":["node","require","hash","_default","exports","default"],"sources":["../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<
|
|
1
|
+
{"version":3,"file":"SessionList_sessions.graphql.js","names":["node","require","hash","_default","exports","default"],"sources":["../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<7ff1074cf5727e185eacb4fdbc52caa4>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ReaderFragment, RefetchableFragment } from 'relay-runtime';\nimport { FragmentRefs } from \"relay-runtime\";\nexport type SessionList_sessions$data = {\n readonly sessions: ReadonlyArray<{\n readonly current: boolean;\n readonly id: string;\n readonly lastSeenAt: number;\n readonly \" $fragmentSpreads\": FragmentRefs<\"SessionListItem_session\">;\n }>;\n readonly \" $fragmentType\": \"SessionList_sessions\";\n};\nexport type SessionList_sessions$key = {\n readonly \" $data\"?: SessionList_sessions$data;\n readonly \" $fragmentSpreads\": FragmentRefs<\"SessionList_sessions\">;\n};\n\nconst node: ReaderFragment = {\n \"argumentDefinitions\": [],\n \"kind\": \"Fragment\",\n \"metadata\": {\n \"refetch\": {\n \"connection\": null,\n \"fragmentPathInResult\": [],\n \"operation\": require('./SessionListRefetchQuery.graphql')\n }\n },\n \"name\": \"SessionList_sessions\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"SessionPayload\",\n \"kind\": \"LinkedField\",\n \"name\": \"sessions\",\n \"plural\": true,\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"id\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"current\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"lastSeenAt\",\n \"storageKey\": null\n },\n {\n \"args\": null,\n \"kind\": \"FragmentSpread\",\n \"name\": \"SessionListItem_session\"\n }\n ],\n \"storageKey\": null\n }\n ],\n \"type\": \"Query\",\n \"abstractKey\": null\n};\n\n(node as any).hash = \"1b21c937c7ba795f09bfcb5ada7d2510\";\n\nexport default node;\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAkBA,IAAMA,IAAoB,GAAG;EAC3B,qBAAqB,EAAE,EAAE;EACzB,MAAM,EAAE,UAAU;EAClB,UAAU,EAAE;IACV,SAAS,EAAE;MACT,YAAY,EAAE,IAAI;MAClB,sBAAsB,EAAE,EAAE;MAC1B,WAAW,EAAEC,OAAO,CAAC,mCAAmC;IAC1D;EACF,CAAC;EACD,MAAM,EAAE,sBAAsB;EAC9B,YAAY,EAAE,CACZ;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,CACZ;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,IAAI;MACZ,YAAY,EAAE;IAChB,CAAC,EACD;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,SAAS;MACjB,YAAY,EAAE;IAChB,CAAC,EACD;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,YAAY;MACpB,YAAY,EAAE;IAChB,CAAC,EACD;MACE,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,gBAAgB;MACxB,MAAM,EAAE;IACV,CAAC,CACF;IACD,YAAY,EAAE;EAChB,CAAC,CACF;EACD,MAAM,EAAE,OAAO;EACf,aAAa,EAAE;AACjB,CAAC;AAEAD,IAAI,CAASE,IAAI,GAAG,kCAAkC;AAAC,IAAAC,QAAA,GAEzCH,IAAI;AAAAI,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatDate.js","names":["formatDate","timestamp","t","lng","date","Date","day","getDate","month","returnObjects","getMonth","year","getFullYear","isPrevYear","concat","_default","exports","default"],"sources":["../../../../src/lib/components/session/formatDate.ts"],"sourcesContent":["import { TFunction } from 'i18next';\n\nconst formatDate = (timestamp: number
|
|
1
|
+
{"version":3,"file":"formatDate.js","names":["formatDate","timestamp","t","lng","date","Date","day","getDate","month","returnObjects","getMonth","year","getFullYear","isPrevYear","concat","_default","exports","default"],"sources":["../../../../src/lib/components/session/formatDate.ts"],"sourcesContent":["import { TFunction } from 'i18next';\n\nconst formatDate = (\n timestamp: number,\n t: TFunction<['profile'], undefined>,\n lng: string\n): string => {\n const date = new Date(timestamp);\n\n const day = date.getDate();\n const month = t('profile:sessions.monthAbbreviations', {\n returnObjects: true,\n })[date.getMonth()];\n const year = date.getFullYear();\n const isPrevYear = year < new Date().getFullYear();\n\n if (lng === 'ru') return `${day} ${month}${isPrevYear ? ` ${year}` : ''}`;\n return `${month} ${day}${isPrevYear ? `, ${year}` : ''}`;\n};\n\nexport default formatDate;\n"],"mappings":";;;;;;AAEA,IAAMA,UAAU,GAAG,SAAbA,UAAUA,CACdC,SAAiB,EACjBC,CAAoC,EACpCC,GAAW,EACA;EACX,IAAMC,IAAI,GAAG,IAAIC,IAAI,CAACJ,SAAS,CAAC;EAEhC,IAAMK,GAAG,GAAGF,IAAI,CAACG,OAAO,CAAC,CAAC;EAC1B,IAAMC,KAAK,GAAGN,CAAC,CAAC,qCAAqC,EAAE;IACrDO,aAAa,EAAE;EACjB,CAAC,CAAC,CAACL,IAAI,CAACM,QAAQ,CAAC,CAAC,CAAC;EACnB,IAAMC,IAAI,GAAGP,IAAI,CAACQ,WAAW,CAAC,CAAC;EAC/B,IAAMC,UAAU,GAAGF,IAAI,GAAG,IAAIN,IAAI,CAAC,CAAC,CAACO,WAAW,CAAC,CAAC;EAElD,IAAIT,GAAG,KAAK,IAAI,EAAE,UAAAW,MAAA,CAAUR,GAAG,OAAAQ,MAAA,CAAIN,KAAK,EAAAM,MAAA,CAAGD,UAAU,OAAAC,MAAA,CAAOH,IAAI,IAAK,EAAE;EACvE,UAAAG,MAAA,CAAUN,KAAK,OAAAM,MAAA,CAAIR,GAAG,EAAAQ,MAAA,CAAGD,UAAU,QAAAC,MAAA,CAAQH,IAAI,IAAK,EAAE;AACxD,CAAC;AAAC,IAAAI,QAAA,GAEaf,UAAU;AAAAgB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileDrawerContent.js","names":["React","useCallback","useMemo","useRef","useState","message","ThemeSwitcher","styled","clr","useTranslation","useMutation","UserAvatar","useProfile","ProfileButton","ProfileUpdateNameModal","ProfileUpdatePasswordModal","getErrorMessage","AvatarContainer","div","UserContent","FullName","p","theme","sizes","large","Email","inputColorPlaceholder","ActionsContainer","Footer","HiddenInput","input","profileDrawerContentUpdateAvatarMutation","_ProfileDrawerContentUpdateAvatarMutation","require","hash","console","error","DeleteAvatarButton","t","commit","loading","handler","variables","avatar","onError","onCompleted","success","createElement","onClick","UpdateAvatarButton","hasAvatar","fileInputRef","e","target","files","file","uploadables","Fragment","current","value","click","type","accept","onChange","ref","UpdateNameButton","hasName","modalVisibility","setModalVisibility","visibility","onClose","ChangePasswordButton","SignOutButton","_ProfileDrawerContentSignOutMutation","window","location","href","danger","ProfileDrawerContent","actions","children","email","firstName","lastName","fullName","filter","i","join","size"],"sources":["../../../../src/lib/components/profile/ProfileDrawerContent.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { message, ThemeSwitcher } from '@os-design/core';\nimport styled from '@emotion/styled';\nimport { clr } from '@os-design/theming';\nimport { useTranslation } from 'react-i18next';\nimport { useMutation } from 'react-relay/hooks';\nimport { graphql } from 'babel-plugin-relay/macro';\nimport UserAvatar from './UserAvatar';\nimport { useProfile } from './ProfileContext';\nimport ProfileButton from './ProfileButton';\nimport ProfileUpdateNameModal from './ProfileUpdateNameModal';\nimport ProfileUpdatePasswordModal from './ProfileUpdatePasswordModal';\nimport { ProfileDrawerContentSignOutMutation } from './__generated__/ProfileDrawerContentSignOutMutation.graphql';\nimport { ProfileDrawerContentUpdateAvatarMutation } from './__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql';\nimport getErrorMessage from '../../utils/getErrorMessage';\n\nexport interface ProfileDrawerContentProps {\n /**\n * Additional actions placed under the avatar.\n * @default undefined\n */\n actions?: React.ReactNode;\n /**\n * The children.\n */\n children?: React.ReactNode;\n}\n\nconst AvatarContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst UserContent = styled.div`\n margin-top: 1em;\n`;\n\nconst FullName = styled.div`\n font-size: ${(p) => p.theme.sizes.large}em;\n font-weight: 500;\n text-align: center;\n line-height: 1.2;\n`;\n\nconst Email = styled.div`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n margin-top: 0.2em;\n text-align: center;\n`;\n\nconst ActionsContainer = styled.div`\n margin-top: 1.5em;\n`;\n\nconst Footer = styled.div`\n display: flex;\n justify-content: center;\n margin-top: auto;\n padding-top: 1.5em;\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst profileDrawerContentUpdateAvatarMutation = graphql`\n mutation ProfileDrawerContentUpdateAvatarMutation(\n $input: UpdateAvatarInput!\n ) {\n updateAvatar(input: $input) {\n id\n avatar\n }\n }\n`;\n\nconst DeleteAvatarButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n\n const [commit, loading] =\n useMutation<ProfileDrawerContentUpdateAvatarMutation>(\n profileDrawerContentUpdateAvatarMutation\n );\n\n const handler = useCallback(() => {\n commit({\n variables: {\n input: { avatar: null },\n },\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n message.success(t('profile:updated'));\n },\n });\n }, [commit, t]);\n\n return (\n <ProfileButton loading={loading} onClick={handler}>\n {t('profile:deleteAvatar')}\n </ProfileButton>\n );\n};\n\ninterface UpdateAvatarButtonProps {\n hasAvatar: boolean;\n}\n\nconst UpdateAvatarButton: React.FC<UpdateAvatarButtonProps> = ({\n hasAvatar,\n}) => {\n const { t } = useTranslation(['profile']);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const [commit, loading] =\n useMutation<ProfileDrawerContentUpdateAvatarMutation>(\n profileDrawerContentUpdateAvatarMutation\n );\n\n const handler = useCallback(\n (e) => {\n const target = e.target as HTMLInputElement | null;\n if (!target) return;\n\n const { files } = target;\n if (!files) return;\n\n const file = files[0];\n\n commit({\n variables: {\n input: {},\n },\n uploadables: { avatar: file },\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n message.success(t('profile:updated'));\n },\n });\n },\n [commit, t]\n );\n\n return (\n <>\n <ProfileButton\n loading={loading}\n onClick={() => {\n if (!fileInputRef.current) return;\n fileInputRef.current.value = '';\n fileInputRef.current.click();\n }}\n >\n {t(`profile:${hasAvatar ? 'changeAvatar' : 'setAvatar'}`)}\n </ProfileButton>\n\n <HiddenInput\n type='file'\n accept='image/jpeg,image/png,image/webp'\n onChange={handler}\n ref={fileInputRef}\n />\n </>\n );\n};\n\ninterface UpdateNameButtonProps {\n hasName: boolean;\n}\n\nconst UpdateNameButton: React.FC<UpdateNameButtonProps> = ({ hasName }) => {\n const { t } = useTranslation(['profile']);\n const [modalVisibility, setModalVisibility] = useState(false);\n\n return (\n <>\n <ProfileButton onClick={() => setModalVisibility(true)}>\n {t(`profile:${hasName ? 'changeName' : 'setName'}`)}\n </ProfileButton>\n\n <ProfileUpdateNameModal\n visibility={modalVisibility}\n onClose={() => setModalVisibility(false)}\n />\n </>\n );\n};\n\nconst ChangePasswordButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n const [modalVisibility, setModalVisibility] = useState(false);\n\n return (\n <>\n <ProfileButton onClick={() => setModalVisibility(true)}>\n {t('profile:changePassword')}\n </ProfileButton>\n\n <ProfileUpdatePasswordModal\n visibility={modalVisibility}\n onClose={() => setModalVisibility(false)}\n />\n </>\n );\n};\n\nconst SignOutButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n\n const [commit, loading] =\n useMutation<ProfileDrawerContentSignOutMutation>(graphql`\n mutation ProfileDrawerContentSignOutMutation {\n signOut {\n ok\n }\n }\n `);\n\n const handler = useCallback(() => {\n commit({\n variables: {},\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n window.location.href = '/auth/';\n },\n });\n }, [commit]);\n\n return (\n <ProfileButton danger loading={loading} onClick={handler}>\n {t('profile:signOut')}\n </ProfileButton>\n );\n};\n\nconst ProfileDrawerContent: React.FC<ProfileDrawerContentProps> = ({\n actions,\n children,\n}) => {\n const { email, firstName, lastName, avatar } = useProfile();\n\n const fullName = useMemo(\n () => [firstName, lastName].filter((i) => i).join(' '),\n [firstName, lastName]\n );\n\n return (\n <>\n <AvatarContainer>\n <UserAvatar size='10em' />\n <UserContent>\n {fullName && <FullName>{fullName}</FullName>}\n <Email>{email}</Email>\n </UserContent>\n </AvatarContainer>\n\n <ActionsContainer>\n {avatar && <DeleteAvatarButton />}\n\n <UpdateAvatarButton hasAvatar={!!avatar} />\n <UpdateNameButton hasName={!!fullName} />\n <ChangePasswordButton />\n\n {actions}\n\n <SignOutButton />\n\n {children}\n </ActionsContainer>\n\n <Footer>\n <ThemeSwitcher />\n </Footer>\n </>\n );\n};\n\nexport default ProfileDrawerContent;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProfileDrawerContent.js","names":["React","useCallback","useMemo","useRef","useState","message","ThemeSwitcher","styled","clr","useTranslation","useMutation","UserAvatar","useProfile","ProfileButton","ProfileUpdateNameModal","ProfileUpdatePasswordModal","getErrorMessage","AvatarContainer","div","UserContent","FullName","p","theme","sizes","large","Email","inputColorPlaceholder","ActionsContainer","Footer","HiddenInput","input","profileDrawerContentUpdateAvatarMutation","_ProfileDrawerContentUpdateAvatarMutation","require","hash","console","error","DeleteAvatarButton","t","commit","loading","handler","variables","avatar","onError","onCompleted","success","createElement","onClick","UpdateAvatarButton","hasAvatar","fileInputRef","e","target","files","file","uploadables","Fragment","current","value","click","type","accept","onChange","ref","UpdateNameButton","hasName","modalVisibility","setModalVisibility","visibility","onClose","ChangePasswordButton","SignOutButton","_ProfileDrawerContentSignOutMutation","window","location","href","danger","ProfileDrawerContent","actions","children","email","firstName","lastName","fullName","filter","i","join","size"],"sources":["../../../../src/lib/components/profile/ProfileDrawerContent.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { message, ThemeSwitcher } from '@os-design/core';\nimport styled from '@emotion/styled';\nimport { clr } from '@os-design/theming';\nimport { useTranslation } from 'react-i18next';\nimport { useMutation } from 'react-relay/hooks';\nimport { graphql } from 'babel-plugin-relay/macro';\nimport UserAvatar from './UserAvatar';\nimport { useProfile } from './ProfileContext';\nimport ProfileButton from './ProfileButton';\nimport ProfileUpdateNameModal from './ProfileUpdateNameModal';\nimport ProfileUpdatePasswordModal from './ProfileUpdatePasswordModal';\nimport { ProfileDrawerContentSignOutMutation } from './__generated__/ProfileDrawerContentSignOutMutation.graphql';\nimport { ProfileDrawerContentUpdateAvatarMutation } from './__generated__/ProfileDrawerContentUpdateAvatarMutation.graphql';\nimport getErrorMessage from '../../utils/getErrorMessage';\n\nexport interface ProfileDrawerContentProps {\n /**\n * Additional actions placed under the avatar.\n * @default undefined\n */\n actions?: React.ReactNode;\n /**\n * The children.\n */\n children?: React.ReactNode;\n}\n\nconst AvatarContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst UserContent = styled.div`\n margin-top: 1em;\n`;\n\nconst FullName = styled.div`\n font-size: ${(p) => p.theme.sizes.large}em;\n font-weight: 500;\n text-align: center;\n line-height: 1.2;\n`;\n\nconst Email = styled.div`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n margin-top: 0.2em;\n text-align: center;\n`;\n\nconst ActionsContainer = styled.div`\n margin-top: 1.5em;\n`;\n\nconst Footer = styled.div`\n display: flex;\n justify-content: center;\n margin-top: auto;\n padding-top: 1.5em;\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst profileDrawerContentUpdateAvatarMutation = graphql`\n mutation ProfileDrawerContentUpdateAvatarMutation(\n $input: UpdateAvatarInput!\n ) {\n updateAvatar(input: $input) {\n id\n avatar\n }\n }\n`;\n\nconst DeleteAvatarButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n\n const [commit, loading] =\n useMutation<ProfileDrawerContentUpdateAvatarMutation>(\n profileDrawerContentUpdateAvatarMutation\n );\n\n const handler = useCallback(() => {\n commit({\n variables: {\n input: { avatar: null },\n },\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n message.success(t('profile:updated'));\n },\n });\n }, [commit, t]);\n\n return (\n <ProfileButton loading={loading} onClick={handler}>\n {t('profile:deleteAvatar')}\n </ProfileButton>\n );\n};\n\ninterface UpdateAvatarButtonProps {\n hasAvatar: boolean;\n}\n\nconst UpdateAvatarButton: React.FC<UpdateAvatarButtonProps> = ({\n hasAvatar,\n}) => {\n const { t } = useTranslation(['profile']);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const [commit, loading] =\n useMutation<ProfileDrawerContentUpdateAvatarMutation>(\n profileDrawerContentUpdateAvatarMutation\n );\n\n const handler = useCallback(\n (e) => {\n const target = e.target as HTMLInputElement | null;\n if (!target) return;\n\n const { files } = target;\n if (!files) return;\n\n const file = files[0];\n\n commit({\n variables: {\n input: {},\n },\n uploadables: { avatar: file },\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n message.success(t('profile:updated'));\n },\n });\n },\n [commit, t]\n );\n\n return (\n <>\n <ProfileButton\n loading={loading}\n onClick={() => {\n if (!fileInputRef.current) return;\n fileInputRef.current.value = '';\n fileInputRef.current.click();\n }}\n >\n {t(`profile:${hasAvatar ? 'changeAvatar' : 'setAvatar'}`)}\n </ProfileButton>\n\n <HiddenInput\n type='file'\n accept='image/jpeg,image/png,image/webp'\n onChange={handler}\n ref={fileInputRef}\n />\n </>\n );\n};\n\ninterface UpdateNameButtonProps {\n hasName: boolean;\n}\n\nconst UpdateNameButton: React.FC<UpdateNameButtonProps> = ({ hasName }) => {\n const { t } = useTranslation(['profile']);\n const [modalVisibility, setModalVisibility] = useState(false);\n\n return (\n <>\n <ProfileButton onClick={() => setModalVisibility(true)}>\n {t(`profile:${hasName ? 'changeName' : 'setName'}`)}\n </ProfileButton>\n\n <ProfileUpdateNameModal\n visibility={modalVisibility}\n onClose={() => setModalVisibility(false)}\n />\n </>\n );\n};\n\nconst ChangePasswordButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n const [modalVisibility, setModalVisibility] = useState(false);\n\n return (\n <>\n <ProfileButton onClick={() => setModalVisibility(true)}>\n {t('profile:changePassword')}\n </ProfileButton>\n\n <ProfileUpdatePasswordModal\n visibility={modalVisibility}\n onClose={() => setModalVisibility(false)}\n />\n </>\n );\n};\n\nconst SignOutButton: React.FC = () => {\n const { t } = useTranslation(['profile']);\n\n const [commit, loading] = useMutation<ProfileDrawerContentSignOutMutation>(\n graphql`\n mutation ProfileDrawerContentSignOutMutation {\n signOut {\n ok\n }\n }\n `\n );\n\n const handler = useCallback(() => {\n commit({\n variables: {},\n onError: (error) => message.error(getErrorMessage(error)),\n onCompleted: () => {\n window.location.href = '/auth/';\n },\n });\n }, [commit]);\n\n return (\n <ProfileButton danger loading={loading} onClick={handler}>\n {t('profile:signOut')}\n </ProfileButton>\n );\n};\n\nconst ProfileDrawerContent: React.FC<ProfileDrawerContentProps> = ({\n actions,\n children,\n}) => {\n const { email, firstName, lastName, avatar } = useProfile();\n\n const fullName = useMemo(\n () => [firstName, lastName].filter((i) => i).join(' '),\n [firstName, lastName]\n );\n\n return (\n <>\n <AvatarContainer>\n <UserAvatar size='10em' />\n <UserContent>\n {fullName && <FullName>{fullName}</FullName>}\n <Email>{email}</Email>\n </UserContent>\n </AvatarContainer>\n\n <ActionsContainer>\n {avatar && <DeleteAvatarButton />}\n\n <UpdateAvatarButton hasAvatar={!!avatar} />\n <UpdateNameButton hasName={!!fullName} />\n <ChangePasswordButton />\n\n {actions}\n\n <SignOutButton />\n\n {children}\n </ActionsContainer>\n\n <Footer>\n <ThemeSwitcher />\n </Footer>\n </>\n );\n};\n\nexport default ProfileDrawerContent;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileUpdatePasswordModal.js","names":["Form","FormItem","InputPassword","message","Modal","FormProvider","useForm","React","useCallback","useEffect","useTranslation","useMutation","handleFormErrors","FormError","ProfileUpdatePasswordModal","visibility","onClose","t","form","Field","currentPassword","password","commit","loading","_ProfileUpdatePasswordModalMutation","require","hash","console","error","reset","onSubmit","variables","input","values","getAll","onError","onCompleted","success","createElement","title","visible","okText","okLoading","onOk","name","render","props","label","_extends","placeholder","showStrengthMeter","strengthNames","returnObjects"],"sources":["../../../../src/lib/components/profile/ProfileUpdatePasswordModal.tsx"],"sourcesContent":["import { Form, FormItem, InputPassword, message, Modal } from '@os-design/core';\nimport { FormProvider, useForm } from '@os-design/form';\nimport { graphql } from 'babel-plugin-relay/macro';\nimport React, { useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useMutation } from 'react-relay/hooks';\nimport handleFormErrors from '../../utils/handleFormErrors';\nimport FormError from '../shared/FormError';\nimport { ProfileUpdatePasswordModalMutation } from './__generated__/ProfileUpdatePasswordModalMutation.graphql';\n\ninterface ProfileUpdatePasswordFormData {\n currentPassword: string;\n password: string;\n}\n\ninterface ProfileUpdatePasswordModalProps {\n visibility: boolean;\n onClose: () => void;\n}\n\nconst ProfileUpdatePasswordModal: React.FC<ProfileUpdatePasswordModalProps> = ({\n visibility,\n onClose,\n}) => {\n const { t } = useTranslation(['profile']);\n\n const { form, Field } = useForm<ProfileUpdatePasswordFormData>({\n currentPassword: '',\n password: '',\n });\n\n const [commit, loading]
|
|
1
|
+
{"version":3,"file":"ProfileUpdatePasswordModal.js","names":["Form","FormItem","InputPassword","message","Modal","FormProvider","useForm","React","useCallback","useEffect","useTranslation","useMutation","handleFormErrors","FormError","ProfileUpdatePasswordModal","visibility","onClose","t","form","Field","currentPassword","password","commit","loading","_ProfileUpdatePasswordModalMutation","require","hash","console","error","reset","onSubmit","variables","input","values","getAll","onError","onCompleted","success","createElement","title","visible","okText","okLoading","onOk","name","render","props","label","_extends","placeholder","showStrengthMeter","strengthNames","returnObjects"],"sources":["../../../../src/lib/components/profile/ProfileUpdatePasswordModal.tsx"],"sourcesContent":["import { Form, FormItem, InputPassword, message, Modal } from '@os-design/core';\nimport { FormProvider, useForm } from '@os-design/form';\nimport { graphql } from 'babel-plugin-relay/macro';\nimport React, { useCallback, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useMutation } from 'react-relay/hooks';\nimport handleFormErrors from '../../utils/handleFormErrors';\nimport FormError from '../shared/FormError';\nimport { ProfileUpdatePasswordModalMutation } from './__generated__/ProfileUpdatePasswordModalMutation.graphql';\n\ninterface ProfileUpdatePasswordFormData {\n currentPassword: string;\n password: string;\n}\n\ninterface ProfileUpdatePasswordModalProps {\n visibility: boolean;\n onClose: () => void;\n}\n\nconst ProfileUpdatePasswordModal: React.FC<ProfileUpdatePasswordModalProps> = ({\n visibility,\n onClose,\n}) => {\n const { t } = useTranslation(['profile']);\n\n const { form, Field } = useForm<ProfileUpdatePasswordFormData>({\n currentPassword: '',\n password: '',\n });\n\n const [commit, loading] = useMutation<ProfileUpdatePasswordModalMutation>(\n graphql`\n mutation ProfileUpdatePasswordModalMutation(\n $input: UpdatePasswordInput!\n ) {\n updatePassword(input: $input) {\n id\n }\n }\n `\n );\n\n // Reset the data if the modal is visible\n useEffect(() => {\n if (visibility) form.reset();\n }, [form, visibility]);\n\n const onSubmit = useCallback(() => {\n commit({\n variables: {\n input: form.values.getAll(),\n },\n onError: (error) => handleFormErrors(form, error),\n onCompleted: () => {\n message.success(t('profile:updatePasswordModal.success'));\n onClose();\n },\n });\n }, [commit, form, onClose, t]);\n\n return (\n <Modal\n title={t('profile:updatePasswordModal.title')}\n visible={visibility}\n okText={t('profile:updatePasswordModal.button')}\n okLoading={loading}\n onOk={onSubmit}\n onClose={onClose}\n >\n <FormProvider form={form}>\n <Form>\n <Field\n name='currentPassword'\n render={(props, { error }) => (\n <FormItem\n label={t('profile:updatePasswordModal.currentPassword.label')}\n error={error}\n >\n <InputPassword\n placeholder={t(\n 'profile:updatePasswordModal.currentPassword.placeholder'\n )}\n {...props}\n />\n </FormItem>\n )}\n />\n\n <Field\n name='password'\n render={(props, { error }) => (\n <FormItem\n label={t('profile:updatePasswordModal.newPassword.label')}\n error={error}\n >\n <InputPassword\n placeholder={t(\n 'profile:updatePasswordModal.newPassword.placeholder'\n )}\n showStrengthMeter\n strengthNames={t(\n 'profile:updatePasswordModal.passwordStrengthNames',\n { returnObjects: true }\n )}\n {...props}\n />\n </FormItem>\n )}\n />\n\n <FormError />\n </Form>\n </FormProvider>\n </Modal>\n );\n};\n\nexport default ProfileUpdatePasswordModal;\n"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,QAAQ,EAAEC,aAAa,EAAEC,OAAO,EAAEC,KAAK,QAAQ,iBAAiB;AAC/E,SAASC,YAAY,EAAEC,OAAO,QAAQ,iBAAiB;AAEvD,OAAOC,KAAK,IAAIC,WAAW,EAAEC,SAAS,QAAQ,OAAO;AACrD,SAASC,cAAc,QAAQ,eAAe;AAC9C,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,OAAOC,gBAAgB,MAAM,8BAA8B;AAC3D,OAAOC,SAAS,MAAM,qBAAqB;AAa3C,MAAMC,0BAAqE,GAAGA,CAAC;EAC7EC,UAAU;EACVC;AACF,CAAC,KAAK;EACJ,MAAM;IAAEC;EAAE,CAAC,GAAGP,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;EAEzC,MAAM;IAAEQ,IAAI;IAAEC;EAAM,CAAC,GAAGb,OAAO,CAAgC;IAC7Dc,eAAe,EAAE,EAAE;IACnBC,QAAQ,EAAE;EACZ,CAAC,CAAC;EAEF,MAAM,CAACC,MAAM,EAAEC,OAAO,CAAC,GAAGZ,WAAW,CAAAa,mCAAA,cAAAA,mCAAA,IAAAA,mCAAA,GAAAC,OAAA,gEAAAD,mCAAA,CAAAE,IAAA,IAAAF,mCAAA,CAAAE,IAAA,2CAAAC,OAAA,CAAAC,KAAA,sKAAAJ,mCAAA,CAUrC,CAAC;;EAED;EACAf,SAAS,CAAC,MAAM;IACd,IAAIM,UAAU,EAAEG,IAAI,CAACW,KAAK,CAAC,CAAC;EAC9B,CAAC,EAAE,CAACX,IAAI,EAAEH,UAAU,CAAC,CAAC;EAEtB,MAAMe,QAAQ,GAAGtB,WAAW,CAAC,MAAM;IACjCc,MAAM,CAAC;MACLS,SAAS,EAAE;QACTC,KAAK,EAAEd,IAAI,CAACe,MAAM,CAACC,MAAM,CAAC;MAC5B,CAAC;MACDC,OAAO,EAAGP,KAAK,IAAKhB,gBAAgB,CAACM,IAAI,EAAEU,KAAK,CAAC;MACjDQ,WAAW,EAAEA,CAAA,KAAM;QACjBjC,OAAO,CAACkC,OAAO,CAACpB,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACzDD,OAAO,CAAC,CAAC;MACX;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACM,MAAM,EAAEJ,IAAI,EAAEF,OAAO,EAAEC,CAAC,CAAC,CAAC;EAE9B,oBACEV,KAAA,CAAA+B,aAAA,CAAClC,KAAK;IACJmC,KAAK,EAAEtB,CAAC,CAAC,mCAAmC,CAAE;IAC9CuB,OAAO,EAAEzB,UAAW;IACpB0B,MAAM,EAAExB,CAAC,CAAC,oCAAoC,CAAE;IAChDyB,SAAS,EAAEnB,OAAQ;IACnBoB,IAAI,EAAEb,QAAS;IACfd,OAAO,EAAEA;EAAQ,gBAEjBT,KAAA,CAAA+B,aAAA,CAACjC,YAAY;IAACa,IAAI,EAAEA;EAAK,gBACvBX,KAAA,CAAA+B,aAAA,CAACtC,IAAI,qBACHO,KAAA,CAAA+B,aAAA,CAACnB,KAAK;IACJyB,IAAI,EAAC,iBAAiB;IACtBC,MAAM,EAAEA,CAACC,KAAK,EAAE;MAAElB;IAAM,CAAC,kBACvBrB,KAAA,CAAA+B,aAAA,CAACrC,QAAQ;MACP8C,KAAK,EAAE9B,CAAC,CAAC,mDAAmD,CAAE;MAC9DW,KAAK,EAAEA;IAAM,gBAEbrB,KAAA,CAAA+B,aAAA,CAACpC,aAAa,EAAA8C,QAAA;MACZC,WAAW,EAAEhC,CAAC,CACZ,yDACF;IAAE,GACE6B,KAAK,CACV,CACO;EACV,CACH,CAAC,eAEFvC,KAAA,CAAA+B,aAAA,CAACnB,KAAK;IACJyB,IAAI,EAAC,UAAU;IACfC,MAAM,EAAEA,CAACC,KAAK,EAAE;MAAElB;IAAM,CAAC,kBACvBrB,KAAA,CAAA+B,aAAA,CAACrC,QAAQ;MACP8C,KAAK,EAAE9B,CAAC,CAAC,+CAA+C,CAAE;MAC1DW,KAAK,EAAEA;IAAM,gBAEbrB,KAAA,CAAA+B,aAAA,CAACpC,aAAa,EAAA8C,QAAA;MACZC,WAAW,EAAEhC,CAAC,CACZ,qDACF,CAAE;MACFiC,iBAAiB;MACjBC,aAAa,EAAElC,CAAC,CACd,mDAAmD,EACnD;QAAEmC,aAAa,EAAE;MAAK,CACxB;IAAE,GACEN,KAAK,CACV,CACO;EACV,CACH,CAAC,eAEFvC,KAAA,CAAA+B,aAAA,CAACzB,SAAS,MAAE,CACR,CACM,CACT,CAAC;AAEZ,CAAC;AAED,eAAeC,0BAA0B"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import React, { lazy, Suspense } from 'react';
|
|
3
2
|
import styled from '@emotion/styled';
|
|
4
3
|
import { Alert, Drawer, Layout, PageHeader } from '@os-design/core';
|
|
5
|
-
import { useTranslation } from 'react-i18next';
|
|
6
|
-
import { ThemeOverrider } from '@os-design/theming';
|
|
7
4
|
import { useIsMinWidth } from '@os-design/media';
|
|
5
|
+
import { ThemeOverrider } from '@os-design/theming';
|
|
6
|
+
import React, { lazy, Suspense } from 'react';
|
|
7
|
+
import { useTranslation } from 'react-i18next';
|
|
8
8
|
import SessionListSkeleton from './SessionListSkeleton';
|
|
9
9
|
const LazySessionDrawerContent = /*#__PURE__*/lazy(() => import('./SessionDrawerContent'));
|
|
10
|
+
const overrides = {
|
|
11
|
+
horizontalPadding: [1, 1]
|
|
12
|
+
};
|
|
10
13
|
const StyledPageHeader = styled(PageHeader)`
|
|
11
14
|
position: relative;
|
|
12
15
|
`;
|
|
@@ -22,9 +25,7 @@ const SessionDrawer = props => {
|
|
|
22
25
|
placement: "right",
|
|
23
26
|
width: isMinSm ? '24em' : '90%'
|
|
24
27
|
}, props), /*#__PURE__*/React.createElement(ThemeOverrider, {
|
|
25
|
-
overrides:
|
|
26
|
-
horizontalPadding: [1, 1]
|
|
27
|
-
}
|
|
28
|
+
overrides: overrides
|
|
28
29
|
}, /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(StyledPageHeader, {
|
|
29
30
|
title: t('profile:sessions.title')
|
|
30
31
|
}), /*#__PURE__*/React.createElement(StyledAlert, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionDrawer.js","names":["
|
|
1
|
+
{"version":3,"file":"SessionDrawer.js","names":["styled","Alert","Drawer","Layout","PageHeader","useIsMinWidth","ThemeOverrider","React","lazy","Suspense","useTranslation","SessionListSkeleton","LazySessionDrawerContent","overrides","horizontalPadding","StyledPageHeader","StyledAlert","SessionDrawer","props","t","isMinSm","createElement","_extends","placement","width","title","type","size","fallback"],"sources":["../../../../src/lib/components/session/SessionDrawer.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n Alert,\n Drawer,\n DrawerProps,\n Layout,\n PageHeader,\n} from '@os-design/core';\nimport { useIsMinWidth } from '@os-design/media';\nimport { Theme, ThemeOverrider } from '@os-design/theming';\nimport React, { lazy, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SessionListSkeleton from './SessionListSkeleton';\n\nconst LazySessionDrawerContent = lazy(() => import('./SessionDrawerContent'));\n\nconst overrides: Partial<Theme> = { horizontalPadding: [1, 1] };\n\nconst StyledPageHeader = styled(PageHeader)`\n position: relative;\n`;\n\nconst StyledAlert = styled(Alert)`\n border-radius: 0;\n`;\n\nconst SessionDrawer: React.FC<DrawerProps> = (props) => {\n const { t } = useTranslation(['profile']);\n const isMinSm = useIsMinWidth('sm');\n\n return (\n <Drawer placement='right' width={isMinSm ? '24em' : '90%'} {...props}>\n <ThemeOverrider overrides={overrides}>\n <Layout>\n <StyledPageHeader title={t('profile:sessions.title')} />\n\n <StyledAlert type='info' size='small'>\n {t('profile:sessions.description')}\n </StyledAlert>\n\n <Suspense fallback={<SessionListSkeleton />}>\n <LazySessionDrawerContent />\n </Suspense>\n </Layout>\n </ThemeOverrider>\n </Drawer>\n );\n};\n\nexport default SessionDrawer;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SACEC,KAAK,EACLC,MAAM,EAENC,MAAM,EACNC,UAAU,QACL,iBAAiB;AACxB,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAAgBC,cAAc,QAAQ,oBAAoB;AAC1D,OAAOC,KAAK,IAAIC,IAAI,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,cAAc,QAAQ,eAAe;AAC9C,OAAOC,mBAAmB,MAAM,uBAAuB;AAEvD,MAAMC,wBAAwB,gBAAGJ,IAAI,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAE7E,MAAMK,SAAyB,GAAG;EAAEC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC;AAAE,CAAC;AAE/D,MAAMC,gBAAgB,GAAGf,MAAM,CAACI,UAAU,CAAE;AAC5C;AACA,CAAC;AAED,MAAMY,WAAW,GAAGhB,MAAM,CAACC,KAAK,CAAE;AAClC;AACA,CAAC;AAED,MAAMgB,aAAoC,GAAIC,KAAK,IAAK;EACtD,MAAM;IAAEC;EAAE,CAAC,GAAGT,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;EACzC,MAAMU,OAAO,GAAGf,aAAa,CAAC,IAAI,CAAC;EAEnC,oBACEE,KAAA,CAAAc,aAAA,CAACnB,MAAM,EAAAoB,QAAA;IAACC,SAAS,EAAC,OAAO;IAACC,KAAK,EAAEJ,OAAO,GAAG,MAAM,GAAG;EAAM,GAAKF,KAAK,gBAClEX,KAAA,CAAAc,aAAA,CAACf,cAAc;IAACO,SAAS,EAAEA;EAAU,gBACnCN,KAAA,CAAAc,aAAA,CAAClB,MAAM,qBACLI,KAAA,CAAAc,aAAA,CAACN,gBAAgB;IAACU,KAAK,EAAEN,CAAC,CAAC,wBAAwB;EAAE,CAAE,CAAC,eAExDZ,KAAA,CAAAc,aAAA,CAACL,WAAW;IAACU,IAAI,EAAC,MAAM;IAACC,IAAI,EAAC;EAAO,GAClCR,CAAC,CAAC,8BAA8B,CACtB,CAAC,eAEdZ,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACmB,QAAQ,eAAErB,KAAA,CAAAc,aAAA,CAACV,mBAAmB,MAAE;EAAE,gBAC1CJ,KAAA,CAAAc,aAAA,CAACT,wBAAwB,MAAE,CACnB,CACJ,CACM,CACV,CAAC;AAEb,CAAC;AAED,eAAeK,aAAa"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
var _SessionList_sessions, _SessionListDestroyAllOtherSessionsMutation;
|
|
2
|
-
import React, { useCallback, useMemo } from 'react';
|
|
3
|
-
import { useFragment, useMutation } from 'react-relay/hooks';
|
|
4
|
-
import { Button, message } from '@os-design/core';
|
|
5
2
|
import styled from '@emotion/styled';
|
|
6
|
-
import {
|
|
3
|
+
import { Button, message } from '@os-design/core';
|
|
7
4
|
import { clr } from '@os-design/theming';
|
|
5
|
+
import React, { useCallback, useMemo } from 'react';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { useFragment, useMutation } from 'react-relay/hooks';
|
|
8
8
|
import SessionListItem from './SessionListItem';
|
|
9
9
|
const sessionsFragment = _SessionList_sessions !== void 0 ? _SessionList_sessions : (_SessionList_sessions = require("./__generated__/SessionList_sessions.graphql"), _SessionList_sessions.hash && _SessionList_sessions.hash !== "1b21c937c7ba795f09bfcb5ada7d2510" && console.error("The definition of 'SessionList_sessions' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _SessionList_sessions);
|
|
10
10
|
export const Title = styled.div`
|
|
@@ -41,11 +41,13 @@ const SessionList = ({
|
|
|
41
41
|
commitDestroyAllOtherSessions({
|
|
42
42
|
variables: {},
|
|
43
43
|
updater: store => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
if (!
|
|
48
|
-
|
|
44
|
+
var _rootRP$getLinkedReco;
|
|
45
|
+
// Delete all other sessions from the store
|
|
46
|
+
const rootRP = store.get('client:root');
|
|
47
|
+
if (!rootRP) return;
|
|
48
|
+
const sessionsRP = (_rootRP$getLinkedReco = rootRP.getLinkedRecords('sessions')) === null || _rootRP$getLinkedReco === void 0 ? void 0 : _rootRP$getLinkedReco.filter(item => item.getDataID() === (currentSession === null || currentSession === void 0 ? void 0 : currentSession.id));
|
|
49
|
+
if (!sessionsRP) return;
|
|
50
|
+
rootRP.setLinkedRecords(sessionsRP, 'sessions');
|
|
49
51
|
},
|
|
50
52
|
onError: error => {
|
|
51
53
|
message.error(error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.js","names":["
|
|
1
|
+
{"version":3,"file":"SessionList.js","names":["styled","Button","message","clr","React","useCallback","useMemo","useTranslation","useFragment","useMutation","SessionListItem","sessionsFragment","_SessionList_sessions","require","hash","console","error","Title","div","List","p","theme","listItemColorBorder","DestroyAllOtherSessionsButton","OtherSessions","SESSION_LIST_PADDING_VERTICAL","SessionList","sessionsKey","sessions","t","currentSession","find","session","current","otherSessions","filter","sort","a","b","lastSeenAt","commitDestroyAllOtherSessions","loadingDestroyAllOtherSessions","_SessionListDestroyAllOtherSessionsMutation","destroyAllOtherSessions","variables","updater","store","_rootRP$getLinkedReco","rootRP","get","sessionsRP","getLinkedRecords","item","getDataID","id","setLinkedRecords","onError","onCompleted","success","createElement","Fragment","sessionKey","hideLastSeenAt","length","type","danger","size","wide","loading","onClick","map","key"],"sources":["../../../../src/lib/components/session/SessionList.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { Button, message } from '@os-design/core';\nimport { clr } from '@os-design/theming';\nimport graphql from 'babel-plugin-relay/macro';\nimport React, { useCallback, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useFragment, useMutation } from 'react-relay/hooks';\nimport SessionListItem from './SessionListItem';\nimport { SessionListDestroyAllOtherSessionsMutation } from './__generated__/SessionListDestroyAllOtherSessionsMutation.graphql';\nimport { SessionList_sessions$key } from './__generated__/SessionList_sessions.graphql';\n\nconst sessionsFragment = graphql`\n fragment SessionList_sessions on Query\n @refetchable(queryName: \"SessionListRefetchQuery\") {\n sessions {\n id\n current\n lastSeenAt\n ...SessionListItem_session\n }\n }\n`;\n\ninterface SessionListProps {\n sessionsKey: SessionList_sessions$key;\n}\n\nexport const Title = styled.div`\n font-weight: 500;\n margin: 1em 1em 0.5em;\n`;\n\nexport const List = styled.div`\n border-top: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n`;\n\nconst DestroyAllOtherSessionsButton = styled(Button)`\n & > span {\n flex: 1;\n text-align: left;\n }\n`;\n\nconst OtherSessions = styled.div`\n margin-top: 2em;\n`;\n\nexport const SESSION_LIST_PADDING_VERTICAL = 0.5;\n\nconst SessionList: React.FC<SessionListProps> = ({ sessionsKey }) => {\n const { sessions } = useFragment(sessionsFragment, sessionsKey);\n const { t } = useTranslation(['profile']);\n\n const currentSession = useMemo(\n () => sessions.find((session) => session.current),\n [sessions]\n );\n\n const otherSessions = useMemo(\n () =>\n sessions\n .filter((session) => !session.current)\n .sort((a, b) => b.lastSeenAt - a.lastSeenAt),\n [sessions]\n );\n\n const [commitDestroyAllOtherSessions, loadingDestroyAllOtherSessions] =\n useMutation<SessionListDestroyAllOtherSessionsMutation>(graphql`\n mutation SessionListDestroyAllOtherSessionsMutation {\n destroyAllOtherSessions {\n ok\n }\n }\n `);\n\n const destroyAllOtherSessions = useCallback(() => {\n commitDestroyAllOtherSessions({\n variables: {},\n updater: (store) => {\n // Delete all other sessions from the store\n const rootRP = store.get('client:root');\n if (!rootRP) return;\n\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() === currentSession?.id);\n if (!sessionsRP) return;\n\n rootRP.setLinkedRecords(sessionsRP, 'sessions');\n },\n onError: (error) => {\n message.error(error.message);\n },\n onCompleted: () => {\n message.success(t('profile:sessions.destroyedAllOther'));\n },\n });\n }, [commitDestroyAllOtherSessions, currentSession?.id, t]);\n\n return (\n <>\n {currentSession && (\n <>\n <Title>{t('profile:sessions.current')}</Title>\n <List>\n <SessionListItem sessionKey={currentSession} hideLastSeenAt />\n </List>\n </>\n )}\n\n {otherSessions.length > 0 && (\n <>\n <DestroyAllOtherSessionsButton\n type='ghost'\n danger\n size='small'\n wide='always'\n loading={loadingDestroyAllOtherSessions}\n onClick={destroyAllOtherSessions}\n >\n {t('profile:sessions.destroyAllOther')}\n </DestroyAllOtherSessionsButton>\n\n <OtherSessions>\n <Title>\n {t('profile:sessions.other')} ({otherSessions.length})\n </Title>\n <List>\n {otherSessions.map((session) => (\n <SessionListItem key={session.id} sessionKey={session} />\n ))}\n </List>\n </OtherSessions>\n </>\n )}\n </>\n );\n};\n\nexport default SessionList;\n"],"mappings":"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"}
|
|
@@ -183,11 +183,13 @@ const SessionListItem = ({
|
|
|
183
183
|
}
|
|
184
184
|
},
|
|
185
185
|
updater: store => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
if (!
|
|
190
|
-
|
|
186
|
+
var _rootRP$getLinkedReco;
|
|
187
|
+
// Delete the session from the store
|
|
188
|
+
const rootRP = store.get('client:root');
|
|
189
|
+
if (!rootRP) return;
|
|
190
|
+
const sessionsRP = (_rootRP$getLinkedReco = rootRP.getLinkedRecords('sessions')) === null || _rootRP$getLinkedReco === void 0 ? void 0 : _rootRP$getLinkedReco.filter(item => item.getDataID() !== session.id);
|
|
191
|
+
if (!sessionsRP) return;
|
|
192
|
+
rootRP.setLinkedRecords(sessionsRP, 'sessions');
|
|
191
193
|
},
|
|
192
194
|
onError: error => {
|
|
193
195
|
message.error(error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionListItem.js","names":["React","useCallback","useMemo","useFragment","useMutation","styled","useTranslation","pluralForms","Button","message","ellipsisStyles","horizontalPaddingStyles","transitionStyles","clr","isTouchDevice","omitEmotionProps","useSwipe","SignOut","css","getLastSeen","formatDate","UnknownDeviceIcon","BrowserIcon","AppleIcon","AndroidIcon","sessionListItemFragment","_SessionListItem_session","require","hash","console","error","Container","div","p","theme","listItemColorBorder","Info","sizes","small","Content","Title","LastSeen","inputColorPlaceholder","hasSwipeStyles","hasSwipe","openedStyles","opened","Actions","colorBg","slice","listItemActionsPaddingLeft","IconContainer","Icon","borderRadius","bgColor","nameVersionToString","name","version","mergeInfo","args","filter","item","join","SessionListItem","sessionKey","hideLastSeenAt","session","t","i18n","touchDevice","handlers","browser","browserName","browserVersion","os","osName","osVersion","deviceBrandModel","arr","deviceBrand","deviceModel","deviceManufacturer","unshift","title","deviceType","toLowerCase","returnObjects","deviceName","deviceInfo","isApp","ip","location","city","country","lastSeen","lsa","lastSeenAt","language","forms","number","iconComponent","iconColor","createElement","commitDestroySession","loadingDestroySession","_SessionListItemDestroySessionMutation","destroySession","variables","input","id","updater","store","record","get","sessionRecords","getLinkedRecords","setLinkedRecords","getDataID","onError","onCompleted","success","type","wide","size","loading","onClick"],"sources":["../../../../src/lib/components/session/SessionListItem.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport graphql from 'babel-plugin-relay/macro';\nimport { useFragment, useMutation } from 'react-relay/hooks';\nimport styled from '@emotion/styled';\nimport { useTranslation } from 'react-i18next';\nimport pluralForms from '@os-team/plural-forms';\nimport { Button, message } from '@os-design/core';\nimport {\n ellipsisStyles,\n horizontalPaddingStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport { isTouchDevice, omitEmotionProps, useSwipe } from '@os-design/utils';\nimport { SignOut } from '@os-design/icons';\nimport { css } from '@emotion/react';\nimport { SessionListItem_session$key } from './__generated__/SessionListItem_session.graphql';\nimport getLastSeen from './getLastSeen';\nimport formatDate from './formatDate';\nimport { SessionListItemDestroySessionMutation } from './__generated__/SessionListItemDestroySessionMutation.graphql';\nimport UnknownDeviceIcon from '../shared/icons/UnknownDeviceIcon';\nimport BrowserIcon from '../shared/icons/BrowserIcon';\nimport AppleIcon from '../shared/icons/AppleIcon';\nimport AndroidIcon from '../shared/icons/AndroidIcon';\n\nconst sessionListItemFragment = graphql`\n fragment SessionListItem_session on SessionPayload {\n id\n isApp\n browserName\n browserVersion\n osName\n osVersion\n deviceType\n deviceName\n deviceManufacturer\n deviceBrand\n deviceModel\n ip\n country\n city\n lastSeenAt\n }\n`;\n\ninterface SessionListItemProps {\n sessionKey: SessionListItem_session$key;\n hideLastSeenAt?: boolean;\n}\n\nexport const Container = styled.div`\n display: flex;\n position: relative;\n padding: 0.5em 0;\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n @media (hover: hover) {\n // Hide actions by default\n & > nav {\n opacity: 0;\n }\n\n // Display actions either on focus, or on hover\n &:hover,\n &:focus-within {\n & > nav {\n opacity: 1;\n }\n }\n }\n\n ${horizontalPaddingStyles()};\n`;\n\nconst Info = styled.div`\n font-size: ${(p) => p.theme.sizes.small}em;\n ${ellipsisStyles};\n`;\n\nexport const Content = styled.div`\n flex: 1;\n overflow: hidden;\n`;\n\nconst Title = styled(Info)`\n font-weight: 500;\n`;\n\nconst LastSeen = styled(Info)`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n`;\n\nconst hasSwipeStyles = (p) =>\n p.hasSwipe &&\n css`\n transform: translateX(100%);\n ${transitionStyles('transform')(p)};\n `;\n\nconst openedStyles = (p) =>\n p.opened &&\n css`\n transform: translateX(0);\n `;\n\ninterface ActionsProps {\n hasSwipe: boolean;\n opened: boolean;\n}\nconst Actions = styled(\n 'nav',\n omitEmotionProps('hasSwipe', 'opened')\n)<ActionsProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n\n display: flex;\n align-items: center;\n\n background: linear-gradient(\n to right,\n ${(p) => clr([...p.theme.colorBg.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.colorBg)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n\n ${hasSwipeStyles};\n ${openedStyles};\n ${horizontalPaddingStyles('right')};\n`;\n\nexport const IconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 0.6em;\n`;\n\ninterface IconProps {\n bgColor: string;\n}\nexport const Icon = styled('div', omitEmotionProps('bgColor'))<IconProps>`\n font-size: 1.4em;\n width: 1.3em;\n height: 1.3em;\n\n svg {\n height: 1.3em;\n }\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n background-color: ${(p) => p.bgColor};\n color: hsl(0, 0%, 100%);\n`;\n\nconst nameVersionToString = (\n name: string | null,\n version: string | null\n): string | null => {\n if (!name) return null;\n return `${name}${version ? ` ${version}` : ''}`;\n};\n\nconst mergeInfo = (...args: Array<string | null>): string | null =>\n args.filter((item) => item !== null).join(', ') || null;\n\nconst SessionListItem: React.FC<SessionListItemProps> = ({\n sessionKey,\n hideLastSeenAt,\n}) => {\n const session = useFragment(sessionListItemFragment, sessionKey);\n const { t, i18n } = useTranslation(['profile']);\n const touchDevice = useMemo(() => isTouchDevice(), []);\n const { opened, handlers } = useSwipe();\n\n const browser = useMemo(\n () => nameVersionToString(session.browserName, session.browserVersion),\n [session.browserName, session.browserVersion]\n );\n\n const os = useMemo(\n () => nameVersionToString(session.osName, session.osVersion),\n [session.osName, session.osVersion]\n );\n\n const deviceBrandModel = useMemo(() => {\n const arr = [session.deviceBrand, session.deviceModel];\n // Include the manufacturer name only if it does not equal to the brand name.\n // For example, it allows to avoid \"Apple Apple iPhone 6\".\n if (session.deviceManufacturer !== session.deviceBrand) {\n arr.unshift(session.deviceManufacturer);\n }\n return arr.filter((item) => item !== null).join(' ') || null;\n }, [session.deviceBrand, session.deviceManufacturer, session.deviceModel]);\n\n const title = useMemo(() => {\n let deviceType = (session.deviceType || 'unknown').toLowerCase();\n if (browser) deviceType = 'browser';\n return `${\n t('profile:sessions.deviceType', { returnObjects: true })[deviceType]\n }${session.deviceName ? ` ${session.deviceName}` : ''}`;\n }, [browser, session.deviceName, session.deviceType, t]);\n\n const deviceInfo = useMemo(\n () =>\n session.isApp ? mergeInfo(deviceBrandModel, os) : mergeInfo(browser, os),\n [browser, deviceBrandModel, os, session.isApp]\n );\n\n const ip = useMemo(() => {\n if (!session.ip) return null;\n const location = mergeInfo(session.city, session.country);\n return `${session.ip}${location ? ` (${location})` : ''}`;\n }, [session.city, session.country, session.ip]);\n\n const lastSeen = useMemo(() => {\n const lsa = getLastSeen(session.lastSeenAt);\n if (!lsa) {\n return `${t('profile:sessions.lastSeenOn')} ${formatDate(\n session.lastSeenAt,\n t,\n i18n.language\n )}`;\n }\n return `${t('profile:sessions.lastSeen')} ${lsa[0]} ${pluralForms({\n language: i18n.language,\n forms: t(`profile:sessions.${lsa[1]}`, { returnObjects: true }),\n number: lsa[0],\n })} ${t('profile:sessions.ago')}`;\n }, [i18n.language, session.lastSeenAt, t]);\n\n const [iconComponent, iconColor] = useMemo(() => {\n if (browser) return [<BrowserIcon />, 'hsl(30, 60%, 50%)'];\n if (session.isApp) {\n if (session.osName === 'iOS' || session.osName === 'iPhone OS') {\n return [<AppleIcon />, 'hsl(0, 0%, 50%)'];\n }\n if (session.osName === 'Android')\n return [<AndroidIcon />, 'hsl(150, 60%, 50%)'];\n }\n return [<UnknownDeviceIcon />, 'hsl(5, 60%, 50%)'];\n }, [browser, session.isApp, session.osName]);\n\n const [commitDestroySession, loadingDestroySession] =\n useMutation<SessionListItemDestroySessionMutation>(graphql`\n mutation SessionListItemDestroySessionMutation(\n $input: DestroySessionInput!\n ) {\n destroySession(input: $input) {\n ok\n }\n }\n `);\n\n const destroySession = useCallback(() => {\n commitDestroySession({\n variables: {\n input: {\n id: session.id,\n },\n },\n updater: (store) => {\n const record = store.get('client:root');\n if (!record) return;\n\n const sessionRecords = record.getLinkedRecords('sessions');\n if (!sessionRecords) return;\n\n record.setLinkedRecords(\n sessionRecords.filter((item) => item.getDataID() !== session.id),\n 'sessions'\n );\n },\n onError: (error) => {\n message.error(error.message);\n },\n onCompleted: () => {\n message.success(t('profile:sessions.destroyed'));\n },\n });\n }, [commitDestroySession, session.id, t]);\n\n return (\n <Container {...handlers}>\n <IconContainer>\n <Icon bgColor={iconColor}>{iconComponent}</Icon>\n </IconContainer>\n\n <Content>\n <Title>{title}</Title>\n {deviceInfo && <Info>{deviceInfo}</Info>}\n {ip && <Info>{ip}</Info>}\n {!hideLastSeenAt && <LastSeen>{lastSeen}</LastSeen>}\n </Content>\n\n <Actions hasSwipe={touchDevice} opened={opened}>\n <Button\n type='ghost'\n wide='never'\n size='small'\n loading={loadingDestroySession}\n onClick={destroySession}\n >\n <SignOut />\n </Button>\n </Actions>\n </Container>\n );\n};\n\nexport default SessionListItem;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionListItem.js","names":["React","useCallback","useMemo","useFragment","useMutation","styled","useTranslation","pluralForms","Button","message","ellipsisStyles","horizontalPaddingStyles","transitionStyles","clr","isTouchDevice","omitEmotionProps","useSwipe","SignOut","css","getLastSeen","formatDate","UnknownDeviceIcon","BrowserIcon","AppleIcon","AndroidIcon","sessionListItemFragment","_SessionListItem_session","require","hash","console","error","Container","div","p","theme","listItemColorBorder","Info","sizes","small","Content","Title","LastSeen","inputColorPlaceholder","hasSwipeStyles","hasSwipe","openedStyles","opened","Actions","colorBg","slice","listItemActionsPaddingLeft","IconContainer","Icon","borderRadius","bgColor","nameVersionToString","name","version","mergeInfo","args","filter","item","join","SessionListItem","sessionKey","hideLastSeenAt","session","t","i18n","touchDevice","handlers","browser","browserName","browserVersion","os","osName","osVersion","deviceBrandModel","arr","deviceBrand","deviceModel","deviceManufacturer","unshift","title","deviceType","toLowerCase","returnObjects","deviceName","deviceInfo","isApp","ip","location","city","country","lastSeen","lsa","lastSeenAt","language","forms","number","iconComponent","iconColor","createElement","commitDestroySession","loadingDestroySession","_SessionListItemDestroySessionMutation","destroySession","variables","input","id","updater","store","_rootRP$getLinkedReco","rootRP","get","sessionsRP","getLinkedRecords","getDataID","setLinkedRecords","onError","onCompleted","success","type","wide","size","loading","onClick"],"sources":["../../../../src/lib/components/session/SessionListItem.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport graphql from 'babel-plugin-relay/macro';\nimport { useFragment, useMutation } from 'react-relay/hooks';\nimport styled from '@emotion/styled';\nimport { useTranslation } from 'react-i18next';\nimport pluralForms from '@os-team/plural-forms';\nimport { Button, message } from '@os-design/core';\nimport {\n ellipsisStyles,\n horizontalPaddingStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport { isTouchDevice, omitEmotionProps, useSwipe } from '@os-design/utils';\nimport { SignOut } from '@os-design/icons';\nimport { css } from '@emotion/react';\nimport { SessionListItem_session$key } from './__generated__/SessionListItem_session.graphql';\nimport getLastSeen from './getLastSeen';\nimport formatDate from './formatDate';\nimport { SessionListItemDestroySessionMutation } from './__generated__/SessionListItemDestroySessionMutation.graphql';\nimport UnknownDeviceIcon from '../shared/icons/UnknownDeviceIcon';\nimport BrowserIcon from '../shared/icons/BrowserIcon';\nimport AppleIcon from '../shared/icons/AppleIcon';\nimport AndroidIcon from '../shared/icons/AndroidIcon';\n\nconst sessionListItemFragment = graphql`\n fragment SessionListItem_session on SessionPayload {\n id\n isApp\n browserName\n browserVersion\n osName\n osVersion\n deviceType\n deviceName\n deviceManufacturer\n deviceBrand\n deviceModel\n ip\n country\n city\n lastSeenAt\n }\n`;\n\ninterface SessionListItemProps {\n sessionKey: SessionListItem_session$key;\n hideLastSeenAt?: boolean;\n}\n\nexport const Container = styled.div`\n display: flex;\n position: relative;\n padding: 0.5em 0;\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n @media (hover: hover) {\n // Hide actions by default\n & > nav {\n opacity: 0;\n }\n\n // Display actions either on focus, or on hover\n &:hover,\n &:focus-within {\n & > nav {\n opacity: 1;\n }\n }\n }\n\n ${horizontalPaddingStyles()};\n`;\n\nconst Info = styled.div`\n font-size: ${(p) => p.theme.sizes.small}em;\n ${ellipsisStyles};\n`;\n\nexport const Content = styled.div`\n flex: 1;\n overflow: hidden;\n`;\n\nconst Title = styled(Info)`\n font-weight: 500;\n`;\n\nconst LastSeen = styled(Info)`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n`;\n\nconst hasSwipeStyles = (p) =>\n p.hasSwipe &&\n css`\n transform: translateX(100%);\n ${transitionStyles('transform')(p)};\n `;\n\nconst openedStyles = (p) =>\n p.opened &&\n css`\n transform: translateX(0);\n `;\n\ninterface ActionsProps {\n hasSwipe: boolean;\n opened: boolean;\n}\nconst Actions = styled(\n 'nav',\n omitEmotionProps('hasSwipe', 'opened')\n)<ActionsProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n\n display: flex;\n align-items: center;\n\n background: linear-gradient(\n to right,\n ${(p) => clr([...p.theme.colorBg.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.colorBg)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n\n ${hasSwipeStyles};\n ${openedStyles};\n ${horizontalPaddingStyles('right')};\n`;\n\nexport const IconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 0.6em;\n`;\n\ninterface IconProps {\n bgColor: string;\n}\nexport const Icon = styled('div', omitEmotionProps('bgColor'))<IconProps>`\n font-size: 1.4em;\n width: 1.3em;\n height: 1.3em;\n\n svg {\n height: 1.3em;\n }\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n background-color: ${(p) => p.bgColor};\n color: hsl(0, 0%, 100%);\n`;\n\nconst nameVersionToString = (\n name: string | null,\n version: string | null\n): string | null => {\n if (!name) return null;\n return `${name}${version ? ` ${version}` : ''}`;\n};\n\nconst mergeInfo = (...args: Array<string | null>): string | null =>\n args.filter((item) => item !== null).join(', ') || null;\n\nconst SessionListItem: React.FC<SessionListItemProps> = ({\n sessionKey,\n hideLastSeenAt,\n}) => {\n const session = useFragment(sessionListItemFragment, sessionKey);\n const { t, i18n } = useTranslation(['profile']);\n const touchDevice = useMemo(() => isTouchDevice(), []);\n const { opened, handlers } = useSwipe();\n\n const browser = useMemo(\n () => nameVersionToString(session.browserName, session.browserVersion),\n [session.browserName, session.browserVersion]\n );\n\n const os = useMemo(\n () => nameVersionToString(session.osName, session.osVersion),\n [session.osName, session.osVersion]\n );\n\n const deviceBrandModel = useMemo(() => {\n const arr = [session.deviceBrand, session.deviceModel];\n // Include the manufacturer name only if it does not equal to the brand name.\n // For example, it allows to avoid \"Apple Apple iPhone 6\".\n if (session.deviceManufacturer !== session.deviceBrand) {\n arr.unshift(session.deviceManufacturer);\n }\n return arr.filter((item) => item !== null).join(' ') || null;\n }, [session.deviceBrand, session.deviceManufacturer, session.deviceModel]);\n\n const title = useMemo(() => {\n let deviceType = (session.deviceType || 'unknown').toLowerCase();\n if (browser) deviceType = 'browser';\n return `${\n t('profile:sessions.deviceType', { returnObjects: true })[deviceType]\n }${session.deviceName ? ` ${session.deviceName}` : ''}`;\n }, [browser, session.deviceName, session.deviceType, t]);\n\n const deviceInfo = useMemo(\n () =>\n session.isApp ? mergeInfo(deviceBrandModel, os) : mergeInfo(browser, os),\n [browser, deviceBrandModel, os, session.isApp]\n );\n\n const ip = useMemo(() => {\n if (!session.ip) return null;\n const location = mergeInfo(session.city, session.country);\n return `${session.ip}${location ? ` (${location})` : ''}`;\n }, [session.city, session.country, session.ip]);\n\n const lastSeen = useMemo(() => {\n const lsa = getLastSeen(session.lastSeenAt);\n if (!lsa) {\n return `${t('profile:sessions.lastSeenOn')} ${formatDate(\n session.lastSeenAt,\n t,\n i18n.language\n )}`;\n }\n return `${t('profile:sessions.lastSeen')} ${lsa[0]} ${pluralForms({\n language: i18n.language,\n forms: t(`profile:sessions.${lsa[1]}`, { returnObjects: true }),\n number: lsa[0],\n })} ${t('profile:sessions.ago')}`;\n }, [i18n.language, session.lastSeenAt, t]);\n\n const [iconComponent, iconColor] = useMemo(() => {\n if (browser) return [<BrowserIcon />, 'hsl(30, 60%, 50%)'];\n if (session.isApp) {\n if (session.osName === 'iOS' || session.osName === 'iPhone OS') {\n return [<AppleIcon />, 'hsl(0, 0%, 50%)'];\n }\n if (session.osName === 'Android')\n return [<AndroidIcon />, 'hsl(150, 60%, 50%)'];\n }\n return [<UnknownDeviceIcon />, 'hsl(5, 60%, 50%)'];\n }, [browser, session.isApp, session.osName]);\n\n const [commitDestroySession, loadingDestroySession] =\n useMutation<SessionListItemDestroySessionMutation>(graphql`\n mutation SessionListItemDestroySessionMutation(\n $input: DestroySessionInput!\n ) {\n destroySession(input: $input) {\n ok\n }\n }\n `);\n\n const destroySession = useCallback(() => {\n commitDestroySession({\n variables: {\n input: {\n id: session.id,\n },\n },\n updater: (store) => {\n // Delete the session from the store\n const rootRP = store.get('client:root');\n if (!rootRP) return;\n\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() !== session.id);\n if (!sessionsRP) return;\n\n rootRP.setLinkedRecords(sessionsRP, 'sessions');\n },\n onError: (error) => {\n message.error(error.message);\n },\n onCompleted: () => {\n message.success(t('profile:sessions.destroyed'));\n },\n });\n }, [commitDestroySession, session.id, t]);\n\n return (\n <Container {...handlers}>\n <IconContainer>\n <Icon bgColor={iconColor}>{iconComponent}</Icon>\n </IconContainer>\n\n <Content>\n <Title>{title}</Title>\n {deviceInfo && <Info>{deviceInfo}</Info>}\n {ip && <Info>{ip}</Info>}\n {!hideLastSeenAt && <LastSeen>{lastSeen}</LastSeen>}\n </Content>\n\n <Actions hasSwipe={touchDevice} opened={opened}>\n <Button\n type='ghost'\n wide='never'\n size='small'\n loading={loadingDestroySession}\n onClick={destroySession}\n >\n <SignOut />\n </Button>\n </Actions>\n </Container>\n );\n};\n\nexport default SessionListItem;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAEnD,SAASC,WAAW,EAAEC,WAAW,QAAQ,mBAAmB;AAC5D,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,cAAc,QAAQ,eAAe;AAC9C,OAAOC,WAAW,MAAM,uBAAuB;AAC/C,SAASC,MAAM,EAAEC,OAAO,QAAQ,iBAAiB;AACjD,SACEC,cAAc,EACdC,uBAAuB,EACvBC,gBAAgB,QACX,mBAAmB;AAC1B,SAASC,GAAG,QAAe,oBAAoB;AAC/C,SAASC,aAAa,EAAEC,gBAAgB,EAAEC,QAAQ,QAAQ,kBAAkB;AAC5E,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,GAAG,QAAQ,gBAAgB;AAEpC,OAAOC,WAAW,MAAM,eAAe;AACvC,OAAOC,UAAU,MAAM,cAAc;AAErC,OAAOC,iBAAiB,MAAM,mCAAmC;AACjE,OAAOC,WAAW,MAAM,6BAA6B;AACrD,OAAOC,SAAS,MAAM,2BAA2B;AACjD,OAAOC,WAAW,MAAM,6BAA6B;AAErD,MAAMC,uBAAuB,GAAAC,wBAAA,cAAAA,wBAAA,IAAAA,wBAAA,GAAAC,OAAA,qDAAAD,wBAAA,CAAAE,IAAA,IAAAF,wBAAA,CAAAE,IAAA,2CAAAC,OAAA,CAAAC,KAAA,2JAAAJ,wBAAA,CAkB5B;AAOD,OAAO,MAAMK,SAAS,GAAG1B,MAAM,CAAC2B,GAAI;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,+BAAgCC,CAAC,IAAKpB,GAAG,CAACoB,CAAC,CAACC,KAAK,CAACC,mBAAmB,CAAE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIxB,uBAAuB,CAAC,CAAE;AAC9B,CAAC;AAED,MAAMyB,IAAI,GAAG/B,MAAM,CAAC2B,GAAI;AACxB,eAAgBC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACG,KAAK,CAACC,KAAM;AAC1C,IAAI5B,cAAe;AACnB,CAAC;AAED,OAAO,MAAM6B,OAAO,GAAGlC,MAAM,CAAC2B,GAAI;AAClC;AACA;AACA,CAAC;AAED,MAAMQ,KAAK,GAAGnC,MAAM,CAAC+B,IAAI,CAAE;AAC3B;AACA,CAAC;AAED,MAAMK,QAAQ,GAAGpC,MAAM,CAAC+B,IAAI,CAAE;AAC9B,WAAYH,CAAC,IAAKpB,GAAG,CAACoB,CAAC,CAACC,KAAK,CAACQ,qBAAqB,CAAE;AACrD,CAAC;AAED,MAAMC,cAAc,GAAIV,CAAC,IACvBA,CAAC,CAACW,QAAQ,IACV1B,GAAI;AACN;AACA,MAAMN,gBAAgB,CAAC,WAAW,CAAC,CAACqB,CAAC,CAAE;AACvC,GAAG;AAEH,MAAMY,YAAY,GAAIZ,CAAC,IACrBA,CAAC,CAACa,MAAM,IACR5B,GAAI;AACN;AACA,GAAG;AAMH,MAAM6B,OAAO,GAAG1C,MAAM,CACpB,KAAK,EACLU,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CACvC,CAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAOkB,CAAC,IAAKpB,GAAG,CAAC,CAAC,GAAGoB,CAAC,CAACC,KAAK,CAACc,OAAO,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAU,CAAE;AAC/D,MAAOhB,CAAC,IAAKpB,GAAG,CAACoB,CAAC,CAACC,KAAK,CAACc,OAAO,CAAE;AAClC,QAASf,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACgB,0BAA2B;AAClD;AACA;AACA,IAAIP,cAAe;AACnB,IAAIE,YAAa;AACjB,IAAIlC,uBAAuB,CAAC,OAAO,CAAE;AACrC,CAAC;AAED,OAAO,MAAMwC,aAAa,GAAG9C,MAAM,CAAC2B,GAAI;AACxC;AACA;AACA;AACA;AACA,CAAC;AAKD,OAAO,MAAMoB,IAAI,GAAG/C,MAAM,CAAC,KAAK,EAAEU,gBAAgB,CAAC,SAAS,CAAC,CAAa;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAoBkB,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACmB,YAAa;AAC/C,sBAAuBpB,CAAC,IAAKA,CAAC,CAACqB,OAAQ;AACvC;AACA,CAAC;AAED,MAAMC,mBAAmB,GAAGA,CAC1BC,IAAmB,EACnBC,OAAsB,KACJ;EAClB,IAAI,CAACD,IAAI,EAAE,OAAO,IAAI;EACtB,OAAQ,GAAEA,IAAK,GAAEC,OAAO,GAAI,IAAGA,OAAQ,EAAC,GAAG,EAAG,EAAC;AACjD,CAAC;AAED,MAAMC,SAAS,GAAGA,CAAC,GAAGC,IAA0B,KAC9CA,IAAI,CAACC,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,IAAI,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;AAEzD,MAAMC,eAA+C,GAAGA,CAAC;EACvDC,UAAU;EACVC;AACF,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAG/D,WAAW,CAACsB,uBAAuB,EAAEuC,UAAU,CAAC;EAChE,MAAM;IAAEG,CAAC;IAAEC;EAAK,CAAC,GAAG9D,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;EAC/C,MAAM+D,WAAW,GAAGnE,OAAO,CAAC,MAAMY,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;EACtD,MAAM;IAAEgC,MAAM;IAAEwB;EAAS,CAAC,GAAGtD,QAAQ,CAAC,CAAC;EAEvC,MAAMuD,OAAO,GAAGrE,OAAO,CACrB,MAAMqD,mBAAmB,CAACW,OAAO,CAACM,WAAW,EAAEN,OAAO,CAACO,cAAc,CAAC,EACtE,CAACP,OAAO,CAACM,WAAW,EAAEN,OAAO,CAACO,cAAc,CAC9C,CAAC;EAED,MAAMC,EAAE,GAAGxE,OAAO,CAChB,MAAMqD,mBAAmB,CAACW,OAAO,CAACS,MAAM,EAAET,OAAO,CAACU,SAAS,CAAC,EAC5D,CAACV,OAAO,CAACS,MAAM,EAAET,OAAO,CAACU,SAAS,CACpC,CAAC;EAED,MAAMC,gBAAgB,GAAG3E,OAAO,CAAC,MAAM;IACrC,MAAM4E,GAAG,GAAG,CAACZ,OAAO,CAACa,WAAW,EAAEb,OAAO,CAACc,WAAW,CAAC;IACtD;IACA;IACA,IAAId,OAAO,CAACe,kBAAkB,KAAKf,OAAO,CAACa,WAAW,EAAE;MACtDD,GAAG,CAACI,OAAO,CAAChB,OAAO,CAACe,kBAAkB,CAAC;IACzC;IACA,OAAOH,GAAG,CAAClB,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,IAAI,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;EAC9D,CAAC,EAAE,CAACI,OAAO,CAACa,WAAW,EAAEb,OAAO,CAACe,kBAAkB,EAAEf,OAAO,CAACc,WAAW,CAAC,CAAC;EAE1E,MAAMG,KAAK,GAAGjF,OAAO,CAAC,MAAM;IAC1B,IAAIkF,UAAU,GAAG,CAAClB,OAAO,CAACkB,UAAU,IAAI,SAAS,EAAEC,WAAW,CAAC,CAAC;IAChE,IAAId,OAAO,EAAEa,UAAU,GAAG,SAAS;IACnC,OAAQ,GACNjB,CAAC,CAAC,6BAA6B,EAAE;MAAEmB,aAAa,EAAE;IAAK,CAAC,CAAC,CAACF,UAAU,CACrE,GAAElB,OAAO,CAACqB,UAAU,GAAI,IAAGrB,OAAO,CAACqB,UAAW,EAAC,GAAG,EAAG,EAAC;EACzD,CAAC,EAAE,CAAChB,OAAO,EAAEL,OAAO,CAACqB,UAAU,EAAErB,OAAO,CAACkB,UAAU,EAAEjB,CAAC,CAAC,CAAC;EAExD,MAAMqB,UAAU,GAAGtF,OAAO,CACxB,MACEgE,OAAO,CAACuB,KAAK,GAAG/B,SAAS,CAACmB,gBAAgB,EAAEH,EAAE,CAAC,GAAGhB,SAAS,CAACa,OAAO,EAAEG,EAAE,CAAC,EAC1E,CAACH,OAAO,EAAEM,gBAAgB,EAAEH,EAAE,EAAER,OAAO,CAACuB,KAAK,CAC/C,CAAC;EAED,MAAMC,EAAE,GAAGxF,OAAO,CAAC,MAAM;IACvB,IAAI,CAACgE,OAAO,CAACwB,EAAE,EAAE,OAAO,IAAI;IAC5B,MAAMC,QAAQ,GAAGjC,SAAS,CAACQ,OAAO,CAAC0B,IAAI,EAAE1B,OAAO,CAAC2B,OAAO,CAAC;IACzD,OAAQ,GAAE3B,OAAO,CAACwB,EAAG,GAAEC,QAAQ,GAAI,KAAIA,QAAS,GAAE,GAAG,EAAG,EAAC;EAC3D,CAAC,EAAE,CAACzB,OAAO,CAAC0B,IAAI,EAAE1B,OAAO,CAAC2B,OAAO,EAAE3B,OAAO,CAACwB,EAAE,CAAC,CAAC;EAE/C,MAAMI,QAAQ,GAAG5F,OAAO,CAAC,MAAM;IAC7B,MAAM6F,GAAG,GAAG5E,WAAW,CAAC+C,OAAO,CAAC8B,UAAU,CAAC;IAC3C,IAAI,CAACD,GAAG,EAAE;MACR,OAAQ,GAAE5B,CAAC,CAAC,6BAA6B,CAAE,IAAG/C,UAAU,CACtD8C,OAAO,CAAC8B,UAAU,EAClB7B,CAAC,EACDC,IAAI,CAAC6B,QACP,CAAE,EAAC;IACL;IACA,OAAQ,GAAE9B,CAAC,CAAC,2BAA2B,CAAE,IAAG4B,GAAG,CAAC,CAAC,CAAE,IAAGxF,WAAW,CAAC;MAChE0F,QAAQ,EAAE7B,IAAI,CAAC6B,QAAQ;MACvBC,KAAK,EAAE/B,CAAC,CAAE,oBAAmB4B,GAAG,CAAC,CAAC,CAAE,EAAC,EAAE;QAAET,aAAa,EAAE;MAAK,CAAC,CAAC;MAC/Da,MAAM,EAAEJ,GAAG,CAAC,CAAC;IACf,CAAC,CAAE,IAAG5B,CAAC,CAAC,sBAAsB,CAAE,EAAC;EACnC,CAAC,EAAE,CAACC,IAAI,CAAC6B,QAAQ,EAAE/B,OAAO,CAAC8B,UAAU,EAAE7B,CAAC,CAAC,CAAC;EAE1C,MAAM,CAACiC,aAAa,EAAEC,SAAS,CAAC,GAAGnG,OAAO,CAAC,MAAM;IAC/C,IAAIqE,OAAO,EAAE,OAAO,cAACvE,KAAA,CAAAsG,aAAA,CAAChF,WAAW,MAAE,CAAC,EAAE,mBAAmB,CAAC;IAC1D,IAAI4C,OAAO,CAACuB,KAAK,EAAE;MACjB,IAAIvB,OAAO,CAACS,MAAM,KAAK,KAAK,IAAIT,OAAO,CAACS,MAAM,KAAK,WAAW,EAAE;QAC9D,OAAO,cAAC3E,KAAA,CAAAsG,aAAA,CAAC/E,SAAS,MAAE,CAAC,EAAE,iBAAiB,CAAC;MAC3C;MACA,IAAI2C,OAAO,CAACS,MAAM,KAAK,SAAS,EAC9B,OAAO,cAAC3E,KAAA,CAAAsG,aAAA,CAAC9E,WAAW,MAAE,CAAC,EAAE,oBAAoB,CAAC;IAClD;IACA,OAAO,cAACxB,KAAA,CAAAsG,aAAA,CAACjF,iBAAiB,MAAE,CAAC,EAAE,kBAAkB,CAAC;EACpD,CAAC,EAAE,CAACkD,OAAO,EAAEL,OAAO,CAACuB,KAAK,EAAEvB,OAAO,CAACS,MAAM,CAAC,CAAC;EAE5C,MAAM,CAAC4B,oBAAoB,EAAEC,qBAAqB,CAAC,GACjDpG,WAAW,CAAAqG,sCAAA,cAAAA,sCAAA,IAAAA,sCAAA,GAAA9E,OAAA,mEAAA8E,sCAAA,CAAA7E,IAAA,IAAA6E,sCAAA,CAAA7E,IAAA,2CAAAC,OAAA,CAAAC,KAAA,yKAAA2E,sCAAA,CAQV,CAAC;EAEJ,MAAMC,cAAc,GAAGzG,WAAW,CAAC,MAAM;IACvCsG,oBAAoB,CAAC;MACnBI,SAAS,EAAE;QACTC,KAAK,EAAE;UACLC,EAAE,EAAE3C,OAAO,CAAC2C;QACd;MACF,CAAC;MACDC,OAAO,EAAGC,KAAK,IAAK;QAAA,IAAAC,qBAAA;QAClB;QACA,MAAMC,MAAM,GAAGF,KAAK,CAACG,GAAG,CAAC,aAAa,CAAC;QACvC,IAAI,CAACD,MAAM,EAAE;QAEb,MAAME,UAAU,IAAAH,qBAAA,GAAGC,MAAM,CACtBG,gBAAgB,CAAC,UAAU,CAAC,cAAAJ,qBAAA,uBADZA,qBAAA,CAEfpD,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACwD,SAAS,CAAC,CAAC,KAAKnD,OAAO,CAAC2C,EAAE,CAAC;QACrD,IAAI,CAACM,UAAU,EAAE;QAEjBF,MAAM,CAACK,gBAAgB,CAACH,UAAU,EAAE,UAAU,CAAC;MACjD,CAAC;MACDI,OAAO,EAAGzF,KAAK,IAAK;QAClBrB,OAAO,CAACqB,KAAK,CAACA,KAAK,CAACrB,OAAO,CAAC;MAC9B,CAAC;MACD+G,WAAW,EAAEA,CAAA,KAAM;QACjB/G,OAAO,CAACgH,OAAO,CAACtD,CAAC,CAAC,4BAA4B,CAAC,CAAC;MAClD;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACoC,oBAAoB,EAAErC,OAAO,CAAC2C,EAAE,EAAE1C,CAAC,CAAC,CAAC;EAEzC,oBACEnE,KAAA,CAAAsG,aAAA,CAACvE,SAAS,EAAKuC,QAAQ,eACrBtE,KAAA,CAAAsG,aAAA,CAACnD,aAAa,qBACZnD,KAAA,CAAAsG,aAAA,CAAClD,IAAI;IAACE,OAAO,EAAE+C;EAAU,GAAED,aAAoB,CAClC,CAAC,eAEhBpG,KAAA,CAAAsG,aAAA,CAAC/D,OAAO,qBACNvC,KAAA,CAAAsG,aAAA,CAAC9D,KAAK,QAAE2C,KAAa,CAAC,EACrBK,UAAU,iBAAIxF,KAAA,CAAAsG,aAAA,CAAClE,IAAI,QAAEoD,UAAiB,CAAC,EACvCE,EAAE,iBAAI1F,KAAA,CAAAsG,aAAA,CAAClE,IAAI,QAAEsD,EAAS,CAAC,EACvB,CAACzB,cAAc,iBAAIjE,KAAA,CAAAsG,aAAA,CAAC7D,QAAQ,QAAEqD,QAAmB,CAC3C,CAAC,eAEV9F,KAAA,CAAAsG,aAAA,CAACvD,OAAO;IAACH,QAAQ,EAAEyB,WAAY;IAACvB,MAAM,EAAEA;EAAO,gBAC7C9C,KAAA,CAAAsG,aAAA,CAAC9F,MAAM;IACLkH,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,OAAO;IACZC,OAAO,EAAErB,qBAAsB;IAC/BsB,OAAO,EAAEpB;EAAe,gBAExB1G,KAAA,CAAAsG,aAAA,CAACrF,OAAO,MAAE,CACJ,CACD,CACA,CAAC;AAEhB,CAAC;AAED,eAAe8C,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionListItem_session.graphql.js","names":["node","hash"],"sources":["../../../../../src/lib/components/session/__generated__/SessionListItem_session.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<
|
|
1
|
+
{"version":3,"file":"SessionListItem_session.graphql.js","names":["node","hash"],"sources":["../../../../../src/lib/components/session/__generated__/SessionListItem_session.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<00945380398e427b39bebc7dd8120f89>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { Fragment, ReaderFragment } from 'relay-runtime';\nimport { FragmentRefs } from \"relay-runtime\";\nexport type SessionListItem_session$data = {\n readonly browserName: string | null;\n readonly browserVersion: string | null;\n readonly city: string | null;\n readonly country: string | null;\n readonly deviceBrand: string | null;\n readonly deviceManufacturer: string | null;\n readonly deviceModel: string | null;\n readonly deviceName: string | null;\n readonly deviceType: string | null;\n readonly id: string;\n readonly ip: string | null;\n readonly isApp: boolean;\n readonly lastSeenAt: number;\n readonly osName: string | null;\n readonly osVersion: string | null;\n readonly \" $fragmentType\": \"SessionListItem_session\";\n};\nexport type SessionListItem_session$key = {\n readonly \" $data\"?: SessionListItem_session$data;\n readonly \" $fragmentSpreads\": FragmentRefs<\"SessionListItem_session\">;\n};\n\nconst node: ReaderFragment = {\n \"argumentDefinitions\": [],\n \"kind\": \"Fragment\",\n \"metadata\": null,\n \"name\": \"SessionListItem_session\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"id\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"isApp\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"browserName\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"browserVersion\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"osName\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"osVersion\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"deviceType\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"deviceName\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"deviceManufacturer\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"deviceBrand\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"deviceModel\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"ip\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"country\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"city\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"lastSeenAt\",\n \"storageKey\": null\n }\n ],\n \"type\": \"SessionPayload\",\n \"abstractKey\": null\n};\n\n(node as any).hash = \"c73c341c5f6e75f7bef7402186ce242b\";\n\nexport default node;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AA2BA,MAAMA,IAAoB,GAAG;EAC3B,qBAAqB,EAAE,EAAE;EACzB,MAAM,EAAE,UAAU;EAClB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,yBAAyB;EACjC,YAAY,EAAE,CACZ;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,OAAO;IACf,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,WAAW;IACnB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,YAAY;IACpB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,YAAY;IACpB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,oBAAoB;IAC5B,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,MAAM;IACd,YAAY,EAAE;EAChB,CAAC,EACD;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,YAAY;IACpB,YAAY,EAAE;EAChB,CAAC,CACF;EACD,MAAM,EAAE,gBAAgB;EACxB,aAAa,EAAE;AACjB,CAAC;AAEAA,IAAI,CAASC,IAAI,GAAG,kCAAkC;AAEvD,eAAeD,IAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList_sessions.graphql.js","names":["node","require","hash"],"sources":["../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<
|
|
1
|
+
{"version":3,"file":"SessionList_sessions.graphql.js","names":["node","require","hash"],"sources":["../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"sourcesContent":["/**\n * @generated SignedSource<<7ff1074cf5727e185eacb4fdbc52caa4>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ReaderFragment, RefetchableFragment } from 'relay-runtime';\nimport { FragmentRefs } from \"relay-runtime\";\nexport type SessionList_sessions$data = {\n readonly sessions: ReadonlyArray<{\n readonly current: boolean;\n readonly id: string;\n readonly lastSeenAt: number;\n readonly \" $fragmentSpreads\": FragmentRefs<\"SessionListItem_session\">;\n }>;\n readonly \" $fragmentType\": \"SessionList_sessions\";\n};\nexport type SessionList_sessions$key = {\n readonly \" $data\"?: SessionList_sessions$data;\n readonly \" $fragmentSpreads\": FragmentRefs<\"SessionList_sessions\">;\n};\n\nconst node: ReaderFragment = {\n \"argumentDefinitions\": [],\n \"kind\": \"Fragment\",\n \"metadata\": {\n \"refetch\": {\n \"connection\": null,\n \"fragmentPathInResult\": [],\n \"operation\": require('./SessionListRefetchQuery.graphql')\n }\n },\n \"name\": \"SessionList_sessions\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"SessionPayload\",\n \"kind\": \"LinkedField\",\n \"name\": \"sessions\",\n \"plural\": true,\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"id\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"current\",\n \"storageKey\": null\n },\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"lastSeenAt\",\n \"storageKey\": null\n },\n {\n \"args\": null,\n \"kind\": \"FragmentSpread\",\n \"name\": \"SessionListItem_session\"\n }\n ],\n \"storageKey\": null\n }\n ],\n \"type\": \"Query\",\n \"abstractKey\": null\n};\n\n(node as any).hash = \"1b21c937c7ba795f09bfcb5ada7d2510\";\n\nexport default node;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAkBA,MAAMA,IAAoB,GAAG;EAC3B,qBAAqB,EAAE,EAAE;EACzB,MAAM,EAAE,UAAU;EAClB,UAAU,EAAE;IACV,SAAS,EAAE;MACT,YAAY,EAAE,IAAI;MAClB,sBAAsB,EAAE,EAAE;MAC1B,WAAW,EAAEC,OAAO,CAAC,mCAAmC;IAC1D;EACF,CAAC;EACD,MAAM,EAAE,sBAAsB;EAC9B,YAAY,EAAE,CACZ;IACE,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,CACZ;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,IAAI;MACZ,YAAY,EAAE;IAChB,CAAC,EACD;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,SAAS;MACjB,YAAY,EAAE;IAChB,CAAC,EACD;MACE,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,aAAa;MACrB,MAAM,EAAE,YAAY;MACpB,YAAY,EAAE;IAChB,CAAC,EACD;MACE,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,gBAAgB;MACxB,MAAM,EAAE;IACV,CAAC,CACF;IACD,YAAY,EAAE;EAChB,CAAC,CACF;EACD,MAAM,EAAE,OAAO;EACf,aAAa,EAAE;AACjB,CAAC;AAEAD,IAAI,CAASE,IAAI,GAAG,kCAAkC;AAEvD,eAAeF,IAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatDate.js","names":["formatDate","timestamp","t","lng","date","Date","day","getDate","month","returnObjects","getMonth","year","getFullYear","isPrevYear"],"sources":["../../../../src/lib/components/session/formatDate.ts"],"sourcesContent":["import { TFunction } from 'i18next';\n\nconst formatDate = (timestamp: number
|
|
1
|
+
{"version":3,"file":"formatDate.js","names":["formatDate","timestamp","t","lng","date","Date","day","getDate","month","returnObjects","getMonth","year","getFullYear","isPrevYear"],"sources":["../../../../src/lib/components/session/formatDate.ts"],"sourcesContent":["import { TFunction } from 'i18next';\n\nconst formatDate = (\n timestamp: number,\n t: TFunction<['profile'], undefined>,\n lng: string\n): string => {\n const date = new Date(timestamp);\n\n const day = date.getDate();\n const month = t('profile:sessions.monthAbbreviations', {\n returnObjects: true,\n })[date.getMonth()];\n const year = date.getFullYear();\n const isPrevYear = year < new Date().getFullYear();\n\n if (lng === 'ru') return `${day} ${month}${isPrevYear ? ` ${year}` : ''}`;\n return `${month} ${day}${isPrevYear ? `, ${year}` : ''}`;\n};\n\nexport default formatDate;\n"],"mappings":"AAEA,MAAMA,UAAU,GAAGA,CACjBC,SAAiB,EACjBC,CAAoC,EACpCC,GAAW,KACA;EACX,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACJ,SAAS,CAAC;EAEhC,MAAMK,GAAG,GAAGF,IAAI,CAACG,OAAO,CAAC,CAAC;EAC1B,MAAMC,KAAK,GAAGN,CAAC,CAAC,qCAAqC,EAAE;IACrDO,aAAa,EAAE;EACjB,CAAC,CAAC,CAACL,IAAI,CAACM,QAAQ,CAAC,CAAC,CAAC;EACnB,MAAMC,IAAI,GAAGP,IAAI,CAACQ,WAAW,CAAC,CAAC;EAC/B,MAAMC,UAAU,GAAGF,IAAI,GAAG,IAAIN,IAAI,CAAC,CAAC,CAACO,WAAW,CAAC,CAAC;EAElD,IAAIT,GAAG,KAAK,IAAI,EAAE,OAAQ,GAAEG,GAAI,IAAGE,KAAM,GAAEK,UAAU,GAAI,IAAGF,IAAK,EAAC,GAAG,EAAG,EAAC;EACzE,OAAQ,GAAEH,KAAM,IAAGF,GAAI,GAAEO,UAAU,GAAI,KAAIF,IAAK,EAAC,GAAG,EAAG,EAAC;AAC1D,CAAC;AAED,eAAeX,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileDrawerContent.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/profile/ProfileDrawerContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAgBtE,MAAM,WAAW,yBAAyB;IAKxC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAI1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"ProfileDrawerContent.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/profile/ProfileDrawerContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAgBtE,MAAM,WAAW,yBAAyB;IAKxC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAI1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAmND,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAwC7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileUpdatePasswordModal.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/profile/ProfileUpdatePasswordModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAYtD,UAAU,+BAA+B;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"ProfileUpdatePasswordModal.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/profile/ProfileUpdatePasswordModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAYtD,UAAU,+BAA+B;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAgGzE,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionDrawer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionDrawer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionDrawer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionDrawer.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,WAAW,EAGZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAyB,MAAM,OAAO,CAAC;AAgB9C,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAqBxC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionList.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAKpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAcxF,UAAU,gBAAgB;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED,eAAO,MAAM,KAAK;;;qFAGjB,CAAC;AAEF,eAAO,MAAM,IAAI;;;qFAGhB,CAAC;AAaF,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAwF3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/dist/types/src/lib/components/session/__generated__/SessionListItem_session.graphql.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type SessionListItem_session$data = {
|
|
|
13
13
|
readonly id: string;
|
|
14
14
|
readonly ip: string | null;
|
|
15
15
|
readonly isApp: boolean;
|
|
16
|
-
readonly lastSeenAt:
|
|
16
|
+
readonly lastSeenAt: number;
|
|
17
17
|
readonly osName: string | null;
|
|
18
18
|
readonly osVersion: string | null;
|
|
19
19
|
readonly " $fragmentType": "SessionListItem_session";
|
package/dist/types/src/lib/components/session/__generated__/SessionListItem_session.graphql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionListItem_session.graphql.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/components/session/__generated__/SessionListItem_session.graphql.ts"],"names":[],"mappings":"AAUA,OAAO,EAAY,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"SessionListItem_session.graphql.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/components/session/__generated__/SessionListItem_session.graphql.ts"],"names":[],"mappings":"AAUA,OAAO,EAAY,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;CACtD,CAAC;AACF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,4BAA4B,CAAC;IACjD,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC,yBAAyB,CAAC,CAAC;CACvE,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,cAkHX,CAAC;AAIF,eAAe,IAAI,CAAC"}
|
package/dist/types/src/lib/components/session/__generated__/SessionList_sessions.graphql.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export type SessionList_sessions$data = {
|
|
|
4
4
|
readonly sessions: ReadonlyArray<{
|
|
5
5
|
readonly current: boolean;
|
|
6
6
|
readonly id: string;
|
|
7
|
-
readonly lastSeenAt:
|
|
7
|
+
readonly lastSeenAt: number;
|
|
8
8
|
readonly " $fragmentSpreads": FragmentRefs<"SessionListItem_session">;
|
|
9
9
|
}>;
|
|
10
10
|
readonly " $fragmentType": "SessionList_sessions";
|
package/dist/types/src/lib/components/session/__generated__/SessionList_sessions.graphql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList_sessions.graphql.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"SessionList_sessions.graphql.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/components/session/__generated__/SessionList_sessions.graphql.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC,yBAAyB,CAAC,CAAC;KACvE,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;CACnD,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC,sBAAsB,CAAC,CAAC;CACpE,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,cAoDX,CAAC;AAIF,eAAe,IAAI,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { TFunction } from 'i18next';
|
|
2
|
-
declare const formatDate: (timestamp: number, t: TFunction, lng: string) => string;
|
|
2
|
+
declare const formatDate: (timestamp: number, t: TFunction<['profile'], undefined>, lng: string) => string;
|
|
3
3
|
export default formatDate;
|
|
4
4
|
//# sourceMappingURL=formatDate.d.ts.map
|