File tree Expand file tree Collapse file tree 5 files changed +45
-9
lines changed Expand file tree Collapse file tree 5 files changed +45
-9
lines changed Original file line number Diff line number Diff line change @@ -34,6 +34,7 @@ import { ReactComponent as UserPlusIcon } from 'assets/icons/user-plus.svg';
34
34
interface IconProps {
35
35
size ?: 'x-small' | 'small' | 'medium' | 'large' ;
36
36
onClick ?: ( ) => void ;
37
+ disabled ?: boolean ;
37
38
}
38
39
39
40
const Icon = styled . span < IconProps > `
@@ -52,6 +53,12 @@ const Icon = styled.span<IconProps>`
52
53
}
53
54
` }
54
55
56
+ ${ props =>
57
+ props . disabled &&
58
+ `
59
+ color: ${ props . theme . colors . lightBlue } ;
60
+ ` }
61
+
55
62
${ props =>
56
63
props . size === 'x-small' &&
57
64
`
Original file line number Diff line number Diff line change @@ -77,7 +77,7 @@ const RowHeader: React.FC = () => {
77
77
{ l ( 'type' ) }
78
78
</ SortableHeader >
79
79
</ HeaderColumn >
80
- < HeaderColumn right >
80
+ < HeaderColumn >
81
81
< SortableHeader < Session >
82
82
field = "state"
83
83
sort = { settingsStore . sessionSort }
@@ -86,6 +86,15 @@ const RowHeader: React.FC = () => {
86
86
{ l ( 'state' ) }
87
87
</ SortableHeader >
88
88
</ HeaderColumn >
89
+ < HeaderColumn >
90
+ < SortableHeader < Session >
91
+ field = "expiry"
92
+ sort = { settingsStore . sessionSort }
93
+ onSort = { settingsStore . setSessionSort }
94
+ >
95
+ { l ( 'expiry' ) }
96
+ </ SortableHeader >
97
+ </ HeaderColumn >
89
98
< ActionColumn />
90
99
</ HeaderRow >
91
100
) ;
@@ -114,16 +123,23 @@ const SessionRow: React.FC<Props> = ({ session, style }) => {
114
123
return (
115
124
< Row style = { style } >
116
125
< ActionColumn >
117
- < Tip overlay = { l ( 'copy' ) } >
118
- < Copy onClick = { handleCopy } />
119
- </ Tip >
126
+ { session . isPaired ? (
127
+ < Tip overlay = { l ( 'paired' ) } >
128
+ < Copy disabled />
129
+ </ Tip >
130
+ ) : (
131
+ < Tip overlay = { l ( 'copy' ) } >
132
+ < Copy onClick = { handleCopy } />
133
+ </ Tip >
134
+ ) }
120
135
</ ActionColumn >
121
136
< Column cols = { 3 } > { session . label } </ Column >
122
137
< Column > { session . typeLabel } </ Column >
123
- < Column right > { session . stateLabel } </ Column >
138
+ < Column > { session . pairedLabel } </ Column >
139
+ < Column > { session . expiryLabel } </ Column >
124
140
< ActionColumn >
125
141
< Tip overlay = { l ( 'revoke' ) } >
126
- < CloseIcon onClick = { handleRevoke } />
142
+ < CloseIcon size = "large" onClick = { handleRevoke } />
127
143
</ Tip >
128
144
</ ActionColumn >
129
145
</ Row >
Original file line number Diff line number Diff line change 46
46
"cmps.connect.SessionRowHeader.label" : " Label" ,
47
47
"cmps.connect.SessionRowHeader.type" : " Type" ,
48
48
"cmps.connect.SessionRowHeader.state" : " State" ,
49
+ "cmps.connect.SessionRowHeader.expiry" : " Expiry" ,
49
50
"cmps.connect.SessionRow.copy" : " Copy Pairing Phrase" ,
51
+ "cmps.connect.SessionRow.paired" : " This Pairing Phrase has already been used by a client" ,
50
52
"cmps.connect.SessionRow.revoke" : " Revoke Session" ,
51
53
"cmps.history.HistoryPage.backText" : " Lightning Loop" ,
52
54
"cmps.history.HistoryPage.pageTitle" : " History" ,
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import { makeAutoObservable } from 'mobx';
2
2
import * as LIT from 'types/generated/lit-sessions_pb' ;
3
3
import { SortParams } from 'types/state' ;
4
4
import formatDate from 'date-fns/format' ;
5
+ import { MAX_DATE } from 'util/constants' ;
5
6
import { hex } from 'util/strings' ;
6
7
import { Store } from 'store/store' ;
7
8
@@ -65,7 +66,9 @@ export default class Session {
65
66
66
67
/** The date this session will expire as formatted string */
67
68
get expiryLabel ( ) {
68
- return formatDate ( this . expiry , 'MMM d, h:mm a' ) ;
69
+ return this . expiry . getTime ( ) === MAX_DATE . getTime ( )
70
+ ? 'Never'
71
+ : formatDate ( this . expiry , 'MMM d, yyyy h:mm a' ) ;
69
72
}
70
73
71
74
/** True if the session is not revoked or expired */
@@ -76,6 +79,16 @@ export default class Session {
76
79
) ;
77
80
}
78
81
82
+ /** True if the session has had a client connect to it */
83
+ get isPaired ( ) {
84
+ return this . remotePublicKey !== '' ;
85
+ }
86
+
87
+ /** The paired status as a string */
88
+ get pairedLabel ( ) {
89
+ return this . isPaired ? 'In Use' : 'Created' ;
90
+ }
91
+
79
92
/**
80
93
* Updates this session model using data provided from the LIT GRPC api
81
94
*/
Original file line number Diff line number Diff line change @@ -99,8 +99,6 @@ export default class SessionStore {
99
99
* @param label the user defined label for this session
100
100
* @param type the type of session being created (admin, read-only, etc)
101
101
* @param expiry how long the session should be valid for
102
- * @param mailboxServerAddr the address where the mailbox server is reachable
103
- * @param devServer whether the mailbox server is a dev server that has no valid TLS cert
104
102
*/
105
103
async addSession (
106
104
label : string ,
You can’t perform that action at this time.
0 commit comments