Apply review comments

This commit is contained in:
Antoine Bartuccio 2025-02-24 19:05:18 +01:00
parent 92d282f4ba
commit f9c36c8f99
3 changed files with 10 additions and 9 deletions

View File

@ -5,7 +5,7 @@ from typing import final
import requests import requests
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from django.conf import settings from django.conf import settings
from django.db.models import QuerySet from django.db.models import F, QuerySet
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from ical.calendar import Calendar from ical.calendar import Calendar
@ -80,11 +80,11 @@ class IcsCalendar:
) )
@classmethod @classmethod
def ics_from_queryset(cls, queryset: QuerySet) -> bytes: def ics_from_queryset(cls, queryset: QuerySet[NewsDate]) -> bytes:
calendar = Calendar() calendar = Calendar()
for news_date in queryset.prefetch_related("news"): for news_date in queryset.annotate(news_title=F("news__title")):
event = Event( event = Event(
summary=news_date.news.title, summary=news_date.news_title,
start=news_date.start_date, start=news_date.start_date,
end=news_date.end_date, end=news_date.end_date,
url=reverse("com:news_detail", kwargs={"news_id": news_date.news.id}), url=reverse("com:news_detail", kwargs={"news_id": news_date.news.id}),

View File

@ -68,7 +68,6 @@ export class IcsCalendar extends inheritHtmlElement("div") {
} }
getNewsId(event: EventImpl) { getNewsId(event: EventImpl) {
// return Number.parseInt(event.url.split("/").pop());
return Number.parseInt( return Number.parseInt(
event.url event.url
.toString() .toString()
@ -80,6 +79,9 @@ export class IcsCalendar extends inheritHtmlElement("div") {
async refreshEvents() { async refreshEvents() {
this.click(); // Remove focus from popup this.click(); // Remove focus from popup
// We can't just refresh events because some ics files are in
// local browser cache (especially internal.ics)
// To invalidate the cache, we need to remove the source and add it again
this.calendar.removeAllEventSources(); this.calendar.removeAllEventSources();
for (const source of await this.getEventSources()) { for (const source of await this.getEventSources()) {
this.calendar.addEventSource(source); this.calendar.addEventSource(source);
@ -198,7 +200,7 @@ export class IcsCalendar extends inheritHtmlElement("div") {
}; };
const makePopupTools = (event: EventImpl) => { const makePopupTools = (event: EventImpl) => {
if (event.source.internalEventSource.ui.classNames.indexOf("external") >= 0) { if (event.source.internalEventSource.ui.classNames.includes("external")) {
return null; return null;
} }
if (!(this.canDelete || this.canModerate)) { if (!(this.canDelete || this.canModerate)) {
@ -207,9 +209,7 @@ export class IcsCalendar extends inheritHtmlElement("div") {
const newsId = this.getNewsId(event); const newsId = this.getNewsId(event);
const div = document.createElement("div"); const div = document.createElement("div");
if (this.canModerate) { if (this.canModerate) {
if ( if (event.source.internalEventSource.ui.classNames.includes("unmoderated")) {
event.source.internalEventSource.ui.classNames.indexOf("unmoderated") >= 0
) {
const button = document.createElement("button"); const button = document.createElement("button");
button.innerHTML = `<i class="fa fa-check"></i>${gettext("Moderate")}`; button.innerHTML = `<i class="fa fa-check"></i>${gettext("Moderate")}`;
button.setAttribute("class", "btn btn-green"); button.setAttribute("class", "btn btn-green");

View File

@ -12,6 +12,7 @@
"esModuleInterop": true, "esModuleInterop": true,
"resolveJsonModule": true, "resolveJsonModule": true,
"types": ["jquery", "alpinejs"], "types": ["jquery", "alpinejs"],
"lib": ["es7"],
"paths": { "paths": {
"#openapi": ["./staticfiles/generated/openapi/index.ts"], "#openapi": ["./staticfiles/generated/openapi/index.ts"],
"#core:*": ["./core/static/bundled/*"], "#core:*": ["./core/static/bundled/*"],