litium-react-field-editor
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

CircleCI

LitiumReactFieldEditor

A component to render Litium custom field in React.

Installation

yarn add litium-react-field-editor --dev

or using npm:

npm install litium-react-field-editor --save-dev

Live demo:

https://storiesofmyfield.tonnguyen.com/?path=/story/react-text--text

Usage

For a working example, check Litium Field type collection for the sample React text component

The library provides the component <react-field-editor /> which should be used in the template to render React component. Note that we still need to create and declare a Angular component, and register it in the module as described here.

What <react-field-editor /> does is, instead of having to use <field-editor /> and writing your component in Angular, you can use <react-field-editor /> component which wraps your React component and make it run inside Angular's context. Below is the template of the component you should create:

<react-field-editor
    [fieldEditor]="fieldEditor"
    [previewComponent]="previewComponent"
    [editComponent]="editComponent"
></react-field-editor>

And the .ts file:

import { BaseFieldEditor } from 'litium-ui';
import { Text } from './react-text'; // import the React component from react-text.tsx
import {
    ChangeDetectionStrategy,
    ChangeDetectorRef,
    Component,
    } from '@angular/core';

@Component({
    selector: 'field-editor-react-text',
    templateUrl: './field-editor-react-text.component.html',
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class FieldEditorReactText extends BaseFieldEditor {
    previewComponent = Text; // declare the React component to be used in preview mode
    editComponent = Text; // declare the React component to be used in edit mode

    constructor(changeDetectorRef: ChangeDetectorRef) {
        super(changeDetectorRef);
    }

    get fieldEditor() : BaseFieldEditor {
        return this;
    }
}

The only thing we need to replace here is the reference to the React component. Here is the sample Text component, written in React:

import * as React from "react";

export const Text = ({ name, value, editable, valueChange }) => {
    return (
        <>
            {!editable && <div>{ value || '' }</div>}
            {editable && <input id={name} type='text' value={value || ''} onChange={(event) => valueChange(event.target.value)} />}
        </>
    );
};

The React component will be passed the value, editable and valueChange callback which should be used to render and to notify when the value changes.

Readme

Keywords

none

Package Sidebar

Install

npm i litium-react-field-editor

Weekly Downloads

0

Version

1.0.2

License

MIT

Unpacked Size

78.9 kB

Total Files

26

Last publish

Collaborators

  • tonnguyen