(core) hide long sequences of unchanged rows in diffs

Summary:
It can be hard to find changes, even when highlighted, in a table with many rows.  This diff replaces long sequences of unchanged rows with a row containing "..."s.

With daff, I found that it is important to do this for sequences of unchanged columns also, but not tackling that yet.

Test Plan: added test

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2666
This commit is contained in:
Paul Fitzpatrick
2020-11-18 10:54:23 -05:00
parent bc3a472324
commit c387fc4bce
10 changed files with 185 additions and 29 deletions

View File

@@ -1,3 +1,4 @@
import * as DataTableModel from 'app/client/models/DataTableModel';
import {ColumnGetters} from 'app/common/ColumnGetters';
import * as gristTypes from 'app/common/gristTypes';
@@ -9,12 +10,30 @@ import * as gristTypes from 'app/common/gristTypes';
*/
export class ClientColumnGetters implements ColumnGetters {
constructor(private _tableModel: any) {
// If the "unversioned" option is set, then cells with multiple
// versions will be read as a single version - the first version
// available of parent, local, or remote. This can make sense for
// sorting, so cells appear in a reasonably sensible place.
constructor(private _tableModel: DataTableModel, private _options: {
unversioned?: boolean} = {}) {
}
public getColGetter(colRef: number): ((rowId: number) => any) | null {
const colId = this._tableModel.docModel.columns.getRowModel(Math.abs(colRef)).colId();
return this._tableModel.tableData.getRowPropFunc(colId);
const getter = this._tableModel.tableData.getRowPropFunc(colId);
if (!getter) { return getter || null; }
if (this._options.unversioned && this._tableModel.tableData.mayHaveVersions()) {
return (rowId) => {
const value = getter(rowId);
if (value && gristTypes.isVersions(value)) {
const versions = value[1];
return ('parent' in versions) ? versions.parent :
('local' in versions) ? versions.local : versions.remote;
}
return value;
};
}
return getter;
}
public getManualSortGetter(): ((rowId: number) => any) | null {