Skip to content

Commit ad7622f

Browse files
committed
feat(slugs): allow filters in template strings
Process template filters first, then strip `'` and `.` characters from slug strings. Fixes #4783
1 parent 07ef726 commit ad7622f

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

packages/netlify-cms-core/src/lib/__tests__/formatters.spec.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ describe('formatters', () => {
274274
};
275275

276276
describe('slugFormatter', () => {
277-
const date = new Date('2020-01-01');
277+
const date = new Date('2020-01-01T13:28:27.679Z');
278278
jest.spyOn(global, 'Date').mockImplementation(() => date);
279279

280280
const { selectIdentifier } = require('../../reducers/collections');
@@ -312,6 +312,18 @@ describe('formatters', () => {
312312
).toBe('entry-slug');
313313
});
314314

315+
it('should allow filters in slug templates', () => {
316+
selectIdentifier.mockReturnValueOnce('published');
317+
318+
expect(
319+
slugFormatter(
320+
Map({ slug: "{{published | date('MM-DD')}}" }),
321+
Map({ title: 'Post Title', published: date }),
322+
slugConfig,
323+
),
324+
).toBe('01-01');
325+
});
326+
315327
it('should return slug', () => {
316328
selectIdentifier.mockReturnValueOnce('title');
317329

packages/netlify-cms-lib-widgets/src/stringTemplate.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ export function compileStringTemplate(
190190
replacement = data.getIn(keyToPathArray(key), '') as string;
191191
}
192192

193+
const filterFunction = getFilterFunction(filter);
194+
if (filterFunction) {
195+
replacement = filterFunction(replacement);
196+
}
197+
193198
if (processor) {
194-
return processor(replacement);
195-
} else {
196-
const filterFunction = getFilterFunction(filter);
197-
if (filterFunction) {
198-
replacement = filterFunction(replacement);
199-
}
199+
replacement = processor(replacement);
200200
}
201201

202202
return replacement;

0 commit comments

Comments
 (0)