Home Reference Source

src/components/panel/editForm/Panel.edit.conditional.js

import EditFormUtils from '../../_classes/component/editForm/utils';
import _isEqual from 'lodash/isEqual';
import _omit from 'lodash/omit';
import _difference from 'lodash/difference';
import _keys from 'lodash/keys';
/* eslint-disable quotes, max-len */
const title = 'Advanced Next Page';
const jsonProp = 'nextPage';
const jsProp = 'nextPage';
const jsDocHTML = (`
  <p>You must assign the <strong>next</strong> variable with the API key of the next page.</p>
  <p>The global variable <strong>data</strong> is provided, and allows you to access the data of any form component, by using its API key.</p>
  <p>Also <strong>moment</strong> library is available, and allows you to manipulate dates in a convenient way.</p>
  <h5>Example</h5><pre>next = data.addComment ? 'page3' : 'page4';</pre>
`);
const jsonDocHTML = (`
  <p>Submission data is available as JsonLogic variables, with the same api key as your components.</p>
`);

const settingComponent = EditFormUtils.javaScriptValue(
  title,
  jsProp,
  jsonProp,
  110,
  jsDocHTML,
  jsonDocHTML
);

export default [
  {
    ...settingComponent,
    customConditional(context) {
      let isWizardPanel = false;
      if (context.instance.options.editForm.display === 'wizard') {
        const { components } = context.instance.options.editForm;
        const component = context.instance.options.editComponent;
        if (components && component) {
          isWizardPanel = components.some((comp) => {
            const diff = _difference(_keys(comp), _keys(component)) || [];
            diff.push('components');
            return _isEqual(_omit(comp, diff), _omit(component, diff));
          });
        }
      }
      return isWizardPanel;
    }
  }
];
/* eslint-enable quotes, max-len */