From a3620c5972243f5ed20038fda682e165d9ceba7a Mon Sep 17 00:00:00 2001 From: Jake Bassett Date: Wed, 7 Apr 2021 13:15:47 -0700 Subject: [PATCH 1/3] feat: add pipe to format enums and properties to display names --- projects/common/src/public-api.ts | 2 ++ .../formatters/enum/display-string-enum.pipe.ts | 11 +++++++++++ .../utilities/formatters/enum/display-string-enum.ts | 9 +++++++++ .../src/utilities/formatters/formatting.module.ts | 7 +++++-- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts create mode 100644 projects/common/src/utilities/formatters/enum/display-string-enum.ts diff --git a/projects/common/src/public-api.ts b/projects/common/src/public-api.ts index ea1e52820..9df58361b 100644 --- a/projects/common/src/public-api.ts +++ b/projects/common/src/public-api.ts @@ -51,6 +51,8 @@ export * from './utilities/formatters/numeric/display-number.pipe'; export * from './utilities/formatters/numeric/numeric-formatter'; export * from './utilities/formatters/string/string-formatter'; export * from './utilities/formatters/string/highlight.pipe'; +export * from './utilities/formatters/enum/display-string-enum.pipe'; +export * from './utilities/formatters/enum/display-string-enum'; // Http Param Encoder export { HttpParamEncoder } from './utilities/http/http-param-encoder'; diff --git a/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts b/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts new file mode 100644 index 000000000..0832c481b --- /dev/null +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { displayStringEnum } from './display-string-enum'; + +@Pipe({ + name: 'htDisplayEnum' +}) +export class DisplayStringEnumPipe implements PipeTransform { + public transform(value: string): string { + return displayStringEnum(value); + } +} diff --git a/projects/common/src/utilities/formatters/enum/display-string-enum.ts b/projects/common/src/utilities/formatters/enum/display-string-enum.ts new file mode 100644 index 000000000..e9ef80cfd --- /dev/null +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.ts @@ -0,0 +1,9 @@ +import { isNil, startCase } from 'lodash-es'; + +export const displayStringEnum = (provided?: string): string => { + if (isNil(provided)) { + return '-'; + } + + return startCase(provided.toLowerCase()); +}; diff --git a/projects/common/src/utilities/formatters/formatting.module.ts b/projects/common/src/utilities/formatters/formatting.module.ts index 2dd94da8e..b38935005 100644 --- a/projects/common/src/utilities/formatters/formatting.module.ts +++ b/projects/common/src/utilities/formatters/formatting.module.ts @@ -1,6 +1,7 @@ import { NgModule } from '@angular/core'; import { DisplayDatePipe } from './date/display-date.pipe'; import { DisplayDurationPipe } from './duration/display-duration.pipe'; +import { DisplayStringEnumPipe } from './enum/display-string-enum.pipe'; import { DisplayNumberPipe } from './numeric/display-number.pipe'; import { OrdinalPipe } from './ordinal/ordinal.pipe'; import { DisplayStringPipe } from './string/display-string.pipe'; @@ -17,7 +18,8 @@ import { DisplayTimeAgo } from './time/display-time-ago.pipe'; DisplayStringPipe, HighlightPipe, DisplayTitlePipe, - OrdinalPipe + OrdinalPipe, + DisplayStringEnumPipe ], exports: [ DisplayNumberPipe, @@ -27,7 +29,8 @@ import { DisplayTimeAgo } from './time/display-time-ago.pipe'; DisplayStringPipe, HighlightPipe, DisplayTitlePipe, - OrdinalPipe + OrdinalPipe, + DisplayStringEnumPipe ] }) export class FormattingModule {} From e6b6ba1d19ef9ddd858bb063d8e72174848a48e5 Mon Sep 17 00:00:00 2001 From: Jake Bassett Date: Wed, 7 Apr 2021 13:16:33 -0700 Subject: [PATCH 2/3] feat: update name --- .../src/utilities/formatters/enum/display-string-enum.pipe.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts b/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts index 0832c481b..2afd022e0 100644 --- a/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.pipe.ts @@ -2,7 +2,7 @@ import { Pipe, PipeTransform } from '@angular/core'; import { displayStringEnum } from './display-string-enum'; @Pipe({ - name: 'htDisplayEnum' + name: 'htDisplayStringEnum' }) export class DisplayStringEnumPipe implements PipeTransform { public transform(value: string): string { From c00c4a29c8ca98c170a621e9821b1d7c05b02c6f Mon Sep 17 00:00:00 2001 From: Jake Bassett Date: Wed, 7 Apr 2021 13:51:49 -0700 Subject: [PATCH 3/3] test: add them --- .../enum/display-string-enum.test.ts | 31 +++++++++++++++++++ .../formatters/enum/display-string-enum.ts | 6 +++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 projects/common/src/utilities/formatters/enum/display-string-enum.test.ts diff --git a/projects/common/src/utilities/formatters/enum/display-string-enum.test.ts b/projects/common/src/utilities/formatters/enum/display-string-enum.test.ts new file mode 100644 index 000000000..1692a00ec --- /dev/null +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.test.ts @@ -0,0 +1,31 @@ +import { displayStringEnum } from './display-string-enum'; + +describe('Display string enum', () => { + const enum TestEnum { + Flat = 'flatcase', + UpperFlat = 'UPPERFLATCASE', + Camel = 'camelCase', + Pascal = 'PascalCase', + Snake = 'snake_case', + PascalSnake = 'Pascal_Snake_Case', + Kabob = 'kabob-case', + Train = 'Train-Case', + Macro = 'MACRO_CASE', + MacroTrain = 'MACRO-TRAIN-CASE' + } + + test('can convert to display string', () => { + expect(displayStringEnum(undefined)).toBe('-'); + expect(displayStringEnum('a')).toBe('A'); + expect(displayStringEnum(TestEnum.Flat)).toBe('Flatcase'); + expect(displayStringEnum(TestEnum.UpperFlat)).toBe('Upperflatcase'); + expect(displayStringEnum(TestEnum.Camel)).toBe('Camel case'); + expect(displayStringEnum(TestEnum.Pascal)).toBe('Pascal case'); + expect(displayStringEnum(TestEnum.Snake)).toBe('Snake case'); + expect(displayStringEnum(TestEnum.PascalSnake)).toBe('Pascal snake case'); + expect(displayStringEnum(TestEnum.Kabob)).toBe('Kabob case'); + expect(displayStringEnum(TestEnum.Train)).toBe('Train case'); + expect(displayStringEnum(TestEnum.Macro)).toBe('Macro case'); + expect(displayStringEnum(TestEnum.MacroTrain)).toBe('Macro train case'); + }); +}); diff --git a/projects/common/src/utilities/formatters/enum/display-string-enum.ts b/projects/common/src/utilities/formatters/enum/display-string-enum.ts index e9ef80cfd..7ffdb0c81 100644 --- a/projects/common/src/utilities/formatters/enum/display-string-enum.ts +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.ts @@ -5,5 +5,9 @@ export const displayStringEnum = (provided?: string): string => { return '-'; } - return startCase(provided.toLowerCase()); + // This removes dashes and underscores and gives all words initial caps + const startCased = startCase(provided); + + // We only want the first word capitalized. + return `${startCased[0]}${startCased.substr(1).toLowerCase()}`; };