mirror of
https://github.com/oxen-io/session-desktop.git
synced 2023-12-14 02:12:57 +01:00
127 lines
3.2 KiB
TypeScript
127 lines
3.2 KiB
TypeScript
import React, { useEffect, useState } from 'react';
|
|
import styled from 'styled-components';
|
|
import { switchThemeTo } from '../themes/switchTheme';
|
|
import { SessionTheme } from '../themes/SessionTheme';
|
|
import { fetch } from '../util/logging';
|
|
import { SessionButton, SessionButtonType } from './basic/SessionButton';
|
|
import { SessionIconButton } from './icon';
|
|
|
|
const StyledContent = styled.div`
|
|
background-color: var(--modal-background-content-color);
|
|
color: var(--modal-text-color);
|
|
font-family: var(--font-default);
|
|
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 20px;
|
|
height: 100%;
|
|
|
|
.session-button {
|
|
margin: 1rem auto 1rem 0;
|
|
padding: 1rem;
|
|
width: fit-content;
|
|
}
|
|
|
|
.session-icon-button {
|
|
float: right;
|
|
}
|
|
|
|
h1 {
|
|
color: var(--modal-text-color);
|
|
}
|
|
|
|
textarea {
|
|
flex-grow: 1;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
padding: var(--margins-md);
|
|
background-color: var(--input-background-color);
|
|
color: var(--input-text-color);
|
|
border: 2px solid var(--border-color);
|
|
border-radius: 4px;
|
|
resize: none;
|
|
min-height: 100px;
|
|
|
|
font-family: Monaco, Consolas, 'Courier New', Courier, monospace;
|
|
font-size: 12px;
|
|
}
|
|
`;
|
|
|
|
const DebugLogTextArea = (props: { content: string }) => {
|
|
// tslint:disable-next-line: react-a11y-input-elements
|
|
return <textarea spellCheck="false" rows={10} value={props.content} style={{ height: '100%' }} />;
|
|
};
|
|
|
|
const DebugLogButtons = (props: { content: string }) => {
|
|
return (
|
|
<div className="buttons">
|
|
<SessionButton
|
|
text={window.i18n('saveLogToDesktop')}
|
|
buttonType={SessionButtonType.Simple}
|
|
onClick={() => {
|
|
if (props.content.length <= 20) {
|
|
// loading
|
|
return;
|
|
}
|
|
(window as any).saveLog(props.content);
|
|
}}
|
|
/>
|
|
</div>
|
|
);
|
|
};
|
|
// tslint:disable: no-console
|
|
|
|
const DebugLogViewAndSave = () => {
|
|
const [content, setContent] = useState(window.i18n('loading'));
|
|
|
|
useEffect(() => {
|
|
const operatingSystemInfo = `Operating System: ${(window as any).getOSRelease()}`;
|
|
|
|
const commitHashInfo = window.getCommitHash() ? `Commit Hash: ${window.getCommitHash()}` : '';
|
|
|
|
// eslint-disable-next-line more/no-then
|
|
fetch()
|
|
.then((text: any) => {
|
|
const debugLogWithSystemInfo = `${operatingSystemInfo} ${commitHashInfo} ${text}`;
|
|
setContent(debugLogWithSystemInfo);
|
|
})
|
|
.catch(console.error);
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<DebugLogTextArea content={content} />
|
|
<DebugLogButtons content={content} />
|
|
</>
|
|
);
|
|
};
|
|
|
|
export const DebugLogView = () => {
|
|
useEffect(() => {
|
|
if (window.theme) {
|
|
void switchThemeTo({
|
|
theme: window.theme,
|
|
});
|
|
}
|
|
}, [window.theme]);
|
|
|
|
return (
|
|
<SessionTheme>
|
|
<StyledContent>
|
|
<div>
|
|
<SessionIconButton
|
|
aria-label="close debug log"
|
|
iconType="exit"
|
|
iconSize="medium"
|
|
onClick={() => {
|
|
window.closeDebugLog();
|
|
}}
|
|
/>
|
|
<h1> {window.i18n('debugLog')} </h1>
|
|
<p> {window.i18n('debugLogExplanation')}</p>
|
|
</div>
|
|
<DebugLogViewAndSave />
|
|
</StyledContent>
|
|
</SessionTheme>
|
|
);
|
|
};
|