dtable-utils
Version:
dtable common utils
390 lines (382 loc) • 13.1 kB
JavaScript
;
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 ? cellValue$1.text : '';
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;