@@ -24,7 +24,7 @@ import { ProIconButton } from '../../../buttons/ProButton';
24
24
import { type SessionIconProps , SessionIcon } from '../../../icon' ;
25
25
import { LUCIDE_ICONS_UNICODE } from '../../../icon/lucide' ;
26
26
import { type LucideIconProps , LucideIcon } from '../../../icon/LucideIcon' ;
27
- import { SessionLucideIconButton } from '../../../icon/SessionIconButton' ;
27
+ import { SessionIconButton , SessionLucideIconButton } from '../../../icon/SessionIconButton' ;
28
28
import { QRView } from '../../../qrview/QrView' ;
29
29
import { ModalBasicHeader , SessionWrapperModal } from '../../../SessionWrapperModal' ;
30
30
import { showLinkVisitWarningDialog } from '../../OpenUrlModal' ;
@@ -34,6 +34,7 @@ import { ProfileHeader, ProfileName } from '../components';
34
34
import type { ProfileDialogModes } from '../ProfileDialogModes' ;
35
35
import { tr } from '../../../../localization/localeTools' ;
36
36
import { useIsProAvailable } from '../../../../hooks/useIsProAvailable' ;
37
+ import { setDebugMode } from '../../../../state/ducks/debug' ;
37
38
38
39
const handleKeyQRMode = ( mode : ProfileDialogModes , setMode : ( mode : ProfileDialogModes ) => void ) => {
39
40
switch ( mode ) {
@@ -252,6 +253,74 @@ function AdminSection() {
252
253
) ;
253
254
}
254
255
256
+ const StyledVersionInfo = styled . div `
257
+ display: flex;
258
+ align-items: center;
259
+ flex-direction: column;
260
+ gap: var(--margins-xs);
261
+ background: none;
262
+ font-size: var(--font-size-sm);
263
+ ` ;
264
+
265
+ const StyledSpanSessionInfo = styled . span < { opacity ?: number } > `
266
+ opacity: ${ props => props . opacity ?? 0.5 } ;
267
+ transition: var(--default-duration);
268
+ user-select: text;
269
+ cursor: pointer;
270
+
271
+ &:hover {
272
+ opacity: 1;
273
+ }
274
+ ` ;
275
+
276
+ const SessionInfo = ( ) => {
277
+ const [ clickCount , setClickCount ] = useState ( 0 ) ;
278
+
279
+ const dispatch = useDispatch ( ) ;
280
+
281
+ return (
282
+ < StyledVersionInfo >
283
+ < SessionIconButton
284
+ iconSize = "medium"
285
+ iconType = "sessionTokenLogoWithText"
286
+ onClick = { ( ) => {
287
+ showLinkVisitWarningDialog ( 'https://token.getsession.org/' , dispatch ) ;
288
+ } }
289
+ // disable transition here as the transition does the opposite that usual (hovering makes it more opaque/bright)
290
+ style = { { transition : 'none' } }
291
+ />
292
+ < Flex
293
+ $container = { true }
294
+ $flexDirection = "row"
295
+ $alignItems = "center"
296
+ $flexGap = "var(--margins-sm)"
297
+ >
298
+ < StyledSpanSessionInfo
299
+ onClick = { ( ) => {
300
+ showLinkVisitWarningDialog (
301
+ `https://github.com/session-foundation/session-desktop/releases/tag/v${ window . versionInfo . version } ` ,
302
+ dispatch
303
+ ) ;
304
+ } }
305
+ >
306
+ v{ window . versionInfo . version }
307
+ </ StyledSpanSessionInfo >
308
+ < StyledSpanSessionInfo
309
+ onClick = { ( ) => {
310
+ setClickCount ( clickCount + 1 ) ;
311
+ if ( clickCount === 10 ) {
312
+ dispatch ( setDebugMode ( true ) ) ;
313
+ setClickCount ( 0 ) ;
314
+ }
315
+ } }
316
+ >
317
+ { window . versionInfo . commitHash ?. slice ( 0 , 8 ) }
318
+ </ StyledSpanSessionInfo >
319
+ </ Flex >
320
+ </ StyledVersionInfo >
321
+ ) ;
322
+ } ;
323
+
255
324
export const DefaultSettingPage = ( ) => {
256
325
const dispatch = useDispatch ( ) ;
257
326
@@ -344,6 +413,7 @@ export const DefaultSettingPage = () => {
344
413
< MiscSection />
345
414
< SettingsSection />
346
415
< AdminSection />
416
+ < SessionInfo />
347
417
</ Flex >
348
418
</ SessionWrapperModal >
349
419
</ StyledUserSettingsDialog >
0 commit comments