@clickview/streamable-learning 0.48.0-rc.1 → 0.48.0

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.
Files changed (115) hide show
  1. package/dist/.vite/manifest.json +605 -605
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{CN8PeBwg.chunk.js → BIisq8ZO.chunk.js} +2 -2
  5. package/dist/scripts/{CN8PeBwg.chunk.js.map → BIisq8ZO.chunk.js.map} +1 -1
  6. package/dist/scripts/{BaMNOAYj2.chunk.js → BWU6_pPN2.chunk.js} +2 -2
  7. package/dist/scripts/{BaMNOAYj2.chunk.js.map → BWU6_pPN2.chunk.js.map} +1 -1
  8. package/dist/scripts/{BvJXPFoz2.chunk.js → BcZFo9Vw2.chunk.js} +2 -2
  9. package/dist/scripts/{BvJXPFoz2.chunk.js.map → BcZFo9Vw2.chunk.js.map} +1 -1
  10. package/dist/scripts/Bd2bbHru.chunk.js +1 -0
  11. package/dist/scripts/{CkYqp83j.chunk.js → BfNy0Hvk.chunk.js} +2 -2
  12. package/dist/scripts/{CkYqp83j.chunk.js.map → BfNy0Hvk.chunk.js.map} +1 -1
  13. package/dist/scripts/{D0SYGnyF.chunk.js → BivP7X20.chunk.js} +2 -2
  14. package/dist/scripts/{D0SYGnyF.chunk.js.map → BivP7X20.chunk.js.map} +1 -1
  15. package/dist/scripts/{BihZ4r0z2.chunk.js → BjbY4Fbp2.chunk.js} +3 -3
  16. package/dist/scripts/{BihZ4r0z2.chunk.js.map → BjbY4Fbp2.chunk.js.map} +1 -1
  17. package/dist/scripts/{DO8_mR5i2.chunk.js → BmxcE73n2.chunk.js} +2 -2
  18. package/dist/scripts/{DO8_mR5i2.chunk.js.map → BmxcE73n2.chunk.js.map} +1 -1
  19. package/dist/scripts/{bycmewy72.chunk.js → BnEMhkEE2.chunk.js} +2 -2
  20. package/dist/scripts/{bycmewy72.chunk.js.map → BnEMhkEE2.chunk.js.map} +1 -1
  21. package/dist/scripts/{jWpq99N3.chunk.js → Buc8GegC.chunk.js} +2 -2
  22. package/dist/scripts/{jWpq99N3.chunk.js.map → Buc8GegC.chunk.js.map} +1 -1
  23. package/dist/scripts/{CrCAJmt6.chunk.js → Byczy1lS.chunk.js} +2 -2
  24. package/dist/scripts/{CrCAJmt6.chunk.js.map → Byczy1lS.chunk.js.map} +1 -1
  25. package/dist/scripts/{BZOcEcTA2.chunk.js → C2itEpvc2.chunk.js} +2 -2
  26. package/dist/scripts/{BZOcEcTA2.chunk.js.map → C2itEpvc2.chunk.js.map} +1 -1
  27. package/dist/scripts/{smdLElLq.chunk.js → CEFKXxac.chunk.js} +2 -2
  28. package/dist/scripts/{smdLElLq.chunk.js.map → CEFKXxac.chunk.js.map} +1 -1
  29. package/dist/scripts/{B-qOny0I2.chunk.js → CEYjJAp52.chunk.js} +2 -2
  30. package/dist/scripts/{B-qOny0I2.chunk.js.map → CEYjJAp52.chunk.js.map} +1 -1
  31. package/dist/scripts/{CNJrD44-2.chunk.js → CJSc4YDq2.chunk.js} +2 -2
  32. package/dist/scripts/{CNJrD44-2.chunk.js.map → CJSc4YDq2.chunk.js.map} +1 -1
  33. package/dist/scripts/{Br0Uc4GG.chunk.js → CKUA5J3R.chunk.js} +2 -2
  34. package/dist/scripts/{Br0Uc4GG.chunk.js.map → CKUA5J3R.chunk.js.map} +1 -1
  35. package/dist/scripts/{CWFInhB82.chunk.js → CYrzupmS2.chunk.js} +2 -2
  36. package/dist/scripts/{CWFInhB82.chunk.js.map → CYrzupmS2.chunk.js.map} +1 -1
  37. package/dist/scripts/{Llxar-VU.chunk.js → CcGYZb9f.chunk.js} +2 -2
  38. package/dist/scripts/{Llxar-VU.chunk.js.map → CcGYZb9f.chunk.js.map} +1 -1
  39. package/dist/scripts/{BTYwcYPL2.chunk.js → CeQGaFi-2.chunk.js} +2 -2
  40. package/dist/scripts/{BTYwcYPL2.chunk.js.map → CeQGaFi-2.chunk.js.map} +1 -1
  41. package/dist/scripts/{D7tastET2.chunk.js → Cr3Blj6H2.chunk.js} +2 -2
  42. package/dist/scripts/{D7tastET2.chunk.js.map → Cr3Blj6H2.chunk.js.map} +1 -1
  43. package/dist/scripts/{Dr1flAez.chunk.js → CxCkwLio.chunk.js} +2 -2
  44. package/dist/scripts/{Dr1flAez.chunk.js.map → CxCkwLio.chunk.js.map} +1 -1
  45. package/dist/scripts/{DyT1OGvP2.chunk.js → Cxj75Dqe2.chunk.js} +2 -2
  46. package/dist/scripts/{DyT1OGvP2.chunk.js.map → Cxj75Dqe2.chunk.js.map} +1 -1
  47. package/dist/scripts/{CsC3VVvE2.chunk.js → D-VNmhoM2.chunk.js} +2 -2
  48. package/dist/scripts/{CsC3VVvE2.chunk.js.map → D-VNmhoM2.chunk.js.map} +1 -1
  49. package/dist/scripts/{CKdklY2o2.chunk.js → D2FqnK9m2.chunk.js} +2 -2
  50. package/dist/scripts/{CKdklY2o2.chunk.js.map → D2FqnK9m2.chunk.js.map} +1 -1
  51. package/dist/scripts/{qcrBN1zR2.chunk.js → D3sdyN2Q2.chunk.js} +2 -2
  52. package/dist/scripts/{qcrBN1zR2.chunk.js.map → D3sdyN2Q2.chunk.js.map} +1 -1
  53. package/dist/scripts/{Ce1TZZdV2.chunk.js → D6IzS-bj2.chunk.js} +2 -2
  54. package/dist/scripts/{Ce1TZZdV2.chunk.js.map → D6IzS-bj2.chunk.js.map} +1 -1
  55. package/dist/scripts/{B703cBe72.chunk.js → D8g6nOG92.chunk.js} +2 -2
  56. package/dist/scripts/{B703cBe72.chunk.js.map → D8g6nOG92.chunk.js.map} +1 -1
  57. package/dist/scripts/{CCoZQmgX.chunk.js → DCKKwz9L.chunk.js} +2 -2
  58. package/dist/scripts/{CCoZQmgX.chunk.js.map → DCKKwz9L.chunk.js.map} +1 -1
  59. package/dist/scripts/{DIavEegC.chunk.js → DL4UFxRK.chunk.js} +2 -2
  60. package/dist/scripts/{DIavEegC.chunk.js.map → DL4UFxRK.chunk.js.map} +1 -1
  61. package/dist/scripts/{C5i1HsPp2.chunk.js → DLofRa642.chunk.js} +2 -2
  62. package/dist/scripts/{C5i1HsPp2.chunk.js.map → DLofRa642.chunk.js.map} +1 -1
  63. package/dist/scripts/{B5jBIPaP.chunk.js → DMZ--ok1.chunk.js} +2 -2
  64. package/dist/scripts/{B5jBIPaP.chunk.js.map → DMZ--ok1.chunk.js.map} +1 -1
  65. package/dist/scripts/{CUUUI6pl.chunk.js → DQFcbMMk.chunk.js} +2 -2
  66. package/dist/scripts/{CUUUI6pl.chunk.js.map → DQFcbMMk.chunk.js.map} +1 -1
  67. package/dist/scripts/{Dj4AeYQQ2.chunk.js → DVeqPzBe2.chunk.js} +2 -2
  68. package/dist/scripts/{Dj4AeYQQ2.chunk.js.map → DVeqPzBe2.chunk.js.map} +1 -1
  69. package/dist/scripts/{CGxa1Jzq.chunk.js → DWerltCT.chunk.js} +2 -2
  70. package/dist/scripts/{CGxa1Jzq.chunk.js.map → DWerltCT.chunk.js.map} +1 -1
  71. package/dist/scripts/{CbLL7dIz2.chunk.js → DatscYpA2.chunk.js} +2 -2
  72. package/dist/scripts/{CbLL7dIz2.chunk.js.map → DatscYpA2.chunk.js.map} +1 -1
  73. package/dist/scripts/{DwzBzBlI2.chunk.js → DkaGC5IU2.chunk.js} +2 -2
  74. package/dist/scripts/{DwzBzBlI2.chunk.js.map → DkaGC5IU2.chunk.js.map} +1 -1
  75. package/dist/scripts/{BLrjbrp8.chunk.js → DqZWSPDJ.chunk.js} +2 -2
  76. package/dist/scripts/{BLrjbrp8.chunk.js.map → DqZWSPDJ.chunk.js.map} +1 -1
  77. package/dist/scripts/{BKnxYKDu2.chunk.js → Dql-1E6g2.chunk.js} +2 -2
  78. package/dist/scripts/{BKnxYKDu2.chunk.js.map → Dql-1E6g2.chunk.js.map} +1 -1
  79. package/dist/scripts/{B7iwtSij.chunk.js → DuBHin02.chunk.js} +2 -2
  80. package/dist/scripts/{B7iwtSij.chunk.js.map → DuBHin02.chunk.js.map} +1 -1
  81. package/dist/scripts/{BpgHKWR52.chunk.js → QMuFwiiF2.chunk.js} +2 -2
  82. package/dist/scripts/{BpgHKWR52.chunk.js.map → QMuFwiiF2.chunk.js.map} +1 -1
  83. package/dist/scripts/{Ces-KTwe.chunk.js → U_sIlzAD.chunk.js} +2 -2
  84. package/dist/scripts/{Ces-KTwe.chunk.js.map → U_sIlzAD.chunk.js.map} +1 -1
  85. package/dist/scripts/{ACTQklJQ.chunk.js → WLyOm9Lj.chunk.js} +2 -2
  86. package/dist/scripts/{ACTQklJQ.chunk.js.map → WLyOm9Lj.chunk.js.map} +1 -1
  87. package/dist/scripts/{DR80oZtZ.chunk.js → Ymq7JLkU.chunk.js} +2 -2
  88. package/dist/scripts/{DR80oZtZ.chunk.js.map → Ymq7JLkU.chunk.js.map} +1 -1
  89. package/dist/scripts/{app-BIigh9wv.js → app-gjHxcZG3.js} +4 -4
  90. package/dist/scripts/app-gjHxcZG3.js.map +1 -0
  91. package/dist/scripts/{CNmmq34f.chunk.js → djRnI462.chunk.js} +2 -2
  92. package/dist/scripts/{CNmmq34f.chunk.js.map → djRnI462.chunk.js.map} +1 -1
  93. package/dist/scripts/{oTYyWWB-.chunk.js → e2K2YU7z.chunk.js} +2 -2
  94. package/dist/scripts/{oTYyWWB-.chunk.js.map → e2K2YU7z.chunk.js.map} +1 -1
  95. package/dist/scripts/{BxypZGPK.chunk.js → fnfhCa1P.chunk.js} +2 -2
  96. package/dist/scripts/{BxypZGPK.chunk.js.map → fnfhCa1P.chunk.js.map} +1 -1
  97. package/dist/scripts/{BsAo7Lri2.chunk.js → iyIL3kim2.chunk.js} +2 -2
  98. package/dist/scripts/{BsAo7Lri2.chunk.js.map → iyIL3kim2.chunk.js.map} +1 -1
  99. package/dist/scripts/{DK3xia1t.chunk.js → kfFYr9dc.chunk.js} +2 -2
  100. package/dist/scripts/{DK3xia1t.chunk.js.map → kfFYr9dc.chunk.js.map} +1 -1
  101. package/dist/scripts/{BXJetawx2.chunk.js → kts5xiiM2.chunk.js} +2 -2
  102. package/dist/scripts/{BXJetawx2.chunk.js.map → kts5xiiM2.chunk.js.map} +1 -1
  103. package/dist/scripts/{tYi-sUb22.chunk.js → lLAYbgAy2.chunk.js} +2 -2
  104. package/dist/scripts/{tYi-sUb22.chunk.js.map → lLAYbgAy2.chunk.js.map} +1 -1
  105. package/dist/scripts/{BCBfXCYM2.chunk.js → p9ukva5a2.chunk.js} +2 -2
  106. package/dist/scripts/{BCBfXCYM2.chunk.js.map → p9ukva5a2.chunk.js.map} +1 -1
  107. package/dist/scripts/{DKnZ8BaN.chunk.js → wOeN2ls0.chunk.js} +2 -2
  108. package/dist/scripts/{DKnZ8BaN.chunk.js.map → wOeN2ls0.chunk.js.map} +1 -1
  109. package/dist/scripts/{DU1SE31v2.chunk.js → zp2BHOp82.chunk.js} +2 -2
  110. package/dist/scripts/{DU1SE31v2.chunk.js.map → zp2BHOp82.chunk.js.map} +1 -1
  111. package/dist/scripts/{DnSy_Myx.chunk.js → zyVwH8JF.chunk.js} +2 -2
  112. package/dist/scripts/{DnSy_Myx.chunk.js.map → zyVwH8JF.chunk.js.map} +1 -1
  113. package/package.json +1 -1
  114. package/dist/scripts/C4MLxDS-.chunk.js +0 -1
  115. package/dist/scripts/app-BIigh9wv.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Br0Uc4GG.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/components/calendar-cell/calendar-cell.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-cell/CalendarCell.tsx","../../../../libs/shared/src/apps/calendar/components/empty-state/SpecialEventEmptyState.tsx","../../../../libs/shared/src/apps/calendar/components/special-event-list/special-event-list.module.scss","../../../../libs/shared/src/apps/calendar/components/special-event-list/SpecialEventList.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-body/calendar-body.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-body/CalendarBody.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-nav/calendar-nav.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-nav/CalendarNav.tsx","../../../../libs/shared/src/apps/calendar/components/error-state/SpecialEventErrorState.tsx","../../../../libs/shared/src/apps/calendar/hooks/useCalendarWeeksTable.ts","../../src/apps/calendar/hooks/useCalendarEventsData.ts","../../src/apps/calendar/views/calendar-view/CalendarView.tsx"],"sourcesContent":[":local {\n .wrapper {\n border-width: 0.125rem !important;\n }\n\n .weekend {\n background-color: $gray-100;\n }\n}","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 { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-cell.module.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 += `opacity-50`;\n\n const eventsOnDay = SpecialEventHelper.getEventsForDay(\n date,\n props.events || [],\n props.crossMonthEvents || [],\n props.viewingMonth\n );\n\n const updatedProps = { ...props, eventsOnDay, sliderStep, setSliderStep };\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}\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}\n",":local {\n .date {\n margin-bottom: 1rem;\n }\n .first {\n margin-top: map-get($spacers, 1) !important;\n }\n}","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.module.scss';\n\ninterface SpecialEventListProps {\n events: CalendarEvent[];\n presentationId: string;\n appLink: (content: CalendarEventContent, 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 isPastEvent?: (content: CalendarEventContent) => boolean;\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 isPastEvent={props.isPastEvent}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n",":local {\n .header {\n height: map-get($spacers, 5);\n }\n .thead {\n border-width: 0.125rem !important;\n }\n td {\n width: 14.285%; // 100% / 7\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\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 { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\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.module.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 fadePastEvents?: boolean;\n timezone?: Timezone;\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 isPastEvent?: (content: CalendarEventContent) => boolean;\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 // cross-month events that should be shown on the first cell of the month\n const crossMonthEventsForFirstDay = React.useMemo(() => {\n const allDatesInView = new Set(\n props.weekDays.reduce((acc, week) => acc.concat(week), [])\n .map(d => DateHelper.format(d, 'YYYY-MM-DD'))\n );\n\n const crossMonthEvents = (props.events || []).filter(e => {\n if (!e.startDate) return false;\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, props.viewingMonth);\n // Only include if the event's start date is NOT already visible in the current view\n const startDateVisible = allDatesInView.has(DateHelper.format(e.startDate, 'YYYY-MM-DD'));\n return isFromPreviousMonth && !startDateVisible;\n });\n\n return crossMonthEvents;\n }, [ props.weekDays, props.events ]);\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 isPastEvent={props.isPastEvent}\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' scope='col'>{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 crossMonthEvents={crossMonthEventsForFirstDay}\n viewingMonth={props.viewingMonth}\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={(calendarEventContent, slug) =>\n props.appLinks.event(calendarEventContent, slug)}\n getIconUrl={props.getIconUrl}\n getBackgroundColor={props.getBackgroundColor}\n getCoverUrl={props.getCoverUrl}\n getHardCodedEvent={props.getHardCodedEvent}\n fadePastEvents={props.fadePastEvents}\n timezone={props.timezone}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n",":local {\n $svg-shift: 0.1rem; // Even though the element is centered, the chevron SVGs appear slightly off-center. This corrects that.\n\n .chevron {\n min-width: $cv-svg-size-xlg;\n }\n\n .left {\n left: -1rem;\n\n svg {\n transform: translateX(-$svg-shift);\n }\n }\n\n .right {\n right: -1rem;\n\n svg {\n transform: translateX($svg-shift);\n }\n }\n\n .viewModeContainer {\n height: 2.5rem;\n }\n}","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 { 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 { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { TableOfContentsSvg } from 'libs/shared/images/svg/objects/TableOfContentsSvg';\n\nimport styles from './calendar-nav.module.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 svg={CalendarSvg}\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 svg={TableOfContentsSvg}\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 appLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n onClick: () => void;\n}\n\nfunction NavigateButton(props: NavigateButtonProps): JSX.Element {\n const arrowSvg = props.action === 'previous' ? ChevronLeftSvg : ChevronRightSvg;\n const className = props.action === 'previous' ? styles.left : styles.right;\n\n function onClick() {\n Core.AppLinkHelper.trigger(props.appLink);\n\n props.onClick();\n }\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n className={`${styles.chevron} ${className} border border-dark rounded-circle bg-white d-flex align-items-center justify-content-center`}\n onClick={onClick}\n >\n <SvgContainer\n svg={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.svg}`}\n />\n </AppLink>\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 <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.subtract(props.monthDate, 1, 'month'), 'month'))}\n action='previous'\n onClick={onClickPrevious}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'previous', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n />\n )}\n <AppLink\n appLink={getAppLink()}className={`${styles.todayWrapper} btn btn-outline-dark fw-semibold`}\n onClick={onClickToday}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'today', date: formatAnalyticDataDate(DateHelper.startOf(CUR_DATE, 'month')) }}\n >\n {LanguageService.getPhrase(namespace, 'today')}\n </AppLink>\n {showNext && (\n <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month'))}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'next', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n action='next'\n onClick={onClickNext}\n />\n )}\n </div>\n </div>\n );\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}\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, 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 const cacheRef = React.useRef<Cache>({});\n\n const monthDateString = DateHelper.format(date, 'YYYY-MM');\n const weekDays = React.useMemo(() => {\n const cached = cacheRef.current[monthDateString];\n if (!cached) {\n const { weeksTable, datePositionMap } = buildWeeksTable(date, startAtMon);\n\n cacheRef.current[monthDateString] = { weeksTable, datePositionMap };\n return weeksTable;\n }\n\n return cached.weeksTable;\n }, [ monthDateString, startAtMon ]);\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}\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 { HashObject } from 'libs/analytics/interfaces';\n\nimport { getCalendarRange } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\n\nexport function useCalendarEventsData(viewMonth: Date, queryParams?: HashObject) {\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 filters: HashObject = {};\n\n if (queryParams.yearGroup)\n filters.audienceId = queryParams.yearGroup;\n\n if (queryParams.classification) {\n filters.topicId = queryParams.classification;\n filters.includeChildrenTopics = true;\n }\n\n const events = Flight.useBasicFetch<CalendarEvent[]>((startDate && endDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(startDate, 'YYYY-MM-DD'),\n to: DateHelper.format(endDate, 'YYYY-MM-DD'),\n ...filters\n }));\n \n const nextEvents = Flight.useBasicFetch<CalendarEvent[]>((nextStartDate && nextEndDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(nextStartDate, 'YYYY-MM-DD'),\n to: DateHelper.format(nextEndDate, 'YYYY-MM-DD'),\n ...filters\n }));\n\n const prevEvents = Flight.useBasicFetch<CalendarEvent[]>((prevStartDate && prevEndDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(prevStartDate, 'YYYY-MM-DD'),\n to: DateHelper.format(prevEndDate, 'YYYY-MM-DD'),\n ...filters\n }));\n\n const uniqueEventList = ArrayHelper.uniq(\n [ ...prevEvents.data || [], ...events.data || [], ...nextEvents.data || [] ],\n e => e.id\n );\n\n return { events: uniqueEventList, loaded: events.hasCompleted };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\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 { useCalendarWeeksTable } from 'libs/shared/apps/calendar/hooks/useCalendarWeeksTable';\nimport { CalendarQueryParams } from 'libs/shared/apps/calendar/interfaces/CalendarQueryParams';\nimport { CalendarViewMode } from 'libs/shared/apps/calendar/interfaces/CalendarViewMode';\nimport { getIsValidMonth, parseMonthString } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { SearchFilter, TopicResults } from 'libs/shared/apps/search/interfaces';\nimport { StreamableHeader } from 'libs/shared/apps/streamable-learning/components/header/StreamableHeader';\nimport { TimezoneIndicator } from 'libs/shared/apps/streamable-learning/components/timezone-indicator/TimezoneIndicator';\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Livestream, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { useCalendarEventsData } from 'apps/calendar/hooks/useCalendarEventsData';\nimport { CalendarUtils } from 'apps/calendar/utils/CalendarUtils';\nimport { getCalendarAppLinks, getCalendarImageUrls } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\nimport { getStreamableHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'livestreamCalendar.calendarView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ViewModelViewModel {\n viewMode: CalendarViewMode;\n}\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizePlayViewParams below.\n */\ninterface StreamableCalendarQueryParams extends CalendarQueryParams {\n classification?: string;\n yearGroup?: string;\n}\n\nexport function sanitizeCalendarViewParams(queryParams: StreamableCalendarQueryParams): StreamableCalendarQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [\n 'year',\n 'classification',\n 'yearGroup'\n ]);\n}\n\nCalendarView.defaultProps = {\n queryParams: {}\n};\n\nexport interface CalendarViewProps {\n month?: string;\n queryParams?: StreamableCalendarQueryParams;\n}\n\nexport function CalendarView(props: CalendarViewProps): JSX.Element {\n const [{ viewMode }, setMode ] = useViewModel<ViewModelViewModel>('calendar:mode', { viewMode: 'calendar' }, {\n storage: StorageType.LocalStorage\n });\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(presentation.data &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, presentation.data.id));\n\n const availableTopics = Flight.useBasicFetch<TopicResults>(presentation.data &&\n ClassificationRequests.topicsFromAllAvailablePresentations([presentation.data.id]));\n\n const isValidMonth = getIsValidMonth(props.month);\n\n const viewingMonth = parseMonthString(props.month);\n \n const {\n monthDate,\n setMonthDate,\n weekDays,\n weekDaysHeader,\n startDate,\n endDate\n } = useCalendarWeeksTable(viewingMonth, getCalendarAppLinks());\n\n const { events, loaded } = useCalendarEventsData(viewingMonth, props.queryParams);\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: true,\n product: StreamableConstants.PRODUCT_NAME\n }));\n\n if (props.month !== null && !isValidMonth) {\n return (\n <SpecialEventErrorState\n imageUrl={getCalendarImageUrls().errorState}\n appLink={getStreamableHeaderAppLinks().calendar}\n />\n );\n }\n\n const mainFilters: SearchFilter<string>[] = [\n {\n id: 'classification',\n name: getPhrase('subjectFilter'),\n options: availableTopics.data?.topics.map(t => ({ name: t.name, id: t.topicIds.join(':') })),\n type: 'checkbox',\n compatibleIndices: []\n },\n {\n id: 'yearGroup',\n name: getPhrase('gradeFilter'),\n type: 'checkbox',\n options: audiences.data?.map(a => ({ name: a.name, id: a.masterId })),\n compatibleIndices: []\n }\n ];\n\n function getAppLink(): Core.AppLink {\n const month = DateHelper.format(monthDate, 'MMMM').toLocaleLowerCase();\n\n const currentYear = new Date().getFullYear();\n const year = monthDate.getFullYear();\n\n const appLink: Core.AppLink = getCalendarAppLinks().month(month);\n\n const params: HashObject = {};\n\n if (currentYear !== year)\n params.year = year;\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 return appLink;\n }\n\n function getActionLabel(livestream: Livestream): string {\n return isStudent || DateHelper.isBefore(livestream.endDateTime, new Date()) ? 'pastActionLabel' : 'actionLabel';\n }\n\n function getEmptyStateHeading(): string {\n const eventsInMonth = SpecialEventHelper.getEventsInMonth(events || [], viewingMonth);\n\n if (!eventsInMonth.length && (props.queryParams.yearGroup || props.queryParams.classification))\n return getPhrase('emptyStateText');\n }\n\n function getIconUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.logo?.url, { size: ImageSize.Small });\n }\n\n function getBannerUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.banner?.url, { size: ImageSize.Large });\n }\n\n return (\n <div className='bg-white px-4'>\n <StreamableHeader\n appLinks={getStreamableHeaderAppLinks()}\n active='calendar'\n />\n\n <CalendarNav\n monthDate={monthDate}\n setViewingMonthDate={setMonthDate}\n appLinks={getCalendarAppLinks()}\n queryParams={props.queryParams}\n viewMode={viewMode}\n setViewMode={(viewMode: CalendarViewMode) => setMode({ viewMode })}\n >\n <div className='mx-n1 order-1 order-sm-0'>\n <SearchFilters\n queryParams={ObjectHelper.omit(props.queryParams, ['year'])}\n mainFilters={mainFilters}\n appLink={getAppLink()}\n isFetchingOptions={!availableTopics.data || !presentation.data || !audiences.data}\n alignResetButtonLeft\n hideDivider\n hideHeading\n hideCaret={false}\n />\n </div>\n </CalendarNav>\n <div className={`position-relative mt-3 ${viewMode === 'list' ? '' : 'mt-lg-0'}`}>\n <div className={`d-block ${viewMode === 'list' ? '' : 'd-lg-none'} position-absolute top-0 end-0 mt-2`}>\n <TimezoneIndicator />\n </div>\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={presentation.data?.id}\n appLinks={getCalendarAppLinks()}\n imageUrls={getCalendarImageUrls()}\n viewMode={viewMode}\n getActionLabel={livestream => getPhrase(getActionLabel(livestream as Livestream))}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getBannerUrl={getBannerUrl}\n getIconUrl={getIconUrl}\n getStartTime={CalendarUtils.getStartTime}\n theme={{\n background: 'bg-light-green',\n border: 'border-light-green'\n }}\n emptyStateHeading={getEmptyStateHeading()}\n fadePastEvents\n timezone={Timezone.ET}\n isPastEvent={CalendarUtils.isPastEvent}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CKUA5J3R.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/components/calendar-cell/calendar-cell.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-cell/CalendarCell.tsx","../../../../libs/shared/src/apps/calendar/components/empty-state/SpecialEventEmptyState.tsx","../../../../libs/shared/src/apps/calendar/components/special-event-list/special-event-list.module.scss","../../../../libs/shared/src/apps/calendar/components/special-event-list/SpecialEventList.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-body/calendar-body.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-body/CalendarBody.tsx","../../../../libs/shared/src/apps/calendar/components/calendar-nav/calendar-nav.module.scss","../../../../libs/shared/src/apps/calendar/components/calendar-nav/CalendarNav.tsx","../../../../libs/shared/src/apps/calendar/components/error-state/SpecialEventErrorState.tsx","../../../../libs/shared/src/apps/calendar/hooks/useCalendarWeeksTable.ts","../../src/apps/calendar/hooks/useCalendarEventsData.ts","../../src/apps/calendar/views/calendar-view/CalendarView.tsx"],"sourcesContent":[":local {\n .wrapper {\n border-width: 0.125rem !important;\n }\n\n .weekend {\n background-color: $gray-100;\n }\n}","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 { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-cell.module.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 += `opacity-50`;\n\n const eventsOnDay = SpecialEventHelper.getEventsForDay(\n date,\n props.events || [],\n props.crossMonthEvents || [],\n props.viewingMonth\n );\n\n const updatedProps = { ...props, eventsOnDay, sliderStep, setSliderStep };\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}\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}\n",":local {\n .date {\n margin-bottom: 1rem;\n }\n .first {\n margin-top: map-get($spacers, 1) !important;\n }\n}","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.module.scss';\n\ninterface SpecialEventListProps {\n events: CalendarEvent[];\n presentationId: string;\n appLink: (content: CalendarEventContent, 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 isPastEvent?: (content: CalendarEventContent) => boolean;\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 isPastEvent={props.isPastEvent}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n",":local {\n .header {\n height: map-get($spacers, 5);\n }\n .thead {\n border-width: 0.125rem !important;\n }\n td {\n width: 14.285%; // 100% / 7\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\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 { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\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.module.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 fadePastEvents?: boolean;\n timezone?: Timezone;\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 isPastEvent?: (content: CalendarEventContent) => boolean;\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 // cross-month events that should be shown on the first cell of the month\n const crossMonthEventsForFirstDay = React.useMemo(() => {\n const allDatesInView = new Set(\n props.weekDays.reduce((acc, week) => acc.concat(week), [])\n .map(d => DateHelper.format(d, 'YYYY-MM-DD'))\n );\n\n const crossMonthEvents = (props.events || []).filter(e => {\n if (!e.startDate) return false;\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, props.viewingMonth);\n // Only include if the event's start date is NOT already visible in the current view\n const startDateVisible = allDatesInView.has(DateHelper.format(e.startDate, 'YYYY-MM-DD'));\n return isFromPreviousMonth && !startDateVisible;\n });\n\n return crossMonthEvents;\n }, [ props.weekDays, props.events ]);\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 isPastEvent={props.isPastEvent}\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' scope='col'>{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 crossMonthEvents={crossMonthEventsForFirstDay}\n viewingMonth={props.viewingMonth}\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={(calendarEventContent, slug) =>\n props.appLinks.event(calendarEventContent, slug)}\n getIconUrl={props.getIconUrl}\n getBackgroundColor={props.getBackgroundColor}\n getCoverUrl={props.getCoverUrl}\n getHardCodedEvent={props.getHardCodedEvent}\n fadePastEvents={props.fadePastEvents}\n timezone={props.timezone}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n",":local {\n $svg-shift: 0.1rem; // Even though the element is centered, the chevron SVGs appear slightly off-center. This corrects that.\n\n .chevron {\n min-width: $cv-svg-size-xlg;\n }\n\n .left {\n left: -1rem;\n\n svg {\n transform: translateX(-$svg-shift);\n }\n }\n\n .right {\n right: -1rem;\n\n svg {\n transform: translateX($svg-shift);\n }\n }\n\n .viewModeContainer {\n height: 2.5rem;\n }\n}","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 { 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 { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { TableOfContentsSvg } from 'libs/shared/images/svg/objects/TableOfContentsSvg';\n\nimport styles from './calendar-nav.module.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 svg={CalendarSvg}\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 svg={TableOfContentsSvg}\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 appLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n onClick: () => void;\n}\n\nfunction NavigateButton(props: NavigateButtonProps): JSX.Element {\n const arrowSvg = props.action === 'previous' ? ChevronLeftSvg : ChevronRightSvg;\n const className = props.action === 'previous' ? styles.left : styles.right;\n\n function onClick() {\n Core.AppLinkHelper.trigger(props.appLink);\n\n props.onClick();\n }\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n className={`${styles.chevron} ${className} border border-dark rounded-circle bg-white d-flex align-items-center justify-content-center`}\n onClick={onClick}\n >\n <SvgContainer\n svg={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.svg}`}\n />\n </AppLink>\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 <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.subtract(props.monthDate, 1, 'month'), 'month'))}\n action='previous'\n onClick={onClickPrevious}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'previous', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n />\n )}\n <AppLink\n appLink={getAppLink()}className={`${styles.todayWrapper} btn btn-outline-dark fw-semibold`}\n onClick={onClickToday}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'today', date: formatAnalyticDataDate(DateHelper.startOf(CUR_DATE, 'month')) }}\n >\n {LanguageService.getPhrase(namespace, 'today')}\n </AppLink>\n {showNext && (\n <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month'))}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'next', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n action='next'\n onClick={onClickNext}\n />\n )}\n </div>\n </div>\n );\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}\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, 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 const cacheRef = React.useRef<Cache>({});\n\n const monthDateString = DateHelper.format(date, 'YYYY-MM');\n const weekDays = React.useMemo(() => {\n const cached = cacheRef.current[monthDateString];\n if (!cached) {\n const { weeksTable, datePositionMap } = buildWeeksTable(date, startAtMon);\n\n cacheRef.current[monthDateString] = { weeksTable, datePositionMap };\n return weeksTable;\n }\n\n return cached.weeksTable;\n }, [ monthDateString, startAtMon ]);\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}\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 { HashObject } from 'libs/analytics/interfaces';\n\nimport { getCalendarRange } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\n\nexport function useCalendarEventsData(viewMonth: Date, queryParams?: HashObject) {\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 filters: HashObject = {};\n\n if (queryParams.yearGroup)\n filters.audienceId = queryParams.yearGroup;\n\n if (queryParams.classification) {\n filters.topicId = queryParams.classification;\n filters.includeChildrenTopics = true;\n }\n\n const events = Flight.useBasicFetch<CalendarEvent[]>((startDate && endDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(startDate, 'YYYY-MM-DD'),\n to: DateHelper.format(endDate, 'YYYY-MM-DD'),\n ...filters\n }));\n \n const nextEvents = Flight.useBasicFetch<CalendarEvent[]>((nextStartDate && nextEndDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(nextStartDate, 'YYYY-MM-DD'),\n to: DateHelper.format(nextEndDate, 'YYYY-MM-DD'),\n ...filters\n }));\n\n const prevEvents = Flight.useBasicFetch<CalendarEvent[]>((prevStartDate && prevEndDate)\n && LivestreamRequests.calendarLivestreams({\n from: DateHelper.format(prevStartDate, 'YYYY-MM-DD'),\n to: DateHelper.format(prevEndDate, 'YYYY-MM-DD'),\n ...filters\n }));\n\n const uniqueEventList = ArrayHelper.uniq(\n [ ...prevEvents.data || [], ...events.data || [], ...nextEvents.data || [] ],\n e => e.id\n );\n\n return { events: uniqueEventList, loaded: events.hasCompleted };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\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 { useCalendarWeeksTable } from 'libs/shared/apps/calendar/hooks/useCalendarWeeksTable';\nimport { CalendarQueryParams } from 'libs/shared/apps/calendar/interfaces/CalendarQueryParams';\nimport { CalendarViewMode } from 'libs/shared/apps/calendar/interfaces/CalendarViewMode';\nimport { getIsValidMonth, parseMonthString } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { SearchFilter, TopicResults } from 'libs/shared/apps/search/interfaces';\nimport { StreamableHeader } from 'libs/shared/apps/streamable-learning/components/header/StreamableHeader';\nimport { TimezoneIndicator } from 'libs/shared/apps/streamable-learning/components/timezone-indicator/TimezoneIndicator';\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Livestream, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { useCalendarEventsData } from 'apps/calendar/hooks/useCalendarEventsData';\nimport { CalendarUtils } from 'apps/calendar/utils/CalendarUtils';\nimport { getCalendarAppLinks, getCalendarImageUrls } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\nimport { getStreamableHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'livestreamCalendar.calendarView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ViewModelViewModel {\n viewMode: CalendarViewMode;\n}\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizePlayViewParams below.\n */\ninterface StreamableCalendarQueryParams extends CalendarQueryParams {\n classification?: string;\n yearGroup?: string;\n}\n\nexport function sanitizeCalendarViewParams(queryParams: StreamableCalendarQueryParams): StreamableCalendarQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [\n 'year',\n 'classification',\n 'yearGroup'\n ]);\n}\n\nCalendarView.defaultProps = {\n queryParams: {}\n};\n\nexport interface CalendarViewProps {\n month?: string;\n queryParams?: StreamableCalendarQueryParams;\n}\n\nexport function CalendarView(props: CalendarViewProps): JSX.Element {\n const [{ viewMode }, setMode ] = useViewModel<ViewModelViewModel>('calendar:mode', { viewMode: 'calendar' }, {\n storage: StorageType.LocalStorage\n });\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(presentation.data &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, presentation.data.id));\n\n const availableTopics = Flight.useBasicFetch<TopicResults>(presentation.data &&\n ClassificationRequests.topicsFromAllAvailablePresentations([presentation.data.id]));\n\n const isValidMonth = getIsValidMonth(props.month);\n\n const viewingMonth = parseMonthString(props.month);\n \n const {\n monthDate,\n setMonthDate,\n weekDays,\n weekDaysHeader,\n startDate,\n endDate\n } = useCalendarWeeksTable(viewingMonth, getCalendarAppLinks());\n\n const { events, loaded } = useCalendarEventsData(viewingMonth, props.queryParams);\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: true,\n product: StreamableConstants.PRODUCT_NAME\n }));\n\n if (props.month !== null && !isValidMonth) {\n return (\n <SpecialEventErrorState\n imageUrl={getCalendarImageUrls().errorState}\n appLink={getStreamableHeaderAppLinks().calendar}\n />\n );\n }\n\n const mainFilters: SearchFilter<string>[] = [\n {\n id: 'classification',\n name: getPhrase('subjectFilter'),\n options: availableTopics.data?.topics.map(t => ({ name: t.name, id: t.topicIds.join(':') })),\n type: 'checkbox',\n compatibleIndices: []\n },\n {\n id: 'yearGroup',\n name: getPhrase('gradeFilter'),\n type: 'checkbox',\n options: audiences.data?.map(a => ({ name: a.name, id: a.masterId })),\n compatibleIndices: []\n }\n ];\n\n function getAppLink(): Core.AppLink {\n const month = DateHelper.format(monthDate, 'MMMM').toLocaleLowerCase();\n\n const currentYear = new Date().getFullYear();\n const year = monthDate.getFullYear();\n\n const appLink: Core.AppLink = getCalendarAppLinks().month(month);\n\n const params: HashObject = {};\n\n if (currentYear !== year)\n params.year = year;\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 return appLink;\n }\n\n function getActionLabel(livestream: Livestream): string {\n return isStudent || DateHelper.isBefore(livestream.endDateTime, new Date()) ? 'pastActionLabel' : 'actionLabel';\n }\n\n function getEmptyStateHeading(): string {\n const eventsInMonth = SpecialEventHelper.getEventsInMonth(events || [], viewingMonth);\n\n if (!eventsInMonth.length && (props.queryParams.yearGroup || props.queryParams.classification))\n return getPhrase('emptyStateText');\n }\n\n function getIconUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.logo?.url, { size: ImageSize.Small });\n }\n\n function getBannerUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.banner?.url, { size: ImageSize.Large });\n }\n\n return (\n <div className='bg-white px-4'>\n <StreamableHeader\n appLinks={getStreamableHeaderAppLinks()}\n active='calendar'\n />\n\n <CalendarNav\n monthDate={monthDate}\n setViewingMonthDate={setMonthDate}\n appLinks={getCalendarAppLinks()}\n queryParams={props.queryParams}\n viewMode={viewMode}\n setViewMode={(viewMode: CalendarViewMode) => setMode({ viewMode })}\n >\n <div className='mx-n1 order-1 order-sm-0'>\n <SearchFilters\n queryParams={ObjectHelper.omit(props.queryParams, ['year'])}\n mainFilters={mainFilters}\n appLink={getAppLink()}\n isFetchingOptions={!availableTopics.data || !presentation.data || !audiences.data}\n alignResetButtonLeft\n hideDivider\n hideHeading\n hideCaret={false}\n />\n </div>\n </CalendarNav>\n <div className={`position-relative mt-3 ${viewMode === 'list' ? '' : 'mt-lg-0'}`}>\n <div className={`d-block ${viewMode === 'list' ? '' : 'd-lg-none'} position-absolute top-0 end-0 mt-2`}>\n <TimezoneIndicator />\n </div>\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={presentation.data?.id}\n appLinks={getCalendarAppLinks()}\n imageUrls={getCalendarImageUrls()}\n viewMode={viewMode}\n getActionLabel={livestream => getPhrase(getActionLabel(livestream as Livestream))}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getBannerUrl={getBannerUrl}\n getIconUrl={getIconUrl}\n getStartTime={CalendarUtils.getStartTime}\n theme={{\n background: 'bg-light-green',\n border: 'border-light-green'\n }}\n emptyStateHeading={getEmptyStateHeading()}\n fadePastEvents\n timezone={Timezone.ET}\n isPastEvent={CalendarUtils.isPastEvent}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./B-OL6Vs7.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{t as a}from"./CN1th_9f.chunk.js";import{t as o}from"./BYYiNmLB.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./iTHYgnO8.chunk.js";import{J as l}from"./app-BIigh9wv.js";n();function u(e){let t=i(l.userProducts()).data?.find(e=>e.id===a.Primary);if(t)return n=>e(t,n)}var d=`live`;function f(e,t,n){let r=new URL(e.url);return r.pathname=t,n&&(r.search=`query=${n}`),r.href}function p(e){let t=e?.params;if(t)return typeof t==`string`?t:t.query}function m(e){return e?.args?.join(`/`)??``}var h={getDashboardUrl:e=>f(e,d),getCalendarUrl:e=>f(e,`${d}/calendar`),getSettingsUrl:e=>f(e,`settings`),getSubjectsUrl:(e,t)=>f(e,`${d}/topics/${m(t)}`),getVideosUrl:(e,t)=>f(e,`${d}/videos/${m(t)}`),getLivestreamUrl:(e,t)=>f(e,`${d}/livestreams/${m(t)}`),getSearchUrl:(e,t)=>f(e,`search`,p(t)||void 0)},g={[r.DEFAULT]:h.getDashboardUrl,[r.DASHBOARD]:h.getDashboardUrl,[r.CALENDAR]:h.getCalendarUrl,[r.SUBJECTS]:h.getSubjectsUrl,[r.SEARCH]:h.getSearchUrl,[r.VIDEOS]:h.getVideosUrl,[r.SETTINGS]:h.getSettingsUrl,[r.LIVESTREAMS]:h.getLivestreamUrl},_={container:`_container_1q8q1_1`,content:`_content_1q8q1_6`},v=t(),y=`default.redirectError`;function b({error:t}){s({title:t?.heading||e.getPhrase(y,`defaultPageTitle`)});let n=g[t.origin.application],r=u(n);return(0,v.jsxs)(c,{className:`${_.container}`,children:[(0,v.jsx)(c.Image,{src:o.REDIRECT}),(0,v.jsxs)(`div`,{className:_.content,children:[(0,v.jsx)(c.Heading,{children:e.getPhrase(y,`heading`)}),!!t.description&&(0,v.jsx)(c.Info,{className:`mt-3 text-wrap`,injectHtml:t.injectDescriptionHtml,children:e.getPhrase(y,`info`)})]}),t.cta!==!1&&(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`takeMeThere`),className:`btn btn-dark`,href:r(t.origin)}),(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`learnMore`),className:`btn btn-link text-info mt-3 p-0`,href:r(t.origin)})]})}export{b as PageRedirectedErrorView};
