mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
8f531ef622
Summary: Previously, ref/reflist columns were formatted entirely based on their visible column, since they received values from the visible or display columns rather than the actual row IDs. This creates `ReferenceFormatter` and `ReferenceListFormatter` which still delegate most of the formatting work to a visible column formatter but fix a few issues: - ReferenceList columns now actually use the options (e.g. date format) of the visible column to format their elements. Previously they were formatted generically because the visible column formatter wasn't expecting a list. - Invalid references aren't formatted with an `#Invalid Ref` prefix. - When the ref column displays the Row ID, it doesn't have a visible or display column. Previously this led to the references being formatted as just numbers in most cases, with special code in the widget to display them like `Table1[2]`. Now they are consistently formatted in that style throughout. Test Plan: Updated existing tests. Reviewers: jarek Reviewed By: jarek Subscribers: dsagal Differential Revision: https://phab.getgrist.com/D3212
56 lines
2.1 KiB
TypeScript
56 lines
2.1 KiB
TypeScript
import type {ViewFieldRec} from 'app/client/models/entities/ViewFieldRec';
|
|
import type {CellValue} from 'app/common/DocActions';
|
|
import type {TableData} from 'app/common/TableData';
|
|
import type {UIRowId} from 'app/common/UIRowId';
|
|
|
|
/**
|
|
* The CopySelection class is an abstraction for a subset of currently selected cells.
|
|
* @param {Array} rowIds - row ids of the rows selected
|
|
* @param {Array} fields - MetaRowModels of the selected view fields
|
|
* @param {Object} options.rowStyle - an object that maps rowId to an object containing
|
|
* style options. i.e. { 1: { height: 20px } }
|
|
* @param {Object} options.colStyle - an object that maps colId to an object containing
|
|
* style options.
|
|
*/
|
|
export class CopySelection {
|
|
public readonly colIds = this.fields.map(f => f.colId());
|
|
public readonly displayColIds = this.fields.map(f => f.displayColModel().colId());
|
|
public readonly rowStyle: {[r: number]: object}|undefined;
|
|
public readonly colStyle: {[c: string]: object}|undefined;
|
|
|
|
public readonly columns: Array<{
|
|
colId: string,
|
|
fmtGetter: (rowId: UIRowId) => string,
|
|
rawGetter: (rowId: UIRowId) => CellValue|undefined,
|
|
}>;
|
|
|
|
constructor(tableData: TableData, public readonly rowIds: UIRowId[], public readonly fields: ViewFieldRec[],
|
|
options: {
|
|
rowStyle?: {[r: number]: object},
|
|
colStyle?: {[c: string]: object},
|
|
}
|
|
) {
|
|
this.rowStyle = options.rowStyle;
|
|
this.colStyle = options.colStyle;
|
|
this.columns = fields.map((f, i) => {
|
|
const formatter = f.formatter();
|
|
const _fmtGetter = tableData.getRowPropFunc(this.displayColIds[i])!;
|
|
const _rawGetter = tableData.getRowPropFunc(this.colIds[i])!;
|
|
|
|
return {
|
|
colId: this.colIds[i],
|
|
fmtGetter: rowId => formatter.formatAny(_fmtGetter(rowId)),
|
|
rawGetter: rowId => _rawGetter(rowId)
|
|
};
|
|
});
|
|
}
|
|
|
|
public isCellSelected(rowId: UIRowId, colId: string): boolean {
|
|
return this.rowIds.includes(rowId) && this.colIds.includes(colId);
|
|
}
|
|
|
|
public onlyAddRowSelected(): boolean {
|
|
return this.rowIds.length === 1 && this.rowIds[0] === "new";
|
|
}
|
|
}
|