1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 00:43:53 +00:00
Files
seahub/frontend/src/components/sf-table/utils/column.js
2025-01-07 12:17:57 +08:00

124 lines
3.6 KiB
JavaScript

import { shallowCloneObject } from '../../../utils/object';
export const checkIsNameColumn = (column) => {
if (!column) return false;
return !!column.is_name_column;
};
export const checkIsColumnFrozen = (column) => {
if (!column) return false;
return !!column.frozen;
};
export const checkEditableViaClickCell = (column) => {
if (!column) return false;
return !!column.editable_via_click_cell;
};
export const checkIsColumnSupportDirectEdit = (column) => {
if (!column) return false;
return !!column.is_support_direct_edit;
};
export const checkIsColumnSupportPreview = (column) => {
if (!column) return false;
return !!column.is_support_preview;
};
export const checkIsColumnEditable = (column) => {
if (!column) return false;
return !!column.editable;
};
export const checkIsPopupColumnEditor = (column) => {
if (!column) return false;
return !!column.is_popup_editor;
};
export const checkIsPrivateColumn = (column) => {
if (!column) return false;
return !!column.is_private;
};
export const getColumnOriginName = (column) => {
if (checkIsPrivateColumn(column)) return column.key;
return column.name;
};
export const getColumnByKey = (columns, columnKey) => {
if (!Array.isArray(columns) || !columnKey) return null;
return columns.find((column) => column.key === columnKey);
};
export const getColumnIndexByKey = (columnKey, columns) => {
let index = 0;
for (let i = 0; i < columns.length; i++) {
if (columnKey === columns[i].key) {
index = i;
break;
}
}
return index;
};
export function getColumnByIndex(index, columns) {
if (Array.isArray(columns)) {
return columns[index];
}
if (typeof Immutable !== 'undefined') {
return columns.get(index);
}
return null;
}
export const getFrozenColumns = (columns) => {
return columns.filter(column => checkIsColumnFrozen(column));
};
export const recalculate = (columns, allColumns, sequenceColumnWidth = 0) => {
const displayColumns = columns;
const displayAllColumns = allColumns;
const totalWidth = displayColumns.reduce((total, column) => {
const width = column.width;
total += width;
return total;
}, 0);
let left = sequenceColumnWidth;
const frozenColumns = displayColumns.filter(c => checkIsColumnFrozen(c));
const frozenColumnsWidth = frozenColumns.reduce((w, column) => {
const width = column.width;
return w + width;
}, 0);
const lastFrozenColumnKey = frozenColumnsWidth > 0 ? frozenColumns[frozenColumns.length - 1].key : null;
const newColumns = displayColumns.map((column, index) => {
const width = column.width;
column.idx = index; // set column idx
column.left = left; // set column offset
column.width = width;
left += width;
return column;
});
return {
totalWidth,
lastFrozenColumnKey,
frozenColumnsWidth,
columns: newColumns,
allColumns: displayAllColumns,
};
};
export const recalculateColumnMetricsByResizeColumn = (columnMetrics, sequenceColumnWidth, columnKey, width) => {
let newColumnMetrics = shallowCloneObject(columnMetrics);
let updatedColumns = columnMetrics.columns.map((column) => shallowCloneObject(column));
const columnIndex = updatedColumns.findIndex((column) => column.key === columnKey);
let updatedColumn = updatedColumns[columnIndex];
updatedColumn.width = width;
newColumnMetrics.columns = updatedColumns;
const columnAllIndex = columnMetrics.allColumns.findIndex((column) => column.key === columnKey);
newColumnMetrics.allColumns[columnAllIndex] = { ...columnMetrics.columns[columnIndex], width };
return recalculate(newColumnMetrics.columns, newColumnMetrics.allColumns, sequenceColumnWidth);
};