Files
lucko-paste/src/components/Editor.js

69 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-03-26 22:00:12 +00:00
import { useState, useEffect } from 'react';
2021-03-27 11:49:46 +00:00
import { ThemeProvider } from 'styled-components';
import ls from 'local-storage';
2021-03-26 22:00:12 +00:00
import EditorControls from './EditorControls';
import EditorTextArea from './EditorTextArea';
2021-03-27 11:49:46 +00:00
import themes from '../style/themes';
2021-03-26 22:00:12 +00:00
export default function Editor({ content, setContent, contentType }) {
const [language, setLanguage] = useState('plain');
2021-03-27 11:49:46 +00:00
const [theme, setTheme] = useState(() => {
const preference = ls.get('theme');
if (preference && themes[preference]) {
return preference;
} else {
return 'dark';
}
});
2021-03-27 14:17:28 +00:00
const [fontSize, setFontSize] = useState(() => {
const preference = ls.get('fontsize');
if (preference && preference >= 10 && preference <= 22) {
return preference;
} else {
return 16;
}
});
2021-03-27 11:49:46 +00:00
useEffect(() => {
if (theme === 'dark') {
ls.remove('theme');
} else {
ls.set('theme', theme);
}
2021-03-27 14:17:28 +00:00
}, [theme]);
useEffect(() => {
if (fontSize === 16) {
ls.remove('fontsize');
} else {
ls.set('fontsize', fontSize);
}
}, [fontSize]);
2021-03-27 11:49:46 +00:00
2021-03-26 22:00:12 +00:00
useEffect(() => {
if (contentType) {
setLanguage(contentType);
}
}, [contentType]);
2021-03-27 14:17:28 +00:00
function zoom(delta) {
const result = fontSize + delta;
if (result && result >= 10 && result <= 22) {
setFontSize(result);
}
}
2021-03-26 22:00:12 +00:00
return <>
2021-03-27 11:49:46 +00:00
<ThemeProvider theme={themes[theme]}>
2021-03-27 14:17:28 +00:00
<EditorControls
code={content} setCode={setContent}
language={language} setLanguage={setLanguage}
theme={theme} setTheme={setTheme}
zoom={zoom}
/>
<EditorTextArea code={content} setCode={setContent} language={language} fontSize={fontSize} />
2021-03-27 11:49:46 +00:00
</ThemeProvider>
2021-03-26 22:00:12 +00:00
</>
}