diff --git a/js/table/utils.ts b/js/table/utils.ts index 4e1a050ef1..f257be3643 100644 --- a/js/table/utils.ts +++ b/js/table/utils.ts @@ -1,12 +1,43 @@ import isFunction from 'lodash/isFunction'; import isNumber from 'lodash/isNumber'; +import get from 'lodash/get'; import { BaseTableCol } from './types'; +export function filterDataByIds( + data: Array = [], + ids: Array = [], + byId = 'id', +): Array { + return data.filter((d: Record = {}) => ids.includes(d[byId])); +} + +export enum SCROLL_DIRECTION { + X = 'x', + Y = 'y', + UNKNOWN = 'unknown', +} + +let preScrollLeft: any; +let preScrollTop: any; + +export const getScrollDirection = (scrollLeft: number, scrollTop: number): SCROLL_DIRECTION => { + let direction = SCROLL_DIRECTION.UNKNOWN; + if (preScrollTop !== scrollTop) { + direction = SCROLL_DIRECTION.Y; + } else if (preScrollLeft !== scrollLeft) { + direction = SCROLL_DIRECTION.X; + } + preScrollTop = scrollTop; + preScrollLeft = scrollLeft; + return direction; +}; + export function isRowSelectedDisabled( selectColumn: { [key: string]: any }, row: Record, rowIndex: number, ): boolean { + if (!selectColumn) return false; let disabled = isFunction(selectColumn.disabled) ? selectColumn.disabled({ row, rowIndex }) : selectColumn.disabled; if (selectColumn.checkProps) { if (isFunction(selectColumn.checkProps)) { @@ -23,3 +54,52 @@ export function getColWidthAttr>(col: T, attrKey: 'wid const attr = col[attrKey]; return isNumber(attr) ? attr : parseFloat(attr); } + +export function getEditableKeysMap(keys: Array, list: any[], rowKey: string) { + const map: { [key: string | number]: boolean } = {}; + for (let i = 0, len = list.length; i < len; i++) { + const rowValue = get(list[i], rowKey); + if (keys.includes(rowValue)) { + map[rowValue] = true; + } + } + return map; +} + +export function getColumnDataByKey(columns: any[], colKey: string): any { + for (let i = 0, len = columns.length; i < len; i++) { + if (columns[i].colKey === colKey) return columns[i]; + if (columns[i].children?.length) { + const t = getColumnDataByKey(columns[i].children, colKey); + if (t) return t; + } + } + return null; +} + +export function getColumnIndexByKey(columns: any[], colKey: string): number { + for (let i = 0, len = columns.length; i < len; i++) { + if (columns[i].colKey === colKey) { + return i; + } + if (columns[i].children?.length) { + const t = getColumnDataByKey(columns[i].children, colKey); + if (t) return i; + } + } + return -1; +} + +export function getColumnsResetValue(columns: any[], resetValue: { [key: string]: any } = {}) { + for (let i = 0, len = columns.length; i < len; i++) { + const col = columns[i]; + if (col.filter && 'resetValue' in col.filter) { + // eslint-disable-next-line no-param-reassign + resetValue[col.colKey] = col.filter.resetValue; + } + if (col.children?.length) { + getColumnsResetValue(col.children, resetValue); + } + } + return resetValue; +}