@clickview/lite 0.50.1 → 0.50.3
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/dist/bundles.json +1 -1
- package/dist/scripts/{1437-5b1889cf0d-lite.chunk.js → 1437-f76bfeecb0-lite.chunk.js} +1 -1
- package/dist/scripts/{1437-5b1889cf0d-lite.chunk.js.map → 1437-f76bfeecb0-lite.chunk.js.map} +1 -1
- package/dist/scripts/9839-8d44a3235c-lite.chunk.js +3 -0
- package/dist/scripts/9839-8d44a3235c-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-575d337427.min.js → bundle-2535722aa2.min.js} +3 -3
- package/dist/scripts/{bundle-575d337427.min.js.map → bundle-2535722aa2.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/9839-5befd54d51-lite.chunk.js +0 -3
- package/dist/scripts/9839-5befd54d51-lite.chunk.js.map +0 -1
- /package/dist/scripts/{9839-5befd54d51-lite.chunk.js.LICENSE.txt → 9839-8d44a3235c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-575d337427.min.js.LICENSE.txt → bundle-2535722aa2.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{1437-5b1889cf0d-lite.chunk.js.map → 1437-f76bfeecb0-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1437-5b1889cf0d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/LinkifyHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/calendar-events.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/calendar-day.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/special-event-list-item.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/SpecialEventListItem.tsx","file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","file:///app/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///app/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/ClassificationStatus.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/calendar-cell.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/CalendarCell.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/empty-state/SpecialEventEmptyState.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/special-event-list.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/SpecialEventList.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/calendar-body.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/CalendarBody.tsx","file:///app/packages/libs/shared/src/apps/calendar/utils/CalendarHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/calendar-nav.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/CalendarNav.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/error-state/SpecialEventErrorState.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarWeeksTable.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarViewUtils.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarView.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarEventsData.ts","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts","file:///app/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport linkifyStr from 'linkifyjs/string';\nimport * as _ from 'underscore';\n\nconst BaseLinkifyOptions = {\n className: 'info-link',\n defaultProtocol: 'https'\n};\n\nexport const LinkifyHelper = {\n /**\n * The underlying linkifyStr interface escapes text within the input string\n */\n linkifyText(text: string, options?: ObjectHash): string {\n if (!text) return;\n const ops = options ? _.extend({}, BaseLinkifyOptions, options) : BaseLinkifyOptions;\n return linkifyStr(text, ops);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"cellDate\":\"qcD_n\",\"label\":\"sp6Gw\",\"isHovering\":\"_6xWx\",\"numberWrapper\":\"KZfe0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isToday(props.date);\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.hasEvent)\n dateClassName += ' text-white';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hardcodedCover\":\"ByD0q\",\"tag\":\"ZHW8B\",\"date\":\"AKOWh\",\"backgroundImage\":\"RDtch\",\"eventCard\":\"YtMiS\",\"wrapper\":\"ylxwf\",\"left\":\"iTqxB\",\"right\":\"bUUXX\",\"noAnimation\":\"oZacR\",\"cover\":\"kpH3Y\",\"tagWrap\":\"KvlZ8\",\"appear\":\"xlSdc\",\"displayDate\":\"rkBJb\",\"title\":\"c4_Kj\",\"titleText\":\"nRMvg\",\"circle\":\"wu4hg\",\"active\":\"tbdFj\",\"arrow\":\"omZKz\",\"bottomBar\":\"hxKUP\",\"bottomPlaceholder\":\"dzeZ7\",\"multiEventFilter\":\"dSxjc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-events.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = props.eventsOnDay.find((e, idx) => idx === sliderStep);\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n \n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content.id, displayedEvent.name);\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n className='d-flex justify-content-end'\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n hasEvent\n />\n )}\n\n <div className={`postion-relative ${styles.wrapper}`}>\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <div className={`${styles.titleText} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</div>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronLeft}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronRight}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </div>\n </AppLink>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"nsEjO\",\"multiEventCell\":\"vvFYj\",\"fadeIn\":\"BX0cX\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n />\n )}\n {isMultiEventDate && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && <CalendarEvents {...props} isMultiEventDate={isMultiEventDate} />}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"SgHYb\",\"banner\":\"PLw1p\",\"pill\":\"UNBr0\",\"logo\":\"xv_tc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './special-event-list-item.scss';\n\ninterface SpecialEventListItemProps {\n getAppLink: (id: string, name: string) => Core.AppLink;\n event: CalendarEvent<CalendarEventContent>;\n onClick?: () => void;\n inPopup?: boolean;\n presentationId: string;\n headingClassName?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: () => string;\n getStartTime?: (content: CalendarEventContent) => string;\n}\n\nexport function SpecialEventListItem(props: SpecialEventListItemProps): JSX.Element {\n const appLink = props.getAppLink(props.event.content.id, props.event.name);\n\n const backgroundColor = props.getBackgroundColor?.(props.event.content);\n const iconUrl = props.getIconUrl?.(props.event.content);\n const bannerUrl = props.getBannerUrl?.(props.event.content);\n const multiDayEvent = !!props.event.endDate;\n const isComingSoon = props.event.content.status === ClassificationStatus.ComingSoon;\n const startTime = props.getStartTime?.(props.event.content);\n const actionLabel = props.getActionLabel?.();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: props.inPopup ? LocationContext.CalendarPopup : LocationContext.CalendarDay\n };\n const analyticsData = {\n topicId: props.event.content.id,\n eventId: props.event.specialEventId,\n presentationId: props.presentationId,\n date: DateHelper.format(new Date(props.event.startDate), 'YYYY-MM-DD'),\n status: props.event.content.status\n };\n\n return (\n <div>\n {startTime && (\n <h6>{startTime}</h6>\n )}\n\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={!isComingSoon && appLink}\n className={`${!isComingSoon ? 'cursor-pointer' : ''} text-decoration-none`}\n onClick={props.onClick}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div\n className={`banner rounded-3 position-relative ${styles.banner}`}\n style={{ backgroundColor, backgroundImage: `url('${bannerUrl}')` }}\n >\n <div className={`d-flex justify-content-between align-items-center w-100 h-100 px-3`}>\n <div className='d-flex align-items-center'>\n {iconUrl && (\n <div className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden me-2`}>\n <BaseImage data={iconUrl} />\n </div>\n )}\n <div className='text-white'>\n {isComingSoon && <ComingSoonTag className={`pe-2 fw-semibold mb-1 rounded-pill justify-content-start ${styles.pill}`}/>}\n \n {multiDayEvent && (\n <div className='mb-1'>{SpecialEventHelper.getDisplayDate(props.event.startDate, props.event.endDate)}</div>\n )}\n <h2 className={`h4 text-white text-shadow ${props.event.description ? 'clamp-2' : 'clamp-1'}`} title={props.event.name}>{props.event.name}</h2>\n \n </div>\n </div>\n <div className='d-none d-sm-block flex-shrink-0'>\n {!isComingSoon && (\n <ActionButton className='btn btn-outline-dark fw-semibold'>\n {actionLabel}\n </ActionButton>\n )}\n </div>\n </div>\n </div>\n </AppLink>\n <div className='mt-2 mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.event.description || props.event.content.description) }}/>\n </div>\n </div>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n \n // same month event\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"WRLhh\",\"notCurrentMonth\":\"L0rbf\",\"weekend\":\"mF0ka\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-cell.scss';\n\nfunction getIsWeekend(date: Date): boolean {\n return DateHelper.getWeekday(date) === 0 || DateHelper.getWeekday(date) === 6;\n}\n\nexport function CalendarCell(props: CalendarCellProps): JSX.Element {\n const { date, notCurrentMonth } = props;\n const [ sliderStep, setSliderStep ] = React.useState<number>(0);\n\n let wrapperClassname = `position-relative border ${props.theme.border} ${styles.wrapper}`;\n if (getIsWeekend(date)) wrapperClassname += ` ${styles.weekend}`;\n if (notCurrentMonth) wrapperClassname += ` ${styles.notCurrentMonth}`;\n\n const eventsOnDay = props.events?.filter(e => DateHelper.isSame(props.date, e.startDate)) || [];\n const updatedProps = { ...props, eventsOnDay, sliderStep, setSliderStep };\n\n return (\n <td className={wrapperClassname}>\n {eventsOnDay?.length > 0 ? (\n <HoverToPortalContainer<CalendarCellProps>\n hoverableComponent={CalendarDay}\n componentProps={updatedProps}\n hoverScale={1.35}\n />\n ) : <CalendarDay {...updatedProps} isHovering={false} />}\n </td>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventEmptyStateProps {\n appLink: Core.AppLink;\n imageUrl: string;\n heading?: string;\n}\n\nexport function SpecialEventEmptyState(props: SpecialEventEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>{props.heading || <Text phrase='heading' />}</EmptyState.Heading>\n {props.appLink &&\n <EmptyState.Info>\n <>\n <Text namespace={namespace} phrase='info' />\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </>\n </EmptyState.Info>\n }\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"date\":\"k2lLG\",\"first\":\"E18Bv\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './special-event-list.scss';\n\ninterface SpecialEventListProps {\n events: CalendarEvent[];\n presentationId: string;\n appLink: (id: string, slug?: string) => Core.AppLink;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n}\n\nexport function SpecialEventList(props: SpecialEventListProps): JSX.Element {\n const eventsInMonth: Record<string, CalendarEvent<CalendarEventContent>[]> = {};\n\n props.events.forEach(e => {\n const startDate = e.startDate;\n if (eventsInMonth[startDate]) {\n eventsInMonth[startDate].push(e);\n } else {\n eventsInMonth[startDate] = [e];\n }\n });\n\n const keys = Object.keys(eventsInMonth);\n keys.sort((a, b) => DateHelper.isBefore(a, b) ? -1 : 0);\n\n return (\n <div className='py-1'>\n {keys.map((k, idx) => {\n let prevTime = '';\n let currentTime = '';\n return (\n <div key={k}>\n <div className={`h4 mt-4 ${styles.date} ${idx === 0 ? styles.first : ''}`}>{SpecialEventHelper.getOrdinalDate(k)}</div>\n {eventsInMonth[k].map(e => {\n prevTime = currentTime;\n currentTime = props.getStartTime?.(e.content);\n\n return (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={(id, name) => {\n return props.appLink(id, TextHelper.slugify(name));\n }}\n event={e}\n presentationId={props.presentationId}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={() => props.getActionLabel(e.content)}\n getStartTime={props.getStartTime && prevTime !== currentTime\n ? props.getStartTime\n : null\n }\n />\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"sTIcQ\",\"thead\":\"ekxZd\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { CalendarCell } from 'libs/shared/apps/calendar/components/calendar-cell/CalendarCell';\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport { SpecialEventEmptyState } from '../empty-state/SpecialEventEmptyState';\nimport { SpecialEventList } from '../special-event-list/SpecialEventList';\n\nimport styles from './calendar-body.scss';\n\nCalendarBody.defaultProps = {\n theme: {\n border: 'border-light-blue',\n background: 'bg-light-blue'\n }\n};\n\ninterface CalendarBodyProps {\n weekDays: PatchedDate[][];\n weekDaysHeader: string[];\n events?: CalendarEvent[];\n monthQuery: MonthQuery;\n viewingMonth: Date;\n eventsLoaded: boolean;\n presentationId: string;\n appLinks: CalendarAppLinks;\n imageUrls: CalendarImageUrls;\n viewMode?: string;\n theme?: CalendarTheme;\n emptyStateHeading?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getCoverUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nexport function CalendarBody(props: CalendarBodyProps): JSX.Element {\n const { appLinks, imageUrls } = props;\n\n const breakpoints = useBreakpoints();\n\n const eventsInMonth = SpecialEventHelper.getEventsInMonth(props.events || [], props.viewingMonth);\n\n const [ hasInitialized, setHasInitialized ] = React.useState(false);\n const [ hoveredEvent, setHoveredEvent ] = React.useState<CalendarEvent<CalendarEventContent>>(null);\n\n if (props.eventsLoaded && !eventsInMonth?.length) {\n return (\n <SpecialEventEmptyState\n imageUrl={imageUrls.emptyState}\n appLink={appLinks.emptyStateRedirect?.()}\n heading={props.emptyStateHeading}\n />\n );\n }\n\n if (props.viewMode === 'list' || breakpoints.xs || breakpoints.sm || breakpoints.md) {\n if (!props.eventsLoaded) {\n return (\n <div className='d-flex justify-content-center align-items-center mb-4'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return (\n <SpecialEventList\n events={eventsInMonth}\n presentationId={props.presentationId}\n appLink={props.appLinks.event}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={props.getActionLabel}\n getStartTime={props.getStartTime}\n />\n );\n }\n\n return (\n <table className='user-select-none w-100 mt-3 overflow-hidden rounded-top-lg'>\n <thead className={`border ${props.theme.border} ${styles.thead}`}>\n <tr className={`fw-semibold ${props.theme.background} ${styles.header}`}>\n {props.weekDaysHeader.map(w => <th key={w} className='px-2 h4'>{w}</th>)}\n </tr>\n </thead>\n\n <tbody>\n {props.weekDays.map(w => (\n <tr key={w[0].toString()}>\n {w.map(d => {\n return (\n <CalendarCell\n key={d.toString()}\n date={d}\n notCurrentMonth={!!d.notCurrentMonth}\n events={props.events}\n monthQuery={props.monthQuery}\n hasInitialized={hasInitialized}\n setHasInitialized={setHasInitialized}\n presentationId={props.presentationId}\n hoveredEvent={hoveredEvent}\n theme={props.theme}\n setHoveredEvent={setHoveredEvent}\n getEventsListAppLink={() => props.appLinks.eventList(props.monthQuery, d, props.presentationId)}\n getTopicAppLink={(eventId, name) => props.appLinks.event(eventId, TextHelper.slugify(name))}\n getIconUrl={props.getIconUrl}\n getBackgroundColor={props.getBackgroundColor}\n getCoverUrl={props.getCoverUrl}\n getHardCodedEvent={props.getHardCodedEvent}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}","/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean }\nexport type WeeksTable = PatchedDate[][]\nexport type DatePositionMap = Record<string, {row: number, col: number}>\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nfunction getFirstDateInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastDateInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstDateInCalendar(monthDate), getLastDateInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}","// extracted by mini-css-extract-plugin\nexport default {\"chevron\":\"U_GAM\",\"left\":\"t_wDz\",\"right\":\"KgpGw\",\"viewModeContainer\":\"csNfk\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, CalendarDisplayModeDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarViewMode } from 'libs/shared/apps/calendar/interfaces/CalendarViewMode';\nimport { canNavToOtherMonths } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-nav.scss';\n\nconst namespace = 'specialEventCalendar.calendarNav';\n\ninterface CalendarNavProps extends React.PropsWithChildren {\n monthDate: Date;\n appLinks: CalendarAppLinks;\n viewMode?: CalendarViewMode;\n queryParams?: HashObject;\n setViewingMonthDate: (date?: Date) => void;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\ninterface ViewModeSwitcherProps {\n viewMode: CalendarViewMode;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\nfunction ViewModeSwitcher(props: ViewModeSwitcherProps): JSX.Element {\n return (\n <div className={`${styles.viewModeContainer} d-none d-lg-block`}>\n <IconButton\n svgName={cvSvgLibrary.Calendar}\n className={`${props.viewMode === 'calendar' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-start rounded-end-0 border-end-0 px-3 h-100`}\n onClick={() => props.setViewMode('calendar')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.Calendar,\n location: LocationContext.CalendarNav\n }}\n />\n <IconButton\n svgName={cvSvgLibrary.TableOfContents}\n className={`${props.viewMode === 'list' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-end rounded-start-0 border-start-0 px-3 h-100`}\n onClick={() => props.setViewMode('list')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.List,\n location: LocationContext.CalendarNav\n }}\n />\n </div>\n );\n}\n\ninterface NavigateButtonProps {\n action: 'next' | 'previous';\n onClick: () => void;\n}\n\nfunction NavigateButton(props: NavigateButtonProps): JSX.Element {\n const arrowSvg = props.action === 'previous' ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n const className = props.action === 'previous' ? styles.left : styles.right;\n\n return (\n <DivButton\n className={`${styles.chevron} ${className} border border-dark rounded-circle bg-white d-flex align-items-center justify-content-center`}\n onClick={props.onClick}\n >\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.svg}`}\n />\n </DivButton>\n );\n}\n\nconst CUR_DATE = new Date();\n\nexport function CalendarNav(props: CalendarNavProps): JSX.Element {\n const { appLinks } = props;\n\n const breakpoints = useBreakpoints();\n \n function getAppLink(monthDate?: Date): Core.AppLink {\n const month = DateHelper.format(monthDate, 'MMMM').toLocaleLowerCase();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n const params: HashObject = {};\n\n if (monthDate) {\n const currentYear = new Date().getFullYear();\n const year = monthDate.getFullYear();\n \n if (currentYear !== year)\n params.year = year;\n }\n\n if (props.queryParams?.classification)\n params.classification = props.queryParams.classification;\n\n if (props.queryParams?.yearGroup)\n params.yearGroup = props.queryParams.yearGroup;\n\n appLink.params = params;\n\n return appLink;\n }\n\n function onClickNext () {\n const nextMonth = DateHelper.add(props.monthDate, 1, 'month');\n props.setViewingMonthDate(nextMonth);\n }\n\n function onClickPrevious() {\n const prevMonth = DateHelper.subtract(props.monthDate, 1, 'month');\n props.setViewingMonthDate(prevMonth);\n }\n\n function onClickToday() {\n if (DateHelper.format(CUR_DATE, 'M YY') === DateHelper.format(props.monthDate, 'M YY')) return;\n \n props.setViewingMonthDate();\n }\n \n const { showPrev, showNext } = canNavToOtherMonths(props.monthDate);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarNav\n };\n\n function formatAnalyticDataDate(date: Date) {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n return (\n <div className='d-flex flex-wrap gap-3 justify-content-end align-items-center'>\n <h1 className='mb-0 h2 me-auto'>{DateHelper.format(props.monthDate, breakpoints.xs ? 'MMM YYYY' : 'MMMM YYYY')}</h1>\n\n {props.children}\n\n {props.setViewMode && (\n <ViewModeSwitcher viewMode={props.viewMode} setViewMode={props.setViewMode} />\n )}\n <div className='d-flex gap-3'>\n {showPrev && (\n <AppLink\n appLink={getAppLink(DateHelper.startOf(DateHelper.subtract(props.monthDate, 1, 'month'), 'month'))}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'previous', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n >\n <NavigateButton action='previous' onClick={onClickPrevious}/>\n </AppLink>\n )}\n <AppLink\n appLink={getAppLink()}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'today', date: formatAnalyticDataDate(DateHelper.startOf(CUR_DATE, 'month')) }}\n >\n <DivButton className={`${styles.todayWrapper} btn btn-outline-dark fw-semibold`} onClick={onClickToday}>\n {LanguageService.getPhrase(namespace, 'today')}\n </DivButton>\n </AppLink>\n {showNext && (\n <AppLink\n appLink={getAppLink(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month'))}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'next', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n >\n <NavigateButton action='next' onClick={onClickNext}/>\n </AppLink>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsErrorState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventErrorStateProps {\n imageUrl: string;\n appLink: Core.AppLink;\n}\n\nexport function SpecialEventErrorState(props: SpecialEventErrorStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n <br/>\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\n\nimport { buildWeeksTable, DatePositionMap, initWeekDays, PatchedDate, WeeksTable } from '../utils/CalendarHelper';\n\ntype Cache = Record<string, {\n datePositionMap: DatePositionMap,\n weeksTable: WeeksTable\n }>\n\nconst TODAY_DATE = new Date();\n\nexport function useCalendarWeeksTable(date: Date = TODAY_DATE, appLinks: CalendarAppLinks, startAtMon: boolean = true) {\n const weekDaysHeader = initWeekDays(startAtMon);\n\n const cacheRef = React.useRef<Cache>({});\n\n const [ weekDays, setWeekDays ] = React.useState<PatchedDate[][]>([]);\n const monthDateString = DateHelper.format(date, 'YYYY-MM');\n React.useEffect(() => {\n const cached = cacheRef.current[monthDateString];\n if (!cached) {\n const { weeksTable, datePositionMap } = buildWeeksTable(date, startAtMon);\n \n cacheRef.current[monthDateString] = { weeksTable, datePositionMap };\n\n setWeekDays(weeksTable);\n } else {\n setWeekDays(cached.weeksTable);\n }\n }, [DateHelper.format(date, 'YYYY-MM')]);\n\n function setViewingMonthDate(nextMonthDate?: Date) {\n if (!nextMonthDate) {\n Core.AppLinkHelper.trigger(appLinks.calendar());\n\n return;\n }\n\n if (monthDateString !== DateHelper.format(nextMonthDate, 'YYYY-MM')) {\n const month = DateHelper.format(nextMonthDate, 'MMMM').toLocaleLowerCase();\n\n const currentYear = new Date().getFullYear();\n const year = date.getFullYear();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n if (currentYear !== year)\n appLink.params = { year };\n\n Core.AppLinkHelper.trigger(appLink);\n }\n }\n\n const startDate = ArrayHelper.first(ArrayHelper.first(weekDays));\n const endDate = ArrayHelper.last(ArrayHelper.last(weekDays));\n\n return { weekDaysHeader, weekDays, monthDate: date, setMonthDate: setViewingMonthDate, startDate, endDate };\n}","import { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getCalendarImageUrls(countryCode?: CountryCode): CalendarImageUrls {\n switch (countryCode?.toLocaleLowerCase()) {\n case CountryCode.AU:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_AU,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.US:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_US,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.UK:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_UK,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n default:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n }\n}\n\nexport function getCalendarAppLinks(): CalendarAppLinks {\n return {\n calendar: () => ({ application: AppChannels.CALENDAR, action: Actions.Calendar.CALENDAR }),\n month: (month: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month]\n }),\n event: (id: string, slug: string) => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION,\n args: [ id, slug ]\n }),\n eventList: (monthQuery: MonthQuery, date: PatchedDate, presentationId: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.SPECIAL_EVENT_LIST,\n params: {\n ...monthQuery,\n date: date.toString(),\n presentationId: presentationId\n }\n }),\n emptyStateRedirect: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n })\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarBody } from 'libs/shared/apps/calendar/components/calendar-body/CalendarBody';\nimport { CalendarNav } from 'libs/shared/apps/calendar/components/calendar-nav/CalendarNav';\nimport { SpecialEventErrorState } from 'libs/shared/apps/calendar/components/error-state/SpecialEventErrorState';\nimport { useCalendarEventsData } from 'libs/shared/apps/calendar/hooks/useCalendarEventsData';\nimport { useCalendarWeeksTable } from 'libs/shared/apps/calendar/hooks/useCalendarWeeksTable';\nimport { CalendarQueryParams } from 'libs/shared/apps/calendar/interfaces/CalendarQueryParams';\nimport { getIsValidMonth, parseMonthString } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { DiscoverHeader } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, CurrentUser, DashboardUserType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { REGIONAL_CALENDAR_INDEXABILITY } from 'shared/utils/LiteRegionHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { getCalendarAppLinks, getCalendarImageUrls } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\nimport { getDiscoverHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'specialEventCalendar.calendarView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface CalendarViewProps {\n month?: string\n presentationSlug?: string;\n}\n\nexport function CalendarView(props: CalendarViewProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { activePresentation } = usePresentation({ redirectOnError: true });\n const { showCalendar, isLoading } = useShowCalendar();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const isValidMonth = getIsValidMonth(props.month);\n\n React.useEffect(() => {\n if (!isLoading && !showCalendar)\n Core.AppLinkHelper.trigger(getDiscoverHeaderAppLinks().forYou, { replace: true });\n }, [ showCalendar, isLoading ]);\n\n const viewingMonth = parseMonthString(props.month);\n \n const {\n monthDate,\n setMonthDate,\n weekDays,\n weekDaysHeader,\n startDate, endDate\n } = useCalendarWeeksTable(viewingMonth, getCalendarAppLinks());\n\n const { events, loaded } = useCalendarEventsData(viewingMonth, activePresentation.id);\n\n const currentMonthYear = DateHelper.format(monthDate, 'MMMM YYYY');\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: currentMonthYear,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink<keyof CalendarQueryParams>({ allowedParams: ['year']}),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n activePresentation?.learningLevel,\n getCalendarAppLinks().calendar,\n REGIONAL_CALENDAR_INDEXABILITY\n )\n }));\n\n if (props.month !== null && !isValidMonth) {\n return (\n <SpecialEventErrorState\n imageUrl={getCalendarImageUrls().errorState}\n appLink={getCalendarAppLinks().calendar()}\n />\n );\n }\n\n function getIconUrl(classification: Classification, hardCodedEvent?: HashObject): string {\n return hardCodedEvent\n ? ImageHelper.createUrl((hardCodedEvent.iconUrl), { size: ImageSize.Medium })\n : ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n\n function getCoverUrl(classification: Classification): string {\n return ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n }\n\n function getActionLabel(): string {\n return !breakpoints.xs ? getPhrase('buttonLabel') : getPhrase('mobileButtonLabel');\n }\n\n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n if (isLoading || !activePresentation?.id || !currentUser.data.countryCode)\n return <></>;\n\n return (\n <div className='bg-white px-3'>\n <DiscoverHeader\n type={DashboardUserType.Staff}\n appLinks={getDiscoverHeaderAppLinks()}\n showCalendar={showCalendar}\n active='calendar'\n />\n <CalendarNav monthDate={monthDate} setViewingMonthDate={setMonthDate} appLinks={getCalendarAppLinks()} />\n <CalendarBody\n weekDays={weekDays}\n weekDaysHeader={weekDaysHeader}\n events={events}\n monthQuery={{ from: startDate?.toString(), to: endDate?.toString() }}\n viewingMonth={viewingMonth}\n eventsLoaded={loaded}\n presentationId={activePresentation.id}\n appLinks={getCalendarAppLinks()}\n imageUrls={getCalendarImageUrls(currentUser.data.countryCode)}\n getIconUrl={(classification: Classification) => getIconUrl(classification, getHardCodedEvent(classification))}\n getCoverUrl={getCoverUrl}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getBannerUrl={(classification: Classification) => classification.banner?.url}\n getActionLabel={getActionLabel}\n getHardCodedEvent={getHardCodedEvent}\n />\n </div>\n );\n}","import { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { CalendarRequests } from '../flight-request/CalendarRequests';\nimport { getCalendarRange } from '../utils/CalendarHelper';\n\nexport function useCalendarEventsData(viewMonth: Date, presentationId: string) {\n const pid = presentationId;\n const [ startDate, endDate ] = getCalendarRange(viewMonth);\n\n const nextMonth = DateHelper.add(viewMonth, 1, 'month');\n const [ nextStartDate, nextEndDate ] = getCalendarRange(nextMonth);\n\n const prevMonth = DateHelper.subtract(viewMonth, 1, 'month');\n const [ prevStartDate, prevEndDate ] = getCalendarRange(prevMonth);\n\n const events = Flight.useBasicFetch<CalendarEvent[]>((startDate && endDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(startDate, 'YYYY-MM-DD'), DateHelper.format(endDate, 'YYYY-MM-DD'), pid));\n const nextEvents = Flight.useBasicFetch<CalendarEvent[]>((nextStartDate && nextEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(nextStartDate, 'YYYY-MM-DD'), DateHelper.format(nextEndDate, 'YYYY-MM-DD'), pid));\n const prevEvents = Flight.useBasicFetch<CalendarEvent[]>((prevStartDate && prevEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(prevStartDate, 'YYYY-MM-DD'), DateHelper.format(prevEndDate, 'YYYY-MM-DD'), pid));\n\n const uniqueEventList = ArrayHelper.uniq(\n [ ...prevEvents.data || [], ...events.data || [], ...nextEvents.data || [] ],\n e => e.specialEventPolicyId\n );\n\n return { events: uniqueEventList, loaded: events.hasCompleted };\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { RatingFilterHelper } from 'libs/shared/apps/search/utils/RatingFilterHelper';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, Company, Playlist, Rating, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\n\nexport function getDiscoverWidgetAppLinks(\n params: HashObject\n): WidgetAppLinks {\n return {\n classification: (classification?: Classification) => {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION,\n args: [ classification?.id, TextHelper.slugify(classification?.name) ],\n params: params || {}\n };\n },\n\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget\n })\n ),\n\n series: SeriesAppLinkHelper.getSeriesAppLink,\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n }),\n \n latestReleases: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n }),\n\n allTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }),\n\n classificationLatestReleases: (classification: Classification) => {\n if (classification.id === CLASSIFICATION_LATEST_RELEASES)\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n };\n\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CLASSIFICATION_UPDATE,\n args: [ classification.id, TextHelper.slugify(classification.name) ]\n };\n },\n\n widgetVideoList: (widgetId: string, widgetName: string) => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.DASHBOARD,\n args: [ widgetId, TextHelper.slugify(widgetName) ]\n }),\n\n watchHistory: () => ({\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }),\n\n rating: (rating: Rating, ratings: Rating[]) => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n moviesAndTv: true,\n rating: RatingFilterHelper.getFrontendParamValue([ ArrayHelper.first(ratings), rating ])\n }\n }),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ company.id, TextHelper.slugify(company.name) ]\n }),\n\n discover: () => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }),\n\n calendar: () => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }),\n\n calendarMonth: (month: string, year?: string) => {\n const appLink: Core.AppLink = {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month.toLowerCase()]\n };\n\n if (year)\n appLink.params = { year };\n\n return appLink;\n },\n\n onboardingStep: (step: OnboardingScreenId) => {\n const appLinks = getOnboardingAppLinks();\n return appLinks[step];\n },\n\n onboardingAppLinks: () => {\n return getOnboardingAppLinks();\n },\n\n classroomGuide: VideoAppLinkHelper.getClassroomGuideAppLink,\n interactiveGuidance: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n resourceGuidance: VideoAppLinkHelper.getResourceGuidanceAppLink\n };\n}\n\nexport function getDiscoverHeaderAppLinks(): DiscoverHeaderAppLinks {\n return {\n forYou: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n },\n whatsNew: {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n },\n calendar: {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }\n };\n}","import React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["BaseLinkifyOptions","className","defaultProtocol","LinkifyHelper","linkifyText","text","options","ops","getPhrase","LanguageService","CalendarCellDate","props","isToday","DateHelper","date","dateClassName","notCurrentMonth","isHovering","hasEvent","delay","ref","CalendarEvents","sliderStep","setSliderStep","multiEvents","eventsOnDay","length","displayedEvent","find","e","idx","multiDayEvent","endDate","backgroundColor","getBackgroundColor","content","hardCodedEvent","getHardCodedEvent","iconUrl","getIconUrl","coverUrl","getCoverUrl","isComingSoon","status","ClassificationStatus","hasInitialized","setClassName","randomNumber","Math","floor","random","window","setTimeout","setHasInitialized","setHoveredEvent","hoveredEvent","specialEventId","analyticsData","presentationId","eventCount","eventId","map","join","topicId","id","eventStatus","getAnalyticsData","analyticsOptions","actionType","entity","location","formatAnalyticDataDate","getBgImageClassName","isMultiEventDate","onClick","AnalyticsHelper","AppLink","appLink","getEventsListAppLink","getTopicAppLink","name","getAppLink","ComingSoonTag","onlyIcon","hideDay","style","LazyImage","src","alt","backgroundImage","SpecialEventHelper","startDate","title","DivButton","stopPropagation","preventDefault","s","action","SvgContainer","svgName","SliderDots","sliderLength","size","onSliderDotClick","i","CalendarDay","namespace","Tooltip","spanHackClassName","spanHack","SpecialEventListItem","event","bannerUrl","getBannerUrl","startTime","getStartTime","actionLabel","getActionLabel","inPopup","Date","BaseImage","data","description","ActionButton","dangerouslySetInnerHTML","__html","CalendarRequests","calendarEvents","from","to","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","objectType","formatData","events","getDisplayDate","slice","getEventsInMonth","month","filter","getOrdinalDate","DiscoverHeader","type","hasStudentExperience","Text","phrase","tabs","appLinks","forYou","active","whatsNew","showCalendar","push","calendar","PillTabSelector","TabContents","tab","count","borderRadius","listClassName","index","onSelect","onSelectTab","defaultProps","CalendarCell","wrapperClassname","theme","border","getIsWeekend","updatedProps","HoverToPortalContainer","hoverableComponent","componentProps","hoverScale","SpecialEventEmptyState","value","EmptyState","imageUrl","altText","heading","SpecialEventList","eventsInMonth","forEach","keys","Object","sort","a","b","k","prevTime","currentTime","TextHelper","CalendarBody","imageUrls","breakpoints","useBreakpoints","viewingMonth","eventsLoaded","emptyState","emptyStateRedirect","emptyStateHeading","viewMode","xs","sm","md","Spinner","as","animation","role","background","weekDaysHeader","w","weekDays","toString","d","monthQuery","eventList","CALENDAR_START_DATE","NEXT_MONTH_LIMIT","getPreviousMonthOverlappingDays","startAtMon","firstDay","firstWeekDay","prevMonthDays","prevMonthDaysCount","originalDay","preDay","assign","reverse","getNextMonthOverlappingDays","lastDay","lastWeekDay","nextMonthDays","nextMonthDaysCount","nextDay","getFirstDateInCalendar","monthDate","firstDayOfMonth","ArrayHelper","getLastDateInCalendar","lastDayOfMonth","getCalendarRange","capitalizeMonthString","monthStr","charAt","toUpperCase","CUR_DATE","ViewModeSwitcher","IconButton","setViewMode","descriptor","Calendar","NavigateButton","arrowSvg","S","CalendarNav","toLocaleLowerCase","currentYear","getFullYear","year","queryParams","classification","yearGroup","monthDiff","showPrev","showNext","children","prevMonth","setViewingMonthDate","nextMonth","SpecialEventErrorState","TODAY_DATE","useCalendarWeeksTable","weekdays","initWeekDays","cacheRef","setWeekDays","monthDateString","cached","current","weeksTable","datePositionMap","monthDays","concat","numberOfDays","daysArray","day","getDaysOfMonth","week","j","colId","row","col","rowId","buildWeeksTable","setMonthDate","nextMonthDate","getCalendarImageUrls","countryCode","CountryCode","C","ImageUrls","errorState","getCalendarAppLinks","application","args","slug","CalendarView","activePresentation","usePresentation","redirectOnError","useShowCalendar","isLoading","currentUser","UserRequests","isValidMonth","capitalized","getIsValidMonth","replace","parseMonthString","viewMonth","pid","nextStartDate","nextEndDate","prevStartDate","prevEndDate","nextEvents","prevEvents","specialEventPolicyId","loaded","hasCompleted","useCalendarEventsData","currentMonthYear","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowedParams","allowIndexing","hrefLang","learningLevel","HardCoded","ImageHelper","icon","cover","metadata","banner","CLASSIFICATION_LATEST_RELEASES","getDiscoverWidgetAppLinks","videoType","video","opts","context","series","subText","playlist","latestReleases","allTopics","classificationLatestReleases","widgetVideoList","widgetId","widgetName","watchHistory","rating","ratings","moviesAndTv","company","discover","calendarMonth","toLowerCase","onboardingStep","step","onboardingAppLinks","classroomGuide","interactiveGuidance","resourceGuidance","getDiscoverHeaderAppLinks","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","allowedLearningLevels","contentRegion","learningLevelCantAccess","l","noSetting","setShowCalendar","setIsLoading"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/1437-f76bfeecb0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/LinkifyHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/calendar-events.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/calendar-day.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/special-event-list-item.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/SpecialEventListItem.tsx","file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","file:///app/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///app/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/ClassificationStatus.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/calendar-cell.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/CalendarCell.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/empty-state/SpecialEventEmptyState.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/special-event-list.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/SpecialEventList.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/calendar-body.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/CalendarBody.tsx","file:///app/packages/libs/shared/src/apps/calendar/utils/CalendarHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/calendar-nav.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/CalendarNav.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/error-state/SpecialEventErrorState.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarWeeksTable.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarViewUtils.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarView.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarEventsData.ts","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts","file:///app/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport linkifyStr from 'linkifyjs/string';\nimport * as _ from 'underscore';\n\nconst BaseLinkifyOptions = {\n className: 'info-link',\n defaultProtocol: 'https'\n};\n\nexport const LinkifyHelper = {\n /**\n * The underlying linkifyStr interface escapes text within the input string\n */\n linkifyText(text: string, options?: ObjectHash): string {\n if (!text) return;\n const ops = options ? _.extend({}, BaseLinkifyOptions, options) : BaseLinkifyOptions;\n return linkifyStr(text, ops);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"cellDate\":\"qcD_n\",\"label\":\"sp6Gw\",\"isHovering\":\"_6xWx\",\"numberWrapper\":\"KZfe0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isToday(props.date);\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.hasEvent)\n dateClassName += ' text-white';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hardcodedCover\":\"ByD0q\",\"tag\":\"ZHW8B\",\"date\":\"AKOWh\",\"backgroundImage\":\"RDtch\",\"eventCard\":\"YtMiS\",\"wrapper\":\"ylxwf\",\"left\":\"iTqxB\",\"right\":\"bUUXX\",\"noAnimation\":\"oZacR\",\"cover\":\"kpH3Y\",\"tagWrap\":\"KvlZ8\",\"appear\":\"xlSdc\",\"displayDate\":\"rkBJb\",\"title\":\"c4_Kj\",\"titleText\":\"nRMvg\",\"circle\":\"wu4hg\",\"active\":\"tbdFj\",\"arrow\":\"omZKz\",\"bottomBar\":\"hxKUP\",\"bottomPlaceholder\":\"dzeZ7\",\"multiEventFilter\":\"dSxjc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-events.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = props.eventsOnDay.find((e, idx) => idx === sliderStep);\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n \n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content.id, displayedEvent.name);\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n className='d-flex justify-content-end'\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n hasEvent\n />\n )}\n\n <div className={`postion-relative ${styles.wrapper}`}>\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className}`}\n >\n {iconUrl && <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />}\n\n {coverUrl && !iconUrl && (\n <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n )}\n\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <div className={`${styles.titleText} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</div>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronLeft}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronRight}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </div>\n </AppLink>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"nsEjO\",\"multiEventCell\":\"vvFYj\",\"fadeIn\":\"BX0cX\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n />\n )}\n {isMultiEventDate && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && <CalendarEvents {...props} isMultiEventDate={isMultiEventDate} />}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"SgHYb\",\"banner\":\"PLw1p\",\"pill\":\"UNBr0\",\"logo\":\"xv_tc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './special-event-list-item.scss';\n\ninterface SpecialEventListItemProps {\n getAppLink: (id: string, name: string) => Core.AppLink;\n event: CalendarEvent<CalendarEventContent>;\n onClick?: () => void;\n inPopup?: boolean;\n presentationId: string;\n headingClassName?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: () => string;\n getStartTime?: (content: CalendarEventContent) => string;\n}\n\nexport function SpecialEventListItem(props: SpecialEventListItemProps): JSX.Element {\n const appLink = props.getAppLink(props.event.content.id, props.event.name);\n\n const backgroundColor = props.getBackgroundColor?.(props.event.content);\n const iconUrl = props.getIconUrl?.(props.event.content);\n const bannerUrl = props.getBannerUrl?.(props.event.content);\n const multiDayEvent = !!props.event.endDate;\n const isComingSoon = props.event.content.status === ClassificationStatus.ComingSoon;\n const startTime = props.getStartTime?.(props.event.content);\n const actionLabel = props.getActionLabel?.();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: props.inPopup ? LocationContext.CalendarPopup : LocationContext.CalendarDay\n };\n const analyticsData = {\n topicId: props.event.content.id,\n eventId: props.event.specialEventId,\n presentationId: props.presentationId,\n date: DateHelper.format(new Date(props.event.startDate), 'YYYY-MM-DD'),\n status: props.event.content.status\n };\n\n return (\n <div>\n {startTime && (\n <h6>{startTime}</h6>\n )}\n\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={!isComingSoon && appLink}\n className={`${!isComingSoon ? 'cursor-pointer' : ''} text-decoration-none`}\n onClick={props.onClick}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div\n className={`banner rounded-3 position-relative ${styles.banner}`}\n style={{ backgroundColor, backgroundImage: `url('${bannerUrl}')` }}\n >\n <div className={`d-flex justify-content-between align-items-center w-100 h-100 px-3`}>\n <div className='d-flex align-items-center'>\n {iconUrl && (\n <div className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden me-2`}>\n <BaseImage data={iconUrl} />\n </div>\n )}\n <div className='text-white'>\n {isComingSoon && <ComingSoonTag className={`pe-2 fw-semibold mb-1 rounded-pill justify-content-start ${styles.pill}`}/>}\n \n {multiDayEvent && (\n <div className='mb-1'>{SpecialEventHelper.getDisplayDate(props.event.startDate, props.event.endDate)}</div>\n )}\n <h2 className={`h4 text-white text-shadow ${props.event.description ? 'clamp-2' : 'clamp-1'}`} title={props.event.name}>{props.event.name}</h2>\n \n </div>\n </div>\n <div className='d-none d-sm-block flex-shrink-0'>\n {!isComingSoon && (\n <ActionButton className='btn btn-outline-dark fw-semibold'>\n {actionLabel}\n </ActionButton>\n )}\n </div>\n </div>\n </div>\n </AppLink>\n <div className='mt-2 mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.event.description || props.event.content.description) }}/>\n </div>\n </div>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n \n // same month event\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"WRLhh\",\"notCurrentMonth\":\"L0rbf\",\"weekend\":\"mF0ka\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-cell.scss';\n\nfunction getIsWeekend(date: Date): boolean {\n return DateHelper.getWeekday(date) === 0 || DateHelper.getWeekday(date) === 6;\n}\n\nexport function CalendarCell(props: CalendarCellProps): JSX.Element {\n const { date, notCurrentMonth } = props;\n const [ sliderStep, setSliderStep ] = React.useState<number>(0);\n\n let wrapperClassname = `position-relative border ${props.theme.border} ${styles.wrapper}`;\n if (getIsWeekend(date)) wrapperClassname += ` ${styles.weekend}`;\n if (notCurrentMonth) wrapperClassname += ` ${styles.notCurrentMonth}`;\n\n const eventsOnDay = props.events?.filter(e => DateHelper.isSame(props.date, e.startDate)) || [];\n const updatedProps = { ...props, eventsOnDay, sliderStep, setSliderStep };\n\n return (\n <td className={wrapperClassname}>\n {eventsOnDay?.length > 0 ? (\n <HoverToPortalContainer<CalendarCellProps>\n hoverableComponent={CalendarDay}\n componentProps={updatedProps}\n hoverScale={1.35}\n />\n ) : <CalendarDay {...updatedProps} isHovering={false} />}\n </td>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventEmptyStateProps {\n appLink: Core.AppLink;\n imageUrl: string;\n heading?: string;\n}\n\nexport function SpecialEventEmptyState(props: SpecialEventEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>{props.heading || <Text phrase='heading' />}</EmptyState.Heading>\n {props.appLink &&\n <EmptyState.Info>\n <>\n <Text namespace={namespace} phrase='info' />\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </>\n </EmptyState.Info>\n }\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"date\":\"k2lLG\",\"first\":\"E18Bv\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './special-event-list.scss';\n\ninterface SpecialEventListProps {\n events: CalendarEvent[];\n presentationId: string;\n appLink: (id: string, slug?: string) => Core.AppLink;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n}\n\nexport function SpecialEventList(props: SpecialEventListProps): JSX.Element {\n const eventsInMonth: Record<string, CalendarEvent<CalendarEventContent>[]> = {};\n\n props.events.forEach(e => {\n const startDate = e.startDate;\n if (eventsInMonth[startDate]) {\n eventsInMonth[startDate].push(e);\n } else {\n eventsInMonth[startDate] = [e];\n }\n });\n\n const keys = Object.keys(eventsInMonth);\n keys.sort((a, b) => DateHelper.isBefore(a, b) ? -1 : 0);\n\n return (\n <div className='py-1'>\n {keys.map((k, idx) => {\n let prevTime = '';\n let currentTime = '';\n return (\n <div key={k}>\n <div className={`h4 mt-4 ${styles.date} ${idx === 0 ? styles.first : ''}`}>{SpecialEventHelper.getOrdinalDate(k)}</div>\n {eventsInMonth[k].map(e => {\n prevTime = currentTime;\n currentTime = props.getStartTime?.(e.content);\n\n return (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={(id, name) => {\n return props.appLink(id, TextHelper.slugify(name));\n }}\n event={e}\n presentationId={props.presentationId}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={() => props.getActionLabel(e.content)}\n getStartTime={props.getStartTime && prevTime !== currentTime\n ? props.getStartTime\n : null\n }\n />\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"sTIcQ\",\"thead\":\"ekxZd\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { CalendarCell } from 'libs/shared/apps/calendar/components/calendar-cell/CalendarCell';\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport { SpecialEventEmptyState } from '../empty-state/SpecialEventEmptyState';\nimport { SpecialEventList } from '../special-event-list/SpecialEventList';\n\nimport styles from './calendar-body.scss';\n\nCalendarBody.defaultProps = {\n theme: {\n border: 'border-light-blue',\n background: 'bg-light-blue'\n }\n};\n\ninterface CalendarBodyProps {\n weekDays: PatchedDate[][];\n weekDaysHeader: string[];\n events?: CalendarEvent[];\n monthQuery: MonthQuery;\n viewingMonth: Date;\n eventsLoaded: boolean;\n presentationId: string;\n appLinks: CalendarAppLinks;\n imageUrls: CalendarImageUrls;\n viewMode?: string;\n theme?: CalendarTheme;\n emptyStateHeading?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getCoverUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nexport function CalendarBody(props: CalendarBodyProps): JSX.Element {\n const { appLinks, imageUrls } = props;\n\n const breakpoints = useBreakpoints();\n\n const eventsInMonth = SpecialEventHelper.getEventsInMonth(props.events || [], props.viewingMonth);\n\n const [ hasInitialized, setHasInitialized ] = React.useState(false);\n const [ hoveredEvent, setHoveredEvent ] = React.useState<CalendarEvent<CalendarEventContent>>(null);\n\n if (props.eventsLoaded && !eventsInMonth?.length) {\n return (\n <SpecialEventEmptyState\n imageUrl={imageUrls.emptyState}\n appLink={appLinks.emptyStateRedirect?.()}\n heading={props.emptyStateHeading}\n />\n );\n }\n\n if (props.viewMode === 'list' || breakpoints.xs || breakpoints.sm || breakpoints.md) {\n if (!props.eventsLoaded) {\n return (\n <div className='d-flex justify-content-center align-items-center mb-4'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return (\n <SpecialEventList\n events={eventsInMonth}\n presentationId={props.presentationId}\n appLink={props.appLinks.event}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={props.getActionLabel}\n getStartTime={props.getStartTime}\n />\n );\n }\n\n return (\n <table className='user-select-none w-100 mt-3 overflow-hidden rounded-top-lg'>\n <thead className={`border ${props.theme.border} ${styles.thead}`}>\n <tr className={`fw-semibold ${props.theme.background} ${styles.header}`}>\n {props.weekDaysHeader.map(w => <th key={w} className='px-2 h4'>{w}</th>)}\n </tr>\n </thead>\n\n <tbody>\n {props.weekDays.map(w => (\n <tr key={w[0].toString()}>\n {w.map(d => {\n return (\n <CalendarCell\n key={d.toString()}\n date={d}\n notCurrentMonth={!!d.notCurrentMonth}\n events={props.events}\n monthQuery={props.monthQuery}\n hasInitialized={hasInitialized}\n setHasInitialized={setHasInitialized}\n presentationId={props.presentationId}\n hoveredEvent={hoveredEvent}\n theme={props.theme}\n setHoveredEvent={setHoveredEvent}\n getEventsListAppLink={() => props.appLinks.eventList(props.monthQuery, d, props.presentationId)}\n getTopicAppLink={(eventId, name) => props.appLinks.event(eventId, TextHelper.slugify(name))}\n getIconUrl={props.getIconUrl}\n getBackgroundColor={props.getBackgroundColor}\n getCoverUrl={props.getCoverUrl}\n getHardCodedEvent={props.getHardCodedEvent}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}","/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean }\nexport type WeeksTable = PatchedDate[][]\nexport type DatePositionMap = Record<string, {row: number, col: number}>\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nfunction getFirstDateInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastDateInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstDateInCalendar(monthDate), getLastDateInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}","// extracted by mini-css-extract-plugin\nexport default {\"chevron\":\"U_GAM\",\"left\":\"t_wDz\",\"right\":\"KgpGw\",\"viewModeContainer\":\"csNfk\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, CalendarDisplayModeDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarViewMode } from 'libs/shared/apps/calendar/interfaces/CalendarViewMode';\nimport { canNavToOtherMonths } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-nav.scss';\n\nconst namespace = 'specialEventCalendar.calendarNav';\n\ninterface CalendarNavProps extends React.PropsWithChildren {\n monthDate: Date;\n appLinks: CalendarAppLinks;\n viewMode?: CalendarViewMode;\n queryParams?: HashObject;\n setViewingMonthDate: (date?: Date) => void;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\ninterface ViewModeSwitcherProps {\n viewMode: CalendarViewMode;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\nfunction ViewModeSwitcher(props: ViewModeSwitcherProps): JSX.Element {\n return (\n <div className={`${styles.viewModeContainer} d-none d-lg-block`}>\n <IconButton\n svgName={cvSvgLibrary.Calendar}\n className={`${props.viewMode === 'calendar' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-start rounded-end-0 border-end-0 px-3 h-100`}\n onClick={() => props.setViewMode('calendar')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.Calendar,\n location: LocationContext.CalendarNav\n }}\n />\n <IconButton\n svgName={cvSvgLibrary.TableOfContents}\n className={`${props.viewMode === 'list' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-end rounded-start-0 border-start-0 px-3 h-100`}\n onClick={() => props.setViewMode('list')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.List,\n location: LocationContext.CalendarNav\n }}\n />\n </div>\n );\n}\n\ninterface NavigateButtonProps {\n action: 'next' | 'previous';\n onClick: () => void;\n}\n\nfunction NavigateButton(props: NavigateButtonProps): JSX.Element {\n const arrowSvg = props.action === 'previous' ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n const className = props.action === 'previous' ? styles.left : styles.right;\n\n return (\n <DivButton\n className={`${styles.chevron} ${className} border border-dark rounded-circle bg-white d-flex align-items-center justify-content-center`}\n onClick={props.onClick}\n >\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.svg}`}\n />\n </DivButton>\n );\n}\n\nconst CUR_DATE = new Date();\n\nexport function CalendarNav(props: CalendarNavProps): JSX.Element {\n const { appLinks } = props;\n\n const breakpoints = useBreakpoints();\n \n function getAppLink(monthDate?: Date): Core.AppLink {\n const month = DateHelper.format(monthDate, 'MMMM').toLocaleLowerCase();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n const params: HashObject = {};\n\n if (monthDate) {\n const currentYear = new Date().getFullYear();\n const year = monthDate.getFullYear();\n \n if (currentYear !== year)\n params.year = year;\n }\n\n if (props.queryParams?.classification)\n params.classification = props.queryParams.classification;\n\n if (props.queryParams?.yearGroup)\n params.yearGroup = props.queryParams.yearGroup;\n\n appLink.params = params;\n\n return appLink;\n }\n\n function onClickNext () {\n const nextMonth = DateHelper.add(props.monthDate, 1, 'month');\n props.setViewingMonthDate(nextMonth);\n }\n\n function onClickPrevious() {\n const prevMonth = DateHelper.subtract(props.monthDate, 1, 'month');\n props.setViewingMonthDate(prevMonth);\n }\n\n function onClickToday() {\n if (DateHelper.format(CUR_DATE, 'M YY') === DateHelper.format(props.monthDate, 'M YY')) return;\n \n props.setViewingMonthDate();\n }\n \n const { showPrev, showNext } = canNavToOtherMonths(props.monthDate);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarNav\n };\n\n function formatAnalyticDataDate(date: Date) {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n return (\n <div className='d-flex flex-wrap gap-3 justify-content-end align-items-center'>\n <h1 className='mb-0 h2 me-auto'>{DateHelper.format(props.monthDate, breakpoints.xs ? 'MMM YYYY' : 'MMMM YYYY')}</h1>\n\n {props.children}\n\n {props.setViewMode && (\n <ViewModeSwitcher viewMode={props.viewMode} setViewMode={props.setViewMode} />\n )}\n <div className='d-flex gap-3'>\n {showPrev && (\n <AppLink\n appLink={getAppLink(DateHelper.startOf(DateHelper.subtract(props.monthDate, 1, 'month'), 'month'))}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'previous', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n >\n <NavigateButton action='previous' onClick={onClickPrevious}/>\n </AppLink>\n )}\n <AppLink\n appLink={getAppLink()}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'today', date: formatAnalyticDataDate(DateHelper.startOf(CUR_DATE, 'month')) }}\n >\n <DivButton className={`${styles.todayWrapper} btn btn-outline-dark fw-semibold`} onClick={onClickToday}>\n {LanguageService.getPhrase(namespace, 'today')}\n </DivButton>\n </AppLink>\n {showNext && (\n <AppLink\n appLink={getAppLink(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month'))}\n className='d-flex'\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'next', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n >\n <NavigateButton action='next' onClick={onClickNext}/>\n </AppLink>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsErrorState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventErrorStateProps {\n imageUrl: string;\n appLink: Core.AppLink;\n}\n\nexport function SpecialEventErrorState(props: SpecialEventErrorStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n <br/>\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\n\nimport { buildWeeksTable, DatePositionMap, initWeekDays, PatchedDate, WeeksTable } from '../utils/CalendarHelper';\n\ntype Cache = Record<string, {\n datePositionMap: DatePositionMap,\n weeksTable: WeeksTable\n }>\n\nconst TODAY_DATE = new Date();\n\nexport function useCalendarWeeksTable(date: Date = TODAY_DATE, appLinks: CalendarAppLinks, startAtMon: boolean = true) {\n const weekDaysHeader = initWeekDays(startAtMon);\n\n const cacheRef = React.useRef<Cache>({});\n\n const [ weekDays, setWeekDays ] = React.useState<PatchedDate[][]>([]);\n const monthDateString = DateHelper.format(date, 'YYYY-MM');\n React.useEffect(() => {\n const cached = cacheRef.current[monthDateString];\n if (!cached) {\n const { weeksTable, datePositionMap } = buildWeeksTable(date, startAtMon);\n \n cacheRef.current[monthDateString] = { weeksTable, datePositionMap };\n\n setWeekDays(weeksTable);\n } else {\n setWeekDays(cached.weeksTable);\n }\n }, [DateHelper.format(date, 'YYYY-MM')]);\n\n function setViewingMonthDate(nextMonthDate?: Date) {\n if (!nextMonthDate) {\n Core.AppLinkHelper.trigger(appLinks.calendar());\n\n return;\n }\n\n if (monthDateString !== DateHelper.format(nextMonthDate, 'YYYY-MM')) {\n const month = DateHelper.format(nextMonthDate, 'MMMM').toLocaleLowerCase();\n\n const currentYear = new Date().getFullYear();\n const year = date.getFullYear();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n if (currentYear !== year)\n appLink.params = { year };\n\n Core.AppLinkHelper.trigger(appLink);\n }\n }\n\n const startDate = ArrayHelper.first(ArrayHelper.first(weekDays));\n const endDate = ArrayHelper.last(ArrayHelper.last(weekDays));\n\n return { weekDaysHeader, weekDays, monthDate: date, setMonthDate: setViewingMonthDate, startDate, endDate };\n}","import { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getCalendarImageUrls(countryCode?: CountryCode): CalendarImageUrls {\n switch (countryCode?.toLocaleLowerCase()) {\n case CountryCode.AU:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_AU,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.US:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_US,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.UK:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_UK,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n default:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n }\n}\n\nexport function getCalendarAppLinks(): CalendarAppLinks {\n return {\n calendar: () => ({ application: AppChannels.CALENDAR, action: Actions.Calendar.CALENDAR }),\n month: (month: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month]\n }),\n event: (id: string, slug: string) => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION,\n args: [ id, slug ]\n }),\n eventList: (monthQuery: MonthQuery, date: PatchedDate, presentationId: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.SPECIAL_EVENT_LIST,\n params: {\n ...monthQuery,\n date: date.toString(),\n presentationId: presentationId\n }\n }),\n emptyStateRedirect: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n })\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarBody } from 'libs/shared/apps/calendar/components/calendar-body/CalendarBody';\nimport { CalendarNav } from 'libs/shared/apps/calendar/components/calendar-nav/CalendarNav';\nimport { SpecialEventErrorState } from 'libs/shared/apps/calendar/components/error-state/SpecialEventErrorState';\nimport { useCalendarEventsData } from 'libs/shared/apps/calendar/hooks/useCalendarEventsData';\nimport { useCalendarWeeksTable } from 'libs/shared/apps/calendar/hooks/useCalendarWeeksTable';\nimport { CalendarQueryParams } from 'libs/shared/apps/calendar/interfaces/CalendarQueryParams';\nimport { getIsValidMonth, parseMonthString } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { DiscoverHeader } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, CurrentUser, DashboardUserType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { REGIONAL_CALENDAR_INDEXABILITY } from 'shared/utils/LiteRegionHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { getCalendarAppLinks, getCalendarImageUrls } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\nimport { getDiscoverHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'specialEventCalendar.calendarView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface CalendarViewProps {\n month?: string\n presentationSlug?: string;\n}\n\nexport function CalendarView(props: CalendarViewProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { activePresentation } = usePresentation({ redirectOnError: true });\n const { showCalendar, isLoading } = useShowCalendar();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const isValidMonth = getIsValidMonth(props.month);\n\n React.useEffect(() => {\n if (!isLoading && !showCalendar)\n Core.AppLinkHelper.trigger(getDiscoverHeaderAppLinks().forYou, { replace: true });\n }, [ showCalendar, isLoading ]);\n\n const viewingMonth = parseMonthString(props.month);\n \n const {\n monthDate,\n setMonthDate,\n weekDays,\n weekDaysHeader,\n startDate, endDate\n } = useCalendarWeeksTable(viewingMonth, getCalendarAppLinks());\n\n const { events, loaded } = useCalendarEventsData(viewingMonth, activePresentation.id);\n\n const currentMonthYear = DateHelper.format(monthDate, 'MMMM YYYY');\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: currentMonthYear,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink<keyof CalendarQueryParams>({ allowedParams: ['year']}),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n activePresentation?.learningLevel,\n getCalendarAppLinks().calendar,\n REGIONAL_CALENDAR_INDEXABILITY\n )\n }));\n\n if (props.month !== null && !isValidMonth) {\n return (\n <SpecialEventErrorState\n imageUrl={getCalendarImageUrls().errorState}\n appLink={getCalendarAppLinks().calendar()}\n />\n );\n }\n\n function getIconUrl(classification: Classification, hardCodedEvent?: HashObject): string {\n return hardCodedEvent\n // in calendar we use hardcoded icon for hardcoded event\n ? ImageHelper.createUrl((hardCodedEvent.iconUrl), { size: ImageSize.Medium })\n : ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n\n function getCoverUrl(classification: Classification): string {\n return ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n }\n\n function getActionLabel(): string {\n return !breakpoints.xs ? getPhrase('buttonLabel') : getPhrase('mobileButtonLabel');\n }\n\n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n if (isLoading || !activePresentation?.id || !currentUser.data.countryCode)\n return <></>;\n\n return (\n <div className='bg-white px-3'>\n <DiscoverHeader\n type={DashboardUserType.Staff}\n appLinks={getDiscoverHeaderAppLinks()}\n showCalendar={showCalendar}\n active='calendar'\n />\n <CalendarNav monthDate={monthDate} setViewingMonthDate={setMonthDate} appLinks={getCalendarAppLinks()} />\n <CalendarBody\n weekDays={weekDays}\n weekDaysHeader={weekDaysHeader}\n events={events}\n monthQuery={{ from: startDate?.toString(), to: endDate?.toString() }}\n viewingMonth={viewingMonth}\n eventsLoaded={loaded}\n presentationId={activePresentation.id}\n appLinks={getCalendarAppLinks()}\n imageUrls={getCalendarImageUrls(currentUser.data.countryCode)}\n getIconUrl={(classification: Classification) => getIconUrl(classification, getHardCodedEvent(classification))}\n getCoverUrl={getCoverUrl}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getBannerUrl={(classification: Classification) => classification.banner?.url}\n getActionLabel={getActionLabel}\n getHardCodedEvent={getHardCodedEvent}\n />\n </div>\n );\n}","import { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { CalendarRequests } from '../flight-request/CalendarRequests';\nimport { getCalendarRange } from '../utils/CalendarHelper';\n\nexport function useCalendarEventsData(viewMonth: Date, presentationId: string) {\n const pid = presentationId;\n const [ startDate, endDate ] = getCalendarRange(viewMonth);\n\n const nextMonth = DateHelper.add(viewMonth, 1, 'month');\n const [ nextStartDate, nextEndDate ] = getCalendarRange(nextMonth);\n\n const prevMonth = DateHelper.subtract(viewMonth, 1, 'month');\n const [ prevStartDate, prevEndDate ] = getCalendarRange(prevMonth);\n\n const events = Flight.useBasicFetch<CalendarEvent[]>((startDate && endDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(startDate, 'YYYY-MM-DD'), DateHelper.format(endDate, 'YYYY-MM-DD'), pid));\n const nextEvents = Flight.useBasicFetch<CalendarEvent[]>((nextStartDate && nextEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(nextStartDate, 'YYYY-MM-DD'), DateHelper.format(nextEndDate, 'YYYY-MM-DD'), pid));\n const prevEvents = Flight.useBasicFetch<CalendarEvent[]>((prevStartDate && prevEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(prevStartDate, 'YYYY-MM-DD'), DateHelper.format(prevEndDate, 'YYYY-MM-DD'), pid));\n\n const uniqueEventList = ArrayHelper.uniq(\n [ ...prevEvents.data || [], ...events.data || [], ...nextEvents.data || [] ],\n e => e.specialEventPolicyId\n );\n\n return { events: uniqueEventList, loaded: events.hasCompleted };\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { RatingFilterHelper } from 'libs/shared/apps/search/utils/RatingFilterHelper';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, Company, Playlist, Rating, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\n\nexport function getDiscoverWidgetAppLinks(\n params: HashObject\n): WidgetAppLinks {\n return {\n classification: (classification?: Classification) => {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION,\n args: [ classification?.id, TextHelper.slugify(classification?.name) ],\n params: params || {}\n };\n },\n\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget\n })\n ),\n\n series: SeriesAppLinkHelper.getSeriesAppLink,\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n }),\n \n latestReleases: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n }),\n\n allTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }),\n\n classificationLatestReleases: (classification: Classification) => {\n if (classification.id === CLASSIFICATION_LATEST_RELEASES)\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n };\n\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CLASSIFICATION_UPDATE,\n args: [ classification.id, TextHelper.slugify(classification.name) ]\n };\n },\n\n widgetVideoList: (widgetId: string, widgetName: string) => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.DASHBOARD,\n args: [ widgetId, TextHelper.slugify(widgetName) ]\n }),\n\n watchHistory: () => ({\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }),\n\n rating: (rating: Rating, ratings: Rating[]) => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n moviesAndTv: true,\n rating: RatingFilterHelper.getFrontendParamValue([ ArrayHelper.first(ratings), rating ])\n }\n }),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ company.id, TextHelper.slugify(company.name) ]\n }),\n\n discover: () => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }),\n\n calendar: () => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }),\n\n calendarMonth: (month: string, year?: string) => {\n const appLink: Core.AppLink = {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month.toLowerCase()]\n };\n\n if (year)\n appLink.params = { year };\n\n return appLink;\n },\n\n onboardingStep: (step: OnboardingScreenId) => {\n const appLinks = getOnboardingAppLinks();\n return appLinks[step];\n },\n\n onboardingAppLinks: () => {\n return getOnboardingAppLinks();\n },\n\n classroomGuide: VideoAppLinkHelper.getClassroomGuideAppLink,\n interactiveGuidance: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n resourceGuidance: VideoAppLinkHelper.getResourceGuidanceAppLink\n };\n}\n\nexport function getDiscoverHeaderAppLinks(): DiscoverHeaderAppLinks {\n return {\n forYou: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n },\n whatsNew: {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n },\n calendar: {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }\n };\n}","import React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["BaseLinkifyOptions","className","defaultProtocol","LinkifyHelper","linkifyText","text","options","ops","getPhrase","LanguageService","CalendarCellDate","props","isToday","DateHelper","date","dateClassName","notCurrentMonth","isHovering","hasEvent","delay","ref","CalendarEvents","sliderStep","setSliderStep","multiEvents","eventsOnDay","length","displayedEvent","find","e","idx","multiDayEvent","endDate","backgroundColor","getBackgroundColor","content","hardCodedEvent","getHardCodedEvent","iconUrl","getIconUrl","coverUrl","getCoverUrl","isComingSoon","status","ClassificationStatus","hasInitialized","setClassName","randomNumber","Math","floor","random","window","setTimeout","setHasInitialized","setHoveredEvent","hoveredEvent","specialEventId","analyticsData","presentationId","eventCount","eventId","map","join","topicId","id","eventStatus","getAnalyticsData","analyticsOptions","actionType","entity","location","formatAnalyticDataDate","getBgImageClassName","isMultiEventDate","onClick","AnalyticsHelper","AppLink","appLink","getEventsListAppLink","getTopicAppLink","name","getAppLink","ComingSoonTag","onlyIcon","hideDay","style","LazyImage","src","alt","backgroundImage","SpecialEventHelper","startDate","title","DivButton","stopPropagation","preventDefault","s","action","SvgContainer","svgName","SliderDots","sliderLength","size","onSliderDotClick","i","CalendarDay","namespace","Tooltip","spanHackClassName","spanHack","SpecialEventListItem","event","bannerUrl","getBannerUrl","startTime","getStartTime","actionLabel","getActionLabel","inPopup","Date","BaseImage","data","description","ActionButton","dangerouslySetInnerHTML","__html","CalendarRequests","calendarEvents","from","to","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","objectType","formatData","events","getDisplayDate","slice","getEventsInMonth","month","filter","getOrdinalDate","DiscoverHeader","type","hasStudentExperience","Text","phrase","tabs","appLinks","forYou","active","whatsNew","showCalendar","push","calendar","PillTabSelector","TabContents","tab","count","borderRadius","listClassName","index","onSelect","onSelectTab","defaultProps","CalendarCell","wrapperClassname","theme","border","getIsWeekend","updatedProps","HoverToPortalContainer","hoverableComponent","componentProps","hoverScale","SpecialEventEmptyState","value","EmptyState","imageUrl","altText","heading","SpecialEventList","eventsInMonth","forEach","keys","Object","sort","a","b","k","prevTime","currentTime","TextHelper","CalendarBody","imageUrls","breakpoints","useBreakpoints","viewingMonth","eventsLoaded","emptyState","emptyStateRedirect","emptyStateHeading","viewMode","xs","sm","md","Spinner","as","animation","role","background","weekDaysHeader","w","weekDays","toString","d","monthQuery","eventList","CALENDAR_START_DATE","NEXT_MONTH_LIMIT","getPreviousMonthOverlappingDays","startAtMon","firstDay","firstWeekDay","prevMonthDays","prevMonthDaysCount","originalDay","preDay","assign","reverse","getNextMonthOverlappingDays","lastDay","lastWeekDay","nextMonthDays","nextMonthDaysCount","nextDay","getFirstDateInCalendar","monthDate","firstDayOfMonth","ArrayHelper","getLastDateInCalendar","lastDayOfMonth","getCalendarRange","capitalizeMonthString","monthStr","charAt","toUpperCase","CUR_DATE","ViewModeSwitcher","IconButton","setViewMode","descriptor","Calendar","NavigateButton","arrowSvg","S","CalendarNav","toLocaleLowerCase","currentYear","getFullYear","year","queryParams","classification","yearGroup","monthDiff","showPrev","showNext","children","prevMonth","setViewingMonthDate","nextMonth","SpecialEventErrorState","TODAY_DATE","useCalendarWeeksTable","weekdays","initWeekDays","cacheRef","setWeekDays","monthDateString","cached","current","weeksTable","datePositionMap","monthDays","concat","numberOfDays","daysArray","day","getDaysOfMonth","week","j","colId","row","col","rowId","buildWeeksTable","setMonthDate","nextMonthDate","getCalendarImageUrls","countryCode","CountryCode","C","ImageUrls","errorState","getCalendarAppLinks","application","args","slug","CalendarView","activePresentation","usePresentation","redirectOnError","useShowCalendar","isLoading","currentUser","UserRequests","isValidMonth","capitalized","getIsValidMonth","replace","parseMonthString","viewMonth","pid","nextStartDate","nextEndDate","prevStartDate","prevEndDate","nextEvents","prevEvents","specialEventPolicyId","loaded","hasCompleted","useCalendarEventsData","currentMonthYear","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowedParams","allowIndexing","hrefLang","learningLevel","HardCoded","ImageHelper","icon","cover","metadata","banner","CLASSIFICATION_LATEST_RELEASES","getDiscoverWidgetAppLinks","videoType","video","opts","context","series","subText","playlist","latestReleases","allTopics","classificationLatestReleases","widgetVideoList","widgetId","widgetName","watchHistory","rating","ratings","moviesAndTv","company","discover","calendarMonth","toLowerCase","onboardingStep","step","onboardingAppLinks","classroomGuide","interactiveGuidance","resourceGuidance","getDiscoverHeaderAppLinks","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","allowedLearningLevels","contentRegion","learningLevelCantAccess","l","noSetting","setShowCalendar","setIsLoading"],"sourceRoot":""}
|