diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b61cbce..1bc186c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ - [#534](https://github.com/estruyf/vscode-front-matter/issues/534): Moved the `mediaDb.json` file to a `.frontmatter/database` folder instead of the `.frontmatter/content` folder - [#536](https://github.com/estruyf/vscode-front-matter/issues/536): Set the start location from the script to the root of the workspace +- [#555](https://github.com/estruyf/vscode-front-matter/issues/555): When generating a content-type from existing content, Front Matter will better detect the type of field +- [#556](https://github.com/estruyf/vscode-front-matter/issues/556): Content values are aligned to the type of field ### 🐞 Fixes diff --git a/src/helpers/ContentType.ts b/src/helpers/ContentType.ts index eb0c9c63..acd08025 100644 --- a/src/helpers/ContentType.ts +++ b/src/helpers/ContentType.ts @@ -520,32 +520,30 @@ export class ContentType { continue; } - if ( + if (field.toLowerCase() === 'tag' || field.toLowerCase() === 'tags') { + fields.push({ + title: field, + name: field, + type: 'tags' + } as Field); + } else if (field.toLowerCase() === 'category' || field.toLowerCase() === 'categories') { + fields.push({ + title: field, + name: field, + type: 'categories' + } as Field); + } else if ( fieldData && fieldData instanceof Array && fieldData.length > 0 && typeof fieldData[0] === 'string' ) { - if (field.toLowerCase() === 'tag' || field.toLowerCase() === 'tags') { - fields.push({ - title: field, - name: field, - type: 'tags' - } as Field); - } else if (field.toLowerCase() === 'category' || field.toLowerCase() === 'categories') { - fields.push({ - title: field, - name: field, - type: 'categories' - } as Field); - } else { - fields.push({ - title: field, - name: field, - type: 'choice', - choices: fieldData - } as Field); - } + fields.push({ + title: field, + name: field, + type: 'choice', + choices: fieldData + } as Field); } else if ( fieldData && fieldData instanceof Array && @@ -568,7 +566,19 @@ export class ContentType { fields: newFields } as Field); } else { - if (!isNaN(new Date(fieldData).getDate())) { + if (field.toLowerCase().includes('image')) { + fields.push({ + title: field, + name: field, + type: 'image' + } as Field); + } else if (typeof fieldData === 'number') { + fields.push({ + title: field, + name: field, + type: 'number' + } as Field); + } else if (!isNaN(new Date(fieldData).getDate())) { fields.push({ title: field, name: field, @@ -742,7 +752,37 @@ export class ContentType { ) { data[field.name] = true; } else { - data[field.name] = ''; + // Check the field types + switch (field.type) { + case 'choice': + if (field.multiple) { + data[field.name] = []; + } else { + data[field.name] = ''; + } + break; + case 'boolean': + data[field.name] = false; + break; + case 'number': + data[field.name] = 0; + break; + case 'datetime': + data[field.name] = null; + break; + case 'list': + case 'tags': + case 'categories': + case 'taxonomy': + data[field.name] = []; + break; + case 'string': + case 'image': + case 'file': + default: + data[field.name] = ''; + break; + } } } }