From 2d838b2dcf9edc5af006334d33b3213d92d505a9 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 4 May 2026 20:36:17 +0200 Subject: [PATCH] feat(core-shared): add seoFields group --- .../src/payload/fields/seo-fields.test.ts | 27 +++++++++++++++++++ .../src/payload/fields/seo-fields.ts | 10 +++++++ 2 files changed, 37 insertions(+) create mode 100644 packages/core-shared/src/payload/fields/seo-fields.test.ts create mode 100644 packages/core-shared/src/payload/fields/seo-fields.ts diff --git a/packages/core-shared/src/payload/fields/seo-fields.test.ts b/packages/core-shared/src/payload/fields/seo-fields.test.ts new file mode 100644 index 0000000..3cf05fc --- /dev/null +++ b/packages/core-shared/src/payload/fields/seo-fields.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; +import { seoFields } from "./seo-fields"; + +describe("seoFields", () => { + it("is a group field named 'seo'", () => { + expect(seoFields.name).toBe("seo"); + expect(seoFields.type).toBe("group"); + }); + + it("contains required title and optional description", () => { + if (seoFields.type !== "group") { + throw new Error("seoFields must be a group"); + } + const fieldNames = seoFields.fields.map((f) => + "name" in f ? f.name : null, + ); + expect(fieldNames).toContain("title"); + expect(fieldNames).toContain("description"); + + const titleField = seoFields.fields.find( + (f) => "name" in f && f.name === "title", + ); + expect(titleField && "required" in titleField && titleField.required).toBe( + true, + ); + }); +}); diff --git a/packages/core-shared/src/payload/fields/seo-fields.ts b/packages/core-shared/src/payload/fields/seo-fields.ts new file mode 100644 index 0000000..f02a2e0 --- /dev/null +++ b/packages/core-shared/src/payload/fields/seo-fields.ts @@ -0,0 +1,10 @@ +import type { Field } from "payload"; + +export const seoFields: Field = { + name: "seo", + type: "group", + fields: [ + { name: "title", type: "text", required: true }, + { name: "description", type: "textarea" }, + ], +};