@clickview/reports 0.86.0-rc.0 → 0.86.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.
- package/dist/.vite/manifest.json +252 -252
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{D4_Ou9e_.chunk.js → B3BAH-B8.chunk.js} +2 -2
- package/dist/scripts/{D4_Ou9e_.chunk.js.map → B3BAH-B8.chunk.js.map} +1 -1
- package/dist/scripts/{BWJBtdAK2.chunk.js → B9u-BJ_k2.chunk.js} +2 -2
- package/dist/scripts/{BWJBtdAK2.chunk.js.map → B9u-BJ_k2.chunk.js.map} +1 -1
- package/dist/scripts/BIvkuRmF.chunk.js +1 -0
- package/dist/scripts/{BLy0WwGy.chunk.js → BLILOa4O.chunk.js} +2 -2
- package/dist/scripts/{BLy0WwGy.chunk.js.map → BLILOa4O.chunk.js.map} +1 -1
- package/dist/scripts/{BVgajZti.chunk.js → BNQGo_Gd.chunk.js} +2 -2
- package/dist/scripts/{BVgajZti.chunk.js.map → BNQGo_Gd.chunk.js.map} +1 -1
- package/dist/scripts/{296Drw6z.chunk.js → BTLhY0Si.chunk.js} +2 -2
- package/dist/scripts/BTLhY0Si.chunk.js.map +1 -0
- package/dist/scripts/{BV2ee_KR.chunk.js → Bf4DlBxT.chunk.js} +2 -2
- package/dist/scripts/{BV2ee_KR.chunk.js.map → Bf4DlBxT.chunk.js.map} +1 -1
- package/dist/scripts/{DQamsoU_2.chunk.js → Bl6b6nAn2.chunk.js} +2 -2
- package/dist/scripts/{DQamsoU_2.chunk.js.map → Bl6b6nAn2.chunk.js.map} +1 -1
- package/dist/scripts/{DhJ5lhcc.chunk.js → Bv4pM4sp.chunk.js} +2 -2
- package/dist/scripts/{DhJ5lhcc.chunk.js.map → Bv4pM4sp.chunk.js.map} +1 -1
- package/dist/scripts/{CmiQpwgd2.chunk.js → C-4Pza2l2.chunk.js} +2 -2
- package/dist/scripts/{CmiQpwgd2.chunk.js.map → C-4Pza2l2.chunk.js.map} +1 -1
- package/dist/scripts/{CMQlrOon2.chunk.js → C21pODi22.chunk.js} +2 -2
- package/dist/scripts/{CMQlrOon2.chunk.js.map → C21pODi22.chunk.js.map} +1 -1
- package/dist/scripts/{PLyhtHwt2.chunk.js → C46TEWQx2.chunk.js} +2 -2
- package/dist/scripts/{PLyhtHwt2.chunk.js.map → C46TEWQx2.chunk.js.map} +1 -1
- package/dist/scripts/{DsnkNBu62.chunk.js → CMw7H8FK2.chunk.js} +2 -2
- package/dist/scripts/{DsnkNBu62.chunk.js.map → CMw7H8FK2.chunk.js.map} +1 -1
- package/dist/scripts/{cBssbttB.chunk.js → CQNeP_Yp.chunk.js} +2 -2
- package/dist/scripts/{cBssbttB.chunk.js.map → CQNeP_Yp.chunk.js.map} +1 -1
- package/dist/scripts/{Cv9H330A2.chunk.js → ClDdEKYV2.chunk.js} +2 -2
- package/dist/scripts/{Cv9H330A2.chunk.js.map → ClDdEKYV2.chunk.js.map} +1 -1
- package/dist/scripts/{CglHgfcX.chunk.js → Cu6M80aY.chunk.js} +2 -2
- package/dist/scripts/{CglHgfcX.chunk.js.map → Cu6M80aY.chunk.js.map} +1 -1
- package/dist/scripts/{dMt3Yeox.chunk.js → D0Iup4vX.chunk.js} +3 -3
- package/dist/scripts/{dMt3Yeox.chunk.js.map → D0Iup4vX.chunk.js.map} +1 -1
- package/dist/scripts/{BCPzswJq.chunk.js → D5SnHbk-.chunk.js} +2 -2
- package/dist/scripts/{BCPzswJq.chunk.js.map → D5SnHbk-.chunk.js.map} +1 -1
- package/dist/scripts/{CudCJxPc2.chunk.js → DHGyxAjV2.chunk.js} +2 -2
- package/dist/scripts/{CudCJxPc2.chunk.js.map → DHGyxAjV2.chunk.js.map} +1 -1
- package/dist/scripts/{B2L2H3g9.chunk.js → DMQIqlrn.chunk.js} +2 -2
- package/dist/scripts/{B2L2H3g9.chunk.js.map → DMQIqlrn.chunk.js.map} +1 -1
- package/dist/scripts/{CFA2yuiv.chunk.js → DSOStB3B.chunk.js} +2 -2
- package/dist/scripts/{CFA2yuiv.chunk.js.map → DSOStB3B.chunk.js.map} +1 -1
- package/dist/scripts/{CPw6bsFu2.chunk.js → DaN1d6Pn2.chunk.js} +2 -2
- package/dist/scripts/{CPw6bsFu2.chunk.js.map → DaN1d6Pn2.chunk.js.map} +1 -1
- package/dist/scripts/{D68hdbWD2.chunk.js → DeAZkXBA2.chunk.js} +2 -2
- package/dist/scripts/{D68hdbWD2.chunk.js.map → DeAZkXBA2.chunk.js.map} +1 -1
- package/dist/scripts/{BPVl1Je7.chunk.js → DeQ431eX.chunk.js} +2 -2
- package/dist/scripts/{BPVl1Je7.chunk.js.map → DeQ431eX.chunk.js.map} +1 -1
- package/dist/scripts/DuNznK6r.chunk.js +1 -0
- package/dist/scripts/{oPoOD_J-2.chunk.js → Duq0DLsG2.chunk.js} +2 -2
- package/dist/scripts/{oPoOD_J-2.chunk.js.map → Duq0DLsG2.chunk.js.map} +1 -1
- package/dist/scripts/{BHTp9hJG.chunk.js → Dxi0YECT.chunk.js} +2 -2
- package/dist/scripts/{BHTp9hJG.chunk.js.map → Dxi0YECT.chunk.js.map} +1 -1
- package/dist/scripts/{D3WnBGZG.chunk.js → KApJ0N8H.chunk.js} +2 -2
- package/dist/scripts/{D3WnBGZG.chunk.js.map → KApJ0N8H.chunk.js.map} +1 -1
- package/dist/scripts/{DcKDIHY92.chunk.js → LH8waKdJ2.chunk.js} +2 -2
- package/dist/scripts/{DcKDIHY92.chunk.js.map → LH8waKdJ2.chunk.js.map} +1 -1
- package/dist/scripts/{DNKj09Lh2.chunk.js → O4R5nbYC2.chunk.js} +2 -2
- package/dist/scripts/{DNKj09Lh2.chunk.js.map → O4R5nbYC2.chunk.js.map} +1 -1
- package/dist/scripts/{BQjyL0qS2.chunk.js → VhnfG4dU2.chunk.js} +2 -2
- package/dist/scripts/{BQjyL0qS2.chunk.js.map → VhnfG4dU2.chunk.js.map} +1 -1
- package/dist/scripts/{app-cakVQEAF.js → app-DLh9RnwX.js} +4 -4
- package/dist/scripts/{app-cakVQEAF.js.map → app-DLh9RnwX.js.map} +1 -1
- package/dist/scripts/{Dj68Q14w.chunk.js → e3pgZZ_n.chunk.js} +2 -2
- package/dist/scripts/{Dj68Q14w.chunk.js.map → e3pgZZ_n.chunk.js.map} +1 -1
- package/dist/scripts/{DrBRL2aF.chunk.js → mKkhzqL1.chunk.js} +2 -2
- package/dist/scripts/{DrBRL2aF.chunk.js.map → mKkhzqL1.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/296Drw6z.chunk.js.map +0 -1
- package/dist/scripts/CyRTALRJ.chunk.js +0 -1
- package/dist/scripts/Dm7M2BT8.chunk.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{N as e,Q as t,Wt as n,Yt as r,z as i}from"./BSV_W0cK.chunk.js";import{i as a}from"./DVHj6R3-.chunk.js";import{a as o,b as s,d as c,h as l}from"./DLiesDxa.chunk.js";import{t as u}from"./BDdd6NA7.chunk.js";var d={get(e,t){return e?.[t]?.value},getCustomerSettingsRequest(e,t){return e?.isAuthenticated?m.customerSettings(t?.success,t?.error):m._publicCustomerSettings(t?.success,t?.error)},getUserSettingsRequest(e,t){return e?.isAuthenticated?m.userSettings(t?.success,t?.error):m._publicUserSettings(t?.success,t?.error)},formatSettings(e){return e.reduce((e,t)=>(e[t.name]=t,e),{})}},f=[{name:`new_classification_view`,value:!0},{name:`must_complete_onboarding`,value:!1},{name:`has_completed_onboarding`,value:!0},{name:`has_displayed_presentation_switcher_spotlight`,value:!0},{name:`has_curated_discover_dashboards`,value:!0},{name:`has_special_event_calendar`,value:!0},{name:`new_movies_and_tv`,value:!0},{name:`has_partner_profiles`,value:!0}],p=()=>(r.throw(new n(`SettingRequests.setPublicFormatSettings must be called before using public requests in SettingRequests`)),null),m={setPublicFormatSettings(e){e&&(p=e)},organisationSettings(e,t,n){return{key:`settings:organisation:${e}`,url:`{gateway}/v1/organisations/${e}/settings`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:t,error:n}},customerSetting(e,t,n){return{key:`settings:customer:${e}`,url:`{gateway}/v1/customers/me/settings?type=${e}`,normalizeOptions:{idAttribute:`name`},formatData:e=>u.first(e),success:t,error:n}},customerSettings(e,t){return{key:`customer:settings`,url:`{gateway}/v1/customers/me/settings?(customerSettings)`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:e,error:t}},_publicCustomerSettings(e,t){return{key:`customer:settings`,url:`simulated:/api/domain/v3/settings/public`,normalizeOptions:{idAttribute:`name`},formatData:p,success:e,error:t,successResponse:()=>f}},_publicUserSettings(e,t){return{key:`user:settings`,url:`simulated:/api/domain/v3/settings/public`,normalizeOptions:{idAttribute:`name`},formatData:p,success:e,error:t,successResponse:()=>f}},userSetting(e,t,n){return{key:`settings:user:${e}`,url:`{gateway}/v1/customers/me/settings?type=${e}`,normalizeOptions:{idAttribute:`name`},formatData:e=>u.first(e),success:t,error:n}},userSettings(e,t){return{key:`user:settings`,url:`{gateway}/v1/users/me/settings?(userSettings)`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:e,error:t}},updateUserSetting(e,t,n,r){return{key:`update:user:setting:${e.name}`,url:`{gateway}/v1/users/me/settings`,data:e,type:s.PUT,formatData:()=>e,normalizeOptions:{idAttribute:`name`},success:t,error:n,always:r}},updateCustomerSetting(e,t,n,r){return{key:`update:customer:setting:${e.name}`,url:`{gateway}/v1/customers/me/settings`,data:e,type:s.PUT,formatData:()=>e,normalizeOptions:{idAttribute:`name`},success:t,error:n,always:r}}},h=function(e){return e.MustCompleteOnboarding=`must_complete_onboarding`,e.StudentWorkspaceSharing=`student_ws_sharing`,e.StudentToStudentMessaging=`student_to_student_messaging`,e.HideResourcesForStudents=`hide_resources_for_students`,e.LibraryReview=`library_review`,e.SchoolMessaging=`school_messaging`,e.LegacyTvNaming=`legacy_tv_naming`,e.HideHostedLibraries=`hide_hosted_libraries`,e.MaxCustomLibraries=`max_custom_libraries`,e.AutoCaptioning=`auto_captioning`,e.Topics=`subjects`,e.NewDashboards=`new_dashboards`,e.ShareToGoogleClassroom=`share_to_google_classroom`,e.ShareToMicrosoftTeams=`share_to_microsoft_teams`,e.DefaultPlaybackQuality=`playback_quality_default`,e.DefaultLocalCachePlaybackQuality=`playback_quality_local_cache_default`,e.EnableSubtitlesDefault=`playback_subtitles_enabled_default`,e.LTI=`lti`,e.HasNewClassificationView=`new_classification_view`,e.HasCuratedDiscoverDashboards=`has_curated_discover_dashboards`,e.HasLiteSearchDropdown=`has_lite_search_dropdown`,e.HasSpecialEventCalendar=`has_special_event_calendar`,e.PreviewVideos=`preview_videos`,e.DomainSettings=`domain_settings`,e.InviteColleague=`invite_colleague`,e.ExchangeTvProductOption=`exchange_tv_product_option`,e.MyVideosFolders=`my_videos_folders`,e.TvRegion=`tv_region`,e.ShareOverrideRestrictions=`share_override_restrictions`,e.HasTopicDirectories=`has_topic_directories`,e.MessageFrequencyOption=`message_frequency`,e.HasTopicVideoListFeature=`has_topic_video_list_feature`,e.HasManageGrouPermissions=`has_manage_group_permissions`,e.ExperimentalInteractiveQuestions=`experimental_interactive_questions`,e.PublicInteractiveAttempts=`public_interactive_attempts`,e.HasClassrooms=`has_classrooms`,e.HasNewSearch=`has_new_search`,e.HasPlayPageTranscript=`has_play_page_transcript`,e.HasShareFlowV2=`has_share_flow_v2`,e.HasPartnerProfiles=`has_partner_profiles`,e.PreferredTheme=`preferred_theme`,e.HasHubEntry=`has_hub_entry`,e.HasEnabledViviPlayback=`has_enabled_vivi_playback`,e.HasEnabledViviStudentCasting=`has_enabled_vivi_student_casting`,e.HasEnabledAppleTvPlayback=`has_enabled_apple_tv_playback`,e.HasDisplayedTutorialVideosProductTip=`has_displayed_tutorial_videos_spotlight`,e.HasDismissedAnalyticsTutorial=`has_dismissed_analytics_tutorial`,e.HasDismissedOpenClassroomsTutorial=`has_dismissed_open_classrooms_tutorial`,e.HasDismissedSearchAndDiscoverTutorial=`has_dismissed_search_and_discover_tutorial`,e.HasDismissedClassroomsTutorial=`has_dismissed_classrooms_tutorial`,e.HasDismissedMySharesTutorial=`has_dismissed_my_shares_tutorial`,e.HasDismissedMyVideosTutorial=`has_dismissed_my_videos_tutorial`,e.HasDismissedPlaylistsTutorial=`has_dismissed_playlists_tutorial`,e.ShowExchangeSearchResultsUser=`show_exchange_search_results_user`,e.UserEnabledPreviewVideos=`user_enabled_preview_videos`,e.LiteUpgradeTypeCustomer=`lite_upgrade_type_customer`,e.PolicyEndTime=`policy_end_time`,e.ReferralCount=`referral_count`,e.HasCompletedOnboardingV1=`has_completed_onboarding`,e.BulkOnboardingPreferencesState=`bulk_onboarding_preferences_state`,e.HasCompletedOnboardingV2=`has_completed_onboarding_v2`,e.HasExitedOnboarding=`has_exited_onboarding`,e.HasCompletedOnboardingStepSelectRole=`has_completed_onboarding_step_select_role`,e.HasCompletedOnboardingStepSchoolLevel=`has_completed_onboarding_step_school_level`,e.HasCompletedOnboardingStepAudiencePreferences=`has_completed_onboarding_step_audience_preferences`,e.HasCompletedOnboardingStepSelectCurriculum=`has_completed_onboarding_step_select_curriculum`,e.HasCompletedOnboardingStepSubjects=`has_completed_onboarding_step_subjects`,e.StudentInteractives=`student_interactives`,e.ExpandSchoolLibrary=`expand_school_library`,e.PrimaryProduct=`primary_product`,e.ImmediateFeedbackInteractives=`immediate_feedback_interactives`,e.LiteStudentCustomLibraries=`lite_student_custom_libraries`,e.HasEnabledRostering=`has_enabled_rostering`,e.DefaultCitationStyle=`default_citation_style`,e.HasStudentReach=`has_student_reach`,e.StudentReachClassroomSize=`student_reach_classroom_size`,e.SchoolStartTime=`school_start_time`,e.SchoolEndTime=`school_end_time`,e.Timezone=`timezone_iana`,e.ClickViewLive=`clickview_live`,e.HasStudentLowerPresentations=`students_lower_presentations`,e}({}),g=n=>{let r=c(a.currentUser()),s=c(r.hasCompleted&&d.getCustomerSettingsRequest(r.data)),u=c(r.hasCompleted&&d.getUserSettingsRequest(r.data)),f=l(),p=!!s.hasCompleted&&!!u.hasCompleted,g=e=>{if(!p||s.hasError||u.hasError)return null;let t=s.data?.[e];if(t)return t?.value;let n=u.data?.[e];return n?n?.value:null};function _(e,t,n,r,i){return e===`user`?m.updateUserSetting(t,n,r,i):m.updateCustomerSetting(t,n,r,i)}let v=(r,a,s,c,l)=>{function u(){e.logUserAction({name:a.name,value:a.value},{location:n,entity:i.UserSetting,actionType:t.Edit}),s?.()}o(f,_(r,a,u,c,l))},y=(e,t)=>new Promise((n,r)=>{v(e,t,n,r)}),b=(e,t,n,r)=>v(`user`,e,t,n,r),x=(e,t,n,r)=>v(`customer`,e,t,n,r),S=e=>y(`user`,e),C=e=>y(`customer`,e);function w(){return r.data?.isAuthenticated?g(h.HasTopicDirectories):!0}return{isLoadingSettings:!p,updateUserSetting:b,updateUserSettingAsync:S,updateCustomerSetting:x,updateCustomerSettingAsync:C,userSettings:u,shareToGoogleClassroom:g(h.ShareToGoogleClassroom),shareToMicrosoftTeams:g(h.ShareToMicrosoftTeams),hasLti:g(h.LTI),defaultPlaybackQuality:g(h.DefaultPlaybackQuality),defaultLocalCachePlaybackQuality:g(h.DefaultLocalCachePlaybackQuality),enableSubtitlesDefault:g(h.EnableSubtitlesDefault),hasCompletedOnboardingV1:g(h.HasCompletedOnboardingV1),hasCompletedOnboardingV2:g(h.HasCompletedOnboardingV2),liteUpgradeTypeCustomer:g(h.LiteUpgradeTypeCustomer),hasNewClassificationView:g(h.HasNewClassificationView),hasCuratedDiscoverDashboards:g(h.HasCuratedDiscoverDashboards),hasSpecialEventCalendar:g(h.HasSpecialEventCalendar),hasLiteSearchDropdown:g(h.HasLiteSearchDropdown),policyEndTime:g(h.PolicyEndTime),bulkOnboardingPreferencesState:g(h.BulkOnboardingPreferencesState),hasOnlineTopics:g(h.Topics),hasPreviewVideos:g(h.PreviewVideos),hasUserEnabledPreviewVideos:g(h.UserEnabledPreviewVideos),domainSettings:g(h.DomainSettings),inviteColleague:g(h.InviteColleague),myVideosFolders:g(h.MyVideosFolders),exchangeTvProductOption:g(h.ExchangeTvProductOption),messageFrequencyOption:g(h.MessageFrequencyOption),tvRegion:g(h.TvRegion),preferredTheme:g(h.PreferredTheme),hasHubEntry:g(h.HasHubEntry),hasEnabledViviStudentCasting:g(h.HasEnabledViviStudentCasting),hasEnabledViviPlayback:g(h.HasEnabledViviPlayback),hasEnabledAppleTvPlayback:g(h.HasEnabledAppleTvPlayback),hasDisplayedTutorialVideosProductTip:g(h.HasDisplayedTutorialVideosProductTip),hasDismissedAnalyticsTutorial:g(h.HasDismissedAnalyticsTutorial),hasDismissedOpenClassroomsTutorial:g(h.HasDismissedOpenClassroomsTutorial),hasDismissedSearchAndDiscoverTutorial:g(h.HasDismissedSearchAndDiscoverTutorial),hasDismissedClassroomsTutorial:g(h.HasDismissedClassroomsTutorial),hasDismissedMySharesTutorial:g(h.HasDismissedMySharesTutorial),hasDismissedMyVideosTutorial:g(h.HasDismissedMyVideosTutorial),hasDismissedPlaylistsTutorial:g(h.HasDismissedPlaylistsTutorial),showExchangeSearchResults:g(h.ShowExchangeSearchResultsUser),shareOverrideRestrictions:g(h.ShareOverrideRestrictions),hasTopicDirectories:w(),hasTopicVideoListFeature:g(h.HasTopicVideoListFeature),hasManageGroupPermissions:g(h.HasManageGrouPermissions),experimentalInteractiveQuestions:g(h.ExperimentalInteractiveQuestions),hasClassrooms:g(h.HasClassrooms),hasNewSearch:g(h.HasNewSearch),hasPlayPageTranscript:g(h.HasPlayPageTranscript),hasShareFlowV2:g(h.HasShareFlowV2),referralCount:g(h.ReferralCount),hasPartnerProfiles:g(h.HasPartnerProfiles),defaultCitationStyle:g(h.DefaultCitationStyle),hasStudentReach:g(h.HasStudentReach),studentReachClassroomSize:g(h.StudentReachClassroomSize),schoolStartTime:g(h.SchoolStartTime),schoolEndTime:g(h.SchoolEndTime),timezone:g(h.Timezone),clickViewLive:g(h.ClickViewLive),hasStudentLowerPresentations:g(h.HasStudentLowerPresentations)}};export{h as n,m as r,g as t};
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{N as e,Q as t,Wt as n,Yt as r,z as i}from"./BSV_W0cK.chunk.js";import{i as a}from"./DVHj6R3-.chunk.js";import{a as o,b as s,d as c,h as l}from"./DLiesDxa.chunk.js";import{t as u}from"./BDdd6NA7.chunk.js";var d={get(e,t){return e?.[t]?.value},getCustomerSettingsRequest(e,t){return e?.isAuthenticated?m.customerSettings(t?.success,t?.error):m._publicCustomerSettings(t?.success,t?.error)},getUserSettingsRequest(e,t){return e?.isAuthenticated?m.userSettings(t?.success,t?.error):m._publicUserSettings(t?.success,t?.error)},formatSettings(e){return e.reduce((e,t)=>(e[t.name]=t,e),{})}},f=[{name:`new_classification_view`,value:!0},{name:`must_complete_onboarding`,value:!1},{name:`has_completed_onboarding`,value:!0},{name:`has_displayed_presentation_switcher_spotlight`,value:!0},{name:`has_curated_discover_dashboards`,value:!0},{name:`has_special_event_calendar`,value:!0},{name:`new_movies_and_tv`,value:!0},{name:`has_partner_profiles`,value:!0}],p=()=>(r.throw(new n(`SettingRequests.setPublicFormatSettings must be called before using public requests in SettingRequests`)),null),m={setPublicFormatSettings(e){e&&(p=e)},organisationSettings(e,t,n){return{key:`settings:organisation:${e}`,url:`{gateway}/v1/organisations/${e}/settings`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:t,error:n}},customerSetting(e,t,n){return{key:`settings:customer:${e}`,url:`{gateway}/v1/customers/me/settings?type=${e}`,normalizeOptions:{idAttribute:`name`},formatData:e=>u.first(e),success:t,error:n}},customerSettings(e,t){return{key:`customer:settings`,url:`{gateway}/v1/customers/me/settings?(customerSettings)`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:e,error:t}},_publicCustomerSettings(e,t){return{key:`customer:settings`,url:`simulated:/api/domain/v3/settings/public`,normalizeOptions:{idAttribute:`name`},formatData:p,success:e,error:t,successResponse:()=>f}},_publicUserSettings(e,t){return{key:`user:settings`,url:`simulated:/api/domain/v3/settings/public`,normalizeOptions:{idAttribute:`name`},formatData:p,success:e,error:t,successResponse:()=>f}},userSetting(e,t,n){return{key:`settings:user:${e}`,url:`{gateway}/v1/customers/me/settings?type=${e}`,normalizeOptions:{idAttribute:`name`},formatData:e=>u.first(e),success:t,error:n}},userSettings(e,t){return{key:`user:settings`,url:`{gateway}/v1/users/me/settings?(userSettings)`,normalizeOptions:{idAttribute:`name`},formatData:d.formatSettings,success:e,error:t}},updateUserSetting(e,t,n,r){return{key:`update:user:setting:${e.name}`,url:`{gateway}/v1/users/me/settings`,data:e,type:s.PUT,formatData:()=>e,normalizeOptions:{idAttribute:`name`},success:t,error:n,always:r}},updateCustomerSetting(e,t,n,r){return{key:`update:customer:setting:${e.name}`,url:`{gateway}/v1/customers/me/settings`,data:e,type:s.PUT,formatData:()=>e,normalizeOptions:{idAttribute:`name`},success:t,error:n,always:r}}},h=function(e){return e.MustCompleteOnboarding=`must_complete_onboarding`,e.StudentWorkspaceSharing=`student_ws_sharing`,e.StudentToStudentMessaging=`student_to_student_messaging`,e.HideResourcesForStudents=`hide_resources_for_students`,e.LibraryReview=`library_review`,e.SchoolMessaging=`school_messaging`,e.LegacyTvNaming=`legacy_tv_naming`,e.HideHostedLibraries=`hide_hosted_libraries`,e.MaxCustomLibraries=`max_custom_libraries`,e.AutoCaptioning=`auto_captioning`,e.Topics=`subjects`,e.NewDashboards=`new_dashboards`,e.ShareToGoogleClassroom=`share_to_google_classroom`,e.ShareToMicrosoftTeams=`share_to_microsoft_teams`,e.DefaultPlaybackQuality=`playback_quality_default`,e.DefaultLocalCachePlaybackQuality=`playback_quality_local_cache_default`,e.EnableSubtitlesDefault=`playback_subtitles_enabled_default`,e.LTI=`lti`,e.HasNewClassificationView=`new_classification_view`,e.HasCuratedDiscoverDashboards=`has_curated_discover_dashboards`,e.HasLiteSearchDropdown=`has_lite_search_dropdown`,e.HasSpecialEventCalendar=`has_special_event_calendar`,e.PreviewVideos=`preview_videos`,e.DomainSettings=`domain_settings`,e.InviteColleague=`invite_colleague`,e.ExchangeTvProductOption=`exchange_tv_product_option`,e.MyVideosFolders=`my_videos_folders`,e.TvRegion=`tv_region`,e.ShareOverrideRestrictions=`share_override_restrictions`,e.HasTopicDirectories=`has_topic_directories`,e.MessageFrequencyOption=`message_frequency`,e.HasTopicVideoListFeature=`has_topic_video_list_feature`,e.HasManageGrouPermissions=`has_manage_group_permissions`,e.ExperimentalInteractiveQuestions=`experimental_interactive_questions`,e.PublicInteractiveAttempts=`public_interactive_attempts`,e.HasClassrooms=`has_classrooms`,e.HasNewSearch=`has_new_search`,e.HasPlayPageTranscript=`has_play_page_transcript`,e.HasShareFlowV2=`has_share_flow_v2`,e.HasPartnerProfiles=`has_partner_profiles`,e.PreferredTheme=`preferred_theme`,e.HasHubEntry=`has_hub_entry`,e.HasEnabledViviPlayback=`has_enabled_vivi_playback`,e.HasEnabledViviStudentCasting=`has_enabled_vivi_student_casting`,e.HasEnabledAppleTvPlayback=`has_enabled_apple_tv_playback`,e.HasDisplayedTutorialVideosProductTip=`has_displayed_tutorial_videos_spotlight`,e.HasDismissedAnalyticsTutorial=`has_dismissed_analytics_tutorial`,e.HasDismissedOpenClassroomsTutorial=`has_dismissed_open_classrooms_tutorial`,e.HasDismissedSearchAndDiscoverTutorial=`has_dismissed_search_and_discover_tutorial`,e.HasDismissedClassroomsTutorial=`has_dismissed_classrooms_tutorial`,e.HasDismissedMySharesTutorial=`has_dismissed_my_shares_tutorial`,e.HasDismissedMyVideosTutorial=`has_dismissed_my_videos_tutorial`,e.HasDismissedPlaylistsTutorial=`has_dismissed_playlists_tutorial`,e.ShowExchangeSearchResultsUser=`show_exchange_search_results_user`,e.UserEnabledPreviewVideos=`user_enabled_preview_videos`,e.LiteUpgradeTypeCustomer=`lite_upgrade_type_customer`,e.PolicyEndTime=`policy_end_time`,e.ReferralCount=`referral_count`,e.HasCompletedOnboardingV1=`has_completed_onboarding`,e.BulkOnboardingPreferencesState=`bulk_onboarding_preferences_state`,e.HasCompletedOnboardingV2=`has_completed_onboarding_v2`,e.HasExitedOnboarding=`has_exited_onboarding`,e.HasCompletedOnboardingStepSelectRole=`has_completed_onboarding_step_select_role`,e.HasCompletedOnboardingStepSchoolLevel=`has_completed_onboarding_step_school_level`,e.HasCompletedOnboardingStepAudiencePreferences=`has_completed_onboarding_step_audience_preferences`,e.HasCompletedOnboardingStepSelectCurriculum=`has_completed_onboarding_step_select_curriculum`,e.HasCompletedOnboardingStepSubjects=`has_completed_onboarding_step_subjects`,e.StudentInteractives=`student_interactives`,e.ExpandSchoolLibrary=`expand_school_library`,e.PrimaryProduct=`primary_product`,e.ImmediateFeedbackInteractives=`immediate_feedback_interactives`,e.LiteStudentCustomLibraries=`lite_student_custom_libraries`,e.HasEnabledRostering=`has_enabled_rostering`,e.DefaultCitationStyle=`default_citation_style`,e.HasStudentReach=`has_student_reach`,e.StudentReachClassroomSize=`student_reach_classroom_size`,e.SchoolStartTime=`school_start_time`,e.SchoolEndTime=`school_end_time`,e.Timezone=`timezone_iana`,e.ClickViewLive=`clickview_live`,e.HasStudentLowerPresentations=`students_lower_presentations`,e.VideoExportEmailDownloadLinkOnly=`video_export_email_download_link_only`,e}({}),g=n=>{let r=c(a.currentUser()),s=c(r.hasCompleted&&d.getCustomerSettingsRequest(r.data)),u=c(r.hasCompleted&&d.getUserSettingsRequest(r.data)),f=l(),p=!!s.hasCompleted&&!!u.hasCompleted,g=e=>{if(!p||s.hasError||u.hasError)return null;let t=s.data?.[e];if(t)return t?.value;let n=u.data?.[e];return n?n?.value:null};function _(e,t,n,r,i){return e===`user`?m.updateUserSetting(t,n,r,i):m.updateCustomerSetting(t,n,r,i)}let v=(r,a,s,c,l)=>{function u(){e.logUserAction({name:a.name,value:a.value},{location:n,entity:i.UserSetting,actionType:t.Edit}),s?.()}o(f,_(r,a,u,c,l))},y=(e,t)=>new Promise((n,r)=>{v(e,t,n,r)}),b=(e,t,n,r)=>v(`user`,e,t,n,r),x=(e,t,n,r)=>v(`customer`,e,t,n,r),S=e=>y(`user`,e),C=e=>y(`customer`,e);function w(){return r.data?.isAuthenticated?g(h.HasTopicDirectories):!0}return{isLoadingSettings:!p,updateUserSetting:b,updateUserSettingAsync:S,updateCustomerSetting:x,updateCustomerSettingAsync:C,userSettings:u,shareToGoogleClassroom:g(h.ShareToGoogleClassroom),shareToMicrosoftTeams:g(h.ShareToMicrosoftTeams),hasLti:g(h.LTI),defaultPlaybackQuality:g(h.DefaultPlaybackQuality),defaultLocalCachePlaybackQuality:g(h.DefaultLocalCachePlaybackQuality),enableSubtitlesDefault:g(h.EnableSubtitlesDefault),hasCompletedOnboardingV1:g(h.HasCompletedOnboardingV1),hasCompletedOnboardingV2:g(h.HasCompletedOnboardingV2),liteUpgradeTypeCustomer:g(h.LiteUpgradeTypeCustomer),hasNewClassificationView:g(h.HasNewClassificationView),hasCuratedDiscoverDashboards:g(h.HasCuratedDiscoverDashboards),hasSpecialEventCalendar:g(h.HasSpecialEventCalendar),hasLiteSearchDropdown:g(h.HasLiteSearchDropdown),policyEndTime:g(h.PolicyEndTime),bulkOnboardingPreferencesState:g(h.BulkOnboardingPreferencesState),hasOnlineTopics:g(h.Topics),hasPreviewVideos:g(h.PreviewVideos),hasUserEnabledPreviewVideos:g(h.UserEnabledPreviewVideos),domainSettings:g(h.DomainSettings),inviteColleague:g(h.InviteColleague),myVideosFolders:g(h.MyVideosFolders),exchangeTvProductOption:g(h.ExchangeTvProductOption),messageFrequencyOption:g(h.MessageFrequencyOption),tvRegion:g(h.TvRegion),preferredTheme:g(h.PreferredTheme),hasHubEntry:g(h.HasHubEntry),hasEnabledViviStudentCasting:g(h.HasEnabledViviStudentCasting),hasEnabledViviPlayback:g(h.HasEnabledViviPlayback),hasEnabledAppleTvPlayback:g(h.HasEnabledAppleTvPlayback),hasDisplayedTutorialVideosProductTip:g(h.HasDisplayedTutorialVideosProductTip),hasDismissedAnalyticsTutorial:g(h.HasDismissedAnalyticsTutorial),hasDismissedOpenClassroomsTutorial:g(h.HasDismissedOpenClassroomsTutorial),hasDismissedSearchAndDiscoverTutorial:g(h.HasDismissedSearchAndDiscoverTutorial),hasDismissedClassroomsTutorial:g(h.HasDismissedClassroomsTutorial),hasDismissedMySharesTutorial:g(h.HasDismissedMySharesTutorial),hasDismissedMyVideosTutorial:g(h.HasDismissedMyVideosTutorial),hasDismissedPlaylistsTutorial:g(h.HasDismissedPlaylistsTutorial),showExchangeSearchResults:g(h.ShowExchangeSearchResultsUser),shareOverrideRestrictions:g(h.ShareOverrideRestrictions),hasTopicDirectories:w(),hasTopicVideoListFeature:g(h.HasTopicVideoListFeature),hasManageGroupPermissions:g(h.HasManageGrouPermissions),experimentalInteractiveQuestions:g(h.ExperimentalInteractiveQuestions),hasClassrooms:g(h.HasClassrooms),hasNewSearch:g(h.HasNewSearch),hasPlayPageTranscript:g(h.HasPlayPageTranscript),hasShareFlowV2:g(h.HasShareFlowV2),referralCount:g(h.ReferralCount),hasPartnerProfiles:g(h.HasPartnerProfiles),defaultCitationStyle:g(h.DefaultCitationStyle),hasStudentReach:g(h.HasStudentReach),studentReachClassroomSize:g(h.StudentReachClassroomSize),schoolStartTime:g(h.SchoolStartTime),schoolEndTime:g(h.SchoolEndTime),timezone:g(h.Timezone),clickViewLive:g(h.ClickViewLive),hasStudentLowerPresentations:g(h.HasStudentLowerPresentations)}};export{h as n,m as r,g as t};
|
|
2
|
+
//# sourceMappingURL=BTLhY0Si.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BTLhY0Si.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/SettingsHelper.ts","../../../../libs/shared/src/flight-requests/simulated/PublicSettingResponse.json","../../../../libs/shared/src/flight-requests/SettingRequests.ts","../../../../libs/shared/src/enums/SettingName.ts","../../../../libs/shared/src/hooks/useSettings.ts"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\n\nimport { SettingName, SettingsLookup } from 'libs/shared/enums/SettingName';\n\nimport { SettingRequests } from '../flight-requests/SettingRequests';\nimport { CurrentUser, EntitySetting } from '../interfaces';\n\ninterface GetCustomerRequestOptions {\n success?: (data: SettingsLookup) => void;\n error?: () => void;\n}\n\nexport const SettingsHelper = {\n get<TValue = any>(settings: SettingsLookup, name: SettingName): TValue {\n return settings?.[name]?.value;\n },\n\n /**\n * Used to get public or authenticated customer request\n */\n getCustomerSettingsRequest(\n currentUser: CurrentUser,\n options?: GetCustomerRequestOptions\n ): Flight.Request | Flight.SimulatedRequest {\n if (currentUser?.isAuthenticated)\n return SettingRequests.customerSettings(options?.success, options?.error);\n\n return SettingRequests._publicCustomerSettings(options?.success, options?.error);\n },\n\n /**\n * Used to get public or authenticated user request\n */\n getUserSettingsRequest(\n currentUser: CurrentUser,\n options?: GetCustomerRequestOptions\n ): Flight.Request | Flight.SimulatedRequest {\n if (currentUser?.isAuthenticated)\n return SettingRequests.userSettings(options?.success, options?.error);\n\n return SettingRequests._publicUserSettings(options?.success, options?.error);\n },\n\n formatSettings(settings: Array<EntitySetting<any>>): SettingsLookup {\n return settings.reduce((acc: SettingsLookup, setting) => {\n acc[setting.name] = setting;\n return acc;\n }, {} as SettingsLookup);\n }\n};\n","[\n {\n \"name\": \"new_classification_view\",\n \"value\": true\n },\n {\n \"name\": \"must_complete_onboarding\",\n \"value\": false\n },\n {\n \"name\": \"has_completed_onboarding\",\n \"value\": true\n },\n {\n \"name\": \"has_displayed_presentation_switcher_spotlight\",\n \"value\": true\n },\n {\n \"name\": \"has_curated_discover_dashboards\",\n \"value\": true\n },\n {\n \"name\": \"has_special_event_calendar\",\n \"value\": true\n },\n {\n \"name\": \"new_movies_and_tv\",\n \"value\": true\n },\n {\n \"name\": \"has_partner_profiles\",\n \"value\": true\n }\n]","import { ErrorHelper } from 'libs/common/backbone/core';\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName, SettingsLookup } from 'libs/shared/enums/SettingName';\nimport { EntitySetting } from 'libs/shared/interfaces';\n\nimport { SettingsHelper } from '../utils/SettingsHelper';\n\nimport PublicSettingResponse from './simulated/PublicSettingResponse.json';\n\ntype FormatSettingsFunc = (settings: Array<EntitySetting<any>>) => SettingsLookup | [];\n\n/**\n * This function is used to format settings data for public settings requests.\n * It allows us to control if we want to filter out any settings before using the default\n * `PublicSettingResponse` data in each public facing projects like Lite and Streamable Learning.\n */\nlet formatPublicSettings: any = (): any => {\n ErrorHelper.throw(\n new DevError('SettingRequests.setPublicFormatSettings must be called before using public requests in SettingRequests')\n );\n\n return null;\n};\n \nexport interface UpdateSettingRequest<TValue = any> {\n displayName?: string;\n name: SettingName;\n value: TValue;\n kind: SettingKind;\n}\n\nexport const SettingRequests = {\n setPublicFormatSettings(func: FormatSettingsFunc): void {\n if (!func)\n return;\n\n formatPublicSettings = func;\n },\n\n organisationSettings(\n id: string,\n success?: (data: SettingsLookup) => void,\n error?: () => void\n ): Flight.Request {\n return {\n key: `settings:organisation:${id}`,\n url: `{gateway}/v1/organisations/${id}/settings`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: SettingsHelper.formatSettings,\n success,\n error\n };\n },\n\n customerSetting(\n name: SettingName,\n success?: (data: EntitySetting<any>) => void,\n error?: () => void\n ): Flight.Request {\n return {\n key: `settings:customer:${name}`,\n url: `{gateway}/v1/customers/me/settings?type=${name}`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: (data: EntitySetting[]) => {\n return ArrayHelper.first(data);\n },\n success,\n error\n };\n },\n \n customerSettings(\n success?: (data: SettingsLookup) => void,\n error?: () => void\n ): Flight.Request {\n return {\n key: `customer:settings`,\n url: `{gateway}/v1/customers/me/settings?(customerSettings)`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: SettingsHelper.formatSettings,\n success,\n error\n };\n },\n\n /**\n * This is only used to fetch hardcoded public settings for the customer \n */\n _publicCustomerSettings(\n success?: (data: SettingsLookup) => void,\n error?: () => void\n ): Flight.SimulatedRequest {\n return {\n key: `customer:settings`,\n url: `simulated:/api/domain/v3/settings/public`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: formatPublicSettings,\n success,\n error,\n successResponse: () => PublicSettingResponse\n };\n },\n\n /**\n * This is only used to fetch hardcoded public settings for the user \n */\n _publicUserSettings(\n success?: (data: SettingsLookup) => void,\n error?: () => void\n ): Flight.SimulatedRequest {\n return {\n key: `user:settings`,\n url: `simulated:/api/domain/v3/settings/public`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: formatPublicSettings,\n success,\n error,\n successResponse: () => PublicSettingResponse\n };\n },\n\n userSetting(\n name: SettingName,\n success?: (data: EntitySetting<any>) => void,\n error?: () => void\n ): Flight.Request {\n return {\n key: `settings:user:${name}`,\n url: `{gateway}/v1/customers/me/settings?type=${name}`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: (data: EntitySetting[]) => {\n return ArrayHelper.first(data);\n },\n success,\n error\n };\n },\n\n userSettings(\n success?: (data: SettingsLookup) => void,\n error?: () => void\n ): Flight.Request {\n return {\n key: `user:settings`,\n url: `{gateway}/v1/users/me/settings?(userSettings)`,\n normalizeOptions: {\n idAttribute: 'name'\n },\n formatData: SettingsHelper.formatSettings,\n success,\n error\n };\n },\n\n updateUserSetting<TValue = any>(\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `update:user:setting:${data.name}`,\n url: `{gateway}/v1/users/me/settings`,\n data,\n type: HttpVerbs.PUT,\n formatData: () => data,\n normalizeOptions: {\n idAttribute: 'name'\n },\n success,\n error,\n always\n };\n },\n\n updateCustomerSetting<TValue = any>(\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `update:customer:setting:${data.name}`,\n url: `{gateway}/v1/customers/me/settings`,\n data,\n type: HttpVerbs.PUT,\n formatData: () => data,\n normalizeOptions: {\n idAttribute: 'name'\n },\n success,\n error,\n always\n };\n }\n};\n","import { EntitySetting } from 'libs/shared/interfaces';\n\nexport type SettingsLookup = {\n [key in SettingName]: EntitySetting<any>;\n};\n\nexport enum SettingName {\n // Customer settings\n MustCompleteOnboarding = 'must_complete_onboarding',\n StudentWorkspaceSharing = 'student_ws_sharing',\n StudentToStudentMessaging = 'student_to_student_messaging',\n HideResourcesForStudents = 'hide_resources_for_students',\n LibraryReview = 'library_review',\n SchoolMessaging = 'school_messaging',\n LegacyTvNaming = 'legacy_tv_naming',\n HideHostedLibraries = 'hide_hosted_libraries',\n MaxCustomLibraries = 'max_custom_libraries',\n AutoCaptioning = 'auto_captioning',\n Topics = 'subjects',\n NewDashboards = 'new_dashboards',\n ShareToGoogleClassroom = 'share_to_google_classroom',\n ShareToMicrosoftTeams = 'share_to_microsoft_teams',\n DefaultPlaybackQuality = 'playback_quality_default',\n DefaultLocalCachePlaybackQuality = 'playback_quality_local_cache_default',\n EnableSubtitlesDefault = 'playback_subtitles_enabled_default',\n LTI = 'lti',\n HasNewClassificationView = 'new_classification_view',\n HasCuratedDiscoverDashboards = 'has_curated_discover_dashboards',\n HasLiteSearchDropdown = 'has_lite_search_dropdown',\n HasSpecialEventCalendar = 'has_special_event_calendar',\n PreviewVideos = 'preview_videos',\n DomainSettings = 'domain_settings',\n InviteColleague = 'invite_colleague',\n ExchangeTvProductOption = 'exchange_tv_product_option',\n MyVideosFolders = 'my_videos_folders',\n TvRegion = 'tv_region',\n ShareOverrideRestrictions = 'share_override_restrictions',\n HasTopicDirectories = 'has_topic_directories',\n MessageFrequencyOption = 'message_frequency',\n HasTopicVideoListFeature = 'has_topic_video_list_feature',\n HasManageGrouPermissions = 'has_manage_group_permissions',\n ExperimentalInteractiveQuestions = 'experimental_interactive_questions',\n PublicInteractiveAttempts = 'public_interactive_attempts',\n HasClassrooms = 'has_classrooms',\n HasNewSearch = 'has_new_search',\n HasPlayPageTranscript = 'has_play_page_transcript',\n HasShareFlowV2 = 'has_share_flow_v2',\n HasPartnerProfiles = 'has_partner_profiles',\n PreferredTheme = 'preferred_theme',\n HasHubEntry = 'has_hub_entry',\n\n // Devices\n HasEnabledViviPlayback = 'has_enabled_vivi_playback',\n HasEnabledViviStudentCasting = 'has_enabled_vivi_student_casting',\n HasEnabledAppleTvPlayback = 'has_enabled_apple_tv_playback',\n\n // Product tips\n HasDisplayedTutorialVideosProductTip = 'has_displayed_tutorial_videos_spotlight',\n\n // Tutorial Video Highlight\n HasDismissedAnalyticsTutorial = 'has_dismissed_analytics_tutorial',\n HasDismissedOpenClassroomsTutorial = 'has_dismissed_open_classrooms_tutorial',\n HasDismissedSearchAndDiscoverTutorial = 'has_dismissed_search_and_discover_tutorial',\n HasDismissedClassroomsTutorial = 'has_dismissed_classrooms_tutorial',\n HasDismissedMySharesTutorial = 'has_dismissed_my_shares_tutorial',\n HasDismissedMyVideosTutorial = 'has_dismissed_my_videos_tutorial',\n HasDismissedPlaylistsTutorial = 'has_dismissed_playlists_tutorial',\n\n // User settings\n ShowExchangeSearchResultsUser = 'show_exchange_search_results_user',\n UserEnabledPreviewVideos = 'user_enabled_preview_videos',\n\n // Lite Upgrade - We keep this setting around to know if a customer went through the list upgrade\n LiteUpgradeTypeCustomer = 'lite_upgrade_type_customer',\n\n // Trials\n PolicyEndTime = 'policy_end_time',\n ReferralCount = 'referral_count',\n\n // Onboarding - V1\n HasCompletedOnboardingV1 = 'has_completed_onboarding', // This is deprecated for the new product\n BulkOnboardingPreferencesState = 'bulk_onboarding_preferences_state',\n\n // Onboarding - V2\n HasCompletedOnboardingV2 = 'has_completed_onboarding_v2',\n HasExitedOnboarding = 'has_exited_onboarding',\n HasCompletedOnboardingStepSelectRole = 'has_completed_onboarding_step_select_role',\n HasCompletedOnboardingStepSchoolLevel = 'has_completed_onboarding_step_school_level',\n HasCompletedOnboardingStepAudiencePreferences = 'has_completed_onboarding_step_audience_preferences',\n HasCompletedOnboardingStepSelectCurriculum = 'has_completed_onboarding_step_select_curriculum',\n HasCompletedOnboardingStepSubjects = 'has_completed_onboarding_step_subjects',\n\n StudentInteractives = 'student_interactives',\n ExpandSchoolLibrary = 'expand_school_library',\n PrimaryProduct = 'primary_product',\n ImmediateFeedbackInteractives = 'immediate_feedback_interactives',\n LiteStudentCustomLibraries = 'lite_student_custom_libraries',\n\n // Organisation level\n HasEnabledRostering = 'has_enabled_rostering',\n\n // Citations\n DefaultCitationStyle = 'default_citation_style',\n\n // Reports\n HasStudentReach = 'has_student_reach',\n StudentReachClassroomSize = 'student_reach_classroom_size',\n SchoolStartTime = 'school_start_time',\n SchoolEndTime = 'school_end_time',\n Timezone = 'timezone_iana',\n\n ClickViewLive = 'clickview_live',\n HasStudentLowerPresentations = 'students_lower_presentations',\n \n VideoExportEmailDownloadLinkOnly = 'video_export_email_download_link_only'\n}\n","import { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { SettingName, SettingsLookup } from 'libs/shared/enums/SettingName';\nimport { SettingRequests, UpdateSettingRequest } from 'libs/shared/flight-requests/SettingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, DefaultPlaybackQuality, EntitySetting } from 'libs/shared/interfaces';\nimport { ExchangeTvProductOption } from 'libs/shared/interfaces/ExchangeTvProductOption';\nimport { MessageFrequencyOption } from 'libs/shared/interfaces/models/MessageFrequencyOption';\nimport { PreferredTheme } from 'libs/shared/interfaces/PreferredTheme';\n\nimport { SettingsHelper } from '../utils/SettingsHelper';\n\ntype SettingType = 'user' | 'customer';\n\n/**\n * Location context is only required if you're using updateSetting() or you need log analytics;\n */\nexport const useSettings = (locationContext: LocationContext | null) => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const customerSettings = Flight.useBasicFetch<SettingsLookup>(\n currentUser.hasCompleted &&\n SettingsHelper.getCustomerSettingsRequest(currentUser.data)\n );\n\n const userSettings = Flight.useBasicFetch<SettingsLookup>(\n currentUser.hasCompleted &&\n SettingsHelper.getUserSettingsRequest(currentUser.data)\n );\n\n const dispatch = useDispatch();\n\n const hasLoaded = !!customerSettings.hasCompleted && !!userSettings.hasCompleted;\n\n const getSetting = <TValue = any>(name: SettingName): TValue | null => {\n if (!hasLoaded)\n return null;\n\n if (customerSettings.hasError || userSettings.hasError)\n return null;\n\n const customerSetting = customerSettings.data?.[name] as EntitySetting<TValue>;\n\n if (customerSetting)\n return customerSetting?.value;\n\n const userSetting = userSettings.data?.[name] as EntitySetting<TValue>;\n\n if (userSetting)\n return userSetting?.value;\n\n return null;\n };\n\n function _getRequest<TValue>(\n type: SettingType,\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n if (type === 'user')\n return SettingRequests.updateUserSetting(data, success, error, always);\n\n return SettingRequests.updateCustomerSetting(data, success, error, always);\n }\n\n const _updateSetting = <TValue = any>(\n type: SettingType,\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ) => {\n function onSuccess(): void {\n AnalyticsHelper.logUserAction({\n name: data.name,\n value: data.value\n }, {\n location: locationContext,\n entity: EntityType.UserSetting,\n actionType: UserAction.Edit\n });\n\n success?.();\n }\n\n Flight.fetch(dispatch, _getRequest(type, data, onSuccess, error, always));\n };\n\n const _updateSettingAsync = <TValue = any>(\n type: SettingType,\n data: UpdateSettingRequest<TValue>\n ): Promise<void> => {\n return new Promise((resolve, reject) => {\n _updateSetting(\n type,\n data,\n resolve,\n reject\n );\n });\n };\n\n const updateUserSetting = <TValue = any>(\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ) => _updateSetting('user', data, success, error, always);\n\n const updateCustomerSetting = <TValue = any>(\n data: UpdateSettingRequest<TValue>,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ) => _updateSetting('customer', data, success, error, always);\n\n const updateUserSettingAsync = <TValue = any>(\n data: UpdateSettingRequest<TValue>\n ): Promise<void> => _updateSettingAsync('user', data);\n \n const updateCustomerSettingAsync = <TValue = any>(\n data: UpdateSettingRequest<TValue>\n ): Promise<void> => _updateSettingAsync('customer', data);\n \n /**\n * AU, US, and UK have access to this, but international doesn't.\n * This means anon users also have access, which is why this custom\n * function is needed.\n */\n function hasTopicDirectories(): boolean {\n if (currentUser.data?.isAuthenticated)\n return getSetting<boolean>(SettingName.HasTopicDirectories);\n\n return true;\n }\n\n return {\n isLoadingSettings: !hasLoaded,\n updateUserSetting,\n updateUserSettingAsync,\n updateCustomerSetting,\n updateCustomerSettingAsync,\n userSettings,\n shareToGoogleClassroom: getSetting<boolean>(SettingName.ShareToGoogleClassroom),\n shareToMicrosoftTeams: getSetting<boolean>(SettingName.ShareToMicrosoftTeams),\n hasLti: getSetting<boolean>(SettingName.LTI),\n defaultPlaybackQuality: getSetting<DefaultPlaybackQuality>(SettingName.DefaultPlaybackQuality),\n defaultLocalCachePlaybackQuality: getSetting<DefaultPlaybackQuality>(SettingName.DefaultLocalCachePlaybackQuality),\n enableSubtitlesDefault: getSetting<boolean>(SettingName.EnableSubtitlesDefault),\n hasCompletedOnboardingV1: getSetting<boolean>(SettingName.HasCompletedOnboardingV1),\n hasCompletedOnboardingV2: getSetting<boolean>(SettingName.HasCompletedOnboardingV2),\n\n liteUpgradeTypeCustomer: getSetting<string>(SettingName.LiteUpgradeTypeCustomer),\n\n hasNewClassificationView: getSetting<boolean>(SettingName.HasNewClassificationView),\n hasCuratedDiscoverDashboards: getSetting<boolean>(SettingName.HasCuratedDiscoverDashboards),\n hasSpecialEventCalendar: getSetting<boolean>(SettingName.HasSpecialEventCalendar),\n hasLiteSearchDropdown: getSetting<boolean>(SettingName.HasLiteSearchDropdown),\n policyEndTime: getSetting<string>(SettingName.PolicyEndTime),\n bulkOnboardingPreferencesState: (\n getSetting<BulkOnboardingPreferencesState>(SettingName.BulkOnboardingPreferencesState)\n ),\n hasOnlineTopics: getSetting<boolean>(SettingName.Topics),\n hasPreviewVideos: getSetting<boolean>(SettingName.PreviewVideos),\n hasUserEnabledPreviewVideos: getSetting<boolean>(SettingName.UserEnabledPreviewVideos),\n domainSettings: getSetting<boolean>(SettingName.DomainSettings),\n inviteColleague: getSetting<boolean>(SettingName.InviteColleague),\n myVideosFolders: getSetting<boolean>(SettingName.MyVideosFolders),\n exchangeTvProductOption: getSetting<ExchangeTvProductOption>(SettingName.ExchangeTvProductOption),\n messageFrequencyOption: getSetting<MessageFrequencyOption>(SettingName.MessageFrequencyOption),\n tvRegion: getSetting<string>(SettingName.TvRegion),\n preferredTheme: getSetting<PreferredTheme>(SettingName.PreferredTheme),\n hasHubEntry: getSetting<boolean>(SettingName.HasHubEntry),\n\n // Devices\n hasEnabledViviStudentCasting: getSetting<boolean>(SettingName.HasEnabledViviStudentCasting),\n hasEnabledViviPlayback: getSetting<boolean>(SettingName.HasEnabledViviPlayback),\n hasEnabledAppleTvPlayback: getSetting<boolean>(SettingName.HasEnabledAppleTvPlayback),\n\n // Product tips\n hasDisplayedTutorialVideosProductTip: getSetting<boolean>(SettingName.HasDisplayedTutorialVideosProductTip),\n\n // Tutorial video highlight\n hasDismissedAnalyticsTutorial: getSetting<boolean>(SettingName.HasDismissedAnalyticsTutorial),\n hasDismissedOpenClassroomsTutorial: getSetting<boolean>(SettingName.HasDismissedOpenClassroomsTutorial),\n hasDismissedSearchAndDiscoverTutorial: getSetting<boolean>(SettingName.HasDismissedSearchAndDiscoverTutorial),\n hasDismissedClassroomsTutorial: getSetting<boolean>(SettingName.HasDismissedClassroomsTutorial),\n hasDismissedMySharesTutorial: getSetting<boolean>(SettingName.HasDismissedMySharesTutorial),\n hasDismissedMyVideosTutorial: getSetting<boolean>(SettingName.HasDismissedMyVideosTutorial),\n hasDismissedPlaylistsTutorial: getSetting<boolean>(SettingName.HasDismissedPlaylistsTutorial),\n\n // This has to be enabled both on the customer and user level for exchange results to show\n showExchangeSearchResults: getSetting<boolean>(SettingName.ShowExchangeSearchResultsUser),\n shareOverrideRestrictions:\n getSetting<boolean>(SettingName.ShareOverrideRestrictions),\n hasTopicDirectories: hasTopicDirectories(),\n hasTopicVideoListFeature: getSetting<boolean>(SettingName.HasTopicVideoListFeature),\n hasManageGroupPermissions: getSetting<boolean>(SettingName.HasManageGrouPermissions),\n experimentalInteractiveQuestions:\n getSetting<boolean>(SettingName.ExperimentalInteractiveQuestions),\n hasClassrooms: getSetting<boolean>(SettingName.HasClassrooms),\n hasNewSearch: getSetting<boolean>(SettingName.HasNewSearch),\n hasPlayPageTranscript: getSetting<boolean>(SettingName.HasPlayPageTranscript),\n hasShareFlowV2: getSetting<boolean>(SettingName.HasShareFlowV2),\n referralCount: getSetting<number>(SettingName.ReferralCount),\n hasPartnerProfiles: getSetting<boolean>(SettingName.HasPartnerProfiles),\n\n defaultCitationStyle: getSetting<string>(SettingName.DefaultCitationStyle),\n\n hasStudentReach: getSetting<boolean>(SettingName.HasStudentReach),\n studentReachClassroomSize: getSetting<number>(SettingName.StudentReachClassroomSize),\n schoolStartTime: getSetting<string>(SettingName.SchoolStartTime),\n schoolEndTime: getSetting<string>(SettingName.SchoolEndTime),\n timezone: getSetting<string>(SettingName.Timezone),\n clickViewLive: getSetting<boolean>(SettingName.ClickViewLive),\n hasStudentLowerPresentations: getSetting<boolean>(SettingName.HasStudentLowerPresentations)\n };\n};\n\nexport type SettingsHash = Partial<ReturnType<typeof useSettings>>;\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{d as n,n as r}from"./DLiesDxa.chunk.js";import{t as i}from"./BDdd6NA7.chunk.js";import{t as a}from"./Dhb09xKG.chunk.js";import{t as o}from"./BmJ66zOA.chunk.js";import{n as s}from"./CNQKHXPY.chunk.js";import{t as c}from"./Bqlm3yF_.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./DmGbjBUG.chunk.js";import{t as d}from"./Du_kaCuU.chunk.js";import{b as f,r as p}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{d as n,n as r}from"./DLiesDxa.chunk.js";import{t as i}from"./BDdd6NA7.chunk.js";import{t as a}from"./Dhb09xKG.chunk.js";import{t as o}from"./BmJ66zOA.chunk.js";import{n as s}from"./CNQKHXPY.chunk.js";import{t as c}from"./Bqlm3yF_.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./DmGbjBUG.chunk.js";import{t as d}from"./Du_kaCuU.chunk.js";import{b as f,r as p}from"./app-DLh9RnwX.js";import{a as m,i as h,n as g,s as _,t as v}from"./LH8waKdJ2.chunk.js";import{n as y,t as b}from"./B9u-BJ_k2.chunk.js";import{i as x,t as S}from"./D5SnHbk-.chunk.js";var C=o();t();var w={logins(e,t,n,r){return{url:s.urlBuilder(`{gateway}/v1/analytics/logins`,{...e,timeOffset:a.getTimezoneOffset()}),key:b(`logins`,e),normalize:!1,success:t,error:n,always:r}}},T=e(),E={image:`_image_zpxv9_1`},D=c.encloseNamespace(`reportsShared.schoolLoginsByGroupCardEmptyState`);function O(){return(0,T.jsxs)(d,{className:`flex-grow-1 justify-content-center`,children:[(0,T.jsx)(d.Image,{src:l.EmptyStates.Shared.School,className:E.image}),(0,T.jsx)(d.Heading,{className:`h6`,children:D(`heading`)}),(0,T.jsx)(d.Info,{className:`w-100`,children:D(`description`)})]})}var k=`logins.schoolLoginsByGroupCard`;function A(){let e=p(`logins`),t=n(w.logins(e)),i=f(),a=e=>e===`Unknown`||e===null?`Staff`:e,o=g(t.data?.yearGroupCount?.map(e=>({name:a(e.name),count:e.count}))),s=o?.reduce((e,t)=>e+t.y,0);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`h6 mb-1`,children:(0,T.jsx)(r,{namespace:k,phrase:i?`totalLoginsTertiary`:`totalLogins`,options:{logins:s}})}),o.length?(0,T.jsx)(C.Scrollbars,{className:`position-relative`,children:(0,T.jsx)(`div`,{className:`position-absolute w-100`,children:(0,T.jsx)(_,{data:o})})}):(0,T.jsx)(O,{})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-50`,children:`\xA0`})})}var j={MONTH:35,YEAR:365},M={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},N={day:`D MMM`,month:`MMM`,year:`YYYY`};function P(e){let t=a.diffBetween(e.end,e.start,`day`);return t>j.YEAR?`year`:t>j.MONTH?`month`:`day`}function F(e,t){let n=[],r=a.convertUTCToLocal(e.start),i=a.convertUTCToLocal(e.end),o=a.format(r,M[t]);for(;!a.isAfter(o,i,t);)n.push(o),o=a.format(a.add(o,1,t),M[t]);return n}function I(e,t){if(!e)return null;let n=P(t),r=F(t,n),o={};e.forEach(e=>{if(!e.userType)return;let t=`groupedDateWatched`in e&&e.groupedDateWatched||`groupedLoggedOn`in e&&e.groupedLoggedOn,r=a.format(a.convertUTCToLocal(t),M[n]);o[e.userType]=o[e.userType]??{},o[e.userType][r]=o[e.userType][r]??0,o[e.userType][r]+=e.count});let s=Object.keys(o);return s.length?{categories:r.map(e=>a.format(e,N[n])),data:i.sortBy(s.map(e=>({name:m(e),type:`line`,data:r.map(t=>o[e][t]??0),color:h(e)})),`name`)}:{categories:r.map(e=>a.format(e,N[n])),data:[]}}var L=`logins.schoolLoginsByMonthCard`;function R(){let e=p(`logins`),t=I(n(w.logins(e)).data?.data,e);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:t?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,T.jsx)(r,{namespace:L,phrase:`loginActivity`})}),(0,T.jsx)(v,{categories:t.categories,data:t.data})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var z={column2:`_column2_1cfp0_1`,column1:`_column1_1cfp0_1`},B=c.encloseNamespace(`logins.schoolLoginOverview`);function V(){return u({title:B(`title`)}),y(B(`title`)),x(S()),(0,T.jsx)(`div`,{children:(0,T.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,T.jsx)(`div`,{className:`${z.column1}`,children:(0,T.jsx)(A,{})}),(0,T.jsx)(`div`,{className:`${z.column2}`,children:(0,T.jsx)(R,{})})]})})}export{V as SchoolLoginOverview};
|
|
2
|
+
//# sourceMappingURL=Bf4DlBxT.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BV2ee_KR.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\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';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'> </div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'> </div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Bf4DlBxT.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\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';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'> </div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'> </div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Kn as e,P as t,ct as n,st as r}from"./BSV_W0cK.chunk.js";import{i,r as a,v as o}from"./COrUmz0l.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./B6C1sxIU.chunk.js";import{n as l}from"./CbaXvmNl2.chunk.js";import{n as u}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{Kn as e,P as t,ct as n,st as r}from"./BSV_W0cK.chunk.js";import{i,r as a,v as o}from"./COrUmz0l.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./B6C1sxIU.chunk.js";import{n as l}from"./CbaXvmNl2.chunk.js";import{n as u}from"./C46TEWQx2.chunk.js";function d(e={}){let{prevent:t,rootMargin:n,triggerOnce:r=!0}=e,[i,a,o]=u({triggerOnce:r,rootMargin:n});return(t===!0||window.IntersectionObserver===void 0)&&(a=!0,i=null),{ref:i,inView:a,initialized:!!o}}var f={image:`_image_pp6me_1`},p=e(r()),m=t(),h=`500px`,g=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`,_=p.memo(function(e){let{forceLoad:t,extraClasses:n=``,errorFallbackImageSrc:r,preventLoad:i=!1,errorFallbackImageClassName:a,src:o,alt:s,...c}=e,{ref:l,inView:u}=d({rootMargin:h}),[_,v]=p.useState(!1);p.useEffect(()=>{if(!t&&!u||i)return;let e=new Image;return e.onerror=()=>{v(!0),r&&(e.src=r)},e.src=o,()=>e.onerror=null},[u,i]);function y(){return _&&r?r:e.src}if(_&&!r)return(0,m.jsx)(m.Fragment,{});if(!l)return(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,alt:s,src:y(),...c});let b={alt:s,...c,...(u||t)&&!i?{src:y()}:{src:g}};return t||(b.ref=l),(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,...b})}),v={image:`_image_1himm_1`,thumbnail:`_thumbnail_1himm_13`,tallPoster:`_tallPoster_1himm_16`,cover:`_cover_1himm_19`,banner:`_banner_1himm_22`,poster:`_poster_1himm_25`,pdf:`_pdf_1himm_28`,link:`_link_1himm_31`};function y(e){let t=v.image,n=``;return e.imageType===s.Thumbnails&&(n=`thumbnail ${v.thumbnail}`),e.imageType===s.TallPosters&&(n=v.tallPoster),e.imageType===s.Covers&&(n=v.cover),e.imageType===s.Banners&&(n=v.banner),e.imageType===s.Posters&&(n=v.poster),e.imageType===s.Pdf&&(n=v.pdf),e.imageType===s.Link&&(n=v.link),n&&(t+=` ${n}`),e.className&&(t+=` ${e.className}`),t}function b(e){let{data:t,imageOptions:r,appLink:i,preload:a,preventLoad:s,analyticsOptions:l,analyticsData:u,imageClassName:d,alt:f}=e,p=``;typeof t==`string`?p=t:n.isObject(t)&&(p=t.url);let h=p&&r?c.createUrl(p,r):p;return(0,m.jsx)(`div`,{className:y(e),style:e.imageStyle,children:(0,m.jsxs)(o,{appLink:i,analyticsData:u,analyticsOptions:l,onClick:e.onClick,preventFocus:e.preventFocus,className:e.appLinkClassName,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[e.children,h&&(0,m.jsx)(_,{src:h,alt:f,forceLoad:a,preventLoad:s,extraClasses:d,errorFallbackImageSrc:e.errorFallbackImageSrc,errorFallbackImageClassName:e.errorFallbackImageClassName,onLoad:e.onLoad})]})})}var x=[`bg-pink`,`bg-orange`,...[`bg-green`,`bg-cyan`,`bg-teal`,`bg-blue`,`bg-indigo`,`bg-purple`]];function S(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z`,clipRule:`evenodd`})})}function C(e){return(0,m.jsx)(`svg`,{...e,viewBox:`0 0 24 21`,children:(0,m.jsx)(`path`,{d:`M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5`,fill:`currentColor`})})}function w(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,d:`M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17`})})}function T(e,t){return t[e.charCodeAt(0)%t.length]}var E={baseFallbackContainer:`_baseFallbackContainer_14tjv_1`,svgFallbackContainer:`_svgFallbackContainer_14tjv_1`,subjectFallbackContainer:`_subjectFallbackContainer_14tjv_9`,subjectFallbackContainerSmall:`_subjectFallbackContainerSmall_14tjv_18`,subjectFallbackContainerLarge:`_subjectFallbackContainerLarge_14tjv_21`,seriesItemFallback:`_seriesItemFallback_14tjv_24`,playlistItemFallback:`_playlistItemFallback_14tjv_24`,playlistFallback:`_playlistFallback_14tjv_28`,posterFallback:`_posterFallback_14tjv_29`,subjectFallback:`_subjectFallback_14tjv_9`,fallbackThumbnailImage:`_fallbackThumbnailImage_14tjv_47`,videoFallback:`_videoFallback_14tjv_55`,folderFallback:`_folderFallback_14tjv_56`},D=function(e){return e[e.Playlist=0]=`Playlist`,e[e.PlaylistThumbnail=1]=`PlaylistThumbnail`,e[e.Series=2]=`Series`,e[e.SeriesThumbnail=3]=`SeriesThumbnail`,e[e.Subject=4]=`Subject`,e[e.TallSubject=5]=`TallSubject`,e[e.Video=6]=`Video`,e[e.Folder=7]=`Folder`,e}({}),O=function(e){return e[e.Svg=0]=`Svg`,e[e.Image=1]=`Image`,e}({}),k=function(e){return e[e.Large=0]=`Large`,e[e.Small=1]=`Small`,e}({});function A(e,t,n){if(t===D.Subject){let e=n===k.Large?E.subjectFallbackContainerLarge:E.subjectFallbackContainerSmall;return`${E.subjectFallbackContainer} ${e}`}return e===O.Svg?t===D.SeriesThumbnail||t===D.PlaylistThumbnail?`${E.svgFallbackContainer} rounded-3`:E.svgFallbackContainer:E.baseFallbackContainer}function j(e){return e===D.SeriesThumbnail?E.seriesItemFallback:e===D.PlaylistThumbnail?E.playlistItemFallback:e===D.Playlist?E.playlistFallback:e===D.Series||e===D.TallSubject?E.posterFallback:e===D.Subject?`${E.subjectFallback} svg-container d-inline-block`:``}function M(e){return e===D.SeriesThumbnail||e===D.PlaylistThumbnail?S:e===D.Playlist?C:e===D.Series?w:e===D.Subject||e===D.TallSubject?l:null}function N(e){return e===D.Subject?i.ExtraLarge:i.Standard}P.defaultProps={mediaType:O.Svg,containerClassSize:k.Large};function P(e){let{type:t,mediaType:n,extraClasses:r,containerClassSize:i}=e;if(t===D.Video)return(0,m.jsx)(`div`,{className:`${E.videoFallback} ${e.extraClasses} bg-light-blue`});if(t===D.Folder)return(0,m.jsx)(`div`,{className:`${E.folderFallback} ${e.extraClasses} ${T(e.name,x)}`});let o=j(t),s=M(t),c=N(t),l=`${A(n,t,i)}`;return r&&(l+=` ${e.extraClasses}`),(0,m.jsx)(`div`,{className:l,children:n===O.Svg?(0,m.jsx)(a,{svg:s,className:`${o} ${e.svgContainerClassName??``}`,tagName:`div`,size:c}):(0,m.jsx)(`div`,{className:E.fallbackThumbnailImage,style:{backgroundImage:`url('${s}')`}})})}export{b as a,x as i,D as n,T as r,P as t};
|
|
2
|
+
//# sourceMappingURL=Bl6b6nAn2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DQamsoU_2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Bl6b6nAn2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Kn as e,P as t,U as n,st as r}from"./BSV_W0cK.chunk.js";import{n as i}from"./COrUmz0l.chunk.js";import{n as a}from"./DLiesDxa.chunk.js";import{t as o}from"./Dhb09xKG.chunk.js";import{t as s}from"./Bqlm3yF_.chunk.js";import{t as c}from"./Btl_wt9M.chunk.js";import{l,t as u}from"./DjcvhO-s.chunk.js";import{N as d,P as f,i as p}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{Kn as e,P as t,U as n,st as r}from"./BSV_W0cK.chunk.js";import{n as i}from"./COrUmz0l.chunk.js";import{n as a}from"./DLiesDxa.chunk.js";import{t as o}from"./Dhb09xKG.chunk.js";import{t as s}from"./Bqlm3yF_.chunk.js";import{t as c}from"./Btl_wt9M.chunk.js";import{l,t as u}from"./DjcvhO-s.chunk.js";import{N as d,P as f,i as p}from"./app-DLh9RnwX.js";import{t as m}from"./DPmS69Mt2.chunk.js";var h=e(r(),1),g=t(),_=`reportsDefault.classroomSizeSelector`,v=10,y=40;function b(e){return(0,g.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,g.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,g.jsx)(a,{namespace:_,phrase:`classroomSizeTitle`})}),(0,g.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,g.jsx)(a,{namespace:_,phrase:`classroomSizeDescription`})}),(0,g.jsx)(`label`,{className:`mb-1`,htmlFor:`classroomSize`,children:(0,g.jsx)(a,{namespace:_,phrase:`classroomSizeLabel`})}),(0,g.jsx)(l.Range,{id:`classroomSize`,min:v,max:y,step:1,value:e.classroomSize,onChange:t=>e.onClassroomSizeChanged(Number(t.target.value))}),(0,g.jsxs)(`div`,{className:`d-flex justify-content-between small mb-2`,children:[(0,g.jsx)(`span`,{children:v}),(0,g.jsx)(`span`,{children:y})]}),(0,g.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,g.jsx)(a,{namespace:_,phrase:`classroomSizeSummary`,options:{count:e.classroomSize}})})]})}var x=`reportsDefault.schoolHoursSelector`,S=[6,7,8,9,10,11,12,13,14,15,16,17,18],C=o.getTimezones();function w(e){let[t,n]=h.useState(!1),r=e.startHour<e.endHour;return(0,g.jsxs)(`div`,{className:i(`border rounded-3 p-3`,e.className),children:[(0,g.jsx)(`h3`,{className:`h6 fw-semibold mb-1`,children:(0,g.jsx)(a,{namespace:x,phrase:`schoolHoursTitle`})}),(0,g.jsx)(`p`,{className:`text-secondary mb-3`,children:(0,g.jsx)(a,{namespace:x,phrase:`schoolHoursDescription`})}),(0,g.jsxs)(`div`,{className:`d-flex align-items-end gap-3 mb-2`,children:[(0,g.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,g.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,g.jsx)(a,{namespace:x,phrase:`startTimeLabel`})}),(0,g.jsx)(`select`,{className:`form-select`,value:e.startHour,onChange:t=>e.onStartHourChanged(Number(t.target.value)),children:S.map(e=>(0,g.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]}),(0,g.jsx)(`span`,{className:`pb-2`,children:(0,g.jsx)(a,{namespace:x,phrase:`schoolHoursTo`})}),(0,g.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,g.jsx)(`label`,{className:`small mb-1 d-block`,children:(0,g.jsx)(a,{namespace:x,phrase:`endTimeLabel`})}),(0,g.jsx)(`select`,{className:`form-select`,value:e.endHour,onChange:t=>e.onEndHourChanged(Number(t.target.value)),children:S.map(e=>(0,g.jsx)(`option`,{value:e,children:o.hourToFriendlyString(e)},e))})]})]}),r?(0,g.jsx)(`p`,{className:`text-secondary mb-0`,children:(0,g.jsx)(a,{namespace:x,phrase:`schoolHoursSummary`,options:{startTime:o.hourToFriendlyString(e.startHour),endTime:o.hourToFriendlyString(e.endHour)}})}):(0,g.jsx)(`p`,{className:`text-danger mb-0`,children:(0,g.jsx)(a,{namespace:x,phrase:`schoolHoursValidation`})}),(0,g.jsx)(`div`,{className:`mt-3`,children:t?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`label`,{className:`mb-1 d-block`,children:(0,g.jsx)(a,{namespace:x,phrase:`timezoneLabel`})}),(0,g.jsx)(`select`,{className:`form-select`,value:e.timezone,onChange:t=>e.onTimezoneChanged(t.target.value),children:C.map(e=>(0,g.jsx)(`option`,{value:e,children:e},e))})]}):(0,g.jsxs)(`span`,{className:`text-secondary`,children:[(0,g.jsx)(a,{namespace:x,phrase:`timezoneCurrent`,options:{timezone:e.timezone}}),` — `,(0,g.jsx)(`button`,{className:`btn btn-link text-info p-0 align-baseline`,onClick:()=>n(!0),children:(0,g.jsx)(a,{namespace:x,phrase:`timezoneChange`})})]})})]})}var T=`reports.classroomViewsPopup`,E=s.encloseNamespace(T);function D(e){let t=p(n.ClassroomViewsPopup),r=m(),i=o.timeStringToHour(t.schoolStartTime),s=o.timeStringToHour(t.schoolEndTime),[l,_]=h.useState(t.classroomSize),[v,y]=h.useState(t.timezone),[x,S]=h.useState(i),[C,D]=h.useState(s),[O,k]=h.useState(!1),A=x<C&&v,j=l!==t.classroomSize||v!==t.timezone||x!==i||C!==s;async function M(){try{k(!0),await t.updateSettingsAsync({schoolStartTime:o.hourToTimeString(x),schoolEndTime:o.hourToTimeString(C),timezone:v,classroomSize:l}),r.success(E(`success`)),e.closePopup()}catch{r.error(E(`error`))}finally{k(!1)}}return(0,g.jsxs)(c,{closePopup:e.closePopup,title:E(`title`),size:`lg`,children:[(0,g.jsx)(`p`,{children:(0,g.jsx)(a,{namespace:T,phrase:`description1`})}),(0,g.jsx)(`p`,{children:(0,g.jsx)(a,{namespace:T,phrase:`description2`})}),(0,g.jsx)(b,{className:`my-3`,classroomSize:l,onClassroomSizeChanged:_}),(0,g.jsx)(w,{className:`mb-3`,startHour:x,endHour:C,timezone:v,onStartHourChanged:S,onEndHourChanged:D,onTimezoneChanged:y}),(0,g.jsxs)(u,{className:`justify-content-between`,children:[(0,g.jsx)(`a`,{href:d.getLiteArticle(f.ClassroomViews),target:`_blank`,rel:`noopener noreferrer`,className:`text-info`,children:(0,g.jsx)(a,{namespace:T,phrase:`learnMore`})}),(0,g.jsxs)(`div`,{className:`d-flex`,children:[(0,g.jsx)(u.Cancel,{onClick:e.closePopup,text:E(`close`)}),(0,g.jsx)(u.Submit,{onClick:M,text:E(`save`),showSpinner:O,variant:`dark`,disabled:!A||!j})]})]})]})}export{D as ClassroomViewsPopupView};
|
|
2
|
+
//# sourceMappingURL=Bv4pM4sp.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DhJ5lhcc.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/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';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\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 = DateHelper.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 { useClassroomViewsSettings } from 'shared/hooks/useClassroomViewsSettings';\n\nimport { ClassroomSizeSelector } from './components/classroom-size-selector/ClassroomSizeSelector';\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 alerts = useAlerts();\n\n const initialStartHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolStartTime);\n const initialEndHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolEndTime);\n \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 = schoolStartHour < schoolEndHour && timezone;\n const isDirty = 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 schoolStartTime: DateHelper.hourToTimeString(schoolStartHour),\n schoolEndTime: DateHelper.hourToTimeString(schoolEndHour),\n timezone,\n classroomSize\n });\n \n alerts.success(getPhrase('success'));\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 <ClassroomSizeSelector\n className='my-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 <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":"Bv4pM4sp.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/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';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\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 = DateHelper.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 { useClassroomViewsSettings } from 'shared/hooks/useClassroomViewsSettings';\n\nimport { ClassroomSizeSelector } from './components/classroom-size-selector/ClassroomSizeSelector';\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 alerts = useAlerts();\n\n const initialStartHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolStartTime);\n const initialEndHour = DateHelper.timeStringToHour(classroomViewsSettings.schoolEndTime);\n \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 = schoolStartHour < schoolEndHour && timezone;\n const isDirty = 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 schoolStartTime: DateHelper.hourToTimeString(schoolStartHour),\n schoolEndTime: DateHelper.hourToTimeString(schoolEndHour),\n timezone,\n classroomSize\n });\n \n alerts.success(getPhrase('success'));\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 <ClassroomSizeSelector\n className='my-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 <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,4 +1,4 @@
|
|
|
1
|
-
import{F as e,Kn as t,N as n,P as r,Q as i,R as a,U as o,Wt as s,Yt as c,ct as l,st as u,z as d}from"./BSV_W0cK.chunk.js";import{i as f,o as p,r as m,v as h,x as g,y as _}from"./COrUmz0l.chunk.js";import{n as v}from"./DLiesDxa.chunk.js";import{t as y}from"./BDdd6NA7.chunk.js";import{t as b}from"./Dhb09xKG.chunk.js";import{n as x}from"./BmJ66zOA.chunk.js";import{a as S,i as C,s as ee}from"./Chh-4QFk.chunk.js";import{t as w}from"./Bqlm3yF_.chunk.js";import{n as te,t as ne}from"./DHk1ZJ0C.chunk.js";import{t as re}from"./B6C1sxIU.chunk.js";import{d as ie,o as ae,p as oe,st as se,u as T,y as ce}from"./app-
|
|
1
|
+
import{F as e,Kn as t,N as n,P as r,Q as i,R as a,U as o,Wt as s,Yt as c,ct as l,st as u,z as d}from"./BSV_W0cK.chunk.js";import{i as f,o as p,r as m,v as h,x as g,y as _}from"./COrUmz0l.chunk.js";import{n as v}from"./DLiesDxa.chunk.js";import{t as y}from"./BDdd6NA7.chunk.js";import{t as b}from"./Dhb09xKG.chunk.js";import{n as x}from"./BmJ66zOA.chunk.js";import{a as S,i as C,s as ee}from"./Chh-4QFk.chunk.js";import{t as w}from"./Bqlm3yF_.chunk.js";import{n as te,t as ne}from"./DHk1ZJ0C.chunk.js";import{t as re}from"./B6C1sxIU.chunk.js";import{d as ie,o as ae,p as oe,st as se,u as T,y as ce}from"./app-DLh9RnwX.js";import{t as le}from"./Cu6M80aY.chunk.js";import{n as E,r as ue,t as D}from"./CMw7H8FK2.chunk.js";import{t as de}from"./DPmS69Mt2.chunk.js";import{n as fe,t as pe}from"./B2gYhRWM2.chunk.js";import{a as O,i as me,n as he,r as ge,t as _e}from"./Bl6b6nAn2.chunk.js";import{a as ve,i as ye,o as be,r as xe}from"./ClDdEKYV2.chunk.js";var Se={subText:`_subText_5u663_1`,sm:`_sm_5u663_4`},k=t(u()),A=r();function Ce(e){let t=`text-uppercase text-truncate mb-0 ${Se.subText} ${e.className}`;return e.appLink?(0,A.jsx)(h,{className:t,appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,title:e.title,ariaLabel:e.ariaLabel,children:e.children}):(0,A.jsx)(`div`,{className:t,title:e.title,"aria-label":e.ariaLabel,children:e.children})}function we(e){return(0,A.jsx)(`svg`,{...e,children:(0,A.jsx)(`path`,{fill:`currentColor`,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805m.812-10.7.001-.004.007-.022.03-.097a5.83 5.83 0 0 1 .744-1.463c.565-.798 1.428-1.532 2.72-1.532 2.03 0 3.516 1.72 3.516 3.866 0 1.445-.713 2.686-2.089 4.119-.944.984-2.151 2.01-3.579 3.224-.575.49-1.187 1.01-1.832 1.57-.645-.56-1.257-1.08-1.832-1.57-1.428-1.214-2.635-2.24-3.58-3.224C5.214 12.11 4.5 10.869 4.5 9.423c0-2.146 1.487-3.865 3.517-3.865 1.29 0 2.154.734 2.719 1.532a5.8 5.8 0 0 1 .774 1.56l.007.022v.004a.5.5 0 0 0 .965 0`})})}function Te(e){return(0,A.jsx)(`svg`,{...e,children:(0,A.jsx)(`path`,{fill:`currentColor`,fillOpacity:.9,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805`})})}var j={isFavouritedByCurrentUser(e){return e?.favouritedBy?.data.length===1},isFavouritedByUser(e,t){return!!y.findWhere(e?.favouritedBy?.data,{id:t?.id})},updateVideoState(e,t,n){return{id:e.id,favouritedBy:{data:n?[{id:t.id}]:[],pagination:{limit:25,cursors:{next:``,previous:``}}}}},showFavouriteButton(e,t){return T.getCanBeConsumed(e)?.canConsume?!!(t||se.isTabletOrMobile()||j.isFavouritedByCurrentUser(e)):!1}},M={favourited:`_favourited_19h9u_1`,favouriteButton:`_favouriteButton_19h9u_1`,heart:`_heart_19h9u_5`,heartOutline:`_heartOutline_19h9u_16`},Ee=w.encloseNamespace(`shared.favouriteButton`);function De(e){let t=de(),n=j.isFavouritedByCurrentUser(e.video),[r,i]=k.useState(n);k.useEffect(()=>{i(n)},[n]);let a=`d-flex align-items-center justify-content-center cursor-pointer ${M.favouriteButton} ${r?M.favourited:``}`;e.className&&(a+=` ${e.className}`);function o(){let n=!r;function a(){function r(){return T.isClip(e.video)?n?`favouriteClipError`:`unfavouriteClipError`:T.isInteractive(e.video)?n?`favouriteInteractiveError`:`unfavouriteInteractiveError`:n?`favouriteVideoError`:`unfavouriteVideoError`}t.error(Ee(r())),i(!n)}i(n),e.setFavourite(e.video,n,null,a,e.analyticsData,e.analyticsOptions)}return!g.isFunction(e.setFavourite)||!g.isFunction(e.canFavourite)||!e.canFavourite(e.video)?(0,A.jsx)(A.Fragment,{}):(0,A.jsxs)(_,{className:a,onClick:o,tabIndex:e.preventFocus?-1:void 0,children:[(0,A.jsx)(m,{svg:Te,className:`svg-container ${M.heart}`}),(0,A.jsx)(m,{svg:we,className:`svg-container ${M.heartOutline}`})]})}function Oe(e){let t=T.getVideoProgress(e.video),n=t&&e.video.duration&&t/e.video.duration*1e5;return n?(0,A.jsx)(`div`,{className:`bg-primary h-100`,style:{width:`${n}%`}}):(0,A.jsx)(A.Fragment,{})}var ke={bottomBar:`_bottomBar_575p1_1`};function Ae(e){return T.isVideo(e.video)?(0,A.jsx)(`div`,{className:ke.bottomBar,children:(0,A.jsx)(Oe,{video:e.video})}):(0,A.jsx)(A.Fragment,{})}var je=`d-inline-block svg-container`,Me=`span`;function Ne(e){let{children:t,className:n=je,tagName:r=Me,size:i=f.Standard,onClick:a,title:o,tooltipPlacement:s=`right`}=e,c=r,l={className:`${n} svg-container ${i}`,onClick:g.isFunction(a)?a:null};return o?(0,A.jsx)(p,{title:o,placement:s,children:(0,A.jsx)(c,{...l,children:t})}):(0,A.jsx)(c,{...l,children:t})}var N={std:`_std_hibpg_1`,sm:`_sm_hibpg_5`,stdIcon:`_stdIcon_hibpg_10`,smIcon:`_smIcon_hibpg_21`};function P(e){return!T.isInteractive(e.video)&&!T.isClip(e.video)||!e.video._liteOwner&&!e.video._curationTags?.value?.isClickViewCurated?(0,A.jsx)(A.Fragment,{}):e.video._curationTags?.value?.isClickViewCurated?(0,A.jsx)(`div`,{className:`${e.size===`sm`?N.sm:N.std} me-1 rounded-circle position-relative bg-white`,children:(0,A.jsx)(Ne,{className:e.size===`sm`?N.smIcon:N.stdIcon,children:(0,A.jsx)(ae,{})})}):(0,A.jsx)(`div`,{className:`${e.size===`sm`?N.sm:N.std} me-1`,children:(0,A.jsx)(S,{imageCdnUrl:e.imageCdnUrl,initials:ee.getInitials(e.video._liteOwner.name,e.video._liteOwner.surname),imageUrl:e.video._liteOwner.avatar?.url})})}var Pe={pluginHover:`_pluginHover_wpoz0_1`},Fe=`shared.pluginHover`;function F(e){return!e.isPlugin||e.isPluginPopup?(0,A.jsx)(A.Fragment,{}):(0,A.jsx)(h,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,onClick:e.onClick,className:`
|
|
2
2
|
position-absolute top-0 start-0 end-0 bottom-0 opacity-0 cursor-pointer
|
|
3
3
|
${Pe.pluginHover}
|
|
4
4
|
${e.className?e.className:``}
|
|
@@ -7,4 +7,4 @@ import{F as e,Kn as t,N as n,P as r,Q as i,R as a,U as o,Wt as s,Yt as c,ct as l
|
|
|
7
7
|
p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer
|
|
8
8
|
text-decoration-none ${e.theme?.container} ${G.tag} ${e.active?G.active:``}
|
|
9
9
|
`,children:(0,A.jsx)(St,{...e})}):(0,A.jsx)(`div`,{className:`p-1 pe-2 rounded-pill d-inline-flex align-items-center ${e.theme?.container} ${G.tag} ${G.disabled}`,children:(0,A.jsx)(St,{...e})})}function St(e){return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(m,{className:`${G.icon} rounded-circle bg-${e.iconVariant} text-white`,svg:e.svg}),(0,A.jsx)(`span`,{className:`ps-1 text-nowrap user-select-none ${e.theme?.tabLabel}`,children:e.text})]})}function Ct(e){return(0,A.jsx)(`svg`,{...e,children:(0,A.jsx)(`path`,{fill:`currentColor`,d:`M16.863 20c-.662 0-1.21-.567-1.21-1.252s.548-1.252 1.21-1.252c.663 0 1.21.567 1.21 1.252S17.527 20 16.864 20m0-1.441a.183.183 0 0 0-.182.189c0 .118.068.189.182.189.115 0 .183-.071.183-.19a.183.183 0 0 0-.183-.188m0-.118a.516.516 0 0 1-.502-.52v-6.19L11.75 9.158a.53.53 0 0 1-.205-.71c.137-.26.456-.354.685-.212l4.886 2.717a.57.57 0 0 1 .274.473v6.496a.52.52 0 0 1-.526.52m-4.908-4.205a.8.8 0 0 1-.229-.048L2.296 9.51A.55.55 0 0 1 2 9.014c0-.212.114-.401.297-.472l9.52-4.489a.47.47 0 0 1 .434 0l9.452 4.489a.55.55 0 0 1 .297.472.49.49 0 0 1-.297.473l-9.52 4.701a.8.8 0 0 1-.228.048m-8.22-5.198 8.22 4.087 8.288-4.087-8.22-3.898zm8.151 8.41c-4.749 0-6.644-2.905-6.712-3.047a.7.7 0 0 1-.092-.284V10.81c0-.283.229-.52.503-.52s.502.237.502.52v3.142c.388.496 2.077 2.434 5.776 2.434 3.653 0 5.548-1.938 6.005-2.457v-2.93c0-.284.228-.52.502-.52s.502.236.502.52v3.118a.6.6 0 0 1-.091.307c-.046.142-2.192 3.024-6.895 3.024`})})}var wt=`shared.classroomGuideTag`;function Tt(e){return!e.video||T.isInteractive(e.video)||T.isClip(e.video)||!e.video._hasCurriculumLinks?.value?(0,A.jsx)(A.Fragment,{}):(0,A.jsx)(xt,{theme:{container:`classroom-guide-tag`,tabLabel:`classroom-guide-tag-label`},svg:Ct,iconVariant:`navy`,text:w.getPhrase(wt,`curriculum`),appLink:e.appLink,appLinkAnalyticsData:{videoGuidanceType:`curriculum`,...T.getAnalyticsData(e.video),...e.analyticsData},appLinkAnalyticsOptions:{actionType:i.Click,entity:T.getAnalyticsEntity(e.video),...e.analyticsOptions}})}var Et=`shared.interactivesTag`;function Dt(e){if(!T.showInteractivesGuidance(e.video))return(0,A.jsx)(A.Fragment,{});let t=!T.isInteractive(e.video)&&(e.video.interactives?.data.length||0);return(0,A.jsx)(xt,{svg:qe,iconVariant:`green`,text:w.getPhrase(Et,`interactives`,{smartCount:t}),appLink:e.appLink,appLinkAnalyticsData:{videoGuidanceType:`interactive`,videoGuidanceTotalItems:t,...T.getAnalyticsData(e.video),...e.analyticsData},appLinkAnalyticsOptions:{actionType:i.Click,entity:T.getAnalyticsEntity(e.video),...e.analyticsOptions}})}var Ot=`shared.resourcesTag`;function kt(e){return T.isInteractive(e)?0:(e.resources?.data.length||0)+(e.links?.data.length||0)}function At(e){if(!T.showResourcesGuidance(e.video))return(0,A.jsx)(A.Fragment,{});let t=kt(e.video);return(0,A.jsx)(xt,{svg:Je,iconVariant:`indigo`,text:w.getPhrase(Ot,`resources`,{smartCount:t}),appLink:e.appLink,appLinkAnalyticsData:{videoGuidanceType:`resource`,videoGuidanceTotalItems:t,...T.getAnalyticsData(e.video),...e.analyticsData},appLinkAnalyticsOptions:{actionType:i.Click,entity:T.getAnalyticsEntity(e.video),...e.analyticsOptions}})}function jt(e){let t=T.showInteractivesGuidance(e.video)&&T.showResourcesGuidance(e.video),n=e.commonVideoProps.features.showClassroomGuide(e.video);return(0,A.jsxs)(`div`,{className:`${e.containerClassName} ${t?e.responsiveClassName:``}`,children:[n&&(0,A.jsx)(Tt,{appLink:e.commonVideoProps.getClassroomGuideAppLink?.(e.video.id,e.video.typeId),video:e.video,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions}),(0,A.jsx)(At,{appLink:e.commonVideoProps.getResourceGuidanceAppLink?.(e.video.id,e.video.typeId),video:e.video,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions}),(0,A.jsx)(Dt,{appLink:e.commonVideoProps.getInteractiveGuidanceAppLink?.(e.video.id,e.video.typeId),video:e.video,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions})]})}var Mt={button:`_button_tlbos_1`},Nt=`shared.removeVideoButton`;function Pt(e){return(0,A.jsx)(`div`,{className:`me-2`,children:(0,A.jsx)(p,{title:e.removeButtonTooltip||w.getPhrase(Nt,`removeFromRow`),spanHack:!0,children:(0,A.jsx)(_,{onClick:e.onClickRemove,className:`d-flex align-items-center justify-content-center ${Mt.button}`,tabIndex:e.preventFocus?-1:void 0,children:(0,A.jsx)(m,{svg:C,className:`svg-container ${Mt.heart}`})})})})}var K={topLeftContainer:`_topLeftContainer_1t9d5_1`,details:`_details_1t9d5_7`,isHovering:`_isHovering_1t9d5_11`,videoGuidanceTags:`_videoGuidanceTags_1t9d5_14`,responsiveGuidance:`_responsiveGuidance_1t9d5_21`,dropdown:`_dropdown_1t9d5_27`,show:`_show_1t9d5_31`,topRightContainer:`_topRightContainer_1t9d5_35`},Ft=e=>{let{video:t,appLink:n,imageOptions:r,preload:o,isHovering:s}=e,{hoverToPlay:c}=e.commonVideoProps,u=l.isObject(n?.params)?n?.params:{},{canNavigate:d,canConsume:f}=T.getCanBeConsumed(t);k.useEffect(()=>()=>{e.cleanPortalNode?.()},[]);function m(t){t.preventDefault(),e.onClickRemove?.()}let h=`position-relative bg-white`;e.extraClasses&&(h+=` ${e.extraClasses}`),s&&(h+=` rounded-3 shadow-lg`);let _={...e.analyticsOptions,entity:T.getAnalyticsEntity(t)},v=e.isHovering&&f&&c,y=j.showFavouriteButton(e.video,s);function b(){return g.isFunction(e.onClickRemove)?se.isTabletOrMobile()?!0:s:!1}let x={...e.analyticsData,id:t.id,name:t.name},S={..._,actionType:i.Click,descriptor:a.Thumbnail};return(0,A.jsxs)(`div`,{className:h,children:[(0,A.jsxs)(`div`,{className:K.topRightContainer,children:[b()&&(0,A.jsx)(Pt,{onClickRemove:m,removeButtonTooltip:e.removeButtonTooltip,preventFocus:!0}),y&&(0,A.jsx)(De,{setFavourite:e.commonVideoProps.setFavourite,canFavourite:e.commonVideoProps.canFavourite,video:t,analyticsData:e.analyticsData,analyticsOptions:_,preventFocus:!0}),!d&&(0,A.jsx)(p,{title:T.getPrivacyReasoning(e.video),spanHack:!0,spanHackClassName:``,children:(0,A.jsx)(Le,{})})]}),(0,A.jsxs)(`div`,{className:`position-relative`,children:[(0,A.jsx)(F,{isPlugin:e.commonVideoProps.isPlugin,isPluginPopup:e.commonVideoProps.isPluginPopup,className:s?`rounded-top-3`:`rounded-3`,onClick:()=>e.cleanPortalNode?.(),appLink:d?n:null,analyticsData:x,analyticsOptions:S}),(0,A.jsxs)(O,{onClick:()=>e.cleanPortalNode?.(),data:T.getThumbnail(t),appLink:d?n:null,imageType:te.Thumbnails,imageOptions:r,preload:o,alt:(`series`in t&&t.series?.name?`${t.series.name}: `:``)+t.name,analyticsData:x,analyticsOptions:S,preventFocus:!e.hideTitle,appLinkClassName:`position-absolute top-0 start-0 h-100 w-100 overflow-hidden ${s?`rounded-top-3`:`rounded-3`}`,imageClassName:s?`rounded-top-3`:`rounded-3`,children:[(0,A.jsx)(_e,{type:he.Video}),(0,A.jsxs)(`div`,{className:`p-absolute w-100 h-100 text-white`,children:[(0,A.jsxs)(`div`,{className:`${K.topLeftContainer} d-flex flex-no-wrap`,children:[e.showOwner&&(0,A.jsx)(P,{video:t,imageCdnUrl:e.commonVideoProps.imageCdnUrl}),(0,A.jsx)(B,{video:t}),(0,A.jsx)(I,{video:t,companyLogoFallbackUrl:e.commonVideoProps.getCompanyLogoFallbackUrl?.(t)})]}),(0,A.jsx)(pt,{video:e.video,audience:e.audience,hideRating:e.hideRating,hideDuration:e.hideDuration}),(0,A.jsx)(Ae,{video:e.video})]})]}),v&&(0,A.jsx)(tt,{objectId:e.video.id,objectTypeId:e.video.typeId,mode:`hover`,shareId:e.shareId,context:u.context,contextId:u.contextId,moviesAndTv:u.mtv,location:`popout-video`,onRemoveVideo:e.onClickRemove,appLink:d?n:null},e.video.id)]}),!s&&!e.hideTitle&&(0,A.jsx)(bt,{...e}),(0,A.jsx)(`div`,{className:`${K.details} ${s?`${K.isHovering} box-shadow`:``}`,children:s&&(0,A.jsx)(A.Fragment,{children:(0,A.jsxs)(`div`,{className:`${s?K.videoGuidanceTags:``}`,children:[(0,A.jsx)(bt,{...e}),e.showVideoGuidance&&s&&(0,A.jsx)(jt,{commonVideoProps:e.commonVideoProps,video:e.video,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,responsiveClassName:K.responsiveGuidance,containerClassName:`d-flex justify-content-start align-items-center pt-2`})]})})})]})};function It(e){return(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(ut,{hoverableComponent:Ft,componentProps:e,fixedHoverWidth:400,minHoverWidth:400,analyticsData:{...e.analyticsData,id:e.video.id,name:e.video.name},analyticsOptions:{...e.analyticsOptions,entity:T.getAnalyticsEntity(e.video)}})})}function Lt(e){return(0,A.jsx)(`svg`,{...e,children:(0,A.jsx)(`path`,{fillRule:`evenodd`,d:`M0 12C0 5.373 5.373 0 12 0s12 5.373 12 12-5.373 12-12 12S0 18.627 0 12M9 7.498c0-.551.387-.756.847-.469l7.306 4.567c.468.292.46.77 0 1.058l-7.306 4.567c-.468.292-.847.074-.847-.47z`,fill:`currentColor`})})}var q={mask:`_mask_tn7nt_1`,small:`_small_tn7nt_10`,video:`_video_tn7nt_10`,playlist:`_playlist_tn7nt_18`,maskContainer:`_maskContainer_tn7nt_28`,constantIconMaskContainer:`_constantIconMaskContainer_tn7nt_35`},J=function(e){return e[e.Video=0]=`Video`,e[e.Playlist=1]=`Playlist`,e[e.Series=2]=`Series`,e}({});function Rt(e){return e===J.Video?q.video:e===J.Playlist?q.playlist:``}function zt(e,t=!1){return e===J.Video?t?Lt:nt:null}Bt.defaults={size:`md`};function Bt(e){let{type:t,size:n,alwaysShowIcon:r}=e,i=Rt(t),a=zt(t,r);return(0,A.jsxs)(`div`,{className:`${r?q.constantIconMaskContainer:q.maskContainer} ${n===`sm`?q.small:``}`,children:[(0,A.jsx)(`div`,{className:q.mask}),(0,A.jsx)(m,{svg:a,className:i})]})}function Vt(e){return(0,A.jsx)(`svg`,{...e,children:(0,A.jsx)(`path`,{d:`M18.783 5.192c.264.283.291.775.06 1.098l-8.91 12.444a.6.6 0 0 1-.457.266.58.58 0 0 1-.471-.228l-3.819-4.666a.905.905 0 0 1 0-1.1c.249-.304.652-.304.9 0l3.338 4.078 8.46-11.818c.232-.324.634-.356.899-.074`,fill:`currentColor`})})}var Y={unchecked:`_unchecked_1n862_1`,outline:`_outline_1n862_5`,checked:`_checked_1n862_20`,checkMark:`_checkMark_1n862_27`},X=function(e){return e.None=`None`,e.Complete=`Complete`,e.Incomplete=`Incomplete`,e}({});Ht.defaultProps={style:`filled`};function Ht(e){let[t,n]=k.useState(e.status===X.Complete);k.useEffect(()=>{n(e.status===X.Complete)},[e.status]);let r=`cursor-pointer rounded-circle ${t?Y.checked:Y.unchecked}`;e.className&&(r+=` ${e.className}`),e.style===`outline`&&(r+=` ${Y.outline}`);function i(){return!!e.status&&e.status!==X.None&&g.isFunction(e.setStatus)}function a(){let r=!t;n(r);let i=r?X.Complete:X.Incomplete;e.setStatus(i).catch(()=>{n(!r)})}return i()?(0,A.jsx)(_,{className:r,onClick:a,disabled:e.disabled,children:(0,A.jsx)(m,{svg:Vt,className:`svg-container ${Y.checkMark}`})}):(0,A.jsx)(A.Fragment,{})}var Z={container:`_container_mn7d4_1`,cvIcon:`_cvIcon_mn7d4_7`,action:`_action_mn7d4_10`};function Ut(e){return!!(!T.getCanBeConsumed(e.video)?.canConsume||g.isFunction(e.setFavourite)&&g.isFunction(e.canFavourite)||g.isFunction(e.setCheckMarkStatus))}function Wt(e){let{canNavigate:t}=T.getCanBeConsumed(e.video);return t?Ut(e)?(0,A.jsxs)(`div`,{className:`${Z.container} d-flex align-items-center`,children:[(0,A.jsx)(De,{setFavourite:e.setFavourite,canFavourite:e.canFavourite,video:e.video,className:Z.action,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,preventFocus:!0}),(0,A.jsx)(Ht,{status:e.checkMarkStatus,setStatus:e.setCheckMarkStatus,className:Z.action})]}):(0,A.jsx)(A.Fragment,{}):(0,A.jsx)(`div`,{className:Z.container,children:(0,A.jsx)(Le,{size:e.size})})}var Q=function(e){return e[e.Below=1]=`Below`,e[e.Overlay=2]=`Overlay`,e[e.Independent=3]=`Independent`,e}({}),$={titleOverlay:`_titleOverlay_f9p1o_1`,clip:`_clip_f9p1o_11`,large:`_large_f9p1o_15`,interactive:`_interactive_f9p1o_18`,titleBelow:`_titleBelow_f9p1o_25`,overlayContainer:`_overlayContainer_f9p1o_29`,topLeftContainer:`_topLeftContainer_f9p1o_36`,gradient:`_gradient_f9p1o_42`},Gt=`shared.staticVideoThumbnail`;function Kt(e){let{type:t,video:n,textPosition:r}=e,i=t===`static`,a=r===Q.Overlay,{canNavigate:s}=T.getCanBeConsumed(e.video),c=``;return a?(c=$.titleOverlay,s&&(T.isClip(n)&&(c+=` `+$.clip),T.isInteractive(n)&&(c+=` `+$.interactive))):c=$.titleBelow,(0,A.jsxs)(`div`,{className:c,children:[T.isVideo(n)&&(0,A.jsx)(R,{type:i?e.commonVideoProps.getSubTextType?.(e.video):`series`,className:a?`text-shadow clamp-1`:`clamp-2`,video:n,appLink:i&&!a?e.commonVideoProps.getSubTextAppLink?.(e.video):null,analyticsOptions:{location:o.VideoThumbnail}}),a||!s||!i?(0,A.jsx)(`span`,{className:`h6 text-reset clamp-1`,children:(0,A.jsx)(W,{video:n,title:n.name??w.getPhrase(Gt,`videoUnavailable`),showNewVideoIndicator:i&&e.commonVideoProps.showNewVideoIndicator,showPadlock:i&&!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience})}):(0,A.jsx)(h,{className:`h6 text-reset clamp-2`,appLink:e.appLink,children:(0,A.jsx)(W,{video:n,showNewVideoIndicator:e.commonVideoProps.showNewVideoIndicator,showPadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience})})]})}function qt(e){let{type:t,video:n,textPosition:r,imageOptions:o,preload:s,alwaysShowIcon:c}=e,u=`commonVideoProps`in e?e.commonVideoProps?.hoverToPlay:!1,d=t===`static`,f=d&&l.isObject(e.appLink?.params)?e.appLink?.params:{},[m,h]=pe(),[g,_]=fe({delay:100}),{canNavigate:v,canConsume:y}=T.getCanBeConsumed(n);function b(e){m.current=e,g.current=e}let x=d&&_&&y&&u;function S(){if(d)return!e.disableFavourite&&e.commonVideoProps.canFavourite?.(e.video)&&j.showFavouriteButton(n,h)}function C(){let t=`position-relative`;return t+=d&&e.appLink&&v?` cursor-pointer`:``,e.extraClasses&&(t+=` ${e.extraClasses}`),r===Q.Overlay&&(t+=` rounded overflow-hidden`),t}function ee(){let t=`overflow-hidden ${e.size===`sm`?`rounded`:`rounded-3`}`;return e.imageClassName&&(t+=` ${e.imageClassName}`),r===Q.Overlay&&(t+=` ${$.gradient}`),t}let w=d?{...e.analyticsOptions,entity:T.getAnalyticsEntity(n)}:{},ne=d&&!!e.appLink&&!e.hideMask&&v,re=d?T.getPrivacyReasoning(e.video,e.showSignIn):``,ie=d?{...e.analyticsData,id:n.id,name:n.name}:{},ae={...w,actionType:i.Click,descriptor:a.Thumbnail};return(0,A.jsxs)(p,{title:re,spanHack:!0,spanHackClassName:``,children:[(0,A.jsxs)(`div`,{className:C(),ref:b,children:[d&&(0,A.jsx)(F,{isPlugin:e.commonVideoProps.isPlugin,isPluginPopup:e.commonVideoProps.isPluginPopup,className:e.size===`sm`?`rounded`:`rounded-3`,appLink:v?e.appLink:null,analyticsData:ie,analyticsOptions:ae}),(0,A.jsx)(Wt,{video:n,checkMarkStatus:!d&&e.checkMarkStatus,setCheckMarkStatus:!d&&e.setCheckMarkStatus,setFavourite:d&&e.commonVideoProps.setFavourite,canFavourite:S,analyticsData:d&&e.analyticsData,analyticsOptions:d&&w,size:e.size}),(0,A.jsxs)(O,{data:T.getThumbnail(n),appLink:d&&v?e.appLink:null,onClick:d&&v?e.onClick:void 0,imageType:te.Thumbnails,imageOptions:o,preload:s,className:ee(),alt:(`series`in n&&n.series?.name?`${n.series.name}: `:``)+n.name,analyticsData:ie,analyticsOptions:ae,preventFocus:!0,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[ne&&(0,A.jsx)(Bt,{type:J.Video,size:e.size,alwaysShowIcon:c}),(0,A.jsx)(_e,{type:he.Video}),(0,A.jsxs)(`div`,{className:$.overlayContainer,children:[r===Q.Overlay&&(0,A.jsx)(Kt,{...e}),(0,A.jsxs)(`div`,{className:`${$.topLeftContainer} d-flex flex-no-wrap`,children:[d&&e.showOwner&&(0,A.jsx)(P,{video:n,imageCdnUrl:e.commonVideoProps.imageCdnUrl}),!e.hideVideoTypeBadge&&(0,A.jsx)(B,{video:n,size:e.size}),d&&(0,A.jsx)(I,{video:n,companyLogoFallbackUrl:e.commonVideoProps.getCompanyLogoFallbackUrl?.(n),size:e.size})]}),!e.hideBottomBar&&(0,A.jsx)(Ae,{video:n}),(0,A.jsx)(pt,{video:e.video,audience:e.audience,hideRating:e.hideRating,hideDuration:e.hideDuration,newDurationStyle:e.newDurationStyle,size:e.size})]})]}),x&&(0,A.jsx)(tt,{objectId:e.video.id,objectTypeId:e.video.typeId,mode:`hover`,shareId:d&&e.shareId,context:f.context,contextId:f.contextId,moviesAndTv:f.mtv,appLink:d&&v?e.appLink:null},e.video.id)]}),r===Q.Below&&(0,A.jsx)(Kt,{...e})]})}Jt.defaultProps={hideRating:!0,size:`md`,showOwner:!0};function Jt(e){switch(e.type){case`static`:return(0,A.jsx)(qt,{...e});case`cosmetic`:return(0,A.jsx)(qt,{...e});case`expandable`:return(0,A.jsx)(it,{...e});case`popout`:return(0,A.jsx)(It,{...e});default:return}}export{Ce as i,Q as n,R as r,Jt as t};
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=C-4Pza2l2.chunk.js.map
|