dtable-utils
Version:
dtable common utils
279 lines (271 loc) • 9.99 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var core = require('./core.js');
var checkbox = require('./filter-column/checkbox.js');
var collaborator = require('./filter-column/collaborator.js');
var creator = require('./filter-column/creator.js');
var date$1 = require('./filter-column/date.js');
var digitalSign = require('./filter-column/digital-sign.js');
var file = require('./filter-column/file.js');
var formula = require('./filter-column/formula.js');
var geolocation = require('./filter-column/geolocation.js');
var text = require('./filter-column/text.js');
var longText = require('./filter-column/long-text.js');
var multipleSelect = require('./filter-column/multiple-select.js');
var number = require('./filter-column/number.js');
var singleSelect = require('./filter-column/single-select.js');
var link = require('./filter-column/link.js');
var departmentSingleSelect = require('./filter-column/department-single-select.js');
require('@babel/runtime/helpers/toConsumableArray');
var column = require('../constants/column.js');
require('../constants/filter/filter-predicate.js');
var index = require('../constants/filter/index.js');
var date = require('../date.js');
var cellType = require('../constants/cell-type.js');
var getFilterResult = function getFilterResult(row, filter, _ref) {
var formulaRow = _ref.formulaRow,
username = _ref.username,
userId = _ref.userId,
userDepartmentIdsMap = _ref.userDepartmentIdsMap;
var column_key = filter.column_key,
column$1 = filter.column;
var cellValue = row[column_key];
switch (column$1.type) {
case cellType.CellType.CHECKBOX:
{
return checkbox.checkboxFilter(cellValue, filter);
}
case cellType.CellType.SINGLE_SELECT:
{
return singleSelect.singleSelectFilter(cellValue, filter);
}
case cellType.CellType.MULTIPLE_SELECT:
{
return multipleSelect.multipleSelectFilter(cellValue, filter);
}
case cellType.CellType.DEPARTMENT_SINGLE_SELECT:
{
return departmentSingleSelect.departmentSingleSelectFilter(cellValue, filter, userDepartmentIdsMap);
}
case cellType.CellType.DURATION:
case cellType.CellType.NUMBER:
case cellType.CellType.RATE:
{
return number.numberFilter(cellValue, filter);
}
case cellType.CellType.DATE:
{
return date$1.dateFilter(cellValue, filter);
}
case cellType.CellType.CTIME:
case cellType.CellType.MTIME:
{
cellValue = date.DateUtils.format(cellValue, column.DATE_FORMAT_MAP.YYYY_MM_DD_HH_MM_SS);
return date$1.dateFilter(cellValue, filter);
}
case cellType.CellType.COLLABORATOR:
{
return collaborator.collaboratorFilter(cellValue, filter, username);
}
case cellType.CellType.LONG_TEXT:
{
return longText.longTextFilter(cellValue, filter);
}
case cellType.CellType.TEXT:
case cellType.CellType.AUTO_NUMBER:
case cellType.CellType.EMAIL:
case cellType.CellType.URL:
{
return text.textFilter(cellValue, filter, userId);
}
case cellType.CellType.IMAGE:
case cellType.CellType.FILE:
{
return file.fileFilter(cellValue, filter);
}
case cellType.CellType.LAST_MODIFIER:
case cellType.CellType.CREATOR:
{
return creator.creatorFilter(cellValue, filter, username);
}
case cellType.CellType.GEOLOCATION:
{
return geolocation.geolocationFilter(cellValue, filter);
}
case cellType.CellType.FORMULA:
case cellType.CellType.LINK_FORMULA:
{
if (!formulaRow) return false;
cellValue = formulaRow[column_key];
return formula.formulaFilter(cellValue, filter, {
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
}
case cellType.CellType.LINK:
{
if (!formulaRow) return false;
cellValue = formulaRow[column_key];
cellValue = Array.isArray(cellValue) ? cellValue.map(function (linked) {
return linked.display_value;
}) : null;
return link.linkFilter(cellValue, filter, {
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
}
case cellType.CellType.DIGITAL_SIGN:
{
return digitalSign.digitalSignFilter(cellValue, filter);
}
default:
{
return false;
}
}
};
/**
* Filter row
* @param {object} row e.g. { _id, .... }
* @param {string} filterConjunction e.g. 'And' | 'Or'
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
* @param {object} formulaRow
* @param {string} username
* @param {string} userId
* @param {object} userDepartmentIdsMap e.g. { current_user_department_ids: [8, 10], current_user_department_and_sub_ids: [8, 10, 12, 34] }
* @returns filter result, bool
*/
var _filterRow = function filterRow(row, filterConjunction, filters) {
var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
formulaRow = _ref2.formulaRow,
_ref2$username = _ref2.username,
username = _ref2$username === void 0 ? '' : _ref2$username,
userId = _ref2.userId,
_ref2$userDepartmentI = _ref2.userDepartmentIdsMap,
userDepartmentIdsMap = _ref2$userDepartmentI === void 0 ? {} : _ref2$userDepartmentI;
if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.AND) {
return filters.every(function (filter) {
if (core.checkIsFilterGroup(filter)) {
return _filterRow(row, filter.filter_conjunction, filter.filters, {
formulaRow: formulaRow,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
}
return getFilterResult(row, filter, {
formulaRow: formulaRow,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
});
}
if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.OR) {
return filters.some(function (filter) {
if (core.checkIsFilterGroup(filter)) {
return _filterRow(row, filter.filter_conjunction, filter.filters, {
formulaRow: formulaRow,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
}
return getFilterResult(row, filter, {
formulaRow: formulaRow,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
});
}
return false;
};
/**
* Filter rows
* @param {string} filterConjunction e.g. 'And' | 'Or'
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
* @param {array} rows e.g. [{ _id, .... }, ...]
* @param {object} formulaRows
* @param {string} username
* @param {string} userId
* @param {object} userDepartmentIdsMap e.g. { current_user_department_ids: [8, 10], current_user_department_and_sub_ids: [8, 10, 12, 34] }
* @returns filtered rows ids, array
*/
var filterRows = function filterRows(filterConjunction, filters, rows, _ref3) {
var formulaRows = _ref3.formulaRows,
username = _ref3.username,
userId = _ref3.userId,
userDepartmentIdsMap = _ref3.userDepartmentIdsMap;
var filteredRows = [];
var formattedFilters = core.getFormattedFilters(filters);
rows.forEach(function (row) {
var rowId = row._id;
var formulaRow = formulaRows ? formulaRows[rowId] : null;
if (_filterRow(row, filterConjunction, formattedFilters, {
formulaRow: formulaRow,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
})) {
filteredRows.push(rowId);
}
});
return filteredRows;
};
/**
* Filter rows without formula calculation
* The "formulaRows" need to be provided if you want to filter formula, link columns etc.
* @param {string} filterConjunction e.g. 'And' | 'Or'
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
* @param {array} rows e.g. [{ _id, .... }, ...]
* @param {object} table e.g. { columns, ... }
* @param {object} formulaRows
* @param {string} username
* @param {string} userId
* @param {object} userDepartmentIdsMap e.g. { current_user_department_ids: [8, 10], current_user_department_and_sub_ids: [8, 10, 12, 34] }
* @returns filtered rows: row_ids and error message: error_message, object
*/
var getFilteredRowsWithoutFormulaCalculation = function getFilteredRowsWithoutFormulaCalculation(filterConjunction, filters, rows, table) {
var _ref4 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
_ref4$formulaRows = _ref4.formulaRows,
formulaRows = _ref4$formulaRows === void 0 ? null : _ref4$formulaRows,
_ref4$username = _ref4.username,
username = _ref4$username === void 0 ? null : _ref4$username,
_ref4$userId = _ref4.userId,
userId = _ref4$userId === void 0 ? null : _ref4$userId,
_ref4$userDepartmentI = _ref4.userDepartmentIdsMap,
userDepartmentIdsMap = _ref4$userDepartmentI === void 0 ? null : _ref4$userDepartmentI;
var columns = table.columns;
var validFilters = [];
try {
validFilters = core.deleteInvalidFilter(filters, columns);
} catch (err) {
return {
row_ids: [],
error_message: err.message
};
}
var filteredRows = [];
if (validFilters.length === 0) {
filteredRows = rows.map(function (row) {
return row._id;
});
} else {
filteredRows = filterRows(filterConjunction, validFilters, rows, {
formulaRows: formulaRows,
username: username,
userId: userId,
userDepartmentIdsMap: userDepartmentIdsMap
});
}
return {
row_ids: filteredRows,
error_message: null
};
};
exports.filterRow = _filterRow;
exports.filterRows = filterRows;
exports.getFilteredRowsWithoutFormulaCalculation = getFilteredRowsWithoutFormulaCalculation;