Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
feat(filter-field): Improves typing for the data structures the defau…
Browse files Browse the repository at this point in the history
…lt-data-source takes.

BREAKING CHANGE: Changes the typing for the default-data-source to better match the data structures.
  • Loading branch information
thomaspink authored and lukasholzer committed Jan 21, 2020
1 parent 6cff6ef commit 4f28d1c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 49 deletions.
58 changes: 26 additions & 32 deletions components/filter-field/src/filter-field-default-data-source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,51 +30,49 @@ import {
dtRangeDef,
} from './types';

/** Shape of a base object to be usable as a option for various autocomplete option types. */
export type DtFilterFieldDefaultDataSourceOptionBase = {
/** The simple Shape of an object to be usable as a option in an autocomplete or free-text */
export interface DtFilterFieldDefaultDataSourceSimpleOption {
name: string;
id?: any;
};
}

/** Shape of an object to be usable as a option in an autocomplete */
export type DtFilterFieldDefaultDataSourceOption =
| DtFilterFieldDefaultDataSourceOptionBase
| (DtFilterFieldDefaultDataSourceOptionBase &
DtFilterFieldDefaultDataSourceAutocomplete)
| (DtFilterFieldDefaultDataSourceOptionBase &
DtFilterFieldDefaultDataSourceFreeText)
| (DtFilterFieldDefaultDataSourceOptionBase &
DtFilterFieldDefaultDataSourceRange);
| DtFilterFieldDefaultDataSourceSimpleOption
| (DtFilterFieldDefaultDataSourceAutocomplete &
DtFilterFieldDefaultDataSourceSimpleOption)
| (DtFilterFieldDefaultDataSourceFreeText &
DtFilterFieldDefaultDataSourceSimpleOption)
| (DtFilterFieldDefaultDataSourceRange &
DtFilterFieldDefaultDataSourceSimpleOption);

/** Shape of an object to be usable as a group in an autocomplete */
export interface DtFilterFieldDefaultDataSourceGroup {
/** Shape of an object to be usable as a group in a free-text */
export interface DtFilterFieldDefaultDataSourceSimpleGroup {
name: string;
id?: any;
options: Array<DtFilterFieldDefaultDataSourceOption | string>;
options: Array<DtFilterFieldDefaultDataSourceSimpleOption>;
}

/** Shape of an object to be usable as a group in an autocomplete */
export interface DtFilterFieldDefaultDataSourceGroup
extends DtFilterFieldDefaultDataSourceSimpleGroup {
options: Array<DtFilterFieldDefaultDataSourceOption>;
}

/** Shape of an object to be usable as an autocomplete */
export interface DtFilterFieldDefaultDataSourceAutocomplete {
autocomplete: Array<
| DtFilterFieldDefaultDataSourceOption
| DtFilterFieldDefaultDataSourceGroup
| string
DtFilterFieldDefaultDataSourceOption | DtFilterFieldDefaultDataSourceGroup
>;
distinct?: boolean;
async?: boolean;
id?: any;
}

/** Shape of an object to be usable as a free text variant */
export interface DtFilterFieldDefaultDataSourceFreeText {
suggestions: Array<
| DtFilterFieldDefaultDataSourceOption
| DtFilterFieldDefaultDataSourceGroup
| string
| DtFilterFieldDefaultDataSourceSimpleOption
| DtFilterFieldDefaultDataSourceSimpleGroup
>;
validators: DtFilterFieldValidator[];
unique?: boolean;
id?: any;
}

export interface DtFilterFieldDefaultDataSourceRange {
Expand All @@ -88,7 +86,6 @@ export interface DtFilterFieldDefaultDataSourceRange {
};
};
unique?: boolean;
id?: any;
}

export type DtFilterFieldDefaultDataSourceType =
Expand Down Expand Up @@ -205,10 +202,7 @@ export class DtFilterFieldDefaultDataSource<
/** Whether the provided data object is of type OptionData */
// tslint:disable-next-line: no-any
isOption(data: any): data is DtFilterFieldDefaultDataSourceOption {
return (
typeof data === 'string' ||
(isObject(data) && typeof data.name === 'string')
);
return isObject(data) && typeof data.name === 'string';
}

