Skip to content

Commit

Permalink
add all toolbar actions to model
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Mar 19, 2020
1 parent 3f65332 commit 89d4af6
Show file tree
Hide file tree
Showing 30 changed files with 44 additions and 61 deletions.
2 changes: 1 addition & 1 deletion src/model/AggregateGroupColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export declare function aggregate(ranking: Ranking, group: IGroup, value: boolea
/**
* a checkbox column for selections
*/
@toolbar('setShowTopN')
@toolbar('setShowTopN', 'rename')
@SupportType()
@Category('support')
export default class AggregateGroupColumn extends Column {
Expand Down
2 changes: 1 addition & 1 deletion src/model/BooleanColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export declare function filterChanged_BC(previous: boolean | null, current: bool
/**
* a string column with optional alignment
*/
@toolbar('group', 'groupBy', 'filterBoolean', 'colorMappedCategorical')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'group', 'groupBy', 'filterBoolean', 'colorMappedCategorical')
@Category('categorical')
export default class BooleanColumn extends ValueColumn<boolean> implements ICategoricalColumn {
static readonly EVENT_FILTER_CHANGED = 'filterChanged';
Expand Down
3 changes: 2 additions & 1 deletion src/model/BooleansColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Column, {labelChanged, metaDataChanged, dirty, dirtyHeader, dirtyValues,
import {IEventListener} from '../internal';
import {chooseUIntByDataLength} from './internal';
import {toCategory} from './internalCategorical';
import {toolbar} from './annotations';


export declare type IBooleansColumnDesc = IArrayColumnDesc<boolean>;
Expand All @@ -19,7 +20,7 @@ export declare type IBooleansColumnDesc = IArrayColumnDesc<boolean>;
*/
export declare function colorMappingChanged_BCS(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;


@toolbar('rename', 'clone', 'sort', 'sortBy')
export default class BooleansColumn extends ArrayColumn<boolean> implements ISetColumn {
static readonly EVENT_COLOR_MAPPING_CHANGED = CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED;

Expand Down
2 changes: 1 addition & 1 deletion src/model/BoxPlotColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export declare function colorMappingChanged_BPC(previous: IColorMappingFunction,
export declare function filterChanged_BPC(previous: INumberFilter | null, current: INumberFilter | null): void;


@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sort', 'sortBoxPlot')
@Category('array')
@SortByDefault('descending')
Expand Down
2 changes: 1 addition & 1 deletion src/model/CategoricalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export declare function filterChanged_CC(previous: ICategoricalFilter | null, cu
/**
* column for categorical values
*/
@toolbar('group', 'groupBy', 'sortGroupBy', 'filterCategorical', 'colorMappedCategorical')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'group', 'groupBy', 'sortGroupBy', 'filterCategorical', 'colorMappedCategorical')
@Category('categorical')
export default class CategoricalColumn extends ValueColumn<string> implements ICategoricalColumn {
static readonly EVENT_FILTER_CHANGED = 'filterChanged';
Expand Down
2 changes: 1 addition & 1 deletion src/model/CategoricalMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export declare type ICategoricalMapColumnDesc = ICategoricalDesc & IMapColumnDes
*/
export declare function colorMappingChanged_CMC(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;

@toolbar('colorMappedCategorical')
@toolbar('rename', 'colorMappedCategorical')
export default class CategoricalMapColumn extends MapColumn<string | null> implements ICategoricalLikeColumn {
static readonly EVENT_COLOR_MAPPING_CHANGED = CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED;

Expand Down
2 changes: 1 addition & 1 deletion src/model/CategoricalsColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export declare function colorMappingChanged_CCS(previous: ICategoricalColorMappi
/**
* a string column with optional alignment
*/
@toolbar('colorMappedCategorical')
@toolbar('rename', 'colorMappedCategorical')
export default class CategoricalsColumn extends ArrayColumn<string | null> implements ICategoricalsColumn {
static readonly EVENT_COLOR_MAPPING_CHANGED = CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED;

Expand Down
3 changes: 2 additions & 1 deletion src/model/CompositeNumberColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import CompositeColumn from './CompositeColumn';
import {IDataRow, IGroup, IColumnDesc} from './interfaces';
import {isMissingValue} from './missing';
import NumberColumn from './NumberColumn';
import {SortByDefault} from './annotations';
import {SortByDefault, toolbar} from './annotations';
import {ISequence} from '../internal';
import {INumberColumn} from './INumberColumn';

Expand All @@ -20,6 +20,7 @@ export declare type ICompositeNumberColumnDesc = ICompositeNumberDesc & IColumnD
/**
* implementation of a combine column, standard operations how to select
*/
@toolbar('rename', 'clone', 'sort', 'sortBy', 'group', 'groupBy')
@SortByDefault('descending')
export default class CompositeNumberColumn extends CompositeColumn implements INumberColumn {
private readonly numberFormat: (n: number) => string = format('.3n');
Expand Down
2 changes: 1 addition & 1 deletion src/model/DateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export declare function filterChanged_DC(previous: IDateFilter | null, current:
*/
export declare function groupingChanged_DC(previous: IDateGrouper | null, current: IDateGrouper | null): void;

@toolbar('groupBy', 'sortGroupBy', 'filterDate')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'groupBy', 'sortGroupBy', 'filterDate')
@dialogAddons('group', 'groupDate')
@Category('date')
export default class DateColumn extends ValueColumn<Date> implements IDateColumn {
Expand Down
2 changes: 1 addition & 1 deletion src/model/DatesColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export declare function sortMethodChanged_DCS(previous: EDateSort, current: EDat
*/
export declare function filterChanged_DCS(previous: IDateFilter | null, current: IDateFilter | null): void;

@toolbar('filterDate')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterDate')
@dialogAddons('sort', 'sortDates')
export default class DatesColumn extends ArrayColumn<Date | null> implements IDatesColumn {
static readonly EVENT_SORTMETHOD_CHANGED = 'sortMethodChanged';
Expand Down
2 changes: 1 addition & 1 deletion src/model/DatesMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export declare function sortMethodChanged_DMC(previous: EDateSort, current: EDat
export declare function filterChanged_DMC(previous: IDateFilter | null, current: IDateFilter | null): void;


@toolbar('filterDate')
@toolbar('rename', 'filterDate')
@dialogAddons('sort', 'sortDates')
export default class DatesMapColumn extends MapColumn<Date | null> implements IDateColumn {
static readonly EVENT_SORTMETHOD_CHANGED = DatesColumn.EVENT_SORTMETHOD_CHANGED;
Expand Down
2 changes: 1 addition & 1 deletion src/model/GroupColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export declare function sortMethodChanged(previous: EGroupSortMethod, current: E


@SupportType()
@toolbar('sortGroupBy')
@toolbar('rename', 'sortGroupBy')
@dialogAddons('sortGroup', 'sortGroups')
@Category('support')
export default class GroupColumn extends Column {
Expand Down
2 changes: 1 addition & 1 deletion src/model/HierarchyColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export declare function cutOffChanged(previous: ICutOffNode, current: ICutOffNod
/**
* column for hierarchical categorical values
*/
@toolbar('cutoff', 'group', 'groupBy', 'colorMappedCategorical')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'cutoff', 'group', 'groupBy', 'colorMappedCategorical')
@Category('categorical')
export default class HierarchyColumn extends ValueColumn<string> implements ICategoricalColumn {
static readonly EVENT_CUTOFF_CHANGED = 'cutOffChanged';
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionBoxPlotColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export declare function colorMappingChanged_IPBC(previous: IColorMappingFunction
/**
* implementation of a combine column, standard operations how to select
*/
@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sort', 'sortBoxPlot')
@SortByDefault('descending')
export default class ImpositionBoxPlotColumn extends CompositeColumn implements IBoxPlotColumn {
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionCompositeColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export declare function colorMappingChanged_ICC(previous: IColorMappingFunction,
/**
* implementation of a combine column, standard operations how to select
*/
@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterNumber', 'colorMapped', 'editMapping')
@SortByDefault('descending')
export default class ImpositionCompositeColumn extends CompositeColumn implements INumberColumn, IMapAbleColumn {
static readonly EVENT_MAPPING_CHANGED = NumberColumn.EVENT_MAPPING_CHANGED;
Expand Down
2 changes: 1 addition & 1 deletion src/model/ImpositionCompositesColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export declare function colorMappingChanged_ICCS(previous: IColorMappingFunction
/**
* implementation of a combine column, standard operations how to select
*/
@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sort', 'sortNumbers')
@SortByDefault('descending')
export default class ImpositionCompositesColumn extends CompositeColumn implements INumbersColumn {
Expand Down
2 changes: 1 addition & 1 deletion src/model/LinkColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export declare function patternChanged_LC(previous: string, current: string): vo
/**
* a string column with optional alignment
*/
@toolbar('search', 'groupBy', 'filterString', 'editPattern')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'search', 'groupBy', 'filterString', 'editPattern')
@dialogAddons('group', 'groupString')
@Category('string')
export default class LinkColumn extends ValueColumn<string | ILink> {
Expand Down
2 changes: 1 addition & 1 deletion src/model/LinkMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export declare function patternChanged_LMC(previous: string, current: string): v
/**
* a string column with optional alignment
*/
@toolbar('search', 'editPattern')
@toolbar('rename', 'search', 'editPattern')
export default class LinkMapColumn extends MapColumn<string> {
static readonly EVENT_PATTERN_CHANGED = LinkColumn.EVENT_PATTERN_CHANGED;

Expand Down
2 changes: 1 addition & 1 deletion src/model/LinksColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export declare type ILinksColumnDesc = ILinkDesc & IArrayColumnDesc<string | ILi
*/
export declare function patternChanged_LCS(previous: string, current: string): void;

@toolbar('search', 'editPattern')
@toolbar('rename', 'search', 'editPattern')
export default class LinksColumn extends ArrayColumn<string | ILink> {
static readonly EVENT_PATTERN_CHANGED = LinkColumn.EVENT_PATTERN_CHANGED;

Expand Down
2 changes: 2 additions & 0 deletions src/model/NestedColumn.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {IDataRow, ECompareValueType} from './interfaces';
import MultiLevelCompositeColumn from './MultiLevelCompositeColumn';
import {concat} from '../internal';
import {toolbar} from './annotations';

/**
* factory for creating a description creating a mean column
Expand All @@ -15,6 +16,7 @@ export function createNestedDesc(label: string = 'Nested') {
* a nested column is a composite column where the sorting order is determined by the nested ordering of the children
* i.e., sort by the first child if equal sort by the second child,...
*/
@toolbar('rename', 'clone', 'sort', 'sortBy')
export default class NestedColumn extends MultiLevelCompositeColumn {

toCompareValue(row: IDataRow) {
Expand Down
2 changes: 1 addition & 1 deletion src/model/NumberColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export declare function groupingChanged_NC(previous: number[], current: number[]
/**
* a number column mapped from an original input scale to an output range
*/
@toolbar('groupBy', 'sortGroupBy', 'filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'groupBy', 'sortGroupBy', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sortGroup', 'sortNumber')
@dialogAddons('group', 'groupNumber')
@Category('number')
Expand Down
2 changes: 1 addition & 1 deletion src/model/NumberMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export declare function sortMethodChanged_NMC(previous: EAdvancedSortMethod, cur
*/
export declare function filterChanged_NMC(previous: INumberFilter | null, current: INumberFilter | null): void;

@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sort', 'sortNumbers')
@SortByDefault('descending')
export default class NumberMapColumn extends MapColumn<number> implements IAdvancedBoxPlotColumn {
Expand Down
2 changes: 1 addition & 1 deletion src/model/NumbersColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export declare function sortMethodChanged_NCS(previous: EAdvancedSortMethod, cur
*/
export declare function filterChanged_NCS(previous: INumberFilter | null, current: INumberFilter | null): void;

@toolbar('filterNumber', 'colorMapped', 'editMapping')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterNumber', 'colorMapped', 'editMapping')
@dialogAddons('sort', 'sortNumbers')
@SortByDefault('descending')
export default class NumbersColumn extends ArrayColumn<number> implements INumbersColumn {
Expand Down
2 changes: 1 addition & 1 deletion src/model/OrdinalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export declare function filterChanged_OC(previous: ICategoricalFilter | null, cu
/**
* similar to a categorical column but the categories are mapped to numbers
*/
@toolbar('group', 'filterOrdinal', 'colorMappedCategorical')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'group', 'filterOrdinal', 'colorMappedCategorical')
@Category('categorical')
export default class OrdinalColumn extends ValueColumn<number> implements INumberColumn, ICategoricalColumn {
static readonly EVENT_MAPPING_CHANGED = NumberColumn.EVENT_MAPPING_CHANGED;
Expand Down
2 changes: 1 addition & 1 deletion src/model/SetColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export declare function filterChanged_SSC(previous: ICategoricalFilter | null, c
/**
* a string column with optional alignment
*/
@toolbar('filterCategorical', 'colorMappedCategorical', 'group', 'groupBy')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'filterCategorical', 'colorMappedCategorical', 'group', 'groupBy')
@Category('categorical')
export default class SetColumn extends ValueColumn<string[]> implements IArrayColumn<boolean>, ISetColumn {
static readonly EVENT_FILTER_CHANGED = CategoricalColumn.EVENT_FILTER_CHANGED;
Expand Down
2 changes: 1 addition & 1 deletion src/model/StringColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export declare function groupingChanged_SC(previous: (RegExp | string)[][], curr
/**
* a string column with optional alignment
*/
@toolbar('search', 'groupBy', 'filterString')
@toolbar('rename', 'clone', 'sort', 'sortBy', 'search', 'groupBy', 'filterString')
@dialogAddons('group', 'groupString')
@Category('string')
export default class StringColumn extends ValueColumn<string> {
Expand Down
2 changes: 1 addition & 1 deletion src/model/StringMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export declare type IStringMapColumnDesc = IStringDesc & IMapColumnDesc<string>;
/**
* a string column with optional alignment
*/
@toolbar('search')
@toolbar('rename', 'search')
export default class StringMapColumn extends MapColumn<string> {
readonly alignment: EAlignment;
readonly escape: boolean;
Expand Down
2 changes: 1 addition & 1 deletion src/model/StringsColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export declare type IStringsColumnDesc = IStringDesc & IArrayColumnDesc<string>;
/**
* a string column with optional alignment
*/
@toolbar('search')
@toolbar('rename', 'search')
export default class StringsColumn extends ArrayColumn<string> {
readonly alignment: EAlignment;
readonly escape: boolean;
Expand Down
3 changes: 2 additions & 1 deletion src/ui/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ export interface IRankingHeaderContextContainer {

asElement(html: string): HTMLElement;

readonly toolbar: {[key: string]: IToolbarAction | IToolbarDialogAddon};
resolveToolbarActions(col: Column, keys: string[]): IToolbarAction[];
resolveToolbarDialogAddons(col: Column, keys: string[]): IToolbarDialogAddon[];

readonly flags: ILineUpFlags;

Expand Down
44 changes: 11 additions & 33 deletions src/ui/toolbar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ const toolbarAddons: {[key: string]: IToolbarDialogAddon} = {
};

export const toolbarActions: {[key: string]: IToolbarAction | IToolbarDialogAddon} = Object.assign({
vis,
group,
groupBy,
compress,
Expand Down Expand Up @@ -324,34 +325,20 @@ function getFullToolbar(col: Column, ctx: IRankingHeaderContext) {
if (cache.has(col.desc.type)) {
return cache.get(col.desc.type)!;
}
const icons = <{[key: string]: IToolbarAction}>ctx.toolbar;
const actions = new Set<IToolbarAction>();

let keys = getAllToolbarActions(col);

if (!col.fixed) {
actions.add(remove);
keys.push('remove');
}
{
const possible = ctx.getPossibleRenderer(col);
if (possible.item.length > 2 || possible.group.length > 2 || possible.summary.length > 2) { // default always possible
actions.add(vis);
keys.push('vis');
}
}

if (!isSupportType(col)) {
actions.add(sort);
actions.add(sortBy);
actions.add(rename);
actions.add(clone);
}

const keys = getAllToolbarActions(col);

keys.forEach((key) => {
if (icons.hasOwnProperty(key)) {
actions.add(icons[key]);
} else {
console.warn('cannot find: ', col.desc.type, key);
}
});
const actions = ctx.resolveToolbarActions(col, keys);

const r = Array.from(actions).sort(sortActions);
cache.set(col.desc.type, r);
Expand Down Expand Up @@ -379,18 +366,9 @@ export function getToolbarDialogAddons(col: Column, key: string, ctx: IRankingHe
if (cacheAddon.has(cacheKey)) {
return cacheAddon.get(cacheKey)!;
}
const icons = <{[key: string]: IToolbarDialogAddon}>ctx.toolbar;
const actions = new Set<IToolbarDialogAddon>();

const keys = getAllToolbarDialogAddons(col, key);

keys.forEach((key) => {
if (icons.hasOwnProperty(key)) {
actions.add(icons[key]);
} else {
console.warn('cannot find: ', col.desc.type, key);
}
});
const actions = ctx.resolveToolbarDialogAddons(col, keys);

const r = Array.from(actions).sort((a, b) => {
if (a.order === b.order) {
Expand All @@ -405,17 +383,17 @@ export function getToolbarDialogAddons(col: Column, key: string, ctx: IRankingHe
/** @internal */
export function isSortAble(col: Column, ctx: IRankingHeaderContext) {
const toolbar = getFullToolbar(col, ctx);
return toolbar.includes(sortBy);
return toolbar.find((d) => d === sort || d === sortBy || d.title === sort.title || d.title.startsWith('Sort By'));
}

/** @internal */
export function isGroupAble(col: Column, ctx: IRankingHeaderContext) {
const toolbar = getFullToolbar(col, ctx);
return toolbar.includes(groupBy);
return toolbar.find((d) => d === group || d === groupBy || d.title === group.title || d.title.startsWith('Group By'));
}

/** @internal */
export function isGroupSortAble(col: Column, ctx: IRankingHeaderContext) {
const toolbar = getFullToolbar(col, ctx);
return toolbar.includes(sortGroupBy);
return toolbar.find((d) => d === sortGroupBy || d.title === sortGroupBy.title || d.title.startsWith('Sort Groups By'));
}

0 comments on commit 89d4af6

Please sign in to comment.