@clickview/lite 0.52.3-rc.1 → 0.52.4-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1329-lite-ed09e82f2b.chunk.css → 1329-lite-cdc45079de.chunk.css} +1 -1
  3. package/dist/css/{6094-lite-371570d4ad.chunk.css → 1760-lite-19ef9620ac.chunk.css} +1 -1
  4. package/dist/css/{5549-lite-9903803dfd.chunk.css → 3640-lite-d751a30ca4.chunk.css} +1 -1
  5. package/dist/css/{431-lite-49ed0485bd.chunk.css → 431-lite-c2c2516537.chunk.css} +1 -1
  6. package/dist/css/{5660-lite-3a211c1297.chunk.css → 4683-lite-15b9d982f3.chunk.css} +1 -1
  7. package/dist/css/{5466-lite-5d0d45cb7d.chunk.css → 5466-lite-1b4fd17947.chunk.css} +1 -1
  8. package/dist/css/{3640-lite-9903803dfd.chunk.css → 5549-lite-d751a30ca4.chunk.css} +1 -1
  9. package/dist/css/{5587-lite-6e77f9442a.chunk.css → 5587-lite-304279013c.chunk.css} +1 -1
  10. package/dist/css/{4683-lite-3a211c1297.chunk.css → 5660-lite-15b9d982f3.chunk.css} +1 -1
  11. package/dist/css/{6054-lite-fdc8362cf4.chunk.css → 6054-lite-0b2c72f84f.chunk.css} +1 -1
  12. package/dist/css/{1760-lite-371570d4ad.chunk.css → 6094-lite-19ef9620ac.chunk.css} +1 -1
  13. package/dist/css/{7954-lite-b5558736f9.chunk.css → 7954-lite-95ad75b04d.chunk.css} +1 -1
  14. package/dist/css/{9808-lite-5d0d45cb7d.chunk.css → 9808-lite-1b4fd17947.chunk.css} +1 -1
  15. package/dist/languages/en.json +1 -1
  16. package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js → 1329-57aa3d33cb-lite.chunk.js} +2 -2
  17. package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js.map → 1329-57aa3d33cb-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/1518-c1105e83b0-lite.chunk.js +2 -0
  19. package/dist/scripts/1518-c1105e83b0-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{1760-7218da90dd-lite.chunk.js → 1760-19e88443c6-lite.chunk.js} +1 -1
  21. package/dist/scripts/{1760-7218da90dd-lite.chunk.js.map → 1760-19e88443c6-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/1798-fc93a2f7a6-lite.chunk.js +2 -0
  23. package/dist/scripts/1798-fc93a2f7a6-lite.chunk.js.map +1 -0
  24. package/dist/scripts/2094-0f30600b14-lite.chunk.js +2 -0
  25. package/dist/scripts/{5710-c2804ffafe-lite.chunk.js.map → 2094-0f30600b14-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{3640-5b0a186dfd-lite.chunk.js → 3640-ac303efb99-lite.chunk.js} +1 -1
  27. package/dist/scripts/{3640-5b0a186dfd-lite.chunk.js.map → 3640-ac303efb99-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/3969-c0160d0139-lite.chunk.js +2 -0
  29. package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +1 -0
  30. package/dist/scripts/422-ee640f76c5-lite.chunk.js +2 -0
  31. package/dist/scripts/422-ee640f76c5-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{431-5e609b8dbd-lite.chunk.js → 431-586d197eeb-lite.chunk.js} +1 -1
  33. package/dist/scripts/{431-5e609b8dbd-lite.chunk.js.map → 431-586d197eeb-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{4683-be07f1375c-lite.chunk.js → 4683-ce52da47d8-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4683-be07f1375c-lite.chunk.js.map → 4683-ce52da47d8-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/5220-58d9529f21-lite.chunk.js +3 -0
  37. package/dist/scripts/5220-58d9529f21-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5466-0500ed8c29-lite.chunk.js → 5466-401f301cd1-lite.chunk.js} +1 -1
  39. package/dist/scripts/{5466-0500ed8c29-lite.chunk.js.map → 5466-401f301cd1-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{5549-d19ed5a9c6-lite.chunk.js → 5549-ae40aeb0f8-lite.chunk.js} +1 -1
  41. package/dist/scripts/{5549-d19ed5a9c6-lite.chunk.js.map → 5549-ae40aeb0f8-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{5587-3de8761ca3-lite.chunk.js → 5587-d27030e106-lite.chunk.js} +1 -1
  43. package/dist/scripts/{5587-3de8761ca3-lite.chunk.js.map → 5587-d27030e106-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{5660-268adb479d-lite.chunk.js → 5660-a356acdbca-lite.chunk.js} +1 -1
  45. package/dist/scripts/{5660-268adb479d-lite.chunk.js.map → 5660-a356acdbca-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{6054-fcfe84a18d-lite.chunk.js → 6054-cf9311ce64-lite.chunk.js} +1 -1
  47. package/dist/scripts/{6054-fcfe84a18d-lite.chunk.js.map → 6054-cf9311ce64-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{6094-063cffe417-lite.chunk.js → 6094-d5fa8b07dc-lite.chunk.js} +1 -1
  49. package/dist/scripts/{6094-063cffe417-lite.chunk.js.map → 6094-d5fa8b07dc-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/6450-601f889072-lite.chunk.js +2 -0
  51. package/dist/scripts/6450-601f889072-lite.chunk.js.map +1 -0
  52. package/dist/scripts/6544-fd0c4d43c1-lite.chunk.js +2 -0
  53. package/dist/scripts/6544-fd0c4d43c1-lite.chunk.js.map +1 -0
  54. package/dist/scripts/6572-75c435eae1-lite.chunk.js +2 -0
  55. package/dist/scripts/6572-75c435eae1-lite.chunk.js.map +1 -0
  56. package/dist/scripts/{7954-9a3694b784-lite.chunk.js → 7954-87777549a2-lite.chunk.js} +1 -1
  57. package/dist/scripts/{7954-9a3694b784-lite.chunk.js.map → 7954-87777549a2-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/8801-4b8d3958b4-lite.chunk.js +2 -0
  59. package/dist/scripts/8801-4b8d3958b4-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9674-1ce4fe796c-lite.chunk.js → 9674-f560ed51ea-lite.chunk.js} +2 -2
  61. package/dist/scripts/9674-f560ed51ea-lite.chunk.js.map +1 -0
  62. package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js → 9808-e80883e731-lite.chunk.js} +2 -2
  63. package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js.map → 9808-e80883e731-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{bundle-af42b7e6d6.min.js → bundle-507079f8c6.min.js} +3 -3
  65. package/dist/scripts/{bundle-af42b7e6d6.min.js.map → bundle-507079f8c6.min.js.map} +1 -1
  66. package/package.json +1 -1
  67. package/dist/scripts/1518-8275a95d07-lite.chunk.js +0 -2
  68. package/dist/scripts/1518-8275a95d07-lite.chunk.js.map +0 -1
  69. package/dist/scripts/1798-972b0f3769-lite.chunk.js +0 -2
  70. package/dist/scripts/1798-972b0f3769-lite.chunk.js.map +0 -1
  71. package/dist/scripts/2120-2e824a172a-lite.chunk.js +0 -2
  72. package/dist/scripts/2120-2e824a172a-lite.chunk.js.map +0 -1
  73. package/dist/scripts/3969-525c157e0c-lite.chunk.js +0 -2
  74. package/dist/scripts/3969-525c157e0c-lite.chunk.js.map +0 -1
  75. package/dist/scripts/422-5773602f61-lite.chunk.js +0 -2
  76. package/dist/scripts/422-5773602f61-lite.chunk.js.map +0 -1
  77. package/dist/scripts/5710-c2804ffafe-lite.chunk.js +0 -2
  78. package/dist/scripts/6450-2745feb746-lite.chunk.js +0 -2
  79. package/dist/scripts/6450-2745feb746-lite.chunk.js.map +0 -1
  80. package/dist/scripts/6572-4dda098022-lite.chunk.js +0 -2
  81. package/dist/scripts/6572-4dda098022-lite.chunk.js.map +0 -1
  82. package/dist/scripts/9620-d6dd77fedc-lite.chunk.js +0 -3
  83. package/dist/scripts/9620-d6dd77fedc-lite.chunk.js.map +0 -1
  84. package/dist/scripts/9674-1ce4fe796c-lite.chunk.js.map +0 -1
  85. package/dist/scripts/999-1afd6be8dc-lite.chunk.js +0 -2
  86. package/dist/scripts/999-1afd6be8dc-lite.chunk.js.map +0 -1
  87. /package/dist/css/{9620-lite-8b4a93ca31.chunk.css → 5220-lite-8b4a93ca31.chunk.css} +0 -0
  88. /package/dist/css/{2120-lite-d46c2d634c.chunk.css → 6544-lite-d46c2d634c.chunk.css} +0 -0
  89. /package/dist/css/{999-lite-c88eb54bee.chunk.css → 8801-lite-c88eb54bee.chunk.css} +0 -0
  90. /package/dist/scripts/{1329-b3e3f5d25d-lite.chunk.js.LICENSE.txt → 1329-57aa3d33cb-lite.chunk.js.LICENSE.txt} +0 -0
  91. /package/dist/scripts/{9620-d6dd77fedc-lite.chunk.js.LICENSE.txt → 5220-58d9529f21-lite.chunk.js.LICENSE.txt} +0 -0
  92. /package/dist/scripts/{9808-5ce9fc5d84-lite.chunk.js.LICENSE.txt → 9808-e80883e731-lite.chunk.js.LICENSE.txt} +0 -0
  93. /package/dist/scripts/{bundle-af42b7e6d6.min.js.LICENSE.txt → bundle-507079f8c6.min.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[422],{92869:(e,t,n)=>{n.d(t,{t:()=>c});var a=n(48088),r=n(95846),c={preventScrollTop:function(){a.Radio.channel(r.G.SHELL).trigger("prevent:scroll:top")}}},75097:(e,t,n)=>{n.d(t,{U:()=>c});var a=n(32735),r=n(95245);function c(e){var t=e.count,n=void 0===t?6:t;return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"d-flex ps-1"},Array(n).fill(null).map((function(e,t){return a.createElement("div",{key:t,className:"".concat(r.Z.partialButton," partial-loading-background mx-1")})}))))}},37395:(e,t,n)=>{n.d(t,{t:()=>u});var a=n(32735),r=n(98269),c=n(92869),l=n(49985),o=n(65858),s=n(36848),i=n(83345);function m(e,t,n){var a;if(!t)return null;var r=null!==(a=e.params)&&void 0!==a?a:{};return n?(null==r?void 0:r.previous)?{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null==r?void 0:r.previous,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:t,previous:r.cursor})}}function u(e){var t=e.appLink,n=e.cursors,u=e.className,d=e.buttonVariant,p=e.prevHack,f=e.scrollTop,g=e.onClick;function v(e){t&&!f&&c.t.preventScrollTop(),l.k.logUserAction({page:e},{location:o.LZ.Pagination,entity:o.py.Pagination,actionType:o.Vw.Navigate}),g&&g(n[e])}return t?a.createElement(i.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(s.F,{appLink:m(t,n.previous,p),className:"btn btn-".concat(d," me-1 ").concat(n.previous?"":"disabled"),onClick:function(){return v("previous")},style:{display:"inline-block"}},a.createElement(i.x,{phrase:"previous"})),a.createElement(s.F,{appLink:m(t,n.next),className:"btn btn-".concat(d," ").concat(n.next?"":"disabled"),onClick:function(){return v("next")},style:{display:"inline-block"}},a.createElement(i.x,{phrase:"next"})))):a.createElement(i.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(r.Z,{variant:d,className:"me-1 ".concat(n.previous?"":"disabled"),onClick:function(){return v("previous")}},a.createElement(i.x,{phrase:"previous"})),a.createElement(r.Z,{variant:d,className:"btn ".concat(n.next?"":"disabled"),onClick:function(){return v("next")}},a.createElement(i.x,{phrase:"next"}))))}u.defaultProps={className:"py-2",buttonVariant:"secondary"}},16930:(e,t,n)=>{n.d(t,{W:()=>i,f:()=>s});var a=n(32735),r=n(83914),c=n(35223);const l="VSAPU",o="kgeXh";var s;!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(s||(s={}));var i=a.memo((function(e){var t,n,i,m=e.direction===s.Left,u=m?c.vn.ChevronLeft:c.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(i=e.state)||void 0===i?void 0:i.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:m?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("div",{role:"button",onClick:e.onClick,className:"".concat("AtsWP"," ").concat(m?l:o)}),a.createElement("div",{role:"button",className:"".concat((t="BVcIS",t+=m?" ".concat(l," ").concat(e.leftButtonClassName):" ".concat(o," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(r.x,{svgName:u,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},14177:(e,t,n)=>{n.d(t,{$:()=>S});var a=n(32735),r=n(70680),c=n(81886),l=n(20354),o=n(79447),s=n(83914),i=n(83345),m=n(4594),u=n(76881),d=n(35223),p="userManager.wizardInProgress";function f(e){var t=Math.floor(e.totalItemsComplete/e.totalItems*100)||0;return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},a.createElement(i.x,{namespace:p,phrase:"heading",options:{percentage:t,actionName:e.actionName}})),a.createElement(s.x,{svgName:d.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:p,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1"},a.createElement("span",{className:"text-info"},e.progressVerbPhrase?a.createElement("span",null,e.progressVerbPhrase):a.createElement(i.x,{namespace:p,phrase:"progressVerb".concat(e.actionVerb)}))," ",e.objectType===m.E.User&&e.userType?a.createElement(i.x,{namespace:p,phrase:e.userType===u.Y.Learner?"progressStudents":"progressStaff",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):e.objectType===m.E.Video?a.createElement(i.x,{namespace:p,phrase:"progressVideos",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):a.createElement(i.x,{namespace:p,phrase:"progressItems",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}})),a.createElement(o.Z,{variant:"info",now:t}))}var g="userManager.wizardSubmitted";function v(e){return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},e.actionName?a.createElement(i.x,{namespace:g,phrase:"heading",options:{actionName:e.actionName}}):a.createElement(i.x,{namespace:g,phrase:"headingGeneric"})),a.createElement(s.x,{svgName:d.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:g,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1 text-info"},a.createElement(i.x,{namespace:g,phrase:"preparing"})),a.createElement(o.Z,{variant:"info",now:0}))}var b=n(58739),E=n(94644),h=n(89476);function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?N(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var x=2e3,C=3;function S(e){var t=y(a.useState(null),2),n=t[0],o=t[1],s=y(a.useState(0),2),i=s[0],m=s[1],u=a.useRef(),d=(0,h.f)(),p=(0,r.I0)();function g(){e.pollJob(N,S)}function N(t){o(t),t.status===b.K.Completed||t.status===b.K.CompletedWithError||t.status===b.K.Failed?window.setTimeout((function(){!function(){var t;e.navLockId&&d.unlock(e.navLockId);var n={jobId:e.jobId};e.userType&&(n.userType=e.userType,p({type:l.a.Actions.INVALIDATE,keys:["school:users","user:count","search:aggregation","search:users"],request:null})),e.statusCompleteAppLink?c.Q.C$.trigger(Object.assign(Object.assign({},e.statusCompleteAppLink),{params:n})):null===(t=e.onStatusCompleted)||void 0===t||t.call(e)}()}),2e3):u.current=window.setTimeout(g,x)}function S(t){i===C&&(window.clearTimeout(u.current),e.navLockId&&d.unlock(e.navLockId),(0,E.r)(t)),m((function(e){return e+1})),u.current=window.setTimeout(g,x)}return a.useEffect((function(){return g(),function(){u.current&&window.clearTimeout(u.current)}}),[]),n&&n.status!==b.K.Submitted&&n.status!==b.K.Queued&&n.status!==b.K.Pending&&0!==n.totalItems?a.createElement(f,{totalItems:n.totalItems,totalItemsComplete:n.processedItems,userType:e.userType,objectType:e.objectType,actionName:e.actionName,actionVerb:e.actionVerb,progressVerbPhrase:e.progressVerbPhrase}):a.createElement(v,{actionName:e.actionName,actionVerb:e.actionVerb})}},81514:(e,t,n)=>{n.d(t,{V:()=>c});var a=n(86764),r=n(3747);function c(){var e=(0,r.a)(a.r.XS),t=(0,r.a)(a.r.SM),n=(0,r.a)(a.r.MD),c=(0,r.a)(a.r.LG),l=(0,r.a)(a.r.XL),o=(0,r.a)(a.r.XXL),s=a.r.LG;return e&&(s=a.r.XS),t&&(s=a.r.SM),n&&(s=a.r.MD),c&&(s=a.r.LG),l&&(s=a.r.XL),o&&(s=a.r.XXL),s}},299:(e,t,n)=>{n.d(t,{X:()=>l});var a=n(32735),r=n(69217),c=n(94631),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,l=void 0===n?"id":n,o=t.persistNamespace,s=t.initialState?t.initialState:new Map,i=a.useRef(s),m=(0,r.N)(),u=(0,c.D)(e),d=(0,c.D)(o);function p(){i.current.clear(),m()}function f(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function g(){return!!(null==e?void 0:e.length)&&e.every(f)}function v(e){e.forEach((function(e){i.current.set(e,!0)})),m()}return a.useEffect((function(){t.initialState||o&&d===o||(null==u?void 0:u.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&p()}),[u,d,e,t.initialState]),a.useEffect((function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&v(t.preselectedIds)}),[]),{onToggleBulk:function(){var t=!g();e.forEach((function(e){t?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),m()},onToggleItem:function(e){var t=!i.current.get(e.toString());t?i.current.set(e.toString(),t):i.current.delete(e.toString()),m()},getSelected:function(){return Array.from(i.current.keys())},isChecked:f,bulkChecked:g(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),m())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return f(e)}))},setSelected:v,getSelectedCount:function(){return i.current.size},reset:p,getMap:function(){return i.current}}}},94631:(e,t,n)=>{n.d(t,{D:()=>r});var a=n(32735);function r(e){var t=a.useRef();return a.useEffect((function(){t.current=e})),t.current}},10373:(e,t,n)=>{n.r(t),n.d(t,{RosteringSyncListView:()=>Ve});var a=n(32735),r=n(70680),c=n(23481),l=n(20354),o=n(75097),s=n(49935);const i={partialHeading:"MwUCZ",partialJobCount:"MUELm",partialCheckbox:"dShe9",partialExportButton:"VL4Tq",row:"z_hGc",checkboxColumn:"IacDe",actionColumn:"_JoZe",usersColumn:"BtHPO",dateColumn:"jpr0N",performedByColumn:"XP4Lf",seeMoreColumn:"A8_Nf",heading:"uThGf",action:"PFOGb",users:"pXZx8",date:"VWS_a",performedBy:"vZeC9"};function m(){return a.createElement("div",{className:"d-flex striped-row rounded py-3 ".concat(i.row)},a.createElement("div",{className:"".concat(i.checkboxColumn," d-flex justify-content-center")},a.createElement("div",{className:"partial-loading-background ".concat(i.partialCheckbox," ms-0")})),a.createElement("div",{className:"".concat(i.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.action)})),a.createElement("div",{className:"".concat(i.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.users)})),a.createElement("div",{className:"".concat(i.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.date)})),a.createElement("div",{className:"".concat(i.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.performedBy)})),a.createElement("div",{className:"".concat(i.seeMoreColumn)}," "))}function u(){return a.createElement("div",{className:"d-flex py-2 mb-1"},a.createElement("div",{className:"".concat(i.checkboxColumn)}," "),a.createElement("div",{className:"".concat(i.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.seeMoreColumn)}," "))}function d(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"mb-3 mt-n1"},a.createElement(u,null),a.createElement("div",{className:"striped-list no-full-width"},a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null))))}function p(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background mb-2 ".concat(i.partialHeading)}),a.createElement("div",{className:"pb-3"},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement(s.b2,null),a.createElement("div",{className:"partial-loading-background ".concat(i.partialJobCount)}))),a.createElement("div",{className:"d-flex align-items-center pb-2"},a.createElement("div",{className:"partial-loading-background ".concat(i.partialCheckbox)}),a.createElement("div",{className:"ms-4 ps-3"},a.createElement(o.U,{count:3})),a.createElement("div",{className:"ms-auto partial-loading-background ".concat(i.partialExportButton)})),a.createElement(d,null))}var f=n(31647),g=n(110),v=n(58739);const b={complete:"nAOdH",failed:"xkFpC",inProgress:"BjR3y",scheduled:"Ux2b9"};var E=c.T.encloseNamespace("rostering.syncJobsStatusBadge");function h(e){return a.createElement("div",{className:function(){var t="rounded-pill px-2 d-inline-flex align-items-center fw-semibold";switch(e.status){case v.K.Completed:case v.K.CompletedWithError:return"".concat(t," ").concat(b.complete);case v.K.Failed:return"".concat(t," ").concat(b.failed);case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return"".concat(t," ").concat(b.inProgress);case"scheduled":return"".concat(t," ").concat(b.scheduled)}}()},function(){switch(e.status){case v.K.Completed:case v.K.CompletedWithError:return E("complete");case v.K.Failed:return E("failed");case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return E("inProgress");case"scheduled":return E("scheduled")}}())}var y=n(83914),N=n(35223);const x={colored:"MLlUi",avatar:"Z1jn_",logoWrapper:"OAeff",cog:"I7V_R",checkboxPlaceholder:"LTmrp",source:"zYMOT",date:"mnJQP",status:"Pm1Aa",performedBy:"oy6Vm",placeholder:"o0RDO"};var C=c.T.encloseNamespace("rostering.scheduledSyncJobItem");function S(e){return a.createElement("div",{className:x.colored},a.createElement("div",{className:"px-4 py-3 d-flex align-items-center"},a.createElement("div",{className:x.checkboxPlaceholder}),a.createElement("div",{className:"".concat(x.source," px-2")}),a.createElement("div",{className:"".concat(x.date," px-2")},g.O.format(e.scheduledDate,"DD/MM/YYYY, hh:mmA")),a.createElement("div",{className:"".concat(x.status," px-2")},a.createElement(h,{status:"scheduled"})),a.createElement("div",{className:"".concat(x.performedBy," px-2 d-flex align-items-center")},a.createElement("div",{className:"".concat(x.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(y.x,{svgName:N.vn.Cog,className:"svg-container"})),C("performedBy")),a.createElement("div",{className:"cursor-pointer d-flex justify-content-end ".concat(x.placeholder)})))}var k=n(65654),I=n(56050),j=n(97514),w=n(20789),P={getCellStyle:function(e){return{width:e,flex:"".concat(e," 0 auto")}}},T=n(89965);const A={colored:"aU1VO",seeMore:"Nfc8Q"};function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var O=c.T.encloseNamespace("shared.bulkJobsAccordionItem");function J(e){var t,n,r=(t=a.useState(!!e.forceExpand&&e.forceExpand(e.job)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return L(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?L(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=r[0],l=r[1],o=!!e.disableExpand&&e.disableExpand(e.job);return a.createElement("div",{className:"".concat(A.colored," ").concat(o?"":"cursor-pointer"),onClick:function(){o||l((function(e){return!e}))}},a.createElement("div",{className:"px-4 py-3 d-flex align-items-center"},a.createElement("div",{style:P.getCellStyle(60),onClick:function(e){return e.stopPropagation()}},a.createElement(T.X,{id:e.job.id,checked:e.isChecked(e.job.id),onChange:function(){return e.onToggleCheckbox(e.job.id)}})),e.columns.map((function(t){var n=t.render,r=t.renderClassName,c=t.width,l=t.id;return a.createElement("div",{className:"".concat(null!=r?r:""),key:l,style:P.getCellStyle(c)},n(e.job))})),a.createElement("div",{className:"d-flex justify-content-end ".concat(o?"":"cursor-pointer"),style:P.getCellStyle(200)},!o&&a.createElement("div",{className:"".concat(A.seeMore," text-info")},O(c?"seeLess":"seeMore")))),c&&a.createElement("div",{className:"bg-white border-bottom cursor-default",onClick:function(e){return e.stopPropagation()}},e.jobDetailsComponent(e.job)))}var K=n(93659);function B(e){return a.createElement(K.J,{queryParams:e.queryParams,mainFilters:e.filters,appLink:e.appLink,analyticsOptions:e.analyticsOptions,hideHeading:!0,hideDivider:!0,constantIndices:[]})}var R=n(37395),V=n(2102),M=n(83345),F=n(69883),D=n(299),U=n(75795);const G={bulkCheckbox:"XeoQi"};function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Z="shared.bulkJobsAccordions",q=c.T.encloseNamespace(Z);function X(e){var t,n,r,c=(n=a.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(n,r)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(e,t):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=c[0],o=c[1],s=(0,D.X)(e.jobs.data),i=(0,F.Z)();return a.createElement("div",{className:"".concat(G.container," pe-3")},a.createElement("div",{className:"d-flex align-items-center pb-2 mt-3"},a.createElement(T.X,{className:G.bulkCheckbox,id:"bulk-audit-log-checkbox",checked:s.bulkChecked,onChange:s.onToggleBulk,indeterminate:s.hasSomeSelections()}),a.createElement("div",{className:"ms-4"},a.createElement(B,{queryParams:e.queryParams,appLink:e.appLink,filters:e.filters})),a.createElement(V.m,{variant:"dark",className:"ms-auto",onClick:function(){if(!l){o(!0);var t=s.getSelected();e.onClickExport(t).then((function(){return i.success(q("exportSuccess"))})).catch((function(){return i.error(q("exportError"))})).finally((function(){return o(!1)}))}},disabled:!s.hasSomeSelections()||l,showSpinner:l},a.createElement(M.x,{namespace:Z,phrase:"export"}))),a.createElement("div",{className:"d-flex no-wrap mb-2 fw-semibold px-4 py-2"},a.createElement("div",{style:P.getCellStyle(60)}),e.columns.map((function(e){var t=e.id,n=e.header,r=e.headerClassName,c=e.width;return a.createElement("div",{key:t,className:r,style:P.getCellStyle(c)},n)})),a.createElement("div",{style:P.getCellStyle(200)})),!!e.pinnedComponent&&e.pinnedComponent(),!!e.jobs.data.length&&e.jobs.data.map((function(t){return a.createElement(J,{key:t.id,job:t,onToggleCheckbox:s.onToggleItem,isChecked:s.isChecked,jobDetailsComponent:e.jobDetailsComponent,onClickExport:e.onClickExport,imageCdnUrl:e.imageCdnUrl,onPollJob:e.onPollJob,columns:e.columns,forceExpand:e.forceExpand,disableExpand:e.disableExpand})})),!!(null===(t=e.jobs.pagination)||void 0===t?void 0:t.cursors)&&a.createElement(R.t,{className:"p-0 text-end pb-3 mt-3",cursors:e.jobs.pagination.cursors,appLink:U.O.getCurrentRoute().appLink,buttonVariant:"outline-dark"}))}var _=n(89725),W=n(10874),$=n(80247),Y=n(14177);function Q(e){return e.jobId?a.createElement("div",null,a.createElement("div",{className:"mb-4"},a.createElement(Y.$,{jobId:e.jobId,pollJob:e.onPollJob(e.jobId),onStatusCompleted:e.onCompleted,actionName:"Sync",actionVerb:"Update",progressVerbPhrase:c.T.getPhrase("rostering.syncJobPolling","progressVerb")}))):a.createElement("div",{className:"text-center"},a.createElement($.Z,{as:"div",animation:"border",role:"status"}))}const z={failed:"BSIaY",tag:"NOJhh"};function ee(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return te(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?te(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var ne="rostering.syncJobSummary";function ae(e){var t=ee(a.useState(null),2),n=t[0],r=t[1],c=ee(a.useState(!1),2),l=c[0],o=c[1];function s(e){var t="",r="";switch(e){case"staff":t="bg-navy",r=N.vn.Staff;break;case"learners":t="bg-blue",r=N.vn.GraduationCap;break;case"classrooms":t="bg-teal",r=N.vn.Classrooms}var c=Object.keys(n[e]).filter((function(e){return"totalProcessed"!==e&&"totalSucceeded"!==e}));return a.createElement("div",{className:"col"},a.createElement("div",{className:"py-3 ps-2 pe-3 rounded border border-light"},a.createElement("div",{className:"d-flex align-items-center px-2 mb-2"},a.createElement("div",{className:"".concat(t," ").concat(z.badge," d-flex align-items-center rounded-circle text-white ps-0 me-2")},a.createElement(y.x,{className:"svg-container ".concat(z.svg),size:y.S.Standard,svgName:r})),a.createElement(M.x,{namespace:ne,phrase:e})),a.createElement("ul",{className:"mb-0"},null==c?void 0:c.map((function(t){return a.createElement("li",{className:"mb-2",key:t},a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"rounded-pill me-2 px-2 d-inline-flex align-items-center fw-semibold ".concat("errored"===t?z.failed:z.tag)},n[e][t]),a.createElement(M.x,{namespace:ne,phrase:t})))})))))}return a.useEffect((function(){n||(o(!0),e.getJobSummary(e.job.id).then((function(e){r(e)})).finally((function(){o(!1)})))}),[e.job.id]),a.createElement(a.Fragment,null,l&&!n&&a.createElement("div",{className:"text-center py-3"},a.createElement($.Z,{as:"div",animation:"border",role:"status"})),!!n&&a.createElement("div",{className:"row gx-3 mt-2"},s("staff"),s("learners"),s("classrooms")))}var re=c.T.encloseNamespace("rostering.syncJobDetails");function ce(e){var t=e.job.status===v.K.Completed||e.job.status===v.K.CompletedWithError,n=(0,F.Z)();return a.createElement("div",{className:"py-3 px-4"},a.createElement("div",{className:"d-flex justify-content-between"},e.job.status!==v.K.InProgress&&a.createElement("h1",{className:"h4"},re("heading")),t&&a.createElement(W.h,{className:"btn btn-outline-dark fw-semibold",svgName:N.vn.Download,onClick:function(){e.onClickExport([e.job.id]).then((function(){n.success(re("exportSuccess"))})).catch((function(){n.error(re("exportError"))}))}},re("export"))),function(){switch(e.job.status){case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return a.createElement(Q,{jobId:e.job.id,onCompleted:e.onCompleted,onPollJob:e.onPollJob});case v.K.Failed:return a.createElement(a.Fragment,null);case v.K.Completed:case v.K.CompletedWithError:return a.createElement(ae,{job:e.job,getJobSummary:e.getJobSummary});default:return a.createElement(a.Fragment,null)}}())}var le=n(86794),oe=n(76177),se=n(55171),ie=n(64818);const me={avatar:"B8miR",logoWrapper:"higtD",cog:"bNPxa"};var ue="rostering.syncJobsAccordion",de=c.T.encloseNamespace(ue),pe=[v.K.InProgress,v.K.Pending,v.K.Queued,v.K.Submitted];function fe(e){var t=[j.x$.SortBy([{id:"newest",name:c.T.getPhrase(ue,"newest"),default:!0},{id:"oldest",name:c.T.getPhrase(ue,"oldest")}]),j.x$.JobStatus()],n=[{id:"id",header:de("syncFrom"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){var t,n=null===(t=e.metadata)||void 0===t?void 0:t.source;if(!n)return a.createElement(a.Fragment,null);var r=se.e.Rostering.sources[n];if(!r)throw new I.H("Unsupported rostering sync source, please add it to HardCoded rostering source");return a.createElement("div",{className:"bg-white rounded-circle border ".concat(me.logoWrapper," d-flex align-items-center justify-content-center")},a.createElement(oe.u,{spanHack:!0,title:r.name},a.createElement("img",{src:r.iconUrl,alt:r.name})))},width:120},{id:"dateCreated",header:de("date"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return g.O.format(e.dateCreated,"DD/MM/YYYY, hh:mmA")},width:220},{id:"status",header:de("status"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return a.createElement(h,{status:e.status})},width:200},{id:"submitterName",header:de("performedBy"),headerClassName:"px-2",renderClassName:"px-2",render:function(t){return function(e,t){return e.submittedByClickView?a.createElement("div",{className:"d-flex align-items-center"},a.createElement(le.b,{className:"me-2 rounded-circle border",size:y.S.Large},a.createElement(_.F,null)),e.submitterName):e.submitterName?a.createElement("div",{className:"d-flex align-items-center"},a.createElement("div",{className:"me-2 ".concat(me.avatar)},a.createElement(w.q,{imageCdnUrl:t.imageCdnUrl,initials:ie.l.getInitials(e.submitterName.split(" ")[0],e.submitterName.split(" ")[1])})),e.submitterName):a.createElement("div",{className:"me-2 d-flex align-items-center"},a.createElement("div",{className:"".concat(me.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(y.x,{svgName:N.vn.Cog,className:"svg-container"})),de("scheduledSubmitter"))}(t,e)},width:200}];return a.createElement(X,Object.assign({},e,{filters:t,jobDetailsComponent:function(t){return a.createElement(ce,{job:t,getJobSummary:e.getJobSummary,onPollJob:e.onPollJob,onClickExport:e.onClickExport,onCompleted:e.onCompleted})},columns:n,forceExpand:function(e){return pe.includes(e.status)},disableExpand:function(e){return e.status===v.K.Failed}}))}var ge=n(62394),ve=n(16714),be=n(39151),Ee=n(44538),he=n(31949),ye=n(79612),Ne=n(14070),xe=n(97291),Ce=n(29613),Se=n(44230),ke=n(81803),Ie=n(23232),je=n(99742),we="rostering.districtRosterEmptyState";function Pe(){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:je.W.EmptyStates.Rostering.DISTRICT_ROSTERING}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:we,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-2"},a.createElement(M.x,{namespace:we,phrase:"emptyInfo"})),a.createElement(Ie.u.Info,{className:"w-50 mb-1 fw-semibold"},a.createElement(M.x,{namespace:we,phrase:"strongInfo"})))}var Te="rostering.noResults";function Ae(){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:je.W.EmptyStates.Rostering.EMPTY_RESULTS}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:Te,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-1"},a.createElement(M.x,{namespace:Te,phrase:"emptyInfo"})))}var Le="rostering.noSyncJobs",Oe=c.T.encloseNamespace(Le);function Je(e){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:je.W.EmptyStates.Rostering.NO_SYNC_JOBS}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:Le,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-3"},a.createElement(M.x,{namespace:Le,phrase:"emptyInfo"})),a.createElement(Ie.u.Cta,{className:"btn btn-dark",onClick:e.onStartFullSync,text:Oe("emptyCta")}))}var Ke=n(52834),Be=n(56736),Re=c.T.encloseNamespace("rostering.syncList");function Ve(e){var t,n=l.a.useBasicFetch(Ee.K.getSyncList(e.queryParams)),c=l.a.useBasicFetch(be.L.config()),o=l.a.useBasicFetch(he.N.currentUser()),s=l.a.useBasicFetch(Ee.K.getRostering()),i=l.a.useBasicFetch(o.data&&s.data&&Ee.K.getSyncScheduleSettings(s.data.id)),m=n.hasCompleted&&c.hasCompleted&&i.hasCompleted&&s.hasCompleted,u=l.a.useGetFetchAsync(),d=(0,r.I0)();function g(e){return u(Ee.K.getJobSummary(e))}function v(e){return function(t,n){return u(Ce.q.getJobProgress(e,t,n))}}function b(){d({type:l.a.Actions.INVALIDATE,keys:["rostering:sync"],request:null})}function E(e){return u(Ce.q.sendJobReports(e))}(0,ye.M)({title:Re("pageTitle")}),a.useEffect((function(){return function(){Se.e.unlockContentWidth()}}),[]);var h=m&&"Active"===(null===(t=s.data)||void 0===t?void 0:t.status),y=(0,Be.B)(o.data),N=y.syncNow,x=y.fullSync;return a.createElement(ke.d,{heading:Re("heading"),breadcrumbs:[Re("breadcrumb")],headingButton:function(){return h?a.createElement(k.G,{onSyncNow:N,onFullSync:x}):a.createElement(a.Fragment,null)},requiredPermissions:ve.C.Rostering},h&&a.createElement(f.E,{active:"syncJobs",appLinks:{syncJobs:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING},settings:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING_SETTINGS}}}),function(){var t,r;if("Managed"===(null===(t=s.data)||void 0===t?void 0:t.status))return a.createElement(Pe,null);if("None"===(null===(r=s.data)||void 0===r?void 0:r.status))return a.createElement(Ke.y,null);if(!m)return a.createElement(p,null);if(!n.data.data.length&&!e.queryParams)return a.createElement(Je,{onStartFullSync:N});var l=ge.y.getScheduledJobBySetting(i.data);return a.createElement(a.Fragment,null,a.createElement(fe,{jobs:n.data,queryParams:e.queryParams,appLink:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING},onClickExport:E,getJobSummary:g,imageCdnUrl:c.data.imageCdnUrl,onPollJob:v,onCompleted:b,pinnedComponent:l?function(){return a.createElement(S,{scheduledDate:l})}:null}),!n.data.data.length&&e.queryParams&&a.createElement(Ae,null))}())}},79447:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(95685),r=n.n(a),c=n(32735),l=n(46304),o=n(58661),s=n(74512);const i=1e3;function m(e,t,n){const a=(e-t)/(n-t)*100;return Math.round(a*i)/i}function u({min:e,now:t,max:n,label:a,visuallyHidden:c,striped:l,animated:o,className:i,style:u,variant:d,bsPrefix:p,...f},g){return(0,s.jsx)("div",{ref:g,...f,role:"progressbar",className:r()(i,`${p}-bar`,{[`bg-${d}`]:d,[`${p}-bar-animated`]:o,[`${p}-bar-striped`]:o||l}),style:{width:`${m(t,e,n)}%`,...u},"aria-valuenow":t,"aria-valuemin":e,"aria-valuemax":n,children:c?(0,s.jsx)("span",{className:"visually-hidden",children:a}):a})}const d=c.forwardRef((({isChild:e=!1,...t},n)=>{const a={min:0,max:100,animated:!1,visuallyHidden:!1,striped:!1,...t};if(a.bsPrefix=(0,l.vE)(a.bsPrefix,"progress"),e)return u(a,n);const{min:i,now:m,max:d,label:p,visuallyHidden:f,striped:g,animated:v,bsPrefix:b,variant:E,className:h,children:y,...N}=a;return(0,s.jsx)("div",{ref:n,...N,className:r()(h,b),children:y?(0,o.UI)(y,(e=>(0,c.cloneElement)(e,{isChild:!0}))):u({min:i,now:m,max:d,label:p,visuallyHidden:f,striped:g,animated:v,bsPrefix:b,variant:E},n)})}));d.displayName="ProgressBar";const p=d}}]);
2
- //# sourceMappingURL=422-5773602f61-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/422-5773602f61-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/components/pagination/Pagination.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/in-progress/WizardInProgress.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/submitted/WizardSubmitted.tsx","file:///app/packages/libs/shared/src/components/wizard/status/polling/WizardPolling.tsx","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/components/rostering/partial-loading/partial-sync-jobs-list.scss","file:///app/packages/libs/shared/src/components/rostering/partial-loading/PartialSyncJobsTable.tsx","file:///app/packages/libs/shared/src/components/rostering/partial-loading/PartialSyncJobsList.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-status-badge/sync-status-badge.scss","file:///app/packages/libs/shared/src/components/rostering/sync-status-badge/SyncStatusBadge.tsx","file:///app/packages/libs/shared/src/components/rostering/scheduled-sync-job-item/scheduled-sync-job-item.scss","file:///app/packages/libs/shared/src/components/rostering/scheduled-sync-job-item/ScheduledSyncJobItem.tsx","file:///app/packages/libs/shared/src/components/bulk-job-accordion/BulkJobsAccordionHelper.ts","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion-item/bulk-jobs-accordion-item.scss","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion-item/BulkJobsAccordionItem.tsx","file:///app/packages/libs/shared/src/components/bulk-jobs-filters/BulkJobsFilters.tsx","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion.scss","file:///app/packages/libs/shared/src/components/bulk-job-accordion/BulkJobsAccordion.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-polling/SyncJobPolling.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-summary/sync-job-summary.scss","file:///app/packages/libs/shared/src/components/rostering/sync-job-summary/SyncJobSummary.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-details/SyncJobDetails.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-jobs-accordion/sync-jobs-accordion.scss","file:///app/packages/libs/shared/src/components/rostering/sync-jobs-accordion/SyncJobsAccordion.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/district-rostering-empty-state/DistrictRosteringEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/no-results-empty-state/NoResultsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/no-sync-jobs-empty-state/NoSyncJobsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/RosteringSyncListView.tsx","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import * as React from 'react';\n\nimport styles from './search-filters.scss';\n\ninterface PartialSearchFiltersProps {\n count?: number;\n}\n\nexport function PartialSearchFilters({ count = 6 }: PartialSearchFiltersProps): JSX.Element {\n return (\n <div className='d-flex'>\n <div className='d-flex ps-1'>\n {Array(count).fill(null).map((item, index) => (\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\n ))}\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport { Button, ButtonProps } from 'react-bootstrap';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nfunction buildCursor(appLink: Core.AppLink, cursorParam: string, prevHack?: boolean): Core.AppLink {\n if (!cursorParam)\n return null;\n\n const currentParams = appLink.params as HashObject ?? {};\n /* \n Currently the pagination for My Videos shows the previous cursor in the first page cursor,\n so instead of using the previous cursor from the response, the current cursor is being passed\n as the previous cursor in the app link\n */\n\n if (prevHack) {\n if (!currentParams?.previous) {\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: null,\n previous: null\n }\n };\n }\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: currentParams?.previous,\n previous: null\n }\n };\n }\n\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: cursorParam,\n previous: currentParams.cursor\n }\n };\n}\n\ninterface CursorPaginationProps {\n cursors: Cursors;\n appLink?: Core.AppLink;\n className?: string;\n buttonVariant?: ButtonProps['variant'];\n prevHack?: boolean;\n scrollTop?: boolean;\n onClick?: (cursor: string) => void;\n}\n\nPagination.defaultProps = {\n className: 'py-2',\n buttonVariant: 'secondary'\n};\n\nexport function Pagination(\n { appLink, cursors, className, buttonVariant, prevHack, scrollTop, onClick }: CursorPaginationProps\n): JSX.Element {\n function onClickButton(page: 'next' | 'previous'): void {\n if (appLink && !scrollTop)\n ScrollHelper.preventScrollTop();\n\n AnalyticsHelper.logUserAction({ page }, {\n location: LocationContext.Pagination,\n entity: EntityType.Pagination,\n actionType: UserAction.Navigate\n });\n\n if (onClick)\n onClick(cursors[page]);\n }\n\n if (appLink) {\n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <AppLink\n appLink={buildCursor(appLink, cursors.previous, prevHack)}\n className={`btn btn-${buttonVariant} me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='previous' />\n </AppLink>\n \n <AppLink\n appLink={buildCursor(appLink, cursors.next)}\n className={`btn btn-${buttonVariant} ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='next' />\n </AppLink>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n }\n \n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <Button\n variant={buttonVariant}\n className={`me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n >\n <Text phrase='previous' />\n </Button>\n <Button\n variant={buttonVariant}\n className={`btn ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n >\n <Text phrase='next' />\n </Button>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardInProgress';\n\ninterface WizardInProgressProps {\n userType?: UserGroup;\n totalItems: number;\n totalItemsComplete: number;\n actionName: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardInProgress(props: WizardInProgressProps): JSX.Element {\n const percentage = Math.floor(props.totalItemsComplete / props.totalItems * 100) || 0;\n\n function renderProgressText() {\n if (props.objectType === MasterType.User && props.userType) {\n return (\n <Text\n namespace={namespace}\n phrase={props.userType === UserGroup.Learner ? 'progressStudents' : 'progressStaff'}\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n if (props.objectType === MasterType.Video) {\n return (\n <Text\n namespace={namespace}\n phrase='progressVideos'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <Text\n namespace={namespace}\n phrase='progressItems'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n <Text namespace={namespace} phrase='heading' options={{ percentage, actionName: props.actionName }} />\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1'>\n <span className='text-info'>\n {props.progressVerbPhrase ? (\n <span>{props.progressVerbPhrase}</span>\n ) : (\n <Text namespace={namespace} phrase={`progressVerb${props.actionVerb}`} />\n )}\n </span>\n &nbsp;\n {renderProgressText()}\n </p>\n <ProgressBar variant='info' now={percentage} />\n </div>\n );\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardSubmitted';\n\ninterface WizardSubmittedProps {\n actionName?: string;\n actionVerb: WizardActionVerb;\n}\n\nexport function WizardSubmitted(props: WizardSubmittedProps): JSX.Element {\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n {props.actionName\n ? <Text namespace={namespace} phrase='heading' options={{ actionName: props.actionName }} />\n : <Text namespace={namespace} phrase='headingGeneric' />\n }\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1 text-info'>\n <Text namespace={namespace} phrase='preparing' />\n </p>\n <ProgressBar variant='info' now={0} />\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WizardInProgress } from 'libs/shared/components/wizard/status/statuses/in-progress/WizardInProgress';\nimport { WizardSubmitted } from 'libs/shared/components/wizard/status/statuses/submitted/WizardSubmitted';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BatchJobProgress, WizardActionVerb } from 'libs/shared/interfaces';\n\nconst POLLING_INTERVAL = 2000;\nconst MAX_CONSECUTIVE_ERROR_COUNT = 3; // If the polling endpoint errors 3 times in a row, we will cancel\n\nexport type WizardPollJobFn = (onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) => void;\n\ninterface WizardPollingProps {\n jobId: string;\n userType?: UserGroup;\n statusCompleteAppLink?: Core.AppLink;\n onStatusCompleted?: () => void;\n pollJob: WizardPollJobFn;\n actionName: string;\n navLockId?: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardPolling(props: WizardPollingProps): JSX.Element {\n const [ progress, setProgress ] = React.useState<BatchJobProgress>(null);\n const [ consecutiveErrorCount, setConsecutiveErrorCount ] = React.useState(0);\n\n const timeoutIdRef = React.useRef<number>();\n\n const navLock = useNavLock();\n const dispatch = useDispatch();\n\n // Kick off polling for the running batch job. Polling will be stopped if user navigates away.\n React.useEffect(() => {\n pollJob();\n\n return () => {\n if (!timeoutIdRef.current)\n return;\n\n window.clearTimeout(timeoutIdRef.current);\n };\n }, []);\n\n function pollJob(): void {\n props.pollJob(onPollSuccess, onPollError);\n }\n\n function onPollSuccess(currentProgress: BatchJobProgress): void {\n setProgress(currentProgress);\n\n // Job is considered completed if status matches any of the following values\n const jobHasCompleted = (\n currentProgress.status === BatchJobStatus.Completed ||\n currentProgress.status === BatchJobStatus.CompletedWithError ||\n currentProgress.status === BatchJobStatus.Failed\n );\n\n if (!jobHasCompleted) {\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n return;\n }\n\n /**\n * When the job progress is 100%, we want to provide 2 seconds for the\n * progress bar animation to complete before navigating to the \"complete\"\n * view. Otherwise it's a little bit jarring.\n */\n window.setTimeout(() => {\n onCompleteJob();\n }, 2000);\n }\n\n function onPollError(xhr: Xhr): void {\n if (consecutiveErrorCount === MAX_CONSECUTIVE_ERROR_COUNT) {\n window.clearTimeout(timeoutIdRef.current);\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n handleHttpError(xhr);\n }\n\n setConsecutiveErrorCount(currentVal => currentVal + 1);\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n }\n\n function onCompleteJob(): void {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n\n const params: HashObject = { jobId: props.jobId };\n\n if (props.userType) {\n params.userType = props.userType;\n\n // Clear all user's in flight cache. This way any users updated in bulk actions will have up to date data.\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: [ 'school:users', 'user:count', 'search:aggregation', 'search:users' ],\n request: null\n });\n }\n if (props.statusCompleteAppLink) {\n Core.AppLinkHelper.trigger({\n ...props.statusCompleteAppLink,\n params: params\n });\n return;\n }\n\n props.onStatusCompleted?.();\n }\n\n const hasNotStarted = !!(\n !progress ||\n progress.status === BatchJobStatus.Submitted ||\n progress.status === BatchJobStatus.Queued ||\n progress.status === BatchJobStatus.Pending\n );\n\n if (hasNotStarted || progress.totalItems === 0)\n return <WizardSubmitted actionName={props.actionName} actionVerb={props.actionVerb} />;\n\n return (\n <WizardInProgress\n totalItems={progress.totalItems}\n totalItemsComplete={progress.processedItems}\n userType={props.userType}\n objectType={props.objectType}\n actionName={props.actionName}\n actionVerb={props.actionVerb}\n progressVerbPhrase={props.progressVerbPhrase}\n />\n );\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"MwUCZ\",\"partialJobCount\":\"MUELm\",\"partialCheckbox\":\"dShe9\",\"partialExportButton\":\"VL4Tq\",\"row\":\"z_hGc\",\"checkboxColumn\":\"IacDe\",\"actionColumn\":\"_JoZe\",\"usersColumn\":\"BtHPO\",\"dateColumn\":\"jpr0N\",\"performedByColumn\":\"XP4Lf\",\"seeMoreColumn\":\"A8_Nf\",\"heading\":\"uThGf\",\"action\":\"PFOGb\",\"users\":\"pXZx8\",\"date\":\"VWS_a\",\"performedBy\":\"vZeC9\"};","import React from 'react';\n\nimport styles from './partial-sync-jobs-list.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded py-3 ${styles.row}`}>\n <div className={`${styles.checkboxColumn} d-flex justify-content-center`}>\n <div className={`partial-loading-background ${styles.partialCheckbox} ms-0`} />\n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.action}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.users}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.performedBy}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex py-2 mb-1'>\n <div className={`${styles.checkboxColumn}`}>\n &nbsp;\n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialSyncJobsTable(): JSX.Element {\n return (\n <>\n <div className='mb-3 mt-n1'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialSearchFilters } from 'libs/shared/apps/search/components/search-filters/PartialSearchFilters';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nimport { PartialSyncJobsTable } from './PartialSyncJobsTable';\n\nimport styles from './partial-sync-jobs-list.scss';\n\nexport function PartialSyncJobsList(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <PartialBreadcrumbs />\n\n <div className={`partial-loading-background ${styles.partialJobCount}`} />\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <div className={`partial-loading-background ${styles.partialCheckbox}`} />\n\n <div className='ms-4 ps-3'>\n <PartialSearchFilters count={3} />\n </div>\n\n <div className={`ms-auto partial-loading-background ${styles.partialExportButton}`} />\n </div>\n\n <PartialSyncJobsTable />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"complete\":\"nAOdH\",\"failed\":\"xkFpC\",\"inProgress\":\"BjR3y\",\"scheduled\":\"Ux2b9\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\n\nimport styles from './sync-status-badge.scss';\n\nconst namespace = 'rostering.syncJobsStatusBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncStatusBadgeProps {\n status: BatchJobStatus | 'scheduled';\n}\n\nexport function SyncStatusBadge(props: SyncStatusBadgeProps): JSX.Element {\n function getClassName(): string {\n const baseClass = 'rounded-pill px-2 d-inline-flex align-items-center fw-semibold';\n\n switch (props.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return `${baseClass} ${styles.complete}`;\n case BatchJobStatus.Failed:\n return `${baseClass} ${styles.failed}`;\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return `${baseClass} ${styles.inProgress}`;\n case 'scheduled':\n return `${baseClass} ${styles.scheduled}`;\n }\n }\n\n function getName(): string {\n switch (props.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return getPhrase('complete');\n case BatchJobStatus.Failed:\n return getPhrase('failed');\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return getPhrase('inProgress');\n case 'scheduled':\n return getPhrase('scheduled');\n }\n }\n\n return (\n <div className={getClassName()}>\n {getName()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colored\":\"MLlUi\",\"avatar\":\"Z1jn_\",\"logoWrapper\":\"OAeff\",\"cog\":\"I7V_R\",\"checkboxPlaceholder\":\"LTmrp\",\"source\":\"zYMOT\",\"date\":\"mnJQP\",\"status\":\"Pm1Aa\",\"performedBy\":\"oy6Vm\",\"placeholder\":\"o0RDO\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SyncStatusBadge } from 'libs/shared/components/rostering/sync-status-badge/SyncStatusBadge';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './scheduled-sync-job-item.scss';\n\n\nconst namespace = 'rostering.scheduledSyncJobItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionItemProps {\n scheduledDate: Date;\n}\n\nexport function ScheduledSyncJobItem(props: SyncJobsAccordionItemProps): JSX.Element {\n return (\n <div className={styles.colored}>\n <div className='px-4 py-3 d-flex align-items-center'>\n {/* no checkbox for scheduled job but need a placeholder for styling */}\n <div className={styles.checkboxPlaceholder}></div>\n\n <div className={`${styles.source} px-2`}>\n {/* scheduled job don't have source logo, we keep it as placeholder*/}\n </div>\n \n <div className={`${styles.date} px-2`}>{DateHelper.format(props.scheduledDate, 'DD/MM/YYYY, hh:mmA')}</div>\n \n <div className={`${styles.status} px-2`}><SyncStatusBadge status='scheduled' /></div>\n\n <div className={`${styles.performedBy} px-2 d-flex align-items-center`}>\n <div className={`${styles.cog} me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center`}>\n <SvgContainer\n svgName={cvSvgLibrary.Cog}\n className='svg-container'\n />\n </div>\n {getPhrase('performedBy')}\n </div>\n\n <div className={`cursor-pointer d-flex justify-content-end ${styles.placeholder}`}></div>\n \n </div>\n </div>\n );\n}","export const BulkJobAccordionHelper = {\n getCellStyle(width: number) {\n return { width, flex: `${width} 0 auto` };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"colored\":\"aU1VO\",\"seeMore\":\"Nfc8Q\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BulkJobsAccordionColumn } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { BatchJob } from 'libs/shared/interfaces';\n\nimport styles from './bulk-jobs-accordion-item.scss';\n\nconst namespace = 'shared.bulkJobsAccordionItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionItemProps {\n job: BatchJob;\n onToggleCheckbox: (id: string) => void;\n isChecked: (id: string) => boolean;\n jobDetailsComponent: (job: BatchJob) => JSX.Element;\n onClickExport: (ids: string[]) => Promise<void>;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n columns: BulkJobsAccordionColumn[];\n forceExpand?: (job: BatchJob) => boolean;\n disableExpand?: (job: BatchJob) => boolean;\n}\n\nexport function BulkJobsAccordionItem(props: SyncJobsAccordionItemProps): JSX.Element {\n const [ isExpanded, setIsExpanded ] = React.useState(props.forceExpand ? props.forceExpand(props.job) : false);\n const isDisabled = props.disableExpand ? props.disableExpand(props.job) : false;\n\n function onClick() {\n if (isDisabled)\n return;\n setIsExpanded(s => !s);\n }\n\n return (\n <div className={`${styles.colored} ${isDisabled ? '' : 'cursor-pointer'}`} onClick={onClick}>\n <div className='px-4 py-3 d-flex align-items-center'>\n <div style={BulkJobAccordionHelper.getCellStyle(60)} onClick={e => e.stopPropagation()}>\n <Checkbox\n id={props.job.id}\n checked={props.isChecked(props.job.id)}\n onChange={() => props.onToggleCheckbox(props.job.id)}\n />\n </div>\n \n {props.columns.map(({ render, renderClassName, width, id }) => (\n <div className={`${renderClassName ?? ''}`} key={id} style={BulkJobAccordionHelper.getCellStyle(width)}>{render(props.job)}</div>\n ))}\n \n <div className={`d-flex justify-content-end ${isDisabled ? '' : 'cursor-pointer'}`} style={BulkJobAccordionHelper.getCellStyle(200)}>\n {!isDisabled && (<div className={`${styles.seeMore} text-info`}>\n {isExpanded ? getPhrase('seeLess') : getPhrase('seeMore')}\n </div>)}\n </div>\n </div>\n \n {isExpanded && (\n <div className='bg-white border-bottom cursor-default' onClick={e => e.stopPropagation()}>\n {props.jobDetailsComponent(props.job)}\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nexport interface BulkJobsQueryParams {\n cursor: string;\n userType?: UserGroup | UserGroup[];\n bulkActionType?: BatchJobType | BatchJobType[];\n sort: 'newest' | 'oldest';\n jobStatus?: string[];\n}\n\ninterface BulkJobsFiltersProps {\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n filters: SearchFilter[];\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function BulkJobsFilters(props: BulkJobsFiltersProps): JSX.Element {\n return (\n <SearchFilters\n queryParams={props.queryParams}\n mainFilters={props.filters}\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n hideHeading\n hideDivider\n constantIndices={[]}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bulkCheckbox\":\"XeoQi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { BulkJobsAccordionItem } from 'libs/shared/components/bulk-job-accordion/bulk-jobs-accordion-item/BulkJobsAccordionItem';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { BulkJobsFilters, BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { BatchJob, BatchJobCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport styles from './bulk-jobs-accordion.scss';\n\nconst namespace = 'shared.bulkJobsAccordions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface BulkJobsAccordionColumn {\n id: keyof BatchJob | 'checkboxes';\n header: string;\n headerClassName?: string;\n render: (val: BatchJob) => JSX.Element | string;\n renderClassName?: string;\n width: number;\n}\n\ninterface BulkJobsAccordionProps {\n jobs: BatchJobCollection;\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n onClickExport: (ids: string[]) => Promise<void>;\n jobDetailsComponent: (job: BatchJob) => JSX.Element;\n pinnedComponent?: () => JSX.Element;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n columns: BulkJobsAccordionColumn[];\n filters: SearchFilter[];\n forceExpand?: (job: BatchJob) => boolean;\n disableExpand?: (job: BatchJob) => boolean;\n}\n\nexport function BulkJobsAccordion(props: BulkJobsAccordionProps): JSX.Element {\n const [ showExportSpinner, setShowExportSpinner ] = React.useState(false);\n \n const CheckboxHelper = useBulkCheckboxManager(props.jobs.data);\n const alerts = useAlerts();\n\n function onClickExport(): void {\n if (showExportSpinner)\n return;\n\n setShowExportSpinner(true);\n\n const selectedIds = CheckboxHelper.getSelected();\n\n props.onClickExport(selectedIds)\n .then(() => alerts.success(getPhrase('exportSuccess')))\n .catch(() => alerts.error(getPhrase('exportError')))\n .finally(() => setShowExportSpinner(false));\n }\n\n return (\n <div className={`${styles.container} pe-3`}>\n <div className='d-flex align-items-center pb-2 mt-3'>\n {/* bulk checkbox */}\n <Checkbox\n className={styles.bulkCheckbox}\n id='bulk-audit-log-checkbox'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n\n <div className='ms-4'>\n <BulkJobsFilters\n queryParams={props.queryParams}\n appLink={props.appLink}\n filters={props.filters}\n />\n </div>\n\n <SpinnerButton\n variant='dark'\n className='ms-auto'\n onClick={onClickExport}\n disabled={!CheckboxHelper.hasSomeSelections() || showExportSpinner}\n showSpinner={showExportSpinner}\n >\n <Text namespace={namespace} phrase='export' />\n </SpinnerButton>\n </div>\n \n {/* table columns header */}\n <div className='d-flex no-wrap mb-2 fw-semibold px-4 py-2'>\n <div style={BulkJobAccordionHelper.getCellStyle(60)}></div>\n {props.columns.map(({ id, header, headerClassName, width }) => (\n <div key={id} className={headerClassName} style={BulkJobAccordionHelper.getCellStyle(width)}>{header}</div>\n ))}\n <div style={BulkJobAccordionHelper.getCellStyle(200)}></div>\n </div>\n\n {/* table content*/}\n {/* pinned content at the top if has*/}\n {!!props.pinnedComponent && props.pinnedComponent()}\n\n {/* main content */}\n {!!props.jobs.data.length && props.jobs.data.map(job => {\n return (\n <BulkJobsAccordionItem\n key={job.id}\n job={job}\n onToggleCheckbox={CheckboxHelper.onToggleItem}\n isChecked={CheckboxHelper.isChecked}\n jobDetailsComponent={props.jobDetailsComponent}\n onClickExport={props.onClickExport}\n imageCdnUrl={props.imageCdnUrl}\n onPollJob={props.onPollJob}\n columns={props.columns}\n forceExpand={props.forceExpand}\n disableExpand={props.disableExpand}\n />\n );\n })}\n\n {/* pagination */}\n {!!props.jobs.pagination?.cursors && (\n <Pagination\n className='p-0 text-end pb-3 mt-3'\n cursors={props.jobs.pagination.cursors}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n />\n )}\n </div>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WizardPolling, WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\n\ninterface SyncJobPollingProps {\n jobId: string;\n onCompleted: () => void;\n onPollJob: (id: string) => WizardPollJobFn;\n}\n\nexport function SyncJobPolling(props: SyncJobPollingProps): JSX.Element {\n if (!props.jobId)\n return (\n <div className='text-center'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <div>\n <div className='mb-4'>\n <WizardPolling\n jobId={props.jobId}\n pollJob={props.onPollJob(props.jobId)}\n onStatusCompleted={props.onCompleted}\n actionName='Sync'\n actionVerb='Update'\n progressVerbPhrase={LanguageService.getPhrase('rostering.syncJobPolling', 'progressVerb')}\n />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"failed\":\"BSIaY\",\"tag\":\"NOJhh\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BatchJob, RosteringSyncBatchJobSummary } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './sync-job-summary.scss';\n\nconst namespace = 'rostering.syncJobSummary';\n\ninterface SyncJobSummaryProps {\n job: BatchJob;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n}\n\nexport function SyncJobSummary(props: SyncJobSummaryProps): JSX.Element {\n const [ summary, setSummary ] = React.useState<RosteringSyncBatchJobSummary>(null);\n const [ isFetchingSummary, setIsFetchingSummary ] = React.useState(false);\n function onFetchSummary() {\n setIsFetchingSummary(true);\n\n props.getJobSummary(props.job.id)\n .then(result => {\n setSummary(result);\n }).finally(() => {\n setIsFetchingSummary(false);\n });\n }\n\n React.useEffect(() => {\n if (!summary) {\n onFetchSummary();\n }\n }, [props.job.id]);\n\n function getCategoryList(name: keyof RosteringSyncBatchJobSummary) {\n let bgColor = '';\n let icon = '';\n switch (name) {\n case 'staff':\n bgColor = 'bg-navy';\n icon = cvSvgLibrary.Staff;\n break;\n case 'learners':\n bgColor = 'bg-blue';\n icon = cvSvgLibrary.GraduationCap;\n break;\n case 'classrooms':\n bgColor = 'bg-teal';\n icon = cvSvgLibrary.Classrooms;\n break;\n\n default:\n break;\n }\n\n const displayedSummaryKeys = Object.keys(summary[name]).filter(k => {\n return k !== 'totalProcessed' && k !== 'totalSucceeded';\n });\n\n return (\n <div className='col'>\n <div className='py-3 ps-2 pe-3 rounded border border-light'>\n <div className='d-flex align-items-center px-2 mb-2'>\n <div className={`${bgColor} ${styles.badge} d-flex align-items-center rounded-circle text-white ps-0 me-2`}>\n <SvgContainer\n className={`svg-container ${styles.svg}`}\n size={SvgContainerSize.Standard}\n svgName={icon}\n />\n </div>\n <Text namespace={namespace} phrase={name}/>\n </div>\n <ul className='mb-0'>\n {displayedSummaryKeys?.map((k: string) => {\n return (\n <li className='mb-2' key={k}>\n <div className='d-flex'>\n <div className={`rounded-pill me-2 px-2 d-inline-flex align-items-center fw-semibold ${k === 'errored' ? styles.failed : styles.tag}`}>{(summary[name] as HashObject)[k]}</div>\n <Text namespace={namespace} phrase={k}/>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n );\n }\n return (\n <>\n {(isFetchingSummary && !summary) && (\n <div className='text-center py-3'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n {!!summary && (\n <div className='row gx-3 mt-2'>\n {getCategoryList('staff')}\n {getCategoryList('learners')}\n {getCategoryList('classrooms')}\n </div>\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SyncJobPolling } from 'libs/shared/components/rostering/sync-job-polling/SyncJobPolling';\nimport { SyncJobSummary } from 'libs/shared/components/rostering/sync-job-summary/SyncJobSummary';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { BatchJob, RosteringSyncBatchJobSummary } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'rostering.syncJobDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobDetailsProps {\n job: BatchJob;\n summary?: RosteringSyncBatchJobSummary;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n onClickExport: (ids: string[]) => Promise<void>;\n onPollJob?: (id: string) => WizardPollJobFn;\n onCompleted?: () => void;\n}\n\nexport function SyncJobDetails(props: SyncJobDetailsProps): JSX.Element {\n const canExport = props.job.status === BatchJobStatus.Completed\n || props.job.status === BatchJobStatus.CompletedWithError;\n\n const alerts = useAlerts();\n\n function getContent() {\n switch (props.job.status) {\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return (\n <SyncJobPolling\n jobId={props.job.id}\n onCompleted={props.onCompleted}\n onPollJob={props.onPollJob}\n />\n );\n\n case BatchJobStatus.Failed:\n // failed job cannot be expanded, since we don't have helpful error message for now\n return <></>;\n\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return <SyncJobSummary job={props.job} getJobSummary={props.getJobSummary} />;\n\n default:\n return <></>;\n }\n }\n\n function onClickExport() {\n props.onClickExport([props.job.id])\n .then(() => {\n alerts.success(getPhrase('exportSuccess'));\n })\n .catch(() => {\n alerts.error(getPhrase('exportError'));\n });\n }\n\n return (\n <div className='py-3 px-4' >\n <div className='d-flex justify-content-between'>\n {props.job.status !== BatchJobStatus.InProgress && <h1 className='h4'>{getPhrase('heading')}</h1>}\n \n {canExport && (\n <IconButton\n className='btn btn-outline-dark fw-semibold'\n svgName={cvSvgLibrary.Download}\n onClick={onClickExport}\n >\n {getPhrase('export')}\n </IconButton>\n )}\n </div>\n \n {getContent()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"B8miR\",\"logoWrapper\":\"higtD\",\"cog\":\"bNPxa\"};","import React from 'react';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { BulkJobsAccordion, BulkJobsAccordionColumn } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { SyncJobDetails } from 'libs/shared/components/rostering/sync-job-details/SyncJobDetails';\nimport { SyncStatusBadge } from 'libs/shared/components/rostering/sync-status-badge/SyncStatusBadge';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJob, BatchJobCollection, RosteringSyncBatchJobSummary, RosteringSyncMetadata } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './sync-jobs-accordion.scss';\n\nconst namespace = 'rostering.syncJobsAccordion';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionsProps {\n jobs: BatchJobCollection;\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n onClickExport: (ids: string[]) => Promise<void>;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n onCompleted?: () => void;\n pinnedComponent?: () => JSX.Element;\n}\n\nfunction getSortOptions(): FilterOption[] {\n return [{\n id: 'newest',\n name: LanguageService.getPhrase(namespace, 'newest'),\n default: true\n },\n {\n id: 'oldest',\n name: LanguageService.getPhrase(namespace, 'oldest')\n }];\n}\n\nconst IN_PROGRESS_GROUP = [\n BatchJobStatus.InProgress,\n BatchJobStatus.Pending,\n BatchJobStatus.Queued,\n BatchJobStatus.Submitted\n];\n\nfunction renderSubmiter(job: BatchJob, props: SyncJobsAccordionsProps): JSX.Element {\n if (job.submittedByClickView) {\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer2 className='me-2 rounded-circle border' size={SvgContainerSize.Large}>\n <ClickViewAvatar />\n </SvgContainer2>\n {job.submitterName}\n </div>\n );\n }\n\n if (job.submitterName) {\n return (\n <div className='d-flex align-items-center'>\n <div className={`me-2 ${styles.avatar}`}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(job.submitterName.split(' ')[0], job.submitterName.split(' ')[1])}\n />\n </div>\n {job.submitterName}\n </div>\n );\n }\n // if job.submitterName is null it's triggered by scheduled sync\n return (\n <div className='me-2 d-flex align-items-center'>\n <div className={`${styles.cog} me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center`}>\n <SvgContainer\n svgName={cvSvgLibrary.Cog}\n className='svg-container'\n />\n </div>\n {getPhrase('scheduledSubmitter')}\n </div>\n );\n}\n\nexport function SyncJobsAccordion(props: SyncJobsAccordionsProps): JSX.Element {\n const filters = [\n Filters.SortBy(getSortOptions()),\n Filters.JobStatus()\n ];\n\n const columns: BulkJobsAccordionColumn[] = [{\n id: 'id',\n header: getPhrase('syncFrom'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => {\n const rosterSource = (job.metadata as RosteringSyncMetadata)?.source;\n // unknown roster source\n if (!rosterSource)\n return <></>;\n\n const source = HardCoded.Rostering.sources[rosterSource];\n if (!source) {\n throw new DevError('Unsupported rostering sync source, please add it to HardCoded rostering source');\n }\n\n return (\n <div className={`bg-white rounded-circle border ${styles.logoWrapper} d-flex align-items-center justify-content-center`}>\n <Tooltip spanHack title={source.name}>\n <img src={source.iconUrl} alt={source.name}/>\n </Tooltip>\n </div>\n );\n },\n width: 120\n }, {\n id: 'dateCreated',\n header: getPhrase('date'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => DateHelper.format(job.dateCreated, 'DD/MM/YYYY, hh:mmA'),\n width: 220\n }, {\n id: 'status',\n header: getPhrase('status'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => (\n <SyncStatusBadge status={job.status}/>\n ),\n width: 200\n }, {\n id: 'submitterName',\n header: getPhrase('performedBy'),\n headerClassName: 'px-2',\n renderClassName: 'px-2',\n render: job => renderSubmiter(job, props),\n width: 200\n }];\n\n function forceExpand(job: BatchJob) {\n return IN_PROGRESS_GROUP.includes(job.status);\n }\n\n function disableExpand(job: BatchJob) {\n return job.status === BatchJobStatus.Failed;\n }\n\n return (\n <BulkJobsAccordion\n {...props}\n filters={filters}\n jobDetailsComponent={job => (\n <SyncJobDetails\n job={job}\n getJobSummary={props.getJobSummary}\n onPollJob={props.onPollJob}\n onClickExport={props.onClickExport}\n onCompleted={props.onCompleted}\n />\n )}\n columns={columns}\n forceExpand={forceExpand}\n disableExpand={disableExpand}\n />\n );\n}\n","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.districtRosterEmptyState';\n\nexport function DistrictRosteringEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.DISTRICT_ROSTERING} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-2'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n <EmptyState.Info className='w-50 mb-1 fw-semibold'><Text namespace={namespace} phrase='strongInfo' /></EmptyState.Info>\n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('emptyCta')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n </EmptyState>\n );\n}","\nimport React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.noResults';\n\nexport function NoResultsEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.EMPTY_RESULTS} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-1'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.noSyncJobs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\ninterface NoSyncJobsEmptyStateProps {\n onStartFullSync: () => void;\n}\n\nexport function NoSyncJobsEmptyState(props: NoSyncJobsEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.NO_SYNC_JOBS} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-3'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('learnMore')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n <EmptyState.Cta\n className='btn btn-dark'\n onClick={props.onStartFullSync}\n text={getPhrase('emptyCta')}\n />\n </EmptyState>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { PartialSyncJobsList } from 'libs/shared/components/rostering/partial-loading/PartialSyncJobsList';\nimport { RosteringSettingHeader } from 'libs/shared/components/rostering/rostering-header/RosteringSettingHeader';\nimport { ScheduledSyncJobItem } from 'libs/shared/components/rostering/scheduled-sync-job-item/ScheduledSyncJobItem';\nimport { SyncActionButtonGroup } from 'libs/shared/components/rostering/sync-action-button-group/SyncActionButtonGroup';\nimport { SyncJobsAccordion } from 'libs/shared/components/rostering/sync-jobs-accordion/SyncJobsAccordion';\nimport { RosteringHelper } from 'libs/shared/components/rostering/utils/RosteringHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJobCollection, BatchJobProgress, Config, CurrentUser, RosteringResponse, RosteringSyncBatchJobSummary, ScheduleSettingResponse } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\nimport { LayoutHelper } from 'shared/utils/LayoutHelper';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { DistrictRosteringEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/district-rostering-empty-state/DistrictRosteringEmptyState';\nimport { NoResultsEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/no-results-empty-state/NoResultsEmptyState';\nimport { NoSyncJobsEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/no-sync-jobs-empty-state/NoSyncJobsEmptyState';\nimport { RequiresSetUpEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/requires-set-up-empty-state/RequiresSetUpEmptyState';\nimport { useSyncRostering } from 'apps/settings/views/rostering/utils/useSyncRostering';\n\nconst namespace = 'rostering.syncList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringSyncListViewProps {\n queryParams: BulkJobsQueryParams;\n}\n\nexport function RosteringSyncListView(props: RosteringSyncListViewProps): JSX.Element {\n const syncJobs = Flight.useBasicFetch<BatchJobCollection>(RosteringRequests.getSyncList(props.queryParams));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const settings = Flight.useBasicFetch<ScheduleSettingResponse>(currentUser.data && rostering.data &&\n RosteringRequests.getSyncScheduleSettings(rostering.data.id));\n\n const dataLoaded = syncJobs.hasCompleted && config.hasCompleted && settings.hasCompleted && rostering.hasCompleted;\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const dispatch = useDispatch();\n\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n function getJobSummary(id: string): Promise<RosteringSyncBatchJobSummary> {\n return fetchAsync(RosteringRequests.getJobSummary(id));\n }\n\n function onPollJob(id: string) {\n return function(onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) {\n return fetchAsync(JobRequests.getJobProgress(id, onSuccess, onError));\n };\n }\n\n function onCompleted() {\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: ['rostering:sync'],\n request: null\n });\n }\n\n React.useEffect(() => {\n return () => {\n LayoutHelper.unlockContentWidth();\n };\n }, []);\n\n function onClickExport(jobIds: string[]): Promise<void> {\n return fetchAsync<void>(JobRequests.sendJobReports(jobIds));\n }\n\n function getContent() {\n // controlled by district\n if (rostering.data?.status === 'Managed')\n return <DistrictRosteringEmptyState/>;\n\n // has not set up rostering\n if (rostering.data?.status === 'None')\n return <RequiresSetUpEmptyState/>;\n\n if (!dataLoaded)\n return <PartialSyncJobsList />;\n\n if (!syncJobs.data.data.length && !props.queryParams)\n return <NoSyncJobsEmptyState onStartFullSync={syncNow}/>;\n\n const nextScheduled = RosteringHelper.getScheduledJobBySetting(settings.data);\n\n return (\n <>\n <SyncJobsAccordion\n jobs={syncJobs.data}\n queryParams={props.queryParams}\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.ROSTERING\n }}\n onClickExport={onClickExport}\n getJobSummary={getJobSummary}\n imageCdnUrl={config.data.imageCdnUrl}\n onPollJob={onPollJob}\n onCompleted={onCompleted}\n pinnedComponent={\n nextScheduled\n ? () => <ScheduledSyncJobItem scheduledDate={nextScheduled} />\n : null\n }\n />\n {!syncJobs.data.data.length && props.queryParams && <NoResultsEmptyState />}\n </>\n );\n }\n\n const showTabAndButton = dataLoaded && rostering.data?.status === 'Active';\n\n const { syncNow, fullSync } = useSyncRostering(currentUser.data);\n\n function renderButton() {\n if (!showTabAndButton)\n return <></>;\n return <SyncActionButtonGroup onSyncNow={syncNow} onFullSync={fullSync}/>;\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n headingButton={renderButton}\n requiredPermissions={PermissionName.Rostering}\n >\n {showTabAndButton && (\n <RosteringSettingHeader\n active='syncJobs'\n appLinks={{\n syncJobs: { application: AppChannels.SETTINGS, action: Actions.Settings.ROSTERING },\n settings: { application: AppChannels.SETTINGS, action: Actions.Settings.ROSTERING_SETTINGS }\n }}\n />\n )}\n {getContent()}\n </SettingsLayout>\n );\n}","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","PartialSearchFilters","count","className","Array","fill","map","item","index","key","buildCursor","appLink","cursorParam","prevHack","currentParams","params","previous","application","action","args","cursor","Pagination","cursors","buttonVariant","scrollTop","onClick","onClickButton","page","location","entity","actionType","value","style","display","phrase","next","variant","defaultProps","WidgetButtonDirection","WidgetButton","props","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","size","S","namespace","WizardInProgress","percentage","Math","floor","totalItemsComplete","totalItems","Text","options","actionName","actionVerb","progressVerbPhrase","objectType","MasterType","userType","UserGroup","totalComplete","total","smartCount","ProgressBar","now","WizardSubmitted","POLLING_INTERVAL","MAX_CONSECUTIVE_ERROR_COUNT","WizardPolling","progress","setProgress","consecutiveErrorCount","setConsecutiveErrorCount","timeoutIdRef","navLock","useNavLock","dispatch","pollJob","onPollSuccess","onPollError","currentProgress","status","BatchJobStatus","window","setTimeout","navLockId","unlock","jobId","type","keys","request","statusCompleteAppLink","onStatusCompleted","onCompleteJob","current","xhr","clearTimeout","currentVal","processedItems","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","useBulkCheckboxManager","collection","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","from","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","getMap","usePrevious","ref","PartialRow","PartialHeader","PartialSyncJobsTable","PartialSyncJobsList","getPhrase","LanguageService","SyncStatusBadge","baseClass","getClassName","getName","ScheduledSyncJobItem","DateHelper","scheduledDate","BulkJobAccordionHelper","getCellStyle","width","flex","BulkJobsAccordionItem","forceExpand","job","isExpanded","setIsExpanded","isDisabled","disableExpand","s","e","stopPropagation","Checkbox","checked","onChange","onToggleCheckbox","columns","render","renderClassName","jobDetailsComponent","BulkJobsFilters","SearchFilters","queryParams","mainFilters","filters","analyticsOptions","hideHeading","hideDivider","constantIndices","BulkJobsAccordion","showExportSpinner","setShowExportSpinner","CheckboxHelper","jobs","data","alerts","indeterminate","SpinnerButton","selectedIds","onClickExport","then","success","error","disabled","showSpinner","header","headerClassName","pinnedComponent","imageCdnUrl","onPollJob","pagination","ContextService","SyncJobPolling","onCompleted","Spinner","as","animation","SyncJobSummary","summary","setSummary","isFetchingSummary","setIsFetchingSummary","getCategoryList","name","bgColor","icon","displayedSummaryKeys","Object","filter","k","getJobSummary","result","SyncJobDetails","canExport","IconButton","getContent","IN_PROGRESS_GROUP","SyncJobsAccordion","default","rosterSource","metadata","source","HardCoded","DevError","Tooltip","spanHack","title","src","iconUrl","alt","dateCreated","submittedByClickView","SvgContainer2","ClickViewAvatar","submitterName","Avatar","initials","UserHelper","split","renderSubmiter","includes","DistrictRosteringEmptyState","EmptyState","ImageUrls","NoResultsEmptyState","NoSyncJobsEmptyState","onStartFullSync","text","RosteringSyncListView","syncJobs","RosteringRequests","config","ConfigRequests","currentUser","UserRequests","rostering","settings","dataLoaded","hasCompleted","fetchAsync","onSuccess","onError","JobRequests","jobIds","useSetPageMetadata","LayoutHelper","showTabAndButton","useSyncRostering","syncNow","fullSync","SettingsLayout","heading","breadcrumbs","headingButton","SyncActionButtonGroup","onSyncNow","onFullSync","requiredPermissions","PermissionName","RosteringSettingHeader","active","appLinks","RequiresSetUpEmptyState","nextScheduled","RosteringHelper","ROUND_PRECISION","getPercentage","min","max","round","renderProgressBar","label","visuallyHidden","striped","animated","bsPrefix","children","isChild","rest","wrapperProps","child","cloneElement","displayName"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5710],{93659:(e,t,n)=>{n.d(t,{J:()=>B});var r=n(32735),a=n(75896),i=n(1048),o=n(34509),l=n(11607),c=n(83345),s="search.filterActions";function u(e){return r.createElement("div",{className:"d-flex justify-content-between ".concat(e.className)},e.active?r.createElement(l.L,{className:"text-secondary hover-text-underline cursor-pointer",onClick:e.onClickReset},r.createElement(c.x,{namespace:s,phrase:"reset"})):r.createElement("div",{className:"invisible"}),r.createElement(l.L,{className:"info-link",onClick:e.onClickApply},r.createElement(c.x,{namespace:s,phrase:"apply"})))}u.defaultProps={active:!1,className:""};var f=n(96675),d=n(97514),m=n(83914);const p={hideCaret:"KDq7l",filterMenu:"E9o_Q",twoColumnsWidth:"C70vU",nestedCheckboxesWidth:"kUHcg",switchWidth:"bi1FH",moreFiltersWidth:"rbr22",svgContainer:"UwDMA"};function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function b(e){var t=r.useContext(f.f).state,n=t[e.filter.id],a="dropdown"===e.filter.type,i=v(r.useState(e.filter.name),2),l=i[0],c=i[1],s=v(r.useState(!1),2),g=s[0],b=s[1],h=v(r.useState(n),2),E=h[0],C=h[1];function w(e){C(e),a&&S(e)}function S(){var r,a,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:E;d.qr.applyFilter([e.filter],n,(r={},a=e.filter.id,i=o,(a=function(e){var t=function(e,t){if("object"!=y(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i,r),t.appLink)}r.useEffect((function(){c(d.qr.getLabel(e.filter,n)),C(n)}),[e.filter,null==n?void 0:n.selection]);var k,x=r.useMemo((function(){return e.filter.customComponent?e.filter.customComponent:d.qr.mapTypeToComponent(e.filter.type)}),[e.filter.type]),A=e.hideCaret&&!a?p.hideCaret:"",j=(k=e.filter,d.qr.displayTwoColumns(k)?p.twoColumnsWidth:"classification"===k.id?p.classificationWidth:d.qr.displayTwoLayers(k)?p.nestedCheckboxesWidth:"switch"===k.type?p.switchWidth:"");return"button"===e.filter.type?r.createElement(x,{filter:e.filter,draftState:E,setDraftState:w}):r.createElement(o.Z,{onToggle:function(e){b(e),e||a||S()},show:g},r.createElement(o.Z.Toggle,{id:"filterButton-".concat(e.filter.id),className:"".concat("fw-semibold mx-1 btn d-flex align-items-center"," ").concat(A),variant:n.active&&!a?"dark":"outline-dark",disabled:e.filter.disabled},!!e.filter.icon&&r.createElement("div",{className:p.svgContainer},r.createElement(m.x,{svgName:e.filter.icon})),e.filter.labelPrefix," ",l),r.createElement(o.Z.Menu,null,r.createElement("div",{className:"mx-1 ".concat(p.filterMenu," ").concat(j," ").concat(a?"":"px-2 py-1")},r.createElement(x,{filter:e.filter,draftState:E,setDraftState:w}),!a&&!e.filter.disabled&&r.createElement(u,{active:E.active,onClickReset:function(){var t,n=null===(t=e.filter.options)||void 0===t?void 0:t.find((function(e){return e.default}));C({active:!1,selection:n?[n]:[]})},onClickApply:function(){S(),b(!1)}}))))}b.defaultProps={hideCaret:!0};var h=n(91967);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}var C={getSetStateByKey:function(e,t,n){return function(r){return e((function(e){var a,i,o,l=h.q.isFunction(n)?n:h.q.useIdentity();return Object.assign(Object.assign({},e),(a={},i=t,o=l(r,e),(i=function(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=E(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(t)?t:t+""}(i))in a?Object.defineProperty(a,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):a[i]=o,a))}))}}};function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return S(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?S(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function k(e){return Object.keys(e).reduce((function(t,n){return e[n].active?t+1:t}),0)}function x(e){var t=r.useContext(f.f).state,n=t.moreFilters,a=w(r.useState(e.filter.name),2),i=a[0],l=a[1],c=w(r.useState(!1),2),s=c[0],m=c[1],y=w(r.useState(n),2),v=y[0],g=y[1],b=w(r.useState(k(n)),2),h=b[0],E=b[1],S=Object.keys(n).map((function(e){return"".concat(e,":").concat(n[e].active)})).join("-");function x(){d.qr.applyFilter(e.filter.filters,n,v,t.appLink)}r.useEffect((function(){g(n),E(k(n))}),[e.filter,S]),r.useEffect((function(){l(h?"".concat(e.filter.name," - ").concat(h):e.filter.name)}),[h]);var A="fw-semibold ".concat(p.hideCaret," mx-1 btn");return r.createElement(o.Z,{onToggle:function(e){m(e),e||x()},show:s},r.createElement(o.Z.Toggle,{id:e.filter.id,className:A,variant:h?"dark":"outline-dark"},i),r.createElement(o.Z.Menu,{onClick:function(e){return e.stopPropagation()}},r.createElement("div",{className:"mx-1 ".concat(p.moreFiltersWidth," ").concat("dropdown"!==e.filter.type?"px-2 py-1":"")},e.filter.filters.map((function(e){var t=e.customComponent?e.customComponent:d.qr.mapTypeToComponent(e.type);return r.createElement("fieldset",{key:e.id},r.createElement(t,{filter:e,draftState:v[e.id],setDraftState:C.getSetStateByKey(g,e.id),isOnMoreFilters:!0}))})),r.createElement(u,{active:!!Object.keys(v).find((function(e){return v[e].active})),onClickReset:function(){var t=Object.keys(n).reduce((function(t,n){var r,a=null===(r=e.filter.filters.find((function(e){return e.id===n})).options)||void 0===r?void 0:r.find((function(e){return e.default}));return t[n]={active:!1,selection:a?[a]:[]},t}),{});g(t)},onClickApply:function(){x(),m(!1)}}))))}var A=n(63112),j=n(16450),F=n(16035);function N(e){var t=e.selectedItems.find((function(t){return t.id===e.data.id}))?"bg-gray-900 text-white":"bg-light";return r.createElement(F.z,{tag:e.data,appLink:e.appLink,tagClass:"no-decoration ".concat(t," lh-1"),onClick:function(){return e.onClick(e.data)}})}const O={tagItem:"j84HW"};function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function L(e){return function(e){if(Array.isArray(e))return I(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return I(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?I(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function q(e){var t,n,a,i,o=r.useContext(f.f).state;if(!(null===(t=e.filter)||void 0===t?void 0:t.id))return r.createElement(r.Fragment,null);var l=o[e.filter.id],c=l.selection,s=null!==(i=null===(a=null===(n=e.filter)||void 0===n?void 0:n.options)||void 0===a?void 0:a.filter((function(e){return!(null==c?void 0:c.find((function(t){return t.id===e.id})))})))&&void 0!==i?i:[];function u(t){var n,r,a,i=null,s=-1;if(c.find((function(e,n){s>-1||e.id.toString()===t.id.toString()&&(s=n)})),s>=0){var u=[].concat(L(c.slice(0,s)),L(c.slice(s+1)));i={active:!!u.length,selection:u}}else i={active:!0,selection:c.concat(t)};d.qr.applyFilter([e.filter],l,(n={},r=e.filter.id,a=i,(r=function(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=T(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==T(t)?t:t+""}(r))in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,n),o.appLink)}var m,p=[].concat(L(c),L(e.isFetching?[]:s));return r.createElement("div",{className:e.isFetching||p.length?"py-2":""},r.createElement("div",{className:(m="mb-3",p.length&&e.isFetching?m+=" mt-n1":p.length||e.isFetching||(m+=" d-none"),m)},(!!p.length||e.isFetching)&&r.createElement(j.e,{collection:p,childComponent:function(e){return r.createElement(N,Object.assign({},e,{selectedItems:c,onClick:u}))},staticChildren:e.isFetching?new Array(3).fill({component:function(){return r.createElement(A.o,{tagClass:O.tagItem})},position:"end"}):[],partialLoadingComponent:function(){return r.createElement("div",{className:"me-2"},r.createElement(A.o,{tagClass:"".concat(O.tagItem)}))}})))}var P=n(81886);function D(e){var t=r.useContext(f.f).state;return r.createElement(l.L,{onClick:function(){P.Q.C$.trigger(Object.assign(Object.assign({},t.appLink),{params:e.currentQueryParam?{query:e.currentQueryParam}:null}))},className:"".concat(e.alignLeft?"order-first":""," hover-text-underline cursor-pointer d-flex align-items-center mx-2")},r.createElement(c.x,{namespace:"search.resetButton",phrase:"reset"}))}var M=n(95245);function Q(e){return function(e){if(Array.isArray(e))return Z(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||R(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(e,t){if(e){if("string"==typeof e)return Z(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Z(e,t):void 0}}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function B(e){var t,n,o=e.queryParams,l=e.appLink,s=e.hideHeading,u=e.isFetchingOptions,m=e.constantIndices,p=void 0===m?[]:m,y=r.useMemo((function(){return d.qr.deriveInitialStateFromQuery(o,e.mainFilters,e.moreFilters,l)}),[o,u]),v=(t=r.useReducer(f.O,y),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(t,n)||R(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=v[0],h=v[1];r.useEffect((function(){i.t.isEqual(y,g)||(h({type:"update",payload:y}),e.analyticsOptions&&d.qr.logFilterEvent(e.mainFilters,e.moreFilters,y,o.query,e.analyticsOptions))}),[y]);var E=a.m.uniq([].concat(Q(d.qr.getAppliedIndices(o)),Q(p))),C=d.qr.mixinDisabledFields(g,E,e.mainFilters,e.moreFilters),w=C.mainFilters,S=C.moreFilters,k=w.filter((function(e){return"tag"!==e.type})),A=w.find((function(e){return"tag"===e.type}));return r.createElement(f.f.Provider,{value:{state:g,dispatch:h}},r.createElement(c.D.Provider,{value:"search.searchFilters"},r.createElement("section",null,r.createElement("div",{className:"d-flex ".concat(e.hideDivider?"":"border-bottom pb-3 mb-3")},!s&&r.createElement("h2",{className:"h5 mb-0 d-inline-block pe-2 border-end d-flex align-items-center"},r.createElement(c.x,{phrase:"heading"})),r.createElement("div",{className:"d-flex flex-wrap ".concat(M.Z.filtersContainer," ").concat(s?"":"ms-2")},k.map((function(t){return r.createElement(b,{key:t.id,filter:t,hideCaret:e.hideCaret})})),S&&r.createElement(x,{filter:S}),d.qr.hasActiveFilters(o)&&!e.hideResetButton&&r.createElement(D,{mainFilters:e.mainFilters,moreFilters:e.moreFilters,currentQueryParam:o.query,analyticsOptions:e.analyticsOptions,alignLeft:e.alignResetButtonLeft}))),r.createElement(q,{filter:A,queryParams:o,isFetching:e.isFetchingOptions}))))}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(32735),a=n(91807),i=r.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(a.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},16035:(e,t,n)=>{n.d(t,{z:()=>s});var r=n(32735),a=n(23481),i=n(36848),o=n(44829),l=n(91807),c=a.T.encloseNamespace("shared.tags");function s(e){var t,n,a=e.tag,s=e.appLink,u=e.onClick,f=e.disabled,d=e.tagClass,m=void 0===d?"tag":d,p=a.name.toLowerCase(),y=null===(t=a.tagType)||void 0===t?void 0:t.toLowerCase(),v=y===o.Q.Normal&&e.themeColours&&!!(null===(n=e.themeColours)||void 0===n?void 0:n.secondary),g="rounded-pill py-1 px-2 my-1 me-1 ".concat(m," ").concat(function(e,t){switch(e){case o.Q.Pedagogy:case o.Q.Skill:return"pedagogy-tag text-white";case o.Q.Hidden:return"hidden-tag fw-normal";case o.Q.Normal:return t?"":"bg-gray-100 fw-normal";default:return""}}(y,v));v&&(g+=" text-white"),!s&&!u||f||(g+=" cursor-pointer"),f&&(g+=" "+l.Z.disabled),e.onRemove&&(g+=" "+l.Z.badge),s||(g+=" d-inline-block");var b=v?{backgroundColor:e.themeColours.secondary}:{};return s?r.createElement(i.F,{onClick:u,appLink:s,className:g,title:p,style:b},r.createElement("span",{className:"text-truncate text-nowrap"},p)):r.createElement("button",{onClick:u,className:g,title:p,style:b,"aria-label":"".concat(c("ariaFilter")," ").concat(p)},r.createElement("span",{className:"text-truncate text-nowrap"},p,e.onRemove&&r.createElement("button",{onClick:e.onRemove,className:"".concat(l.Z.close," btn-close font-size-normal"),role:"button","aria-label":"Close"})))}},88513:(e,t,n)=>{n.d(t,{B:()=>u});var r=n(32735),a=n(23481),i=n(65858),o=n(36848);const l={seeMore:"yv0FS"};var c=a.T.encloseNamespace("shared.widgetHeader");function s(e){return r.createElement("div",{className:"ms-3 ".concat(l.seeMore)},r.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:i._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},r.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},c("seeMore"))))}function u(e){var t=!!e.description;return e.name||e.description?r.createElement("div",{className:"curated-widget-header"},r.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&r.createElement("div",{className:l.title},r.createElement(o.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},r.createElement("h2",{className:"h4 curated-widget-heading"},e.name))),!!e.appLink&&!t&&!!e.showSeeMoreLink&&r.createElement(s,Object.assign({},e))),t&&r.createElement("div",{className:"d-flex justify-content-between align-items-end"},r.createElement("p",{className:"description curated-widget-description ".concat(l.description)},r.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&r.createElement(s,Object.assign({},e)))):r.createElement(r.Fragment,null)}},43872:(e,t,n)=>{n.d(t,{V:()=>u});var r=n(32735),a=n(82182),i=n(31069),o=n(91967),l=new Image;l.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var c=function(e){e.dataTransfer.setDragImage&&o.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(l,0,0)},s=a.V.isTouchScreen(),u=r.forwardRef((function(e,t){var n,a,o,l,u=e.children,f=e.positionType,d=e.onDrag,m=e.onDragEnd,p=e.onTouchMove,y=e.onTouchEnd,v=e.percentageDragged,g=e.position,b=void 0===g?0:g;return r.createElement("div",Object.assign({className:"d-flex flex-nowrap position-relative w-100",style:(a=b,o=f,l=v,o===i.C.Percentage&&l&&(a-=l),{transform:"translate3d(".concat(a).concat(o,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(n={},d&&m&&(n.draggable=!0,n.onDragEnd=m,n.onDragStart=c,n.onDragOver=d),p&&y&&s&&(n.onTouchMoveCapture=p,n.onTouchEndCapture=y),n)),u)}))},31069:(e,t,n)=>{var r;n.d(t,{C:()=>r}),function(e){e.Percentage="%",e.Pixels="px"}(r||(r={}))},44829:(e,t,n)=>{var r,a;n.d(t,{Q:()=>r}),function(e){e.Normal="normal",e.Pedagogy="pedagogy",e.Hidden="hidden",e.Skill="skill",e.Curation="curation"}(r||(r={})),function(e){e[e.Normal=0]="Normal",e[e.Pedagogy=1]="Pedagogy",e[e.Hidden=2]="Hidden",e[e.Skill=3]="Skill",e[e.Curation=4]="Curation"}(a||(a={}))},10841:(e,t,n)=>{var r;n.d(t,{n:()=>r}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(r||(r={}))},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),a=n(81886),i=n(67058),o=n(14553),l=n(49267),c=n(49075),s={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:l.a,privacy:o.q},badRequest:c._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},s),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new o.badRequest):n.forbidden||a.Q.Ry.throw(new o.forbidden.privacy):n.notFound||a.Q.Ry.throw(new o.notFound))}}},95245:(e,t,n)=>{n.d(t,{Z:()=>r});const r={partialFilterHeading:"O8f8H",partialButton:"ThKam",filtersContainer:"JIp3h"}},91807:(e,t,n)=>{n.d(t,{Z:()=>r});const r={tagList:"Zw6d9",disabled:"jlL1c",partialTag:"too_N",badge:"OjtN8",close:"X9joI"}}}]);
2
- //# sourceMappingURL=5710-c2804ffafe-lite.chunk.js.map
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6450],{16450:(t,e,n)=>{n.d(e,{e:()=>C,Q:()=>R});var i=n(32735),a=n(91967),r=n(82182),o=n(75896),l=n(1048),s=n(49985),c=n(88513),u=n(43872),d=n(16930),f=n(31069),m=n(10841),g=n(81514),h=n(65294),p=n(10038),v=n(5859),y=n(49542),b=function(t,e,n){return function(){t.container.current&&(t.container.current.style.transition=""),e({type:m.n.Resize,payload:{elementRefs:t,mediaQuery:n}})}},E=function(t){return function(){t.current&&(t.current.style.transition="transform .4s ease-in-out")}},P=function(t,e,n,i,a){return function(r){var o=r.clientX,l=i;l||(l=Object.assign(Object.assign({},e),{initialMouseX:o}),a(l),t.current.style.transition=""),n({type:m.n.Drag,payload:{widgetSnapshot:l,currentMouseX:o}})}},O=function(t,e){return function(){t.current.style.transition="transform .4s ease-in-out",e(null)}},S=n(14244);const N={itemSpacing:"fDc_6",mobileScroll:"aLSzv",leftGradient:"YheD1",leftGradientNoPadding:"Vl2_g",leftButton:"ISepF",leftButtonNoPadding:"N4rAS",rightGradient:"i9XEE",rightGradientNoPadding:"APhNv",rightButton:"OxM84",rightButtonNoPadding:"nmSQo"};function j(t){return function(t){if(Array.isArray(t))return A(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||B(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function L(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,a,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;s=!1}else for(;!(s=(i=r.call(n)).done)&&(l.push(i.value),l.length!==e);s=!0);}catch(t){c=!0,a=t}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,e)||B(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function B(t,e){if(t){if("string"==typeof t)return A(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(t,e):void 0}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function C(t){var e=t.childComponent,n=t.staticChildren,v=t.getWidgetItemAnalyticsData,B=void 0===v?function(){}:v,A=L(i.useReducer(S.E,S.C),2),C=A[0],x=A[1],w=L(i.useState(null),2),k=w[0],D=w[1],I={container:i.useRef(null),firstElement:i.useRef(null),lastElement:i.useRef(null)},M=(0,g.V)(),G=r.V.isTabletOrMobile();(0,p.H)(b(I,x,M),E(I.container),[M]);var W=(0,h.Y)({prevent:!t.lazyLoad}),X=W.ref,Q=W.inView,_=t.collection;if(!t.collection&&a.q.isFunction(t.fetch)){var T=t.fetch(Q);_=T.data}i.useEffect((function(){_&&!l.t.isEmpty(_)&&x({type:m.n.Init,payload:{elementRefs:I,mediaQuery:M}})}),[_]);var V=i.useMemo((function(){var a,r;if(_){var l=null!==(a=null==n?void 0:n.filter((function(t){return"start"===t.position})))&&void 0!==a?a:[],s=null!==(r=null==n?void 0:n.filter((function(t){return"end"===t.position})))&&void 0!==r?r:[],c=_.map((function(n,a){var r;n===o.m.first(_)&&(null==l?void 0:l.length)&&(r=I.firstElement),n!==o.m.last(_)||(null==s?void 0:s.length)||(r=I.lastElement);var c=a+1===_.length;return i.createElement("div",{key:n.id,ref:r,className:"".concat(N.itemSpacing," ").concat(t.childClassName||""," ").concat(c&&G?"pe-4":"")},i.createElement(e,{getChildAppLink:t.getChildAppLink,data:n,getSubtitle:t.getSubtitle,analyticsData:Object.assign(Object.assign({itemIndex:a},t.analyticsData),B(n)),analyticsOptions:Object.assign(Object.assign({},null==t?void 0:t.analyticsOptions),y.d.getSliderItemAnalyticsOptions())}))}));return l.length&&(c=[].concat(j(l.map((function(e,n){var a=e.component;return i.createElement("div",{key:"first-widget-component:".concat(n),ref:0===n?I.firstElement:null,className:"".concat(N.itemSpacing," ").concat(t.childClassName||"")},i.createElement(a,null))}))),j(c))),s.length&&(c=[].concat(j(c),j(s.map((function(e,n){var a=e.component;return i.createElement("div",{key:"end-widget-component:".concat(n),ref:n===s.length-1?I.lastElement:null,className:"".concat(N.itemSpacing," ").concat(t.childClassName||"")},i.createElement(a,null))}))))),i.createElement(i.Fragment,null,c)}}),[_].concat(j(t.widgetDataDeps||[])));if(_&&!_.length&&!(null==n?void 0:n.length))return i.createElement(i.Fragment,null);if(!_||l.t.isEmpty(_))return i.createElement("div",{ref:X},i.createElement(R,{partialLoadingComponent:t.partialLoadingComponent,partialLoadingOptions:t.partialLoadingOptions}));var z=function(e){return Object.assign(Object.assign({},t.analyticsData),{name:t.heading,direction:e===m.n.Next?"right":"left"})},F=G||t.hideButtons;return i.createElement("div",{className:"".concat(t.noNegativePadding?"":"mx-n4")},i.createElement("div",{className:"px-4"},i.createElement(c.B,{name:t.heading,description:t.description,appLink:t.headingAppLink})),i.createElement("div",{className:"position-relative"},i.createElement("div",{className:"".concat(t.noNegativePadding?"":"px-4"," py-3 my-n3 position-relative ").concat(G?N.mobileScroll:"overflow-hidden-x")},i.createElement("div",{className:"position-relative ".concat(t.hideButtons?"overflow-hidden-x":"")},!F&&i.createElement(d.W,{direction:d.f.Left,onClick:function(){x({type:m.n.Previous}),s.k.logUserAction(z(m.n.Previous),y.d.getSliderAnalyticsOptions())},leftButtonClassName:"".concat(N.leftButton," ").concat(t.noNegativePadding?N.leftButtonNoPadding:""),leftGradientClassName:"".concat(N.leftGradient," ").concat(t.noNegativePadding?N.leftGradientNoPadding:""),hide:C.hideLeftButton,useGradientBackdrop:!0}),i.createElement(u.V,{position:C.offset,positionType:f.C.Pixels,onDrag:P(I.container,C,x,k,D),onDragEnd:O(I.container,D),ref:I.container},V),!F&&i.createElement(d.W,{direction:d.f.Right,onClick:function(){x({type:m.n.Next}),s.k.logUserAction(z(m.n.Next),y.d.getSliderAnalyticsOptions())},hide:C.hideRightButton,rightButtonClassName:"".concat(N.rightButton," ").concat(t.noNegativePadding?N.rightButtonNoPadding:""),rightGradientClassName:"".concat(N.rightGradient," ").concat(t.noNegativePadding?N.rightGradientNoPadding:""),useGradientBackdrop:!0})))))}C.defaultProps={heading:"",description:""};var R=function(t){var e=t.partialLoadingComponent,n=t.partialLoadingOptions;return i.createElement("div",{className:"d-flex flex-nowrap overflow-hidden"},v.u.getPartialLoadingItems(n).map((function(t,n){return i.createElement(e,{key:n})})))}},14244:(t,e,n)=>{n.d(e,{C:()=>o,E:()=>f});var i=n(86764),a=n(10841);function r(t){return t===i.r.XS?200:t===i.r.SM||t===i.r.MD?350:500}var o={offset:0,containerLeftPosition:null,containerRightPosition:null,firstElementPosition:null,lastElementPosition:null,hideLeftButton:!0,hideRightButton:!0,maxSlideDistance:0,leftOffsetLimit:null},l=function(t){var e=t.elementRefs,n=e.container,i=e.lastElement;if(!(null==n?void 0:n.current)||!(null==i?void 0:i.current))return o;var a=n.current.getBoundingClientRect(),l=a.left,s=a.right,c=l,u=i.current.getBoundingClientRect().right,d=s-u;return Object.assign(Object.assign({},o),{containerLeftPosition:l,containerRightPosition:s,firstElementPosition:c,lastElementPosition:u,hideRightButton:u<s,leftOffsetLimit:d,maxSlideDistance:r(t.mediaQuery)})},s=function(t){var e=l(Object.assign(Object.assign({},t),t.elementRefs));return Object.assign(Object.assign({},e),{maxSlideDistance:r(t.mediaQuery)})},c=function(t){var e=t.firstElementPosition,n=t.lastElementPosition,i=t.maxSlideDistance,a=t.offset,r=t.containerRightPosition,o=n-r>=i?i:n-r;return{firstElementPosition:e-o,lastElementPosition:n-o,offset:a-o,hideRightButton:n-o===r,hideLeftButton:!1}},u=function(t){var e=t.containerLeftPosition,n=t.firstElementPosition,i=t.lastElementPosition,a=t.maxSlideDistance,r=t.offset,o=n+a<=e,l=o?a:Math.abs(r);return{firstElementPosition:n+l,lastElementPosition:i+l,offset:r+l,hideLeftButton:!o||n+l===e,hideRightButton:!1}},d=function(t,e){var n=e.widgetSnapshot,i=e.currentMouseX;if(n.hideLeftButton&&n.hideRightButton)return{};var a=n.initialMouseX-i,r=n.offset-a,o=n.firstElementPosition-a,l=n.lastElementPosition-a,s=!1,c=!1;return o>t.containerLeftPosition&&(r=0,o=t.containerLeftPosition,l=t.lastElementPosition,s=!0),l<=t.containerRightPosition&&(r=t.leftOffsetLimit,o=t.containerLeftPosition-Math.abs(t.leftOffsetLimit),l=n.containerRightPosition,c=!0),{offset:r,firstElementPosition:o,lastElementPosition:l,hideLeftButton:s,hideRightButton:c}};function f(t,e){switch(e.type){case a.n.Init:return Object.assign(Object.assign({},t),l(e.payload));case a.n.Resize:return Object.assign(Object.assign({},t),s(e.payload));case a.n.Next:return Object.assign(Object.assign({},t),c(t));case a.n.Previous:return Object.assign(Object.assign({},t),u(t));case a.n.Drag:return Object.assign(Object.assign({},t),d(t,e.payload));default:return t}}},5859:(t,e,n)=>{function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}n.d(e,{u:()=>r});var a={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},a),e);return(t=Array(n.numItems),function(t){if(Array.isArray(t))return i(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return i(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}}}]);
2
- //# sourceMappingURL=6450-2745feb746-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6450-2745feb746-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetEventHandlers.ts","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/dynamic-widget.scss","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetReducer.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts"],"sourcesContent":["import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nimport { DynamicWidgetState } from './DynamicWidgetReducer';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\n/**\n * Resize events\n */\nexport const getResizeHandler = (\n elementRefs: SlidingListRefs,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n mediaQuery: MediaQueryStrings\n) => () => {\n if (elementRefs.container.current)\n elementRefs.container.current.style.transition = '';\n\n dispatch({\n type: WidgetInteraction.Resize,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n};\n\nexport const getResizeEndHandler = (containerRef: React.MutableRefObject<HTMLDivElement>) => () => {\n if (containerRef.current)\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n};\n\nexport const getDragHandler = (\n containerRef: React.MutableRefObject<HTMLDivElement>,\n widgetState: DynamicWidgetState,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n widgetSnapshot: WidgetSnapshot,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => (event: React.DragEvent<HTMLDivElement>): void => {\n const mouseX = event.clientX;\n\n let snapshot = widgetSnapshot;\n\n if (!snapshot) {\n snapshot = { ...widgetState, initialMouseX: mouseX };\n setWidgetSnapshot(snapshot);\n containerRef.current.style.transition = '';\n }\n\n dispatch({\n type: WidgetInteraction.Drag,\n payload: {\n widgetSnapshot: snapshot,\n currentMouseX: mouseX\n }\n });\n};\n\nexport const getDragEndHandler = (\n containerRef: React.MutableRefObject<HTMLDivElement>,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => () => {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setWidgetSnapshot(null);\n};","// extracted by mini-css-extract-plugin\nexport default {\"itemSpacing\":\"fDc_6\",\"mobileScroll\":\"aLSzv\",\"leftGradient\":\"YheD1\",\"leftGradientNoPadding\":\"Vl2_g\",\"leftButton\":\"ISepF\",\"leftButtonNoPadding\":\"N4rAS\",\"rightGradient\":\"i9XEE\",\"rightGradientNoPadding\":\"APhNv\",\"rightButton\":\"OxM84\",\"rightButtonNoPadding\":\"nmSQo\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { useGetMediaQueryString } from 'libs/shared/hooks/UseGetMediaQueryString';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\nimport { PartialLoadingHelper, PartialLoadingOptions } from 'libs/shared/utils/PartialLoadingHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { getDragEndHandler, getDragHandler, getResizeEndHandler, getResizeHandler } from './DynamicWidgetEventHandlers';\nimport { DynamicWidgetReducer, DynamicWidgetState, initialSliderState } from './DynamicWidgetReducer';\n\nimport styles from './dynamic-widget.scss';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\ninterface StaticChild {\n position: 'start' | 'end';\n component: React.ElementType;\n}\n\ninterface DynamicWidgetProps {\n childComponent: React.ElementType;\n partialLoadingComponent: React.ElementType;\n partialLoadingOptions?: PartialLoadingOptions;\n\n widgetDataDeps?: (any)[];\n getChildAppLink?: (data: any) => Core.AppLink;\n\n staticChildren?: StaticChild[];\n collection?: BaseObject[];\n fetch?: (...args: any[]) => any;\n lazyLoad?: boolean;\n\n heading?: string;\n headingAppLink?: Core.AppLink;\n description?: string;\n getSubtitle?: (data: any) => string\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n hideButtons?: boolean;\n childClassName?: string;\n // set to true if the widget get cut off by the container\n noNegativePadding?: boolean;\n}\n\nDynamicWidget.defaultProps = {\n heading: '',\n description: ''\n};\n\nexport function DynamicWidget(props: DynamicWidgetProps): JSX.Element {\n const { childComponent: WidgetItemComponent, staticChildren, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ state, dispatch ] = React.useReducer(DynamicWidgetReducer, initialSliderState);\n\n // A snapshot of the widget state is captured on the very first `Drag` event as a point of reference\n const [ widgetSnapshot, setWidgetSnapshot ] = React.useState<WidgetSnapshot>(null);\n\n const elementRefs: SlidingListRefs = {\n container: React.useRef(null),\n firstElement: React.useRef(null),\n lastElement: React.useRef(null)\n };\n\n const mediaQuery = useGetMediaQueryString();\n const isTouchScreen = UserAgentHelper.isTabletOrMobile();\n\n useResizeListener(\n getResizeHandler(elementRefs, dispatch, mediaQuery),\n getResizeEndHandler(elementRefs.container),\n [mediaQuery]\n );\n\n const { ref, inView } = useLazyLoad({ prevent: !props.lazyLoad });\n\n let widgetData = props.collection;\n\n if (!props.collection && FunctionHelper.isFunction(props.fetch)) {\n const request = props.fetch(inView);\n widgetData = request.data;\n }\n\n /**\n * Once the widget data has been set, we can initialize the reducer. This is because\n * the reducer depends on the refs being set, but they don't get set until the markup has been loaded.\n */\n React.useEffect(() => {\n if (!widgetData || ObjectHelper.isEmpty(widgetData))\n return;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n }, [widgetData]);\n\n function getWidgetItems(): JSX.Element {\n if (!widgetData)\n return;\n\n const firstChildren = staticChildren?.filter(child => child.position === 'start') ?? [];\n const lastChildren = staticChildren?.filter(child => child.position === 'end') ?? [];\n\n let items = widgetData.map((widgetItem, index) => {\n let itemRef: React.MutableRefObject<HTMLDivElement>;\n\n if (widgetItem === ArrayHelper.first(widgetData) && firstChildren?.length)\n itemRef = elementRefs.firstElement;\n\n if (widgetItem === ArrayHelper.last(widgetData) && !lastChildren?.length)\n itemRef = elementRefs.lastElement;\n\n const isLast = index + 1 === widgetData.length;\n\n return (\n <div key={widgetItem.id} ref={itemRef} className={`${styles.itemSpacing} ${props.childClassName || ''} ${(isLast && isTouchScreen) ? 'pe-4' : ''}`}>\n <WidgetItemComponent\n getChildAppLink={props.getChildAppLink}\n data={widgetItem}\n getSubtitle={props.getSubtitle}\n analyticsData={{\n itemIndex: index,\n ...props.analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props?.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n />\n </div>\n );\n });\n\n if (firstChildren.length) {\n items = [\n ...firstChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <div\n key={`first-widget-component:${i}`}\n ref={i === 0 ? elementRefs.firstElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </div>\n );\n }),\n ...items\n ];\n }\n\n if (lastChildren.length) {\n items = [\n ...items,\n ...lastChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <div\n key={`end-widget-component:${i}`}\n ref={i === lastChildren.length - 1 ? elementRefs.lastElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </div>\n );\n })\n ];\n }\n\n return <>{items}</>;\n }\n const widgetItems = React.useMemo(getWidgetItems, [\n widgetData, ...props.widgetDataDeps || []\n ]);\n\n if (widgetData && !widgetData.length && !staticChildren?.length)\n return <></>;\n\n if (!widgetData || ObjectHelper.isEmpty(widgetData)) {\n return (\n <div ref={ref}>\n <PartialDynamicWidget\n partialLoadingComponent={props.partialLoadingComponent}\n partialLoadingOptions={props.partialLoadingOptions}\n />\n </div>\n );\n }\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n ...props.analyticsData,\n name: props.heading,\n direction: type === WidgetInteraction.Next ? 'right' : 'left'\n });\n\n const hideButtons = isTouchScreen || props.hideButtons;\n\n return (\n <div className={`${props.noNegativePadding ? '' : 'mx-n4'}`}>\n <div className='px-4'>\n <WidgetHeader name={props.heading} description={props.description} appLink={props.headingAppLink} />\n </div>\n\n <div className='position-relative'>\n <div className={`${props.noNegativePadding ? '' : 'px-4' } py-3 my-n3 position-relative ${isTouchScreen ? styles.mobileScroll : 'overflow-hidden-x'}`}>\n <div className={`position-relative ${props.hideButtons ? 'overflow-hidden-x' : ''}`}>\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n leftButtonClassName={`${styles.leftButton} ${props.noNegativePadding ? styles.leftButtonNoPadding : ''}`}\n leftGradientClassName={`${styles.leftGradient} ${props.noNegativePadding ? styles.leftGradientNoPadding : ''}`}\n hide={state.hideLeftButton}\n useGradientBackdrop\n />\n )}\n\n <SlidingListContainer\n position={state.offset}\n positionType={CssMeasurement.Pixels}\n onDrag={getDragHandler(elementRefs.container, state, dispatch, widgetSnapshot, setWidgetSnapshot)}\n onDragEnd={getDragEndHandler(elementRefs.container, setWidgetSnapshot)}\n ref={elementRefs.container}\n >\n {widgetItems}\n </SlidingListContainer>\n\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n hide={state.hideRightButton}\n rightButtonClassName={`${styles.rightButton} ${props.noNegativePadding ? styles.rightButtonNoPadding : ''}`}\n rightGradientClassName={`${styles.rightGradient} ${props.noNegativePadding ? styles.rightGradientNoPadding : ''}`}\n useGradientBackdrop\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype PartialDynamicWidgetProps = Pick<DynamicWidgetProps, 'partialLoadingComponent'> & {\n partialLoadingOptions?: PartialLoadingOptions;\n}\n\nexport const PartialDynamicWidget = (props: PartialDynamicWidgetProps) => {\n const { partialLoadingComponent: Component, partialLoadingOptions } = props;\n\n return (\n <div className='d-flex flex-nowrap overflow-hidden'>\n {PartialLoadingHelper.getPartialLoadingItems(partialLoadingOptions).map((item, idx) => <Component key={idx} />)}\n </div>\n );\n};","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nexport interface DynamicWidgetState {\n /**\n * X-position argument for `translate3d()` to determine where the slider is positioned.\n */\n offset: number;\n\n /**\n * Left position of the slider container.\n * Set on `Init`, and updated on `Resize`.\n * Used for calculations on `Previous`, or for dragging to the right.\n */\n containerLeftPosition: number;\n\n /**\n * Right position of the slider container.\n * Set on Init, and updated on Resize.\n * Used for calculations on `Next`, or for dragging to the left.\n */\n containerRightPosition: number;\n\n /**\n * The position of the left edge of the very first element in the slider list.\n * Initially this will always be equal to `containerLeftPosition`.\n */\n firstElementPosition: number;\n\n /**\n * The position of the right edge of the very last element in the slider list.\n */\n lastElementPosition: number;\n\n /**\n * True when `firstElementPosition === containerLeftPosition`.\n */\n hideLeftButton: boolean;\n\n /**\n * True when `lastElementPositon === containerRightPosition`.\n */\n hideRightButton: boolean;\n\n /**\n * When clicking left or right, this number is the max distance in pixels that the slider.\n * will move.\n * Default 300.\n * Can only be set once on `Init` action.\n */\n maxSlideDistance: number;\n\n /**\n * This is calculated on `Init`, and is the lowest number the `offset` state can ever be.\n * This is needed for the `Drag` event, as the `Drag` event can only calculate whole numbers.\n * 99% of the time, the leftOffsetLimit is a very specific decimal number, so we calculate it\n * on `Init` and reference it on `Drag` events when necessary.\n */\n leftOffsetLimit: number;\n}\n\nfunction getMaxSlideDistance(mediaQuery: MediaQueryStrings): number {\n if (mediaQuery === MediaQueryStrings.XS)\n return 200;\n\n if (mediaQuery === MediaQueryStrings.SM || mediaQuery === MediaQueryStrings.MD)\n return 350;\n\n return 500;\n}\n\n/**\n * `null` values are initialized in the `Init` action. This is dispatched\n * later, because it uses JQuery elements that aren't immediately available\n * when `useReducer` is called.\n */\nexport const initialSliderState: DynamicWidgetState = {\n offset: 0,\n containerLeftPosition: null,\n containerRightPosition: null,\n firstElementPosition: null,\n lastElementPosition: null,\n hideLeftButton: true,\n hideRightButton: true,\n maxSlideDistance: 0,\n leftOffsetLimit: null\n};\n\ninterface InitPayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onInit = (payload: InitPayload): DynamicWidgetState => {\n const { container, lastElement } = payload.elementRefs;\n\n if (!container?.current || !lastElement?.current)\n return initialSliderState;\n\n const containerRect = container.current.getBoundingClientRect();\n const containerLeftPosition = containerRect.left;\n const containerRightPosition = containerRect.right;\n\n const firstElementPosition = containerLeftPosition;\n const lastElementPosition = lastElement.current.getBoundingClientRect().right;\n const leftOffsetLimit = containerRightPosition - lastElementPosition;\n\n return {\n ...initialSliderState,\n containerLeftPosition,\n containerRightPosition,\n firstElementPosition,\n lastElementPosition,\n hideRightButton: lastElementPosition < containerRightPosition,\n leftOffsetLimit,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\ninterface ResizePayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onResize = (payload: ResizePayload): DynamicWidgetState => {\n const initialState = onInit({\n ...payload,\n ...payload.elementRefs\n });\n\n return {\n ...initialState,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\nconst onNext = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { firstElementPosition, lastElementPosition, maxSlideDistance, offset, containerRightPosition } = prevState;\n\n /**\n * The distance in pixels that the slider will move along the x-axis.\n * This will be the `maxSlideDistance` constant value, or if that value is too large we calculate\n * the remaining overflowing space and only slide by that amount.\n */\n const slideDistance = lastElementPosition - containerRightPosition >= maxSlideDistance\n ? maxSlideDistance\n : lastElementPosition - containerRightPosition;\n\n return {\n firstElementPosition: firstElementPosition - slideDistance,\n lastElementPosition: lastElementPosition - slideDistance,\n offset: offset - slideDistance,\n hideRightButton: lastElementPosition - slideDistance === containerRightPosition,\n hideLeftButton: false\n };\n};\n\nconst onPrevious = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { containerLeftPosition, firstElementPosition, lastElementPosition, maxSlideDistance, offset } = prevState;\n\n const fullSlide = firstElementPosition + maxSlideDistance <= containerLeftPosition;\n const slideDistance = fullSlide ? maxSlideDistance : Math.abs(offset);\n\n return {\n firstElementPosition: firstElementPosition + slideDistance,\n lastElementPosition: lastElementPosition + slideDistance,\n offset: offset + slideDistance,\n hideLeftButton: !fullSlide || firstElementPosition + slideDistance === containerLeftPosition,\n hideRightButton: false\n };\n};\n\nconst onDrag = (prevState: DynamicWidgetState, payload: any): Partial<DynamicWidgetState> => {\n const { widgetSnapshot, currentMouseX } = payload;\n\n // Disable dragging if the slider isn't long enough\n if (widgetSnapshot.hideLeftButton && widgetSnapshot.hideRightButton)\n return {};\n\n // The distance from the initial `MouseDown` event x-coordinate, to the present x-coordinate\n const dragDistance = widgetSnapshot.initialMouseX - currentMouseX;\n\n let offset = widgetSnapshot.offset - dragDistance;\n let firstElementPosition = widgetSnapshot.firstElementPosition - dragDistance;\n let lastElementPosition = widgetSnapshot.lastElementPosition - dragDistance;\n let hideLeftButton = false;\n let hideRightButton = false;\n\n if (firstElementPosition > prevState.containerLeftPosition) {\n offset = 0;\n firstElementPosition = prevState.containerLeftPosition;\n lastElementPosition = prevState.lastElementPosition;\n hideLeftButton = true;\n }\n\n if (lastElementPosition <= prevState.containerRightPosition) {\n offset = prevState.leftOffsetLimit;\n firstElementPosition = prevState.containerLeftPosition - Math.abs(prevState.leftOffsetLimit);\n lastElementPosition = widgetSnapshot.containerRightPosition;\n hideRightButton = true;\n }\n\n return {\n offset,\n firstElementPosition,\n lastElementPosition,\n hideLeftButton,\n hideRightButton\n };\n};\n\nexport function DynamicWidgetReducer(\n prevState: DynamicWidgetState,\n action: ReducerActions<WidgetInteraction>\n): DynamicWidgetState {\n switch (action.type) {\n case WidgetInteraction.Init:\n return {\n ...prevState,\n ...onInit(action.payload)\n };\n\n case WidgetInteraction.Resize:\n return {\n ...prevState,\n ...onResize(action.payload)\n };\n\n case WidgetInteraction.Next:\n return {\n ...prevState,\n ...onNext(prevState)\n };\n\n case WidgetInteraction.Previous:\n return {\n ...prevState,\n ...onPrevious(prevState)\n };\n\n case WidgetInteraction.Drag:\n return {\n ...prevState,\n ...onDrag(prevState, action.payload)\n };\n\n default:\n return prevState;\n }\n}","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};"],"names":["getResizeHandler","elementRefs","dispatch","mediaQuery","container","current","style","transition","type","WidgetInteraction","payload","getResizeEndHandler","containerRef","getDragHandler","widgetState","widgetSnapshot","setWidgetSnapshot","event","mouseX","clientX","snapshot","initialMouseX","currentMouseX","getDragEndHandler","DynamicWidget","props","WidgetItemComponent","childComponent","staticChildren","getWidgetItemAnalyticsData","DynamicWidgetReducer","state","firstElement","lastElement","isTouchScreen","UserAgentHelper","prevent","lazyLoad","ref","inView","widgetData","collection","FunctionHelper","fetch","request","data","ObjectHelper","widgetItems","firstChildren","filter","child","position","lastChildren","items","map","widgetItem","index","itemRef","ArrayHelper","length","isLast","key","id","className","childClassName","getChildAppLink","getSubtitle","analyticsData","itemIndex","analyticsOptions","WidgetHelper","i","Component","component","widgetDataDeps","PartialDynamicWidget","partialLoadingComponent","partialLoadingOptions","getSliderAnalyticsData","name","heading","direction","hideButtons","noNegativePadding","WidgetHeader","description","appLink","headingAppLink","WidgetButton","W","onClick","AnalyticsHelper","leftButtonClassName","leftGradientClassName","hide","hideLeftButton","useGradientBackdrop","SlidingListContainer","offset","positionType","CssMeasurement","C","onDrag","onDragEnd","hideRightButton","rightButtonClassName","rightGradientClassName","defaultProps","PartialLoadingHelper","item","idx","getMaxSlideDistance","initialSliderState","containerLeftPosition","containerRightPosition","firstElementPosition","lastElementPosition","maxSlideDistance","leftOffsetLimit","onInit","containerRect","getBoundingClientRect","left","right","onResize","initialState","onNext","prevState","slideDistance","onPrevious","fullSlide","Math","abs","dragDistance","action","DEFAULT_PARTIAL_LOADING_OPTIONS","numItems","minWidth","maxWidth","getPartialLoadingItems","options","opts","Array","width","max","floor","random"],"sourceRoot":""}