diff --git a/src/lib/richtext/editor-dom.tsx b/src/lib/richtext/editor-dom.tsx
index 157d696..52f0078 100644
--- a/src/lib/richtext/editor-dom.tsx
+++ b/src/lib/richtext/editor-dom.tsx
@@ -68,6 +68,7 @@ function ParagraphElement(props: RenderElementProps) {
export interface DOMEditorRef extends DOMImperativeFactory {
toggleStyle: (style: JSONValue) => void;
+ setFormat: (format: JSONValue) => void;
}
export function DOMEditor({
@@ -87,6 +88,9 @@ export function DOMEditor({
const set = (Editor.marks(editor) ?? {} as any)[style as string] as (boolean | undefined) ?? false;
Editor.addMark(editor, style as string, !set);
},
+ setFormat: (format) => {
+ Transforms.setNodes(editor, { format: format as string } as any)
+ }
};
});
diff --git a/src/lib/richtext/editor.tsx b/src/lib/richtext/editor.tsx
index 6b989df..ea95d37 100644
--- a/src/lib/richtext/editor.tsx
+++ b/src/lib/richtext/editor.tsx
@@ -2,6 +2,7 @@ import { Pressable, StyleSheet, View, ViewProps } from "react-native";
import { DOMEditor, DOMEditorRef } from "./editor-dom";
import { useRef, useState } from "react";
import FontAwesome from "@expo/vector-icons/FontAwesome";
+import { Select, SelectItem } from "@/src/components/primitive/Select";
const styles = StyleSheet.create({
toolbar: {
@@ -15,11 +16,16 @@ const styles = StyleSheet.create({
toolbarButton: {},
});
-// function FormatMenu() {
-// return
-// }
+function FormatMenu({ onSelected }: { onSelected: (format: string) => void }) {
+ return (
+
+ );
+}
function ToolbarButton({
icon,
@@ -35,13 +41,25 @@ function ToolbarButton({
);
}
-function Toolbar({ pos, toggleStyle }: { pos: [number, number]; toggleStyle: (style: string) => void }) {
+function Toolbar({
+ pos,
+ toggleStyle,
+ setFormat,
+}: {
+ pos: [number, number];
+ toggleStyle: (style: string) => void;
+ setFormat: (format: string) => void;
+}) {
return (
- toggleStyle('bold')} />
- toggleStyle('italic')} />
- toggleStyle('strike')} />
- toggleStyle('small')} />
+
+ toggleStyle("bold")} />
+ toggleStyle("italic")} />
+ toggleStyle("strike")}
+ />
+ toggleStyle("small")} />
);
}
@@ -53,19 +71,23 @@ export function RichTextEditor({
}: ViewProps & { minHeight?: number }) {
const editor = useRef(null);
const [pos, setPos] = useState<[number, number] | undefined>(undefined);
-
+
const onMoveToolbar = (rect?: DOMRect) => {
setPos(rect ? [rect.left, rect.top - rect.height - 20] : undefined);
};
const toggleStyle = (style: string) => {
- editor.current?.toggleStyle(style)
- }
+ editor.current?.toggleStyle(style);
+ };
+
+ const setFormat = (format: string) => {
+ editor.current?.setFormat(format);
+ };
return (
- {pos && }
+ {pos && }
);
}