0.0.4 • Published 1 year ago

antd-form-json v0.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Install

npm install antd-form-json
yarn add antd-form-json

Preview Storybook

Usage

import { useState } from 'react';
import { FormJson, ETypes } from 'antd-form-json';
import type { IFormItem } from 'antd-form-json';

const App = () => {
  const [formStates, setFormStates] = useState<IFormItem[]>([
    {
      name: 'mikasa',
      value: '',
      id: '1',
      type: ETypes.Object,
      children: [
        {
          name: 'name',
          value: 'Ackerman',
          id: '2',
          type: ETypes.String,
          children: [],
        },
        {
          name: 'height',
          value: 170,
          id: '4',
          type: ETypes.Number,
          children: [],
        },
        {
          name: 'hobby',
          value: 170,
          id: '5',
          type: ETypes.Array,
          children: [
            {
              name: '',
              value: 'kill Alen',
              id: '6',
              type: ETypes.String,
              children: [],
            },
          ],
        },
      ],
    },
    {
      name: 'isAlenSb',
      value: true,
      id: '3',
      type: ETypes.Boolean,
      children: [],
    },
  ]);
  return (
    <div>
      <FormJson formStates={formStates} setFormStates={setFormStates} />
    </div>
  )
}

API

PropertyDescriptionTypeDefaultRequired
formStatesThe initial stateIFormItem[]
setFormStatesDispatch actionsDispatch"<"SetStateAction"<"IFormItem[]">"">"
indentIndent size in pixels of tree datanumber16
spansThe span of grid between each element for every linenumber[]8,5,8,3
containerClassNameThe container classstring
itemClassNameThe class for each line's containerstring
onAddChildrenA callback function, can be executed when clicking to the plus children iconOnStateCurd
onAddSiblingA callback function, can be executed when clicking to the plus iconOnStateCurd
onDeleteItemA callback function, can be executed when clicking to the delete iconOnStateCurd
onStateChangeA callback function, can be executed when the input element's value has been changedOnStateChange

Hooks

useJsonStates

type useJsonStates = (formStates: IFormItem[]) => Object

return the memorized json object from formStates.

usage

import { useState } from 'react';
import { FormJson, useJsonStates } from 'antd-form-json';
import type { IFormItem, ETypes } from 'antd-form-json';

const App = () => {
  const [formStates, setFormStates] = useState<IFormItem[]>([
    {
      name: 'mikasa',
      value: '',
      id: '1',
      type: ETypes.Object,
      children: [
        {
          name: 'name',
          value: 'Ackerman',
          id: '2',
          type: ETypes.String,
          children: [],
        },
        {
          name: 'height',
          value: 170,
          id: '4',
          type: ETypes.Number,
          children: [],
        },
        {
          name: 'hobby',
          value: 170,
          id: '5',
          type: ETypes.Array,
          children: [
            {
              name: '',
              value: 'kill Alen',
              id: '6',
              type: ETypes.String,
              children: [],
            },
          ],
        },
      ],
    },
    {
      name: 'isAlenSb',
      value: true,
      id: '3',
      type: ETypes.Boolean,
      children: [],
    },
  ]);
  const jsonState = useJsonStates(formStates);
  /**
   * current jsonState:
   * {
   *   mikasa: {
   *     name: "Ackerman",
   *     height: 170,
   *     hobby: ["kill Alen"]
   *   },
   *   isAlenSb: true
   * }
   * */
  return (
    <div>
      <FormJson formStates={formStates} setFormStates={setFormStates} />
    </div>
  )
}

useFormActions

type useFormActions = (props: IFormActions) => ReturnFormACtions

The CURD actions for the form which has already been binded to the form element event, maybe you could use it in other place.

Interface

IFormItem

interface IFormItem {
  name: string;                     // The Json Key
  value: string | number | boolean; // The value to the current json key
  id: string;                       // The unique key for each line
  type: string;                     // ETypes
  children: IFormItem[];            // The nested children when the type is 'array' or 'object'
}

ETypes

enum ETypes {
  String = 'string',
  Number = 'number',
  Array = 'array',
  Object = 'object',
  Boolean = 'boolean',
}

TEditField

type TEditField = Exclude<keyof IFormItem, 'id' | 'children' | 'path'>;

IFormActions

interface IFormActions extends ICallbacks {
  setFormStates: Dispatch<SetStateAction<IFormItem[]>>;
}

ICallbacks

interface ICallbacks {
  onAddChildren?: OnStateCurd;
  onAddSibling?: OnStateCurd;
  onDeleteItem?: OnStateCurd;
  onStateChange?: OnStateChange;
}

OnStateCurd

type OnStateCurd = (path: number[]) => void;

OnStateChange

type OnStateChange = (path: number[], field: TEditField, value: string | number | boolean) => void;
0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago