import React, { forwardRef, RefObject, Ref, ReactNode } from 'react'; import { SchemaForUI, isTextSchema, isImageSchema, isBarcodeSchema } from '@pdfme/common'; import { ZOOM, SELECTABLE_CLASSNAME } from '../../constants'; import TextSchema from './TextSchema'; import ImageSchema from './ImageSchema'; import BarcodeSchema from './BarcodeSchema'; export interface SchemaUIProps { schema: SchemaForUI; editable: boolean; onChange: (value: string) => void; tabIndex?: number; placeholder?: string; } type Props = SchemaUIProps & { border: string; onChangeHoveringSchemaId?: (id: string | null) => void; }; const Wrapper = ({ children, border, onChangeHoveringSchemaId, schema, }: Props & { children: ReactNode }) => (
onChangeHoveringSchemaId && onChangeHoveringSchemaId(schema.id)} onMouseLeave={() => onChangeHoveringSchemaId && onChangeHoveringSchemaId(null)} className={SELECTABLE_CLASSNAME} id={schema.id} style={{ position: 'absolute', cursor: 'pointer', height: schema.height * ZOOM, width: schema.width * ZOOM, top: schema.position.y * ZOOM, left: schema.position.x * ZOOM, border, }} > {children}
); const SchemaUI = (props: Props, ref: Ref) => { const r = { [props.editable ? 'ref' : '']: ref as RefObject, }; const { schema } = props; return ( {isTextSchema(schema) && } {isImageSchema(schema) && } {isBarcodeSchema(schema) && } ); }; export default forwardRef(SchemaUI);