BetterDiscordApp-rauenzi/renderer/src/ui/misc/addoneditor.jsx

44 lines
1.6 KiB
React
Raw Normal View History

2023-05-19 23:14:55 +02:00
import React from "@modules/react";
import Strings from "@modules/strings";
2019-06-30 07:32:14 +02:00
2023-05-20 00:37:21 +02:00
import Editor from "@ui/customcss/editor";
import Save from "@ui/icons/save";
import Edit from "@ui/icons/edit";
2019-06-30 07:32:14 +02:00
2023-03-09 04:09:26 +01:00
const {useState, useCallback, forwardRef, useImperativeHandle, useRef} = React;
export default forwardRef(function AddonEditor({content, language, save, openNative, id = "bd-addon-editor"}, ref) {
const editorRef = useRef(null);
const [hasUnsavedChanges, setUnsaved] = useState(false);
useImperativeHandle(ref, () => {
return {
resize() {editorRef.current.resize();},
showSettings() {editorRef.current.showSettings();},
get value() {return editorRef.current.getValue();},
set value(newValue) {editorRef.current.setValue(newValue);},
get hasUnsavedChanges() {return hasUnsavedChanges;}
};
2023-03-20 03:23:11 +01:00
}, [hasUnsavedChanges]);
2023-03-09 04:09:26 +01:00
2023-03-20 03:23:11 +01:00
const popoutNative = useCallback(() => openNative?.(), [openNative]);
2023-03-09 04:09:26 +01:00
const onChange = useCallback(() => setUnsaved(true), []);
const saveAddon = useCallback((event, newCSS) => {
save?.(newCSS);
setUnsaved(false);
2023-03-20 03:23:11 +01:00
}, [save]);
2023-03-09 04:09:26 +01:00
return <Editor
ref={editorRef}
language={language}
id={id}
controls={[
{label: <Save size="18px" />, tooltip: Strings.CustomCSS.save, onClick: saveAddon},
{label: <Edit size="18px" />, tooltip: Strings.CustomCSS.openNative, onClick: popoutNative}
]}
value={content}
onChange={onChange}
/>;
});