UNPKG

dtable-utils

Version:

dtable common utils

279 lines (271 loc) 9.99 kB
'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;