UNPKG

dtable-utils

Version:

dtable common utils

390 lines (382 loc) 13.2 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _typeof = require('@babel/runtime/helpers/typeof'); var cellValue = require('../cell-value-get/cell-value.js'); var option = require('../cell-value-get/option.js'); var core = require('../link/core.js'); var common = require('../common.js'); var limit = require('../constants/limit.js'); var cellType = require('../constants/cell-type.js'); var column = require('../table/column.js'); var number = require('../cell-value-set/number.js'); var checkbox = require('../cell-value-set/checkbox.js'); var date = require('../cell-value-set/date.js'); var singleSelect = require('../cell-value-set/single-select.js'); var multipleSelect = require('../cell-value-set/multiple-select.js'); var longText = require('../cell-value-set/long-text.js'); var image = require('../cell-value-set/image.js'); var geolocation = require('../cell-value-set/geolocation.js'); var duration = require('../cell-value-set/duration.js'); require('dayjs'); require('../constants/column.js'); require('../constants/formula.js'); var collaborator = require('../cell-value-get/collaborator.js'); require('../constants/group.js'); require('../date.js'); require('../constants/filter/filter-column-options.js'); require('../constants/filter/filter-modifier.js'); require('../constants/filter/filter-predicate.js'); require('../constants/filter/filter-is-within.js'); require('../constants/sort.js'); var file = require('../column/file.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof); /** * Convert row * e.g. { '0000': 'a' } to { 'Name': 'a' } * @param {object} row * @param {object} value e.g. { links, ... } * @param {object} table e.g. { _id, columns, ... } * @param {object} view e.g. { hidden_columns, ... } * @param {object} formulaResults computed value of formula, link-formula, link etc. * @param {bool} convertLinkID use to convert link: get linked from formulaResults if true, otherwise get linked from links * @param {func} debug use to debug if supplied * @returns converted row, object */ var convertRow = function convertRow(row, value, table, view, formulaResults, convertLinkID) { var _ref = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}, debug = _ref.debug; var result = {}; // eslint-disable-next-line if (row.hasOwnProperty('_id')) { result._id = row._id; } // eslint-disable-next-line if (row.hasOwnProperty('_mtime')) { result._mtime = row._mtime; } // eslint-disable-next-line if (row.hasOwnProperty('_ctime')) { result._ctime = row._ctime; } var columns = table.columns; if (columns.length > limit.CONVERT_ROW_COLUMNS_LIMIT) { columns = columns.slice(0, limit.CONVERT_ROW_COLUMNS_LIMIT); } var hiddenColumns = view ? view.hidden_columns : null; for (var i = 0; i < columns.length; i++) { var column = columns[i]; var key = column.key, type = column.type, columnName = column.name; if (hiddenColumns && hiddenColumns.includes(key)) { continue; } var cellValue$1 = row[key]; switch (type) { case cellType.CellType.SINGLE_SELECT: { if (!column.data) { if (debug) { debug('No options found'); } break; } result[columnName] = option.getColumnOptionNameById(column, cellValue$1); break; } case cellType.CellType.MULTIPLE_SELECT: { if (!column.data) { if (debug) { debug('No options found'); } break; } if (!Array.isArray(cellValue$1)) { result[columnName] = ''; break; } var optionNames = []; for (var optionIndex = 0; optionIndex < cellValue$1.length; optionIndex++) { var optionName = option.getColumnOptionNameById(column, cellValue$1[optionIndex]); if (optionName) { optionNames.push(optionName); } } result[columnName] = optionNames; break; } case cellType.CellType.DATE: { var timeTextWithoutTimezone = cellValue$1 ? cellValue$1.replace(/([+-]\d{2}:?\d{2})|Z$/g, '') : ''; var format = column.data && column.data.format; result[columnName] = date.formatTextToDate(timeTextWithoutTimezone, format); break; } case cellType.CellType.LONG_TEXT: { result[columnName] = cellValue$1 && _typeof__default["default"](cellValue$1) === 'object' ? cellValue$1.text : cellValue$1 || ''; break; } case cellType.CellType.LINK: { if (!column.data) { if (debug) { debug('No links found'); } break; } // convertLinkID to display value if (convertLinkID) { // get values form formulaResults var formulaRow = formulaResults && formulaResults[row._id]; var cellResult = formulaRow && formulaRow[key]; if (!Array.isArray(cellResult) || cellResult.length === 0) { result[columnName] = null; break; } // linked with common column: // cellResult // [ // {row_id: '', displayValue: ''}, // {row_id: '', displayValue: ''}, // ] // linked with formula column and formula result is array // cellResult // [ // {row_id: '', display_value: []}, // {row_id: '', display_value: []}, // ] result[columnName] = cellResult; break; } var tableID = table._id; var _column$data = column.data, link_id = _column$data.link_id, table_id = _column$data.table_id, other_table_id = _column$data.other_table_id, is_linked_back = _column$data.is_linked_back; var otherTableID = tableID === table_id ? other_table_id : table_id; var links = value.links; result[columnName] = core.getLinkCellValue({ links: links, link_id: link_id, is_linked_back: is_linked_back, table1_id: tableID, table2_id: otherTableID, row_id: row._id }); break; } case cellType.CellType.FORMULA: case cellType.CellType.LINK_FORMULA: { if (!column.data || !formulaResults) { if (debug) { debug('No formula found'); } break; } var _formulaRow = formulaResults[row._id] || {}; result[columnName] = cellValue.getFormulaDisplayString(_formulaRow[key], column.data); break; } default: { // text/email/url/auto-number/ // check/ // rate/duration/ // file/image/button/ // translate in dtable-events // number/ // ctime/mtime/ // geolocation/ // collaborator/creator/last-modifier/ result[columnName] = cellValue$1; } } if (common.isEmpty(result[columnName])) { delete result[columnName]; } } return result; }; var convertRowBack = function convertRowBack(row, table) { var collaborators = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var result = {}; // eslint-disable-next-line no-restricted-syntax for (var key in row) { var cellValue = row[key]; if (key === '_id') { result['_id'] = cellValue; continue; } var column$1 = column.getTableColumnByName(table, key); if (!column$1) { continue; } switch (column$1.type) { case cellType.CellType.TEXT: if (cellValue == null) { result[column$1.key] = ''; break; } result[column$1.key] = (cellValue + '').slice(0, limit.TEXT_CELL_VALUE_LIMIT); break; case cellType.CellType.EMAIL: case cellType.CellType.URL: result[column$1.key] = cellValue == null ? '' : cellValue + ''; break; case cellType.CellType.NUMBER: result[column$1.key] = number.formatTextToNumber(cellValue); break; case cellType.CellType.CHECKBOX: result[column$1.key] = checkbox.formatTextToCheckbox(cellValue); break; case cellType.CellType.DATE: // eslint-disable-next-line var format = column$1.data && column$1.data.format; result[column$1.key] = date.formatTextToDate(cellValue, format); break; case cellType.CellType.COLLABORATOR: // todo if (collaborators) { result[column$1.key] = collaborator.getCollaboratorEmailsByNames(cellValue, collaborators); } else { result[column$1.key] = cellValue; } break; case cellType.CellType.SINGLE_SELECT: result[column$1.key] = singleSelect.formatTextToSingleOption(cellValue, column$1); break; case cellType.CellType.MULTIPLE_SELECT: if (!cellValue) { result[column$1.key] = null; break; } if (Array.isArray(cellValue)) { result[column$1.key] = multipleSelect.formatValueToMultipleOption(cellValue, column$1); break; } if (typeof cellValue === 'string') { if (!cellValue.trim()) { result[column$1.key] = null; } else { result[column$1.key] = multipleSelect.formatTextToMultipleOption(cellValue, column$1); } break; } result[column$1.key] = null; break; case cellType.CellType.LONG_TEXT: // eslint-disable-next-line var text = cellValue; if (!text) { result[column$1.key] = null; break; } if (_typeof__default["default"](text) === 'object') { result[column$1.key] = text; break; } if (typeof text === 'string') { if (!text.trim()) { result[column$1.key] = null; } else { result[column$1.key] = longText.formatTextToLongText(text); } break; } result[column$1.key] = null; break; case cellType.CellType.IMAGE: if (!cellValue) { result[column$1.key] = null; break; } if (Array.isArray(cellValue)) { result[column$1.key] = cellValue; break; } if (typeof cellValue === 'string') { if (!cellValue.trim()) { result[column$1.key] = null; } else { result[column$1.key] = image.formatTextToImage(cellValue); } break; } result[column$1.key] = null; break; case cellType.CellType.FILE: if (!cellValue) { result[column$1.key] = null; break; } // add data from api if (Array.isArray(cellValue)) { var fileValue = cellValue.filter(function (value) { return file.isFileValue(value); }); result[column$1.key] = fileValue.length > 0 ? fileValue : null; break; } // add data form other app if (typeof cellValue === 'string') { result[column$1.key] = null; break; } result[column$1.key] = null; break; // don't support link/formula/digital-sign column convertRowBack case cellType.CellType.LINK: case cellType.CellType.FORMULA: case cellType.CellType.LINK_FORMULA: { result[column$1.key] = null; break; } case cellType.CellType.DIGITAL_SIGN: if (!cellValue) { result[column$1.key] = null; break; } if (_typeof__default["default"](cellValue) === 'object') { result[column$1.key] = cellValue; break; } result[column$1.key] = null; break; case cellType.CellType.GEOLOCATION: if (!cellValue) { result[column$1.key] = null; break; } if (_typeof__default["default"](cellValue) === 'object') { result[column$1.key] = cellValue; break; } if (typeof cellValue === 'string') { if (!cellValue.trim()) { result[column$1.key] = null; } else { result[column$1.key] = geolocation.formatTextToGeolocation(cellValue, column$1.data); } break; } result[column$1.key] = null; break; case cellType.CellType.DURATION: { result[column$1.key] = duration.formatTextToDuration(cellValue, column$1.data); break; } default: result[column$1.key] = cellValue; } } return result; }; exports.convertRow = convertRow; exports.convertRowBack = convertRowBack;