Skip to content

Commit

Permalink
tune imports
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Dec 24, 2018
1 parent fdac780 commit 07c3918
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 33 deletions.
32 changes: 3 additions & 29 deletions src/model/DateColumn.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {timeFormat, timeParse} from 'd3-time-format';
import {ISequence, isSeqEmpty, equal, IEventListener} from '../internal';
import {ISequence, equal, IEventListener} from '../internal';
import {Category, dialogAddons, toolbar} from './annotations';
import Column, {dirty, dirtyCaches, dirtyHeader, dirtyValues, ECompareValueType, groupRendererChanged, labelChanged, metaDataChanged, rendererTypeChanged, summaryRendererChanged, visibilityChanged, widthChanged} from './Column';
import {defaultGroup} from './Group';
import {defaultDateGrouper, IDateColumn, IDateDesc, IDateFilter, IDateGrouper, isDateIncluded, isDefaultDateGrouper, isDummyDateFilter, isEqualDateFilter, noDateFilter, restoreDateFilter, toDateGroup} from './IDateColumn';
import {defaultDateGrouper, IDateColumn, IDateDesc, IDateFilter, IDateGrouper, isDateIncluded, isDefaultDateGrouper, isDummyDateFilter, isEqualDateFilter, noDateFilter, restoreDateFilter, toDateGroup, chooseAggregatedDate} from './IDateColumn';
import {IDataRow, IGroup} from './interfaces';
import {isMissingValue, isUnknown, missingGroup} from './missing';
import ValueColumn, {dataLoaded, IValueColumnDesc} from './ValueColumn';
Expand Down Expand Up @@ -188,37 +188,11 @@ export default class DateColumn extends ValueColumn<Date> implements IDateColumn
}

toCompareGroupValue(rows: ISequence<IDataRow>, _group: IGroup, valueCache?: ISequence<any>): number {
const v = choose(rows, this.currentGrouper, this, valueCache).value;
const v = chooseAggregatedDate(rows, this.currentGrouper, this, valueCache).value;
return v == null ? NaN : v;
}

toCompareGroupValueType() {
return ECompareValueType.DOUBLE_ASC;
}
}

/**
* @internal
*/
export function choose(rows: ISequence<IDataRow>, grouper: IDateGrouper | null, col: IDateColumn, valueCache?: ISequence<Date | null>): {value: number | null, name: string} {
const vs = <ISequence<Date>>(valueCache ? valueCache : rows.map((d) => col.getDate(d))).filter((d) => d instanceof Date);
if (isSeqEmpty(vs)) {
return {value: null, name: ''};
}
const median = trueMedian(vs.map((d) => d.getTime()))!;
if (!grouper) {
return {value: median, name: (new Date(median)).toString()};
}
return toDateGroup(grouper, new Date(median));
}

function trueMedian(dates: ISequence<number>) {
// to avoid interpolating between the centers do it manually
const s = Float64Array.from(dates);
if (s.length === 1) {
return s[0];
}

s.sort();
return s[Math.floor(s.length / 2)];
}
29 changes: 28 additions & 1 deletion src/model/IDateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Column from './Column';
import {IColumnDesc, IDataRow} from './interfaces';
import {isNumberIncluded, INumberFilter} from './INumberColumn';
import {timeDay, timeMonth, timeWeek, timeMinute, timeSecond, timeHour} from 'd3-time';
import {equal, IForEachAble} from '../internal';
import {equal, IForEachAble, ISequence, isSeqEmpty} from '../internal';

/** @internal */
export {
Expand Down Expand Up @@ -231,3 +231,30 @@ export function toDateGroup(grouper: IDateGrouper, value: Date): {value: number,
name: value.toString()
};
}


/**
* @internal
*/
export function chooseAggregatedDate(rows: ISequence<IDataRow>, grouper: IDateGrouper | null, col: IDateColumn, valueCache?: ISequence<Date | null>): {value: number | null, name: string} {
const vs = <ISequence<Date>>(valueCache ? valueCache : rows.map((d) => col.getDate(d))).filter((d) => d instanceof Date);
if (isSeqEmpty(vs)) {
return {value: null, name: ''};
}
const median = trueMedian(vs.map((d) => d.getTime()))!;
if (!grouper) {
return {value: median, name: (new Date(median)).toString()};
}
return toDateGroup(grouper, new Date(median));
}

function trueMedian(dates: ISequence<number>) {
// to avoid interpolating between the centers do it manually
const s = Float64Array.from(dates);
if (s.length === 1) {
return s[0];
}

s.sort();
return s[Math.floor(s.length / 2)];
}
4 changes: 2 additions & 2 deletions src/renderer/DateCellRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {Column, IDataRow, DateColumn, IOrderedGroup} from '../model';
import IRenderContext, {ICellRendererFactory, IGroupCellRenderer, ISummaryRenderer, ICellRenderer} from './interfaces';
import {renderMissingDOM} from './missing';
import {noop, noRenderer, setText, exampleText} from './utils';
import {choose} from '../model/DateColumn';
import {chooseAggregatedDate} from '../model/IDateColumn';

/** @internal */
export default class DateCellRenderer implements ICellRendererFactory {
Expand Down Expand Up @@ -31,7 +31,7 @@ export default class DateCellRenderer implements ICellRendererFactory {
update: (n: HTMLDivElement, group: IOrderedGroup) => {
const isGrouped = col.isGroupedBy() >= 0;
if (isGrouped) {
return context.tasks.groupRows(col, group, 'date', (rows) => choose(rows, col.getDateGrouper(), col)).then((chosen) => {
return context.tasks.groupRows(col, group, 'date', (rows) => chooseAggregatedDate(rows, col.getDateGrouper(), col)).then((chosen) => {
if (typeof chosen !== 'symbol') {
setText(n, chosen.name);
}
Expand Down
2 changes: 1 addition & 1 deletion src/ui/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ export {default as LineUp, default, ILineUpOptions} from './LineUp';
export * from './panel';
export {default as SlopeGraph, EMode} from './SlopeGraph';
export * from './taggle';
export * from './toolbar';
export {IToolbarAction, IToolbarDialogAddon, IUIOptions, IOnClickHandler, dialogContext} from './toolbar';

0 comments on commit 07c3918

Please sign in to comment.