improve event organizer selection, show on web
This commit is contained in:
@ -1,2 +1,13 @@
|
|||||||
|
from wagtail.admin.viewsets.chooser import ChooserViewSet
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
|
class AssociationChooserViewSet(ChooserViewSet):
|
||||||
|
model = "associations.AssociationPage"
|
||||||
|
icon = "group"
|
||||||
|
choose_one_text = "Choose an association"
|
||||||
|
choose_another_text = "Choose another association"
|
||||||
|
edit_item_text = "Edit this association"
|
||||||
|
# form_fields = ["name"]
|
||||||
|
|
||||||
|
|
||||||
|
association_chooser_viewset = AssociationChooserViewSet("association_chooser")
|
||||||
|
8
dnscms/associations/wagtail_hooks.py
Normal file
8
dnscms/associations/wagtail_hooks.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from wagtail import hooks
|
||||||
|
|
||||||
|
from .views import association_chooser_viewset
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.register("register_admin_viewset")
|
||||||
|
def register_viewset():
|
||||||
|
return association_chooser_viewset
|
3
dnscms/associations/widgets.py
Normal file
3
dnscms/associations/widgets.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from .views import association_chooser_viewset
|
||||||
|
|
||||||
|
AssociationChooserWidget = association_chooser_viewset.widget_class
|
@ -0,0 +1,25 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-08 23:06
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('associations', '0010_alter_associationindex_body_and_more'),
|
||||||
|
('events', '0030_eventcategory_pig_alter_eventpage_pig'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='eventorganizer',
|
||||||
|
name='external_url',
|
||||||
|
field=models.URLField(blank=True, help_text='Lenke til nettstedet til ekstern arrangør', max_length=512),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventorganizer',
|
||||||
|
name='association',
|
||||||
|
field=models.ForeignKey(blank=True, help_text='Om en samfundsforening eller et utvalg står bak, velg det her.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='organizers', to='associations.associationpage'),
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,32 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-09 00:27
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import modelcluster.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0031_eventorganizer_external_url_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='eventpage',
|
||||||
|
name='organizers',
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='EventOrganizerLink',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
|
||||||
|
('event', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='organizers', to='events.eventpage')),
|
||||||
|
('organizer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='organized_events', to='events.eventorganizer')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Arrangør',
|
||||||
|
'verbose_name_plural': 'Arrangører',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-09 00:47
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0032_remove_eventpage_organizers_eventorganizerlink'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddConstraint(
|
||||||
|
model_name='eventorganizerlink',
|
||||||
|
constraint=models.UniqueConstraint(models.F('event'), models.F('organizer'), name='event_organizer_link_event_organizer_unique'),
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,25 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-10 00:55
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import modelcluster.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0033_eventorganizerlink_event_organizer_link_event_organizer_unique'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='eventpage',
|
||||||
|
name='organizers',
|
||||||
|
field=models.ManyToManyField(through='events.EventOrganizerLink', to='events.eventorganizer'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventorganizerlink',
|
||||||
|
name='event',
|
||||||
|
field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='organizer_links', to='events.eventpage'),
|
||||||
|
),
|
||||||
|
]
|
@ -1,6 +1,6 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Min, Q
|
from django.db.models import Min, Q, UniqueConstraint
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from grapple.helpers import register_query_field, register_singular_query_field
|
from grapple.helpers import register_query_field, register_singular_query_field
|
||||||
@ -21,12 +21,13 @@ from wagtail.admin.panels import (
|
|||||||
HelpPanel,
|
HelpPanel,
|
||||||
InlinePanel,
|
InlinePanel,
|
||||||
MultiFieldPanel,
|
MultiFieldPanel,
|
||||||
PageChooserPanel,
|
MultipleChooserPanel,
|
||||||
TitleFieldPanel,
|
TitleFieldPanel,
|
||||||
)
|
)
|
||||||
from wagtail.models import Orderable, Page, PageManager, PageQuerySet
|
from wagtail.models import Orderable, Page, PageManager, PageQuerySet
|
||||||
from wagtail.snippets.models import register_snippet
|
from wagtail.snippets.models import register_snippet
|
||||||
|
|
||||||
|
from associations.widgets import AssociationChooserWidget
|
||||||
from dnscms.fields import CommonStreamField
|
from dnscms.fields import CommonStreamField
|
||||||
from venues.models import VenuePage
|
from venues.models import VenuePage
|
||||||
|
|
||||||
@ -117,6 +118,36 @@ class EventCategory(models.Model):
|
|||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class EventOrganizerLink(Orderable):
|
||||||
|
event = ParentalKey(
|
||||||
|
"events.EventPage", on_delete=models.CASCADE, related_name="organizer_links"
|
||||||
|
)
|
||||||
|
organizer = models.ForeignKey(
|
||||||
|
"events.EventOrganizer",
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
related_name="organized_events",
|
||||||
|
help_text="",
|
||||||
|
)
|
||||||
|
|
||||||
|
panels = [FieldPanel("organizer", heading="", help_text="")]
|
||||||
|
|
||||||
|
graphql_fields = [
|
||||||
|
GraphQLForeignKey("organizer", "events.EventOrganizer"),
|
||||||
|
]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.organizer.name}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Arrangør"
|
||||||
|
verbose_name_plural = "Arrangører"
|
||||||
|
constraints = [
|
||||||
|
UniqueConstraint(
|
||||||
|
"event", "organizer", name="event_organizer_link_event_organizer_unique"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@register_snippet
|
@register_snippet
|
||||||
@register_query_field("eventOrganizer", "eventOrganizers")
|
@register_query_field("eventOrganizer", "eventOrganizers")
|
||||||
class EventOrganizer(ClusterableModel):
|
class EventOrganizer(ClusterableModel):
|
||||||
@ -137,12 +168,39 @@ class EventOrganizer(ClusterableModel):
|
|||||||
blank=True,
|
blank=True,
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
related_name="organizers",
|
related_name="organizers",
|
||||||
|
help_text="Om en samfundsforening eller et utvalg står bak, velg det her.",
|
||||||
|
)
|
||||||
|
|
||||||
|
external_url = models.URLField(
|
||||||
|
blank=True,
|
||||||
|
max_length=512,
|
||||||
|
help_text="Lenke til nettstedet til ekstern arrangør",
|
||||||
)
|
)
|
||||||
|
|
||||||
panels = [
|
panels = [
|
||||||
TitleFieldPanel("name"),
|
TitleFieldPanel("name"),
|
||||||
FieldPanel("slug"),
|
FieldPanel("slug"),
|
||||||
PageChooserPanel("association", ["associations.AssociationPage"]),
|
FieldPanel(
|
||||||
|
"association",
|
||||||
|
widget=AssociationChooserWidget(linked_fields={"association": "#id_association"}),
|
||||||
|
heading="Intern arrangør",
|
||||||
|
),
|
||||||
|
MultiFieldPanel(
|
||||||
|
heading="Ekstern arrangør",
|
||||||
|
children=[
|
||||||
|
FieldPanel(
|
||||||
|
"external_url",
|
||||||
|
heading="Nettsted",
|
||||||
|
help_text="La denne stå tom om arrangøren finnes i lista over.",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
graphql_fields = [
|
||||||
|
GraphQLString("name"),
|
||||||
|
GraphQLForeignKey("association", "associations.AssociationPage", required=False),
|
||||||
|
GraphQLString("external_url"),
|
||||||
]
|
]
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -191,9 +249,8 @@ class EventPage(Page):
|
|||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
organizers = ParentalManyToManyField(
|
organizers = models.ManyToManyField(
|
||||||
"events.EventOrganizer",
|
"events.EventOrganizer", through="events.EventOrganizerLink"
|
||||||
blank=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
PIG_CHOICES = [
|
PIG_CHOICES = [
|
||||||
@ -251,7 +308,17 @@ class EventPage(Page):
|
|||||||
FieldPanel("featured_image"),
|
FieldPanel("featured_image"),
|
||||||
FieldPanel("body"),
|
FieldPanel("body"),
|
||||||
FieldPanel("categories", widget=forms.CheckboxSelectMultiple),
|
FieldPanel("categories", widget=forms.CheckboxSelectMultiple),
|
||||||
FieldPanel("organizers", widget=forms.SelectMultiple),
|
MultiFieldPanel(
|
||||||
|
heading="Arrangører",
|
||||||
|
children=[
|
||||||
|
HelpPanel(
|
||||||
|
content=("Hvem står bak arrangementet?"),
|
||||||
|
),
|
||||||
|
MultipleChooserPanel(
|
||||||
|
"organizer_links", chooser_field_name="organizer", min_num=1, label="Arrangør"
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
FieldPanel("pig", heading="Gris"),
|
FieldPanel("pig", heading="Gris"),
|
||||||
FieldPanel(
|
FieldPanel(
|
||||||
"facebook_url",
|
"facebook_url",
|
||||||
@ -309,6 +376,16 @@ class EventPage(Page):
|
|||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
|
# remove duped organizers based on name
|
||||||
|
organizers = [x.organizer.name for x in self.organizer_links.all()]
|
||||||
|
if len(organizers) != len(set(organizers)):
|
||||||
|
seen_organizers = set()
|
||||||
|
for link in self.organizer_links.all():
|
||||||
|
if link.organizer.name in seen_organizers:
|
||||||
|
self.organizer_links.remove(link)
|
||||||
|
else:
|
||||||
|
seen_organizers.add(link.organizer.name)
|
||||||
|
|
||||||
# if the event is free, all specific pricing is unset
|
# if the event is free, all specific pricing is unset
|
||||||
if self.free:
|
if self.free:
|
||||||
self.price_regular = None
|
self.price_regular = None
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
from wagtail.admin.viewsets.chooser import ChooserViewSet
|
||||||
|
|
||||||
|
|
||||||
|
class EventOrganizerChooserViewSet(ChooserViewSet):
|
||||||
|
model = "events.EventOrganizer"
|
||||||
|
icon = "group"
|
||||||
|
per_page = 30
|
||||||
|
page_title = "Choose organizers"
|
||||||
|
choose_one_text = "Choose an organizer"
|
||||||
|
choose_another_text = "Choose another organizer"
|
||||||
|
edit_item_text = "Edit this organizer"
|
||||||
|
form_fields = ["name", "association", "external_url"]
|
||||||
|
|
||||||
|
|
||||||
|
event_organizer_chooser_viewset = EventOrganizerChooserViewSet("event_organizer_chooser")
|
||||||
|
8
dnscms/events/wagtail_hooks.py
Normal file
8
dnscms/events/wagtail_hooks.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from wagtail import hooks
|
||||||
|
|
||||||
|
from .views import event_organizer_chooser_viewset
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.register("register_admin_viewset")
|
||||||
|
def register_viewset():
|
||||||
|
return event_organizer_chooser_viewset
|
3
dnscms/events/widgets.py
Normal file
3
dnscms/events/widgets.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from .views import event_organizer_chooser_viewset
|
||||||
|
|
||||||
|
EventOrganizerChooserWidget = event_organizer_chooser_viewset.widget_class
|
@ -3,6 +3,7 @@ import styles from "./eventHeader.module.scss";
|
|||||||
import Image from "@/components/general/Image";
|
import Image from "@/components/general/Image";
|
||||||
import { Pig } from "../general/Pig";
|
import { Pig } from "../general/Pig";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { OrganizerList } from "./OrganizerList";
|
||||||
|
|
||||||
function formatPrice(price: number): string {
|
function formatPrice(price: number): string {
|
||||||
if (price === null) {
|
if (price === null) {
|
||||||
@ -70,6 +71,7 @@ export const EventHeader = ({ event }: { event: EventFragment }) => {
|
|||||||
Kategorier: {event.categories.map((x) => x.name).join(", ")}
|
Kategorier: {event.categories.map((x) => x.name).join(", ")}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{event.organizers && <OrganizerList event={event} />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.image}>
|
<div className={styles.image}>
|
||||||
|
29
web/src/components/events/OrganizerList.tsx
Normal file
29
web/src/components/events/OrganizerList.tsx
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { useState } from "react";
|
||||||
|
import { formatDate, isTodayOrFuture } from "@/lib/date";
|
||||||
|
import { EventFragment, EventOrganizer } from "@/lib/event";
|
||||||
|
import styles from "./organizerList.module.scss";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
export const OrganizerList = ({ event }: { event: EventFragment }) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h2>Arrangeres av</h2>
|
||||||
|
<ul>
|
||||||
|
{event.organizers.map((organizer) => {
|
||||||
|
const url =
|
||||||
|
organizer.association?.url ?? organizer.externalUrl ?? null;
|
||||||
|
if (typeof url === "string" && url.startsWith("http")) {
|
||||||
|
return (
|
||||||
|
<li key={organizer.name}>
|
||||||
|
<Link href={url}>{organizer.name}</Link>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return <li key={organizer.name}>{organizer.name}</li>;
|
||||||
|
})}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
0
web/src/components/events/organizerList.module.scss
Normal file
0
web/src/components/events/organizerList.module.scss
Normal file
@ -33,7 +33,7 @@ const documents = {
|
|||||||
"\n query home {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n home: page(contentType: \"home.HomePage\", urlPath: \"/home/\") {\n ... on HomePage {\n ...Home\n }\n }\n news: pages(contentType: \"news.newsPage\", limit: 3) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": types.HomeDocument,
|
"\n query home {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n home: page(contentType: \"home.HomePage\", urlPath: \"/home/\") {\n ... on HomePage {\n ...Home\n }\n }\n news: pages(contentType: \"news.newsPage\", limit: 3) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": types.HomeDocument,
|
||||||
"\n fragment Blocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n ... on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n ... on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n ... on HorizontalRuleBlock {\n color\n }\n ... on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\n featuredPage {\n contentType\n pageType\n url\n ... on EventPage {\n featuredImage {\n ...Image\n }\n }\n ... on NewsPage {\n featuredImage {\n ...Image\n }\n }\n }\n featuredImageOverride {\n ...Image\n }\n }\n }\n": types.BlocksFragmentDoc,
|
"\n fragment Blocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n ... on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n ... on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n ... on HorizontalRuleBlock {\n color\n }\n ... on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\n featuredPage {\n contentType\n pageType\n url\n ... on EventPage {\n featuredImage {\n ...Image\n }\n }\n ... on NewsPage {\n featuredImage {\n ...Image\n }\n }\n }\n featuredImageOverride {\n ...Image\n }\n }\n }\n": types.BlocksFragmentDoc,
|
||||||
"\n fragment Image on CustomImage {\n id\n url\n width\n height\n alt\n attribution\n }\n": types.ImageFragmentDoc,
|
"\n fragment Image on CustomImage {\n id\n url\n width\n height\n alt\n attribution\n }\n": types.ImageFragmentDoc,
|
||||||
"\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n }\n": types.EventFragmentDoc,
|
"\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n name\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n": types.EventFragmentDoc,
|
||||||
"\n query futureEvents {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n eventCategories: eventCategories {\n ... on EventCategory {\n name\n slug\n showInFilters\n }\n }\n }\n": types.FutureEventsDocument,
|
"\n query futureEvents {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n eventCategories: eventCategories {\n ... on EventCategory {\n name\n slug\n showInFilters\n }\n }\n }\n": types.FutureEventsDocument,
|
||||||
"\n fragment News on NewsPage {\n __typename\n id\n slug\n title\n firstPublishedAt\n excerpt\n featuredImage {\n ...Image\n }\n body {\n ...Blocks\n }\n }\n": types.NewsFragmentDoc,
|
"\n fragment News on NewsPage {\n __typename\n id\n slug\n title\n firstPublishedAt\n excerpt\n featuredImage {\n ...Image\n }\n body {\n ...Blocks\n }\n }\n": types.NewsFragmentDoc,
|
||||||
"\n fragment NewsIndex on NewsIndex {\n __typename\n id\n slug\n title\n lead\n }\n": types.NewsIndexFragmentDoc,
|
"\n fragment NewsIndex on NewsIndex {\n __typename\n id\n slug\n title\n lead\n }\n": types.NewsIndexFragmentDoc,
|
||||||
@ -137,7 +137,7 @@ export function graphql(source: "\n fragment Image on CustomImage {\n id\n
|
|||||||
/**
|
/**
|
||||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
export function graphql(source: "\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n }\n"): (typeof documents)["\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n }\n"];
|
export function graphql(source: "\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n name\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"): (typeof documents)["\n fragment Event on EventPage {\n __typename\n id\n slug\n title\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n name\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"];
|
||||||
/**
|
/**
|
||||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
|
File diff suppressed because one or more lines are too long
@ -17,6 +17,7 @@ export type {
|
|||||||
EventFragment,
|
EventFragment,
|
||||||
EventCategory,
|
EventCategory,
|
||||||
EventOccurrence,
|
EventOccurrence,
|
||||||
|
EventOrganizer,
|
||||||
} from "@/gql/graphql";
|
} from "@/gql/graphql";
|
||||||
|
|
||||||
export type SingularEvent = EventFragment & {
|
export type SingularEvent = EventFragment & {
|
||||||
@ -71,6 +72,17 @@ const EventFragmentDefinition = graphql(`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
organizers {
|
||||||
|
... on EventOrganizer {
|
||||||
|
name
|
||||||
|
externalUrl
|
||||||
|
association {
|
||||||
|
... on AssociationPage {
|
||||||
|
url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user