Source: app/util/medicalAndDietUtils.js

import composeCheckboxesToBitwise from '../enhanced-redux-form/compositeInputFormatters/composeCheckboxesToBitwise';
import { getKeyByValue } from './objectUtils';

/**
 *
 * @param data
 * @param dataFieldsToString
 * @returns {{values: (*|Array), formattedValue: (*|Array|number)}}
 */
export const getCheckBoxValues = (data, dataFieldsToString) => {
  const values =
    data &&
    Object.keys(data).reduce((result, fieldName) => {
      const value = getKeyByValue(dataFieldsToString, fieldName);
      if (value && data[fieldName]) {
        // eslint-disable-next-line no-param-reassign
        result[value] = value.toString();
      }

      return result;
    }, []);

  const formattedValue = composeCheckboxesToBitwise(values);

  return {
    values,
    formattedValue,
  };
};

/**
 *
 * @param values
 * @param dataFields
 * @param dataFieldsToString
 * @returns {{}}
 */
export const setCheckboxValues = (values, dataFields, dataFieldsToString) =>
  Object.values(dataFields).reduce((result, fieldName) => {
    if (values.includes(fieldName)) {
      // eslint-disable-next-line no-param-reassign
      result[dataFieldsToString[fieldName]] = true;
    } else if (typeof dataFieldsToString[fieldName] !== 'undefined') {
      // eslint-disable-next-line no-param-reassign
      result[dataFieldsToString[fieldName]] = false;
    }

    return result;
  }, {});