Skip to content

Commit c79fcee

Browse files
committed
fix: event details failed to handle super event fetching
LIIKUNTA-514
1 parent c74534e commit c79fcee

5 files changed

Lines changed: 77 additions & 129 deletions

File tree

apps/events-helsinki/src/domain/event/EventPageContainer.tsx

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
import { useLazyQuery } from '@apollo/client';
21
import {
32
LoadingSpinner,
43
useLocale,
54
addParamsToQueryString,
6-
getEventIdFromUrl,
75
isEventClosed,
8-
EventDetailsDocument,
96
MAIN_CONTENT_ID,
7+
useSuperEventLazyLoad,
108
} from '@events-helsinki/components';
11-
import type {
12-
SuperEventResponse,
13-
EventFields,
14-
} from '@events-helsinki/components';
9+
import type { EventFields } from '@events-helsinki/components';
1510
import dynamic from 'next/dynamic';
1611
import { useRouter } from 'next/router';
1712
import { useTranslation } from 'next-i18next';
@@ -52,46 +47,11 @@ const EventPageContainer: React.FC<EventPageContainerProps> = ({
5247
locale
5348
)}`,
5449
});
55-
56-
const [superEvent, setSuperEvent] = React.useState<SuperEventResponse>({
57-
data: null,
58-
status: 'pending',
59-
});
60-
50+
const { superEvent } = useSuperEventLazyLoad(event);
6151
const [hasSimilarEvents, setHasSimilarEvents] = useState(false);
62-
63-
const superEventId = getEventIdFromUrl(
64-
event?.superEvent?.internalId ?? '',
65-
'event'
66-
);
67-
68-
const [superEventSearch, { data: superEventData }] = useLazyQuery(
69-
EventDetailsDocument,
70-
{
71-
variables: {
72-
id: superEventId,
73-
include: ['in_language', 'keywords', 'location', 'audience'],
74-
},
75-
}
76-
);
77-
React.useEffect(() => {
78-
if (superEventId) {
79-
superEventSearch();
80-
if (superEventData) {
81-
setSuperEvent({
82-
data: superEventData.eventDetails,
83-
status: 'resolved',
84-
});
85-
}
86-
} else if (event) {
87-
setSuperEvent({ data: null, status: 'resolved' });
88-
}
89-
}, [event, superEventId, superEventData, superEventSearch]);
90-
9152
const handleSimilarEventsLoaded = (eventsCount: number) => {
9253
setHasSimilarEvents(eventsCount > 0);
9354
};
94-
9555
const eventClosed = !event || isEventClosed(event);
9656
return (
9757
<div className={styles.eventPageWrapper}>

apps/hobbies-helsinki/src/domain/event/EventPageContainer.tsx

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
import { useLazyQuery } from '@apollo/client';
21
import {
32
LoadingSpinner,
43
useLocale,
54
addParamsToQueryString,
6-
getEventIdFromUrl,
75
isEventClosed,
8-
EventDetailsDocument,
96
MAIN_CONTENT_ID,
7+
useSuperEventLazyLoad,
108
} from '@events-helsinki/components';
11-
import type {
12-
SuperEventResponse,
13-
EventFields,
14-
} from '@events-helsinki/components';
9+
import type { EventFields } from '@events-helsinki/components';
1510
import dynamic from 'next/dynamic';
1611
import { useRouter } from 'next/router';
1712
import { useTranslation } from 'next-i18next';
@@ -52,46 +47,11 @@ const EventPageContainer: React.FC<EventPageContainerProps> = ({
5247
locale
5348
)}`,
5449
});
55-
56-
const [superEvent, setSuperEvent] = React.useState<SuperEventResponse>({
57-
data: null,
58-
status: 'pending',
59-
});
60-
50+
const { superEvent } = useSuperEventLazyLoad(event);
6151
const [hasSimilarEvents, setHasSimilarEvents] = useState(false);
62-
63-
const superEventId = getEventIdFromUrl(
64-
event?.superEvent?.internalId ?? '',
65-
'event'
66-
);
67-
68-
const [superEventSearch, { data: superEventData }] = useLazyQuery(
69-
EventDetailsDocument,
70-
{
71-
variables: {
72-
id: superEventId,
73-
include: ['in_language', 'keywords', 'location', 'audience'],
74-
},
75-
}
76-
);
77-
React.useEffect(() => {
78-
if (superEventId) {
79-
superEventSearch();
80-
if (superEventData) {
81-
setSuperEvent({
82-
data: superEventData.eventDetails,
83-
status: 'resolved',
84-
});
85-
}
86-
} else if (event) {
87-
setSuperEvent({ data: null, status: 'resolved' });
88-
}
89-
}, [event, superEventId, superEventData, superEventSearch]);
90-
9152
const handleSimilarEventsLoaded = (eventsCount: number) => {
9253
setHasSimilarEvents(eventsCount > 0);
9354
};
94-
9555
const eventClosed = !event || isEventClosed(event);
9656
return (
9757
<div className={styles.eventPageWrapper}>

apps/sports-helsinki/src/domain/event/EventPageContainer.tsx

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
import { useLazyQuery } from '@apollo/client';
21
import {
32
LoadingSpinner,
43
useLocale,
54
addParamsToQueryString,
6-
getEventIdFromUrl,
75
isEventClosed,
8-
EventDetailsDocument,
96
MAIN_CONTENT_ID,
7+
useSuperEventLazyLoad,
108
} from '@events-helsinki/components';
11-
import type {
12-
SuperEventResponse,
13-
EventFields,
14-
} from '@events-helsinki/components';
9+
import type { EventFields } from '@events-helsinki/components';
1510
import dynamic from 'next/dynamic';
1611
import { useRouter } from 'next/router';
1712
import { useTranslation } from 'next-i18next';
@@ -52,46 +47,11 @@ const EventPageContainer: React.FC<EventPageContainerProps> = ({
5247
locale
5348
)}`,
5449
});
55-
56-
const [superEvent, setSuperEvent] = React.useState<SuperEventResponse>({
57-
data: null,
58-
status: 'pending',
59-
});
60-
50+
const { superEvent } = useSuperEventLazyLoad(event);
6151
const [hasSimilarEvents, setHasSimilarEvents] = useState(false);
62-
63-
const superEventId = getEventIdFromUrl(
64-
event?.superEvent?.internalId ?? '',
65-
'event'
66-
);
67-
68-
const [superEventSearch, { data: superEventData }] = useLazyQuery(
69-
EventDetailsDocument,
70-
{
71-
variables: {
72-
id: superEventId,
73-
include: ['in_language', 'keywords', 'location', 'audience'],
74-
},
75-
}
76-
);
77-
React.useEffect(() => {
78-
if (superEventId) {
79-
superEventSearch();
80-
if (superEventData) {
81-
setSuperEvent({
82-
data: superEventData.eventDetails,
83-
status: 'resolved',
84-
});
85-
}
86-
} else if (event) {
87-
setSuperEvent({ data: null, status: 'resolved' });
88-
}
89-
}, [event, superEventId, superEventData, superEventSearch]);
90-
9152
const handleSimilarEventsLoaded = (eventsCount: number) => {
9253
setHasSimilarEvents(eventsCount > 0);
9354
};
94-
9555
const eventClosed = !event || isEventClosed(event);
9656
return (
9757
<div className={styles.eventPageWrapper}>

packages/components/src/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ export { default as useAppSportsTranslation } from './useAppSportsTranslation';
2626
export { default as useCommonCmsConfig } from './useCommonCmsConfig';
2727
export { default as useClickCapture } from './useClickCapture';
2828
export { default as usePageScrollRestoration } from './usePageScrollRestoration';
29+
export { default as useSuperEventLazyLoad } from './useSuperEventLazyLoad';
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { useLazyQuery } from '@apollo/client';
2+
import React from 'react';
3+
import type { EventFieldsFragment, SuperEventResponse } from '../types';
4+
import { EventDetailsDocument } from '../types';
5+
import { getEventIdFromUrl } from '../utils';
6+
7+
function useSuperEventLazyLoad(event?: EventFieldsFragment) {
8+
const [superEvent, setSuperEvent] = React.useState<SuperEventResponse>({
9+
data: null,
10+
status: 'pending',
11+
});
12+
const superEventId = getEventIdFromUrl(
13+
event?.superEvent?.internalId ?? '',
14+
'event'
15+
);
16+
const [
17+
superEventSearch,
18+
{ data: superEventData, loading: superEventLoading },
19+
] = useLazyQuery(EventDetailsDocument, {});
20+
React.useEffect(() => {
21+
if (superEventId) {
22+
superEventSearch({
23+
variables: {
24+
id: superEventId,
25+
include: ['in_language', 'keywords', 'location', 'audience'],
26+
},
27+
});
28+
// Still loading the super event,
29+
if (superEventLoading) {
30+
setSuperEvent({ data: null, status: 'pending' });
31+
}
32+
// Loaded, so there should be data if there ever was a super event
33+
else if (superEventData) {
34+
setSuperEvent({
35+
data: superEventData.eventDetails,
36+
status: 'resolved',
37+
});
38+
}
39+
// No super event
40+
else if (event) {
41+
setSuperEvent({ data: null, status: 'resolved' });
42+
}
43+
}
44+
// No super event id to fetch with
45+
else {
46+
setSuperEvent({
47+
data: null,
48+
status: 'resolved',
49+
});
50+
}
51+
}, [
52+
event,
53+
superEventId,
54+
superEventData,
55+
superEventSearch,
56+
superEventLoading,
57+
]);
58+
59+
return {
60+
superEvent,
61+
setSuperEvent,
62+
superEventSearch,
63+
superEventLoading,
64+
};
65+
}
66+
67+
export default useSuperEventLazyLoad;

0 commit comments

Comments
 (0)