Skip to content

Commit

Permalink
change how to define column defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Mar 17, 2020
1 parent 928d481 commit 1f4147f
Show file tree
Hide file tree
Showing 24 changed files with 96 additions and 108 deletions.
5 changes: 3 additions & 2 deletions src/model/AggregateGroupColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ export default class AggregateGroupColumn extends Column {
static readonly EVENT_AGGREGATE = 'aggregate';

constructor(id: string, desc: Readonly<IAggregateGroupColumnDesc>) {
super(id, desc);
this.setDefaultWidth(40);
super(id, desc, {
width: 40
});
}

get frozen() {
Expand Down
6 changes: 3 additions & 3 deletions src/model/ArrayColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {Category} from './annotations';
import ValueColumn from './ValueColumn';
import {empty} from '../internal';
import {IArrayColumn, IArrayDesc} from './IArrayColumn';
import {IDataRow, IValueColumnDesc} from './interfaces';
import {IDataRow, IValueColumnDesc, IColumnDescDefaults} from './interfaces';


export interface IArrayColumnDesc<T> extends IArrayDesc, IValueColumnDesc<T[]> {
Expand All @@ -16,8 +16,8 @@ export default class ArrayColumn<T> extends ValueColumn<T[]> implements IArrayCo

private readonly originalLabels: string[];

constructor(id: string, desc: Readonly<IArrayColumnDesc<T>>) {
super(id, desc);
constructor(id: string, desc: Readonly<IArrayColumnDesc<T>>, defaults: Partial<IColumnDescDefaults> = {}) {
super(id, desc, defaults);
this._dataLength = desc.dataLength == null || isNaN(desc.dataLength) ? null : desc.dataLength;
this.originalLabels = desc.labels || (empty(this._dataLength == null ? 0 : this._dataLength).map((_d, i) => `Column ${i}`));
}
Expand Down
5 changes: 3 additions & 2 deletions src/model/BooleanColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,9 @@ export default class BooleanColumn extends ValueColumn<boolean> implements ICate
readonly categories: ICategory[];

constructor(id: string, desc: Readonly<IBooleanColumnDesc>) {
super(id, desc);
this.setWidthImpl(30);
super(id, desc, {
width: 30
});
this.categories = [
{
name: desc.trueMarker || '✓',
Expand Down
5 changes: 3 additions & 2 deletions src/model/BooleansColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ export default class BooleansColumn extends ArrayColumn<boolean> implements ISet
private colorMapping: ICategoricalColorMappingFunction;

constructor(id: string, desc: Readonly<IBooleansColumnDesc>) {
super(id, desc);
this.setDefaultRenderer('upset');
super(id, desc, {
renderer: 'upset'
});
this.colorMapping = DEFAULT_CATEGORICAL_COLOR_FUNCTION;
}

Expand Down
46 changes: 9 additions & 37 deletions src/model/Column.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {AEventDispatcher, ISequence, similar, fixCSS, IEventListener} from '../internal';
import {isSortingAscByDefault} from './annotations';
import {IColumnDump, ISortCriteria, defaultGroup, ECompareValueType, IColumnDesc, IDataRow, IGroup, IColumnParent, IColumnMetaData, IFlatColumn, ICompareValue, DEFAULT_COLOR, ITypeFactory} from './interfaces';
import {IColumnDump, ISortCriteria, defaultGroup, ECompareValueType, IColumnDesc, IDataRow, IGroup, IColumnParent, IColumnMetaData, IFlatColumn, ICompareValue, DEFAULT_COLOR, ITypeFactory, IColumnDescDefaults} from './interfaces';
import Ranking from './Ranking';

/**
Expand Down Expand Up @@ -125,19 +125,19 @@ export default class Column extends AEventDispatcher {
private summaryRenderer: string;
private visible: boolean;

constructor(id: string, public readonly desc: Readonly<IColumnDesc>) {
constructor(id: string, public readonly desc: Readonly<IColumnDesc>, defaults: Partial<IColumnDescDefaults> = {}) {
super();
this.uid = fixCSS(id);
this.renderer = this.desc.renderer || this.desc.type;
this.groupRenderer = this.desc.groupRenderer || this.desc.type;
this.summaryRenderer = this.desc.summaryRenderer || this.desc.type;
this.width = this.desc.width != null && this.desc.width > 0 ? this.desc.width : 100;
this.visible = this.desc.visible !== false;
this.renderer = this.desc.renderer || defaults.renderer || this.desc.type;
this.groupRenderer = this.desc.groupRenderer || defaults.groupRenderer || this.desc.type;
this.summaryRenderer = this.desc.summaryRenderer || defaults.summaryRenderer || this.desc.type;
this.width = this.desc.width != null && this.desc.width > 0 ? this.desc.width : (defaults.width != null ? defaults.width : 100);
this.visible = this.desc.visible !== false && defaults.visible !== false;

this.metadata = {
label: desc.label || this.id,
summary: desc.summary || '',
description: desc.description || ''
summary: desc.summary || defaults.summary || '',
description: desc.description || defaults.description || ''
};
}

Expand Down Expand Up @@ -566,13 +566,6 @@ export default class Column extends AEventDispatcher {
this.fire([Column.EVENT_RENDERER_TYPE_CHANGED, Column.EVENT_DIRTY_VALUES, Column.EVENT_DIRTY], this.renderer, this.renderer = renderer);
}

protected setDefaultRenderer(renderer: string) {
if (this.renderer !== this.desc.type || this.desc.renderer) {
return;
}
return this.setRenderer(renderer);
}

setGroupRenderer(renderer: string) {
if (renderer === this.groupRenderer) {
// nothing changes
Expand All @@ -581,13 +574,6 @@ export default class Column extends AEventDispatcher {
this.fire([Column.EVENT_GROUP_RENDERER_TYPE_CHANGED, Column.EVENT_DIRTY_VALUES, Column.EVENT_DIRTY], this.groupRenderer, this.groupRenderer = renderer);
}

protected setDefaultGroupRenderer(renderer: string) {
if (this.groupRenderer !== this.desc.type || this.desc.groupRenderer) {
return;
}
return this.setGroupRenderer(renderer);
}

setSummaryRenderer(renderer: string) {
if (renderer === this.summaryRenderer) {
// nothing changes
Expand All @@ -596,20 +582,6 @@ export default class Column extends AEventDispatcher {
this.fire([Column.EVENT_SUMMARY_RENDERER_TYPE_CHANGED, Column.EVENT_DIRTY_HEADER, Column.EVENT_DIRTY], this.summaryRenderer, this.summaryRenderer = renderer);
}

protected setDefaultSummaryRenderer(renderer: string) {
if (this.summaryRenderer !== this.desc.type || this.desc.summaryRenderer) {
return;
}
return this.setSummaryRenderer(renderer);
}

protected setDefaultWidth(width: number) {
if (this.width !== 100 || this.desc.width) {
return;
}
return this.setWidthImpl(width);
}

/**
* marks the header, values, or both as dirty such that the values are reevaluated
* @param type specify in more detail what is dirty, by default whole column
Expand Down
6 changes: 3 additions & 3 deletions src/model/CompositeNumberColumn.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {format} from 'd3-format';
import CompositeColumn from './CompositeColumn';
import {IDataRow, IGroup, IColumnDesc} from './interfaces';
import {IDataRow, IGroup, IColumnDesc, IColumnDescDefaults} from './interfaces';
import {isMissingValue} from './missing';
import NumberColumn from './NumberColumn';
import {SortByDefault} from './annotations';
Expand All @@ -24,8 +24,8 @@ export declare type ICompositeNumberColumnDesc = ICompositeNumberDesc & IColumnD
export default class CompositeNumberColumn extends CompositeColumn implements INumberColumn {
private readonly numberFormat: (n: number) => string = format('.3n');

constructor(id: string, desc: Readonly<ICompositeNumberColumnDesc>) {
super(id, desc);
constructor(id: string, desc: Readonly<ICompositeNumberColumnDesc>, defaults: Partial<IColumnDescDefaults> = {}) {
super(id, desc, defaults);

if (desc.numberFormat) {
this.numberFormat = format(desc.numberFormat);
Expand Down
7 changes: 4 additions & 3 deletions src/model/DateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,13 @@ export default class DateColumn extends ValueColumn<Date> implements IDateColumn
private currentGrouper: IDateGrouper = defaultDateGrouper();

constructor(id: string, desc: Readonly<IDateColumnDesc>) {
super(id, desc);
super(id, desc, {
groupRenderer: 'datehistogram',
summaryRenderer: 'datehistogram'
});
const f = timeFormat(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.format = (v) => (v instanceof Date) ? f(v) : '';
this.parse = desc.dateParse ? timeParse(desc.dateParse) : timeParse(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.setDefaultGroupRenderer('datehistogram');
this.setDefaultSummaryRenderer('datehistogram');
}

getFormatter() {
Expand Down
9 changes: 5 additions & 4 deletions src/model/DatesColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ export default class DatesColumn extends ArrayColumn<Date | null> implements IDa
private currentFilter: IDateFilter = noDateFilter();

constructor(id: string, desc: Readonly<IDatesColumnDesc>) {
super(id, desc);
super(id, desc, {
renderer: 'datehistogram',
groupRenderer: 'datehistogram',
summaryRenderer: 'datehistogram'
});
const f = timeFormat(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.format = (v) => (v instanceof Date) ? f(v) : '';
this.parse = desc.dateParse ? timeParse(desc.dateParse) : timeParse(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.sort = desc.sort || EDateSort.median;
this.setDefaultRenderer('datehistogram');
this.setDefaultGroupRenderer('datehistogram');
this.setDefaultSummaryRenderer('datehistogram');
}

getFormatter() {
Expand Down
5 changes: 3 additions & 2 deletions src/model/DatesMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,13 @@ export default class DatesMapColumn extends MapColumn<Date | null> implements ID
private currentFilter: IDateFilter = noDateFilter();

constructor(id: string, desc: Readonly<IDateMapColumnDesc>) {
super(id, desc);
super(id, desc, {
renderer: 'default'
});
const f = timeFormat(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.format = (v) => (v instanceof Date) ? f(v) : '';
this.parse = desc.dateParse ? timeParse(desc.dateParse) : timeParse(desc.dateFormat || DateColumn.DEFAULT_DATE_FORMAT);
this.sort = desc.sort || EDateSort.median;
this.setDefaultRenderer('default');
}

getFormatter() {
Expand Down
9 changes: 5 additions & 4 deletions src/model/MapColumn.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Category} from './annotations';
import {IKeyValue, IMapColumn} from './IArrayColumn';
import {IDataRow, IValueColumnDesc} from './interfaces';
import {IDataRow, IValueColumnDesc, IColumnDescDefaults} from './interfaces';
import ValueColumn from './ValueColumn';

export interface IMapColumnDesc<T> extends IValueColumnDesc<IKeyValue<T>[]> {
Expand All @@ -10,9 +10,10 @@ export interface IMapColumnDesc<T> extends IValueColumnDesc<IKeyValue<T>[]> {
@Category('map')
export default class MapColumn<T> extends ValueColumn<IKeyValue<T>[]> implements IMapColumn<T> {

constructor(id: string, desc: Readonly<IMapColumnDesc<T>>) {
super(id, desc);
this.setDefaultWidth(200); //by default 200
constructor(id: string, desc: Readonly<IMapColumnDesc<T>>, defaults: Partial<IColumnDescDefaults> = {}) {
super(id, desc, Object.assign({
width: 200
}, defaults));
}

getValue(row: IDataRow) {
Expand Down
8 changes: 4 additions & 4 deletions src/model/NumberColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ export default class NumberColumn extends ValueColumn<number> implements INumber
private groupSortMethod: EAdvancedSortMethod = EAdvancedSortMethod.median;

constructor(id: string, desc: INumberColumnDesc, factory: ITypeFactory) {
super(id, desc);
super(id, desc, {
groupRenderer: 'boxplot',
summaryRenderer: 'histogram'
});

this.mapping = restoreMapping(desc, factory);
this.original = this.mapping.clone();
Expand All @@ -88,9 +91,6 @@ export default class NumberColumn extends ValueColumn<number> implements INumber
if (desc.numberFormat) {
this.numberFormat = format(desc.numberFormat);
}

this.setDefaultGroupRenderer('boxplot');
this.setDefaultSummaryRenderer('histogram');
}

getNumberFormat() {
Expand Down
6 changes: 3 additions & 3 deletions src/model/NumberMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ export default class NumberMapColumn extends MapColumn<number> implements IAdvan
private currentFilter: INumberFilter = noNumberFilter();

constructor(id: string, desc: Readonly<INumberMapColumnDesc>, factory: ITypeFactory) {
super(id, desc);
super(id, desc, {
renderer: 'mapbars'
});
this.mapping = restoreMapping(desc, factory);
this.original = this.mapping.clone();
this.colorMapping = factory.colorMappingFunction(desc.colorMapping || desc.color);
Expand All @@ -82,8 +84,6 @@ export default class NumberMapColumn extends MapColumn<number> implements IAdvan
if (desc.numberFormat) {
this.numberFormat = format(desc.numberFormat);
}

this.setDefaultRenderer('mapbars');
}

getNumberFormat() {
Expand Down
17 changes: 8 additions & 9 deletions src/model/NumbersColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,14 @@ export default class NumbersColumn extends ArrayColumn<number> implements INumbe
private currentFilter: INumberFilter = noNumberFilter();

constructor(id: string, desc: Readonly<INumbersColumnDesc>, factory: ITypeFactory) {
super(id, desc);
super(id, desc, Object.assign({
renderer: 'heatmap',
groupRenderer: 'heatmap',
summaryRenderer: 'histogram'
}, desc.dataLength != null && !Number.isNaN(desc.dataLength) ? {
// better initialize the default with based on the data length
width: Math.min(Math.max(100, desc.dataLength! * 10), 500)
} : {}));
this.mapping = restoreMapping(desc, factory);
this.original = this.mapping.clone();
this.colorMapping = factory.colorMappingFunction(desc.colorMapping || desc.color);
Expand All @@ -81,14 +88,6 @@ export default class NumbersColumn extends ArrayColumn<number> implements INumbe
}

this.sort = desc.sort || EAdvancedSortMethod.median;

// better initialize the default with based on the data length
if (this.dataLength) {
this.setDefaultWidth(Math.min(Math.max(100, this.dataLength! * 10), 500));
}
this.setDefaultRenderer('heatmap');
this.setDefaultGroupRenderer('heatmap');
this.setDefaultSummaryRenderer('histogram');
}

getNumberFormat() {
Expand Down
7 changes: 4 additions & 3 deletions src/model/OrdinalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ export default class OrdinalColumn extends ValueColumn<number> implements INumbe


constructor(id: string, desc: Readonly<IOrdinalColumnDesc>) {
super(id, desc);
super(id, desc, {
renderer: 'number',
groupRenderer: 'boxplot'
});
this.categories = toCategories(desc);
this.categories.forEach((d) => this.lookup.set(d.name, d));
this.setDefaultRenderer('number');
this.setDefaultGroupRenderer('boxplot');
this.colorMapping = DEFAULT_CATEGORICAL_COLOR_FUNCTION;
}

Expand Down
5 changes: 3 additions & 2 deletions src/model/RankColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ export function createRankDesc(label: string = 'Rank') {
export default class RankColumn extends Column {

constructor(id: string, desc: IColumnDesc) {
super(id, desc);
this.setDefaultWidth(50);
super(id, desc, {
width: 50
});
}

getLabel(row: IDataRow) {
Expand Down
9 changes: 5 additions & 4 deletions src/model/ReduceColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,12 @@ export default class ReduceColumn extends CompositeNumberColumn {
private reduce: EAdvancedSortMethod;

constructor(id: string, desc: Readonly<IReduceColumnDesc>) {
super(id, desc);
super(id, desc, {
renderer: 'interleaving',
groupRenderer: 'interleaving',
summaryRenderer: 'interleaving'
});
this.reduce = desc.reduce || EAdvancedSortMethod.max;
this.setDefaultRenderer('interleaving');
this.setDefaultGroupRenderer('interleaving');
this.setDefaultSummaryRenderer('interleaving');
}

get label() {
Expand Down
5 changes: 3 additions & 2 deletions src/model/SelectionColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,9 @@ export default class SelectionColumn extends ValueColumn<boolean> {
static readonly EVENT_SELECT = 'select';

constructor(id: string, desc: Readonly<ISelectionColumnDesc>) {
super(id, desc);
this.setDefaultWidth(20);
super(id, desc, {
width: 20
});
}

get frozen() {
Expand Down
9 changes: 5 additions & 4 deletions src/model/SetColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,14 @@ export default class SetColumn extends ValueColumn<string[]> implements IArrayCo
private currentFilter: ICategoricalFilter | null = null;

constructor(id: string, desc: Readonly<ISetColumnDesc>) {
super(id, desc);
super(id, desc, {
renderer: 'upset',
groupRenderer: 'upset',
summaryRenderer: 'categorical'
});
this.separator = new RegExp(desc.separator || ';');
this.categories = toCategories(desc);
this.categories.forEach((d) => this.lookup.set(d.name, d));
this.setDefaultRenderer('upset');
this.setDefaultGroupRenderer('upset');
this.setSummaryRenderer('categorical');
this.colorMapping = DEFAULT_CATEGORICAL_COLOR_FUNCTION;
}

Expand Down
Loading

0 comments on commit 1f4147f

Please sign in to comment.