@clickview/reports 0.89.0-rc.0 → 0.89.0-rc.2

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 (70) hide show
  1. package/dist/.vite/manifest.json +262 -262
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{B-Ygge5X2.chunk.js → 9w-0PYPT2.chunk.js} +2 -2
  5. package/dist/scripts/{B-Ygge5X2.chunk.js.map → 9w-0PYPT2.chunk.js.map} +1 -1
  6. package/dist/scripts/{B2vNpjBe2.chunk.js → B9pFKWJ02.chunk.js} +2 -2
  7. package/dist/scripts/{B2vNpjBe2.chunk.js.map → B9pFKWJ02.chunk.js.map} +1 -1
  8. package/dist/scripts/{CgRzcaPA2.chunk.js → BNN5pscb2.chunk.js} +2 -2
  9. package/dist/scripts/{CgRzcaPA2.chunk.js.map → BNN5pscb2.chunk.js.map} +1 -1
  10. package/dist/scripts/{CaEKrEVr.chunk.js → BnSjmWJq.chunk.js} +2 -2
  11. package/dist/scripts/{CaEKrEVr.chunk.js.map → BnSjmWJq.chunk.js.map} +1 -1
  12. package/dist/scripts/{DiGtRGOr.chunk.js → BnzWs-z6.chunk.js} +2 -2
  13. package/dist/scripts/{DiGtRGOr.chunk.js.map → BnzWs-z6.chunk.js.map} +1 -1
  14. package/dist/scripts/{Cn2gjFFW2.chunk.js → C2ypnyI02.chunk.js} +2 -2
  15. package/dist/scripts/{Cn2gjFFW2.chunk.js.map → C2ypnyI02.chunk.js.map} +1 -1
  16. package/dist/scripts/{DJcJp7v8.chunk.js → CLk46QjF.chunk.js} +2 -2
  17. package/dist/scripts/{DJcJp7v8.chunk.js.map → CLk46QjF.chunk.js.map} +1 -1
  18. package/dist/scripts/{CetIvuh92.chunk.js → CO_jJj0j2.chunk.js} +2 -2
  19. package/dist/scripts/{CetIvuh92.chunk.js.map → CO_jJj0j2.chunk.js.map} +1 -1
  20. package/dist/scripts/{BDvsE_VK2.chunk.js → CSucqxC_2.chunk.js} +2 -2
  21. package/dist/scripts/{BDvsE_VK2.chunk.js.map → CSucqxC_2.chunk.js.map} +1 -1
  22. package/dist/scripts/{CBsl5x752.chunk.js → CTdvdzIT2.chunk.js} +2 -2
  23. package/dist/scripts/{CBsl5x752.chunk.js.map → CTdvdzIT2.chunk.js.map} +1 -1
  24. package/dist/scripts/CcjaxIhQ.chunk.js +1 -0
  25. package/dist/scripts/{B1oWolq8.chunk.js → Ci_TQUTp.chunk.js} +2 -2
  26. package/dist/scripts/{B1oWolq8.chunk.js.map → Ci_TQUTp.chunk.js.map} +1 -1
  27. package/dist/scripts/{DeOoaF9L.chunk.js → CzyQ8kBM.chunk.js} +2 -2
  28. package/dist/scripts/{DeOoaF9L.chunk.js.map → CzyQ8kBM.chunk.js.map} +1 -1
  29. package/dist/scripts/{DStv8HCO.chunk.js → D09t8fP0.chunk.js} +2 -2
  30. package/dist/scripts/{DStv8HCO.chunk.js.map → D09t8fP0.chunk.js.map} +1 -1
  31. package/dist/scripts/{DW99FddT2.chunk.js → DD6DxO8_2.chunk.js} +2 -2
  32. package/dist/scripts/{DW99FddT2.chunk.js.map → DD6DxO8_2.chunk.js.map} +1 -1
  33. package/dist/scripts/{D9h-ARYb2.chunk.js → DFrb5tDP2.chunk.js} +2 -2
  34. package/dist/scripts/{D9h-ARYb2.chunk.js.map → DFrb5tDP2.chunk.js.map} +1 -1
  35. package/dist/scripts/{akSezG_a2.chunk.js → DMfhvxDs2.chunk.js} +2 -2
  36. package/dist/scripts/{akSezG_a2.chunk.js.map → DMfhvxDs2.chunk.js.map} +1 -1
  37. package/dist/scripts/{BJikOj1X.chunk.js → DNRNNhy3.chunk.js} +2 -2
  38. package/dist/scripts/{BJikOj1X.chunk.js.map → DNRNNhy3.chunk.js.map} +1 -1
  39. package/dist/scripts/{Dv0X7vtO.chunk.js → DRThGgko.chunk.js} +2 -2
  40. package/dist/scripts/{Dv0X7vtO.chunk.js.map → DRThGgko.chunk.js.map} +1 -1
  41. package/dist/scripts/{CiL7Usrw.chunk.js → DTga4UBD.chunk.js} +2 -2
  42. package/dist/scripts/{CiL7Usrw.chunk.js.map → DTga4UBD.chunk.js.map} +1 -1
  43. package/dist/scripts/DfzH_ahn.chunk.js +1 -0
  44. package/dist/scripts/{CXKHpDxD.chunk.js → DjoLfFO8.chunk.js} +2 -2
  45. package/dist/scripts/{CXKHpDxD.chunk.js.map → DjoLfFO8.chunk.js.map} +1 -1
  46. package/dist/scripts/{Bp2lnEra.chunk.js → DjtI-11t.chunk.js} +2 -2
  47. package/dist/scripts/{Bp2lnEra.chunk.js.map → DjtI-11t.chunk.js.map} +1 -1
  48. package/dist/scripts/{Du8vq00B.chunk.js → DnC9RoGV.chunk.js} +3 -3
  49. package/dist/scripts/{Du8vq00B.chunk.js.map → DnC9RoGV.chunk.js.map} +1 -1
  50. package/dist/scripts/{BSEHFBul.chunk.js → Pvqa-Uuo.chunk.js} +2 -2
  51. package/dist/scripts/{BSEHFBul.chunk.js.map → Pvqa-Uuo.chunk.js.map} +1 -1
  52. package/dist/scripts/{2K4rAC5A2.chunk.js → XIOc3Va_2.chunk.js} +2 -2
  53. package/dist/scripts/{2K4rAC5A2.chunk.js.map → XIOc3Va_2.chunk.js.map} +1 -1
  54. package/dist/scripts/{DzJf6gXa.chunk.js → ZeBQ-OW-.chunk.js} +2 -2
  55. package/dist/scripts/{DzJf6gXa.chunk.js.map → ZeBQ-OW-.chunk.js.map} +1 -1
  56. package/dist/scripts/{app-BBppvgGe.js → app-DomX9RS2.js} +3 -3
  57. package/dist/scripts/{app-BBppvgGe.js.map → app-DomX9RS2.js.map} +1 -1
  58. package/dist/scripts/{D4W-E97s2.chunk.js → hLeAzv3u2.chunk.js} +2 -2
  59. package/dist/scripts/{D4W-E97s2.chunk.js.map → hLeAzv3u2.chunk.js.map} +1 -1
  60. package/dist/scripts/{kFxyYsah.chunk.js → kAYaBqYw.chunk.js} +2 -2
  61. package/dist/scripts/{kFxyYsah.chunk.js.map → kAYaBqYw.chunk.js.map} +1 -1
  62. package/dist/scripts/{C-W6YIv-.chunk.js → kzm6epUV.chunk.js} +2 -2
  63. package/dist/scripts/{C-W6YIv-.chunk.js.map → kzm6epUV.chunk.js.map} +1 -1
  64. package/dist/scripts/{DVmy2mN0.chunk.js → vJbbo87R.chunk.js} +2 -2
  65. package/dist/scripts/{DVmy2mN0.chunk.js.map → vJbbo87R.chunk.js.map} +1 -1
  66. package/dist/scripts/{CMdB_3nq2.chunk.js → wJ4aGP5K2.chunk.js} +2 -2
  67. package/dist/scripts/{CMdB_3nq2.chunk.js.map → wJ4aGP5K2.chunk.js.map} +1 -1
  68. package/package.json +1 -1
  69. package/dist/scripts/CkdTzI6P.chunk.js +0 -1
  70. package/dist/scripts/DKeKn7Hr.chunk.js +0 -1
