import { FlatList, Image, TouchableOpacity, StyleSheet, Platform, View, } from 'react-native'; import { useBridgeState } from '../useBridgeState'; import React from 'react'; import { DEFAULT_TOOLBAR_ITEMS, HEADING_ITEMS, type ToolbarItem, } from './actions'; import { EditLinkBar } from './EditLinkBar'; import { useKeyboard } from '../../utils'; import type { EditorBridge } from '../../types'; interface ToolbarProps { editor: EditorBridge; hidden?: boolean; items?: ToolbarItem[]; } export const toolbarStyles = StyleSheet.create({}); export enum ToolbarContext { Main, Link, Heading, } export function Toolbar({ editor, hidden = undefined, items = DEFAULT_TOOLBAR_ITEMS, }: ToolbarProps) { const editorState = useBridgeState(editor); const { isKeyboardUp } = useKeyboard(); const [toolbarContext, setToolbarContext] = React.useState( ToolbarContext.Main ); const hideToolbar = hidden === undefined ? !isKeyboardUp || !editorState.isFocused : hidden; const args = { editor, editorState, setToolbarContext, toolbarContext, }; switch (toolbarContext) { case ToolbarContext.Main: case ToolbarContext.Heading: return ( { return ( ); }} horizontal /> ); case ToolbarContext.Link: return ( setToolbarContext(ToolbarContext.Main)} onLinkIconClick={() => { setToolbarContext(ToolbarContext.Main); editor.focus(); }} onEditLink={(link) => { editor.setLink(link); editor.focus(); if (Platform.OS === 'android') { // On android we dont want to hide the link input before we finished focus on editor // Add here 100ms and we can try to find better solution later setTimeout(() => { setToolbarContext(ToolbarContext.Main); }, 100); } else { setToolbarContext(ToolbarContext.Main); } }} /> ); } }