dtable-utils
Version:
dtable common utils
218 lines (204 loc) • 6.52 kB
JavaScript
import { getValidFilters, getOneDimensionalFilters, getValidFiltersWithoutError } from '../filter/core.js';
import { getValidGroupbys } from '../group/core.js';
import { getValidSorts } from '../sort/core.js';
import { CellType } from '../constants/cell-type.js';
/**
* Get view by id
* @param {array} views e.g. [{ _id, ... }, ...]
* @param {string} viewId
* @returns view, object
*/
var getViewById = function getViewById(views, viewId) {
if (!Array.isArray(views) || !viewId) return null;
return views.find(function (view) {
return view._id === viewId;
});
};
/**
* Get view by name
* @param {array} views
* @param {string} viewName
* @returns view, object
*/
var getViewByName = function getViewByName(views, viewName) {
if (!Array.isArray(views) || !viewName) return null;
return views.find(function (view) {
return view.name === viewName;
});
};
/**
* Check whether the view is archived
* @param {object} view
* @returns bool
*/
var isArchiveView = function isArchiveView(view) {
return view.type === 'archive';
};
/**
* Check whether the view is private
* @param {object} view
* @returns bool
*/
var isPrivateView = function isPrivateView(view) {
return view && view.private_for && view.private_for.length > 0;
};
/**
* Check whether the view contains filters
* @param {object} view e.g. { filters, ... }
* @param {array} columns
* @returns bool
*/
var isFilterView = function isFilterView(view, columns) {
var validFilters = getValidFilters(view.filters, columns);
return validFilters.length > 0;
};
/**
* Check whether the view contains groupbys
* @param {object} view e.g. { groupbys, ... }
* @param {array} columns
* @returns bool
*/
var isGroupView = function isGroupView(view, columns) {
var validGroupbys = getValidGroupbys(view.groupbys, columns);
return validGroupbys.length > 0;
};
/**
* Check whether the view contains sorts
* @param {object} view e.g. { sorts, ... }
* @param {array} columns
* @returns bool
*/
var isSortView = function isSortView(view, columns) {
var validSorts = getValidSorts(view.sorts, columns);
return validSorts.length > 0;
};
/**
* Check whether the view has hidden columns
* @param {object} view e.g. { hidden_columns, ... }
* @returns bool
*/
var isHiddenColumnsView = function isHiddenColumnsView(view) {
var _ref = view || {},
hidden_columns = _ref.hidden_columns;
return Array.isArray(hidden_columns) && hidden_columns.length > 0;
};
/**
* Check is default view which no contains filters, sorts, groupbys etc.
* @param {object} view e.g. { filters, groupbys, sorts, ... }
* @param {array} columns
* @returns bool
*/
var isDefaultView = function isDefaultView(view, columns) {
return !isFilterView(view, columns) && !isSortView(view, columns) && !isGroupView(view, columns);
};
/**
* Get link columns which used either in filters, groupbys, sorts etc.
* @param {object} view e.g. { filters, groupbys, sorts, ... }
* @param {object} table e.g. { columns, ... }
* @returns link columns, array
*/
var getLinkColumnsUsedInFilters = function getLinkColumnsUsedInFilters(view, table) {
var filters = view.filters,
sorts = view.sorts,
groupbys = view.groupbys;
var columns = table.columns;
if (!Array.isArray(columns)) return [];
var flattenFilters = getOneDimensionalFilters(filters);
var validFilters = getValidFiltersWithoutError(flattenFilters, columns);
var validSorts = getValidSorts(sorts, columns);
var validGroupbys = getValidGroupbys(groupbys, columns);
var hasFilters = validFilters && validFilters.length > 0;
var hasSorts = validSorts && validSorts.length > 0;
var hasGroupbys = validGroupbys && validGroupbys.length > 0;
if (!hasFilters && !hasSorts && !hasGroupbys) return [];
var keyLinkColumnMap = {};
var keyExistLinkColumnMap = {};
var linkColumns = [];
columns.forEach(function (column) {
var key = column.key,
name = column.name,
type = column.type,
data = column.data,
width = column.width;
if (type === CellType.LINK) {
keyLinkColumnMap[column.key] = {
key: key,
name: name,
type: type,
data: data,
width: width
};
}
});
if (Object.keys(keyLinkColumnMap).length === 0) return [];
if (hasFilters) {
validFilters.forEach(function (filter) {
var filterColumnKey = filter.column_key;
var filterLinkColumn = keyLinkColumnMap[filterColumnKey];
if (filterLinkColumn && !keyExistLinkColumnMap[filterColumnKey]) {
linkColumns.push(filterLinkColumn);
keyExistLinkColumnMap[filterColumnKey] = true;
}
});
}
if (hasSorts) {
validSorts.forEach(function (sort) {
var sortColumnKey = sort.column_key;
var sortLinkColumn = keyLinkColumnMap[sortColumnKey];
if (sortLinkColumn && !keyExistLinkColumnMap[sortColumnKey]) {
linkColumns.push(sortLinkColumn);
keyExistLinkColumnMap[sortColumnKey] = true;
}
});
}
if (hasGroupbys) {
validGroupbys.forEach(function (groupby) {
var groupbyColumnKey = groupby.column_key;
var groupbyLinkColumn = keyLinkColumnMap[groupbyColumnKey];
if (groupbyLinkColumn && !keyExistLinkColumnMap[groupbyColumnKey]) {
linkColumns.push(groupbyLinkColumn);
keyExistLinkColumnMap[groupbyColumnKey] = true;
}
});
}
return linkColumns;
};
/**
* Get no-archived views
* @param {array} views
* @returns no-archived views, array
*/
var getNonArchiveViews = function getNonArchiveViews(views) {
if (!Array.isArray(views)) {
return [];
}
return views.filter(function (view) {
return !isArchiveView(view);
});
};
var getViewShownColumns = function getViewShownColumns(view, columns) {
if (!Array.isArray(columns)) {
return [];
}
if (!isHiddenColumnsView(view)) {
return columns;
}
var hidden_columns = view.hidden_columns;
return columns.filter(function (column) {
return !hidden_columns.includes(column.key);
});
};
/**
* Get non-private views
* @param {array} views
* @returns non-private views, array
*/
var getNonPrivateViews = function getNonPrivateViews(views) {
if (!Array.isArray(views)) {
return [];
}
return views.filter(function (view) {
return !isPrivateView(view);
});
};
export { getLinkColumnsUsedInFilters, getNonArchiveViews, getNonPrivateViews, getViewById, getViewByName, getViewShownColumns, isArchiveView, isDefaultView, isFilterView, isGroupView, isHiddenColumnsView, isSortView };