2
- //# sourceMappingURL=CWFInhB82.chunk.js.map
1
+ import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./B-OL6Vs7.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{t as a}from"./CN1th_9f.chunk.js";import{t as o}from"./BYYiNmLB.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./iTHYgnO8.chunk.js";import{J as l}from"./app-gjHxcZG3.js";n();function u(e){let t=i(l.userProducts()).data?.find(e=>e.id===a.Primary);if(t)return n=>e(t,n)}var d=`live`;function f(e,t,n){let r=new URL(e.url);return r.pathname=t,n&&(r.search=`query=${n}`),r.href}function p(e){let t=e?.params;if(t)return typeof t==`string`?t:t.query}function m(e){return e?.args?.join(`/`)??``}var h={getDashboardUrl:e=>f(e,d),getCalendarUrl:e=>f(e,`${d}/calendar`),getSettingsUrl:e=>f(e,`settings`),getSubjectsUrl:(e,t)=>f(e,`${d}/topics/${m(t)}`),getVideosUrl:(e,t)=>f(e,`${d}/videos/${m(t)}`),getLivestreamUrl:(e,t)=>f(e,`${d}/livestreams/${m(t)}`),getSearchUrl:(e,t)=>f(e,`search`,p(t)||void 0)},g={[r.DEFAULT]:h.getDashboardUrl,[r.DASHBOARD]:h.getDashboardUrl,[r.CALENDAR]:h.getCalendarUrl,[r.SUBJECTS]:h.getSubjectsUrl,[r.SEARCH]:h.getSearchUrl,[r.VIDEOS]:h.getVideosUrl,[r.SETTINGS]:h.getSettingsUrl,[r.LIVESTREAMS]:h.getLivestreamUrl},_={container:`_container_1q8q1_1`,content:`_content_1q8q1_6`},v=t(),y=`default.redirectError`;function b({error:t}){s({title:t?.heading||e.getPhrase(y,`defaultPageTitle`)});let n=g[t.origin.application],r=u(n);return(0,v.jsxs)(c,{className:`${_.container}`,children:[(0,v.jsx)(c.Image,{src:o.REDIRECT}),(0,v.jsxs)(`div`,{className:_.content,children:[(0,v.jsx)(c.Heading,{children:e.getPhrase(y,`heading`)}),!!t.description&&(0,v.jsx)(c.Info,{className:`mt-3 text-wrap`,injectHtml:t.injectDescriptionHtml,children:e.getPhrase(y,`info`)})]}),t.cta!==!1&&(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`takeMeThere`),className:`btn btn-dark`,href:r(t.origin)}),(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`learnMore`),className:`btn btn-link text-info mt-3 p-0`,href:r(t.origin)})]})}export{b as PageRedirectedErrorView};
2
+ //# sourceMappingURL=CYrzupmS2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CWFInhB82.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseGetExternalUrl.ts","../../src/shared/utils/ExternalRedirectRouteHelper.ts","../../src/shared/utils/StreamableRedirectMapping.ts","../../src/apps/default/views/redirect/page-redirected-error-view.module.scss","../../src/apps/default/views/redirect/PageRedirectedErrorView.tsx"],"sourcesContent":["import { AppLink } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { Product } from 'libs/shared/interfaces';\n\ntype ArgType = HashObject | string | number | AppLink;\n\ntype ExternalUrlBuilder = (product: Product, ...args: ArgType[]) => string;\n\n/**\n * This should be updated to link to LaunchPad once it supports object links.\n */\nexport function useGetExternalUrl(urlBuilder: ExternalUrlBuilder): (...args: ArgType[]) => string {\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const primaryProduct = products.data?.find(p => p.id === ProductId.Primary);\n\n if (!primaryProduct)\n return;\n\n return args => urlBuilder(primaryProduct, args);\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { Product } from 'libs/shared/interfaces';\n\nconst APP_BASE = 'live';\n\nfunction buildUrl(product: Product, pathname: string, query?: string) {\n const url = new URL(product.url);\n url.pathname = pathname;\n\n if (query)\n url.search = `query=${query}`;\n\n return url.href;\n}\n\nfunction getSearchQuery(appLink?: Core.AppLink): string | undefined {\n const params = appLink?.params;\n if (!params) return undefined;\n return typeof params === 'string' ? params : (params['query'] as string | undefined);\n}\n\nfunction joinArgs(appLink?: Core.AppLink) {\n return appLink?.args?.join('/') ?? '';\n}\n\nexport const ExternalRedirectRouteHelper = {\n getDashboardUrl: (product: Product) =>\n buildUrl(product, APP_BASE),\n\n getCalendarUrl: (product: Product) =>\n buildUrl(product, `${APP_BASE}/calendar`),\n\n getSettingsUrl: (product: Product) =>\n buildUrl(product, 'settings'),\n\n getSubjectsUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/topics/${joinArgs(appLink)}`),\n\n getVideosUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/videos/${joinArgs(appLink)}`),\n\n getLivestreamUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/livestreams/${joinArgs(appLink)}`),\n\n getSearchUrl: (product: Product, appLink?: Core.AppLink) => {\n const query = getSearchQuery(appLink);\n return buildUrl(product, 'search', query || undefined);\n }\n};\n","import { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { ExternalRedirectRouteHelper } from 'shared/utils/ExternalRedirectRouteHelper';\n\nexport const StreamableRedirectMapping = {\n [AppChannels.DEFAULT]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.DASHBOARD]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.CALENDAR]: ExternalRedirectRouteHelper.getCalendarUrl,\n [AppChannels.SUBJECTS]: ExternalRedirectRouteHelper.getSubjectsUrl,\n [AppChannels.SEARCH]: ExternalRedirectRouteHelper.getSearchUrl,\n [AppChannels.VIDEOS]: ExternalRedirectRouteHelper.getVideosUrl,\n [AppChannels.SETTINGS]: ExternalRedirectRouteHelper.getSettingsUrl,\n [AppChannels.LIVESTREAMS]: ExternalRedirectRouteHelper.getLivestreamUrl\n};\n",":local {\n .container {\n width: auto;\n min-height: 80vh;\n justify-content: center;\n }\n\n .content {\n width: 28rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { PageRedirectedError } from 'libs/shared/errors/general/page-redirected/PageRedirectedError';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { StreamableRedirectMapping } from 'shared/utils/StreamableRedirectMapping';\n\nimport styles from './page-redirected-error-view.module.scss';\n\nconst namespace = 'default.redirectError';\n\ninterface PageRedirectedErrorViewProps {\n error: PageRedirectedError;\n}\n\nexport function PageRedirectedErrorView({ error }: PageRedirectedErrorViewProps) {\n useSetPageMetadata({\n title: error?.heading || LanguageService.getPhrase(namespace, 'defaultPageTitle')\n });\n\n const mapping = StreamableRedirectMapping[error.origin.application];\n const urlBuilder = useGetExternalUrl(mapping);\n\n return (\n <EmptyState className={`${styles.container}`}>\n <EmptyState.Image src={ImageUrls.REDIRECT}/>\n <div className={styles.content}>\n <EmptyState.Heading>{LanguageService.getPhrase(namespace, 'heading')}</EmptyState.Heading>\n {!!error.description && (\n <EmptyState.Info\n className='mt-3 text-wrap'\n injectHtml={error.injectDescriptionHtml}\n >\n {LanguageService.getPhrase(namespace, 'info')}\n </EmptyState.Info>\n )}\n </div>\n {error.cta !== false &&\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'takeMeThere')}\n className='btn btn-dark'\n href={urlBuilder(error.origin)}\n />\n }\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'learnMore')}\n className='btn btn-link text-info mt-3 p-0'\n href={urlBuilder(error.origin)}\n />\n </EmptyState>\n );\n}\n"],"mappings":"gZAeA,SAAA,EAAA,EAAA,2DAKE,KAGA,MAAA,IAAA,EAAA,EAAA,EAAA,CCnBF,IAAM,EAAW,OAEjB,SAAS,EAAS,EAAkB,EAAkB,EAAgB,CACpE,IAAM,EAAM,IAAI,IAAI,EAAQ,IAAI,CAMhC,MALA,GAAI,SAAW,EAEX,IACF,EAAI,OAAS,SAAS,KAEjB,EAAI,KAGb,SAAS,EAAe,EAA4C,CAClE,IAAM,EAAS,GAAS,OACnB,KACL,OAAO,OAAO,GAAW,SAAW,EAAU,EAAO,MAGvD,SAAS,EAAS,EAAwB,CACxC,OAAO,GAAS,MAAM,KAAK,IAAI,EAAI,GAGrC,IAAa,EAA8B,CACzC,gBAAkB,GAChB,EAAS,EAAS,EAAS,CAE7B,eAAiB,GACf,EAAS,EAAS,GAAG,EAAS,WAAW,CAE3C,eAAiB,GACf,EAAS,EAAS,WAAW,CAE/B,gBAAiB,EAAkB,IACjC,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,cAAe,EAAkB,IAC/B,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,kBAAmB,EAAkB,IACnC,EAAS,EAAS,GAAG,EAAS,eAAe,EAAS,EAAQ,GAAG,CAEnE,cAAe,EAAkB,IAExB,EAAS,EAAS,SADX,EAAe,EAAQ,EACO,IAAA,GAAU,CAEzD,CC9CY,EAA4B,EACtC,EAAY,SAAU,EAA4B,iBAClD,EAAY,WAAY,EAA4B,iBACpD,EAAY,UAAW,EAA4B,gBACnD,EAAY,UAAW,EAA4B,gBACnD,EAAY,QAAS,EAA4B,cACjD,EAAY,QAAS,EAA4B,cACjD,EAAY,UAAW,EAA4B,gBACnD,EAAY,aAAc,EAA4B,iBACxD,qEEEK,EAAY,wBAMlB,SAAgB,EAAwB,CAAE,SAAuC,CAC/E,EAAmB,CACjB,MAAO,GAAO,SAAW,EAAgB,UAAU,EAAW,mBAAmB,CAClF,CAAC,CAEF,IAAM,EAAU,EAA0B,EAAM,OAAO,aACjD,EAAa,EAAkB,EAAQ,CAE7C,OACE,EAAA,EAAA,MAAC,EAAD,CAAY,UAAW,GAAG,EAAO,qBAAjC,EACE,EAAA,EAAA,KAAC,EAAW,MAAZ,CAAkB,IAAK,EAAU,SAAW,CAAA,EAC5C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAO,iBAAvB,EACE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SAAqB,EAAgB,UAAU,EAAW,UAAU,CAAsB,CAAA,CACzF,CAAC,CAAC,EAAM,cACP,EAAA,EAAA,KAAC,EAAW,KAAZ,CACE,UAAU,iBACV,WAAY,EAAM,+BAEjB,EAAgB,UAAU,EAAW,OAAA,CACtB,CAAA,CAAA,GAGrB,EAAM,MAAQ,KACX,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,cAAc,CACzD,UAAU,eACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA,EAEN,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,YAAY,CACvD,UAAU,kCACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA"}
1
+ {"version":3,"file":"CYrzupmS2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseGetExternalUrl.ts","../../src/shared/utils/ExternalRedirectRouteHelper.ts","../../src/shared/utils/StreamableRedirectMapping.ts","../../src/apps/default/views/redirect/page-redirected-error-view.module.scss","../../src/apps/default/views/redirect/PageRedirectedErrorView.tsx"],"sourcesContent":["import { AppLink } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { Product } from 'libs/shared/interfaces';\n\ntype ArgType = HashObject | string | number | AppLink;\n\ntype ExternalUrlBuilder = (product: Product, ...args: ArgType[]) => string;\n\n/**\n * This should be updated to link to LaunchPad once it supports object links.\n */\nexport function useGetExternalUrl(urlBuilder: ExternalUrlBuilder): (...args: ArgType[]) => string {\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const primaryProduct = products.data?.find(p => p.id === ProductId.Primary);\n\n if (!primaryProduct)\n return;\n\n return args => urlBuilder(primaryProduct, args);\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { Product } from 'libs/shared/interfaces';\n\nconst APP_BASE = 'live';\n\nfunction buildUrl(product: Product, pathname: string, query?: string) {\n const url = new URL(product.url);\n url.pathname = pathname;\n\n if (query)\n url.search = `query=${query}`;\n\n return url.href;\n}\n\nfunction getSearchQuery(appLink?: Core.AppLink): string | undefined {\n const params = appLink?.params;\n if (!params) return undefined;\n return typeof params === 'string' ? params : (params['query'] as string | undefined);\n}\n\nfunction joinArgs(appLink?: Core.AppLink) {\n return appLink?.args?.join('/') ?? '';\n}\n\nexport const ExternalRedirectRouteHelper = {\n getDashboardUrl: (product: Product) =>\n buildUrl(product, APP_BASE),\n\n getCalendarUrl: (product: Product) =>\n buildUrl(product, `${APP_BASE}/calendar`),\n\n getSettingsUrl: (product: Product) =>\n buildUrl(product, 'settings'),\n\n getSubjectsUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/topics/${joinArgs(appLink)}`),\n\n getVideosUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/videos/${joinArgs(appLink)}`),\n\n getLivestreamUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/livestreams/${joinArgs(appLink)}`),\n\n getSearchUrl: (product: Product, appLink?: Core.AppLink) => {\n const query = getSearchQuery(appLink);\n return buildUrl(product, 'search', query || undefined);\n }\n};\n","import { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { ExternalRedirectRouteHelper } from 'shared/utils/ExternalRedirectRouteHelper';\n\nexport const StreamableRedirectMapping = {\n [AppChannels.DEFAULT]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.DASHBOARD]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.CALENDAR]: ExternalRedirectRouteHelper.getCalendarUrl,\n [AppChannels.SUBJECTS]: ExternalRedirectRouteHelper.getSubjectsUrl,\n [AppChannels.SEARCH]: ExternalRedirectRouteHelper.getSearchUrl,\n [AppChannels.VIDEOS]: ExternalRedirectRouteHelper.getVideosUrl,\n [AppChannels.SETTINGS]: ExternalRedirectRouteHelper.getSettingsUrl,\n [AppChannels.LIVESTREAMS]: ExternalRedirectRouteHelper.getLivestreamUrl\n};\n",":local {\n .container {\n width: auto;\n min-height: 80vh;\n justify-content: center;\n }\n\n .content {\n width: 28rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { PageRedirectedError } from 'libs/shared/errors/general/page-redirected/PageRedirectedError';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { StreamableRedirectMapping } from 'shared/utils/StreamableRedirectMapping';\n\nimport styles from './page-redirected-error-view.module.scss';\n\nconst namespace = 'default.redirectError';\n\ninterface PageRedirectedErrorViewProps {\n error: PageRedirectedError;\n}\n\nexport function PageRedirectedErrorView({ error }: PageRedirectedErrorViewProps) {\n useSetPageMetadata({\n title: error?.heading || LanguageService.getPhrase(namespace, 'defaultPageTitle')\n });\n\n const mapping = StreamableRedirectMapping[error.origin.application];\n const urlBuilder = useGetExternalUrl(mapping);\n\n return (\n <EmptyState className={`${styles.container}`}>\n <EmptyState.Image src={ImageUrls.REDIRECT}/>\n <div className={styles.content}>\n <EmptyState.Heading>{LanguageService.getPhrase(namespace, 'heading')}</EmptyState.Heading>\n {!!error.description && (\n <EmptyState.Info\n className='mt-3 text-wrap'\n injectHtml={error.injectDescriptionHtml}\n >\n {LanguageService.getPhrase(namespace, 'info')}\n </EmptyState.Info>\n )}\n </div>\n {error.cta !== false &&\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'takeMeThere')}\n className='btn btn-dark'\n href={urlBuilder(error.origin)}\n />\n }\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'learnMore')}\n className='btn btn-link text-info mt-3 p-0'\n href={urlBuilder(error.origin)}\n />\n </EmptyState>\n );\n}\n"],"mappings":"gZAeA,SAAA,EAAA,EAAA,2DAKE,KAGA,MAAA,IAAA,EAAA,EAAA,EAAA,CCnBF,IAAM,EAAW,OAEjB,SAAS,EAAS,EAAkB,EAAkB,EAAgB,CACpE,IAAM,EAAM,IAAI,IAAI,EAAQ,IAAI,CAMhC,MALA,GAAI,SAAW,EAEX,IACF,EAAI,OAAS,SAAS,KAEjB,EAAI,KAGb,SAAS,EAAe,EAA4C,CAClE,IAAM,EAAS,GAAS,OACnB,KACL,OAAO,OAAO,GAAW,SAAW,EAAU,EAAO,MAGvD,SAAS,EAAS,EAAwB,CACxC,OAAO,GAAS,MAAM,KAAK,IAAI,EAAI,GAGrC,IAAa,EAA8B,CACzC,gBAAkB,GAChB,EAAS,EAAS,EAAS,CAE7B,eAAiB,GACf,EAAS,EAAS,GAAG,EAAS,WAAW,CAE3C,eAAiB,GACf,EAAS,EAAS,WAAW,CAE/B,gBAAiB,EAAkB,IACjC,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,cAAe,EAAkB,IAC/B,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,kBAAmB,EAAkB,IACnC,EAAS,EAAS,GAAG,EAAS,eAAe,EAAS,EAAQ,GAAG,CAEnE,cAAe,EAAkB,IAExB,EAAS,EAAS,SADX,EAAe,EAAQ,EACO,IAAA,GAAU,CAEzD,CC9CY,EAA4B,EACtC,EAAY,SAAU,EAA4B,iBAClD,EAAY,WAAY,EAA4B,iBACpD,EAAY,UAAW,EAA4B,gBACnD,EAAY,UAAW,EAA4B,gBACnD,EAAY,QAAS,EAA4B,cACjD,EAAY,QAAS,EAA4B,cACjD,EAAY,UAAW,EAA4B,gBACnD,EAAY,aAAc,EAA4B,iBACxD,qEEEK,EAAY,wBAMlB,SAAgB,EAAwB,CAAE,SAAuC,CAC/E,EAAmB,CACjB,MAAO,GAAO,SAAW,EAAgB,UAAU,EAAW,mBAAmB,CAClF,CAAC,CAEF,IAAM,EAAU,EAA0B,EAAM,OAAO,aACjD,EAAa,EAAkB,EAAQ,CAE7C,OACE,EAAA,EAAA,MAAC,EAAD,CAAY,UAAW,GAAG,EAAO,qBAAjC,EACE,EAAA,EAAA,KAAC,EAAW,MAAZ,CAAkB,IAAK,EAAU,SAAW,CAAA,EAC5C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAO,iBAAvB,EACE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SAAqB,EAAgB,UAAU,EAAW,UAAU,CAAsB,CAAA,CACzF,CAAC,CAAC,EAAM,cACP,EAAA,EAAA,KAAC,EAAW,KAAZ,CACE,UAAU,iBACV,WAAY,EAAM,+BAEjB,EAAgB,UAAU,EAAW,OAAA,CACtB,CAAA,CAAA,GAGrB,EAAM,MAAQ,KACX,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,cAAc,CACzD,UAAU,eACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA,EAEN,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,YAAY,CACvD,UAAU,kCACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA"}
@@ -1,8 +1,8 @@
1
- import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{r as n,t as r,v as i}from"./BJvPfCvt.chunk.js";import{t as a}from"./ImQRQGZr.chunk.js";import{C as o,M as s,dt as c,l,lt as u,n as d,ut as f}from"./Dun43GrB.chunk.js";import{n as p,t as m}from"./Ca1QPe-q2.chunk.js";import{t as ee}from"./iuoIcGAm2.chunk.js";import{r as te}from"./D2om474U2.chunk.js";import{t as h}from"./B8R4YVaF2.chunk.js";import{t as g}from"./X4vTaPlk.chunk.js";import{t as ne}from"./C6L8Y-TQ.chunk.js";import{N as _,i as re}from"./app-BIigh9wv.js";import{t as v}from"./CnDOpuFK.chunk.js";import{n as ie,t as ae}from"./B-6uVsUw2.chunk.js";import{t as y}from"./NrXAMmgy2.chunk.js";import{t as b}from"./BK011l4Q2.chunk.js";import{n as oe}from"./Bt57Tmef2.chunk.js";import{a as x,i as se,n as ce,r as le,t as S}from"./DK3xia1t.chunk.js";import{i as C,t as w}from"./DobKejA8.chunk.js";import{n as ue,t as de}from"./BxypZGPK.chunk.js";var T=function(e){return e[e.Row=0]=`Row`,e[e.LargeRow=1]=`LargeRow`,e[e.Hero=2]=`Hero`,e[e.ResourcesTile=3]=`ResourcesTile`,e}({}),E=function(e){return e.Videos=`videos`,e.FeedVideos=`feed videos`,e.Series=`series`,e.Subjects=`subjects`,e.Playlists=`playlists`,e.Interactives=`interactives`,e.Clips=`clips`,e.PlayPageResources=`play page resources`,e.DashboardResources=`dashboard resources`,e.Libraries=`Libraries`,e.Folders=`Folders`,e.RecentActivities=`recent activities`,e.SmallSeries=`small series`,e.Companies=`companies`,e.PartnerProfiles=`partner profiles`,e.Ratings=`ratings`,e.SpecialEvents=`special events`,e.InteractivesV2=`interactives v2`,e.ClipsV2=`clips v2`,e.PlayPageResourcesV2=`playpage resources v2`,e}({}),D=e(f());function fe(e,t,n){let r=e.collection,a;(!r||s.isEmpty(r))&&!e.prefetched&&(a=e.fetch(n),r=a.data);let o=i.isFunction(e.setData)&&r?e.setData(r):r,c=o,l=_();return D.useEffect(()=>{if(!r||s.isEmpty(r))return;e.limitTotalItems&&(c=o.length>12?o.slice(0,12):o);let n=e.type;n===T.ResourcesTile&&(n=T.Row),t({type:S.Init,payload:{totalItems:c.length,breakpoints:l,type:n,contents:e.contents}})},[o?.length]),a}function pe(e,t){let{offset:n,viewableItems:r}=e,i=n,a=[];for(let e=0;e<i+r;e++)a.push(e);return function(e){let n=t.indexOf(e);return a.includes(n)}}function me(e,t){if(e)return{...e,args:e.args||[t.id,c.slugify(t.name)]}}function he(e,t){let{id:n,name:r,description:i}=e,a={};return Array.isArray(t)?{id:n,name:r,description:i}:(e.id&&(a.id=n),e.name&&(a.name=r),e.description&&(a.description=i),{...t,...a})}function O(e){switch(e){case E.Playlists:return A;case E.Videos:return N;case E.RecentActivities:return P;case E.FeedVideos:return F;case E.Subjects:return I;case E.InteractivesV2:return z;case E.Interactives:return L;case E.ClipsV2:return B;case E.Clips:return R;case E.PlayPageResources:return V;case E.PlayPageResourcesV2:return H;case E.DashboardResources:return N;case E.Libraries:case E.Folders:return M;case E.Ratings:return W;case E.SpecialEvents:return G;case E.Companies:return j;case E.SmallSeries:return ge;case E.PartnerProfiles:return k;case E.Series:default:return U}}function k(e,t,n){let r=6;return e.xs||e.sm?r=2:e.md&&(r=4),n<r&&(r=n),r}function A(e,t,n){let r=5;return e.xs?r=2:e.sm?r=3:e.md&&(r=4),n<r&&(r=n),r}function j(e,t,n){let r=8;return e.xs||e.sm?r=4:e.md&&(r=6),n<r&&(r=n),r}function M(e,t,n){let r=3;return e.xs||e.sm?r=1:e.md?r=2:e.lg&&(r=3),n<r&&(r=n),r}function N(e,t,n){let r=4;return e.xs&&(r=1),e.sm&&(r=2),(e.md||e.lg)&&(r=3),t===T.LargeRow&&r>3&&(r=3),n<r&&(r=n),r}function P(e,t,n){let r=4;return e.xs&&(r=2),e.sm&&(r=3),n<r&&(r=n),r}function F(e,t,n){return 1}function I(e,t,n){if(t===T.LargeRow){let t=5;return e.xs?t=2:e.sm?t=3:e.md&&(t=4),n<t&&(t=n),t}let r=6;return e.xs?r=2:e.sm?r=3:e.md?r=4:e.lg?r=5:(e.xl||e.xxl)&&(r=6),n<r&&(r=n),r}function L(e,t,n){let r=3;return(e.md||e.sm)&&(r=2),e.xs&&(r=1),n<Math.ceil(r)&&(r=n),r}function R(e,t,n){let r=3;return(e.md||e.sm)&&(r=2),e.xs&&(r=1),n<Math.ceil(r)&&(r=n),r}function z(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function B(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function V(e,t,n){let r=4;return e.sm&&(r=3),e.xs&&(r=2),n<r&&(r=n),r}function H(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function U(e,t,n){let r=4;return e.xs?r=2:e.sm&&(r=3),n<r&&(r=n),r}function ge(e,t,n){let r=6;return e.xs?r=2:e.sm?r=3:e.md?r=4:e.lg&&(r=5),n<r&&(r=n),r}function W(e,t,n){if(n<4)return n;let r=5;return(e.xs||e.sm)&&(r=3),(e.md||e.lg)&&(r=4),n===4&&(e.xs||e.sm)&&(r=3),n<r&&(r=n),r}function G(e,t,n){let r=6;return e.xs&&(r=2),e.sm&&(r=3),e.md&&(r=4),e.lg&&(r=5),(e.xl||e.xxl)&&(r=6),n<r&&(r=n),r}function _e(e,t,n,r,i,a,o){return function(s){let c=s.touches.item(0).clientX;i||(t.current.style.transition=``,r(t.current.getBoundingClientRect().width),a(c));let l=(i-c)/n*100;(l<0&&e.offset===e.viewableItems||l>0&&e.offset===e.totalItems)&&(l=0),o(l)}}var K=7.5;function ve(e,t,n,r,i,a,o){return function(){e.current.style.transition=`transform .4s ease-in-out`,t(null),Math.abs(n)>=K&&(i({type:n>0?S.Next:S.Previous}),n>0&&a?a():n<0&&o&&o()),r(0)}}function ye(e,t,n,r,i,a){return e||i<=r?!0:t||a?n===r:!0}function be(e,t,n,r,i,a,o){return e||i<=r?!0:n===r?!1:t?a?!1:i<=n:o?n===i:!0}function xe(e,t){D.useEffect(()=>{!e||e.current||(e.current={jumpToIndex:e=>t({type:S.JumpToIndex,payload:{offset:e+1}})})},[e?.current])}var Se={offset:0,viewableItems:4,position:0,totalItems:0,contents:null,type:T.Row},q=e=>{let{viewableItems:t,offset:n,position:r,totalItems:i}=e,a=i-n;return a%t===0||a>t?{position:r-100,offset:n+t}:a<t?{position:r-a/t*100,offset:n+a}:{position:r,offset:n}},Ce=e=>{let{viewableItems:t,offset:n,position:r}=e,i=n-t;return i%t===0||i>t?{position:r+100,offset:n-t}:i<t?{position:r+i/t*100,offset:n-i}:{position:r,offset:n}};function we(e,t){let{type:n,payload:r={}}=t;switch(n){case S.Next:return{...e,...q(e)};case S.Previous:return{...e,...Ce(e)};case S.JumpToIndex:return{...e,offset:r.offset,position:(r.offset-1)*-100};case S.Resize:{let t=O(e.contents)(r.breakpoints,e.type,e.totalItems);return{...e,position:0,offset:t,viewableItems:t}}case S.Init:{let t=O(r.contents)(r.breakpoints,r.type,r.totalItems);return Te({...e,offset:t,viewableItems:t,type:r.type,contents:r.contents,totalItems:r.totalItems,position:0})}case S.Update:return{...e,totalItems:r.totalItems};default:return e}}function Te(e){return{...Se,...e}}var J=u();function Y(e){return e.hideDescription&&e.hideHeading?(0,J.jsx)(J.Fragment,{}):e.isPreviewing?(0,J.jsx)(x,{name:e.name,description:e.description}):(0,J.jsxs)(`div`,{className:`curated-widget-header`,children:[!e.hideHeading&&(0,J.jsx)(`div`,{className:`partial-loading-background curated-widget-heading`,style:{height:`1.5rem`,width:`12rem`}}),!e.hideDescription&&(0,J.jsx)(`div`,{className:`partial-loading-background curated-widget-description`,style:{height:`1.434375rem`,width:`16rem`}})]})}var X={rightOverflowGradient:`_rightOverflowGradient_14i04_1`,leftOverflowGradient:`_leftOverflowGradient_14i04_1`,partialItem:`_partialItem_14i04_19`,mobileScroll:`_mobileScroll_14i04_24`,widgetItemWrapper:`_widgetItemWrapper_14i04_32`};function Ee(e){let t=_();return t.xs?{itemCount:1,colSize:12}:t.sm?{itemCount:2,colSize:6}:t.md||t.lg?{itemCount:3,colSize:4}:{itemCount:e===`sm`?4:3,colSize:e===`sm`?3:4}}Z.defaultProps={size:`sm`,childComponent:({colSize:e})=>(0,J.jsx)(`div`,{className:`col-${e} px-1`,children:(0,J.jsx)(`div`,{className:`${X.partialItem} partial-loading-background rounded-3`})})};function Z(e){let{itemCount:t,colSize:n}=Ee(e.size),r=e.childComponent,i=[];for(let e=0;e<t;e++)i.push((0,J.jsx)(r,{colSize:n},e));return(0,J.jsxs)(`div`,{className:`widget`,children:[(0,J.jsx)(Y,{hideHeading:e.hideHeading,hideDescription:e.hideDescription,name:e.name,description:e.description,isPreviewing:e.isPreviewing}),(0,J.jsx)(`div`,{className:`row g-0 mx-n1`,children:i})]})}var De=`shared.fixedWidget`;Oe.defaultProps={type:T.Row,minimumItemCount:0,extraChildComponentProps:{},touchBehavior:`scroll`};function Oe(e){let{analyticsData:n={},getWidgetItemAnalyticsData:r=()=>{}}=e,[o,s]=D.useState(null),[c,l]=D.useState(null),[u,f]=D.useState(0),[p,m]=D.useReducer(we,Se,Te),g=D.useRef(null),[ne,v]=ee(),[y,b]=D.useState(!1),[C,w]=D.useState(!1);xe(e.controlsRef,m);let{ref:ue,inView:de}=oe({prevent:!e.lazyLoad}),E=fe(e,m,de);function O(t){let n=e.prefetched?e.collection:E.data;return n?(i.isFunction(e.setData)?e.setData(n):n)?.slice(0,t)??[]:[]}let k=O(e.limitTotalItems?12:1/0),A=e.trailingItems&&e.trailingItemLength?k.length+e.trailingItemLength:k.length;function j(){return e.limitTotalItems?O(1/0).length>A:!1}let M=p.offset===A,N=_(),{onFocusWidget:P,onBlurWidget:F,isTabbing:I,getFixedAttributes:L,focusNext:R,focusPrev:z}=se({type:`fixed`,state:p,containerRef:g});D.useEffect(()=>{m({type:S.Resize,payload:{breakpoints:N}})},[N]),D.useEffect(()=>{if(!e.prefetched)return;let t=e.type;t===T.ResourcesTile&&(t=T.Row),m({type:S.Init,payload:{breakpoints:N,type:t,contents:e.contents,totalItems:A}})},[e.collection?.length,e.prefetched]);function B(e,t){if(A===p.viewableItems){b(e),w(e);return}if(t+1===A){w(e);return}if(t===0){b(e);return}if((t+1-p.offset%p.viewableItems)%p.viewableItems===0){w(e);return}if((t-p.offset%p.viewableItems)%p.viewableItems===0){b(e);return}}function V(){return e.touchBehavior===`scroll`?re.isTabletOrMobile():!1}let H={type:p.type,collectionSize:A,contents:e.contents},U=he(e,E?.data||e.collection);if(E?.hasError)return(0,J.jsx)(J.Fragment,{});if(!e.prefetched&&!E?.data)return(0,J.jsx)(`div`,{ref:ue,children:(0,J.jsx)(e.partialComponent||Z,{})});if(!A||A<e.minimumItemCount)return(0,J.jsx)(J.Fragment,{});let ge=e.childComponent,W=t=>({id:U?.id,name:U?.name,direction:t===S.Next?`right`:`left`,...e.analyticsData}),G=!e.appLink||!M?!1:j(),K=V()||e.hideButtons,q=p.offset===p.viewableItems,Ce=A<=p.offset,Y=p.viewableItems<A;return(0,J.jsx)(`div`,{className:`mx-n4 mb-n3`,children:(0,J.jsxs)(`div`,{className:V()?`pb-3 overflow-hidden`:`px-4 pb-3 overflow-hidden`,children:[!e.hideName&&(0,J.jsx)(`div`,{className:V()?`px-4`:``,children:(0,J.jsx)(x,{name:U.name,description:U.description,appLink:me(e.appLink,U),onAppLinkClick:e.onAppLinkClick,analyticsData:{id:U?.id,name:U?.name,...e.analyticsData},analyticsOptions:h.getSliderHeadingAnalyticsOptions(),showSeeMoreLink:e.showSeeMoreLink??Y,content:k,isPreviewing:e.isPreviewing,widgetTypeId:e.widgetTypeId,badgeComponent:e.headingBadgeComponent,onClose:e.onClose,onFollow:e.onFollow,isFollowing:e.isFollowing,showFollowSpinner:e.showFollowSpinner})}),(0,J.jsxs)(`div`,{ref:ne,className:`position-relative mx-n1 ${V()?`${X.mobileScroll} px-4`:``} ${e.hideBleedingContent?`overflow-hidden-x`:``}`,children:[!K&&(0,J.jsxs)(J.Fragment,{children:[!e.hideBleedingContent&&!y&&!q&&(0,J.jsx)(`div`,{className:X.leftOverflowGradient}),(0,J.jsx)(ae,{direction:ie.Left,onClick:()=>{z(),m({type:S.Previous}),d.logUserAction(W(S.Previous),h.getSliderAnalyticsOptions()),i.isFunction(e.onPrevious)&&e.onPrevious()},hide:!!e.hideButtons||ye(y,v,p.offset,p.viewableItems,A,I),contents:e.contents,className:e.leftWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:p})]}),(0,J.jsxs)(ce,{position:p.position,positionType:le.Percentage,onTouchMove:e.touchBehavior===`drag`&&_e(p,g,c,l,o,s,f),onTouchEnd:e.touchBehavior===`drag`&&ve(g,s,u,f,m,e.onNext,e.onPrevious),ref:g,percentageDragged:u,children:[k.map((t,i)=>(0,J.jsx)(`li`,{onFocus:()=>P(i),onBlur:F,className:X.widgetItemWrapper,...L(i),children:(0,J.jsx)(ge,{data:t,collectionAppLink:e.appLink,getAppLink:e.getChildAppLink?()=>e.getChildAppLink(t):()=>null,context:H,preloadImage:pe(p,k)(t),thumbnailSize:e.thumbnailSize||te.Medium,analyticsData:{widgetId:U.id,widgetName:U.name,itemIndex:i,...n,...r(t)},analyticsOptions:{...e.analyticsOptions,...h.getSliderItemAnalyticsOptions()},onHover:e=>{V()||window.setTimeout(()=>{B(e,i)},e?0:200)},...e.extraChildComponentProps})},`${t.id}:${i}`)),e.trailingItems,V()&&(0,J.jsx)(`div`,{className:`ps-4`})]}),!K&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(ae,{direction:ie.Right,onClick:()=>{if(G){t.trigger(me(e.appLink,U));return}R(),m({type:S.Next}),d.logUserAction(W(S.Next),h.getSliderAnalyticsOptions()),i.isFunction(e.onNext)&&e.onNext()},hide:!!e.hideButtons||be(C,v,p.offset,p.viewableItems,A,G,I),contents:e.contents,hoverText:G&&a.getPhrase(De,`seeMore`),className:e.rightWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:p}),!e.hideBleedingContent&&!C&&!Ce&&(0,J.jsx)(`div`,{className:X.rightOverflowGradient})]})]})]})})}var Q={imageStyle:`_imageStyle_pcnjg_1`,item:`_item_pcnjg_6`,dashboard:`_dashboard_pcnjg_10`,playPage:`_playPage_pcnjg_25`,aspectRatio:`_aspectRatio_pcnjg_34`,outerContainer:`_outerContainer_pcnjg_39`,innerContainer:`_innerContainer_pcnjg_46`,actions:`_actions_pcnjg_46`,titleBelow:`_titleBelow_pcnjg_56`,thumbnailContainer:`_thumbnailContainer_pcnjg_59`,titleAbove:`_titleAbove_pcnjg_62`,teacherPack:`_teacherPack_pcnjg_65`,text:`_text_pcnjg_65`,hoverState:`_hoverState_pcnjg_71`,atomGuide:`_atomGuide_pcnjg_74`,studentActivity:`_studentActivity_pcnjg_83`,additionalMaterials:`_additionalMaterials_pcnjg_92`,userUploaded:`_userUploaded_pcnjg_101`,imageTypeResource:`_imageTypeResource_pcnjg_110`,download:`_download_pcnjg_116`};function ke(e){switch(e){case`atom-guide`:return Q.atomGuide;case`student-activity`:return Q.studentActivity;case`teacher-pack`:return Q.teacherPack;case`additional-materials`:return Q.additionalMaterials;default:return Q.userUploaded}}function Ae(e,t){let n=_();return t===`public`?!0:n.xs||n.sm||e.type!==`resource`||!(`metadata`in e)?!1:e.metadata.type===y.Image?!0:e.metadata.type===y.Pdf?!!e.url:!!e.pdf?.url}$.defaultProps={preloadImage:!0,actionBehaviour:`normal`};function $(e){let t=null;`metadata`in e.data&&(t=e.data.metadata);let i=v.isType(e.data,g.Resource);function a(t){let n=`
1
+ import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{r as n,t as r,v as i}from"./BJvPfCvt.chunk.js";import{t as a}from"./ImQRQGZr.chunk.js";import{C as o,M as s,dt as c,l,lt as u,n as d,ut as f}from"./Dun43GrB.chunk.js";import{n as p,t as m}from"./Ca1QPe-q2.chunk.js";import{t as ee}from"./iuoIcGAm2.chunk.js";import{r as te}from"./D2om474U2.chunk.js";import{t as h}from"./B8R4YVaF2.chunk.js";import{t as g}from"./X4vTaPlk.chunk.js";import{t as ne}from"./C6L8Y-TQ.chunk.js";import{N as _,i as re}from"./app-gjHxcZG3.js";import{t as v}from"./CnDOpuFK.chunk.js";import{n as ie,t as ae}from"./B-6uVsUw2.chunk.js";import{t as y}from"./NrXAMmgy2.chunk.js";import{t as b}from"./BK011l4Q2.chunk.js";import{n as oe}from"./Bt57Tmef2.chunk.js";import{a as x,i as se,n as ce,r as le,t as S}from"./kfFYr9dc.chunk.js";import{i as C,t as w}from"./DobKejA8.chunk.js";import{n as ue,t as de}from"./fnfhCa1P.chunk.js";var T=function(e){return e[e.Row=0]=`Row`,e[e.LargeRow=1]=`LargeRow`,e[e.Hero=2]=`Hero`,e[e.ResourcesTile=3]=`ResourcesTile`,e}({}),E=function(e){return e.Videos=`videos`,e.FeedVideos=`feed videos`,e.Series=`series`,e.Subjects=`subjects`,e.Playlists=`playlists`,e.Interactives=`interactives`,e.Clips=`clips`,e.PlayPageResources=`play page resources`,e.DashboardResources=`dashboard resources`,e.Libraries=`Libraries`,e.Folders=`Folders`,e.RecentActivities=`recent activities`,e.SmallSeries=`small series`,e.Companies=`companies`,e.PartnerProfiles=`partner profiles`,e.Ratings=`ratings`,e.SpecialEvents=`special events`,e.InteractivesV2=`interactives v2`,e.ClipsV2=`clips v2`,e.PlayPageResourcesV2=`playpage resources v2`,e}({}),D=e(f());function fe(e,t,n){let r=e.collection,a;(!r||s.isEmpty(r))&&!e.prefetched&&(a=e.fetch(n),r=a.data);let o=i.isFunction(e.setData)&&r?e.setData(r):r,c=o,l=_();return D.useEffect(()=>{if(!r||s.isEmpty(r))return;e.limitTotalItems&&(c=o.length>12?o.slice(0,12):o);let n=e.type;n===T.ResourcesTile&&(n=T.Row),t({type:S.Init,payload:{totalItems:c.length,breakpoints:l,type:n,contents:e.contents}})},[o?.length]),a}function pe(e,t){let{offset:n,viewableItems:r}=e,i=n,a=[];for(let e=0;e<i+r;e++)a.push(e);return function(e){let n=t.indexOf(e);return a.includes(n)}}function me(e,t){if(e)return{...e,args:e.args||[t.id,c.slugify(t.name)]}}function he(e,t){let{id:n,name:r,description:i}=e,a={};return Array.isArray(t)?{id:n,name:r,description:i}:(e.id&&(a.id=n),e.name&&(a.name=r),e.description&&(a.description=i),{...t,...a})}function O(e){switch(e){case E.Playlists:return A;case E.Videos:return N;case E.RecentActivities:return P;case E.FeedVideos:return F;case E.Subjects:return I;case E.InteractivesV2:return z;case E.Interactives:return L;case E.ClipsV2:return B;case E.Clips:return R;case E.PlayPageResources:return V;case E.PlayPageResourcesV2:return H;case E.DashboardResources:return N;case E.Libraries:case E.Folders:return M;case E.Ratings:return W;case E.SpecialEvents:return G;case E.Companies:return j;case E.SmallSeries:return ge;case E.PartnerProfiles:return k;case E.Series:default:return U}}function k(e,t,n){let r=6;return e.xs||e.sm?r=2:e.md&&(r=4),n<r&&(r=n),r}function A(e,t,n){let r=5;return e.xs?r=2:e.sm?r=3:e.md&&(r=4),n<r&&(r=n),r}function j(e,t,n){let r=8;return e.xs||e.sm?r=4:e.md&&(r=6),n<r&&(r=n),r}function M(e,t,n){let r=3;return e.xs||e.sm?r=1:e.md?r=2:e.lg&&(r=3),n<r&&(r=n),r}function N(e,t,n){let r=4;return e.xs&&(r=1),e.sm&&(r=2),(e.md||e.lg)&&(r=3),t===T.LargeRow&&r>3&&(r=3),n<r&&(r=n),r}function P(e,t,n){let r=4;return e.xs&&(r=2),e.sm&&(r=3),n<r&&(r=n),r}function F(e,t,n){return 1}function I(e,t,n){if(t===T.LargeRow){let t=5;return e.xs?t=2:e.sm?t=3:e.md&&(t=4),n<t&&(t=n),t}let r=6;return e.xs?r=2:e.sm?r=3:e.md?r=4:e.lg?r=5:(e.xl||e.xxl)&&(r=6),n<r&&(r=n),r}function L(e,t,n){let r=3;return(e.md||e.sm)&&(r=2),e.xs&&(r=1),n<Math.ceil(r)&&(r=n),r}function R(e,t,n){let r=3;return(e.md||e.sm)&&(r=2),e.xs&&(r=1),n<Math.ceil(r)&&(r=n),r}function z(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function B(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function V(e,t,n){let r=4;return e.sm&&(r=3),e.xs&&(r=2),n<r&&(r=n),r}function H(e,t,n){let r=3;return e.xs&&(r=2),n<r&&(r=n),r}function U(e,t,n){let r=4;return e.xs?r=2:e.sm&&(r=3),n<r&&(r=n),r}function ge(e,t,n){let r=6;return e.xs?r=2:e.sm?r=3:e.md?r=4:e.lg&&(r=5),n<r&&(r=n),r}function W(e,t,n){if(n<4)return n;let r=5;return(e.xs||e.sm)&&(r=3),(e.md||e.lg)&&(r=4),n===4&&(e.xs||e.sm)&&(r=3),n<r&&(r=n),r}function G(e,t,n){let r=6;return e.xs&&(r=2),e.sm&&(r=3),e.md&&(r=4),e.lg&&(r=5),(e.xl||e.xxl)&&(r=6),n<r&&(r=n),r}function _e(e,t,n,r,i,a,o){return function(s){let c=s.touches.item(0).clientX;i||(t.current.style.transition=``,r(t.current.getBoundingClientRect().width),a(c));let l=(i-c)/n*100;(l<0&&e.offset===e.viewableItems||l>0&&e.offset===e.totalItems)&&(l=0),o(l)}}var K=7.5;function ve(e,t,n,r,i,a,o){return function(){e.current.style.transition=`transform .4s ease-in-out`,t(null),Math.abs(n)>=K&&(i({type:n>0?S.Next:S.Previous}),n>0&&a?a():n<0&&o&&o()),r(0)}}function ye(e,t,n,r,i,a){return e||i<=r?!0:t||a?n===r:!0}function be(e,t,n,r,i,a,o){return e||i<=r?!0:n===r?!1:t?a?!1:i<=n:o?n===i:!0}function xe(e,t){D.useEffect(()=>{!e||e.current||(e.current={jumpToIndex:e=>t({type:S.JumpToIndex,payload:{offset:e+1}})})},[e?.current])}var Se={offset:0,viewableItems:4,position:0,totalItems:0,contents:null,type:T.Row},q=e=>{let{viewableItems:t,offset:n,position:r,totalItems:i}=e,a=i-n;return a%t===0||a>t?{position:r-100,offset:n+t}:a<t?{position:r-a/t*100,offset:n+a}:{position:r,offset:n}},Ce=e=>{let{viewableItems:t,offset:n,position:r}=e,i=n-t;return i%t===0||i>t?{position:r+100,offset:n-t}:i<t?{position:r+i/t*100,offset:n-i}:{position:r,offset:n}};function we(e,t){let{type:n,payload:r={}}=t;switch(n){case S.Next:return{...e,...q(e)};case S.Previous:return{...e,...Ce(e)};case S.JumpToIndex:return{...e,offset:r.offset,position:(r.offset-1)*-100};case S.Resize:{let t=O(e.contents)(r.breakpoints,e.type,e.totalItems);return{...e,position:0,offset:t,viewableItems:t}}case S.Init:{let t=O(r.contents)(r.breakpoints,r.type,r.totalItems);return Te({...e,offset:t,viewableItems:t,type:r.type,contents:r.contents,totalItems:r.totalItems,position:0})}case S.Update:return{...e,totalItems:r.totalItems};default:return e}}function Te(e){return{...Se,...e}}var J=u();function Y(e){return e.hideDescription&&e.hideHeading?(0,J.jsx)(J.Fragment,{}):e.isPreviewing?(0,J.jsx)(x,{name:e.name,description:e.description}):(0,J.jsxs)(`div`,{className:`curated-widget-header`,children:[!e.hideHeading&&(0,J.jsx)(`div`,{className:`partial-loading-background curated-widget-heading`,style:{height:`1.5rem`,width:`12rem`}}),!e.hideDescription&&(0,J.jsx)(`div`,{className:`partial-loading-background curated-widget-description`,style:{height:`1.434375rem`,width:`16rem`}})]})}var X={rightOverflowGradient:`_rightOverflowGradient_14i04_1`,leftOverflowGradient:`_leftOverflowGradient_14i04_1`,partialItem:`_partialItem_14i04_19`,mobileScroll:`_mobileScroll_14i04_24`,widgetItemWrapper:`_widgetItemWrapper_14i04_32`};function Ee(e){let t=_();return t.xs?{itemCount:1,colSize:12}:t.sm?{itemCount:2,colSize:6}:t.md||t.lg?{itemCount:3,colSize:4}:{itemCount:e===`sm`?4:3,colSize:e===`sm`?3:4}}Z.defaultProps={size:`sm`,childComponent:({colSize:e})=>(0,J.jsx)(`div`,{className:`col-${e} px-1`,children:(0,J.jsx)(`div`,{className:`${X.partialItem} partial-loading-background rounded-3`})})};function Z(e){let{itemCount:t,colSize:n}=Ee(e.size),r=e.childComponent,i=[];for(let e=0;e<t;e++)i.push((0,J.jsx)(r,{colSize:n},e));return(0,J.jsxs)(`div`,{className:`widget`,children:[(0,J.jsx)(Y,{hideHeading:e.hideHeading,hideDescription:e.hideDescription,name:e.name,description:e.description,isPreviewing:e.isPreviewing}),(0,J.jsx)(`div`,{className:`row g-0 mx-n1`,children:i})]})}var De=`shared.fixedWidget`;Oe.defaultProps={type:T.Row,minimumItemCount:0,extraChildComponentProps:{},touchBehavior:`scroll`};function Oe(e){let{analyticsData:n={},getWidgetItemAnalyticsData:r=()=>{}}=e,[o,s]=D.useState(null),[c,l]=D.useState(null),[u,f]=D.useState(0),[p,m]=D.useReducer(we,Se,Te),g=D.useRef(null),[ne,v]=ee(),[y,b]=D.useState(!1),[C,w]=D.useState(!1);xe(e.controlsRef,m);let{ref:ue,inView:de}=oe({prevent:!e.lazyLoad}),E=fe(e,m,de);function O(t){let n=e.prefetched?e.collection:E.data;return n?(i.isFunction(e.setData)?e.setData(n):n)?.slice(0,t)??[]:[]}let k=O(e.limitTotalItems?12:1/0),A=e.trailingItems&&e.trailingItemLength?k.length+e.trailingItemLength:k.length;function j(){return e.limitTotalItems?O(1/0).length>A:!1}let M=p.offset===A,N=_(),{onFocusWidget:P,onBlurWidget:F,isTabbing:I,getFixedAttributes:L,focusNext:R,focusPrev:z}=se({type:`fixed`,state:p,containerRef:g});D.useEffect(()=>{m({type:S.Resize,payload:{breakpoints:N}})},[N]),D.useEffect(()=>{if(!e.prefetched)return;let t=e.type;t===T.ResourcesTile&&(t=T.Row),m({type:S.Init,payload:{breakpoints:N,type:t,contents:e.contents,totalItems:A}})},[e.collection?.length,e.prefetched]);function B(e,t){if(A===p.viewableItems){b(e),w(e);return}if(t+1===A){w(e);return}if(t===0){b(e);return}if((t+1-p.offset%p.viewableItems)%p.viewableItems===0){w(e);return}if((t-p.offset%p.viewableItems)%p.viewableItems===0){b(e);return}}function V(){return e.touchBehavior===`scroll`?re.isTabletOrMobile():!1}let H={type:p.type,collectionSize:A,contents:e.contents},U=he(e,E?.data||e.collection);if(E?.hasError)return(0,J.jsx)(J.Fragment,{});if(!e.prefetched&&!E?.data)return(0,J.jsx)(`div`,{ref:ue,children:(0,J.jsx)(e.partialComponent||Z,{})});if(!A||A<e.minimumItemCount)return(0,J.jsx)(J.Fragment,{});let ge=e.childComponent,W=t=>({id:U?.id,name:U?.name,direction:t===S.Next?`right`:`left`,...e.analyticsData}),G=!e.appLink||!M?!1:j(),K=V()||e.hideButtons,q=p.offset===p.viewableItems,Ce=A<=p.offset,Y=p.viewableItems<A;return(0,J.jsx)(`div`,{className:`mx-n4 mb-n3`,children:(0,J.jsxs)(`div`,{className:V()?`pb-3 overflow-hidden`:`px-4 pb-3 overflow-hidden`,children:[!e.hideName&&(0,J.jsx)(`div`,{className:V()?`px-4`:``,children:(0,J.jsx)(x,{name:U.name,description:U.description,appLink:me(e.appLink,U),onAppLinkClick:e.onAppLinkClick,analyticsData:{id:U?.id,name:U?.name,...e.analyticsData},analyticsOptions:h.getSliderHeadingAnalyticsOptions(),showSeeMoreLink:e.showSeeMoreLink??Y,content:k,isPreviewing:e.isPreviewing,widgetTypeId:e.widgetTypeId,badgeComponent:e.headingBadgeComponent,onClose:e.onClose,onFollow:e.onFollow,isFollowing:e.isFollowing,showFollowSpinner:e.showFollowSpinner})}),(0,J.jsxs)(`div`,{ref:ne,className:`position-relative mx-n1 ${V()?`${X.mobileScroll} px-4`:``} ${e.hideBleedingContent?`overflow-hidden-x`:``}`,children:[!K&&(0,J.jsxs)(J.Fragment,{children:[!e.hideBleedingContent&&!y&&!q&&(0,J.jsx)(`div`,{className:X.leftOverflowGradient}),(0,J.jsx)(ae,{direction:ie.Left,onClick:()=>{z(),m({type:S.Previous}),d.logUserAction(W(S.Previous),h.getSliderAnalyticsOptions()),i.isFunction(e.onPrevious)&&e.onPrevious()},hide:!!e.hideButtons||ye(y,v,p.offset,p.viewableItems,A,I),contents:e.contents,className:e.leftWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:p})]}),(0,J.jsxs)(ce,{position:p.position,positionType:le.Percentage,onTouchMove:e.touchBehavior===`drag`&&_e(p,g,c,l,o,s,f),onTouchEnd:e.touchBehavior===`drag`&&ve(g,s,u,f,m,e.onNext,e.onPrevious),ref:g,percentageDragged:u,children:[k.map((t,i)=>(0,J.jsx)(`li`,{onFocus:()=>P(i),onBlur:F,className:X.widgetItemWrapper,...L(i),children:(0,J.jsx)(ge,{data:t,collectionAppLink:e.appLink,getAppLink:e.getChildAppLink?()=>e.getChildAppLink(t):()=>null,context:H,preloadImage:pe(p,k)(t),thumbnailSize:e.thumbnailSize||te.Medium,analyticsData:{widgetId:U.id,widgetName:U.name,itemIndex:i,...n,...r(t)},analyticsOptions:{...e.analyticsOptions,...h.getSliderItemAnalyticsOptions()},onHover:e=>{V()||window.setTimeout(()=>{B(e,i)},e?0:200)},...e.extraChildComponentProps})},`${t.id}:${i}`)),e.trailingItems,V()&&(0,J.jsx)(`div`,{className:`ps-4`})]}),!K&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(ae,{direction:ie.Right,onClick:()=>{if(G){t.trigger(me(e.appLink,U));return}R(),m({type:S.Next}),d.logUserAction(W(S.Next),h.getSliderAnalyticsOptions()),i.isFunction(e.onNext)&&e.onNext()},hide:!!e.hideButtons||be(C,v,p.offset,p.viewableItems,A,G,I),contents:e.contents,hoverText:G&&a.getPhrase(De,`seeMore`),className:e.rightWidgetButtonClassName,hideExtendedClickableArea:e.hideExtendedClickableArea,state:p}),!e.hideBleedingContent&&!C&&!Ce&&(0,J.jsx)(`div`,{className:X.rightOverflowGradient})]})]})]})})}var Q={imageStyle:`_imageStyle_pcnjg_1`,item:`_item_pcnjg_6`,dashboard:`_dashboard_pcnjg_10`,playPage:`_playPage_pcnjg_25`,aspectRatio:`_aspectRatio_pcnjg_34`,outerContainer:`_outerContainer_pcnjg_39`,innerContainer:`_innerContainer_pcnjg_46`,actions:`_actions_pcnjg_46`,titleBelow:`_titleBelow_pcnjg_56`,thumbnailContainer:`_thumbnailContainer_pcnjg_59`,titleAbove:`_titleAbove_pcnjg_62`,teacherPack:`_teacherPack_pcnjg_65`,text:`_text_pcnjg_65`,hoverState:`_hoverState_pcnjg_71`,atomGuide:`_atomGuide_pcnjg_74`,studentActivity:`_studentActivity_pcnjg_83`,additionalMaterials:`_additionalMaterials_pcnjg_92`,userUploaded:`_userUploaded_pcnjg_101`,imageTypeResource:`_imageTypeResource_pcnjg_110`,download:`_download_pcnjg_116`};function ke(e){switch(e){case`atom-guide`:return Q.atomGuide;case`student-activity`:return Q.studentActivity;case`teacher-pack`:return Q.teacherPack;case`additional-materials`:return Q.additionalMaterials;default:return Q.userUploaded}}function Ae(e,t){let n=_();return t===`public`?!0:n.xs||n.sm||e.type!==`resource`||!(`metadata`in e)?!1:e.metadata.type===y.Image?!0:e.metadata.type===y.Pdf?!!e.url:!!e.pdf?.url}$.defaultProps={preloadImage:!0,actionBehaviour:`normal`};function $(e){let t=null;`metadata`in e.data&&(t=e.data.metadata);let i=v.isType(e.data,g.Resource);function a(t){let n=`
2
2
  d-flex flex-column align-items-center justify-content-end rounded-3 h-100
3
3
  position-relative ${ke(t)} ${Q.innerContainer}`;return e.theme?.containerClass?n+=` ${e.theme.containerClass}`:n+=` pt-3 px-3`,e.applyHoverState&&(n+=` ${Q.hoverState}`),n}return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`div`,{className:Q.aspectRatio,children:(0,J.jsx)(`div`,{className:Q.outerContainer,children:(0,J.jsxs)(`div`,{className:a(t?.resourceType),children:[e.titlePosition===`above`&&(0,J.jsx)(n,{title:e.data.name,children:(0,J.jsx)(`h3`,{className:`text-center text-break h5 mb-3 ${Q.text}`,children:(0,J.jsx)(`span`,{className:`clamp-1`,children:e.data.name})})}),(0,J.jsx)(`div`,{className:`
4
4
  ${e.theme?.thumbnailContainerClass??``} w-75 overflow-hidden
5
5
  ${Q.thumbnailContainer} ${e.titlePosition===`above`?Q.titleAbove:``}
6
6
  ${Q.imageStyle}
7
7
  `,children:(0,J.jsx)(ue,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage})}),i&&e.onClickDownload&&e.actionBehaviour===`normal`&&(0,J.jsx)(`div`,{className:Q.actions,children:(0,J.jsx)(p,{onClick:t=>e.onClickDownload(t,e.data),className:`${Q.download} d-flex align-items-center justify-content-center`,children:(0,J.jsx)(r,{svg:b})})}),!e.hideTypeBadge&&i&&(0,J.jsx)(w,{typeId:g.Resource})]})})}),e.titlePosition===`below`&&(0,J.jsxs)(`div`,{className:`mt-1 ${Q.titleBelow}`,children:[v.isType(e.data,g.Resource)&&!!e.data?.metadata?.resourceType&&(0,J.jsx)(C,{children:de.getResourceTypeName(e.data.metadata.resourceType)}),(0,J.jsx)(`h3`,{className:`h6 clamp-2`,children:e.data.name})]})]})}var je=D.memo(function(e){let n=Ae(e.data,e.actionBehaviour);function r(){return e.location===`play-page`?Q.playPage:Q.dashboard}let i={...e.analyticsData,...e.data},a={...e.analyticsOptions,actionType:o.Click,entity:e.data.typeId===g.Resource?l.Resource:l.Link};function s(){d.logUserAction(i,a)}let c={...e,applyHoverState:n||!!e.data.url};return(0,J.jsx)(`div`,{className:`px-1 flex-shrink-0 ${Q.item} ${r()} ${ne.RESOURCE_ITEM_SELECTOR}`,children:(()=>{let r=`d-block no-decoration`;return e.data.type===`link`?(0,J.jsx)(`a`,{href:e.data.url,target:`_blank`,className:r,onClick:s,children:(0,J.jsx)($,{...c})}):n?e.actionBehaviour===`public`?(0,J.jsx)(`div`,{className:`${r} cursor-pointer d-inline`,onClick:()=>{s(),t.trigger(e.getAppLink(e.data))},children:(0,J.jsx)($,{...c})}):(0,J.jsx)(m,{appLink:e.getAppLink(e.data),className:r,analyticsData:i,analyticsOptions:a,children:(0,J.jsx)($,{...c})}):e.data.url?(0,J.jsx)(`a`,{href:e.data.url,className:r,onClick:s,children:(0,J.jsx)($,{...c})}):(0,J.jsx)(`div`,{className:r,children:(0,J.jsx)($,{...c})})})()})});export{Y as a,Z as i,je as n,E as o,Oe as r,T as s,$ as t};
8
- //# sourceMappingURL=Llxar-VU.chunk.js.map
8
+ //# sourceMappingURL=CcGYZb9f.chunk.js.map