feat(ReactAdaptor): upgrade react to react 18

This commit is contained in:
sethburkart123
2024-09-19 14:54:48 +10:00
parent 831853798e
commit 8f5013d2ff
2 changed files with 39 additions and 28 deletions
@@ -25,45 +25,52 @@ const defaultPresets = [
]; ];
function Picker() { function Picker() {
const [customThemeColor, setCustomThemeColor] = useState(() => { const [customThemeColor, setCustomThemeColor] = useState<string | null>(null);
return settingsState.selectedColor const [presets, setPresets] = useState<string[]>(defaultPresets);
});
const [presets, setPresets] = useState(() => { useEffect(() => {
const savedPresets = localStorage.getItem('colorPickerPresets'); setCustomThemeColor(settingsState.selectedColor);
return savedPresets ? JSON.parse(savedPresets) : defaultPresets; setPresets(() => {
}); const savedPresets = localStorage.getItem('colorPickerPresets');
return savedPresets ? JSON.parse(savedPresets) : defaultPresets;
});
}, []);
useEffect(() => { useEffect(() => {
// on component dismount, save the presets to local storage // on component dismount, save the presets to local storage
return () => { return () => {
// Check if the selected color is already in the presets if (customThemeColor) {
const existingIndex = presets.indexOf(customThemeColor); // Check if the selected color is already in the presets
const existingIndex = presets.indexOf(customThemeColor);
let updatedPresets; let updatedPresets;
if (existingIndex > -1) { if (existingIndex > -1) {
// If the color exists, move it to the front // If the color exists, move it to the front
updatedPresets = [ updatedPresets = [
customThemeColor, customThemeColor,
...presets.slice(0, existingIndex), ...presets.slice(0, existingIndex),
...presets.slice(existingIndex + 1) ...presets.slice(existingIndex + 1)
]; ];
} else { } else {
// If the color is new, add it to the front and slice the array // If the color is new, add it to the front and slice the array
updatedPresets = [customThemeColor, ...presets].slice(0, 18); updatedPresets = [customThemeColor, ...presets].slice(0, 18);
}
setPresets(updatedPresets);
localStorage.setItem('colorPickerPresets', JSON.stringify(updatedPresets));
} }
setPresets(updatedPresets);
localStorage.setItem('colorPickerPresets', JSON.stringify(updatedPresets));
} }
}, []); }, []);
useEffect(() => { useEffect(() => {
settingsState.selectedColor = customThemeColor; if (customThemeColor) {
settingsState.selectedColor = customThemeColor;
}
}, [customThemeColor]); }, [customThemeColor]);
return ( return (
<ColorPicker disableDarkMode={true} presets={presets} hideInputs={true} value={customThemeColor} onChange={setCustomThemeColor} /> <ColorPicker disableDarkMode={true} presets={presets} hideInputs={true} value={customThemeColor ?? ''} onChange={setCustomThemeColor} />
); );
} }
@@ -1,15 +1,17 @@
<script lang="ts"> <script lang="ts">
import React from "react"; import React from "react";
import ReactDOM from "react-dom"; import { createRoot } from "react-dom/client";
import { onDestroy, onMount } from "svelte"; import { onDestroy, onMount } from "svelte";
const e = React.createElement; const e = React.createElement;
let container: HTMLDivElement; let container: HTMLDivElement;
let root: ReturnType<typeof createRoot>;
onMount(() => { onMount(() => {
const { el, children, class: _, ...props } = $$props; const { el, children, class: _, ...props } = $$props;
try { try {
ReactDOM.render(e(el, props, children), container); root = createRoot(container);
root.render(e(el, props, children));
} catch (err) { } catch (err) {
console.warn(`react-adapter failed to mount.`, { err }); console.warn(`react-adapter failed to mount.`, { err });
} }
@@ -17,7 +19,9 @@
onDestroy(() => { onDestroy(() => {
try { try {
ReactDOM.unmountComponentAtNode(container); if (root) {
root.unmount();
}
} catch (err) { } catch (err) {
console.warn(`react-adapter failed to unmount.`, { err }); console.warn(`react-adapter failed to unmount.`, { err });
} }