import React, { useMemo } from 'react';
import {
Image,
ScrollView,
Text,
TouchableOpacity,
View,
type ColorValue,
} from 'react-native';
import { EditorHelper, useRemoteEditorBridge } from '../EditorHelper';
import { CustomKeyboardExtension } from './CustomKeyboardExtension';
import { Images } from '../../assets';
import type { Color, EditorTheme } from '../../types';
const ColorKeyboardComp = () => {
const editor = useRemoteEditorBridge();
const activeColor = editor?.getEditorState().activeColor;
const activeHighlight = editor?.getEditorState().activeHighlight;
const theme = editor?.theme;
const setColor = (color?: ColorValue) => {
if (!EditorHelper.editorLastInstance) return;
if (color) EditorHelper.editorLastInstance.setColor(color.toString());
else EditorHelper.editorLastInstance.unsetColor();
EditorHelper.editorLastInstance.focus();
};
const setHighlight = (color?: ColorValue) => {
if (!EditorHelper.editorLastInstance) return;
if (color) EditorHelper.editorLastInstance.setHighlight(color.toString());
else EditorHelper.editorLastInstance.unsetHighlight();
EditorHelper.editorLastInstance.focus();
};
const groupedTextColors = useMemo(
() => groupInChunks(theme?.colorKeyboard.colorSelection || [], 3),
[theme?.colorKeyboard.colorSelection]
);
const groupedHighlightColors = useMemo(
() => groupInChunks(theme?.colorKeyboard.highlightSelection || [], 3),
[theme?.colorKeyboard.highlightSelection]
);
return (
Color
{groupedTextColors.map((colorRow) => {
return (
);
})}
Highlight
{groupedHighlightColors.map((colorRow) => {
return (
);
})}
);
};
interface ColorRowProps {
colors: Color[];
theme?: EditorTheme;
onPress: (color?: ColorValue) => void;
activeColor?: string;
icon?: boolean;
}
const ColorRow = ({
theme,
colors,
onPress,
activeColor,
icon,
}: ColorRowProps) => {
return (
{colors.map((color) => (
onPress(color.value)}
color={color}
isActive={
color.value === activeColor || (!color.value && !activeColor)
}
theme={theme}
icon={icon}
/>
))}
);
};
interface ColorButtonProps {
onPress: () => void;
color: Color;
isActive: boolean;
theme?: EditorTheme;
icon?: boolean;
}
const ColorButton = ({
theme,
onPress,
color,
isActive,
icon,
}: ColorButtonProps) => (
{icon && (
)}
{!icon && (
)}
{color.name}
);
function groupInChunks(array: T[], chunkSize: number): T[][] {
let result = [];
for (let i = 0; i < array.length; i += chunkSize) {
result.push(array.slice(i, i + chunkSize));
}
return result;
}
export const ColorKeyboard = new CustomKeyboardExtension(
'keyboard.color',
ColorKeyboardComp
);