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..2afd022e0 --- /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: 'htDisplayStringEnum' +}) +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.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 new file mode 100644 index 000000000..7ffdb0c81 --- /dev/null +++ b/projects/common/src/utilities/formatters/enum/display-string-enum.ts @@ -0,0 +1,13 @@ +import { isNil, startCase } from 'lodash-es'; + +export const displayStringEnum = (provided?: string): string => { + if (isNil(provided)) { + return '-'; + } + + // 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()}`; +}; 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 {}