@nnc-digital/nnc-design-system 1.0.0-beta17 → 1.0.0-beta18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -33716,6 +33716,819 @@ var DirectoryDocumentList = function (_a) {
33716
33716
  React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" }, !isLoading && (React__default.default.createElement(Pagination, { currentPage: pageNumber, totalResults: totalResults, resultsPerPage: perPage, postTo: directoryPath, buttonClickOverride: setPageNumber }))))))));
33717
33717
  };
33718
33718
 
33719
+ var Event = function (_a) {
33720
+ var _b, _c;
33721
+ var id = _a.id, name = _a.name, description = _a.description, descriptionElement = _a.descriptionElement, startDateTime = _a.startDateTime, endDateTime = _a.endDateTime, eventType = _a.eventType, audience = _a.audience, organization = _a.organization, location = _a.location, email = _a.email, fees = _a.fees, url = _a.url, websiteUrlTitle = _a.websiteUrlTitle, contacts = _a.contacts, uploads = _a.uploads, socialProfiles = _a.socialProfiles, shortListPath = _a.shortListPath, isRecurring = _a.isRecurring, recurrencePattern = _a.recurrencePattern, registrationDeadline = _a.registrationDeadline, capacity = _a.capacity, currentAttendees = _a.currentAttendees;
33722
+ var labelLetters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'];
33723
+ var _d = React.useState(false), notServer = _d[0], setNotServer = _d[1];
33724
+ var themeContext = React.useContext(styled.ThemeContext);
33725
+ var favourites = useDirectoryShortListContext().favourites.favourites;
33726
+ React.useEffect(function () {
33727
+ setNotServer(true);
33728
+ }, []);
33729
+ var formatEventDateTime = function (startDateTime, endDateTime) {
33730
+ var startDate = new Date(startDateTime);
33731
+ var options = {
33732
+ weekday: 'long',
33733
+ year: 'numeric',
33734
+ month: 'long',
33735
+ day: 'numeric',
33736
+ hour: '2-digit',
33737
+ minute: '2-digit',
33738
+ };
33739
+ var formatted = startDate.toLocaleDateString('en-GB', options);
33740
+ if (endDateTime) {
33741
+ var endDate = new Date(endDateTime);
33742
+ var endTime = endDate.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' });
33743
+ formatted += " - ".concat(endTime);
33744
+ }
33745
+ return formatted;
33746
+ };
33747
+ var transformEventDetails = function () {
33748
+ var details = [];
33749
+ if (fees) {
33750
+ details.push({
33751
+ term: 'Cost',
33752
+ definition: fees,
33753
+ });
33754
+ }
33755
+ if (eventType) {
33756
+ details.push({
33757
+ term: 'Event type',
33758
+ definition: eventType,
33759
+ });
33760
+ }
33761
+ if (audience && audience.length > 0) {
33762
+ details.push({
33763
+ term: 'Target audience',
33764
+ definition: audience.join(', '),
33765
+ });
33766
+ }
33767
+ if (isRecurring && recurrencePattern) {
33768
+ details.push({
33769
+ term: 'Recurrence',
33770
+ definition: recurrencePattern,
33771
+ });
33772
+ }
33773
+ if (registrationDeadline) {
33774
+ var deadline = new Date(registrationDeadline);
33775
+ details.push({
33776
+ term: 'Registration deadline',
33777
+ definition: deadline.toLocaleDateString('en-GB', {
33778
+ weekday: 'long',
33779
+ year: 'numeric',
33780
+ month: 'long',
33781
+ day: 'numeric',
33782
+ }),
33783
+ });
33784
+ }
33785
+ if (capacity && currentAttendees !== undefined) {
33786
+ details.push({
33787
+ term: 'Availability',
33788
+ definition: "".concat(currentAttendees, " / ").concat(capacity, " registered"),
33789
+ });
33790
+ }
33791
+ else if (capacity) {
33792
+ details.push({
33793
+ term: 'Capacity',
33794
+ definition: "".concat(capacity, " spaces"),
33795
+ });
33796
+ }
33797
+ return details;
33798
+ };
33799
+ return (React__default.default.createElement(Container$7, { "data-testid": "Event" },
33800
+ React__default.default.createElement(Row$1, null,
33801
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
33802
+ React__default.default.createElement(Row$1, null,
33803
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
33804
+ React__default.default.createElement(ServiceHeader$1, null,
33805
+ React__default.default.createElement(Heading, { level: 1, text: name }),
33806
+ (organization === null || organization === void 0 ? void 0 : organization.logo) && (React__default.default.createElement(ServiceImageOuter, null,
33807
+ React__default.default.createElement(ServiceImageContainer$1, null,
33808
+ React__default.default.createElement(ServiceImage$1, { src: organization.logo, alt: name + ' logo', loading: "lazy" })))))),
33809
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" }, notServer && (React__default.default.createElement(ShortListLinks, null,
33810
+ shortListPath && (React__default.default.createElement(Favourites$1, { href: shortListPath },
33811
+ React__default.default.createElement(HeartIcon, { colourFill: themeContext.theme_vars.colours.action }),
33812
+ " Shortlist (",
33813
+ favourites.length,
33814
+ ")")),
33815
+ React__default.default.createElement(DirectoryAddToShortList, { id: id, name: name, snippet: transformSnippet(description, 350), email: email, website: url, phone: (_c = (_b = contacts === null || contacts === void 0 ? void 0 : contacts[0]) === null || _b === void 0 ? void 0 : _b.phones) === null || _c === void 0 ? void 0 : _c.flatMap(function (phone) { return phone.number; }).join(', '), addresses: (location === null || location === void 0 ? void 0 : location.address) ? [{
33816
+ id: location.address.id,
33817
+ address_1: location.address.address1,
33818
+ city: location.address.city,
33819
+ state_province: location.address.county,
33820
+ postal_code: location.address.postcode,
33821
+ country: location.address.country
33822
+ }] : [], fees: fees })))))),
33823
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33824
+ React__default.default.createElement(Heading, { level: 2, text: "Event date and time" }),
33825
+ React__default.default.createElement("div", { style: { fontSize: '1.2rem', fontWeight: 'bold', marginBottom: '1rem' } }, formatEventDateTime(startDateTime, endDateTime)),
33826
+ organization && (React__default.default.createElement("p", null,
33827
+ React__default.default.createElement("strong", null, "Organised by:"),
33828
+ " ",
33829
+ organization.name))),
33830
+ location && (location.address || location.isVirtual) && (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33831
+ React__default.default.createElement(Row$1, null,
33832
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "one-third" }, location.isVirtual ? (React__default.default.createElement("div", null,
33833
+ React__default.default.createElement(Heading, { level: 2, text: "Virtual event" }),
33834
+ React__default.default.createElement("p", null, "This is an online event."),
33835
+ location.virtualMeetingInfo && (React__default.default.createElement("div", null,
33836
+ React__default.default.createElement("strong", null, "Meeting details:"),
33837
+ React__default.default.createElement("div", { dangerouslySetInnerHTML: { __html: location.virtualMeetingInfo } }))))) : (React__default.default.createElement("div", null,
33838
+ React__default.default.createElement(Heading, { level: 2, text: location.name || 'Event location' }),
33839
+ location.address && (React__default.default.createElement(PhysicalAddress, null,
33840
+ React__default.default.createElement("p", { dangerouslySetInnerHTML: {
33841
+ __html: Object.values(location.address)
33842
+ .filter(function (item) { var _a; return item !== '' && item !== ((_a = location.address) === null || _a === void 0 ? void 0 : _a.id); })
33843
+ .join(' <br />'),
33844
+ } }),
33845
+ location.latitude && location.longitude && (React__default.default.createElement(Button$4, { url: "https://google.com/maps/dir//".concat(location.latitude, ",").concat(location.longitude), text: "Get directions" })))),
33846
+ location.accessibility && location.accessibility.length > 0 && (React__default.default.createElement(React__default.default.Fragment, null,
33847
+ React__default.default.createElement(Heading, { level: 3, text: "Accessibility" }),
33848
+ React__default.default.createElement("ul", null, location.accessibility.map(function (accessibility) { return (React__default.default.createElement("li", { key: accessibility.id }, accessibility.accessibility)); }))))))),
33849
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "two-thirds" }, !location.isVirtual &&
33850
+ location.latitude &&
33851
+ location.longitude && (React__default.default.createElement(React__default.default.Fragment, null,
33852
+ notServer && (React__default.default.createElement(DirectoryMap, { mapProps: {
33853
+ centre: "".concat(location.latitude, ",").concat(location.longitude),
33854
+ imageAltText: "".concat(location.name || 'Event location', " shown on a map"),
33855
+ zoom: 14,
33856
+ size: '640x320',
33857
+ mapMarkers: [
33858
+ {
33859
+ lat: parseFloat(location.latitude),
33860
+ lng: parseFloat(location.longitude),
33861
+ label: labelLetters[0],
33862
+ title: location.name || 'Event location',
33863
+ },
33864
+ ],
33865
+ } })),
33866
+ React__default.default.createElement(MapLink, { href: "https://www.google.com/maps/search/?api=1&query=".concat(location.latitude, "%2C").concat(location.longitude) }, "View in Google Maps"))))))),
33867
+ (email || url || (contacts === null || contacts === void 0 ? void 0 : contacts.length) > 0) && (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33868
+ React__default.default.createElement(Heading, { level: 2, text: "How to contact about this event" }),
33869
+ React__default.default.createElement(ServiceContact, { email: email, website: url, websiteTitle: websiteUrlTitle, contacts: contacts }))),
33870
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33871
+ React__default.default.createElement(Heading, { level: 2, text: "About this event" }),
33872
+ React__default.default.createElement("div", null,
33873
+ React__default.default.createElement(React__default.default.Fragment, null, descriptionElement)),
33874
+ React__default.default.createElement(SummaryList, { terms: transformEventDetails(), hasMargin: false })),
33875
+ (uploads === null || uploads === void 0 ? void 0 : uploads.length) > 0 && (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33876
+ React__default.default.createElement(Heading, { level: 2, text: "Event resources" }),
33877
+ React__default.default.createElement(DownloadableFiles, { files: uploads }))),
33878
+ (socialProfiles === null || socialProfiles === void 0 ? void 0 : socialProfiles.length) > 0 && (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", classes: "striped-column" },
33879
+ React__default.default.createElement(Heading, { level: 2, text: "Follow this event" }),
33880
+ React__default.default.createElement(ServiceSocialLinks, { profiles: socialProfiles }))))));
33881
+ };
33882
+
33883
+ ({
33884
+ id: 'event-1',
33885
+ name: 'Family Fun Day at Wicksteed Park',
33886
+ description: 'Join us for an exciting family fun day with activities for all ages. There will be face painting, balloon animals, live music, and special discounts on park rides. A perfect day out for families with children of all ages.',
33887
+ descriptionElement: (React__default.default.createElement("div", null,
33888
+ React__default.default.createElement("p", null, "Join us for an exciting family fun day with activities for all ages. There will be face painting, balloon animals, live music, and special discounts on park rides."),
33889
+ React__default.default.createElement("p", null, "A perfect day out for families with children of all ages. Food and refreshments will be available throughout the day."))),
33890
+ startDateTime: '2025-07-15T10:00:00',
33891
+ endDateTime: '2025-07-15T16:00:00',
33892
+ eventType: 'Family Event',
33893
+ audience: ['Families', 'Children', 'Young People'],
33894
+ organization: {
33895
+ id: 'org-1',
33896
+ name: 'Wicksteed Park',
33897
+ description: 'A family theme park and nature reserve in Kettering',
33898
+ logo: 'https://via.placeholder.com/200x100?text=Wicksteed+Park',
33899
+ url: 'https://www.wicksteedpark.co.uk',
33900
+ },
33901
+ location: {
33902
+ id: 1,
33903
+ name: 'Wicksteed Park',
33904
+ description: 'Main entrance and activities area',
33905
+ isVisitable: true,
33906
+ latitude: '52.3991',
33907
+ longitude: '-0.7358',
33908
+ address: {
33909
+ id: 1,
33910
+ address1: 'Barton Road',
33911
+ city: 'Kettering',
33912
+ county: 'Northamptonshire',
33913
+ postcode: 'NN15 6NJ',
33914
+ country: 'United Kingdom',
33915
+ },
33916
+ accessibility: [
33917
+ {
33918
+ id: 1,
33919
+ accessibility: 'Wheelchair accessible paths',
33920
+ },
33921
+ {
33922
+ id: 2,
33923
+ accessibility: 'Accessible toilets',
33924
+ },
33925
+ {
33926
+ id: 3,
33927
+ accessibility: 'Disabled parking available',
33928
+ },
33929
+ ],
33930
+ },
33931
+ email: 'events@wicksteedpark.co.uk',
33932
+ fees: 'Free entry to event activities. Park entry charges apply.',
33933
+ url: 'https://www.wicksteedpark.co.uk/events/family-fun-day',
33934
+ websiteUrlTitle: 'Book tickets online',
33935
+ contacts: [
33936
+ {
33937
+ id: 1,
33938
+ name: 'Event Information',
33939
+ title: 'General Enquiries',
33940
+ phones: [
33941
+ {
33942
+ id: 1,
33943
+ number: '01536 512475',
33944
+ },
33945
+ ],
33946
+ },
33947
+ ],
33948
+ uploads: [
33949
+ {
33950
+ title: 'Event Programme',
33951
+ url: '/files/family-fun-day-programme.pdf',
33952
+ size: '2.5MB',
33953
+ type: 'PDF',
33954
+ archived: false,
33955
+ },
33956
+ {
33957
+ title: 'Activity Map',
33958
+ url: '/files/activity-map.pdf',
33959
+ size: '1.2MB',
33960
+ type: 'PDF',
33961
+ archived: false,
33962
+ },
33963
+ ],
33964
+ socialProfiles: [
33965
+ {
33966
+ id: 1,
33967
+ name: 'Wicksteed Park Facebook',
33968
+ social_network: 'facebook',
33969
+ link: 'https://facebook.com/wicksteedpark',
33970
+ },
33971
+ {
33972
+ id: 2,
33973
+ name: 'Wicksteed Park Twitter',
33974
+ social_network: 'twitter',
33975
+ link: 'https://twitter.com/wicksteedpark',
33976
+ },
33977
+ ],
33978
+ updatedAt: '2025-01-15',
33979
+ shortListPath: '/events/shortlist',
33980
+ isRecurring: false,
33981
+ registrationDeadline: '2025-07-10T23:59:59',
33982
+ capacity: 500,
33983
+ currentAttendees: 342,
33984
+ });
33985
+ ({
33986
+ id: 'event-2',
33987
+ name: 'Online Parenting Workshop: Managing Screen Time',
33988
+ description: 'A comprehensive online workshop for parents and carers about managing children\'s screen time effectively. Learn practical strategies, understand the latest research, and connect with other parents.',
33989
+ descriptionElement: (React__default.default.createElement("div", null,
33990
+ React__default.default.createElement("p", null, "A comprehensive online workshop for parents and carers about managing children's screen time effectively."),
33991
+ React__default.default.createElement("p", null, "During this 2-hour session, you'll learn:"),
33992
+ React__default.default.createElement("ul", null,
33993
+ React__default.default.createElement("li", null, "Evidence-based strategies for healthy screen time limits"),
33994
+ React__default.default.createElement("li", null, "How to create engaging offline activities"),
33995
+ React__default.default.createElement("li", null, "Understanding age-appropriate content"),
33996
+ React__default.default.createElement("li", null, "Building family media agreements")),
33997
+ React__default.default.createElement("p", null, "There will be time for Q&A and connecting with other parents."))),
33998
+ startDateTime: '2025-03-20T19:00:00',
33999
+ endDateTime: '2025-03-20T21:00:00',
34000
+ eventType: 'Workshop',
34001
+ audience: ['Parents', 'Carers'],
34002
+ organization: {
34003
+ id: 'org-2',
34004
+ name: 'Northamptonshire Family Support',
34005
+ description: 'Supporting families across Northamptonshire',
34006
+ logo: 'https://via.placeholder.com/200x100?text=Family+Support',
34007
+ url: 'https://www.northantsfamilysupport.org.uk',
34008
+ },
34009
+ location: {
34010
+ id: 2,
34011
+ name: 'Online Event',
34012
+ description: 'Join from the comfort of your own home',
34013
+ isVirtual: true,
34014
+ virtualMeetingInfo: 'Zoom link will be sent 24 hours before the event. Please ensure you have a stable internet connection and a quiet space.',
34015
+ },
34016
+ email: 'workshops@northantsfamilysupport.org.uk',
34017
+ fees: 'Free',
34018
+ url: 'https://www.northantsfamilysupport.org.uk/workshops/screen-time',
34019
+ websiteUrlTitle: 'Register for this workshop',
34020
+ contacts: [
34021
+ {
34022
+ id: 1,
34023
+ name: 'Workshop Team',
34024
+ title: 'Registration Support',
34025
+ phones: [
34026
+ {
34027
+ id: 1,
34028
+ number: '01604 123456',
34029
+ },
34030
+ ],
34031
+ },
34032
+ ],
34033
+ uploads: [
34034
+ {
34035
+ title: 'Workshop Preparation Guide',
34036
+ url: '/files/screen-time-prep-guide.pdf',
34037
+ size: '800KB',
34038
+ type: 'PDF',
34039
+ archived: false,
34040
+ },
34041
+ ],
34042
+ updatedAt: '2025-01-10',
34043
+ shortListPath: '/events/shortlist',
34044
+ isRecurring: true,
34045
+ recurrencePattern: 'Monthly on the third Thursday',
34046
+ registrationDeadline: '2025-03-18T23:59:59',
34047
+ capacity: 50,
34048
+ currentAttendees: 23,
34049
+ });
34050
+
34051
+ var EventList = function (_a) {
34052
+ var eventsPath = _a.eventsPath, shortListPath = _a.shortListPath, events = _a.events, _b = _a.search, search = _b === void 0 ? '' : _b, setSearch = _a.setSearch, _c = _a.proximity, proximity = _c === void 0 ? 2 : _c, _d = _a.showPostcodeSearch, showPostcodeSearch = _d === void 0 ? true : _d, _e = _a.postcode, postcode = _e === void 0 ? '' : _e, setPostcode = _a.setPostcode, _f = _a.totalResults, totalResults = _f === void 0 ? 0 : _f, _g = _a.pageNumber, pageNumber = _g === void 0 ? 1 : _g, setPageNumber = _a.setPageNumber, _h = _a.perPage, perPage = _h === void 0 ? 5 : _h, _j = _a.extractLength, extractLength = _j === void 0 ? 300 : _j, _k = _a.eventTypes, eventTypes = _k === void 0 ? [] : _k, setEventTypes = _a.setEventTypes, _l = _a.audiences, audiences = _l === void 0 ? [] : _l, setAudiences = _a.setAudiences, selectedMonth = _a.selectedMonth, setSelectedMonth = _a.setSelectedMonth, selectedYear = _a.selectedYear, setSelectedYear = _a.setSelectedYear, _m = _a.mapCenter, mapCenter = _m === void 0 ? '52.40410666556486,-0.7237065995821512' : _m, _o = _a.mapZoom, mapZoom = _o === void 0 ? 9 : _o, _p = _a.isLoading, isLoading = _p === void 0 ? false : _p, _q = _a.isError, isError = _q === void 0 ? false : _q; _a.hideOldEvents;
34053
+ var _s = useLocalStorage("".concat(eventsPath.replace(/\//g, ''), "-accordion"), []), accordions = _s[0], setAccordions = _s[1];
34054
+ var _t = useLocalStorage("".concat(eventsPath.replace(/\//g, ''), "-accordion-all"), true), openAll = _t[0], setOpenAll = _t[1];
34055
+ var _u = useLocalStorage("".concat(eventsPath.replace(/\//g, ''), "-show-map"), false), showMap = _u[0], setShowMap = _u[1];
34056
+ var _v = React.useState(false), showFilters = _v[0], setShowFilters = _v[1];
34057
+ var _w = useDirectoryShortListContext(), _x = _w.favourites, favourites = _x.favourites; _x.setFavourites; _w.toggleFavourites; _w.isFavourite;
34058
+ var _y = React.useState(false), notServer = _y[0], setNotServer = _y[1];
34059
+ var _z = React.useState(search), searchTerm = _z[0], setSearchTerm = _z[1];
34060
+ var _0 = React.useState(postcode), postcodeSearch = _0[0], setPostcodeSearch = _0[1];
34061
+ var themeContext = React.useContext(styled.ThemeContext);
34062
+ var _1 = React.useState(false), filtersActive = _1[0], setFiltersActive = _1[1];
34063
+ React.useEffect(function () {
34064
+ setNotServer(true);
34065
+ setFiltersActive(hasActiveFilters());
34066
+ }, []);
34067
+ React.useEffect(function () {
34068
+ setFiltersActive(hasActiveFilters());
34069
+ }, [selectedMonth, selectedYear, eventTypes, audiences, search, postcode]);
34070
+ // Initialize accordions
34071
+ if (accordions.length === 0) {
34072
+ var tempAccordions_1 = [];
34073
+ // Date filter
34074
+ tempAccordions_1.push(false);
34075
+ // Event types
34076
+ eventTypes === null || eventTypes === void 0 ? void 0 : eventTypes.forEach(function () {
34077
+ tempAccordions_1.push(false);
34078
+ });
34079
+ // Audiences
34080
+ audiences === null || audiences === void 0 ? void 0 : audiences.forEach(function () {
34081
+ tempAccordions_1.push(false);
34082
+ });
34083
+ setAccordions(tempAccordions_1);
34084
+ }
34085
+ var optionChecked = function (e, categoryIndex, singleSelection, isEventType) {
34086
+ if (isEventType === void 0) { isEventType = true; }
34087
+ var categories = isEventType ? eventTypes : audiences;
34088
+ var setCategories = isEventType ? setEventTypes : setAudiences;
34089
+ var newCategories = __spreadArray([], categories, true);
34090
+ if (singleSelection) {
34091
+ newCategories[categoryIndex].options.forEach(function (option) {
34092
+ option.checked = false;
34093
+ });
34094
+ }
34095
+ newCategories[categoryIndex].options.find(function (option) {
34096
+ if (option.id === e.target.value) {
34097
+ option.checked = !option.checked;
34098
+ }
34099
+ });
34100
+ setCategories(newCategories);
34101
+ };
34102
+ var clearCategory = function (categoryIndex, isEventType) {
34103
+ if (isEventType === void 0) { isEventType = true; }
34104
+ var categories = isEventType ? eventTypes : audiences;
34105
+ var setCategories = isEventType ? setEventTypes : setAudiences;
34106
+ var newCategories = __spreadArray([], categories, true);
34107
+ newCategories[categoryIndex].options.forEach(function (option) {
34108
+ option.checked = false;
34109
+ });
34110
+ setCategories(newCategories);
34111
+ };
34112
+ var clearDateFilter = function () {
34113
+ setSelectedMonth(undefined);
34114
+ setSelectedYear(undefined);
34115
+ };
34116
+ var from = pageNumber * perPage - (perPage - 1);
34117
+ var to = from + ((events === null || events === void 0 ? void 0 : events.length) ? events.length - 1 : 0);
34118
+ var clearSearch = function () {
34119
+ window.location.href = eventsPath;
34120
+ };
34121
+ var toggleAccordion = function (index) {
34122
+ var updatedAccordions = __spreadArray([], accordions, true);
34123
+ updatedAccordions[index] = !updatedAccordions[index];
34124
+ setAccordions(updatedAccordions);
34125
+ };
34126
+ var toggleAll = function () {
34127
+ setOpenAll(!openAll);
34128
+ var updatedAccordions = accordions.map(function () {
34129
+ return openAll;
34130
+ });
34131
+ setAccordions(updatedAccordions);
34132
+ };
34133
+ var submitSearch = function (e) {
34134
+ e.preventDefault();
34135
+ setSearch(searchTerm);
34136
+ setPostcode(postcodeSearch);
34137
+ };
34138
+ var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
34139
+ var labelLetters = letters.split('');
34140
+ var mapProps = {
34141
+ centre: mapCenter,
34142
+ zoom: mapZoom,
34143
+ size: '640x320',
34144
+ imageAltText: 'Event search results displayed on a map',
34145
+ mapMarkers: events
34146
+ .filter(function (event) {
34147
+ var _a, _b;
34148
+ return ((_a = event.location) === null || _a === void 0 ? void 0 : _a.latitude) && ((_b = event.location) === null || _b === void 0 ? void 0 : _b.longitude);
34149
+ })
34150
+ .map(function (event, index) {
34151
+ var _a, _b;
34152
+ return {
34153
+ lat: parseFloat(((_a = event.location) === null || _a === void 0 ? void 0 : _a.latitude) || '0'),
34154
+ lng: parseFloat(((_b = event.location) === null || _b === void 0 ? void 0 : _b.longitude) || '0'),
34155
+ label: labelLetters[index],
34156
+ title: "<a href=".concat(event.id, ">").concat(event.name, "</a>"),
34157
+ };
34158
+ }),
34159
+ };
34160
+ var hasActiveFilters = function () {
34161
+ return (search !== '' ||
34162
+ postcode !== '' ||
34163
+ selectedMonth !== undefined ||
34164
+ selectedYear !== undefined ||
34165
+ eventTypes.some(function (category) {
34166
+ return category.options.some(function (option) {
34167
+ return option.checked == true;
34168
+ });
34169
+ }) ||
34170
+ audiences.some(function (category) {
34171
+ return category.options.some(function (option) {
34172
+ return option.checked == true;
34173
+ });
34174
+ }));
34175
+ };
34176
+ var formatEventDateTime = function (startDateTime, endDateTime) {
34177
+ var startDate = new Date(startDateTime);
34178
+ var options = {
34179
+ weekday: 'long',
34180
+ year: 'numeric',
34181
+ month: 'long',
34182
+ day: 'numeric',
34183
+ hour: '2-digit',
34184
+ minute: '2-digit',
34185
+ };
34186
+ var formatted = startDate.toLocaleDateString('en-GB', options);
34187
+ if (endDateTime) {
34188
+ var endDate = new Date(endDateTime);
34189
+ var endTime = endDate.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' });
34190
+ formatted += " - ".concat(endTime);
34191
+ }
34192
+ return formatted;
34193
+ };
34194
+ var monthNames = [
34195
+ 'January', 'February', 'March', 'April', 'May', 'June',
34196
+ 'July', 'August', 'September', 'October', 'November', 'December'
34197
+ ];
34198
+ var currentYear = new Date().getFullYear();
34199
+ var years = Array.from({ length: 5 }, function (_, i) { return currentYear + i; });
34200
+ return (React__default.default.createElement(Container$3, { "data-testid": "EventList" },
34201
+ React__default.default.createElement(Row$1, null,
34202
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34203
+ React__default.default.createElement(SearchHeader$1, null,
34204
+ React__default.default.createElement(FormWithLine, { hideLine: true, onSubmit: submitSearch },
34205
+ React__default.default.createElement(Row$1, null,
34206
+ React__default.default.createElement(Column, { small: "full", medium: "one-half", large: "one-third" },
34207
+ React__default.default.createElement(Label$1, { htmlFor: "eventSearch" }, "What events are you looking for?"),
34208
+ React__default.default.createElement(HintText, { text: "Enter the name of a specific event or organisation" }),
34209
+ React__default.default.createElement(Input, { name: "eventSearch", type: "text", defaultValue: searchTerm, id: "eventSearch", onChange: function (e) {
34210
+ setSearchTerm(e.target.value);
34211
+ } })),
34212
+ showPostcodeSearch && (React__default.default.createElement(Column, { small: "full", medium: "one-half", large: "one-third" },
34213
+ React__default.default.createElement(Label$1, { htmlFor: "postcode" }, "Postcode (optional)"),
34214
+ React__default.default.createElement(HintText, { text: "Enter a postcode to see results within ".concat(proximity, " miles") }),
34215
+ React__default.default.createElement(Input, { name: "postcode", type: "text", defaultValue: postcodeSearch, id: "postcode", onChange: function (e) { return setPostcodeSearch(e.target.value); }, autocomplete: "postal-code" }))),
34216
+ React__default.default.createElement(Column, { small: "full", medium: "one-half", large: "one-third" },
34217
+ React__default.default.createElement(ButtonContainer$2, null,
34218
+ React__default.default.createElement(Button$1, { size: "large", onClick: submitSearch, type: "submit" },
34219
+ React__default.default.createElement(ButtonText$1, null, "Search"),
34220
+ React__default.default.createElement(IconDownload, { colourFill: "#fff" })),
34221
+ filtersActive && (React__default.default.createElement(Button$1, { size: "large", onClick: clearSearch, type: "button", "$isWarning": true },
34222
+ React__default.default.createElement(ButtonText$1, null, "Clear search"))))))))),
34223
+ React__default.default.createElement(Column, { small: "full", medium: "one-third", large: "one-third" },
34224
+ React__default.default.createElement(FilterToggle, { type: "button", onClick: function (e) { return setShowFilters(!showFilters); } }, showFilters ? "Hide Filters" : "Show Filters"),
34225
+ React__default.default.createElement(FilterContainer, { "$showFilters": showFilters },
34226
+ React__default.default.createElement(Row$1, null,
34227
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34228
+ React__default.default.createElement(ResultInfo$1, null, "Refine your search")),
34229
+ notServer && (React__default.default.createElement(React__default.default.Fragment, null,
34230
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34231
+ React__default.default.createElement(AccordionControls, null,
34232
+ filtersActive ? (React__default.default.createElement(TextLink$1, { onClick: clearSearch, type: "button" },
34233
+ React__default.default.createElement(ButtonText$1, null, "Clear all filters"))) : (React__default.default.createElement("div", null)),
34234
+ React__default.default.createElement(TextLink$1, { onClick: toggleAll, type: "button", "aria-expanded": !openAll },
34235
+ openAll ? 'Open all' : 'Close all',
34236
+ React__default.default.createElement(VisuallyHidden, null, " sections")))),
34237
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34238
+ React__default.default.createElement(Fieldset$1, null,
34239
+ React__default.default.createElement(Legend$1, { onClick: function (e) { return toggleAccordion(0); } },
34240
+ React__default.default.createElement(LegendButton, { onClick: function (e) { return toggleAccordion(0); }, type: "button" },
34241
+ "Select date range",
34242
+ React__default.default.createElement(AccordionIcon, { "$isOpen": accordions[0] }))),
34243
+ React__default.default.createElement(Accordion, { "$isOpen": accordions[0] },
34244
+ React__default.default.createElement(ClearFilter$1, null,
34245
+ React__default.default.createElement(TextLink$1, { onClick: clearDateFilter }, "Clear filter")),
34246
+ React__default.default.createElement(Row$1, null,
34247
+ React__default.default.createElement(Column, { small: "full", medium: "one-half", large: "one-half" },
34248
+ React__default.default.createElement(DropDownSelect, { id: "event_month", label: "Month", selected: (selectedMonth === null || selectedMonth === void 0 ? void 0 : selectedMonth.toString()) || '', onChange: function (e) { return setSelectedMonth(e.target.value ? parseInt(e.target.value) : undefined); }, options: __spreadArray([
34249
+ { title: 'All months', value: '' }
34250
+ ], monthNames.map(function (month, index) { return ({
34251
+ title: month,
34252
+ value: (index + 1).toString(),
34253
+ }); }), true) })),
34254
+ React__default.default.createElement(Column, { small: "full", medium: "one-half", large: "one-half" },
34255
+ React__default.default.createElement(DropDownSelect, { id: "event_year", label: "Year", selected: (selectedYear === null || selectedYear === void 0 ? void 0 : selectedYear.toString()) || '', onChange: function (e) { return setSelectedYear(e.target.value ? parseInt(e.target.value) : undefined); }, options: __spreadArray([
34256
+ { title: 'All years', value: '' }
34257
+ ], years.map(function (year) { return ({
34258
+ title: year.toString(),
34259
+ value: year.toString(),
34260
+ }); }), true) })))))), eventTypes === null || eventTypes === void 0 ? void 0 :
34261
+ eventTypes.map(function (category, categoryIndex) { return (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", key: category.label },
34262
+ React__default.default.createElement(Fieldset$1, null,
34263
+ React__default.default.createElement(Legend$1, null,
34264
+ React__default.default.createElement(LegendButton, { onClick: function (e) { return toggleAccordion(categoryIndex + 1); }, type: "button" },
34265
+ category.label,
34266
+ React__default.default.createElement(AccordionIcon, { "$isOpen": accordions[categoryIndex + 1] }))),
34267
+ React__default.default.createElement(Accordion, { "$isOpen": accordions[categoryIndex + 1] },
34268
+ React__default.default.createElement(ClearFilter$1, null,
34269
+ React__default.default.createElement(TextLink$1, { onClick: function (e) { return clearCategory(categoryIndex, true); } }, "Clear filter")),
34270
+ category.options.map(function (taxonomy) { return (React__default.default.createElement(Category$2, { key: taxonomy.id },
34271
+ React__default.default.createElement(RadioCheckboxInput, { name: taxonomy.vocabulary, value: taxonomy.id, label: taxonomy.name, singleSelection: category.singleSelection, checked: taxonomy.checked, onChange: function (e) { return optionChecked(e, categoryIndex, category.singleSelection, true); } }))); }))))); }), audiences === null || audiences === void 0 ? void 0 :
34272
+ audiences.map(function (category, categoryIndex) { return (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", key: category.label },
34273
+ React__default.default.createElement(Fieldset$1, null,
34274
+ React__default.default.createElement(Legend$1, null,
34275
+ React__default.default.createElement(LegendButton, { onClick: function (e) { return toggleAccordion(eventTypes.length + categoryIndex + 1); }, type: "button" },
34276
+ category.label,
34277
+ React__default.default.createElement(AccordionIcon, { "$isOpen": accordions[eventTypes.length + categoryIndex + 1] }))),
34278
+ React__default.default.createElement(Accordion, { "$isOpen": accordions[eventTypes.length + categoryIndex + 1] },
34279
+ React__default.default.createElement(ClearFilter$1, null,
34280
+ React__default.default.createElement(TextLink$1, { onClick: function (e) { return clearCategory(categoryIndex, false); } }, "Clear filter")),
34281
+ category.options.map(function (taxonomy) { return (React__default.default.createElement(Category$2, { key: taxonomy.id },
34282
+ React__default.default.createElement(RadioCheckboxInput, { name: taxonomy.vocabulary, value: taxonomy.id, label: taxonomy.name, singleSelection: category.singleSelection, checked: taxonomy.checked, onChange: function (e) { return optionChecked(e, categoryIndex, category.singleSelection, false); } }))); }))))); })))))),
34283
+ React__default.default.createElement(Column, { small: "full", medium: "two-thirds", large: "two-thirds" },
34284
+ React__default.default.createElement(Row$1, null, isError ? (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34285
+ React__default.default.createElement(AlertBannerService, null,
34286
+ React__default.default.createElement("p", null, "Sorry, there was a problem fetching events. Please try again later.")))) : isLoading ? (React__default.default.createElement(LoadingContainer$1, null,
34287
+ React__default.default.createElement(LoadingSpinner, null),
34288
+ React__default.default.createElement("p", null, "Loading"))) : (React__default.default.createElement(React__default.default.Fragment, null,
34289
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34290
+ (events === null || events === void 0 ? void 0 : events.length) > 0 ? (React__default.default.createElement(ResultInfo$1, null,
34291
+ "Showing ",
34292
+ from,
34293
+ " to ",
34294
+ to,
34295
+ " out of ",
34296
+ totalResults.toLocaleString())) : (React__default.default.createElement(ResultInfo$1, null, "No events found")),
34297
+ React__default.default.createElement(FavouritesContainer, null,
34298
+ (events === null || events === void 0 ? void 0 : events.length) > 0 && (React__default.default.createElement(MapToggle, { type: "button", size: "large", onClick: function (e) { return setShowMap(!showMap); } }, showMap ? "Hide Map" : "Show Map")),
34299
+ React__default.default.createElement(Favourites, { href: shortListPath },
34300
+ React__default.default.createElement(HeartIcon, { colourFill: themeContext.theme_vars.colours.action }),
34301
+ " Shortlist (",
34302
+ favourites.length,
34303
+ ")"))),
34304
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34305
+ React__default.default.createElement(Pagination, { currentPage: pageNumber, totalResults: totalResults, resultsPerPage: perPage, postTo: eventsPath, buttonClickOverride: setPageNumber })),
34306
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" }, notServer && React__default.default.createElement(React__default.default.Fragment, null, (events === null || events === void 0 ? void 0 : events.length) > 0 && showMap && React__default.default.createElement(DirectoryMap, { mapProps: mapProps }))),
34307
+ events.map(function (event, index) {
34308
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
34309
+ var snippet = transformSnippet(event.description, extractLength);
34310
+ return (React__default.default.createElement(Column, { small: "full", medium: "full", large: "full", key: event.id },
34311
+ React__default.default.createElement(ServiceContainer, { "$resultNumber": index },
34312
+ React__default.default.createElement(Row$1, null,
34313
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34314
+ React__default.default.createElement(ServiceHeader, null,
34315
+ React__default.default.createElement(ServiceLink$1, { href: "".concat(event.id) }, event.name),
34316
+ showMap && ((_a = event.location) === null || _a === void 0 ? void 0 : _a.latitude) && ((_b = event.location) === null || _b === void 0 ? void 0 : _b.longitude) && (React__default.default.createElement(MarkerContainer, null,
34317
+ React__default.default.createElement("span", null, labelLetters[index]),
34318
+ React__default.default.createElement(PinIcon, { colourFill: themeContext.theme_vars.colours.action_dark }))))),
34319
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34320
+ React__default.default.createElement(Age, null, formatEventDateTime(event.startDateTime, event.endDateTime)),
34321
+ event.organization && (React__default.default.createElement("p", { style: { fontSize: '0.9rem', color: '#666', marginBottom: '8px' } },
34322
+ "Organised by: ",
34323
+ React__default.default.createElement("strong", null, event.organization.name))),
34324
+ event.eventType && (React__default.default.createElement("p", { style: { fontSize: '0.9rem', color: '#666', marginBottom: '8px' } },
34325
+ "Event type: ",
34326
+ React__default.default.createElement("strong", null, event.eventType))),
34327
+ event.audience && event.audience.length > 0 && (React__default.default.createElement("p", { style: { fontSize: '0.9rem', color: '#666', marginBottom: '8px' } },
34328
+ "Audience: ",
34329
+ React__default.default.createElement("strong", null, event.audience.join(', '))))),
34330
+ React__default.default.createElement(Column, { small: "full", medium: ((_c = event.organization) === null || _c === void 0 ? void 0 : _c.logo) ? 'two-thirds' : 'full', large: ((_d = event.organization) === null || _d === void 0 ? void 0 : _d.logo) ? 'two-thirds' : 'full' },
34331
+ React__default.default.createElement("div", null, snippet)),
34332
+ ((_e = event.organization) === null || _e === void 0 ? void 0 : _e.logo) && (React__default.default.createElement(Column, { small: "full", medium: "one-third", large: "one-third" },
34333
+ React__default.default.createElement(ServiceImageContainer, null,
34334
+ React__default.default.createElement(ServiceImage, { src: event.organization.logo, alt: event.name + ' logo', loading: "lazy" })))),
34335
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34336
+ React__default.default.createElement(DirectoryAddToShortList, { id: event.id, name: event.name, snippet: snippet, email: event.email, website: event.url, phone: (_h = (_g = (_f = event.contacts) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.phones) === null || _h === void 0 ? void 0 : _h.flatMap(function (phone) { return phone.number; }).join(', '), addresses: ((_j = event.location) === null || _j === void 0 ? void 0 : _j.address) ? [{
34337
+ id: event.location.address.id,
34338
+ address_1: event.location.address.address1,
34339
+ city: event.location.address.city,
34340
+ state_province: event.location.address.county,
34341
+ postal_code: event.location.address.postcode,
34342
+ country: event.location.address.country
34343
+ }] : [], fees: event.fees }))))));
34344
+ }),
34345
+ React__default.default.createElement(Column, { small: "full", medium: "full", large: "full" },
34346
+ React__default.default.createElement(Pagination, { currentPage: pageNumber, totalResults: totalResults, resultsPerPage: perPage, postTo: eventsPath, buttonClickOverride: setPageNumber })))))))));
34347
+ };
34348
+
34349
+ /**
34350
+ * Filters out events that have already ended based on their end date/time
34351
+ * @param events Array of events to filter
34352
+ * @param hideOldEvents Whether to hide old events (defaults to true)
34353
+ * @returns Filtered array of events
34354
+ */
34355
+ var filterOldEvents = function (events, hideOldEvents) {
34356
+ if (hideOldEvents === void 0) { hideOldEvents = true; }
34357
+ if (!hideOldEvents) {
34358
+ return events;
34359
+ }
34360
+ var now = new Date();
34361
+ return events.filter(function (event) {
34362
+ // Use end date if available, otherwise use start date
34363
+ var eventEndDate = new Date(event.endDateTime || event.startDateTime);
34364
+ // Keep events that haven't ended yet
34365
+ return eventEndDate > now;
34366
+ });
34367
+ };
34368
+ /**
34369
+ * Filters events by month and year
34370
+ * @param events Array of events to filter
34371
+ * @param selectedMonth Month (1-12) or undefined for all months
34372
+ * @param selectedYear Year or undefined for all years
34373
+ * @returns Filtered array of events
34374
+ */
34375
+ var filterEventsByDate = function (events, selectedMonth, selectedYear) {
34376
+ if (!selectedMonth && !selectedYear) {
34377
+ return events;
34378
+ }
34379
+ return events.filter(function (event) {
34380
+ var eventDate = new Date(event.startDateTime);
34381
+ var eventMonth = eventDate.getMonth() + 1; // JavaScript months are 0-indexed
34382
+ var eventYear = eventDate.getFullYear();
34383
+ var monthMatches = !selectedMonth || eventMonth === selectedMonth;
34384
+ var yearMatches = !selectedYear || eventYear === selectedYear;
34385
+ return monthMatches && yearMatches;
34386
+ });
34387
+ };
34388
+ /**
34389
+ * Filters events by event type
34390
+ * @param events Array of events to filter
34391
+ * @param selectedEventTypes Array of selected event type IDs
34392
+ * @returns Filtered array of events
34393
+ */
34394
+ var filterEventsByType = function (events, selectedEventTypes) {
34395
+ if (selectedEventTypes.length === 0) {
34396
+ return events;
34397
+ }
34398
+ return events.filter(function (event) {
34399
+ if (!event.eventType) {
34400
+ return false;
34401
+ }
34402
+ return selectedEventTypes.includes(event.eventType);
34403
+ });
34404
+ };
34405
+ /**
34406
+ * Filters events by audience
34407
+ * @param events Array of events to filter
34408
+ * @param selectedAudiences Array of selected audience IDs
34409
+ * @returns Filtered array of events
34410
+ */
34411
+ var filterEventsByAudience = function (events, selectedAudiences) {
34412
+ if (selectedAudiences.length === 0) {
34413
+ return events;
34414
+ }
34415
+ return events.filter(function (event) {
34416
+ if (!event.audience || event.audience.length === 0) {
34417
+ return false;
34418
+ }
34419
+ // Check if any of the event's audiences match the selected audiences
34420
+ return event.audience.some(function (audience) { return selectedAudiences.includes(audience); });
34421
+ });
34422
+ };
34423
+ /**
34424
+ * Filters events by search term (searches in name and description)
34425
+ * @param events Array of events to filter
34426
+ * @param searchTerm Search term to look for
34427
+ * @returns Filtered array of events
34428
+ */
34429
+ var filterEventsBySearch = function (events, searchTerm) {
34430
+ if (!searchTerm.trim()) {
34431
+ return events;
34432
+ }
34433
+ var lowercaseSearch = searchTerm.toLowerCase();
34434
+ return events.filter(function (event) {
34435
+ var _a, _b;
34436
+ var nameMatch = event.name.toLowerCase().includes(lowercaseSearch);
34437
+ var descriptionMatch = event.description.toLowerCase().includes(lowercaseSearch);
34438
+ var organizationMatch = ((_b = (_a = event.organization) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(lowercaseSearch)) || false;
34439
+ return nameMatch || descriptionMatch || organizationMatch;
34440
+ });
34441
+ };
34442
+ /**
34443
+ * Sorts events by date (earliest first)
34444
+ * @param events Array of events to sort
34445
+ * @returns Sorted array of events
34446
+ */
34447
+ var sortEventsByDate = function (events) {
34448
+ return __spreadArray([], events, true).sort(function (a, b) {
34449
+ var dateA = new Date(a.startDateTime);
34450
+ var dateB = new Date(b.startDateTime);
34451
+ return dateA.getTime() - dateB.getTime();
34452
+ });
34453
+ };
34454
+ /**
34455
+ * Comprehensive filter function that applies all filters
34456
+ * @param events Array of events to filter
34457
+ * @param filters Object containing all filter criteria
34458
+ * @returns Filtered and sorted array of events
34459
+ */
34460
+ var applyAllEventFilters = function (events, filters) {
34461
+ var filteredEvents = events;
34462
+ // Apply old events filter
34463
+ filteredEvents = filterOldEvents(filteredEvents, filters.hideOldEvents);
34464
+ // Apply date filter
34465
+ filteredEvents = filterEventsByDate(filteredEvents, filters.selectedMonth, filters.selectedYear);
34466
+ // Apply event type filter
34467
+ if (filters.selectedEventTypes && filters.selectedEventTypes.length > 0) {
34468
+ filteredEvents = filterEventsByType(filteredEvents, filters.selectedEventTypes);
34469
+ }
34470
+ // Apply audience filter
34471
+ if (filters.selectedAudiences && filters.selectedAudiences.length > 0) {
34472
+ filteredEvents = filterEventsByAudience(filteredEvents, filters.selectedAudiences);
34473
+ }
34474
+ // Apply search filter
34475
+ if (filters.searchTerm) {
34476
+ filteredEvents = filterEventsBySearch(filteredEvents, filters.searchTerm);
34477
+ }
34478
+ // Sort by date
34479
+ return sortEventsByDate(filteredEvents);
34480
+ };
34481
+
34482
+ var defaultBreadcrumbs = [
34483
+ {
34484
+ title: 'Home',
34485
+ url: '/',
34486
+ },
34487
+ {
34488
+ title: 'Events',
34489
+ url: '/events',
34490
+ },
34491
+ ];
34492
+ var defaultFooterLinks = [
34493
+ {
34494
+ title: 'About',
34495
+ url: '/',
34496
+ },
34497
+ {
34498
+ title: 'Accessibility',
34499
+ url: '/',
34500
+ },
34501
+ {
34502
+ title: 'Cookies',
34503
+ url: '/',
34504
+ },
34505
+ {
34506
+ title: 'Contact us',
34507
+ url: '/',
34508
+ },
34509
+ {
34510
+ title: 'Jobs',
34511
+ url: '/',
34512
+ },
34513
+ {
34514
+ title: 'Newsletter',
34515
+ url: '/',
34516
+ },
34517
+ ];
34518
+ var EventPage = function (_a) {
34519
+ var event = _a.event, _b = _a.breadcrumbs, breadcrumbs = _b === void 0 ? defaultBreadcrumbs : _b, _c = _a.footerLinks, footerLinks = _c === void 0 ? defaultFooterLinks : _c;
34520
+ return (React__default.default.createElement(React__default.default.Fragment, null,
34521
+ React__default.default.createElement(Header, null),
34522
+ React__default.default.createElement(MaxWidthContainer, null,
34523
+ React__default.default.createElement(PageMain, null,
34524
+ React__default.default.createElement(Breadcrumbs, { breadcrumbsArray: breadcrumbs, hasMargin: true }),
34525
+ React__default.default.createElement(DirectoryShortListProvider, null,
34526
+ React__default.default.createElement(Event, __assign$2({}, event))),
34527
+ event.updatedAt && (React__default.default.createElement("p", null,
34528
+ React__default.default.createElement(DisplayDate, { preText: "Last updated ", text: event.updatedAt, format: "YYYY-MM-DD" }))))),
34529
+ React__default.default.createElement(Footer, { footerLinksArray: footerLinks })));
34530
+ };
34531
+
33719
34532
  exports.AccessibleLinks = AccessibleLink;
33720
34533
  exports.Accordion = Accordion$1;
33721
34534
  exports.AlertBanner = AlertBanner;
@@ -33744,6 +34557,9 @@ exports.Divider = Divider;
33744
34557
  exports.DownloadableFiles = DownloadableFiles;
33745
34558
  exports.DropDownFilter = DropDownFilter;
33746
34559
  exports.DynamicIcon = DynamicIcon;
34560
+ exports.Event = Event;
34561
+ exports.EventList = EventList;
34562
+ exports.EventPage = EventPage;
33747
34563
  exports.Footer = Footer;
33748
34564
  exports.FullWidthContainer = FullWidthContainer;
33749
34565
  exports.GDS_theme = GDS_theme;
@@ -33796,9 +34612,16 @@ exports.TextInput = TextInput;
33796
34612
  exports.Video = Video;
33797
34613
  exports.WarningText = WarningText;
33798
34614
  exports.WarningTextDisclaimer = WarningTextDisclaimer;
34615
+ exports.applyAllEventFilters = applyAllEventFilters;
34616
+ exports.filterEventsByAudience = filterEventsByAudience;
34617
+ exports.filterEventsByDate = filterEventsByDate;
34618
+ exports.filterEventsBySearch = filterEventsBySearch;
34619
+ exports.filterEventsByType = filterEventsByType;
34620
+ exports.filterOldEvents = filterOldEvents;
33799
34621
  exports.lb_theme_north = lb_theme_north;
33800
34622
  exports.lb_theme_west = lb_theme_west;
33801
34623
  exports.north_theme = north_theme;
34624
+ exports.sortEventsByDate = sortEventsByDate;
33802
34625
  exports.useDirectoryShortListContext = useDirectoryShortListContext;
33803
34626
  exports.west_theme = west_theme;
33804
34627
  //# sourceMappingURL=index.js.map