const EXTEND_FIELD_SOURCE_REGEXP = /^extendFields\.\[(.+)\]$/; const getExtendFieldKey = (source) => { const match = EXTEND_FIELD_SOURCE_REGEXP.exec(source || ''); return match ? match[1] : null; }; const reorderColumns = (columns = [], columnRanks = []) => { if (!Array.isArray(columnRanks) || columnRanks.length === 0) { return columns; } return columns.reduce((accumulator, column, index) => { const rank = columnRanks.indexOf(index); if (rank === -1) { accumulator[index] = column; } else { accumulator[rank] = column; } return accumulator; }, []).filter(Boolean); }; export const resolveVisibleColumns = ( storeKey, defaultHiddenColumns = [], columns = [], hiddenColumns = defaultHiddenColumns, columnRanks = [] ) => { if (!storeKey || !Array.isArray(columns)) { return []; } const visibleColumns = reorderColumns(columns, columnRanks); const effectiveHiddenColumns = Array.isArray(hiddenColumns) ? hiddenColumns : defaultHiddenColumns; return visibleColumns.filter((column) => { if (!column?.source) { return false; } return !effectiveHiddenColumns.includes(column.source); }); }; export const getValueBySource = (record, source) => { if (!record || !source) { return ''; } const extendFieldKey = getExtendFieldKey(source); if (extendFieldKey) { return record.extendFields?.[extendFieldKey] ?? ''; } return source.split('.').reduce((value, key) => { if (value == null) { return undefined; } return value[key]; }, record) ?? ''; };