FIX: set post_url so calendar events can be clicked from anywhere

This commit is contained in:
jjaffeux 2020-03-11 01:56:29 +01:00
parent 68500cadd2
commit 45e7b258da
4 changed files with 22 additions and 10 deletions

View File

@ -277,11 +277,15 @@ function initializeDiscourseCalendar(api) {
calendar.setOption("eventClick", ({ event, jsEvent }) => {
hidePopover(jsEvent);
const { postNumber } = event.extendedProps;
if (!postNumber) return;
_topicController =
_topicController || api.container.lookup("controller:topic");
_topicController.send("jumpToPost", postNumber);
const { postNumber, postUrl } = event.extendedProps;
if (postUrl) {
DiscourseURL.routeTo(postUrl);
} else if (postNumber) {
_topicController =
_topicController || api.container.lookup("controller:topic");
_topicController.send("jumpToPost", postNumber);
}
});
calendar.setOption("eventMouseEnter", ({ event, jsEvent }) => {
@ -312,8 +316,9 @@ function initializeDiscourseCalendar(api) {
);
event.extendedProps = {};
if (detail.post_number) {
if (detail.post_url) {
event.extendedProps.postUrl = detail.post_url;
} else if (detail.post_number) {
event.extendedProps.postNumber = detail.post_number;
} else {
event.classNames = ["holiday"];

View File

@ -40,7 +40,8 @@ module DiscourseCalendar
from.iso8601.to_s,
to ? to.iso8601.to_s : nil,
post.user.username_lower,
dates[0]["recurring"].presence
dates[0]["recurring"].presence,
"/t/-/#{post.topic.id}/#{post.post_number}"
]
op.set_calendar_event(post.post_number, detail)

View File

@ -202,7 +202,7 @@ after_initialize do
result = []
details = post_custom_fields[DiscourseCalendar::CALENDAR_DETAILS_CUSTOM_FIELD]
Array(details).each do |post_number, (message, from, to, username, recurring)|
Array(details).each do |post_number, (message, from, to, username, recurring, post_url)|
result << {
type: :standalone,
post_number: post_number.to_i,
@ -211,6 +211,7 @@ after_initialize do
to: to,
username: username,
recurring: recurring,
post_url: post_url
}
end

View File

@ -22,7 +22,12 @@ describe DiscourseCalendar::EventUpdater do
expect(op.custom_fields[DiscourseCalendar::CALENDAR_CUSTOM_FIELD]).to eq("dynamic")
expect(op.calendar_details).to eq(
post.post_number.to_s => [
"Rome", "2018-06-05T10:20:00Z", "2018-06-05T11:20:00Z", post.user.username_lower, nil
"Rome",
"2018-06-05T10:20:00Z",
"2018-06-05T11:20:00Z",
post.user.username_lower,
nil,
"/t/-/#{post.topic.id}/#{post.post_number}"
]
)
end