From 3706b5eaec9f6600a27da1df7c38b7cdfdba884b Mon Sep 17 00:00:00 2001 From: Daste Date: Sat, 2 Aug 2025 13:53:03 +0000 Subject: [PATCH] feat(categories): Add customizable button styles This change allows the user to select the category button style displayed in panels instead of always using `Secondary` (2). --- .../migration.sql | 2 ++ db/mysql/schema.prisma | 1 + .../migration.sql | 2 ++ db/postgresql/schema.prisma | 1 + .../migration.sql | 33 +++++++++++++++++++ db/sqlite/schema.prisma | 1 + .../[guild]/categories/[category]/index.js | 1 + src/routes/api/admin/guilds/[guild]/panels.js | 7 ++-- 8 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 db/mysql/migrations/20250303181321_category_button_style/migration.sql create mode 100644 db/postgresql/migrations/20250303182300_category_button_style/migration.sql create mode 100644 db/sqlite/migrations/20250227205558_category_button_style/migration.sql diff --git a/db/mysql/migrations/20250303181321_category_button_style/migration.sql b/db/mysql/migrations/20250303181321_category_button_style/migration.sql new file mode 100644 index 000000000..06bdd25d0 --- /dev/null +++ b/db/mysql/migrations/20250303181321_category_button_style/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE `categories` ADD COLUMN `buttonStyle` INTEGER NOT NULL DEFAULT 2; diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 305dffb54..65bfc56fc 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -69,6 +69,7 @@ model ArchivedUser { } model Category { + buttonStyle Int @default(2) channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/db/postgresql/migrations/20250303182300_category_button_style/migration.sql b/db/postgresql/migrations/20250303182300_category_button_style/migration.sql new file mode 100644 index 000000000..6ab85fa60 --- /dev/null +++ b/db/postgresql/migrations/20250303182300_category_button_style/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "categories" ADD COLUMN "buttonStyle" INTEGER NOT NULL DEFAULT 2; diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 7e7841baf..319a12eb2 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -68,6 +68,7 @@ model ArchivedUser { } model Category { + buttonStyle Int @default(2) channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/db/sqlite/migrations/20250227205558_category_button_style/migration.sql b/db/sqlite/migrations/20250227205558_category_button_style/migration.sql new file mode 100644 index 000000000..c48bac562 --- /dev/null +++ b/db/sqlite/migrations/20250227205558_category_button_style/migration.sql @@ -0,0 +1,33 @@ +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_categories" ( + "buttonStyle" INTEGER NOT NULL DEFAULT 2, + "channelName" TEXT NOT NULL, + "claiming" BOOLEAN NOT NULL DEFAULT false, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "cooldown" INTEGER, + "customTopic" TEXT, + "description" TEXT NOT NULL, + "discordCategory" TEXT NOT NULL, + "emoji" TEXT NOT NULL, + "enableFeedback" BOOLEAN NOT NULL DEFAULT false, + "guildId" TEXT NOT NULL, + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "image" TEXT, + "memberLimit" INTEGER NOT NULL DEFAULT 1, + "name" TEXT NOT NULL, + "openingMessage" TEXT NOT NULL, + "pingRoles" TEXT NOT NULL DEFAULT '[]', + "ratelimit" INTEGER, + "requiredRoles" TEXT NOT NULL DEFAULT '[]', + "requireTopic" BOOLEAN NOT NULL DEFAULT false, + "staffRoles" TEXT NOT NULL, + "totalLimit" INTEGER NOT NULL DEFAULT 50, + CONSTRAINT "categories_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_categories" ("channelName", "claiming", "cooldown", "createdAt", "customTopic", "description", "discordCategory", "emoji", "enableFeedback", "guildId", "id", "image", "memberLimit", "name", "openingMessage", "pingRoles", "ratelimit", "requireTopic", "requiredRoles", "staffRoles", "totalLimit") SELECT "channelName", "claiming", "cooldown", "createdAt", "customTopic", "description", "discordCategory", "emoji", "enableFeedback", "guildId", "id", "image", "memberLimit", "name", "openingMessage", "pingRoles", "ratelimit", "requireTopic", "requiredRoles", "staffRoles", "totalLimit" FROM "categories"; +DROP TABLE "categories"; +ALTER TABLE "new_categories" RENAME TO "categories"; +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; diff --git a/db/sqlite/schema.prisma b/db/sqlite/schema.prisma index e6458ceb2..cb1ef6c69 100644 --- a/db/sqlite/schema.prisma +++ b/db/sqlite/schema.prisma @@ -68,6 +68,7 @@ model ArchivedUser { } model Category { + buttonStyle Int @default(2) channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js b/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js index c10a54bd2..5a510e4ee 100644 --- a/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js +++ b/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js @@ -76,6 +76,7 @@ module.exports.patch = fastify => ({ const data = req.body; const select = { + buttonStyle: true, channelName: true, claiming: true, // createdAt: true, diff --git a/src/routes/api/admin/guilds/[guild]/panels.js b/src/routes/api/admin/guilds/[guild]/panels.js index f7cd6704a..849d5d38c 100644 --- a/src/routes/api/admin/guilds/[guild]/panels.js +++ b/src/routes/api/admin/guilds/[guild]/panels.js @@ -1,10 +1,7 @@ const { ActionRowBuilder, ButtonBuilder, - ButtonStyle: { - Primary, - Secondary, - }, + ButtonStyle: { Primary }, ChannelType: { GuildText }, EmbedBuilder, StringSelectMenuBuilder, @@ -100,7 +97,7 @@ module.exports.post = fastify => ({ action: 'create', target: category.id, })) - .setStyle(Secondary) + .setStyle(category.buttonStyle) .setLabel(category.name) .setEmoji(emoji.hasEmoji(category.emoji) ? emoji.get(category.emoji) : { id: category.emoji }), ),