diff --git a/src/client/src/ts/guild/feeds.ts b/src/client/src/ts/guild/feeds.ts index 3a936cb..d9103fb 100644 --- a/src/client/src/ts/guild/feeds.ts +++ b/src/client/src/ts/guild/feeds.ts @@ -368,8 +368,9 @@ $(document).on("click", ".open-edit-modal-js", async event => { await openEditModal($(event.target).data("id")); }); -interface FeedWithChannels extends prisma.Feed { - channels: prisma.Channel[] +interface ExpandedFeed extends prisma.Feed { + channels: prisma.Channel[], + filters: prisma.Feed[] } const clearEditModalData = () => { @@ -379,10 +380,11 @@ const clearEditModalData = () => { $("#formUrl").val(""); $("#formActive").prop("checked", true); channelSelect.setValue([]); + filterSelect.setValue([]); }; const loadEditModalData = async (id: number) => { - const feed: FeedWithChannels = await $.ajax({ + const feed: ExpandedFeed = await $.ajax({ url: `/guild/${guildId}/feeds/api?id=${id}`, method: "get" }); @@ -394,6 +396,7 @@ const loadEditModalData = async (id: number) => { $("#formActive").prop("checked", feed.active); channelSelect.setValue(feed.channels.map(channel => channel.channel_id)); + filterSelect.setValue(feed.filters.map(filter => `${filter.id}`)); } const openEditModal = async (id: number | undefined) => { @@ -532,13 +535,11 @@ $("#editForm").on("submit", async event => { let method = "post"; const data = $(event.target).serializeArray(); + + // If 'id' has a value, we are patching an existing entry const id: number | undefined = $(editModal.el).data("id"); - if (id !== undefined) { - data.push({ - name: "id", - value: `${id}` - }) + data.push({ name: "id", value: `${id}` }); method = "patch"; } diff --git a/src/server/controllers/guild/api/feed.controller.ts b/src/server/controllers/guild/api/feed.controller.ts index 974f55a..0a88d4b 100644 --- a/src/server/controllers/guild/api/feed.controller.ts +++ b/src/server/controllers/guild/api/feed.controller.ts @@ -10,7 +10,7 @@ export const get = async (request: Request, response: Response) => { const feed = await prisma.feed.findUnique({ where: { id: Number(request.query.id) }, - include: { channels: true } + include: { channels: true, filters: true } }); if (!feed) { @@ -23,12 +23,22 @@ export const get = async (request: Request, response: Response) => { export const post = async (request: Request, response: Response) => { const guildId = request.params.guildId; - const { name, url, active, channels } = request.body; + const { name, url, active, channels, filters } = request.body; // channels comes through as either String[] or String - const formattedChannels = Array.isArray(channels) - ? channels.map((channelId) => ({ channel_id: channelId })) - : [{ channel_id: channels }] + let formattedChannels = undefined; + if (channels !== undefined) { + formattedChannels = Array.isArray(channels) + ? channels.map((channelId) => ({ channel_id: channelId })) + : [{ channel_id: channels }] + } + + let formattedFilters = undefined; + if (filters !== undefined) { + formattedFilters = Array.isArray(filters) + ? filters.map((filterId) => ({ id: Number(filterId) })) + : [{ id: Number(filters) }] + } let feed; @@ -39,7 +49,8 @@ export const post = async (request: Request, response: Response) => { url: url, guild_id: guildId, active: active === "on", - channels: channels !== undefined ? { create: formattedChannels } : channels + channels: { create: formattedChannels }, + filters: { connect: formattedFilters } } }); } @@ -56,7 +67,7 @@ export const post = async (request: Request, response: Response) => { export const patch = async (request: Request, response: Response) => { const guildId = request.params.guildId; - const { id, name, url, active, channels } = request.body; + const { id, name, url, active, channels, filters } = request.body; // channels comes through as either String[] or String let formattedChannels = undefined; @@ -66,6 +77,13 @@ export const patch = async (request: Request, response: Response) => { : [{ channel_id: channels }] } + let formattedFilters = undefined; + if (filters !== undefined) { + formattedFilters = Array.isArray(filters) + ? filters.map((filterId) => ({ id: Number(filterId) })) + : [{ id: Number(filters) }] + } + let feed; try { @@ -79,6 +97,10 @@ export const patch = async (request: Request, response: Response) => { channels: { deleteMany: {}, create: formattedChannels + }, + filters: { + set: [], + connect: formattedFilters } } });