FIX: Show sub category events (#478)

This commit is contained in:
Natalie Tay 2023-11-11 00:16:15 +08:00 committed by GitHub
parent 6566915201
commit f32d0e1851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 9 deletions

View File

@ -110,7 +110,7 @@ module DiscoursePostEvent
private
def filtered_events_params
params.permit(:post_id, :category_id)
params.permit(:post_id, :category_id, :include_subcategories)
end
end
end

View File

@ -144,21 +144,22 @@ function initializeDiscourseCalendar(api) {
}
);
const loadEvents = ajax(
`/discourse-post-event/events.json?category_id=${browsedCategory.id}`
`/discourse-post-event/events.json?category_id=${browsedCategory.id}&include_subcategories=true`
);
Promise.all([loadEvents]).then((results) => {
const events = results[0];
events[Object.keys(events)[0]].forEach((event) => {
const { starts_at, ends_at, post } = event;
const { starts_at, ends_at, post, category_id } = event;
const backgroundColor = `#${site.categoriesById[category_id]?.color}`;
fullCalendar.addEvent({
title: formatEventName(event),
start: starts_at,
end: ends_at || starts_at,
allDay: !isNotFullDayEvent(moment(starts_at), moment(ends_at)),
url: getURL(`/t/-/${post.topic.id}/${post.post_number}`),
backgroundColor: `#${browsedCategory.color}`,
backgroundColor,
});
});

View File

@ -210,17 +210,42 @@ module DiscoursePostEvent
end
context "when filtering by category" do
it "can filter the event by category" do
category = Fabricate(:category)
topic = Fabricate(:topic, category: category)
event_2 = Fabricate(:event, post: Fabricate(:post, post_number: 1, topic: topic))
fab!(:category) { Fabricate(:category) }
fab!(:subcategory) do
Fabricate(:category, parent_category: category, name: "category subcategory")
end
fab!(:event_1) do
Fabricate(
:event,
post: Fabricate(:post, post_number: 1, topic: Fabricate(:topic, category: category)),
)
end
fab!(:event_2) do
Fabricate(
:event,
post:
Fabricate(:post, post_number: 1, topic: Fabricate(:topic, category: subcategory)),
)
end
it "can filter the event by category" do
get "/discourse-post-event/events.json?category_id=#{category.id}"
expect(response.status).to eq(200)
events = response.parsed_body["events"]
expect(events.length).to eq(1)
expect(events[0]["id"]).to eq(event_2.id)
expect(events[0]["id"]).to eq(event_1.id)
end
it "includes subcategory events when param provided" do
get "/discourse-post-event/events.json?category_id=#{category.id}&include_subcategories=true"
expect(response.status).to eq(200)
events = response.parsed_body["events"]
expect(events.length).to eq(2)
expect(events).to match_array(
[hash_including("id" => event_1.id), hash_including("id" => event_2.id)],
)
end
end
end