You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			122 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			122 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
| import React, { useEffect, useState } from 'react';
 | |
| import styled from 'styled-components';
 | |
| import {
 | |
|   SessionTheme,
 | |
|   switchHtmlToDarkTheme,
 | |
|   switchHtmlToLightTheme,
 | |
| } from '../state/ducks/SessionTheme';
 | |
| import { fetch } from '../util/logging';
 | |
| import { SessionButton } from './basic/SessionButton';
 | |
| 
 | |
| const StyledContent = styled.div`
 | |
|   background-color: var(--color-modal-background);
 | |
|   color: var(--color-text);
 | |
|   font-family: var(--font-default);
 | |
| 
 | |
|   display: flex;
 | |
|   flex-direction: column;
 | |
|   padding: 20px;
 | |
|   height: 100%;
 | |
| 
 | |
|   .session-button {
 | |
|     margin: 1em auto 1em 0;
 | |
|     padding: 1em;
 | |
|     width: fit-content;
 | |
|   }
 | |
| 
 | |
|   h1 {
 | |
|     color: var(--color-text);
 | |
|   }
 | |
| 
 | |
|   textarea {
 | |
|     flex-grow: 1;
 | |
|     width: 100%;
 | |
|     box-sizing: border-box;
 | |
|     padding: var(--margins-sm);
 | |
|     border: 2px solid var(--color-session-border);
 | |
|     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')}
 | |
|         onClick={() => {
 | |
|           if (props.content.length <= 20) {
 | |
|             // loading
 | |
|             return;
 | |
|           }
 | |
|           (window as any).saveLog(props.content);
 | |
|         }}
 | |
|       />
 | |
|     </div>
 | |
|   );
 | |
| };
 | |
| 
 | |
| const DebugLogViewAndSave = () => {
 | |
|   const [content, setContent] = useState(window.i18n('loading'));
 | |
| 
 | |
|   useEffect(() => {
 | |
|     const operatingSystemInfo = `Operating System: ${(window as any).getOSRelease()}`;
 | |
| 
 | |
|     const commitHashInfo = (window as any).getCommitHash()
 | |
|       ? `Commit Hash: ${(window as any).getCommitHash()}`
 | |
|       : '';
 | |
| 
 | |
|     // eslint-disable-next-line more/no-then
 | |
|     fetch()
 | |
|       .then((text: any) => {
 | |
|         const debugLogWithSystemInfo = `${operatingSystemInfo} ${commitHashInfo} ${text}`;
 | |
|         setContent(debugLogWithSystemInfo);
 | |
|       })
 | |
|       .catch(console.warn);
 | |
|   }, []);
 | |
| 
 | |
|   return (
 | |
|     <>
 | |
|       <DebugLogTextArea content={content} />
 | |
|       <DebugLogButtons content={content} />
 | |
|     </>
 | |
|   );
 | |
| };
 | |
| 
 | |
| export const DebugLogView = () => {
 | |
|   useEffect(() => {
 | |
|     if ((window as any).theme === 'dark') {
 | |
|       switchHtmlToDarkTheme();
 | |
|     } else {
 | |
|       switchHtmlToLightTheme();
 | |
|     }
 | |
|   }, []);
 | |
| 
 | |
|   return (
 | |
|     <SessionTheme>
 | |
|       <StyledContent>
 | |
|         <div>
 | |
|           <button
 | |
|             className="x close"
 | |
|             aria-label="close debug log"
 | |
|             onClick={() => {
 | |
|               (window as any).closeDebugLog();
 | |
|             }}
 | |
|           />
 | |
|           <h1> {window.i18n('debugLog')} </h1>
 | |
|           <p> {window.i18n('debugLogExplanation')}</p>
 | |
|         </div>
 | |
|         <DebugLogViewAndSave />
 | |
|       </StyledContent>
 | |
|     </SessionTheme>
 | |
|   );
 | |
| };
 |