new-personal-site/components/lib/mdx/markdown/MarkdownEditorSelectorButtons.tsx
Benjamin Toby a0a0ab8ee4 Updates
2025-07-20 10:35:54 +01:00

112 lines
3.1 KiB
TypeScript

import React from "react";
import Button from "../../layout/Button";
import Border from "../../elements/Border";
import { LocalStorageDict } from "@/package-shared/dict/local-storage-dict";
type Props = {
preview: boolean;
setPreview: React.Dispatch<React.SetStateAction<boolean>>;
sideBySide: boolean;
setSideBySide: React.Dispatch<React.SetStateAction<boolean>>;
};
export default function MarkdownEditorSelectorButtons({
preview,
setPreview,
setSideBySide,
sideBySide,
}: Props) {
const [ready, setReady] = React.useState(false);
React.useEffect(() => {
if (!ready) return;
if (sideBySide) {
localStorage.setItem(
LocalStorageDict["MarkdownEditorDefaultSideBySide"],
"true"
);
} else {
localStorage.removeItem(
LocalStorageDict["MarkdownEditorDefaultSideBySide"]
);
}
if (preview) {
localStorage.setItem(
LocalStorageDict["MarkdownEditorDefaultPreview"],
"true"
);
} else {
localStorage.removeItem(
LocalStorageDict["MarkdownEditorDefaultPreview"]
);
}
}, [sideBySide, preview, ready]);
React.useEffect(() => {
if (
localStorage.getItem(
LocalStorageDict["MarkdownEditorDefaultPreview"]
)
) {
setPreview(true);
}
if (
!localStorage.getItem(
LocalStorageDict["MarkdownEditorDefaultSideBySide"]
)
) {
setSideBySide(false);
}
setTimeout(() => {
setReady(true);
}, 200);
}, []);
return (
<Border className="p-1.5">
<Button
title="Code"
size="smaller"
color={sideBySide ? "gray" : preview ? "gray" : "primary"}
variant={
sideBySide ? "outlined" : preview ? "outlined" : "normal"
}
onClick={() => {
setSideBySide(false);
setPreview(false);
}}
>
Code
</Button>
<Button
title="Preview"
size="smaller"
color={sideBySide ? "gray" : preview ? "primary" : "gray"}
variant={
sideBySide ? "outlined" : preview ? "normal" : "outlined"
}
onClick={() => {
setSideBySide(false);
setPreview(true);
}}
>
Preview
</Button>
<Button
title="Side By Side"
size="smaller"
color={sideBySide ? "primary" : "gray"}
variant={sideBySide ? "normal" : "outlined"}
onClick={() => {
setSideBySide(true);
}}
>
Side By Side
</Button>
</Border>
);
}