@@ -1,4 +1,4 @@
1
- import{N as e,P as t,en as n,qn as r,st as i}from"./Db8SRTe2.chunk.js";import{r as a,v as o,y as s}from"./B4CGL9yn.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{n as l,r as u}from"./Drne0tRP.chunk.js";import{L as d,et as f,n as p}from"./app-BBppvgGe.js";import{n as m,t as h}from"./CBsl5x752.chunk.js";var g={pillTabSelector:`_pillTabSelector_a6f6x_1`,tab:`_tab_a6f6x_4`,minWidth:`_minWidth_a6f6x_21`,radiusSmall:`_radiusSmall_a6f6x_24`,tabLink:`_tabLink_a6f6x_35`},_=r(i()),v=t();function y(e){return typeof e.tab.count==`number`?e.badgeType===m.RoundCount?(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:e.badgeType,data:e.tab.count,className:e.className})}):(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:m.Count,data:e.tab.count,className:e.className})}):(0,v.jsx)(v.Fragment,{})}function b(e){return(0,v.jsxs)(v.Fragment,{children:[!!e.tab.svg&&(0,v.jsx)(`div`,{className:e.tab.name?`pe-1`:``,children:(0,v.jsx)(a,{svg:e.tab.svg,size:e.tab.svgSize})}),e.formatDisplayText?.(e.tab.name)??e.tab.name,(0,v.jsx)(y,{tab:e.tab,badgeType:e.badgeType,className:e.badgeClassName})]})}function x(t){let{borderRadius:r=`lg`}=t,i=d();function a(t){t.analyticsData&&t.analyticsOptions&&e.logUserAction(t.analyticsData,t.analyticsOptions)}function c(e){e.active||!e.onSelect||(e.onSelect(),a(e))}function l(e){let r=e.target.value,i=t.tabs.find(e=>e.name===r);!i||i.active||(a(i),n.trigger(i.appLink))}let u=t.tabs.find(e=>e.active),f=t.forceSmallScreenDropdown||t.enableSmallScreenSupport&&(i.sm||i.xs);return(0,v.jsxs)(`nav`,{className:t.className??``,children:[f&&(0,v.jsx)(`select`,{className:`form-select`,onChange:l,value:u?.name,style:{minWidth:`150px`},children:t.tabs.map((e,n)=>e.hide?(0,v.jsx)(_.Fragment,{},n):(0,v.jsx)(`option`,{value:e.name,children:t.formatDisplayText?.(e.name)??e.name},n))}),!f&&(0,v.jsx)(`ul`,{className:`
1
+ import{N as e,P as t,en as n,qn as r,st as i}from"./Db8SRTe2.chunk.js";import{r as a,v as o,y as s}from"./B4CGL9yn.chunk.js";import{t as c}from"./BpIQdoUJ.chunk.js";import{n as l,r as u}from"./Drne0tRP.chunk.js";import{L as d,et as f,n as p}from"./app-DomX9RS2.js";import{n as m,t as h}from"./CTdvdzIT2.chunk.js";var g={pillTabSelector:`_pillTabSelector_a6f6x_1`,tab:`_tab_a6f6x_4`,minWidth:`_minWidth_a6f6x_21`,radiusSmall:`_radiusSmall_a6f6x_24`,tabLink:`_tabLink_a6f6x_35`},_=r(i()),v=t();function y(e){return typeof e.tab.count==`number`?e.badgeType===m.RoundCount?(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:e.badgeType,data:e.tab.count,className:e.className})}):(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:m.Count,data:e.tab.count,className:e.className})}):(0,v.jsx)(v.Fragment,{})}function b(e){return(0,v.jsxs)(v.Fragment,{children:[!!e.tab.svg&&(0,v.jsx)(`div`,{className:e.tab.name?`pe-1`:``,children:(0,v.jsx)(a,{svg:e.tab.svg,size:e.tab.svgSize})}),e.formatDisplayText?.(e.tab.name)??e.tab.name,(0,v.jsx)(y,{tab:e.tab,badgeType:e.badgeType,className:e.badgeClassName})]})}function x(t){let{borderRadius:r=`lg`}=t,i=d();function a(t){t.analyticsData&&t.analyticsOptions&&e.logUserAction(t.analyticsData,t.analyticsOptions)}function c(e){e.active||!e.onSelect||(e.onSelect(),a(e))}function l(e){let r=e.target.value,i=t.tabs.find(e=>e.name===r);!i||i.active||(a(i),n.trigger(i.appLink))}let u=t.tabs.find(e=>e.active),f=t.forceSmallScreenDropdown||t.enableSmallScreenSupport&&(i.sm||i.xs);return(0,v.jsxs)(`nav`,{className:t.className??``,children:[f&&(0,v.jsx)(`select`,{className:`form-select`,onChange:l,value:u?.name,style:{minWidth:`150px`},children:t.tabs.map((e,n)=>e.hide?(0,v.jsx)(_.Fragment,{},n):(0,v.jsx)(`option`,{value:e.name,children:t.formatDisplayText?.(e.name)??e.name},n))}),!f&&(0,v.jsx)(`ul`,{className:`
2
2
  list-unstyled d-inline-block m-0 ${g.pillTabSelector}
3
3
  ${r?g.radiusSmall:``}
4
4
  ${t.listClassName}
@@ -12,4 +12,4 @@ import{N as e,P as t,en as n,qn as r,st as i}from"./Db8SRTe2.chunk.js";import{r
12
12
  cursor-pointer d-flex align-items-center justify-content-center
13
13
  text-decoration-none text-reset px-2 text-nowrap ${g.tabLink}
14
14
  `,onClick:()=>c(e),children:(0,v.jsx)(b,{tab:e,formatDisplayText:t.formatDisplayText,badgeClassName:t.badgeClassName,badgeType:t.badgeType})})},n))})]})}function S(e){return(0,v.jsx)(x,{className:`pb-3`,tabs:e.items.map(e=>({name:e.label,onSelect:()=>n.trigger(e.appLink),active:e.appLink.action===f.getCurrentRoute()?.appLink?.action}))})}var C=c.encloseNamespace(`reportsVideos.schoolVideosNav`);function w(e){return[{label:C(`overview`),appLink:{application:u.VIDEOS,action:l.Videos.HOME,params:e}},{label:C(`views`),appLink:{application:u.VIDEOS,action:l.Videos.TOP_VIDEOS,params:e}}]}function T(){return(0,v.jsx)(S,{items:w(p())})}export{T as t};
