@os-team/profile 1.1.8 → 1.1.9
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/session/SessionList.js +1 -2
- package/dist/cjs/components/session/SessionList.js.map +1 -1
- package/dist/cjs/components/session/SessionListItem.js +1 -2
- package/dist/cjs/components/session/SessionListItem.js.map +1 -1
- package/dist/esm/components/session/SessionList.js +1 -2
- package/dist/esm/components/session/SessionList.js.map +1 -1
- package/dist/esm/components/session/SessionListItem.js +1 -2
- package/dist/esm/components/session/SessionListItem.js.map +1 -1
- package/dist/types/src/lib/components/session/SessionList.d.ts.map +1 -1
- package/dist/types/src/lib/components/session/SessionListItem.d.ts.map +1 -1
- package/package.json +15 -15
|
@@ -64,8 +64,7 @@ var SessionList = function SessionList(_ref) {
|
|
|
64
64
|
updater: function updater(store) {
|
|
65
65
|
var _rootRP$getLinkedReco;
|
|
66
66
|
// Delete all other sessions from the store
|
|
67
|
-
var rootRP = store.
|
|
68
|
-
if (!rootRP) return;
|
|
67
|
+
var rootRP = store.getRoot();
|
|
69
68
|
var sessionsRP = (_rootRP$getLinkedReco = rootRP.getLinkedRecords('sessions')) === null || _rootRP$getLinkedReco === void 0 ? void 0 : _rootRP$getLinkedReco.filter(function (item) {
|
|
70
69
|
return item.getDataID() === (currentSession === null || currentSession === void 0 ? void 0 : currentSession.id);
|
|
71
70
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.js","names":["_styled","_interopRequireDefault","require","_core","_theming","_react","_interopRequireWildcard","_reactI18next","_hooks","_SessionListItem","_SessionList_sessions","_SessionListDestroyAllOtherSessionsMutation","_templateObject","_templateObject2","_templateObject3","_templateObject4","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","name","Array","from","test","len","length","arr2","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","return","isArray","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","sessionsFragment","hash","console","error","Title","styled","div","exports","List","p","clr","theme","listItemColorBorder","DestroyAllOtherSessionsButton","Button","OtherSessions","SESSION_LIST_PADDING_VERTICAL","SessionList","_ref","sessionsKey","_useFragment","useFragment","sessions","_useTranslation","useTranslation","t","currentSession","useMemo","find","session","current","otherSessions","filter","sort","a","b","lastSeenAt","_useMutation","useMutation","_useMutation2","commitDestroyAllOtherSessions","loadingDestroyAllOtherSessions","destroyAllOtherSessions","useCallback","variables","updater","store","_rootRP$getLinkedReco","rootRP","sessionsRP","getLinkedRecords","item","getDataID","id","setLinkedRecords","onError","message","onCompleted","success","createElement","Fragment","sessionKey","hideLastSeenAt","type","danger","size","wide","loading","onClick","map","_default"],"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":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAC,uBAAA,CAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,gBAAA,GAAAR,sBAAA,CAAAC,OAAA;AAAgD,IAAAQ,qBAAA,EAAAC,2CAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA;AAAA,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAX,wBAAAe,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,4BAAAG,OAAA,EAAAH,GAAA,UAAAI,KAAA,GAAAT,wBAAA,CAAAC,WAAA,OAAAQ,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAL,GAAA,YAAAI,KAAA,CAAAE,GAAA,CAAAN,GAAA,SAAAO,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAZ,GAAA,QAAAY,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,GAAA,EAAAY,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,GAAA,EAAAY,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAZ,GAAA,CAAAY,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAH,GAAA,MAAAI,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAjB,GAAA,EAAAO,MAAA,YAAAA,MAAA;AAAA,SAAA3B,uBAAAoB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAG,OAAA,EAAAH,GAAA;AAAA,SAAAkB,eAAAC,GAAA,EAAAC,CAAA,WAAAC,eAAA,CAAAF,GAAA,KAAAG,qBAAA,CAAAH,GAAA,EAAAC,CAAA,KAAAG,2BAAA,CAAAJ,GAAA,EAAAC,CAAA,KAAAI,gBAAA;AAAA,SAAAA,iBAAA,cAAAC,SAAA;AAAA,SAAAF,4BAAAG,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAE,iBAAA,CAAAF,CAAA,EAAAC,MAAA,OAAAE,CAAA,GAAApB,MAAA,CAAAI,SAAA,CAAAiB,QAAA,CAAAf,IAAA,CAAAW,CAAA,EAAAK,KAAA,aAAAF,CAAA,iBAAAH,CAAA,CAAAM,WAAA,EAAAH,CAAA,GAAAH,CAAA,CAAAM,WAAA,CAAAC,IAAA,MAAAJ,CAAA,cAAAA,CAAA,mBAAAK,KAAA,CAAAC,IAAA,CAAAT,CAAA,OAAAG,CAAA,+DAAAO,IAAA,CAAAP,CAAA,UAAAD,iBAAA,CAAAF,CAAA,EAAAC,MAAA;AAAA,SAAAC,kBAAAT,GAAA,EAAAkB,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAlB,GAAA,CAAAmB,MAAA,EAAAD,GAAA,GAAAlB,GAAA,CAAAmB,MAAA,WAAAlB,CAAA,MAAAmB,IAAA,OAAAL,KAAA,CAAAG,GAAA,GAAAjB,CAAA,GAAAiB,GAAA,EAAAjB,CAAA,IAAAmB,IAAA,CAAAnB,CAAA,IAAAD,GAAA,CAAAC,CAAA,UAAAmB,IAAA;AAAA,SAAAjB,sBAAAH,GAAA,EAAAC,CAAA,QAAAoB,EAAA,WAAArB,GAAA,gCAAAsB,MAAA,IAAAtB,GAAA,CAAAsB,MAAA,CAAAC,QAAA,KAAAvB,GAAA,4BAAAqB,EAAA,QAAAG,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,IAAA,OAAAC,EAAA,OAAAC,EAAA,iBAAAJ,EAAA,IAAAL,EAAA,GAAAA,EAAA,CAAAzB,IAAA,CAAAI,GAAA,GAAA+B,IAAA,QAAA9B,CAAA,QAAAX,MAAA,CAAA+B,EAAA,MAAAA,EAAA,UAAAQ,EAAA,uBAAAA,EAAA,IAAAL,EAAA,GAAAE,EAAA,CAAA9B,IAAA,CAAAyB,EAAA,GAAAW,IAAA,MAAAJ,IAAA,CAAAK,IAAA,CAAAT,EAAA,CAAAU,KAAA,GAAAN,IAAA,CAAAT,MAAA,KAAAlB,CAAA,GAAA4B,EAAA,iBAAAM,GAAA,IAAAL,EAAA,OAAAL,EAAA,GAAAU,GAAA,yBAAAN,EAAA,YAAAR,EAAA,CAAAe,MAAA,KAAAT,EAAA,GAAAN,EAAA,CAAAe,MAAA,IAAA9C,MAAA,CAAAqC,EAAA,MAAAA,EAAA,2BAAAG,EAAA,QAAAL,EAAA,aAAAG,IAAA;AAAA,SAAA1B,gBAAAF,GAAA,QAAAe,KAAA,CAAAsB,OAAA,CAAArC,GAAA,UAAAA,GAAA;AAAA,SAAAsC,uBAAAC,OAAA,EAAAC,GAAA,SAAAA,GAAA,IAAAA,GAAA,GAAAD,OAAA,CAAA3B,KAAA,cAAAtB,MAAA,CAAAmD,MAAA,CAAAnD,MAAA,CAAAoD,gBAAA,CAAAH,OAAA,IAAAC,GAAA,IAAAN,KAAA,EAAA5C,MAAA,CAAAmD,MAAA,CAAAD,GAAA;AAIhD,IAAMG,gBAAgB,GAAAzE,qBAAA,cAAAA,qBAAA,IAAAA,qBAAA,GAAAR,OAAA,kDAAAQ,qBAAA,CAAA0E,IAAA,IAAA1E,qBAAA,CAAA0E,IAAA,2CAAAC,OAAA,CAAAC,KAAA,wJAAA5E,qBAAA,CAUrB;AAMM,IAAM6E,KAAK,GAAGC,eAAM,CAACC,GAAG,CAAA7E,eAAA,KAAAA,eAAA,GAAAkE,sBAAA,yDAG9B;AAACY,OAAA,CAAAH,KAAA,GAAAA,KAAA;AAEK,IAAMI,IAAI,GAAGH,eAAM,CAACC,GAAG,CAAA5E,gBAAA,KAAAA,gBAAA,GAAAiE,sBAAA,4EACJ,UAACc,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAC;AAAA,GACpC,UAACH,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAC;AAAA,EACnE;AAACL,OAAA,CAAAC,IAAA,GAAAA,IAAA;AAEF,IAAMK,6BAA6B,GAAG,IAAAR,eAAM,EAACS,YAAM,CAAC,CAAAnF,gBAAA,KAAAA,gBAAA,GAAAgE,sBAAA,kEAKnD;AAED,IAAMoB,aAAa,GAAGV,eAAM,CAACC,GAAG,CAAA1E,gBAAA,KAAAA,gBAAA,GAAA+D,sBAAA,8BAE/B;AAEM,IAAMqB,6BAA6B,GAAG,GAAG;AAACT,OAAA,CAAAS,6BAAA,GAAAA,6BAAA;AAEjD,IAAMC,WAAuC,GAAG,SAA1CA,WAAuCA,CAAAC,IAAA,EAAwB;EAAA,IAAlBC,WAAW,GAAAD,IAAA,CAAXC,WAAW;EAC5D,IAAAC,YAAA,GAAqB,IAAAC,kBAAW,EAACrB,gBAAgB,EAAEmB,WAAW,CAAC;IAAvDG,QAAQ,GAAAF,YAAA,CAARE,QAAQ;EAChB,IAAAC,eAAA,GAAc,IAAAC,4BAAc,EAAC,CAAC,SAAS,CAAC,CAAC;IAAjCC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMC,cAAc,GAAG,IAAAC,cAAO,EAC5B;IAAA,OAAML,QAAQ,CAACM,IAAI,CAAC,UAACC,OAAO;MAAA,OAAKA,OAAO,CAACC,OAAO;IAAA,EAAC;EAAA,GACjD,CAACR,QAAQ,CACX,CAAC;EAED,IAAMS,aAAa,GAAG,IAAAJ,cAAO,EAC3B;IAAA,OACEL,QAAQ,CACLU,MAAM,CAAC,UAACH,OAAO;MAAA,OAAK,CAACA,OAAO,CAACC,OAAO;IAAA,EAAC,CACrCG,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC;MAAA,OAAKA,CAAC,CAACC,UAAU,GAAGF,CAAC,CAACE,UAAU;IAAA,EAAC;EAAA,GAChD,CAACd,QAAQ,CACX,CAAC;EAED,IAAAe,YAAA,GACE,IAAAC,kBAAW,EAAA9G,2CAAA,cAAAA,2CAAA,IAAAA,2CAAA,GAAAT,OAAA,wEAAAS,2CAAA,CAAAyE,IAAA,IAAAzE,2CAAA,CAAAyE,IAAA,2CAAAC,OAAA,CAAAC,KAAA,8KAAA3E,2CAAA,CAMV,CAAC;IAAA+G,aAAA,GAAAnF,cAAA,CAAAiF,YAAA;IAPGG,6BAA6B,GAAAD,aAAA;IAAEE,8BAA8B,GAAAF,aAAA;EASpE,IAAMG,uBAAuB,GAAG,IAAAC,kBAAW,EAAC,YAAM;IAChDH,6BAA6B,CAAC;MAC5BI,SAAS,EAAE,CAAC,CAAC;MACbC,OAAO,EAAE,SAAAA,QAACC,KAAK,EAAK;QAAA,IAAAC,qBAAA;QAClB;QACA,IAAMC,MAAM,GAAGF,KAAK,CAACtG,GAAG,CAAC,aAAa,CAAC;QACvC,IAAI,CAACwG,MAAM,EAAE;QAEb,IAAMC,UAAU,IAAAF,qBAAA,GAAGC,MAAM,CACtBE,gBAAgB,CAAC,UAAU,CAAC,cAAAH,qBAAA,uBADZA,qBAAA,CAEff,MAAM,CAAC,UAACmB,IAAI;UAAA,OAAKA,IAAI,CAACC,SAAS,CAAC,CAAC,MAAK1B,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE2B,EAAE;QAAA,EAAC;QAC7D,IAAI,CAACJ,UAAU,EAAE;QAEjBD,MAAM,CAACM,gBAAgB,CAACL,UAAU,EAAE,UAAU,CAAC;MACjD,CAAC;MACDM,OAAO,EAAE,SAAAA,QAACpD,KAAK,EAAK;QAClBqD,aAAO,CAACrD,KAAK,CAACA,KAAK,CAACqD,OAAO,CAAC;MAC9B,CAAC;MACDC,WAAW,EAAE,SAAAA,YAAA,EAAM;QACjBD,aAAO,CAACE,OAAO,CAACjC,CAAC,CAAC,oCAAoC,CAAC,CAAC;MAC1D;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACe,6BAA6B,EAAEd,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE2B,EAAE,EAAE5B,CAAC,CAAC,CAAC;EAE1D,oBACEvG,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAAAzI,MAAA,CAAAmB,OAAA,CAAAuH,QAAA,QACGlC,cAAc,iBACbxG,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAAAzI,MAAA,CAAAmB,OAAA,CAAAuH,QAAA,qBACE1I,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACvD,KAAK,QAAEqB,CAAC,CAAC,0BAA0B,CAAS,CAAC,eAC9CvG,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACnD,IAAI,qBACHtF,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACrI,gBAAA,CAAAe,OAAe;IAACwH,UAAU,EAAEnC,cAAe;IAACoC,cAAc;EAAA,CAAE,CACzD,CACN,CACH,EAEA/B,aAAa,CAACvD,MAAM,GAAG,CAAC,iBACvBtD,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAAAzI,MAAA,CAAAmB,OAAA,CAAAuH,QAAA,qBACE1I,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAAC9C,6BAA6B;IAC5BkD,IAAI,EAAC,OAAO;IACZC,MAAM;IACNC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE1B,8BAA+B;IACxC2B,OAAO,EAAE1B;EAAwB,GAEhCjB,CAAC,CAAC,kCAAkC,CACR,CAAC,eAEhCvG,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAAC5C,aAAa,qBACZ7F,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACvD,KAAK,QACHqB,CAAC,CAAC,wBAAwB,CAAC,EAAC,IAAE,EAACM,aAAa,CAACvD,MAAM,EAAC,GAChD,CAAC,eACRtD,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACnD,IAAI,QACFuB,aAAa,CAACsC,GAAG,CAAC,UAACxC,OAAO;IAAA,oBACzB3G,MAAA,CAAAmB,OAAA,CAAAsH,aAAA,CAACrI,gBAAA,CAAAe,OAAe;MAACS,GAAG,EAAE+E,OAAO,CAACwB,EAAG;MAACQ,UAAU,EAAEhC;IAAQ,CAAE,CAAC;EAAA,CAC1D,CACG,CACO,CACf,CAEJ,CAAC;AAEP,CAAC;AAAC,IAAAyC,QAAA,GAEarD,WAAW;AAAAV,OAAA,CAAAlE,OAAA,GAAAiI,QAAA"}
|
|
1
|
+
{"version":3,"file":"SessionList.js","names":["_styled","_interopRequireDefault","require","_core","_theming","_react","_interopRequireWildcard","_reactI18next","_hooks","_SessionListItem","_SessionList_sessions","_SessionListDestroyAllOtherSessionsMutation","_templateObject","_templateObject2","_templateObject3","_templateObject4","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","name","Array","from","test","len","length","arr2","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","return","isArray","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","sessionsFragment","hash","console","error","Title","styled","div","exports","List","p","clr","theme","listItemColorBorder","DestroyAllOtherSessionsButton","Button","OtherSessions","SESSION_LIST_PADDING_VERTICAL","SessionList","_ref","sessionsKey","_useFragment","useFragment","sessions","_useTranslation","useTranslation","t","currentSession","useMemo","find","session","current","otherSessions","filter","sort","a","b","lastSeenAt","_useMutation","useMutation","_useMutation2","commitDestroyAllOtherSessions","loadingDestroyAllOtherSessions","destroyAllOtherSessions","useCallback","variables","updater","store","_rootRP$getLinkedReco","rootRP","getRoot","sessionsRP","getLinkedRecords","item","getDataID","id","setLinkedRecords","onError","message","onCompleted","success","createElement","Fragment","sessionKey","hideLastSeenAt","type","danger","size","wide","loading","onClick","map","_default"],"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.getRoot();\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() === currentSession?.id);\n if (!sessionsRP) return;\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":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAC,uBAAA,CAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,gBAAA,GAAAR,sBAAA,CAAAC,OAAA;AAAgD,IAAAQ,qBAAA,EAAAC,2CAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA;AAAA,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAX,wBAAAe,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,4BAAAG,OAAA,EAAAH,GAAA,UAAAI,KAAA,GAAAT,wBAAA,CAAAC,WAAA,OAAAQ,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAL,GAAA,YAAAI,KAAA,CAAAE,GAAA,CAAAN,GAAA,SAAAO,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAZ,GAAA,QAAAY,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,GAAA,EAAAY,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,GAAA,EAAAY,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAZ,GAAA,CAAAY,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAH,GAAA,MAAAI,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAjB,GAAA,EAAAO,MAAA,YAAAA,MAAA;AAAA,SAAA3B,uBAAAoB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAG,OAAA,EAAAH,GAAA;AAAA,SAAAkB,eAAAC,GAAA,EAAAC,CAAA,WAAAC,eAAA,CAAAF,GAAA,KAAAG,qBAAA,CAAAH,GAAA,EAAAC,CAAA,KAAAG,2BAAA,CAAAJ,GAAA,EAAAC,CAAA,KAAAI,gBAAA;AAAA,SAAAA,iBAAA,cAAAC,SAAA;AAAA,SAAAF,4BAAAG,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAE,iBAAA,CAAAF,CAAA,EAAAC,MAAA,OAAAE,CAAA,GAAApB,MAAA,CAAAI,SAAA,CAAAiB,QAAA,CAAAf,IAAA,CAAAW,CAAA,EAAAK,KAAA,aAAAF,CAAA,iBAAAH,CAAA,CAAAM,WAAA,EAAAH,CAAA,GAAAH,CAAA,CAAAM,WAAA,CAAAC,IAAA,MAAAJ,CAAA,cAAAA,CAAA,mBAAAK,KAAA,CAAAC,IAAA,CAAAT,CAAA,OAAAG,CAAA,+DAAAO,IAAA,CAAAP,CAAA,UAAAD,iBAAA,CAAAF,CAAA,EAAAC,MAAA;AAAA,SAAAC,kBAAAT,GAAA,EAAAkB,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAlB,GAAA,CAAAmB,MAAA,EAAAD,GAAA,GAAAlB,GAAA,CAAAmB,MAAA,WAAAlB,CAAA,MAAAmB,IAAA,OAAAL,KAAA,CAAAG,GAAA,GAAAjB,CAAA,GAAAiB,GAAA,EAAAjB,CAAA,IAAAmB,IAAA,CAAAnB,CAAA,IAAAD,GAAA,CAAAC,CAAA,UAAAmB,IAAA;AAAA,SAAAjB,sBAAAH,GAAA,EAAAC,CAAA,QAAAoB,EAAA,WAAArB,GAAA,gCAAAsB,MAAA,IAAAtB,GAAA,CAAAsB,MAAA,CAAAC,QAAA,KAAAvB,GAAA,4BAAAqB,EAAA,QAAAG,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,IAAA,OAAAC,EAAA,OAAAC,EAAA,iBAAAJ,EAAA,IAAAL,EAAA,GAAAA,EAAA,CAAAzB,IAAA,CAAAI,GAAA,GAAA+B,IAAA,QAAA9B,CAAA,QAAAX,MAAA,CAAA+B,EAAA,MAAAA,EAAA,UAAAQ,EAAA,uBAAAA,EAAA,IAAAL,EAAA,GAAAE,EAAA,CAAA9B,IAAA,CAAAyB,EAAA,GAAAW,IAAA,MAAAJ,IAAA,CAAAK,IAAA,CAAAT,EAAA,CAAAU,KAAA,GAAAN,IAAA,CAAAT,MAAA,KAAAlB,CAAA,GAAA4B,EAAA,iBAAAM,GAAA,IAAAL,EAAA,OAAAL,EAAA,GAAAU,GAAA,yBAAAN,EAAA,YAAAR,EAAA,CAAAe,MAAA,KAAAT,EAAA,GAAAN,EAAA,CAAAe,MAAA,IAAA9C,MAAA,CAAAqC,EAAA,MAAAA,EAAA,2BAAAG,EAAA,QAAAL,EAAA,aAAAG,IAAA;AAAA,SAAA1B,gBAAAF,GAAA,QAAAe,KAAA,CAAAsB,OAAA,CAAArC,GAAA,UAAAA,GAAA;AAAA,SAAAsC,uBAAAC,OAAA,EAAAC,GAAA,SAAAA,GAAA,IAAAA,GAAA,GAAAD,OAAA,CAAA3B,KAAA,cAAAtB,MAAA,CAAAmD,MAAA,CAAAnD,MAAA,CAAAoD,gBAAA,CAAAH,OAAA,IAAAC,GAAA,IAAAN,KAAA,EAAA5C,MAAA,CAAAmD,MAAA,CAAAD,GAAA;AAIhD,IAAMG,gBAAgB,GAAAzE,qBAAA,cAAAA,qBAAA,IAAAA,qBAAA,GAAAR,OAAA,kDAAAQ,qBAAA,CAAA0E,IAAA,IAAA1E,qBAAA,CAAA0E,IAAA,2CAAAC,OAAA,CAAAC,KAAA,wJAAA5E,qBAAA,CAUrB;AAMM,IAAM6E,KAAK,GAAGC,eAAM,CAACC,GAAG,CAAA7E,eAAA,KAAAA,eAAA,GAAAkE,sBAAA,yDAG9B;AAACY,OAAA,CAAAH,KAAA,GAAAA,KAAA;AAEK,IAAMI,IAAI,GAAGH,eAAM,CAACC,GAAG,CAAA5E,gBAAA,KAAAA,gBAAA,GAAAiE,sBAAA,4EACJ,UAACc,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAC;AAAA,GACpC,UAACH,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAC;AAAA,EACnE;AAACL,OAAA,CAAAC,IAAA,GAAAA,IAAA;AAEF,IAAMK,6BAA6B,GAAG,IAAAR,eAAM,EAACS,YAAM,CAAC,CAAAnF,gBAAA,KAAAA,gBAAA,GAAAgE,sBAAA,kEAKnD;AAED,IAAMoB,aAAa,GAAGV,eAAM,CAACC,GAAG,CAAA1E,gBAAA,KAAAA,gBAAA,GAAA+D,sBAAA,8BAE/B;AAEM,IAAMqB,6BAA6B,GAAG,GAAG;AAACT,OAAA,CAAAS,6BAAA,GAAAA,6BAAA;AAEjD,IAAMC,WAAuC,GAAG,SAA1CA,WAAuCA,CAAAC,IAAA,EAAwB;EAAA,IAAlBC,WAAW,GAAAD,IAAA,CAAXC,WAAW;EAC5D,IAAAC,YAAA,GAAqB,IAAAC,kBAAW,EAACrB,gBAAgB,EAAEmB,WAAW,CAAC;IAAvDG,QAAQ,GAAAF,YAAA,CAARE,QAAQ;EAChB,IAAAC,eAAA,GAAc,IAAAC,4BAAc,EAAC,CAAC,SAAS,CAAC,CAAC;IAAjCC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMC,cAAc,GAAG,IAAAC,cAAO,EAC5B;IAAA,OAAML,QAAQ,CAACM,IAAI,CAAC,UAACC,OAAO;MAAA,OAAKA,OAAO,CAACC,OAAO;IAAA,EAAC;EAAA,GACjD,CAACR,QAAQ,CACX,CAAC;EAED,IAAMS,aAAa,GAAG,IAAAJ,cAAO,EAC3B;IAAA,OACEL,QAAQ,CACLU,MAAM,CAAC,UAACH,OAAO;MAAA,OAAK,CAACA,OAAO,CAACC,OAAO;IAAA,EAAC,CACrCG,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC;MAAA,OAAKA,CAAC,CAACC,UAAU,GAAGF,CAAC,CAACE,UAAU;IAAA,EAAC;EAAA,GAChD,CAACd,QAAQ,CACX,CAAC;EAED,IAAAe,YAAA,GACE,IAAAC,kBAAW,EAAA9G,2CAAA,cAAAA,2CAAA,IAAAA,2CAAA,GAAAT,OAAA,wEAAAS,2CAAA,CAAAyE,IAAA,IAAAzE,2CAAA,CAAAyE,IAAA,2CAAAC,OAAA,CAAAC,KAAA,8KAAA3E,2CAAA,CAMV,CAAC;IAAA+G,aAAA,GAAAnF,cAAA,CAAAiF,YAAA;IAPGG,6BAA6B,GAAAD,aAAA;IAAEE,8BAA8B,GAAAF,aAAA;EASpE,IAAMG,uBAAuB,GAAG,IAAAC,kBAAW,EAAC,YAAM;IAChDH,6BAA6B,CAAC;MAC5BI,SAAS,EAAE,CAAC,CAAC;MACbC,OAAO,EAAE,SAAAA,QAACC,KAAK,EAAK;QAAA,IAAAC,qBAAA;QAClB;QACA,IAAMC,MAAM,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAC;QAC9B,IAAMC,UAAU,IAAAH,qBAAA,GAAGC,MAAM,CACtBG,gBAAgB,CAAC,UAAU,CAAC,cAAAJ,qBAAA,uBADZA,qBAAA,CAEff,MAAM,CAAC,UAACoB,IAAI;UAAA,OAAKA,IAAI,CAACC,SAAS,CAAC,CAAC,MAAK3B,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE4B,EAAE;QAAA,EAAC;QAC7D,IAAI,CAACJ,UAAU,EAAE;QACjBF,MAAM,CAACO,gBAAgB,CAACL,UAAU,EAAE,UAAU,CAAC;MACjD,CAAC;MACDM,OAAO,EAAE,SAAAA,QAACrD,KAAK,EAAK;QAClBsD,aAAO,CAACtD,KAAK,CAACA,KAAK,CAACsD,OAAO,CAAC;MAC9B,CAAC;MACDC,WAAW,EAAE,SAAAA,YAAA,EAAM;QACjBD,aAAO,CAACE,OAAO,CAAClC,CAAC,CAAC,oCAAoC,CAAC,CAAC;MAC1D;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACe,6BAA6B,EAAEd,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE4B,EAAE,EAAE7B,CAAC,CAAC,CAAC;EAE1D,oBACEvG,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAAA1I,MAAA,CAAAmB,OAAA,CAAAwH,QAAA,QACGnC,cAAc,iBACbxG,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAAA1I,MAAA,CAAAmB,OAAA,CAAAwH,QAAA,qBACE3I,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACxD,KAAK,QAAEqB,CAAC,CAAC,0BAA0B,CAAS,CAAC,eAC9CvG,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACpD,IAAI,qBACHtF,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACtI,gBAAA,CAAAe,OAAe;IAACyH,UAAU,EAAEpC,cAAe;IAACqC,cAAc;EAAA,CAAE,CACzD,CACN,CACH,EAEAhC,aAAa,CAACvD,MAAM,GAAG,CAAC,iBACvBtD,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAAA1I,MAAA,CAAAmB,OAAA,CAAAwH,QAAA,qBACE3I,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAAC/C,6BAA6B;IAC5BmD,IAAI,EAAC,OAAO;IACZC,MAAM;IACNC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE3B,8BAA+B;IACxC4B,OAAO,EAAE3B;EAAwB,GAEhCjB,CAAC,CAAC,kCAAkC,CACR,CAAC,eAEhCvG,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAAC7C,aAAa,qBACZ7F,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACxD,KAAK,QACHqB,CAAC,CAAC,wBAAwB,CAAC,EAAC,IAAE,EAACM,aAAa,CAACvD,MAAM,EAAC,GAChD,CAAC,eACRtD,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACpD,IAAI,QACFuB,aAAa,CAACuC,GAAG,CAAC,UAACzC,OAAO;IAAA,oBACzB3G,MAAA,CAAAmB,OAAA,CAAAuH,aAAA,CAACtI,gBAAA,CAAAe,OAAe;MAACS,GAAG,EAAE+E,OAAO,CAACyB,EAAG;MAACQ,UAAU,EAAEjC;IAAQ,CAAE,CAAC;EAAA,CAC1D,CACG,CACO,CACf,CAEJ,CAAC;AAEP,CAAC;AAAC,IAAA0C,QAAA,GAEatD,WAAW;AAAAV,OAAA,CAAAlE,OAAA,GAAAkI,QAAA"}
|
|
@@ -169,8 +169,7 @@ var SessionListItem = function SessionListItem(_ref) {
|
|
|
169
169
|
updater: function updater(store) {
|
|
170
170
|
var _rootRP$getLinkedReco;
|
|
171
171
|
// Delete the session from the store
|
|
172
|
-
var rootRP = store.
|
|
173
|
-
if (!rootRP) return;
|
|
172
|
+
var rootRP = store.getRoot();
|
|
174
173
|
var sessionsRP = (_rootRP$getLinkedReco = rootRP.getLinkedRecords('sessions')) === null || _rootRP$getLinkedReco === void 0 ? void 0 : _rootRP$getLinkedReco.filter(function (item) {
|
|
175
174
|
return item.getDataID() !== session.id;
|
|
176
175
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionListItem.js","names":["_react","_interopRequireWildcard","require","_hooks","_styled","_interopRequireDefault","_reactI18next","_pluralForms","_core","_styles","_theming","_utils","_icons","_react2","_getLastSeen","_formatDate","_UnknownDeviceIcon","_BrowserIcon","_AppleIcon","_AndroidIcon","_SessionListItem_session","_SessionListItemDestroySessionMutation","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","length","err","return","Array","isArray","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","name","from","test","iter","len","arr2","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","sessionListItemFragment","hash","console","error","Container","styled","div","p","clr","theme","listItemColorBorder","horizontalPaddingStyles","exports","Info","sizes","small","ellipsisStyles","Content","Title","LastSeen","inputColorPlaceholder","hasSwipeStyles","hasSwipe","css","transitionStyles","openedStyles","opened","Actions","omitEmotionProps","concat","colorBg","listItemActionsPaddingLeft","IconContainer","Icon","borderRadius","bgColor","nameVersionToString","version","mergeInfo","_len","arguments","args","_key","filter","item","join","SessionListItem","_ref","sessionKey","hideLastSeenAt","session","useFragment","_useTranslation","useTranslation","t","i18n","touchDevice","useMemo","isTouchDevice","_useSwipe","useSwipe","handlers","browser","browserName","browserVersion","os","osName","osVersion","deviceBrandModel","deviceBrand","deviceModel","deviceManufacturer","unshift","title","deviceType","toLowerCase","returnObjects","deviceName","deviceInfo","isApp","ip","location","city","country","lastSeen","lsa","getLastSeen","lastSeenAt","formatDate","language","pluralForms","forms","number","_useMemo","createElement","_useMemo2","iconComponent","iconColor","_useMutation","useMutation","_useMutation2","commitDestroySession","loadingDestroySession","destroySession","useCallback","variables","input","id","updater","store","_rootRP$getLinkedReco","rootRP","sessionsRP","getLinkedRecords","getDataID","setLinkedRecords","onError","message","onCompleted","success","Button","type","wide","size","loading","onClick","SignOut","_default"],"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,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AAKA,IAAAQ,QAAA,GAAAR,OAAA;AACA,IAAAS,MAAA,GAAAT,OAAA;AACA,IAAAU,MAAA,GAAAV,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AAEA,IAAAY,YAAA,GAAAT,sBAAA,CAAAH,OAAA;AACA,IAAAa,WAAA,GAAAV,sBAAA,CAAAH,OAAA;AAEA,IAAAc,kBAAA,GAAAX,sBAAA,CAAAH,OAAA;AACA,IAAAe,YAAA,GAAAZ,sBAAA,CAAAH,OAAA;AACA,IAAAgB,UAAA,GAAAb,sBAAA,CAAAH,OAAA;AACA,IAAAiB,YAAA,GAAAd,sBAAA,CAAAH,OAAA;AAAsD,IAAAkB,wBAAA,EAAAC,sCAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,gBAAA,EAAAC,iBAAA;AAAA,SAAA1B,uBAAA2B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAnC,wBAAA+B,GAAA,EAAAI,WAAA,SAAAA,WAAA,IAAAJ,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAQ,OAAA,CAAAR,GAAA,yBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAS,KAAA,GAAAN,wBAAA,CAAAC,WAAA,OAAAK,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAV,GAAA,YAAAS,KAAA,CAAAE,GAAA,CAAAX,GAAA,SAAAY,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAjB,GAAA,QAAAiB,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAApB,GAAA,EAAAiB,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAhB,GAAA,EAAAiB,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAjB,GAAA,CAAAiB,GAAA,SAAAL,MAAA,CAAAV,OAAA,GAAAF,GAAA,MAAAS,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAtB,GAAA,EAAAY,MAAA,YAAAA,MAAA;AAAA,SAAAW,eAAAC,GAAA,EAAAC,CAAA,WAAAC,eAAA,CAAAF,GAAA,KAAAG,qBAAA,CAAAH,GAAA,EAAAC,CAAA,KAAAG,2BAAA,CAAAJ,GAAA,EAAAC,CAAA,KAAAI,gBAAA;AAAA,SAAAA,iBAAA,cAAAC,SAAA;AAAA,SAAAH,sBAAAH,GAAA,EAAAC,CAAA,QAAAM,EAAA,WAAAP,GAAA,gCAAAQ,MAAA,IAAAR,GAAA,CAAAQ,MAAA,CAAAC,QAAA,KAAAT,GAAA,4BAAAO,EAAA,QAAAG,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,IAAA,OAAAC,EAAA,OAAAC,EAAA,iBAAAJ,EAAA,IAAAL,EAAA,GAAAA,EAAA,CAAAX,IAAA,CAAAI,GAAA,GAAAiB,IAAA,QAAAhB,CAAA,QAAAX,MAAA,CAAAiB,EAAA,MAAAA,EAAA,UAAAQ,EAAA,uBAAAA,EAAA,IAAAL,EAAA,GAAAE,EAAA,CAAAhB,IAAA,CAAAW,EAAA,GAAAW,IAAA,MAAAJ,IAAA,CAAAK,IAAA,CAAAT,EAAA,CAAAU,KAAA,GAAAN,IAAA,CAAAO,MAAA,KAAApB,CAAA,GAAAc,EAAA,iBAAAO,GAAA,IAAAN,EAAA,OAAAL,EAAA,GAAAW,GAAA,yBAAAP,EAAA,YAAAR,EAAA,CAAAgB,MAAA,KAAAV,EAAA,GAAAN,EAAA,CAAAgB,MAAA,IAAAjC,MAAA,CAAAuB,EAAA,MAAAA,EAAA,2BAAAG,EAAA,QAAAL,EAAA,aAAAG,IAAA;AAAA,SAAAZ,gBAAAF,GAAA,QAAAwB,KAAA,CAAAC,OAAA,CAAAzB,GAAA,UAAAA,GAAA;AAAA,SAAA0B,mBAAA1B,GAAA,WAAA2B,kBAAA,CAAA3B,GAAA,KAAA4B,gBAAA,CAAA5B,GAAA,KAAAI,2BAAA,CAAAJ,GAAA,KAAA6B,kBAAA;AAAA,SAAAA,mBAAA,cAAAvB,SAAA;AAAA,SAAAF,4BAAA0B,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAE,iBAAA,CAAAF,CAAA,EAAAC,MAAA,OAAAE,CAAA,GAAA3C,MAAA,CAAAI,SAAA,CAAAwC,QAAA,CAAAtC,IAAA,CAAAkC,CAAA,EAAAK,KAAA,aAAAF,CAAA,iBAAAH,CAAA,CAAAM,WAAA,EAAAH,CAAA,GAAAH,CAAA,CAAAM,WAAA,CAAAC,IAAA,MAAAJ,CAAA,cAAAA,CAAA,mBAAAT,KAAA,CAAAc,IAAA,CAAAR,CAAA,OAAAG,CAAA,+DAAAM,IAAA,CAAAN,CAAA,UAAAD,iBAAA,CAAAF,CAAA,EAAAC,MAAA;AAAA,SAAAH,iBAAAY,IAAA,eAAAhC,MAAA,oBAAAgC,IAAA,CAAAhC,MAAA,CAAAC,QAAA,aAAA+B,IAAA,+BAAAhB,KAAA,CAAAc,IAAA,CAAAE,IAAA;AAAA,SAAAb,mBAAA3B,GAAA,QAAAwB,KAAA,CAAAC,OAAA,CAAAzB,GAAA,UAAAgC,iBAAA,CAAAhC,GAAA;AAAA,SAAAgC,kBAAAhC,GAAA,EAAAyC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAzC,GAAA,CAAAqB,MAAA,EAAAoB,GAAA,GAAAzC,GAAA,CAAAqB,MAAA,WAAApB,CAAA,MAAAyC,IAAA,OAAAlB,KAAA,CAAAiB,GAAA,GAAAxC,CAAA,GAAAwC,GAAA,EAAAxC,CAAA,IAAAyC,IAAA,CAAAzC,CAAA,IAAAD,GAAA,CAAAC,CAAA,UAAAyC,IAAA;AAAA,SAAAC,uBAAAC,OAAA,EAAAC,GAAA,SAAAA,GAAA,IAAAA,GAAA,GAAAD,OAAA,CAAAT,KAAA,cAAA7C,MAAA,CAAAwD,MAAA,CAAAxD,MAAA,CAAAyD,gBAAA,CAAAH,OAAA,IAAAC,GAAA,IAAAzB,KAAA,EAAA9B,MAAA,CAAAwD,MAAA,CAAAD,GAAA;AAEtD,IAAMG,uBAAuB,GAAApF,wBAAA,cAAAA,wBAAA,IAAAA,wBAAA,GAAAlB,OAAA,qDAAAkB,wBAAA,CAAAqF,IAAA,IAAArF,wBAAA,CAAAqF,IAAA,2CAAAC,OAAA,CAAAC,KAAA,2JAAAvF,wBAAA,CAkB5B;AAOM,IAAMwF,SAAS,GAAGC,eAAM,CAACC,GAAG,CAAAxF,eAAA,KAAAA,eAAA,GAAA6E,sBAAA,0aAOJ,UAACY,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAC;AAAA,GAkBlE,IAAAC,+BAAuB,EAAC,CAAC,CAC5B;AAACC,OAAA,CAAAR,SAAA,GAAAA,SAAA;AAEF,IAAMS,IAAI,GAAGR,eAAM,CAACC,GAAG,CAAAvF,gBAAA,KAAAA,gBAAA,GAAA4E,sBAAA,0CACR,UAACY,CAAC;EAAA,OAAKA,CAAC,CAACE,KAAK,CAACK,KAAK,CAACC,KAAK;AAAA,GACrCC,sBAAc,CACjB;AAEM,IAAMC,OAAO,GAAGZ,eAAM,CAACC,GAAG,CAAAtF,gBAAA,KAAAA,gBAAA,GAAA2E,sBAAA,2CAGhC;AAACiB,OAAA,CAAAK,OAAA,GAAAA,OAAA;AAEF,IAAMC,KAAK,GAAG,IAAAb,eAAM,EAACQ,IAAI,CAAC,CAAA5F,gBAAA,KAAAA,gBAAA,GAAA0E,sBAAA,+BAEzB;AAED,IAAMwB,QAAQ,GAAG,IAAAd,eAAM,EAACQ,IAAI,CAAC,CAAA3F,gBAAA,KAAAA,gBAAA,GAAAyE,sBAAA,2BAClB,UAACY,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACW,qBAAqB,CAAC;AAAA,EACnD;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAId,CAAC;EAAA,OACvBA,CAAC,CAACe,QAAQ,QACVC,WAAG,EAAApG,gBAAA,KAAAA,gBAAA,GAAAwE,sBAAA,0DAEC,IAAA6B,wBAAgB,EAAC,WAAW,CAAC,CAACjB,CAAC,CAAC,CACnC;AAAA;AAEH,IAAMkB,YAAY,GAAG,SAAfA,YAAYA,CAAIlB,CAAC;EAAA,OACrBA,CAAC,CAACmB,MAAM,QACRH,WAAG,EAAAnG,gBAAA,KAAAA,gBAAA,GAAAuE,sBAAA,2CAEF;AAAA;AAMH,IAAMgC,OAAO,GAAG,IAAAtB,eAAM,EACpB,KAAK,EACL,IAAAuB,uBAAgB,EAAC,UAAU,EAAE,QAAQ,CACvC,CAAC,CAAAvG,gBAAA,KAAAA,gBAAA,GAAAsE,sBAAA,2OAWK,UAACY,CAAC;EAAA,OAAK,IAAAC,YAAG,KAAAqB,MAAA,CAAAnD,kBAAA,CAAK6B,CAAC,CAACE,KAAK,CAACqB,OAAO,CAAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,EAAU,CAAC;AAAA,GACxD,UAACoB,CAAC;EAAA,OAAK,IAAAC,YAAG,EAACD,CAAC,CAACE,KAAK,CAACqB,OAAO,CAAC;AAAA,GACzB,UAACvB,CAAC;EAAA,OAAKA,CAAC,CAACE,KAAK,CAACsB,0BAA0B;AAAA,GAG7CV,cAAc,EACdI,YAAY,EACZ,IAAAd,+BAAuB,EAAC,OAAO,CAAC,CACnC;AAEM,IAAMqB,aAAa,GAAG3B,eAAM,CAACC,GAAG,CAAAhF,gBAAA,KAAAA,gBAAA,GAAAqE,sBAAA,wGAKtC;AAACiB,OAAA,CAAAoB,aAAA,GAAAA,aAAA;AAKK,IAAMC,IAAI,GAAG,IAAA5B,eAAM,EAAC,KAAK,EAAE,IAAAuB,uBAAgB,EAAC,SAAS,CAAC,CAAC,CAAArG,iBAAA,KAAAA,iBAAA,GAAAoE,sBAAA,kQAa3C,UAACY,CAAC;EAAA,OAAKA,CAAC,CAACE,KAAK,CAACyB,YAAY;AAAA,GACxB,UAAC3B,CAAC;EAAA,OAAKA,CAAC,CAAC4B,OAAO;AAAA,EAErC;AAACvB,OAAA,CAAAqB,IAAA,GAAAA,IAAA;AAEF,IAAMG,mBAAmB,GAAG,SAAtBA,mBAAmBA,CACvB/C,IAAmB,EACnBgD,OAAsB,EACJ;EAClB,IAAI,CAAChD,IAAI,EAAE,OAAO,IAAI;EACtB,UAAAwC,MAAA,CAAUxC,IAAI,EAAAwC,MAAA,CAAGQ,OAAO,OAAAR,MAAA,CAAOQ,OAAO,IAAK,EAAE;AAC/C,CAAC;AAED,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAA;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAnE,MAAA,EAAOoE,IAAI,OAAAjE,KAAA,CAAA+D,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;IAAJD,IAAI,CAAAC,IAAA,IAAAF,SAAA,CAAAE,IAAA;EAAA;EAAA,OACxBD,IAAI,CAACE,MAAM,CAAC,UAACC,IAAI;IAAA,OAAKA,IAAI,KAAK,IAAI;EAAA,EAAC,CAACC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;AAAA;AAEzD,IAAMC,eAA+C,GAAG,SAAlDA,eAA+CA,CAAAC,IAAA,EAG/C;EAAA,IAFJC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,cAAc,GAAAF,IAAA,CAAdE,cAAc;EAEd,IAAMC,OAAO,GAAG,IAAAC,kBAAW,EAACnD,uBAAuB,EAAEgD,UAAU,CAAC;EAChE,IAAAI,eAAA,GAAoB,IAAAC,4BAAc,EAAC,CAAC,SAAS,CAAC,CAAC;IAAvCC,CAAC,GAAAF,eAAA,CAADE,CAAC;IAAEC,IAAI,GAAAH,eAAA,CAAJG,IAAI;EACf,IAAMC,WAAW,GAAG,IAAAC,cAAO,EAAC;IAAA,OAAM,IAAAC,oBAAa,EAAC,CAAC;EAAA,GAAE,EAAE,CAAC;EACtD,IAAAC,SAAA,GAA6B,IAAAC,eAAQ,EAAC,CAAC;IAA/BlC,MAAM,GAAAiC,SAAA,CAANjC,MAAM;IAAEmC,QAAQ,GAAAF,SAAA,CAARE,QAAQ;EAExB,IAAMC,OAAO,GAAG,IAAAL,cAAO,EACrB;IAAA,OAAMrB,mBAAmB,CAACc,OAAO,CAACa,WAAW,EAAEb,OAAO,CAACc,cAAc,CAAC;EAAA,GACtE,CAACd,OAAO,CAACa,WAAW,EAAEb,OAAO,CAACc,cAAc,CAC9C,CAAC;EAED,IAAMC,EAAE,GAAG,IAAAR,cAAO,EAChB;IAAA,OAAMrB,mBAAmB,CAACc,OAAO,CAACgB,MAAM,EAAEhB,OAAO,CAACiB,SAAS,CAAC;EAAA,GAC5D,CAACjB,OAAO,CAACgB,MAAM,EAAEhB,OAAO,CAACiB,SAAS,CACpC,CAAC;EAED,IAAMC,gBAAgB,GAAG,IAAAX,cAAO,EAAC,YAAM;IACrC,IAAMzG,GAAG,GAAG,CAACkG,OAAO,CAACmB,WAAW,EAAEnB,OAAO,CAACoB,WAAW,CAAC;IACtD;IACA;IACA,IAAIpB,OAAO,CAACqB,kBAAkB,KAAKrB,OAAO,CAACmB,WAAW,EAAE;MACtDrH,GAAG,CAACwH,OAAO,CAACtB,OAAO,CAACqB,kBAAkB,CAAC;IACzC;IACA,OAAOvH,GAAG,CAAC2F,MAAM,CAAC,UAACC,IAAI;MAAA,OAAKA,IAAI,KAAK,IAAI;IAAA,EAAC,CAACC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;EAC9D,CAAC,EAAE,CAACK,OAAO,CAACmB,WAAW,EAAEnB,OAAO,CAACqB,kBAAkB,EAAErB,OAAO,CAACoB,WAAW,CAAC,CAAC;EAE1E,IAAMG,KAAK,GAAG,IAAAhB,cAAO,EAAC,YAAM;IAC1B,IAAIiB,UAAU,GAAG,CAACxB,OAAO,CAACwB,UAAU,IAAI,SAAS,EAAEC,WAAW,CAAC,CAAC;IAChE,IAAIb,OAAO,EAAEY,UAAU,GAAG,SAAS;IACnC,UAAA7C,MAAA,CACEyB,CAAC,CAAC,6BAA6B,EAAE;MAAEsB,aAAa,EAAE;IAAK,CAAC,CAAC,CAACF,UAAU,CAAC,EAAA7C,MAAA,CACpEqB,OAAO,CAAC2B,UAAU,OAAAhD,MAAA,CAAOqB,OAAO,CAAC2B,UAAU,IAAK,EAAE;EACvD,CAAC,EAAE,CAACf,OAAO,EAAEZ,OAAO,CAAC2B,UAAU,EAAE3B,OAAO,CAACwB,UAAU,EAAEpB,CAAC,CAAC,CAAC;EAExD,IAAMwB,UAAU,GAAG,IAAArB,cAAO,EACxB;IAAA,OACEP,OAAO,CAAC6B,KAAK,GAAGzC,SAAS,CAAC8B,gBAAgB,EAAEH,EAAE,CAAC,GAAG3B,SAAS,CAACwB,OAAO,EAAEG,EAAE,CAAC;EAAA,GAC1E,CAACH,OAAO,EAAEM,gBAAgB,EAAEH,EAAE,EAAEf,OAAO,CAAC6B,KAAK,CAC/C,CAAC;EAED,IAAMC,EAAE,GAAG,IAAAvB,cAAO,EAAC,YAAM;IACvB,IAAI,CAACP,OAAO,CAAC8B,EAAE,EAAE,OAAO,IAAI;IAC5B,IAAMC,QAAQ,GAAG3C,SAAS,CAACY,OAAO,CAACgC,IAAI,EAAEhC,OAAO,CAACiC,OAAO,CAAC;IACzD,UAAAtD,MAAA,CAAUqB,OAAO,CAAC8B,EAAE,EAAAnD,MAAA,CAAGoD,QAAQ,QAAApD,MAAA,CAAQoD,QAAQ,SAAM,EAAE;EACzD,CAAC,EAAE,CAAC/B,OAAO,CAACgC,IAAI,EAAEhC,OAAO,CAACiC,OAAO,EAAEjC,OAAO,CAAC8B,EAAE,CAAC,CAAC;EAE/C,IAAMI,QAAQ,GAAG,IAAA3B,cAAO,EAAC,YAAM;IAC7B,IAAM4B,GAAG,GAAG,IAAAC,oBAAW,EAACpC,OAAO,CAACqC,UAAU,CAAC;IAC3C,IAAI,CAACF,GAAG,EAAE;MACR,UAAAxD,MAAA,CAAUyB,CAAC,CAAC,6BAA6B,CAAC,OAAAzB,MAAA,CAAI,IAAA2D,mBAAU,EACtDtC,OAAO,CAACqC,UAAU,EAClBjC,CAAC,EACDC,IAAI,CAACkC,QACP,CAAC;IACH;IACA,UAAA5D,MAAA,CAAUyB,CAAC,CAAC,2BAA2B,CAAC,OAAAzB,MAAA,CAAIwD,GAAG,CAAC,CAAC,CAAC,OAAAxD,MAAA,CAAI,IAAA6D,oBAAW,EAAC;MAChED,QAAQ,EAAElC,IAAI,CAACkC,QAAQ;MACvBE,KAAK,EAAErC,CAAC,qBAAAzB,MAAA,CAAqBwD,GAAG,CAAC,CAAC,CAAC,GAAI;QAAET,aAAa,EAAE;MAAK,CAAC,CAAC;MAC/DgB,MAAM,EAAEP,GAAG,CAAC,CAAC;IACf,CAAC,CAAC,OAAAxD,MAAA,CAAIyB,CAAC,CAAC,sBAAsB,CAAC;EACjC,CAAC,EAAE,CAACC,IAAI,CAACkC,QAAQ,EAAEvC,OAAO,CAACqC,UAAU,EAAEjC,CAAC,CAAC,CAAC;EAE1C,IAAAuC,QAAA,GAAmC,IAAApC,cAAO,EAAC,YAAM;MAC/C,IAAIK,OAAO,EAAE,OAAO,cAACtK,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACrL,YAAA,CAAAiB,OAAW,MAAE,CAAC,EAAE,mBAAmB,CAAC;MAC1D,IAAIwH,OAAO,CAAC6B,KAAK,EAAE;QACjB,IAAI7B,OAAO,CAACgB,MAAM,KAAK,KAAK,IAAIhB,OAAO,CAACgB,MAAM,KAAK,WAAW,EAAE;UAC9D,OAAO,cAAC1K,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACpL,UAAA,CAAAgB,OAAS,MAAE,CAAC,EAAE,iBAAiB,CAAC;QAC3C;QACA,IAAIwH,OAAO,CAACgB,MAAM,KAAK,SAAS,EAC9B,OAAO,cAAC1K,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACnL,YAAA,CAAAe,OAAW,MAAE,CAAC,EAAE,oBAAoB,CAAC;MAClD;MACA,OAAO,cAAClC,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACtL,kBAAA,CAAAkB,OAAiB,MAAE,CAAC,EAAE,kBAAkB,CAAC;IACpD,CAAC,EAAE,CAACoI,OAAO,EAAEZ,OAAO,CAAC6B,KAAK,EAAE7B,OAAO,CAACgB,MAAM,CAAC,CAAC;IAAA6B,SAAA,GAAAhJ,cAAA,CAAA8I,QAAA;IAVrCG,aAAa,GAAAD,SAAA;IAAEE,SAAS,GAAAF,SAAA;EAY/B,IAAAG,YAAA,GACE,IAAAC,kBAAW,EAAAtL,sCAAA,cAAAA,sCAAA,IAAAA,sCAAA,GAAAnB,OAAA,mEAAAmB,sCAAA,CAAAoF,IAAA,IAAApF,sCAAA,CAAAoF,IAAA,2CAAAC,OAAA,CAAAC,KAAA,yKAAAtF,sCAAA,CAQV,CAAC;IAAAuL,aAAA,GAAArJ,cAAA,CAAAmJ,YAAA;IATGG,oBAAoB,GAAAD,aAAA;IAAEE,qBAAqB,GAAAF,aAAA;EAWlD,IAAMG,cAAc,GAAG,IAAAC,kBAAW,EAAC,YAAM;IACvCH,oBAAoB,CAAC;MACnBI,SAAS,EAAE;QACTC,KAAK,EAAE;UACLC,EAAE,EAAEzD,OAAO,CAACyD;QACd;MACF,CAAC;MACDC,OAAO,EAAE,SAAAA,QAACC,KAAK,EAAK;QAAA,IAAAC,qBAAA;QAClB;QACA,IAAMC,MAAM,GAAGF,KAAK,CAAC1K,GAAG,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC4K,MAAM,EAAE;QAEb,IAAMC,UAAU,IAAAF,qBAAA,GAAGC,MAAM,CACtBE,gBAAgB,CAAC,UAAU,CAAC,cAAAH,qBAAA,uBADZA,qBAAA,CAEfnE,MAAM,CAAC,UAACC,IAAI;UAAA,OAAKA,IAAI,CAACsE,SAAS,CAAC,CAAC,KAAKhE,OAAO,CAACyD,EAAE;QAAA,EAAC;QACrD,IAAI,CAACK,UAAU,EAAE;QAEjBD,MAAM,CAACI,gBAAgB,CAACH,UAAU,EAAE,UAAU,CAAC;MACjD,CAAC;MACDI,OAAO,EAAE,SAAAA,QAACjH,KAAK,EAAK;QAClBkH,aAAO,CAAClH,KAAK,CAACA,KAAK,CAACkH,OAAO,CAAC;MAC9B,CAAC;MACDC,WAAW,EAAE,SAAAA,YAAA,EAAM;QACjBD,aAAO,CAACE,OAAO,CAACjE,CAAC,CAAC,4BAA4B,CAAC,CAAC;MAClD;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC+C,oBAAoB,EAAEnD,OAAO,CAACyD,EAAE,EAAErD,CAAC,CAAC,CAAC;EAEzC,oBACE9J,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC1F,SAAS,EAAKyD,QAAQ,eACrBrK,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC9D,aAAa,qBACZxI,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC7D,IAAI;IAACE,OAAO,EAAE8D;EAAU,GAAED,aAAoB,CAClC,CAAC,eAEhBxM,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC7E,OAAO,qBACNzH,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC5E,KAAK,QAAEuD,KAAa,CAAC,EACrBK,UAAU,iBAAItL,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACjF,IAAI,QAAEiE,UAAiB,CAAC,EACvCE,EAAE,iBAAIxL,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACjF,IAAI,QAAEmE,EAAS,CAAC,EACvB,CAAC/B,cAAc,iBAAIzJ,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC3E,QAAQ,QAAEiE,QAAmB,CAC3C,CAAC,eAEV5L,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAACnE,OAAO;IAACL,QAAQ,EAAEkC,WAAY;IAAC9B,MAAM,EAAEA;EAAO,gBAC7ClI,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC9L,KAAA,CAAAwN,MAAM;IACLC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAC,OAAO;IACZC,OAAO,EAAEtB,qBAAsB;IAC/BuB,OAAO,EAAEtB;EAAe,gBAExB/M,MAAA,CAAAkC,OAAA,CAAAoK,aAAA,CAAC1L,MAAA,CAAA0N,OAAO,MAAE,CACJ,CACD,CACA,CAAC;AAEhB,CAAC;AAAC,IAAAC,QAAA,GAEajF,eAAe;AAAAlC,OAAA,CAAAlF,OAAA,GAAAqM,QAAA"}
|
|
1
|
+
{"version":3,"file":"SessionListItem.js","names":["_react","_interopRequireWildcard","require","_hooks","_styled","_interopRequireDefault","_reactI18next","_pluralForms","_core","_styles","_theming","_utils","_icons","_react2","_getLastSeen","_formatDate","_UnknownDeviceIcon","_BrowserIcon","_AppleIcon","_AndroidIcon","_SessionListItem_session","_SessionListItemDestroySessionMutation","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","length","err","return","Array","isArray","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","name","from","test","iter","len","arr2","_taggedTemplateLiteral","strings","raw","freeze","defineProperties","sessionListItemFragment","hash","console","error","Container","styled","div","p","clr","theme","listItemColorBorder","horizontalPaddingStyles","exports","Info","sizes","small","ellipsisStyles","Content","Title","LastSeen","inputColorPlaceholder","hasSwipeStyles","hasSwipe","css","transitionStyles","openedStyles","opened","Actions","omitEmotionProps","concat","colorBg","listItemActionsPaddingLeft","IconContainer","Icon","borderRadius","bgColor","nameVersionToString","version","mergeInfo","_len","arguments","args","_key","filter","item","join","SessionListItem","_ref","sessionKey","hideLastSeenAt","session","useFragment","_useTranslation","useTranslation","t","i18n","touchDevice","useMemo","isTouchDevice","_useSwipe","useSwipe","handlers","browser","browserName","browserVersion","os","osName","osVersion","deviceBrandModel","deviceBrand","deviceModel","deviceManufacturer","unshift","title","deviceType","toLowerCase","returnObjects","deviceName","deviceInfo","isApp","ip","location","city","country","lastSeen","lsa","getLastSeen","lastSeenAt","formatDate","language","pluralForms","forms","number","_useMemo","createElement","_useMemo2","iconComponent","iconColor","_useMutation","useMutation","_useMutation2","commitDestroySession","loadingDestroySession","destroySession","useCallback","variables","input","id","updater","store","_rootRP$getLinkedReco","rootRP","getRoot","sessionsRP","getLinkedRecords","getDataID","setLinkedRecords","onError","message","onCompleted","success","Button","type","wide","size","loading","onClick","SignOut","_default"],"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.getRoot();\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() !== session.id);\n if (!sessionsRP) return;\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":"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"}
|
|
@@ -43,8 +43,7 @@ const SessionList = ({
|
|
|
43
43
|
updater: store => {
|
|
44
44
|
var _rootRP$getLinkedReco;
|
|
45
45
|
// Delete all other sessions from the store
|
|
46
|
-
const rootRP = store.
|
|
47
|
-
if (!rootRP) return;
|
|
46
|
+
const rootRP = store.getRoot();
|
|
48
47
|
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
48
|
if (!sessionsRP) return;
|
|
50
49
|
rootRP.setLinkedRecords(sessionsRP, 'sessions');
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
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","getRoot","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.getRoot();\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() === currentSession?.id);\n if (!sessionsRP) return;\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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"}
|
|
@@ -185,8 +185,7 @@ const SessionListItem = ({
|
|
|
185
185
|
updater: store => {
|
|
186
186
|
var _rootRP$getLinkedReco;
|
|
187
187
|
// Delete the session from the store
|
|
188
|
-
const rootRP = store.
|
|
189
|
-
if (!rootRP) return;
|
|
188
|
+
const rootRP = store.getRoot();
|
|
190
189
|
const sessionsRP = (_rootRP$getLinkedReco = rootRP.getLinkedRecords('sessions')) === null || _rootRP$getLinkedReco === void 0 ? void 0 : _rootRP$getLinkedReco.filter(item => item.getDataID() !== session.id);
|
|
191
190
|
if (!sessionsRP) return;
|
|
192
191
|
rootRP.setLinkedRecords(sessionsRP, 'sessions');
|
|
@@ -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","_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
|
+
{"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","getRoot","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.getRoot();\n const sessionsRP = rootRP\n .getLinkedRecords('sessions')\n ?.filter((item) => item.getDataID() !== session.id);\n if (!sessionsRP) return;\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":"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"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAqF3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionListItem.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionListItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAgBpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AA6B9F,UAAU,oBAAoB;IAC5B,UAAU,EAAE,2BAA2B,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,SAAS;;;qFA0BrB,CAAC;AAOF,eAAO,MAAM,OAAO;;;qFAGnB,CAAC;AAmDF,eAAO,MAAM,aAAa;;;qFAKzB,CAAC;AAEF,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,eAAO,MAAM,IAAI;;;iGAgBhB,CAAC;AAaF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SessionListItem.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/session/SessionListItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAgBpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AA6B9F,UAAU,oBAAoB;IAC5B,UAAU,EAAE,2BAA2B,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,SAAS;;;qFA0BrB,CAAC;AAOF,eAAO,MAAM,OAAO;;;qFAGnB,CAAC;AAmDF,eAAO,MAAM,aAAa;;;qFAKzB,CAAC;AAEF,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,eAAO,MAAM,IAAI;;;iGAgBhB,CAAC;AAaF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA2InD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@os-team/profile",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.9",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"repository": "git@gitlab.com:os-team/libs/profile.git",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"@os-team/plural-forms": "^1.0.12"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@babel/cli": "^7.22.
|
|
49
|
-
"@babel/core": "^7.22.
|
|
48
|
+
"@babel/cli": "^7.22.10",
|
|
49
|
+
"@babel/core": "^7.22.10",
|
|
50
50
|
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
|
51
|
-
"@babel/preset-env": "^7.22.
|
|
51
|
+
"@babel/preset-env": "^7.22.10",
|
|
52
52
|
"@babel/preset-react": "^7.22.5",
|
|
53
53
|
"@babel/preset-typescript": "^7.22.5",
|
|
54
54
|
"@emotion/react": "^11.11.1",
|
|
@@ -58,16 +58,16 @@
|
|
|
58
58
|
"@os-team/relay-network-creator": "^1.2.17",
|
|
59
59
|
"@os-team/relay-network-mw-upload": "^1.2.16",
|
|
60
60
|
"@types/jest": "^29.5.3",
|
|
61
|
-
"@types/node": "^20.
|
|
62
|
-
"@types/react": "^18.2.
|
|
61
|
+
"@types/node": "^20.5.0",
|
|
62
|
+
"@types/react": "^18.2.20",
|
|
63
63
|
"@types/react-dom": "^18.2.7",
|
|
64
64
|
"@types/react-relay": "^14.1.4",
|
|
65
65
|
"@types/react-router-dom": "^5.3.3",
|
|
66
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
67
|
-
"@typescript-eslint/parser": "^6.
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^6.4.0",
|
|
67
|
+
"@typescript-eslint/parser": "^6.4.0",
|
|
68
68
|
"babel-plugin-relay": "^15.0.0",
|
|
69
69
|
"cross-env": "^7.0.3",
|
|
70
|
-
"eslint": "^8.
|
|
70
|
+
"eslint": "^8.47.0",
|
|
71
71
|
"eslint-config-os-team-react": "1.1.46",
|
|
72
72
|
"eslint-plugin-import": "^2.28.0",
|
|
73
73
|
"eslint-plugin-jest": "^27.2.3",
|
|
@@ -76,27 +76,27 @@
|
|
|
76
76
|
"eslint-plugin-react": "^7.33.1",
|
|
77
77
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
78
78
|
"get-graphql-schema": "^2.1.2",
|
|
79
|
-
"graphql": "^16.
|
|
79
|
+
"graphql": "^16.8.0",
|
|
80
80
|
"husky": "^8.0.3",
|
|
81
|
-
"i18next": "^23.4.
|
|
81
|
+
"i18next": "^23.4.4",
|
|
82
82
|
"i18next-browser-languagedetector": "^7.1.0",
|
|
83
83
|
"i18next-http-backend": "^2.2.1",
|
|
84
84
|
"lazysizes": "^5.3.2",
|
|
85
|
-
"lint-staged": "^
|
|
85
|
+
"lint-staged": "^14.0.0",
|
|
86
86
|
"npm-run-all": "^4.1.5",
|
|
87
87
|
"prettier": "3.0.1",
|
|
88
88
|
"progress-bar-webpack-plugin": "^2.1.0",
|
|
89
89
|
"react": "^18.2.0",
|
|
90
90
|
"react-app-rewired": "^2.2.1",
|
|
91
91
|
"react-dom": "^18.2.0",
|
|
92
|
-
"react-i18next": "^13.
|
|
92
|
+
"react-i18next": "^13.1.2",
|
|
93
93
|
"react-relay": "^15.0.0",
|
|
94
|
-
"react-router-dom": "^6.
|
|
94
|
+
"react-router-dom": "^6.15.0",
|
|
95
95
|
"react-scripts": "^5.0.1",
|
|
96
96
|
"react-test-renderer": "^18.2.0",
|
|
97
97
|
"relay-compiler": "^15.0.0",
|
|
98
98
|
"relay-runtime": "^15.0.0",
|
|
99
|
-
"release-it": "^16.1.
|
|
99
|
+
"release-it": "^16.1.5",
|
|
100
100
|
"rimraf": "^5.0.1",
|
|
101
101
|
"typescript": "^5.1.6",
|
|
102
102
|
"webpack-bundle-analyzer": "^4.9.0"
|