diff --git a/packages/decap-cms-core/index.d.ts b/packages/decap-cms-core/index.d.ts index 1708b1f33a92..9469c5802de4 100644 --- a/packages/decap-cms-core/index.d.ts +++ b/packages/decap-cms-core/index.d.ts @@ -56,7 +56,7 @@ declare module 'decap-cms-core' { label?: string; required?: boolean; hint?: string; - pattern?: [string, string]; + pattern?: [string | RegExp, string]; i18n?: boolean | 'translate' | 'duplicate' | 'none'; media_folder?: string; public_folder?: string; @@ -299,7 +299,7 @@ declare module 'decap-cms-core' { export interface ViewFilter { label: string; field: string; - pattern: string; + pattern: string | boolean; } export interface ViewGroup { diff --git a/packages/decap-cms-core/src/reducers/entries.ts b/packages/decap-cms-core/src/reducers/entries.ts index 653b77aee867..e651bcf6768b 100644 --- a/packages/decap-cms-core/src/reducers/entries.ts +++ b/packages/decap-cms-core/src/reducers/entries.ts @@ -474,14 +474,16 @@ function getGroup(entry: EntryMap, selectedGroup: GroupMap) { if (selectedGroup.has('pattern')) { const pattern = selectedGroup.get('pattern'); let value = ''; - try { - const regex = new RegExp(pattern); - const matched = dataAsString.match(regex); - if (matched) { - value = matched[0]; + if (pattern !== undefined) { + try { + const regex = new RegExp(pattern); + const matched = dataAsString.match(regex); + if (matched) { + value = matched[0]; + } + } catch (e) { + console.warn(`Invalid view group pattern '${pattern}' for field '${field}'`, e); } - } catch (e) { - console.warn(`Invalid view group pattern '${pattern}' for field '${field}'`, e); } return { id: `${label}${value}`, diff --git a/packages/decap-cms-core/src/types/redux.ts b/packages/decap-cms-core/src/types/redux.ts index ef31fbfc0a1e..3f3f3d7c702d 100644 --- a/packages/decap-cms-core/src/types/redux.ts +++ b/packages/decap-cms-core/src/types/redux.ts @@ -72,7 +72,7 @@ export interface CmsFieldBase { label?: string; required?: boolean; hint?: string; - pattern?: [string, string]; + pattern?: [string | RegExp, string]; i18n?: boolean | 'translate' | 'duplicate' | 'none'; media_folder?: string; public_folder?: string; @@ -315,14 +315,14 @@ export interface CmsCollectionFile { export interface ViewFilter { label: string; field: string; - pattern: string; + pattern: string | boolean; id: string; } export interface ViewGroup { label: string; field: string; - pattern: string; + pattern?: string; id: string; }