UNPKG

dtable-utils

Version:

dtable common utils

304 lines (296 loc) 11.4 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); var column = require('../table/column.js'); var row = require('../table/row.js'); var core$1 = require('../row/core.js'); var option = require('../column/option.js'); var geolocation = require('../cell-value-get/geolocation.js'); var filter = require('../validate/filter.js'); var core = require('../filter/core.js'); var filterRow = require('../filter/filter-row.js'); var rowColor = require('../constants/row-color.js'); var cellType = require('../constants/cell-type.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var isValidRowColorRule = function isValidRowColorRule(rule, columns) { var filters = rule.filters; if (!filters || filters.length === 0) return false; return filters.some(function (filter$1) { return !filter.ValidateFilter.validate(filter$1, columns).error_message; }); }; var getValidRowColorRules = function getValidRowColorRules(colorRules, columns) { return colorRules.filter(function (colorRule) { return isValidRowColorRule(colorRule, columns); }); }; var getOptionIdMap = function getOptionIdMap(options) { if (!Array.isArray(options) || options.length === 0) return {}; var optionsMap = {}; options.forEach(function (option) { optionsMap[option.id] = true; }); return optionsMap; }; var getFormattedDuplicateColumns = function getFormattedDuplicateColumns(columns, duplicateColumnKeys, _ref) { var collaborators = _ref.collaborators; var formattedColumns = []; var _loop = function _loop() { var key = duplicateColumnKeys[i]; var currColumn = columns.find(function (column) { return column.key === key; }); if (!currColumn) return 0; // continue var type = currColumn.type, data = currColumn.data; var formattedColumnData = data; if (!rowColor.SUPPORT_CHECKING_DUPLICATE_COLUMNS_TYPES.includes(type)) return 0; // continue if (type === cellType.CellType.SINGLE_SELECT || type === cellType.CellType.MULTIPLE_SELECT) { var options = option.getColumnOptions(currColumn); formattedColumnData = getOptionIdMap(options); } else if (type === cellType.CellType.COLLABORATOR) { var optionsMap = {}; if (Array.isArray(collaborators)) { collaborators.forEach(function (collaborator) { optionsMap[collaborator.email] = true; }); } formattedColumnData = optionsMap; } formattedColumns.push({ key: key, type: type, data: formattedColumnData }); }, _ret; for (var i = 0; i < duplicateColumnKeys.length; i++) { _ret = _loop(); if (_ret === 0) continue; } return formattedColumns; }; var getDuplicateRowValue = function getDuplicateRowValue(row, columns, formulaRow) { if (!row) return ''; var rowValue = columns.map(function (column) { var type = column.type, data = column.data, key = column.key; var cellValue = row[key]; switch (type) { case cellType.CellType.SINGLE_SELECT: { return data[cellValue] ? cellValue : ''; } case cellType.CellType.MULTIPLE_SELECT: case cellType.CellType.COLLABORATOR: { if (!Array.isArray(cellValue) || cellValue.length === 0) return ''; return cellValue.filter(function (item) { return data[item]; }).sort().join(''); } case cellType.CellType.GEOLOCATION: { if (!cellValue) return ''; return geolocation.getGeolocationDisplayString(cellValue, data) || ''; } case cellType.CellType.NUMBER: { if (!cellValue && cellValue !== 0) return ''; return cellValue; } case cellType.CellType.FORMULA: { if (!formulaRow) return ''; cellValue = formulaRow[key]; return cellValue; } default: { return cellValue || ''; } } }).join('_seatable_join_key_'); if (!rowValue) return ''; if (typeof ''.replaceAll !== 'function') { // eslint-disable-next-line String.prototype.replaceAll = function (s1, s2) { return this.replace(new RegExp(s1, 'gm'), s2); }; } if (!rowValue.replaceAll('_seatable_join_key_', '')) return ''; return rowValue; }; var getRowsColorBySingleSelectColumn = function getRowsColorBySingleSelectColumn(rows, columnKey, table) { var colors = {}; var column$1 = column.getTableColumnByKey(table, columnKey); var options = option.getColumnOptions(column$1); if (!Array.isArray(options) || options.length === 0) return {}; var option_id_color_map = {}; options.forEach(function (option) { option_id_color_map[option.id] = option.color; }); rows.forEach(function (row) { var optionId = row[columnKey]; var color = optionId ? option_id_color_map[optionId] : ''; if (color) { colors[row._id] = color; } }); return colors; }; var getRowsColorByRules = function getRowsColorByRules(rows, view, table) { var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, username = _ref2.username, userId = _ref2.userId, userDepartmentIdsMap = _ref2.userDepartmentIdsMap; var formula_rows = view.formula_rows, colorbys = view.colorbys; var _ref3 = colorbys || {}, type = _ref3.type, color_by_rules = _ref3.color_by_rules; if (type !== rowColor.ROW_COLOR_TYPE.BY_RULES) return {}; var columns = table.columns; var validColorRules = getValidRowColorRules(color_by_rules, columns); var colorRulesLen = validColorRules.length; var colors = {}; if (colorRulesLen === 0) return {}; validColorRules = validColorRules.map(function (colorRule) { var filters = colorRule.filters; var validFilters; try { validFilters = core.deleteInvalidFilter(filters, columns); } catch (err) { validFilters = []; } validFilters = core.getFormattedFilters(validFilters); return _objectSpread(_objectSpread({}, colorRule), {}, { filters: validFilters }); }); rows.forEach(function (row) { var rowId = row._id; var formulaRow = formula_rows && formula_rows[rowId] || {}; for (var i = 0; i < colorRulesLen; i++) { var colorRule = validColorRules[i]; var color = colorRule.color, filter_conjunction = colorRule.filter_conjunction, filters = colorRule.filters; if (filterRow.filterRow(row, filter_conjunction, filters, { formulaRow: formulaRow, username: username, userId: userId, userDepartmentIdsMap: userDepartmentIdsMap })) { colors[rowId] = color; break; } } }); return colors; }; var getRowsColorByDuplicateValues = function getRowsColorByDuplicateValues(rows, view, table, _ref4) { var collaborators = _ref4.collaborators; var colorbys = view.colorbys, formula_rows = view.formula_rows; var color_by_duplicate_column_keys = colorbys.color_by_duplicate_column_keys; if (!Array.isArray(color_by_duplicate_column_keys) || color_by_duplicate_column_keys.length === 0) return {}; var columns = table.columns; var formattedColumns = getFormattedDuplicateColumns(columns, color_by_duplicate_column_keys, { collaborators: collaborators }); if (formattedColumns.length === 0) return {}; var colors = {}; var duplicate_rows_ids_map = {}; // row value: [ row_id ] for (var i = 0; i < rows.length; i++) { var row = rows[i]; var rowId = row._id; var formulaRow = formula_rows && formula_rows[rowId]; var rowValue = getDuplicateRowValue(row, formattedColumns, formulaRow); if (!rowValue) continue; var validRowIds = duplicate_rows_ids_map[rowValue]; if (validRowIds && validRowIds.length > 0) { colors[rowId] = rowColor.ROW_COLOR_FOR_DUPLICATE_VALUES; validRowIds.push(rowId); var firstDuplicateRowId = validRowIds[0]; if (!colors[firstDuplicateRowId]) { colors[firstDuplicateRowId] = rowColor.ROW_COLOR_FOR_DUPLICATE_VALUES; } } else { duplicate_rows_ids_map[rowValue] = [rowId]; } } return { colors: colors, duplicate_rows_ids_map: duplicate_rows_ids_map }; }; /** * Calculate rows color. * @param {array} rows * @param {object} view * @param {object} table e.g. { id_row_map, ... } * @param {object} value e.g. { tables, collaborators, ... } * @param {string} username * @param {string} userId * @param {object} userDepartmentIdsMap * @returns rows color, object */ var getRowsColor = function getRowsColor(rows, view, table, value) { var _ref5 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}, username = _ref5.username, userId = _ref5.userId, userDepartmentIdsMap = _ref5.userDepartmentIdsMap; var colorbys = view.colorbys; if (!colorbys) return {}; var tableRows = core$1.isTableRows(rows) ? rows : row.getRowsByIds(table, rows); if (tableRows.length === 0) return {}; var type = colorbys.type, color_by_column = colorbys.color_by_column; switch (type) { case rowColor.ROW_COLOR_TYPE.BY_COLUMN: { return { colors: getRowsColorBySingleSelectColumn(tableRows, color_by_column, table) }; } case rowColor.ROW_COLOR_TYPE.BY_RULES: { return { colors: getRowsColorByRules(tableRows, view, table, { username: username, userId: userId, userDepartmentIdsMap: userDepartmentIdsMap }) }; } case rowColor.ROW_COLOR_TYPE.BY_DUPLICATE_VALUES: { var _ref6 = value || {}, _ref6$collaborators = _ref6.collaborators, collaborators = _ref6$collaborators === void 0 ? [] : _ref6$collaborators; return getRowsColorByDuplicateValues(tableRows, view, table, { collaborators: collaborators }); } default: { return {}; } } }; var RowColorUtils = { isValidRowColorRule: isValidRowColorRule, getValidRowColorRules: getValidRowColorRules, getRowsColor: getRowsColor, getFormattedDuplicateColumns: getFormattedDuplicateColumns, getDuplicateRowValue: getDuplicateRowValue, getRowsColorBySingleSelectColumn: getRowsColorBySingleSelectColumn, getRowsColorByRules: getRowsColorByRules, getRowsColorByDuplicateValues: getRowsColorByDuplicateValues }; exports["default"] = RowColorUtils;