Skip to content

Commit

Permalink
Merge pull request #142 from lineupjs/sgratzl/reset_all
Browse files Browse the repository at this point in the history
implement reset all button
  • Loading branch information
sgratzl committed Feb 28, 2019
2 parents f530dc3 + 7698014 commit 8bacc89
Show file tree
Hide file tree
Showing 26 changed files with 132 additions and 15 deletions.
6 changes: 6 additions & 0 deletions src/model/BooleanColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,12 @@ export default class BooleanColumn extends ValueColumn<boolean> implements ICate
this.fire([BooleanColumn.EVENT_FILTER_CHANGED, Column.EVENT_DIRTY_VALUES, Column.EVENT_DIRTY], this.currentFilter, this.currentFilter = filter);
}

clearFilter() {
const was = this.isFiltered();
this.setFilter(null);
return was;
}

toCompareValue(row: IDataRow) {
const v = this.getValue(row);
if (v == null) {
Expand Down
6 changes: 5 additions & 1 deletion src/model/BoxPlotColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -278,12 +278,16 @@ export default class BoxPlotColumn extends ValueColumn<IBoxPlotData> implements
return NumberColumn.prototype.getFilter.call(this);
}

setFilter(value: INumberFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: INumberFilter | null) {
NumberColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return NumberColumn.prototype.filter.call(this, row);
}

clearFilter() {
return NumberColumn.prototype.clearFilter.call(this);
}
}

6 changes: 6 additions & 0 deletions src/model/CategoricalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,12 @@ export default class CategoricalColumn extends ValueColumn<string> implements IC
this.fire([CategoricalColumn.EVENT_FILTER_CHANGED, Column.EVENT_DIRTY_VALUES, Column.EVENT_DIRTY], this.currentFilter, this.currentFilter = filter);
}

clearFilter() {
const was = this.isFiltered();
this.setFilter(null);
return was;
}

toCompareValue(row: IDataRow, valueCache?: any) {
return toCompareCategoryValue(valueCache !== undefined ? valueCache : this.getCategory(row));
}
Expand Down
9 changes: 9 additions & 0 deletions src/model/Column.ts
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,15 @@ export default class Column extends AEventDispatcher {
return false;
}

/**
* clear the filter
* @return {boolean} whether the filtered needed to be reseted
*/
clearFilter() {
// hook to clear the filter
return false;
}