/** Whether the provided data object is of type GroupData */
Expand Down Expand Up @@ -269,7 +263,7 @@ export class DtFilterFieldDefaultDataSource<
return dtOptionDef(
data,
existingDef,
typeof data === 'string' ? data : data.name,
data.name,
null,
parentAutocomplete,
parentGroup,
Expand Down Expand Up @@ -322,7 +316,7 @@ export class DtFilterFieldDefaultDataSource<

/** Transforms the provided data into a DtNodeDef. */
transformObject(
data: DtFilterFieldDefaultDataSourceType | string | null,
data: DtFilterFieldDefaultDataSourceType | null,
parent: DtNodeDef | null = null,
): DtNodeDef | null {
let def: DtNodeDef | null = null;
Expand All @@ -344,7 +338,7 @@ export class DtFilterFieldDefaultDataSource<

/** Transforms the provided list of data objects into an array of DtNodeDefs. */
transformList(
list: Array<DtFilterFieldDefaultDataSourceType | string>,
list: Array<DtFilterFieldDefaultDataSourceType>,
parent: DtNodeDef | null = null,
): DtNodeDef[] {
return list
Expand Down
34 changes: 17 additions & 17 deletions components/filter-field/src/filter-field.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ import {
wrappedErrorMessage,
} from '@dynatrace/barista-components/testing';

const TEST_DATA: DtFilterFieldDefaultDataSourceType = {
const TEST_DATA = {
autocomplete: [
{
name: 'AUT',
Expand All @@ -62,7 +62,7 @@ const TEST_DATA: DtFilterFieldDefaultDataSourceType = {
autocomplete: [
{
name: 'Cities',
options: ['Linz', 'Wels', 'Steyr'],
options: [{ name: 'Linz' }, { name: 'Wels' }, { name: 'Steyr' }],
},
],
},
Expand All @@ -73,7 +73,7 @@ const TEST_DATA: DtFilterFieldDefaultDataSourceType = {
},
{
name: 'USA',
autocomplete: ['Los Angeles', 'San Fran'],
autocomplete: [{ name: 'Los Angeles' }, { name: 'San Fran' }],
},
{
name: 'Free',
Expand All @@ -100,11 +100,11 @@ const TEST_DATA_SINGLE_DISTINCT: DtFilterFieldDefaultDataSourceType = {
],
};

const TEST_DATA_SINGLE_OPTION: DtFilterFieldDefaultDataSourceType = {
autocomplete: ['option'],
const TEST_DATA_SINGLE_OPTION = {
autocomplete: [{ name: 'option' }],
};

const TEST_DATA_SUGGESTIONS: DtFilterFieldDefaultDataSourceType = {
const TEST_DATA_SUGGESTIONS = {
autocomplete: [
{
name: 'Node',
Expand All @@ -115,15 +115,15 @@ const TEST_DATA_SUGGESTIONS: DtFilterFieldDefaultDataSourceType = {
{
name: 'Node Label',
key: 'MyKey',
suggestions: ['some cool', 'very weird'],
suggestions: [{ name: 'some cool' }, { name: 'very weird' }],
validators: [],
},
],
},
],
};

const TEST_DATA_RANGE: DtFilterFieldDefaultDataSourceType = {
const TEST_DATA_RANGE = {
autocomplete: [
{
name: 'Requests per minute',
Expand All @@ -140,7 +140,7 @@ const TEST_DATA_RANGE: DtFilterFieldDefaultDataSourceType = {
],
};

const TEST_DATA_EDITMODE: DtFilterFieldDefaultDataSourceType = {
const TEST_DATA_EDITMODE = {
autocomplete: [
{
name: 'AUT',
Expand All @@ -151,7 +151,7 @@ const TEST_DATA_EDITMODE: DtFilterFieldDefaultDataSourceType = {
autocomplete: [
{
name: 'Cities',
options: ['Linz', 'Wels', 'Steyr'],
options: [{ name: 'Linz' }, { name: 'Wels' }, { name: 'Steyr' }],
},
],
},
Expand All @@ -162,7 +162,7 @@ const TEST_DATA_EDITMODE: DtFilterFieldDefaultDataSourceType = {
},
{
name: 'USA',
autocomplete: ['Los Angeles', 'San Fran'],
autocomplete: [{ name: 'Los Angeles' }, { name: 'San Fran' }],
},
{
name: 'Free',
Expand All @@ -189,7 +189,7 @@ const TEST_DATA_EDITMODE: DtFilterFieldDefaultDataSourceType = {
],
};

export const TEST_DATA_EDITMODE_ASYNC: DtFilterFieldDefaultDataSourceType = {
export const TEST_DATA_EDITMODE_ASYNC = {
name: 'DE (async)',
autocomplete: [
{ name: 'Berlin' },
Expand Down Expand Up @@ -1559,9 +1559,9 @@ describe('DtFilterField', () => {
[
{
name: 'USA',
autocomplete: ['Los Angeles', 'San Fran'],
autocomplete: [{ name: 'Los Angeles' }, { name: 'San Fran' }],
},
'Los Angeles',
{ name: 'Los Angeles' },
],
];
fixture.detectChanges();
Expand All @@ -1576,9 +1576,9 @@ describe('DtFilterField', () => {
[
{
name: 'Spain',
autocomplete: ['Madrid', 'Barcelona'],
autocomplete: [{ name: 'Madrid' }, { name: 'Barcelona' }],
},
'Madrid',
{ name: 'Madrid' },
],
];
fixture.detectChanges();
Expand Down Expand Up @@ -1806,7 +1806,7 @@ describe('DtFilterField', () => {
const notIncludedAutocomplete = [
{
name: 'USA',
autocomplete: ['Los Angeles', 'San Fran'],
autocomplete: [{ name: 'Los Angeles' }, { name: 'San Fran' }],
},
'Los Angeles',
];
Expand Down

0 comments on commit 4f28d1c

Please sign in to comment.