From 7cd8c516b924cf399f40e1d3f657a90819300e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Mon, 20 Apr 2026 19:00:00 +0400 Subject: [PATCH] Add uncategorised cookie category MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the `required` boolean column on cookie_categories with a `kind` enum (NORMAL, NECESSARY, UNCATEGORISED). The Necessary category remains undeletable and always-on for consent; the new Uncategorised category is also undeletable but users can opt out of it. When a category is deleted, its cookies are merged into the Uncategorised category (lazy-created for legacy banners that don't have one yet). Signed-off-by: Émile Ré --- .../_components/CategoryDialog.tsx | 3 +- .../_components/CategoryList.tsx | 10 ++- .../cookies/CookieBannerCookiesPage.tsx | 4 +- .../cookies/_components/CategorySection.tsx | 10 +-- packages/cookie-banner/src/client.ts | 6 +- .../src/components/category-list.ts | 4 +- .../src/components/category-toggle.ts | 2 +- .../cookie-banner/src/components/category.ts | 4 +- .../src/components/cookie-banner-root.ts | 2 +- pkg/cookiebanner/errors.go | 22 ++--- pkg/cookiebanner/service.go | 53 ++++++++--- pkg/coredata/cookie_banner_version.go | 8 +- pkg/coredata/cookie_category.go | 87 +++++++++++++++---- pkg/coredata/cookie_category_kind.go | 27 ++++++ pkg/coredata/migrations/20260420T143027Z.sql | 27 ++++++ .../api/console/v1/cookie_banner_resolvers.go | 3 +- .../console/v1/graphql/cookie_banner.graphql | 3 +- .../api/console/v1/types/cookie_category.go | 2 +- 18 files changed, 207 insertions(+), 70 deletions(-) create mode 100644 pkg/coredata/cookie_category_kind.go create mode 100644 pkg/coredata/migrations/20260420T143027Z.sql diff --git a/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryDialog.tsx b/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryDialog.tsx index 32e62a1b3..b3f2aa6a0 100644 --- a/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryDialog.tsx +++ b/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryDialog.tsx @@ -41,7 +41,7 @@ const createMutation = graphql` id name description - required + kind rank cookies { name @@ -94,7 +94,6 @@ export function CategoryDialog({ cookieBannerId, name, description, - required: false, rank: nextRank, }, connections: [connectionId], diff --git a/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryList.tsx b/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryList.tsx index 80fe2cbe0..d5cc263ac 100644 --- a/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryList.tsx +++ b/apps/console/src/pages/organizations/cookie-banners/configuration/_components/CategoryList.tsx @@ -28,14 +28,16 @@ import { CategoryDialog } from "./CategoryDialog"; const categoryListFragment = graphql` fragment CategoryList_cookieBanner on CookieBanner { id - categories(first: 50, orderBy: { field: RANK, direction: ASC }) @required(action: THROW) { + categories(first: 50, orderBy: { field: RANK, direction: ASC }) + @connection(key: "CategoryList_categories") + @required(action: THROW) { __id edges { node { id name description - required + kind rank } } @@ -152,7 +154,7 @@ export function CategoryList({ cookieBannerKey }: CategoryListProps) {
{category.name} - {category.required && ( + {category.kind === "NECESSARY" && ( {__("Required")} )}
@@ -175,7 +177,7 @@ export function CategoryList({ cookieBannerKey }: CategoryListProps) {
- {!category.required && ( + {category.kind === "NORMAL" && (