/**
* predicate whether the current row should be included
* @param row
Expand Down
4 changes: 4 additions & 0 deletions src/model/CompositeColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ export default class CompositeColumn extends Column implements IColumnParent {
return this._children.some((d) => d.isFiltered());
}

clearFilter() {
return this._children.map((d) => d.clearFilter()).some((d) => d);
}

filter(row: IDataRow) {
return this._children.every((d) => d.filter(row));
}
Expand Down
9 changes: 8 additions & 1 deletion src/model/DateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,18 @@ export default class DateColumn extends ValueColumn<Date> implements IDateColumn
return !isDummyDateFilter(this.currentFilter);
}

clearFilter() {
const was = this.isFiltered();
this.setFilter(null);
return was;
}

getFilter(): IDateFilter {
return Object.assign({}, this.currentFilter);
}

setFilter(value: IDateFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: IDateFilter | null) {
value = value || {min: -Infinity, max: +Infinity, filterMissing: false};
if (isEqualDateFilter(value, this.currentFilter)) {
return;
}
Expand Down
6 changes: 5 additions & 1 deletion src/model/DatesColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,17 @@ export default class DatesColumn extends ArrayColumn<Date | null> implements IDa
return DateColumn.prototype.getFilter.call(this);
}

setFilter(value: IDateFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: IDateFilter | null) {
DateColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return DateColumn.prototype.filter.call(this, row);
}

clearFilter() {
return DateColumn.prototype.clearFilter.call(this);
}
}

function compute(arr: Date[], sort: EDateSort) {
Expand Down
6 changes: 5 additions & 1 deletion src/model/DatesMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,11 +146,15 @@ export default class DatesMapColumn extends MapColumn<Date | null> implements ID
return DateColumn.prototype.getFilter.call(this);
}

setFilter(value: IDateFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: IDateFilter | null) {
DateColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return DateColumn.prototype.filter.call(this, row);
}

clearFilter() {
return DateColumn.prototype.clearFilter.call(this);
}
}
2 changes: 1 addition & 1 deletion src/model/INumberColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export interface IMapAbleColumn extends INumberColumn {

getFilter(): INumberFilter;

setFilter(value?: INumberFilter): void;
setFilter(value: INumberFilter | null): void;

getRange(): [string, string];
}
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionBoxPlotColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ export default class ImpositionBoxPlotColumn extends CompositeColumn implements
return w ? w.getFilter() : noNumberFilter();
}

setFilter(value?: INumberFilter): void {
setFilter(value: INumberFilter | null): void {
const w = this.wrapper;
return w ? w.setFilter(value) : undefined;
}
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionCompositeColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ export default class ImpositionCompositeColumn extends CompositeColumn implement
return w && isMapAbleColumn(w) ? w.getFilter() : noNumberFilter();
}

setFilter(value?: INumberFilter): void {
setFilter(value: INumberFilter | null): void {
const w = this.wrapper;
return w && isMapAbleColumn(w) ? w.setFilter(value) : undefined;
}
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionCompositesColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ export default class ImpositionCompositesColumn extends CompositeColumn implemen
return w ? w.getFilter() : noNumberFilter();
}

setFilter(value?: INumberFilter): void {
setFilter(value: INumberFilter | null): void {
const w = this.wrapper;
return w ? w.setFilter(value) : undefined;
}
Expand Down
4 changes: 4 additions & 0 deletions src/model/LinkColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,10 @@ export default class LinkColumn extends ValueColumn<string | ILink> {
return StringColumn.prototype.setFilter.call(this, filter);
}

clearFilter() {
return StringColumn.prototype.clearFilter.call(this);
}

getGroupCriteria() {
return this.currentGroupCriteria.slice();
}
Expand Down
9 changes: 8 additions & 1 deletion src/model/NumberColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,8 @@ export default class NumberColumn extends ValueColumn<number> implements INumber
return Object.assign({}, this.currentFilter);
}

setFilter(value: INumberFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: INumberFilter | null) {
value = value || {min: -Infinity, max: +Infinity, filterMissing: false};
if (isEqualNumberFilter(value, this.currentFilter)) {
return;
}
Expand All @@ -299,6 +300,12 @@ export default class NumberColumn extends ValueColumn<number> implements INumber
return isNumberIncluded(this.currentFilter, this.getRawNumber(row));
}

clearFilter() {
const was = this.isFiltered();
this.setFilter(null);
return was;
}

getGroupThresholds() {
return this.currentGroupThresholds.slice();
}
Expand Down
6 changes: 5 additions & 1 deletion src/model/NumberMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,12 +270,16 @@ export default class NumberMapColumn extends MapColumn<number> implements IAdvan
return NumberColumn.prototype.getFilter.call(this);
}

setFilter(value: INumberFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: INumberFilter | null) {
NumberColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return NumberColumn.prototype.filter.call(this, row);
}

clearFilter() {
return NumberColumn.prototype.clearFilter.call(this);
}
}

6 changes: 5 additions & 1 deletion src/model/NumbersColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,16 @@ export default class NumbersColumn extends ArrayColumn<number> implements INumbe
return NumberColumn.prototype.getFilter.call(this);
}

setFilter(value: INumberFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: INumberFilter | null) {
NumberColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return NumberColumn.prototype.filter.call(this, row);
}

clearFilter() {
return NumberColumn.prototype.clearFilter.call(this);
}
}

4 changes: 4 additions & 0 deletions src/model/OrdinalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,10 @@ export default class OrdinalColumn extends ValueColumn<number> implements INumbe
return CategoricalColumn.prototype.setFilter.call(this, filter);
}

clearFilter() {
return CategoricalColumn.prototype.clearFilter.call(this);
}

toCompareValue(row: IDataRow) {
return CategoricalColumn.prototype.toCompareValue.call(this, row);
}
Expand Down
4 changes: 4 additions & 0 deletions src/model/Ranking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,10 @@ export default class Ranking extends AEventDispatcher implements IColumnParent {
return this.columns.every((d) => d.filter(row));
}

clearFilters() {
return this.columns.map((d) => d.clearFilter()).some((d) => d);
}

findMyRanker() {
return this;
}
Expand Down
6 changes: 5 additions & 1 deletion src/model/ScriptColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,11 +427,15 @@ export default class ScriptColumn extends CompositeNumberColumn implements IMapA
return NumberColumn.prototype.getFilter.call(this);
}

setFilter(value: INumberFilter = {min: -Infinity, max: +Infinity, filterMissing: false}) {
setFilter(value: INumberFilter | null) {
NumberColumn.prototype.setFilter.call(this, value);
}

filter(row: IDataRow) {
return NumberColumn.prototype.filter.call(this, row);
}

clearFilter() {
return NumberColumn.prototype.clearFilter.call(this);
}
}
4 changes: 4 additions & 0 deletions src/model/SetColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,10 @@ export default class SetColumn extends ValueColumn<string[]> implements IArrayCo
return CategoricalColumn.prototype.setFilter.call(this, filter);
}

clearFilter() {
return CategoricalColumn.prototype.clearFilter.call(this);
}

toCompareValue(row: IDataRow) {
const v = this.getSet(row);

Expand Down
6 changes: 6 additions & 0 deletions src/model/StringColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,12 @@ export default class StringColumn extends ValueColumn<string> {
this.fire([StringColumn.EVENT_FILTER_CHANGED, Column.EVENT_DIRTY_VALUES, Column.EVENT_DIRTY], this.currentFilter, this.currentFilter = filter);
}

clearFilter() {
const was = this.isFiltered();
this.setFilter(null);
return was;
}

getGroupCriteria() {
return this.currentGroupCriteria.slice();
}
Expand Down
4 changes: 4 additions & 0 deletions src/provider/ADataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,10 @@ abstract class ADataProvider extends AEventDispatcher implements IDataProvider {
this.fire([ADataProvider.EVENT_REMOVE_RANKING, ADataProvider.EVENT_DIRTY_HEADER, ADataProvider.EVENT_DIRTY_VALUES, ADataProvider.EVENT_DIRTY], null, -1);
}

clearFilters() {
this.rankings.forEach((ranking) => ranking.clearFilters());
}

/**
* returns a list of all current rankings
* @returns {Ranking[]}
Expand Down
2 changes: 2 additions & 0 deletions src/provider/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ export interface IDataProvider extends AEventDispatcher {
getShowTopN(): number;

getRow(dataIndex: number): Promise<IDataRow> | IDataRow;

clearFilters(): void;
}


Expand Down
17 changes: 16 additions & 1 deletion src/styles/panel/_index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,27 @@
font-size: small;
padding: 1em 0.5em;

span {
> span {
padding: 2px;
border: 1px solid $lu_selected_color;
}
}

.#{$lu_css_prefix}-stats-reset {
padding: 2px;
font-style: normal;
display: unset;
color: $lu_toolbar_color_base2;

&:hover {
color: $lu_toolbar_color_hover;
}

> span {
padding-left: 2px;
}
}

.#{$lu_css_prefix}-collapser {
position: absolute;
right: 0;
Expand Down
2 changes: 1 addition & 1 deletion src/ui/dialogs/DateFilterDialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export default class DateFilterDialog extends ADialog {

private updateFilter(filter: IDateFilter | null) {
updateFilterState(this.attachment, this.column, filter != null && !isDummyDateFilter(filter));
this.column.setFilter(filter != null ? filter : undefined);
this.column.setFilter(filter);
}

reset() {
Expand Down
13 changes: 12 additions & 1 deletion src/ui/panel/SidePanel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,18 @@ export default class SidePanel {
const r = this.data.getFirstRanking();
const f = format(',d');
const visible = r ? r.getGroups().reduce((a, b) => a + b.order.length, 0) : 0;
stats.innerHTML = `Showing <strong>${f(visible)}</strong> of ${f(this.data.getTotalNumberOfRows())} items${s.length > 0 ? `; <span>${f(s.length)} selected</span>` : ''}`;
const total = this.data.getTotalNumberOfRows();
stats.innerHTML = `Showing <strong>${f(visible)}</strong> of ${f(total)} items${s.length > 0 ? `; <span>${f(s.length)} selected</span>` : ''}${visible < total ? ` <i class="${cssClass('action')} ${cssClass('action-filter')} ${cssClass('stats-reset')}" title="Reset filters"><span>Reset</span></i>` : ''}`;

const resetButton = stats.querySelector<HTMLElement>(`.${cssClass('stats-reset')}`);
if (!resetButton) {
return;
}
resetButton.onclick = (evt) => {
evt.preventDefault();
evt.stopPropagation();
this.data.clearFilters();
};
}

destroy() {
Expand Down

0 comments on commit 8bacc89

Please sign in to comment.