15
- //# sourceMappingURL=BJikOj1X.chunk.js.map
15
+ //# sourceMappingURL=DNRNNhy3.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BJikOj1X.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/pill-tab-selector/pill-tab-selector.module.scss","../../../../libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","../../src/shared/components/sub-nav/SubNav.tsx","../../src/apps/videos/components/school-videos-nav/SchoolVideosNav.tsx"],"sourcesContent":[":local {\n $pill-tab-min-width: 7rem;\n\n .pillTabSelector {\n border-radius: $border-radius-lg;\n\n .tab {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n\n &:last-child {\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n\n &:not(:first-child) {\n border-left: none;\n }\n\n &:not(:last-child) {\n border-right: none;\n }\n\n &.minWidth {\n min-width: $pill-tab-min-width;\n }\n }\n\n &.radiusSmall {\n border-radius: $border-radius;\n\n li {\n &:first-child {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n \n &:last-child {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n .tabLink {\n padding-top: $input-btn-padding-y;\n padding-bottom: $input-btn-padding-y;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.module.scss';\n\ninterface TabContentComplicationProps {\n badgeType?: BadgeType;\n className?: string;\n tab: PillTab;\n}\n\nfunction TabContentComplication(props: TabContentComplicationProps) {\n if (typeof (props.tab.count) !== 'number')\n return <></>;\n\n if (props.badgeType === BadgeType.RoundCount) {\n return (\n <div className='ps-2'>\n <Badge type={props.badgeType} data={props.tab.count} className={props.className}/>\n </div>\n );\n }\n\n return (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} className={props.className}/>\n </div>\n );\n}\n\ninterface TabContentsProps {\n tab: PillTab;\n formatDisplayText?: (name: string) => string;\n badgeClassName?: string;\n badgeType?: BadgeType;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svg && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svg={props.tab.svg} size={props.tab.svgSize} />\n </div>\n )}\n\n {props.formatDisplayText?.(props.tab.name) ?? props.tab.name}\n\n <TabContentComplication\n tab={props.tab}\n badgeType={props.badgeType}\n className={props.badgeClassName}\n />\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svg?: SvgIcon;\n svgSize?: SvgContainerSize;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n\n hide?: boolean;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg';\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n forceSmallScreenDropdown?: boolean;\n badgeClassName?: string;\n badgeType?: BadgeType;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n const { borderRadius = 'lg' } = props;\n \n const breakpoints = useBreakpoints();\n \n function logAnalytics(tab: PillTab): void {\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n \n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n logAnalytics(tab);\n }\n\n function onChangeSelect(event: React.ChangeEvent<HTMLSelectElement>): void {\n const value = event.target.value;\n const tab = props.tabs.find(tab => tab.name === value);\n if (!tab || tab.active)\n return;\n \n logAnalytics(tab);\n AppLinkHelper.trigger(tab.appLink);\n }\n\n const selectedTab = props.tabs.find(tab => tab.active);\n const showSelectDropdown = props.forceSmallScreenDropdown\n || (props.enableSmallScreenSupport && (breakpoints.sm || breakpoints.xs));\n\n return (\n <nav className={props.className ?? ''}>\n {showSelectDropdown && (\n <select className='form-select' onChange={onChangeSelect} value={selectedTab?.name} style={{ minWidth: '150px' }}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n\n return (\n <option\n key={index}\n value={tab.name}>\n {props.formatDisplayText?.(tab.name) ?? tab.name}\n </option>\n );\n })}\n </select>\n )}\n \n {!showSelectDropdown && (\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n \n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents\n tab={tab}\n formatDisplayText={props.formatDisplayText}\n badgeClassName={props.badgeClassName}\n badgeType={props.badgeType}\n />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\nexport interface SubNavItem {\n label: string;\n appLink: Core.AppLink;\n}\n\ninterface SubNavProps {\n items: SubNavItem[];\n}\n\nexport function SubNav(props: SubNavProps): JSX.Element {\n const tabs: PillTab[] = props.items.map(i => ({\n name: i.label,\n onSelect: () => Core.AppLinkHelper.trigger(i.appLink),\n active: i.appLink.action === ContextService.getCurrentRoute()?.appLink?.action\n }));\n\n return <PillTabSelector className='pb-3' tabs={tabs} />;\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.schoolVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.TOP_VIDEOS, params }\n }\n ];\n}\n\nexport function SchoolVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}\n"],"mappings":"4eCyBA,SAAS,EAAuB,EAAoC,CAYlE,OAXI,OAAQ,EAAM,IAAI,OAAW,SAG7B,EAAM,YAAc,EAAU,YAE9B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,EAAD,CAAO,KAAM,EAAM,UAAW,KAAM,EAAM,IAAI,MAAO,UAAW,EAAM,UAAY,CAAA,CAC9E,CAAA,EAKR,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,EAAD,CAAO,KAAM,EAAU,MAAO,KAAM,EAAM,IAAI,MAAO,UAAW,EAAM,UAAY,CAAA,CAC9E,CAAA,EAbC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,CAwBhB,SAAS,EAAY,EAAsC,CACzD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAM,IAAI,MACX,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAM,IAAI,KAAO,OAAS,aACxC,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAM,IAAI,IAAK,KAAM,EAAM,IAAI,QAAW,CAAA,CACzD,CAAA,CAGP,EAAM,oBAAoB,EAAM,IAAI,KAAK,EAAI,EAAM,IAAI,MAExD,EAAA,EAAA,KAAC,EAAD,CACE,IAAK,EAAM,IACX,UAAW,EAAM,UACjB,UAAW,EAAM,eACjB,CAAA,CACD,CAAA,CAAA,CAmCP,SAAgB,EAAgB,EAA0C,CACxE,GAAM,CAAE,eAAe,MAAS,EAE1B,EAAc,GAAgB,CAEpC,SAAS,EAAa,EAAoB,CACpC,EAAI,eAAiB,EAAI,kBAC3B,EAAgB,cAAc,EAAI,cAAe,EAAI,iBAAiB,CAG1E,SAAS,EAAY,EAAoB,CACnC,EAAI,QAAU,CAAC,EAAI,WAGvB,EAAI,UAAU,CAEd,EAAa,EAAI,EAGnB,SAAS,EAAe,EAAmD,CACzE,IAAM,EAAQ,EAAM,OAAO,MACrB,EAAM,EAAM,KAAK,KAAK,GAAO,EAAI,OAAS,EAAM,CAClD,CAAC,GAAO,EAAI,SAGhB,EAAa,EAAI,CACjB,EAAc,QAAQ,EAAI,QAAQ,EAGpC,IAAM,EAAc,EAAM,KAAK,KAAK,GAAO,EAAI,OAAO,CAChD,EAAqB,EAAM,0BAC3B,EAAM,2BAA6B,EAAY,IAAM,EAAY,IAEvE,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAM,WAAa,YAAnC,CACG,IACC,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAU,cAAc,SAAU,EAAgB,MAAO,GAAa,KAAM,MAAO,CAAE,SAAU,QAAS,UAC7G,EAAM,KAAK,KAAK,EAAK,IAChB,EAAI,MACC,EAAA,EAAA,KAAA,EAAO,SAAP,EAA6B,CAAR,EAAQ,EAGpC,EAAA,EAAA,KAAC,SAAD,CAEE,MAAO,EAAI,cACV,EAAM,oBAAoB,EAAI,KAAK,EAAI,EAAI,KACrC,CAHF,EAGE,EAGN,CAAA,CAGV,CAAC,IACA,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW;6CACsB,EAAO,gBAAA;YACxC,EAAe,EAAO,YAAc,GAAA;YACpC,EAAM,cAAA;mBAEP,EAAM,KAAK,KAAK,EAAK,IAChB,EAAI,MACC,EAAA,EAAA,KAAA,EAAO,SAAP,EAA6B,CAAR,EAAQ,EAGpC,EAAA,EAAA,KAAC,KAAD,CACE,UAAW;sBACL,EAAO,IAAI,GAAG,EAAI,OAAS,eAAiB,uBAAA;kBAChD,EAAI,KAAO,EAAO,SAAW,GAAG,GAAG,EAAI,UAAA;yBAIxC,EAAI,SACH,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EAAI,QACb,cAAe,EAAI,cACnB,iBAAkB,EAAI,iBACtB,UAAW;;uEAEwC,EAAO,QAAA;8BAG1D,EAAA,EAAA,KAAC,EAAD,CAAkB,MAAK,kBAAmB,EAAM,kBAAqB,CAAA,CAC7D,CAAA,EAEV,EAAA,EAAA,KAAC,EAAD,CACE,UAAW;;uEAEwC,EAAO,QAAA;oBAE1D,YAAe,EAAY,EAAI,WAE/B,EAAA,EAAA,KAAC,EAAD,CACO,MACL,kBAAmB,EAAM,kBACzB,eAAgB,EAAM,eACtB,UAAW,EAAM,UACjB,CAAA,CACQ,CAAA,CAEX,CA9BE,EA8BF,EAGN,CAAA,CAAA,GC5Lb,SAAgB,EAAO,EAAiC,CAOtD,OAAO,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAU,OAAa,KANvB,EAAM,MAAM,IAAI,IAAM,CAC5C,KAAM,EAAE,MACR,aAAA,EAAmC,QAAQ,EAAE,QAAQ,CACrD,OAAQ,EAAE,QAAQ,SAAW,EAAe,iBAAiB,EAAE,SAAS,OACzE,EAAE,CAEoD,CAAA,CCVzD,IAAM,EAAY,EAAgB,iBADhB,gCAC2C,CAE7D,SAAS,EAAY,EAAyC,CAC5D,MAAO,CACL,CACE,MAAO,EAAU,WAAW,CAC5B,QAAS,CAAE,YAAa,EAAY,OAAQ,OAAQ,EAAQ,OAAO,KAAM,SAAQ,CAClF,CACD,CACE,MAAO,EAAU,QAAQ,CACzB,QAAS,CAAE,YAAa,EAAY,OAAQ,OAAQ,EAAQ,OAAO,WAAY,SAAQ,CACxF,CACF,CAGH,SAAgB,GAA+B,CAK7C,OACE,EAAA,EAAA,KAAC,EAAD,CAAQ,MAHO,EAFS,GAA2B,CAEN,CAGlB,CAAA"}
1
+ {"version":3,"file":"DNRNNhy3.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/pill-tab-selector/pill-tab-selector.module.scss","../../../../libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","../../src/shared/components/sub-nav/SubNav.tsx","../../src/apps/videos/components/school-videos-nav/SchoolVideosNav.tsx"],"sourcesContent":[":local {\n $pill-tab-min-width: 7rem;\n\n .pillTabSelector {\n border-radius: $border-radius-lg;\n\n .tab {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n\n &:last-child {\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n\n &:not(:first-child) {\n border-left: none;\n }\n\n &:not(:last-child) {\n border-right: none;\n }\n\n &.minWidth {\n min-width: $pill-tab-min-width;\n }\n }\n\n &.radiusSmall {\n border-radius: $border-radius;\n\n li {\n &:first-child {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n \n &:last-child {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n .tabLink {\n padding-top: $input-btn-padding-y;\n padding-bottom: $input-btn-padding-y;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.module.scss';\n\ninterface TabContentComplicationProps {\n badgeType?: BadgeType;\n className?: string;\n tab: PillTab;\n}\n\nfunction TabContentComplication(props: TabContentComplicationProps) {\n if (typeof (props.tab.count) !== 'number')\n return <></>;\n\n if (props.badgeType === BadgeType.RoundCount) {\n return (\n <div className='ps-2'>\n <Badge type={props.badgeType} data={props.tab.count} className={props.className}/>\n </div>\n );\n }\n\n return (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} className={props.className}/>\n </div>\n );\n}\n\ninterface TabContentsProps {\n tab: PillTab;\n formatDisplayText?: (name: string) => string;\n badgeClassName?: string;\n badgeType?: BadgeType;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svg && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svg={props.tab.svg} size={props.tab.svgSize} />\n </div>\n )}\n\n {props.formatDisplayText?.(props.tab.name) ?? props.tab.name}\n\n <TabContentComplication\n tab={props.tab}\n badgeType={props.badgeType}\n className={props.badgeClassName}\n />\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svg?: SvgIcon;\n svgSize?: SvgContainerSize;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n\n hide?: boolean;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg';\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n forceSmallScreenDropdown?: boolean;\n badgeClassName?: string;\n badgeType?: BadgeType;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n const { borderRadius = 'lg' } = props;\n \n const breakpoints = useBreakpoints();\n \n function logAnalytics(tab: PillTab): void {\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n \n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n logAnalytics(tab);\n }\n\n function onChangeSelect(event: React.ChangeEvent<HTMLSelectElement>): void {\n const value = event.target.value;\n const tab = props.tabs.find(tab => tab.name === value);\n if (!tab || tab.active)\n return;\n \n logAnalytics(tab);\n AppLinkHelper.trigger(tab.appLink);\n }\n\n const selectedTab = props.tabs.find(tab => tab.active);\n const showSelectDropdown = props.forceSmallScreenDropdown\n || (props.enableSmallScreenSupport && (breakpoints.sm || breakpoints.xs));\n\n return (\n <nav className={props.className ?? ''}>\n {showSelectDropdown && (\n <select className='form-select' onChange={onChangeSelect} value={selectedTab?.name} style={{ minWidth: '150px' }}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n\n return (\n <option\n key={index}\n value={tab.name}>\n {props.formatDisplayText?.(tab.name) ?? tab.name}\n </option>\n );\n })}\n </select>\n )}\n \n {!showSelectDropdown && (\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n \n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents\n tab={tab}\n formatDisplayText={props.formatDisplayText}\n badgeClassName={props.badgeClassName}\n badgeType={props.badgeType}\n />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\nexport interface SubNavItem {\n label: string;\n appLink: Core.AppLink;\n}\n\ninterface SubNavProps {\n items: SubNavItem[];\n}\n\nexport function SubNav(props: SubNavProps): JSX.Element {\n const tabs: PillTab[] = props.items.map(i => ({\n name: i.label,\n onSelect: () => Core.AppLinkHelper.trigger(i.appLink),\n active: i.appLink.action === ContextService.getCurrentRoute()?.appLink?.action\n }));\n\n return <PillTabSelector className='pb-3' tabs={tabs} />;\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.schoolVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.TOP_VIDEOS, params }\n }\n ];\n}\n\nexport function SchoolVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{P as e,U as t,qn as n,st as r}from"./Db8SRTe2.chunk.js";import{n as i}from"./B4CGL9yn.chunk.js";import{n as a}from"./ClFr_vFf.chunk.js";import{t as o}from"./DQnWJjP7.chunk.js";import{t as s}from"./BpIQdoUJ.chunk.js";import{t as c}from"./Czi36umi.chunk.js";import{l,n as u,t as d}from"./NRdjeteL.chunk.js";import{N as f,P as p,i as m,o as h}from"./app-BBppvgGe.js";import{t as g}from"./C2smR6gI2.chunk.js";import{t as _}from"./2K4rAC5A2.chunk.js";var v=n(r(),1),y=e(),b=`reportsDefault.classroomSizeSelector`,x=10,S=40;function C(e){return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeTitle`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeDescription`})}),(0,y.jsx)(`label`,{className:`mb-1`,htmlFor:`classroomSize`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeLabel`})}),(0,y.jsx)(l.Range,{id:`classroomSize`,min:x,max:S,step:1,value:e.classroomSize,onChange:t=>e.onClassroomSizeChanged(Number(t.target.value))}),(0,y.jsxs)(`div`,{className:`d-flex justify-content-between small mb-2`,children:[(0,y.jsx)(`span`,{children:x}),(0,y.jsx)(`span`,{children:S})]}),(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeSummary`,options:{count:e.classroomSize}})})]})}var w=`reportsDefault.classroomViewsToggle`;function T(e){return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3 d-flex align-items-center gap-3`,e.className),children:[(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:w,phrase:`title`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:w,phrase:`description`})})]}),(0,y.jsx)(u,{on:e.enabled,floatEnd:!1,onClick:()=>e.onEnabledChanged(!e.enabled)})]})}var E=`reportsDefault.schoolHoursSelector`,D=[6,7,8,9,10,11,12,13,14,15,16,17,18],O=h.getTimezones();function k(e){let[t,n]=v.useState(!1),r=e.startHour<e.endHour;return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursTitle`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursDescription`})}),(0,y.jsxs)(`div`,{className:`d-flex align-items-end gap-3 mb-2`,children:[(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`startTimeLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.startHour,onChange:t=>e.onStartHourChanged(Number(t.target.value)),children:D.map(e=>(0,y.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]}),(0,y.jsx)(`span`,{className:`pb-2`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursTo`})}),(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`endTimeLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.endHour,onChange:t=>e.onEndHourChanged(Number(t.target.value)),children:D.map(e=>(0,y.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]})]}),r?(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursSummary`,options:{startTime:o.hourToFriendlyString(e.startHour),endTime:o.hourToFriendlyString(e.endHour)}})}):(0,y.jsx)(`p`,{className:`text-danger mb-0`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursValidation`})}),(0,y.jsx)(`div`,{className:`mt-3`,children:t?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(`label`,{className:`mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`timezoneLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.timezone,onChange:t=>e.onTimezoneChanged(t.target.value),children:O.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))})]}):(0,y.jsxs)(`span`,{className:`text-secondary`,children:[(0,y.jsx)(a,{namespace:E,phrase:`timezoneCurrent`,options:{timezone:e.timezone}}),` — `,(0,y.jsx)(`button`,{className:`btn btn-link text-info p-0 align-baseline`,onClick:()=>n(!0),children:(0,y.jsx)(a,{namespace:E,phrase:`timezoneChange`})})]})})]})}var A=`reports.classroomViewsPopup`,j=s.encloseNamespace(A);function M(e){let n=m(t.ClassroomViewsPopup),{enableAlert:r}=_(n.hasClassroomViews),i=g(),s=o.timeStringToHour(n.schoolStartTime),l=o.timeStringToHour(n.schoolEndTime),[u,h]=v.useState(n.hasClassroomViews),[b,x]=v.useState(n.classroomSize),[S,w]=v.useState(n.timezone),[E,D]=v.useState(s),[O,M]=v.useState(l),[N,P]=v.useState(!1),F=u?E<O&&S:!0,I=u!==n.hasClassroomViews||b!==n.classroomSize||S!==n.timezone||E!==s||O!==l;async function L(){try{P(!0),await n.updateSettingsAsync({hasClassroomViews:u,schoolStartTime:o.hourToTimeString(E),schoolEndTime:o.hourToTimeString(O),timezone:S,classroomSize:b}),i.success(j(`success`)),u||r(),e.closePopup()}catch{i.error(j(`error`))}finally{P(!1)}}return(0,y.jsxs)(c,{closePopup:e.closePopup,title:j(`title`),size:`lg`,children:[(0,y.jsx)(`p`,{children:(0,y.jsx)(a,{namespace:A,phrase:`description1`})}),(0,y.jsx)(`p`,{children:(0,y.jsx)(a,{namespace:A,phrase:`description2`})}),(0,y.jsx)(T,{className:`my-3`,enabled:u,onEnabledChanged:h}),u&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(C,{className:`mb-3`,classroomSize:b,onClassroomSizeChanged:x}),(0,y.jsx)(k,{className:`mb-3`,startHour:E,endHour:O,timezone:S,onStartHourChanged:D,onEndHourChanged:M,onTimezoneChanged:w})]}),(0,y.jsxs)(d,{className:`justify-content-between`,children:[(0,y.jsx)(`a`,{href:f.getLiteArticle(p.ClassroomViews),target:`_blank`,rel:`noopener noreferrer`,className:`text-info`,children:(0,y.jsx)(a,{namespace:A,phrase:`learnMore`})}),(0,y.jsxs)(`div`,{className:`d-flex`,children:[(0,y.jsx)(d.Cancel,{onClick:e.closePopup,text:j(`close`)}),(0,y.jsx)(d.Submit,{onClick:L,text:j(`save`),showSpinner:N,variant:`dark`,disabled:!F||!I})]})]})]})}export{M as ClassroomViewsPopupView};
2
- //# sourceMappingURL=Dv0X7vtO.chunk.js.map
1
+ import{P as e,U as t,qn as n,st as r}from"./Db8SRTe2.chunk.js";import{n as i}from"./B4CGL9yn.chunk.js";import{n as a}from"./ClFr_vFf.chunk.js";import{t as o}from"./DQnWJjP7.chunk.js";import{t as s}from"./BpIQdoUJ.chunk.js";import{t as c}from"./Czi36umi.chunk.js";import{l,n as u,t as d}from"./NRdjeteL.chunk.js";import{N as f,P as p,i as m,o as h}from"./app-DomX9RS2.js";import{t as g}from"./C2smR6gI2.chunk.js";import{t as _}from"./XIOc3Va_2.chunk.js";var v=n(r(),1),y=e(),b=`reportsDefault.classroomSizeSelector`,x=10,S=40;function C(e){return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeTitle`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeDescription`})}),(0,y.jsx)(`label`,{className:`mb-1`,htmlFor:`classroomSize`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeLabel`})}),(0,y.jsx)(l.Range,{id:`classroomSize`,min:x,max:S,step:1,value:e.classroomSize,onChange:t=>e.onClassroomSizeChanged(Number(t.target.value))}),(0,y.jsxs)(`div`,{className:`d-flex justify-content-between small mb-2`,children:[(0,y.jsx)(`span`,{children:x}),(0,y.jsx)(`span`,{children:S})]}),(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:b,phrase:`classroomSizeSummary`,options:{count:e.classroomSize}})})]})}var w=`reportsDefault.classroomViewsToggle`;function T(e){return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3 d-flex align-items-center gap-3`,e.className),children:[(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:w,phrase:`title`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:w,phrase:`description`})})]}),(0,y.jsx)(u,{on:e.enabled,floatEnd:!1,onClick:()=>e.onEnabledChanged(!e.enabled)})]})}var E=`reportsDefault.schoolHoursSelector`,D=[6,7,8,9,10,11,12,13,14,15,16,17,18],O=h.getTimezones();function k(e){let[t,n]=v.useState(!1),r=e.startHour<e.endHour;return(0,y.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,y.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursTitle`})}),(0,y.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursDescription`})}),(0,y.jsxs)(`div`,{className:`d-flex align-items-end gap-3 mb-2`,children:[(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`startTimeLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.startHour,onChange:t=>e.onStartHourChanged(Number(t.target.value)),children:D.map(e=>(0,y.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]}),(0,y.jsx)(`span`,{className:`pb-2`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursTo`})}),(0,y.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,y.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`endTimeLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.endHour,onChange:t=>e.onEndHourChanged(Number(t.target.value)),children:D.map(e=>(0,y.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]})]}),r?(0,y.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursSummary`,options:{startTime:o.hourToFriendlyString(e.startHour),endTime:o.hourToFriendlyString(e.endHour)}})}):(0,y.jsx)(`p`,{className:`text-danger mb-0`,children:(0,y.jsx)(a,{namespace:E,phrase:`schoolHoursValidation`})}),(0,y.jsx)(`div`,{className:`mt-3`,children:t?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(`label`,{className:`mb-1 d-block`,children:(0,y.jsx)(a,{namespace:E,phrase:`timezoneLabel`})}),(0,y.jsx)(`select`,{className:`form-select`,value:e.timezone,onChange:t=>e.onTimezoneChanged(t.target.value),children:O.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))})]}):(0,y.jsxs)(`span`,{className:`text-secondary`,children:[(0,y.jsx)(a,{namespace:E,phrase:`timezoneCurrent`,options:{timezone:e.timezone}}),` — `,(0,y.jsx)(`button`,{className:`btn btn-link text-info p-0 align-baseline`,onClick:()=>n(!0),children:(0,y.jsx)(a,{namespace:E,phrase:`timezoneChange`})})]})})]})}var A=`reports.classroomViewsPopup`,j=s.encloseNamespace(A);function M(e){let n=m(t.ClassroomViewsPopup),{enableAlert:r}=_(n.hasClassroomViews),i=g(),s=o.timeStringToHour(n.schoolStartTime),l=o.timeStringToHour(n.schoolEndTime),[u,h]=v.useState(n.hasClassroomViews),[b,x]=v.useState(n.classroomSize),[S,w]=v.useState(n.timezone),[E,D]=v.useState(s),[O,M]=v.useState(l),[N,P]=v.useState(!1),F=u?E<O&&S:!0,I=u!==n.hasClassroomViews||b!==n.classroomSize||S!==n.timezone||E!==s||O!==l;async function L(){try{P(!0),await n.updateSettingsAsync({hasClassroomViews:u,schoolStartTime:o.hourToTimeString(E),schoolEndTime:o.hourToTimeString(O),timezone:S,classroomSize:b}),i.success(j(`success`)),u||r(),e.closePopup()}catch{i.error(j(`error`))}finally{P(!1)}}return(0,y.jsxs)(c,{closePopup:e.closePopup,title:j(`title`),size:`lg`,children:[(0,y.jsx)(`p`,{children:(0,y.jsx)(a,{namespace:A,phrase:`description1`})}),(0,y.jsx)(`p`,{children:(0,y.jsx)(a,{namespace:A,phrase:`description2`})}),(0,y.jsx)(T,{className:`my-3`,enabled:u,onEnabledChanged:h}),u&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(C,{className:`mb-3`,classroomSize:b,onClassroomSizeChanged:x}),(0,y.jsx)(k,{className:`mb-3`,startHour:E,endHour:O,timezone:S,onStartHourChanged:D,onEndHourChanged:M,onTimezoneChanged:w})]}),(0,y.jsxs)(d,{className:`justify-content-between`,children:[(0,y.jsx)(`a`,{href:f.getLiteArticle(p.ClassroomViews),target:`_blank`,rel:`noopener noreferrer`,className:`text-info`,children:(0,y.jsx)(a,{namespace:A,phrase:`learnMore`})}),(0,y.jsxs)(`div`,{className:`d-flex`,children:[(0,y.jsx)(d.Cancel,{onClick:e.closePopup,text:j(`close`)}),(0,y.jsx)(d.Submit,{onClick:L,text:j(`save`),showSpinner:N,variant:`dark`,disabled:!F||!I})]})]})]})}export{M as ClassroomViewsPopupView};
2
+ //# sourceMappingURL=DRThGgko.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dv0X7vtO.chunk.js","names":[],"sources":["../../src/apps/default/views/classroom-views-popup/components/classroom-size-selector/ClassroomSizeSelector.tsx","../../src/apps/default/views/classroom-views-popup/components/classroom-views-toggle/ClassroomViewsToggle.tsx","../../src/apps/default/views/classroom-views-popup/components/school-hours-selector/SchoolHoursSelector.tsx","../../src/apps/default/views/classroom-views-popup/ClassroomViewsPopupView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDefault.classroomSizeSelector';\n\nconst MIN_CLASSROOM_SIZE = 10;\nconst MAX_CLASSROOM_SIZE = 40;\n\ninterface ClassroomSizeSelectorProps {\n className?: string;\n classroomSize: number;\n onClassroomSizeChanged: (size: number) => void;\n}\n\nexport function ClassroomSizeSelector(props: ClassroomSizeSelectorProps) {\n return (\n <div className={classNames('border rounded-3 p-3', props.className)}>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='classroomSizeTitle' /></h3>\n <p className='text-secondary mb-3'><Text namespace={namespace} phrase='classroomSizeDescription' /></p>\n\n <label className='mb-1' htmlFor='classroomSize'><Text namespace={namespace} phrase='classroomSizeLabel' /></label>\n\n <Form.Range\n id='classroomSize'\n min={MIN_CLASSROOM_SIZE}\n max={MAX_CLASSROOM_SIZE}\n step={1}\n value={props.classroomSize}\n onChange={e => props.onClassroomSizeChanged(Number(e.target.value))}\n />\n <div className='d-flex justify-content-between small mb-2'>\n <span>{MIN_CLASSROOM_SIZE}</span>\n <span>{MAX_CLASSROOM_SIZE}</span>\n </div>\n\n <p className='text-secondary mb-0'>\n <Text namespace={namespace} phrase='classroomSizeSummary' options={{ count: props.classroomSize }} />\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nconst namespace = 'reportsDefault.classroomViewsToggle';\n\ninterface ClassroomViewsToggleProps {\n className?: string;\n enabled: boolean;\n onEnabledChanged: (enabled: boolean) => void;\n}\n\nexport function ClassroomViewsToggle(props: ClassroomViewsToggleProps) {\n return (\n <div className={classNames('border rounded-3 p-3 d-flex align-items-center gap-3', props.className)}>\n <div className='flex-grow-1'>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='title' /></h3>\n <p className='text-secondary mb-0'><Text namespace={namespace} phrase='description' /></p>\n </div>\n\n <ToggleSwitch\n on={props.enabled}\n floatEnd={false}\n onClick={() => props.onEnabledChanged(!props.enabled)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDefault.schoolHoursSelector';\n\nconst SCHOOL_HOURS = [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ];\nconst ALL_TIMEZONES = TimezoneHelper.getTimezones();\n\ninterface SchoolHoursSelectorProps {\n className?: string;\n startHour: number;\n endHour: number;\n timezone: string;\n onStartHourChanged: (hour: number) => void;\n onEndHourChanged: (hour: number) => void;\n onTimezoneChanged: (tz: string) => void;\n}\n\nexport function SchoolHoursSelector(props: SchoolHoursSelectorProps) {\n const [ showTimezoneSelect, setShowTimezoneSelect ] = React.useState(false);\n\n const isTimeRangeValid = props.startHour < props.endHour;\n\n return (\n <div className={classNames('border rounded-3 p-3', props.className)}>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='schoolHoursTitle' /></h3>\n <p className='text-secondary mb-3'><Text namespace={namespace} phrase='schoolHoursDescription' /></p>\n\n <div className='d-flex align-items-end gap-3 mb-2'>\n <div className='flex-grow-1'>\n <label className='small mb-1 d-block'><Text namespace={namespace} phrase='startTimeLabel' /></label>\n <select\n className='form-select'\n value={props.startHour}\n onChange={e => props.onStartHourChanged(Number(e.target.value))}\n >\n {SCHOOL_HOURS.map(hour => (\n <option key={hour} value={hour}>{DateHelper.hourToFriendlyString(hour)}</option>\n ))}\n </select>\n </div>\n <span className='pb-2'><Text namespace={namespace} phrase='schoolHoursTo' /></span>\n <div className='flex-grow-1'>\n <label className='small mb-1 d-block'><Text namespace={namespace} phrase='endTimeLabel' /></label>\n <select\n className='form-select'\n value={props.endHour}\n onChange={e => props.onEndHourChanged(Number(e.target.value))}\n >\n {SCHOOL_HOURS.map(hour => (\n <option key={hour} value={hour}>{DateHelper.hourToFriendlyString(hour)}</option>\n ))}\n </select>\n </div>\n </div>\n\n {isTimeRangeValid ? (\n <p className='text-secondary mb-0'>\n <Text\n namespace={namespace}\n phrase='schoolHoursSummary'\n options={{\n startTime: DateHelper.hourToFriendlyString(props.startHour),\n endTime: DateHelper.hourToFriendlyString(props.endHour)\n }}\n />\n </p>\n ) : (\n <p className='text-danger mb-0'>\n <Text namespace={namespace} phrase='schoolHoursValidation' />\n </p>\n )}\n\n <div className='mt-3'>\n {showTimezoneSelect ? (\n <>\n <label className='mb-1 d-block'><Text namespace={namespace} phrase='timezoneLabel' /></label>\n <select className='form-select' value={props.timezone} onChange={e => props.onTimezoneChanged(e.target.value)}>\n {ALL_TIMEZONES.map(tz => (\n <option key={tz} value={tz}>{tz}</option>\n ))}\n </select>\n </>\n ) : (\n <span className='text-secondary'>\n <Text namespace={namespace} phrase='timezoneCurrent' options={{ timezone: props.timezone }} />\n {' — '}\n <button className='btn btn-link text-info p-0 align-baseline' onClick={() => setShowTimezoneSelect(true)}>\n <Text namespace={namespace} phrase='timezoneChange' />\n </button>\n </span>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { useClassroomViewsAlert } from 'shared/hooks/useClassroomViewsAlert';\nimport { useClassroomViewsSettings } from 'shared/hooks/useClassroomViewsSettings';\n\nimport { ClassroomSizeSelector } from './components/classroom-size-selector/ClassroomSizeSelector';\nimport { ClassroomViewsToggle } from './components/classroom-views-toggle/ClassroomViewsToggle';\nimport { SchoolHoursSelector } from './components/school-hours-selector/SchoolHoursSelector';\n\nconst namespace = 'reports.classroomViewsPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ClassroomViewsPopupView(props: PopupViewProps): JSX.Element {\n const classroomViewsSettings = useClassroomViewsSettings(LocationContext.ClassroomViewsPopup);\n const { enableAlert } = useClassroomViewsAlert(classroomViewsSettings.hasClassroomViews);\n const alerts = useAlerts();\n\n const initialStartHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolStartTime);\n const initialEndHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolEndTime);\n \n const [ hasClassroomViews, setHasClassroomViews ] = React.useState(classroomViewsSettings.hasClassroomViews);\n const [ classroomSize, setClassroomSize ] = React.useState(classroomViewsSettings.classroomSize);\n const [ timezone, setTimezone ] = React.useState(classroomViewsSettings.timezone);\n const [ schoolStartHour, setSchoolStartHour ] = React.useState(initialStartHour);\n const [ schoolEndHour, setSchoolEndHour ] = React.useState(initialEndHour);\n const [ isSaving, setIsSaving ] = React.useState(false);\n\n const isFormValid = hasClassroomViews ? (schoolStartHour < schoolEndHour && timezone) : true;\n const isDirty = hasClassroomViews !== classroomViewsSettings.hasClassroomViews\n || classroomSize !== classroomViewsSettings.classroomSize\n || timezone !== classroomViewsSettings.timezone\n || schoolStartHour !== initialStartHour\n || schoolEndHour !== initialEndHour;\n\n async function onSave() {\n try {\n setIsSaving(true);\n \n await classroomViewsSettings.updateSettingsAsync({\n hasClassroomViews,\n schoolStartTime: DateHelper.hourToTimeString(schoolStartHour),\n schoolEndTime: DateHelper.hourToTimeString(schoolEndHour),\n timezone,\n classroomSize\n });\n \n alerts.success(getPhrase('success'));\n\n // We re-enable the alert if the user has just turned off Classroom Views, \n // to give them a reminder about the feature and how to turn it back on..\n if (!hasClassroomViews)\n enableAlert();\n \n props.closePopup();\n } catch {\n alerts.error(getPhrase('error'));\n } finally {\n setIsSaving(false);\n }\n }\n\n return (\n <Popup\n closePopup={props.closePopup}\n title={getPhrase('title')}\n size='lg'\n >\n <p><Text namespace={namespace} phrase='description1' /></p>\n <p><Text namespace={namespace} phrase='description2' /></p>\n\n <ClassroomViewsToggle\n className='my-3'\n enabled={hasClassroomViews}\n onEnabledChanged={setHasClassroomViews}\n />\n\n {hasClassroomViews && (\n <>\n <ClassroomSizeSelector\n className='mb-3'\n classroomSize={classroomSize}\n onClassroomSizeChanged={setClassroomSize}\n />\n\n <SchoolHoursSelector\n className='mb-3'\n startHour={schoolStartHour}\n endHour={schoolEndHour}\n timezone={timezone}\n onStartHourChanged={setSchoolStartHour}\n onEndHourChanged={setSchoolEndHour}\n onTimezoneChanged={setTimezone}\n />\n </>\n )}\n\n <PopupButtons className='justify-content-between'>\n <a href={ArticleHelper.getLiteArticle(LiteSupportArticle.ClassroomViews)} target='_blank' rel='noopener noreferrer' className='text-info'>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n <div className='d-flex'>\n <PopupButtons.Cancel onClick={props.closePopup} text={getPhrase('close')} />\n <PopupButtons.Submit onClick={onSave} text={getPhrase('save')} showSpinner={isSaving} variant='dark' disabled={!isFormValid || !isDirty} />\n </div>\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DRThGgko.chunk.js","names":[],"sources":["../../src/apps/default/views/classroom-views-popup/components/classroom-size-selector/ClassroomSizeSelector.tsx","../../src/apps/default/views/classroom-views-popup/components/classroom-views-toggle/ClassroomViewsToggle.tsx","../../src/apps/default/views/classroom-views-popup/components/school-hours-selector/SchoolHoursSelector.tsx","../../src/apps/default/views/classroom-views-popup/ClassroomViewsPopupView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDefault.classroomSizeSelector';\n\nconst MIN_CLASSROOM_SIZE = 10;\nconst MAX_CLASSROOM_SIZE = 40;\n\ninterface ClassroomSizeSelectorProps {\n className?: string;\n classroomSize: number;\n onClassroomSizeChanged: (size: number) => void;\n}\n\nexport function ClassroomSizeSelector(props: ClassroomSizeSelectorProps) {\n return (\n <div className={classNames('border rounded-3 p-3', props.className)}>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='classroomSizeTitle' /></h3>\n <p className='text-secondary mb-3'><Text namespace={namespace} phrase='classroomSizeDescription' /></p>\n\n <label className='mb-1' htmlFor='classroomSize'><Text namespace={namespace} phrase='classroomSizeLabel' /></label>\n\n <Form.Range\n id='classroomSize'\n min={MIN_CLASSROOM_SIZE}\n max={MAX_CLASSROOM_SIZE}\n step={1}\n value={props.classroomSize}\n onChange={e => props.onClassroomSizeChanged(Number(e.target.value))}\n />\n <div className='d-flex justify-content-between small mb-2'>\n <span>{MIN_CLASSROOM_SIZE}</span>\n <span>{MAX_CLASSROOM_SIZE}</span>\n </div>\n\n <p className='text-secondary mb-0'>\n <Text namespace={namespace} phrase='classroomSizeSummary' options={{ count: props.classroomSize }} />\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nconst namespace = 'reportsDefault.classroomViewsToggle';\n\ninterface ClassroomViewsToggleProps {\n className?: string;\n enabled: boolean;\n onEnabledChanged: (enabled: boolean) => void;\n}\n\nexport function ClassroomViewsToggle(props: ClassroomViewsToggleProps) {\n return (\n <div className={classNames('border rounded-3 p-3 d-flex align-items-center gap-3', props.className)}>\n <div className='flex-grow-1'>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='title' /></h3>\n <p className='text-secondary mb-0'><Text namespace={namespace} phrase='description' /></p>\n </div>\n\n <ToggleSwitch\n on={props.enabled}\n floatEnd={false}\n onClick={() => props.onEnabledChanged(!props.enabled)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'reportsDefault.schoolHoursSelector';\n\nconst SCHOOL_HOURS = [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ];\nconst ALL_TIMEZONES = TimezoneHelper.getTimezones();\n\ninterface SchoolHoursSelectorProps {\n className?: string;\n startHour: number;\n endHour: number;\n timezone: string;\n onStartHourChanged: (hour: number) => void;\n onEndHourChanged: (hour: number) => void;\n onTimezoneChanged: (tz: string) => void;\n}\n\nexport function SchoolHoursSelector(props: SchoolHoursSelectorProps) {\n const [ showTimezoneSelect, setShowTimezoneSelect ] = React.useState(false);\n\n const isTimeRangeValid = props.startHour < props.endHour;\n\n return (\n <div className={classNames('border rounded-3 p-3', props.className)}>\n <h3 className='h6 fw-semibold mb-1'><Text namespace={namespace} phrase='schoolHoursTitle' /></h3>\n <p className='text-secondary mb-3'><Text namespace={namespace} phrase='schoolHoursDescription' /></p>\n\n <div className='d-flex align-items-end gap-3 mb-2'>\n <div className='flex-grow-1'>\n <label className='small mb-1 d-block'><Text namespace={namespace} phrase='startTimeLabel' /></label>\n <select\n className='form-select'\n value={props.startHour}\n onChange={e => props.onStartHourChanged(Number(e.target.value))}\n >\n {SCHOOL_HOURS.map(hour => (\n <option key={hour} value={hour}>{DateHelper.hourToFriendlyString(hour)}</option>\n ))}\n </select>\n </div>\n <span className='pb-2'><Text namespace={namespace} phrase='schoolHoursTo' /></span>\n <div className='flex-grow-1'>\n <label className='small mb-1 d-block'><Text namespace={namespace} phrase='endTimeLabel' /></label>\n <select\n className='form-select'\n value={props.endHour}\n onChange={e => props.onEndHourChanged(Number(e.target.value))}\n >\n {SCHOOL_HOURS.map(hour => (\n <option key={hour} value={hour}>{DateHelper.hourToFriendlyString(hour)}</option>\n ))}\n </select>\n </div>\n </div>\n\n {isTimeRangeValid ? (\n <p className='text-secondary mb-0'>\n <Text\n namespace={namespace}\n phrase='schoolHoursSummary'\n options={{\n startTime: DateHelper.hourToFriendlyString(props.startHour),\n endTime: DateHelper.hourToFriendlyString(props.endHour)\n }}\n />\n </p>\n ) : (\n <p className='text-danger mb-0'>\n <Text namespace={namespace} phrase='schoolHoursValidation' />\n </p>\n )}\n\n <div className='mt-3'>\n {showTimezoneSelect ? (\n <>\n <label className='mb-1 d-block'><Text namespace={namespace} phrase='timezoneLabel' /></label>\n <select className='form-select' value={props.timezone} onChange={e => props.onTimezoneChanged(e.target.value)}>\n {ALL_TIMEZONES.map(tz => (\n <option key={tz} value={tz}>{tz}</option>\n ))}\n </select>\n </>\n ) : (\n <span className='text-secondary'>\n <Text namespace={namespace} phrase='timezoneCurrent' options={{ timezone: props.timezone }} />\n {' — '}\n <button className='btn btn-link text-info p-0 align-baseline' onClick={() => setShowTimezoneSelect(true)}>\n <Text namespace={namespace} phrase='timezoneChange' />\n </button>\n </span>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { useClassroomViewsAlert } from 'shared/hooks/useClassroomViewsAlert';\nimport { useClassroomViewsSettings } from 'shared/hooks/useClassroomViewsSettings';\n\nimport { ClassroomSizeSelector } from './components/classroom-size-selector/ClassroomSizeSelector';\nimport { ClassroomViewsToggle } from './components/classroom-views-toggle/ClassroomViewsToggle';\nimport { SchoolHoursSelector } from './components/school-hours-selector/SchoolHoursSelector';\n\nconst namespace = 'reports.classroomViewsPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ClassroomViewsPopupView(props: PopupViewProps): JSX.Element {\n const classroomViewsSettings = useClassroomViewsSettings(LocationContext.ClassroomViewsPopup);\n const { enableAlert } = useClassroomViewsAlert(classroomViewsSettings.hasClassroomViews);\n const alerts = useAlerts();\n\n const initialStartHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolStartTime);\n const initialEndHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolEndTime);\n \n const [ hasClassroomViews, setHasClassroomViews ] = React.useState(classroomViewsSettings.hasClassroomViews);\n const [ classroomSize, setClassroomSize ] = React.useState(classroomViewsSettings.classroomSize);\n const [ timezone, setTimezone ] = React.useState(classroomViewsSettings.timezone);\n const [ schoolStartHour, setSchoolStartHour ] = React.useState(initialStartHour);\n const [ schoolEndHour, setSchoolEndHour ] = React.useState(initialEndHour);\n const [ isSaving, setIsSaving ] = React.useState(false);\n\n const isFormValid = hasClassroomViews ? (schoolStartHour < schoolEndHour && timezone) : true;\n const isDirty = hasClassroomViews !== classroomViewsSettings.hasClassroomViews\n || classroomSize !== classroomViewsSettings.classroomSize\n || timezone !== classroomViewsSettings.timezone\n || schoolStartHour !== initialStartHour\n || schoolEndHour !== initialEndHour;\n\n async function onSave() {\n try {\n setIsSaving(true);\n \n await classroomViewsSettings.updateSettingsAsync({\n hasClassroomViews,\n schoolStartTime: DateHelper.hourToTimeString(schoolStartHour),\n schoolEndTime: DateHelper.hourToTimeString(schoolEndHour),\n timezone,\n classroomSize\n });\n \n alerts.success(getPhrase('success'));\n\n // We re-enable the alert if the user has just turned off Classroom Views, \n // to give them a reminder about the feature and how to turn it back on..\n if (!hasClassroomViews)\n enableAlert();\n \n props.closePopup();\n } catch {\n alerts.error(getPhrase('error'));\n } finally {\n setIsSaving(false);\n }\n }\n\n return (\n <Popup\n closePopup={props.closePopup}\n title={getPhrase('title')}\n size='lg'\n >\n <p><Text namespace={namespace} phrase='description1' /></p>\n <p><Text namespace={namespace} phrase='description2' /></p>\n\n <ClassroomViewsToggle\n className='my-3'\n enabled={hasClassroomViews}\n onEnabledChanged={setHasClassroomViews}\n />\n\n {hasClassroomViews && (\n <>\n <ClassroomSizeSelector\n className='mb-3'\n classroomSize={classroomSize}\n onClassroomSizeChanged={setClassroomSize}\n />\n\n <SchoolHoursSelector\n className='mb-3'\n startHour={schoolStartHour}\n endHour={schoolEndHour}\n timezone={timezone}\n onStartHourChanged={setSchoolStartHour}\n onEndHourChanged={setSchoolEndHour}\n onTimezoneChanged={setTimezone}\n />\n </>\n )}\n\n <PopupButtons className='justify-content-between'>\n <a href={ArticleHelper.getLiteArticle(LiteSupportArticle.ClassroomViews)} target='_blank' rel='noopener noreferrer' className='text-info'>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n <div className='d-flex'>\n <PopupButtons.Cancel onClick={props.closePopup} text={getPhrase('close')} />\n <PopupButtons.Submit onClick={onSave} text={getPhrase('save')} showSpinner={isSaving} variant='dark' disabled={!isFormValid || !isDirty} />\n </div>\n </PopupButtons>\n </Popup>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{t as n}from"./44-tnsP5.chunk.js";import{t as r}from"./Clx0FzVV.chunk.js";import{F as i}from"./app-BBppvgGe.js";t();var a={container:`_container_nowrk_1`,subContainer:`_subContainer_nowrk_7`},o=e();function s(e){return n({title:e.error?.heading}),e.error?(0,o.jsx)(`div`,{style:{height:`85vh`},children:(0,o.jsx)(`div`,{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:(0,o.jsxs)(r,{className:a.subContainer,children:[(0,o.jsx)(r.Heading,{children:e.error.heading}),(0,o.jsx)(r.Info,{className:`w-33 mb-4`,children:e.error.description}),e.error.cta!==!1&&(0,o.jsx)(r.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?`mt-n2`:``}`,href:e.error.cta.url,icon:i,openInNewTab:!0})]})})}):(0,o.jsx)(o.Fragment,{})}export{s as NoClassroomsErrorView};
2
- //# sourceMappingURL=CiL7Usrw.chunk.js.map
1
+ import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{t as n}from"./44-tnsP5.chunk.js";import{t as r}from"./Clx0FzVV.chunk.js";import{F as i}from"./app-DomX9RS2.js";t();var a={container:`_container_nowrk_1`,subContainer:`_subContainer_nowrk_7`},o=e();function s(e){return n({title:e.error?.heading}),e.error?(0,o.jsx)(`div`,{style:{height:`85vh`},children:(0,o.jsx)(`div`,{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:(0,o.jsxs)(r,{className:a.subContainer,children:[(0,o.jsx)(r.Heading,{children:e.error.heading}),(0,o.jsx)(r.Info,{className:`w-33 mb-4`,children:e.error.description}),e.error.cta!==!1&&(0,o.jsx)(r.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?`mt-n2`:``}`,href:e.error.cta.url,icon:i,openInNewTab:!0})]})})}):(0,o.jsx)(o.Fragment,{})}export{s as NoClassroomsErrorView};
2
+ //# sourceMappingURL=DTga4UBD.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CiL7Usrw.chunk.js","names":[],"sources":["../../src/apps/default/views/no-classrooms-error/no-classrooms-error.module.scss","../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":[":local {\n .container {\n height: 100%;\n background-size: 100%;\n background-repeat: no-repeat;\n position: relative;\n }\n \n .subContainer {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n }\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}\n"],"mappings":"4PCcA,SAAgB,EAAsB,EAAuD,CAM3F,OALA,EAAmB,CAAE,MAAO,EAAM,OAAO,QAAS,CAAC,CAE9C,EAAM,OAIT,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,OAAQ,OAAQ,WAC5B,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,gBAAiB,OAAO,EAAM,SAAS,GAAI,CAAE,UAAW,EAAO,oBAC3E,EAAA,EAAA,MAAC,EAAD,CAAY,UAAW,EAAO,sBAA9B,EACE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SAAqB,EAAM,MAAM,QAA6B,CAAA,EAE9D,EAAA,EAAA,KAAC,EAAW,KAAZ,CAAiB,UAAU,qBAAa,EAAM,MAAM,YAA8B,CAAA,CAEjF,EAAM,MAAM,MAAQ,KACnB,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgB,EAAM,MAAM,YAAc,QAAU,KAC/D,KAAM,EAAM,MAAM,IAAI,IACtB,KAAM,EACN,aAAA,GACA,CAAA,IAGF,CAAA,CACF,CAAA,EArBC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"DTga4UBD.chunk.js","names":[],"sources":["../../src/apps/default/views/no-classrooms-error/no-classrooms-error.module.scss","../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":[":local {\n .container {\n height: 100%;\n background-size: 100%;\n background-repeat: no-repeat;\n position: relative;\n }\n \n .subContainer {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n }\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}\n"],"mappings":"4PCcA,SAAgB,EAAsB,EAAuD,CAM3F,OALA,EAAmB,CAAE,MAAO,EAAM,OAAO,QAAS,CAAC,CAE9C,EAAM,OAIT,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,OAAQ,OAAQ,WAC5B,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,gBAAiB,OAAO,EAAM,SAAS,GAAI,CAAE,UAAW,EAAO,oBAC3E,EAAA,EAAA,MAAC,EAAD,CAAY,UAAW,EAAO,sBAA9B,EACE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SAAqB,EAAM,MAAM,QAA6B,CAAA,EAE9D,EAAA,EAAA,KAAC,EAAW,KAAZ,CAAiB,UAAU,qBAAa,EAAM,MAAM,YAA8B,CAAA,CAEjF,EAAM,MAAM,MAAQ,KACnB,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgB,EAAM,MAAM,YAAc,QAAU,KAC/D,KAAM,EAAM,MAAM,IAAI,IACtB,KAAM,EACN,aAAA,GACA,CAAA,IAGF,CAAA,CACF,CAAA,EArBC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
@@ -0,0 +1 @@
1
+ import{n as e}from"./BnSjmWJq.chunk.js";export{e as GenerateReportView};
@@ -1,2 +1,2 @@
1
- import{P as e,qn as t,st as n}from"./Db8SRTe2.chunk.js";import{r}from"./B4CGL9yn.chunk.js";import{n as i}from"./DtVx2WiO.chunk.js";import{t as a}from"./BpIQdoUJ.chunk.js";import{n as o,r as s}from"./Drne0tRP.chunk.js";import{n as c}from"./NRdjeteL.chunk.js";import{$ as l,F as u,M as d}from"./app-BBppvgGe.js";import{m as f}from"./D9h-ARYb2.chunk.js";import{t as p}from"./CaEKrEVr.chunk.js";var m=t(n());function h(e){let[,t]=i(d.HEADER_ACTIONS);(0,m.useEffect)(()=>(t(e),()=>{t(null)}),[!!e])}var g=e(),_=a.encloseNamespace(`reportsShared.anonymiseAction`);function v(){let[e,t]=i(d.ANONYMISE_USERS,!1);return(0,g.jsxs)(`div`,{className:`d-flex align-items center justify-content-between`,onClick:()=>t(!e),children:[(0,g.jsx)(`span`,{className:`me-3`,children:_(`hideNames`)}),(0,g.jsx)(c,{on:e,onClick:()=>{}})]})}var y=a.encloseNamespace(`reportsShared.utils`);function b(e){let t=f(l.getPrimaryObjectUrl);if(!e)return;let n=[];return t&&n.push({label:()=>(0,g.jsxs)(`span`,{className:`d-flex justify-content-between align-items-center`,children:[(0,g.jsx)(`span`,{className:`me-2`,children:y(`seeVideo`)}),(0,g.jsx)(r,{svg:u})]}),href:t(e),openInNewTab:!0}),n.push({label:()=>(0,g.jsx)(v,{})}),n}function x(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.VideoViews}}}]}function S(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.Logins}}}]}export{h as i,x as n,b as r,S as t};
2
- //# sourceMappingURL=CXKHpDxD.chunk.js.map
1
+ import{P as e,qn as t,st as n}from"./Db8SRTe2.chunk.js";import{r}from"./B4CGL9yn.chunk.js";import{n as i}from"./DtVx2WiO.chunk.js";import{t as a}from"./BpIQdoUJ.chunk.js";import{n as o,r as s}from"./Drne0tRP.chunk.js";import{n as c}from"./NRdjeteL.chunk.js";import{$ as l,F as u,M as d}from"./app-DomX9RS2.js";import{m as f}from"./DFrb5tDP2.chunk.js";import{t as p}from"./BnSjmWJq.chunk.js";var m=t(n());function h(e){let[,t]=i(d.HEADER_ACTIONS);(0,m.useEffect)(()=>(t(e),()=>{t(null)}),[!!e])}var g=e(),_=a.encloseNamespace(`reportsShared.anonymiseAction`);function v(){let[e,t]=i(d.ANONYMISE_USERS,!1);return(0,g.jsxs)(`div`,{className:`d-flex align-items center justify-content-between`,onClick:()=>t(!e),children:[(0,g.jsx)(`span`,{className:`me-3`,children:_(`hideNames`)}),(0,g.jsx)(c,{on:e,onClick:()=>{}})]})}var y=a.encloseNamespace(`reportsShared.utils`);function b(e){let t=f(l.getPrimaryObjectUrl);if(!e)return;let n=[];return t&&n.push({label:()=>(0,g.jsxs)(`span`,{className:`d-flex justify-content-between align-items-center`,children:[(0,g.jsx)(`span`,{className:`me-2`,children:y(`seeVideo`)}),(0,g.jsx)(r,{svg:u})]}),href:t(e),openInNewTab:!0}),n.push({label:()=>(0,g.jsx)(v,{})}),n}function x(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.VideoViews}}}]}function S(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.Logins}}}]}export{h as i,x as n,b as r,S as t};
2
+ //# sourceMappingURL=DjoLfFO8.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CXKHpDxD.chunk.js","names":[],"sources":["../../src/shared/hooks/UseSetHeaderActions.ts","../../src/shared/components/anonymise-action/AnonymiseAction.tsx","../../src/shared/utils/HeaderActionUtils.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * This hook will only set the actions on the initial render.\n * If the actions are dynamic, either this hook will need to be updated\n * or useViewModel used directly.\n */\nexport function useSetHeaderActions(actions?: DropdownActionOptions[]): void {\n const [ , setActions ] = useViewModel<DropdownActionOptions[]>(ViewModelKeys.HEADER_ACTIONS);\n\n useEffect(() => {\n setActions(actions);\n\n return () => {\n setActions(null);\n };\n }, [!!actions]);\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nconst namespace = 'reportsShared.anonymiseAction';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AnonymiseAction(): JSX.Element {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS, false);\n\n return (\n <div\n className='d-flex align-items center justify-content-between'\n onClick={() => setAnonymiseUsers(!anonymiseUsers)}\n >\n <span className='me-3'>\n {getPhrase('hideNames')}\n </span>\n <ToggleSwitch on={anonymiseUsers} onClick={() => {}} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AnonymiseAction } from 'shared/components/anonymise-action/AnonymiseAction';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { GenerateReportType } from 'shared/views/generate-report/GenerateReportView';\n\nimport { ExternalRouteHelper } from './ExternalRouteHelper';\n\nconst namespace = 'reportsShared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetObjectHeaderActions(object?: BaseObject): DropdownActionOptions[] {\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n if (!object)\n return;\n\n const actions: DropdownActionOptions[] = [];\n\n if (getObjectUrl)\n actions.push({\n label: () => (\n <span\n className='d-flex justify-content-between align-items-center'\n >\n <span className='me-2'>\n {/* // TODO: once we have non-video types this will need to be updated. */}\n {getPhrase('seeVideo')}\n </span>\n <SvgContainer svg={NewWindowSvg} />\n </span>\n ),\n href: getObjectUrl(object),\n openInNewTab: true\n });\n\n actions.push({\n label: () => <AnonymiseAction />\n });\n\n return actions;\n}\n\nexport function getVideoHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.VideoViews }\n }\n }];\n}\n\nexport function getLoginHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.Logins }\n }\n }];\n}\n"],"mappings":"oZAaA,SAAgB,EAAoB,EAAyC,CAC3E,GAAM,EAAI,GAAe,EAAsC,EAAc,eAAe,EAE5F,EAAA,EAAA,gBACE,EAAW,EAAQ,KAEN,CACX,EAAW,KAAK,GAEjB,CAAC,CAAC,CAAC,EAAQ,CAAC,WCZX,EAAY,EAAgB,iBADhB,gCAC2C,CAE7D,SAAgB,GAA+B,CAC7C,GAAM,CAAE,EAAgB,GAAsB,EAAsB,EAAc,gBAAiB,GAAM,CAEzG,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,oDACV,YAAe,EAAkB,CAAC,EAAe,UAFnD,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBACb,EAAU,YAAY,CAClB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,GAAI,EAAgB,YAAe,GAAM,CAAA,CACnD,GCNV,IAAM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,EAA0B,EAA8C,CACtF,IAAM,EAAe,EAAkB,EAAoB,oBAAoB,CAC/E,GAAI,CAAC,EACH,OAEF,IAAM,EAAmC,EAAE,CAuB3C,OArBI,GACF,EAAQ,KAAK,CACX,WACE,EAAA,EAAA,MAAC,OAAD,CACE,UAAU,6DADZ,EAGE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAEb,EAAU,WAAW,CACjB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAgB,CAAA,CAC9B,GAET,KAAM,EAAa,EAAO,CAC1B,aAAc,GACf,CAAC,CAEJ,EAAQ,KAAK,CACX,WAAa,EAAA,EAAA,KAAC,EAAD,EAAmB,CAAA,CACjC,CAAC,CAEK,EAGT,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,WAAY,CAChD,CACF,CAAC,CAGJ,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,OAAQ,CAC5C,CACF,CAAC"}
1
+ {"version":3,"file":"DjoLfFO8.chunk.js","names":[],"sources":["../../src/shared/hooks/UseSetHeaderActions.ts","../../src/shared/components/anonymise-action/AnonymiseAction.tsx","../../src/shared/utils/HeaderActionUtils.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * This hook will only set the actions on the initial render.\n * If the actions are dynamic, either this hook will need to be updated\n * or useViewModel used directly.\n */\nexport function useSetHeaderActions(actions?: DropdownActionOptions[]): void {\n const [ , setActions ] = useViewModel<DropdownActionOptions[]>(ViewModelKeys.HEADER_ACTIONS);\n\n useEffect(() => {\n setActions(actions);\n\n return () => {\n setActions(null);\n };\n }, [!!actions]);\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nconst namespace = 'reportsShared.anonymiseAction';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AnonymiseAction(): JSX.Element {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS, false);\n\n return (\n <div\n className='d-flex align-items center justify-content-between'\n onClick={() => setAnonymiseUsers(!anonymiseUsers)}\n >\n <span className='me-3'>\n {getPhrase('hideNames')}\n </span>\n <ToggleSwitch on={anonymiseUsers} onClick={() => {}} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AnonymiseAction } from 'shared/components/anonymise-action/AnonymiseAction';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { GenerateReportType } from 'shared/views/generate-report/GenerateReportView';\n\nimport { ExternalRouteHelper } from './ExternalRouteHelper';\n\nconst namespace = 'reportsShared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetObjectHeaderActions(object?: BaseObject): DropdownActionOptions[] {\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n if (!object)\n return;\n\n const actions: DropdownActionOptions[] = [];\n\n if (getObjectUrl)\n actions.push({\n label: () => (\n <span\n className='d-flex justify-content-between align-items-center'\n >\n <span className='me-2'>\n {/* // TODO: once we have non-video types this will need to be updated. */}\n {getPhrase('seeVideo')}\n </span>\n <SvgContainer svg={NewWindowSvg} />\n </span>\n ),\n href: getObjectUrl(object),\n openInNewTab: true\n });\n\n actions.push({\n label: () => <AnonymiseAction />\n });\n\n return actions;\n}\n\nexport function getVideoHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.VideoViews }\n }\n }];\n}\n\nexport function getLoginHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.Logins }\n }\n }];\n}\n"],"mappings":"oZAaA,SAAgB,EAAoB,EAAyC,CAC3E,GAAM,EAAI,GAAe,EAAsC,EAAc,eAAe,EAE5F,EAAA,EAAA,gBACE,EAAW,EAAQ,KAEN,CACX,EAAW,KAAK,GAEjB,CAAC,CAAC,CAAC,EAAQ,CAAC,WCZX,EAAY,EAAgB,iBADhB,gCAC2C,CAE7D,SAAgB,GAA+B,CAC7C,GAAM,CAAE,EAAgB,GAAsB,EAAsB,EAAc,gBAAiB,GAAM,CAEzG,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,oDACV,YAAe,EAAkB,CAAC,EAAe,UAFnD,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBACb,EAAU,YAAY,CAClB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,GAAI,EAAgB,YAAe,GAAM,CAAA,CACnD,GCNV,IAAM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,EAA0B,EAA8C,CACtF,IAAM,EAAe,EAAkB,EAAoB,oBAAoB,CAC/E,GAAI,CAAC,EACH,OAEF,IAAM,EAAmC,EAAE,CAuB3C,OArBI,GACF,EAAQ,KAAK,CACX,WACE,EAAA,EAAA,MAAC,OAAD,CACE,UAAU,6DADZ,EAGE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAEb,EAAU,WAAW,CACjB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAgB,CAAA,CAC9B,GAET,KAAM,EAAa,EAAO,CAC1B,aAAc,GACf,CAAC,CAEJ,EAAQ,KAAK,CACX,WAAa,EAAA,EAAA,KAAC,EAAD,EAAmB,CAAA,CACjC,CAAC,CAEK,EAGT,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,WAAY,CAChD,CACF,CAAC,CAGJ,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,OAAQ,CAC5C,CACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{t as n}from"./app-BBppvgGe.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
- //# sourceMappingURL=Bp2lnEra.chunk.js.map
1
+ import{P as e,st as t}from"./Db8SRTe2.chunk.js";import{t as n}from"./app-DomX9RS2.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
+ //# sourceMappingURL=DjtI-11t.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bp2lnEra.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}
1
+ {"version":3,"file":"DjtI-11t.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}