From c791158dd5ea8ea03930f9881a86c71cb1770836 Mon Sep 17 00:00:00 2001 From: Kolja Markwardt Date: Mon, 11 Oct 2021 17:11:06 +0200 Subject: [PATCH] feat: add string template filters "default" and "ternary" (#3677) (#5878) --- .../src/__tests__/stringTemplate.spec.js | 22 +++++++++++++++++++ .../src/stringTemplate.ts | 8 +++++++ website/content/docs/beta-features.md | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/netlify-cms-lib-widgets/src/__tests__/stringTemplate.spec.js b/packages/netlify-cms-lib-widgets/src/__tests__/stringTemplate.spec.js index 5d38e242..3a62a341 100644 --- a/packages/netlify-cms-lib-widgets/src/__tests__/stringTemplate.spec.js +++ b/packages/netlify-cms-lib-widgets/src/__tests__/stringTemplate.spec.js @@ -130,6 +130,28 @@ describe('stringTemplate', () => { ), ).toBe('BACKENDSLUG-title-01-02-2020'); }); + + it('return apply filter for default value', () => { + expect( + compileStringTemplate( + "{{slug | upper}}-{{title | default('none')}}-{{subtitle | default('none')}}", + date, + 'backendSlug', + fromJS({ slug: 'entrySlug', title: 'title', subtitle: null, published: date, date }), + ), + ).toBe('BACKENDSLUG-title-none'); + }); + + it('return apply filter for ternary', () => { + expect( + compileStringTemplate( + "{{slug | upper}}-{{starred | ternary('star️','nostar')}}-{{done | ternary('done', 'open️')}}", + date, + 'backendSlug', + fromJS({ slug: 'entrySlug', starred: true, done: false }), + ), + ).toBe('BACKENDSLUG-star️-open️'); + }); }); describe('expandPath', () => { diff --git a/packages/netlify-cms-lib-widgets/src/stringTemplate.ts b/packages/netlify-cms-lib-widgets/src/stringTemplate.ts index 9671a233..7773316d 100644 --- a/packages/netlify-cms-lib-widgets/src/stringTemplate.ts +++ b/packages/netlify-cms-lib-widgets/src/stringTemplate.ts @@ -13,6 +13,14 @@ const filters = [ pattern: /^date\('(.+)'\)$/, transform: (str: string, match: RegExpMatchArray) => moment(str).format(match[1]), }, + { + pattern: /^default\('(.+)'\)$/, + transform: (str: string, match: RegExpMatchArray) => (str ? str : match[1]), + }, + { + pattern: /^ternary\('(.*)',\s*'(.*)'\)$/, + transform: (str: string, match: RegExpMatchArray) => (str ? match[1] : match[2]), + }, ]; const FIELD_PREFIX = 'fields.'; diff --git a/website/content/docs/beta-features.md b/website/content/docs/beta-features.md index 80005d0d..41fa722a 100644 --- a/website/content/docs/beta-features.md +++ b/website/content/docs/beta-features.md @@ -545,7 +545,7 @@ collections: ``` The above config will transform the title field to uppercase and format the date field using `YYYY-MM-DD` format. -Available transformations are `upper`, `lower` and `date('')` +Available transformations are `upper`, `lower`, `date(''), default('defaultValue') and ternary('valueForTrue','valueForFalse')` ## Registering to CMS Events