feat: create and update feeds with filters
This commit is contained in:
parent
e935d801e6
commit
b528153113
@ -368,8 +368,9 @@ $(document).on("click", ".open-edit-modal-js", async event => {
|
|||||||
await openEditModal($(event.target).data("id"));
|
await openEditModal($(event.target).data("id"));
|
||||||
});
|
});
|
||||||
|
|
||||||
interface FeedWithChannels extends prisma.Feed {
|
interface ExpandedFeed extends prisma.Feed {
|
||||||
channels: prisma.Channel[]
|
channels: prisma.Channel[],
|
||||||
|
filters: prisma.Feed[]
|
||||||
}
|
}
|
||||||
|
|
||||||
const clearEditModalData = () => {
|
const clearEditModalData = () => {
|
||||||
@ -379,10 +380,11 @@ const clearEditModalData = () => {
|
|||||||
$("#formUrl").val("");
|
$("#formUrl").val("");
|
||||||
$("#formActive").prop("checked", true);
|
$("#formActive").prop("checked", true);
|
||||||
channelSelect.setValue([]);
|
channelSelect.setValue([]);
|
||||||
|
filterSelect.setValue([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const loadEditModalData = async (id: number) => {
|
const loadEditModalData = async (id: number) => {
|
||||||
const feed: FeedWithChannels = await $.ajax({
|
const feed: ExpandedFeed = await $.ajax({
|
||||||
url: `/guild/${guildId}/feeds/api?id=${id}`,
|
url: `/guild/${guildId}/feeds/api?id=${id}`,
|
||||||
method: "get"
|
method: "get"
|
||||||
});
|
});
|
||||||
@ -394,6 +396,7 @@ const loadEditModalData = async (id: number) => {
|
|||||||
$("#formActive").prop("checked", feed.active);
|
$("#formActive").prop("checked", feed.active);
|
||||||
|
|
||||||
channelSelect.setValue(feed.channels.map(channel => channel.channel_id));
|
channelSelect.setValue(feed.channels.map(channel => channel.channel_id));
|
||||||
|
filterSelect.setValue(feed.filters.map(filter => `${filter.id}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
const openEditModal = async (id: number | undefined) => {
|
const openEditModal = async (id: number | undefined) => {
|
||||||
@ -532,13 +535,11 @@ $("#editForm").on("submit", async event => {
|
|||||||
|
|
||||||
let method = "post";
|
let method = "post";
|
||||||
const data = $(event.target).serializeArray();
|
const data = $(event.target).serializeArray();
|
||||||
|
|
||||||
|
// If 'id' has a value, we are patching an existing entry
|
||||||
const id: number | undefined = $(editModal.el).data("id");
|
const id: number | undefined = $(editModal.el).data("id");
|
||||||
|
|
||||||
if (id !== undefined) {
|
if (id !== undefined) {
|
||||||
data.push({
|
data.push({ name: "id", value: `${id}` });
|
||||||
name: "id",
|
|
||||||
value: `${id}`
|
|
||||||
})
|
|
||||||
method = "patch";
|
method = "patch";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ export const get = async (request: Request, response: Response) => {
|
|||||||
|
|
||||||
const feed = await prisma.feed.findUnique({
|
const feed = await prisma.feed.findUnique({
|
||||||
where: { id: Number(request.query.id) },
|
where: { id: Number(request.query.id) },
|
||||||
include: { channels: true }
|
include: { channels: true, filters: true }
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!feed) {
|
if (!feed) {
|
||||||
@ -23,12 +23,22 @@ export const get = async (request: Request, response: Response) => {
|
|||||||
|
|
||||||
export const post = async (request: Request, response: Response) => {
|
export const post = async (request: Request, response: Response) => {
|
||||||
const guildId = request.params.guildId;
|
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
|
// channels comes through as either String[] or String
|
||||||
const formattedChannels = Array.isArray(channels)
|
let formattedChannels = undefined;
|
||||||
? channels.map((channelId) => ({ channel_id: channelId }))
|
if (channels !== undefined) {
|
||||||
: [{ channel_id: channels }]
|
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;
|
let feed;
|
||||||
|
|
||||||
@ -39,7 +49,8 @@ export const post = async (request: Request, response: Response) => {
|
|||||||
url: url,
|
url: url,
|
||||||
guild_id: guildId,
|
guild_id: guildId,
|
||||||
active: active === "on",
|
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) => {
|
export const patch = async (request: Request, response: Response) => {
|
||||||
const guildId = request.params.guildId;
|
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
|
// channels comes through as either String[] or String
|
||||||
let formattedChannels = undefined;
|
let formattedChannels = undefined;
|
||||||
@ -66,6 +77,13 @@ export const patch = async (request: Request, response: Response) => {
|
|||||||
: [{ channel_id: channels }]
|
: [{ channel_id: channels }]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let formattedFilters = undefined;
|
||||||
|
if (filters !== undefined) {
|
||||||
|
formattedFilters = Array.isArray(filters)
|
||||||
|
? filters.map((filterId) => ({ id: Number(filterId) }))
|
||||||
|
: [{ id: Number(filters) }]
|
||||||
|
}
|
||||||
|
|
||||||
let feed;
|
let feed;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -79,6 +97,10 @@ export const patch = async (request: Request, response: Response) => {
|
|||||||
channels: {
|
channels: {
|
||||||
deleteMany: {},
|
deleteMany: {},
|
||||||
create: formattedChannels
|
create: formattedChannels
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
set: [],
|
||||||
|
connect: formattedFilters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user