Customize Draggable Fields

Customize the draggable field options for field creation in the left panel

Overview

You can define custom draggable field options for your users. This allows you to preconfigure fields with styles, settings, and any other property supported by the JoyDoc Spec. When your user drags and drops on of your pre-configured fields onto the page, that field will have the properties pre-set when the field is created.

You can use any of the JoyDoc JSON supported properties on your list of custom fieldOptions.

Examples

const fieldOptions = [...]

return (
  <JoyDoc
    mode="edit"
    fieldOptions={fieldOptions}
  />
)
  const fieldOptions = [...];
  
  Joyfill.JoyDoc(
    document.getElementById("joyfill"),
    {
      mode: "edit",
      fieldOptions: fieldOptions
    }
  )

Customize

You can customize the list of available draggable options within the Joyfill Builder by providing your own JS Objects in the list. For instance, in the example below we define some pre-configured styles (fontColor, fontWeight, and fontSize) and an identifier to be used when the field is created. When a user drags and drops your custom pre-configured fields onto the page it will have these properties set by default.

const fieldOptions = [
    {
      title: 'Customer Name',
      type: 'text',
      displayType: 'original',
      identifier: 'custom_customer_name',
      fontColor: '#0096FF',
      fontWeight: 'bold',
    },
    {
      title: 'Customer Signature',
      type: 'signature',
      displayType: 'original',
      identifier: 'custom_customer_signature',
      fontSize: 22
    },
    ...
]

Group Fields

You can group field options into a collapsable accordion by using the fieldGroup type in the field option list and nesting your field objects under the fields property of the field group. This is a great tool for organizing the field options list, especially if you have a lot of custom fields.

const fieldOptions = [
  {
    type: 'fieldGroup',
    title: 'Custom Fields',
    open: false,
    fields: [
      {
        title: 'Grouped Text',
        type: 'text',
        displayType: 'original',
      },
      {
        title: 'Grouped Multiline Text',
        type: 'textarea',
        displayType: 'original',
      },
      ...
    ],
   },
   ...
 ]

Joyfill Default Draggable Fields

Below is the default list of JS Objects used by Joyfill internally to define our standard list of draggable field options. You can add to this list, customize it, and do whatever you need to provide the proper experience to your customers.

In the example below, the generateObjectId method is provided by the Joyfill Components Module as an export. You can use it to generate a valid _id . See guide Generating Object Ids.

  const fieldOptions = [
    {
      title: 'Image',
      type: 'image',
      displayType: 'original',
    },
    {
      title: 'File',
      type: 'file',
      displayType: 'original',
    },
    {
      title: 'Heading Text',
      type: 'block',
      displayType: 'original',
      value: 'Heading',
      fontSize: 28,
      fontWeight: 'bold',
    },
    {
      title: 'Display Text',
      type: 'block',
      displayType: 'original',
      value: 'Display text',
    },
    {
      title: 'Empty Space',
      type: 'block',
      displayType: 'original',
      borderColor: 'transparent',
      backgroundColor: 'transparent',
    },
    {
      title: 'Text',
      type: 'text',
      displayType: 'original',
    },
    {
      title: 'Multiline Text',
      type: 'textarea',
      displayType: 'original',
    },
    {
      title: 'Number',
      type: 'number',
      displayType: 'original',
    },
    {
      title: 'Date Time',
      type: 'date',
      displayType: 'original',
      format: 'MM/DD/YYYY hh:mma'
    },
    {
      title: 'Dropdown',
      type: 'dropdown',
      displayType: 'original',
      options: [
        { _id: generateObjectId(), value: 'Yes' },
        { _id: generateObjectId(), value: 'No' },
        { _id: generateObjectId(), value: 'N/A' },
      ],

    },
    {
      title: 'Multiple Choice',
      type: 'multiSelect',
      multi: true,
      displayType: 'original',
      options: [
        { _id: generateObjectId(), value: 'Yes' },
        { _id: generateObjectId(), value: 'No' },
        { _id: generateObjectId(), value: 'N/A' },
      ],
    },
    {
      title: 'Single Choice',
      type: 'multiSelect',
      multi: false,
      displayType: 'original',
      options: [
        { _id: generateObjectId(), value: 'Yes' },
        { _id: generateObjectId(), value: 'No' },
        { _id: generateObjectId(), value: 'N/A' },
      ],
    },
    {
      title: 'Signature',
      type: 'signature',
      displayType: 'original',
    },
    {
      title: 'Table',
      type: 'table',
      displayType: 'original',
      tableColumns: [
        {
          _id: generateObjectId(),
          type: 'text',
          title: 'Text Column',
        },
        {
          _id: generateObjectId(),
          type: 'dropdown',
          title: 'Dropdown Column',
          options: [
            { _id: generateObjectId(), value: 'Yes' },
            { _id: generateObjectId(), value: 'No' },
            { _id: generateObjectId(), value: 'N/A' },
          ],
        },
        {
          _id: generateObjectId(),
          type: 'image',
          title: 'Image Column',
          maxImageWidth: 190,
          maxImageHeight: 120,
        },
      ],
      value: [
        { _id: generateObjectId(), cells: {} },
        { _id: generateObjectId(), cells: {} },
        { _id: generateObjectId(), cells: {} },
      ],
    },
    {
      title: 'Chart',
      type: 'chart',
      displayType: 'original',
      primaryDisplayOnly: true,
      yTitle: 'Vertical',
      yMax: 100,
      yMin: 0,
      xTitle: 'Horizontal',
      xMax: 100,
      xMin: 0,
    }
  ];