@clickview/lite 0.79.0-rc.2 → 0.79.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.79.0-rc.2",
3
+ "version": "0.79.0-rc.3",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4365],{75097:(e,t,n)=>{n.d(t,{U:()=>c});var a=n(32735),r=n(13170);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")})})))}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),c=n(15611),l=n(18559),o=n(11607),s=n(83914),i=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(l.C,{type:l.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(i.Z.pillTabSelector,"\n ").concat(e.borderRadius?i.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map(function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(i.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?i.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(c.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(i.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(o.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(i.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))})))}m.defaultProps={borderRadius:"lg"}},31647:(e,t,n)=>{n.d(t,{E:()=>o});var a=n(32735),r=n(23481),c=n(38502),l="rostering.settingHeader";function o(e){var t,n,o=[{name:r.T.getPhrase(l,"syncJobs"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.syncJobs,active:"syncJobs"===e.active},{name:r.T.getPhrase(l,"settings"),appLink:null===(n=e.appLinks)||void 0===n?void 0:n.settings,active:"settings"===e.active}];return a.createElement("div",{className:e.className},a.createElement(c.r,{tabs:o}))}},18549:(e,t,n)=>{n.d(t,{G:()=>s});var a=n(32735),r=n(23481),c=n(36532);const l={rightButton:"GcqRT"};var o=r.T.encloseNamespace("rostering.syncActionButtonGroup");function s(e){return a.createElement("div",{className:"btn-group px-2",role:"group"},a.createElement(c.u,{title:o("syncNowTooltip"),spanHack:!0,placement:"left",spanHackClassName:l.buttonBorder},a.createElement("button",{type:"button",className:"btn btn-outline-dark ".concat(l.leftButton),onClick:null==e?void 0:e.onSyncNow},o("syncNow"))))}},62394:(e,t,n)=>{n.d(t,{y:()=>l});var a=n(75896),r=n(110),c=new Date,l={parseUTCToLocal:function(e){var t=e.utcHour,n=e.utcWeekdays,c=e.utcMinute,l=void 0===c?0:c,o=n.map(function(e){return r.O.buildLocalDateFromUTC(e,t,l)}),s=o.map(function(e){return e.getDay()});return{hour:+r.O.format(a.m.first(o),"HH"),daysOfWeek:s,minute:l}},getScheduledJobBySetting:function(e){var t;if(!e||!e.fullSyncSchedule||!e.fullSyncSchedule.enabled)return null;var n=l.parseUTCToLocal({utcHour:e.fullSyncSchedule.hour,utcWeekdays:e.fullSyncSchedule.daysOfWeek,utcMinute:e.fullSyncSchedule.minute}),a=new Date,r=c.getDay(),o=n.daysOfWeek.sort(function(e,t){return e-t}),s=n.daysOfWeek.includes(r),i=n.hour,u=null!==(t=null==n?void 0:n.minute)&&void 0!==t?t:0;if(s&&(a.setHours(i,u,0,0),c<a))return a;var m=new Date,d=o.find(function(e){return e>r});d||(d=o[0]);var p=Math.abs(d-r);return m.setDate(c.getDate()+p),m.setHours(i,0,0,0),m}}},63112:(e,t,n)=>{n.d(t,{o:()=>c});var a=n(32735),r=n(14346),c=a.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(r.Z.partialTag);return a.createElement("div",{className:"mt-1"},a.createElement("span",{className:n}," "))})},30699:(e,t,n)=>{n.d(t,{a:()=>c});var a=n(32735),r=n(16035);function c(e){var t=e.selectedItems.find(function(t){return t.id===e.data.id})?"bg-gray-900 text-white":"bg-light";return a.createElement(r.z,{tag:e.data,appLink:e.appLink,tagClass:"no-decoration ".concat(t," lh-1"),onClick:function(){return e.onClick(e.data)}})}},14177:(e,t,n)=>{n.d(t,{$:()=>x});var a=n(32735),r=n(70680),c=n(81886),l=n(20354),o=n(79447),s=n(83914),i=n(83345),u=n(4594),m=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.CheckCircle})),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===u.E.User&&e.userType?a.createElement(i.x,{namespace:p,phrase:e.userType===m.Y.Learner?"progressStudents":"progressStaff",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):e.objectType===u.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 b(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.CheckCircle})),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 v=n(58739),y=n(94644),E=n(89476);function h(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 S=2e3,C=3;function x(e){var t=h(a.useState(null),2),n=t[0],o=t[1],s=h(a.useState(0),2),i=s[0],u=s[1],m=a.useRef(null),d=(0,E.f)(),p=(0,r.I0)();function g(){e.pollJob(N,x)}function N(t){o(t),t.status===v.K.Completed||t.status===v.K.CompletedWithError||t.status===v.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):m.current=window.setTimeout(g,S)}function x(t){i===C&&(window.clearTimeout(m.current),e.navLockId&&d.unlock(e.navLockId),(0,y.r)(t)),u(function(e){return e+1}),m.current=window.setTimeout(g,S)}return a.useEffect(function(){return g(),function(){m.current&&window.clearTimeout(m.current)}},[]),n&&n.status!==v.K.Submitted&&n.status!==v.K.Queued&&n.status!==v.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(b,{actionName:e.actionName,actionVerb:e.actionVerb})}},44538:(e,t,n)=>{n.d(t,{K:()=>o});var a=n(99940),r=n(97395),c=n(58739),l=n(38389),o={getRostering:function(){return{url:"{gateway}/v1/users/me/rostering",key:"rostering"}},getSyncList:function(e){var t={};if(e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.jobStatus){var n=[];e.jobStatus.includes("completed")&&n.push.apply(n,[c.K.Completed,c.K.CompletedWithError]),e.jobStatus.includes("failed")&&n.push(c.K.Failed),e.jobStatus.includes("inProgress")&&n.push.apply(n,[c.K.Submitted,c.K.Queued,c.K.Pending,c.K.InProgress]),t.status=n}return t.type=l.m.Rostering,{url:r._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"rostering:sync:".concat(e.cursor,":").concat(e.sort,":").concat(e.jobStatus)}},createJob:function(e,t,n){return{url:"{gateway}/v1/batch/jobs",key:"rostering:sync",type:a.k.POST,invalidationKeys:["rostering:sync"],data:e,success:t,error:n}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}},getSyncScheduleSettings:function(e){return{url:"{gateway}/v1/rostering/".concat(e,"/schedule"),key:"sync-settings:".concat(e)}},updateScheduleSetting:function(e,t,n,r,c){return{type:a.k.PUT,url:"{gateway}/v1/rostering/".concat(t,"/schedule"),key:"update:sync-settings:".concat(e.customerId,":").concat(t),invalidationKeys:["sync-settings:".concat(t)],data:e,success:n,error:r,always:c}}}},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),u=(0,r.N)(),m=(0,c.D)(e),d=(0,c.D)(o);function p(){i.current.clear(),u()}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 b(e){e.forEach(function(e){i.current.set(e,!0)}),u()}return a.useEffect(function(){t.initialState||o&&d===o||(null==m?void 0:m.map(function(e){return e[l]}).join())!==(null==e?void 0:e.map(function(e){return e[l]}).join())&&p()},[m,d,e,t.initialState]),a.useEffect(function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&b(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())}),u()},onToggleItem:function(e){var t=!i.current.get(e.toString());t?i.current.set(e.toString(),t):i.current.delete(e.toString()),u()},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())}),u())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find(function(e){return f(e)})},setSelected:b,getSelectedCount:function(){return i.current.size},reset:p,getMap:function(){return i.current}}}},93322:(e,t,n)=>{n.d(t,{F:()=>c});var a=n(32735),r=n(13126);function c(){a.useEffect(function(){return r.e.lockContentWidth(),function(){return r.e.unlockContentWidth()}},[])}},81803:(e,t,n)=>{n.d(t,{d:()=>f});var a=n(32735),r=n(81886),c=n(23481),l=n(49935),o=n(22902),s=n(14070),i=n(97291),u=n(96368);function m(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 d="settings.settingsLayout",p=function(e){var t=(0,o.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var a=r.Q.C$.getCurrentAppLink();return a.application!==i.O.SETTINGS||n.some(function(e){return e.modules.some(function(e){return"appLink"in e&&e.appLink.action===a.action})})};function f(e){var t,n=p(e.requiredPermissions);if(a.useEffect(function(){n||r.Q.C$.trigger({application:i.O.SETTINGS,action:s.e.Settings.HOME},{replace:!0})},[n]),!n)return a.createElement(a.Fragment,null);var o,u=e.breadcrumbs.map(function(t,n){return{name:t,appLink:{application:i.O.SETTINGS,action:s.e.Settings.HOME},active:n===e.breadcrumbs.length-1}});return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(l.Oo,{breadcrumbs:[{name:c.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:i.O.SETTINGS,action:s.e.Settings.HOME}}].concat((o=u,function(e){if(Array.isArray(e))return m(e)}(o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(o)||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.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},51552:(e,t,n)=>{n.r(t),n.d(t,{RosteringSyncListView:()=>Be});var a=n(32735),r=n(70680),c=n(23481),l=n(20354),o=n(97958),s=n(83345),i="rostering.noResults";function u(e){return a.createElement(o.u,null,a.createElement(o.u.Image,{src:e.imageCdnUrl}),a.createElement(o.u.Heading,null,a.createElement(s.x,{namespace:i,phrase:"emptyHeading"})),a.createElement(o.u.Info,{className:"w-50 mb-1"},a.createElement(s.x,{namespace:i,phrase:"emptyInfo"})))}var m=n(75097),d=n(49935);const p={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 f(){return a.createElement("div",{className:"d-flex striped-row rounded py-3 ".concat(p.row)},a.createElement("div",{className:"".concat(p.checkboxColumn," d-flex justify-content-center")},a.createElement("div",{className:"partial-loading-background ".concat(p.partialCheckbox," ms-0")})),a.createElement("div",{className:"".concat(p.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.action)})),a.createElement("div",{className:"".concat(p.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.users)})),a.createElement("div",{className:"".concat(p.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.date)})),a.createElement("div",{className:"".concat(p.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.performedBy)})),a.createElement("div",{className:"".concat(p.seeMoreColumn)}," "))}function g(){return a.createElement("div",{className:"d-flex py-2 mb-1"},a.createElement("div",{className:"".concat(p.checkboxColumn)}," "),a.createElement("div",{className:"".concat(p.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.heading)})),a.createElement("div",{className:"".concat(p.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.heading)})),a.createElement("div",{className:"".concat(p.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.heading)})),a.createElement("div",{className:"".concat(p.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(p.heading)})),a.createElement("div",{className:"".concat(p.seeMoreColumn)}," "))}function b(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"mb-3 mt-n1"},a.createElement(g,null),a.createElement("div",{className:"striped-list no-full-width"},a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null),a.createElement(f,null))))}function v(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background mb-2 ".concat(p.partialHeading)}),a.createElement("div",{className:"pb-3"},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement(d.b2,null),a.createElement("div",{className:"partial-loading-background ".concat(p.partialJobCount)}))),a.createElement("div",{className:"d-flex align-items-center pb-2"},a.createElement("div",{className:"partial-loading-background ".concat(p.partialCheckbox)}),a.createElement("div",{className:"ms-4 ps-3"},a.createElement(m.U,{count:3})),a.createElement("div",{className:"ms-auto partial-loading-background ".concat(p.partialExportButton)})),a.createElement(b,null))}var y=n(31647),E=n(110),h={getCellStyle:function(e){return{width:e,flex:"".concat(e," 0 auto")}},getColumnCellWidth:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"std";switch(e){case"checkboxes":return 60;case"status":default:return"std"===t?200:100;case"id":return"std"===t?120:85;case"dateCreated":return"std"===t?220:180;case"submitterName":return"std"===t?200:180;case"actions":return"std"===t?200:80}},getColumnCellStyle:function(e,t){return h.getCellStyle(h.getColumnCellWidth(e,t))}},N=n(58739);const S={complete:"nAOdH",failed:"xkFpC",inProgress:"BjR3y",scheduled:"Ux2b9"};var C=c.T.encloseNamespace("rostering.syncJobsStatusBadge");function x(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 N.K.Completed:case N.K.CompletedWithError:return"".concat(t," ").concat(S.complete);case N.K.Failed:return"".concat(t," ").concat(S.failed);case N.K.InProgress:case N.K.Pending:case N.K.Queued:case N.K.Submitted:return"".concat(t," ").concat(S.inProgress);case"scheduled":return"".concat(t," ").concat(S.scheduled)}}()},function(){switch(e.status){case N.K.Completed:case N.K.CompletedWithError:return C("complete");case N.K.Failed:return C("failed");case N.K.InProgress:case N.K.Pending:case N.K.Queued:case N.K.Submitted:return C("inProgress");case"scheduled":return C("scheduled")}}())}var k=n(83914),w=n(35223);const I={colored:"MLlUi",avatar:"Z1jn_",logoWrapper:"OAeff",cog:"I7V_R"};var j=c.T.encloseNamespace("rostering.scheduledSyncJobItem");function T(e){var t=e.size||"std";return a.createElement("div",{className:I.colored},a.createElement("div",{className:"px-4 py-3 d-flex align-items-center"},a.createElement("div",{style:h.getColumnCellStyle("checkboxes",t)}),a.createElement("div",{className:"px-2",style:h.getColumnCellStyle("id",t)}),a.createElement("div",{className:"px-2",style:h.getColumnCellStyle("dateCreated",t)},E.O.format(e.scheduledDate,"DD/MM/YYYY, hh:mmA")),a.createElement("div",{className:"px-2",style:h.getColumnCellStyle("status",t)},a.createElement(x,{status:"scheduled"})),a.createElement("div",{className:"px-2 d-flex align-items-center",style:h.getColumnCellStyle("submitterName",t)},a.createElement("div",{className:"".concat(I.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(k.x,{svgName:w.vn.Cog,className:"svg-container"})),j("performedBy")),a.createElement("div",{className:"cursor-pointer d-flex justify-content-end",style:h.getColumnCellStyle("actions",t)})))}var P=n(18549),A=n(56050),L=n(70848),O=n(97408),K=n(89965);const J={colored:"aU1VO",seeMore:"Nfc8Q"};function B(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 F=c.T.encloseNamespace("shared.bulkJobsAccordionItem");function U(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 B(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)?B(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(J.colored," ").concat(o?"":"cursor-pointer"),onClick:function(){o||l(function(e){return!e})}},a.createElement("div",{className:"p-4 d-flex align-items-center"},a.createElement("div",{style:h.getCellStyle(60),onClick:function(e){return e.stopPropagation()}},a.createElement(K.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:h.getCellStyle(c)},n(e.job))}),a.createElement("div",{className:"d-flex justify-content-end ".concat(o?"":"cursor-pointer"),style:h.getColumnCellStyle("actions",e.tableSize)},!o&&a.createElement("div",{className:"".concat(J.seeMore," text-info")},F(c?"seeLess":"seeMore")))),c&&a.createElement("div",{className:"bg-white ".concat(e.isLastOne?"":"border-bottom"," cursor-default"),onClick:function(e){return e.stopPropagation()}},e.jobDetailsComponent(e.job)))}var R=n(10638);function M(e){return a.createElement(R.J,{queryParams:e.queryParams,mainFilters:e.filters,appLink:e.appLink,analyticsOptions:e.analyticsOptions,hideHeading:!0,hideDivider:!0,constantIndices:[]})}var H=n(37395),D=n(2102),W=n(69883),V=n(299),G=n(75795);const Z={bulkCheckbox:"XeoQi"};function q(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",$=c.T.encloseNamespace(z);function _(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 q(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)?q(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],i=(0,V.X)(e.jobs.data),u=(0,W.Z)();return a.createElement("div",{className:"".concat(e.containerClassName," pe-3")},a.createElement("div",{className:"d-flex align-items-center pb-2 mt-3"},a.createElement(K.X,{className:Z.bulkCheckbox,id:"bulk-audit-log-checkbox",checked:i.bulkChecked,onChange:i.onToggleBulk,indeterminate:i.hasSomeSelections()}),a.createElement("div",{className:"ms-4"},a.createElement(M,{queryParams:e.queryParams,appLink:e.appLink,filters:e.filters})),a.createElement(D.m,{variant:"dark",className:"ms-auto",onClick:function(){if(!l){o(!0);var t=i.getSelected();e.onClickExport(t).then(function(){return u.success($("exportSuccess"))}).catch(function(){return u.error($("exportError"))}).finally(function(){return o(!1)})}},disabled:!i.hasSomeSelections()||l,showSpinner:l},a.createElement(s.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:h.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:h.getCellStyle(c)},n)}),a.createElement("div",{style:h.getColumnCellStyle("actions",e.tableSize)})),!!e.pinnedComponent&&e.pinnedComponent(),!!e.jobs.data.length&&e.jobs.data.map(function(t,n){return a.createElement(U,{key:t.id,job:t,onToggleCheckbox:i.onToggleItem,isChecked:i.isChecked,jobDetailsComponent:e.jobDetailsComponent,onClickExport:e.onClickExport,imageCdnUrl:e.imageCdnUrl,onPollJob:e.onPollJob,columns:e.columns,forceExpand:e.forceExpand,disableExpand:e.disableExpand,tableSize:e.tableSize,isLastOne:n===e.jobs.data.length-1})}),!!(null===(t=e.jobs.pagination)||void 0===t?void 0:t.cursors)&&a.createElement(H.t,{className:"p-0 text-end pb-3 mt-3",cursors:e.jobs.pagination.cursors,appLink:G.O.getCurrentRoute().appLink,buttonVariant:"outline-dark"}))}var Q=n(97392),Y=n(91693),X=n(80247),ee=n(14177);function te(e){return e.jobId?a.createElement("div",null,a.createElement("div",{className:"mb-4"},a.createElement(ee.$,{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(X.Z,{as:"div",animation:"border",role:"status"}))}const ne={failed:"BSIaY",tag:"NOJhh"};function ae(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 re(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)?re(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 re(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 ce="rostering.syncJobSummary";function le(e){var t=ae(a.useState(null),2),n=t[0],r=t[1],c=ae(a.useState(!1),2),l=c[0],o=c[1];function i(e){var t="",r="";switch(e){case"staff":t="bg-navy",r=w.vn.Staff;break;case"learners":t="bg-blue",r=w.vn.GraduationCap;break;case"classrooms":t="bg-teal",r=w.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"},a.createElement("div",{className:"d-flex align-items-center px-2 mb-2"},a.createElement("div",{className:"".concat(t," ").concat(ne.badge," d-flex align-items-center rounded-circle text-white ps-0 me-2")},a.createElement(k.x,{className:"svg-container ".concat(ne.svg),size:k.S.Standard,svgName:r})),a.createElement(s.x,{namespace:ce,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?ne.failed:ne.tag)},n[e][t]),a.createElement(s.x,{namespace:ce,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(X.Z,{as:"div",animation:"border",role:"status"})),!!n&&a.createElement("div",{className:"row gx-3 mt-2"},i("staff"),i("learners"),i("classrooms")))}var oe=c.T.encloseNamespace("rostering.syncJobDetails");function se(e){var t=e.job.status===N.K.Completed||e.job.status===N.K.CompletedWithError,n=(0,W.Z)();return a.createElement("div",{className:"py-3 px-4"},a.createElement("div",{className:"d-flex justify-content-between"},e.job.status!==N.K.InProgress&&a.createElement("h1",{className:"h4"},oe("heading")),t&&a.createElement(Y.h,{className:"btn btn-outline-dark fw-semibold",svgName:w.vn.Download,onClick:function(){e.onClickExport([e.job.id]).then(function(){n.success(oe("exportSuccess"))}).catch(function(){n.error(oe("exportError"))})}},oe("export"))),function(){switch(e.job.status){case N.K.InProgress:case N.K.Pending:case N.K.Queued:case N.K.Submitted:return a.createElement(te,{jobId:e.job.id,onCompleted:e.onCompleted,onPollJob:e.onPollJob});case N.K.Failed:return a.createElement(a.Fragment,null);case N.K.Completed:case N.K.CompletedWithError:return a.createElement(le,{job:e.job,getJobSummary:e.getJobSummary});default:return a.createElement(a.Fragment,null)}}())}var ie=n(86794),ue=n(36532),me=n(55171),de=n(64818);const pe={avatar:"B8miR",logoWrapper:"higtD",cog:"bNPxa"};var fe="rostering.syncJobsAccordion",ge=c.T.encloseNamespace(fe),be=[N.K.InProgress,N.K.Pending,N.K.Queued,N.K.Submitted];function ve(e){var t=[L.x$.SortBy([{id:"newest",name:c.T.getPhrase(fe,"newest"),default:!0},{id:"oldest",name:c.T.getPhrase(fe,"oldest")}]),L.x$.JobStatus()],n=[{id:"id",header:ge("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=me.e.Rostering.sources[n];if(!r)throw new A.H("Unsupported rostering sync source, please add it to HardCoded rostering source");return a.createElement("div",{className:"bg-white rounded-circle border ".concat(pe.logoWrapper," d-flex align-items-center justify-content-center")},a.createElement(ue.u,{spanHack:!0,title:r.name},a.createElement("img",{src:r.iconUrl,alt:r.name})))},width:h.getColumnCellWidth("id",e.tableSize)},{id:"dateCreated",header:ge("date"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return E.O.format(e.dateCreated,"DD/MM/YYYY, hh:mmA")},width:h.getColumnCellWidth("dateCreated",e.tableSize)},{id:"status",header:ge("status"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return a.createElement(x,{status:e.status})},width:h.getColumnCellWidth("status",e.tableSize)},{id:"submitterName",header:ge("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(ie.b,{className:"me-2 rounded-circle border",size:k.S.Large},a.createElement(Q.F,null)),e.submitterName):e.submitterName?a.createElement("div",{className:"d-flex align-items-center"},a.createElement("div",{className:"me-2 flex-shrink-0 ".concat(pe.avatar)},a.createElement(O.q,{imageCdnUrl:t.imageCdnUrl,initials:de.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(pe.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(k.x,{svgName:w.vn.Cog,className:"svg-container"})),ge("scheduledSubmitter"))}(t,e)},width:h.getColumnCellWidth("submitterName",e.tableSize)}];return a.createElement(_,Object.assign({},e,{filters:t,jobDetailsComponent:function(t){return a.createElement(se,{job:t,getJobSummary:e.getJobSummary,onPollJob:e.onPollJob,onClickExport:e.onClickExport,onCompleted:e.onCompleted})},columns:n,forceExpand:function(e){return be.includes(e.status)},disableExpand:function(e){return e.status===N.K.Failed}}))}var ye=n(62394),Ee=n(16714),he=n(39151),Ne=n(44538),Se=n(31949),Ce=n(93322),xe=n(79612),ke=n(99742),we=n(14070),Ie=n(97291),je=n(29613),Te=n(81803),Pe="rostering.noSyncJobs",Ae=c.T.encloseNamespace(Pe);function Le(e){return a.createElement(o.u,null,a.createElement(o.u.Image,{src:ke.W.EmptyStates.Rostering.NO_SYNC_JOBS}),a.createElement(o.u.Heading,null,a.createElement(s.x,{namespace:Pe,phrase:"emptyHeading"})),a.createElement(o.u.Info,{className:"w-50 mb-3"},a.createElement(s.x,{namespace:Pe,phrase:"emptyInfo"})),a.createElement(o.u.Cta,{className:"btn btn-dark",onClick:e.onStartFullSync,text:Ae("emptyCta")}))}var Oe=n(52834),Ke=n(56736),Je=c.T.encloseNamespace("rostering.syncList");function Be(e){var t,n=l.a.useBasicFetch(Ne.K.getSyncList(e.queryParams)),c=l.a.useBasicFetch(he.L.config()),o=l.a.useBasicFetch(Se.N.currentUser()),s=l.a.useBasicFetch(Ne.K.getRostering()),i=l.a.useBasicFetch(o.data&&s.data&&Ne.K.getSyncScheduleSettings(s.data.id)),m=n.hasCompleted&&c.hasCompleted&&i.hasCompleted&&s.hasCompleted;(0,Ce.F)();var d=l.a.useGetFetchAsync(),p=(0,r.I0)();function f(e){return d(Ne.K.getJobSummary(e))}function g(e){return function(t,n){return d(je.q.getJobProgress(e,t,n))}}function b(){p({type:l.a.Actions.INVALIDATE,keys:["rostering:sync"],request:null})}function E(e){return d(je.q.sendJobReports(e))}(0,xe.M)({title:Je("pageTitle")});var h=m&&"Active"===(null===(t=s.data)||void 0===t?void 0:t.status),N=(0,Ke.B)(o.data),S=N.syncNow,C=N.fullSync;return a.createElement(Te.d,{heading:Je("heading"),breadcrumbs:[Je("breadcrumb")],headingButton:function(){return h?a.createElement(P.G,{onSyncNow:S,onFullSync:C}):a.createElement(a.Fragment,null)},requiredPermissions:Ee.C.Rostering},h&&a.createElement(y.E,{active:"syncJobs",appLinks:{syncJobs:{application:Ie.O.SETTINGS,action:we.e.Settings.ROSTERING},settings:{application:Ie.O.SETTINGS,action:we.e.Settings.ROSTERING_SETTINGS}}}),function(){var t;if("None"===(null===(t=s.data)||void 0===t?void 0:t.status))return a.createElement(Oe.y,null);if(!m)return a.createElement(v,null);if(!n.data.data.length&&!e.queryParams)return a.createElement(Le,{onStartFullSync:S});var r=ye.y.getScheduledJobBySetting(i.data);return a.createElement(a.Fragment,null,a.createElement(ve,{jobs:n.data,queryParams:e.queryParams,appLink:{application:Ie.O.SETTINGS,action:we.e.Settings.ROSTERING},onClickExport:E,getJobSummary:f,imageCdnUrl:c.data.imageCdnUrl,onPollJob:g,onCompleted:b,pinnedComponent:r?function(){return a.createElement(T,{scheduledDate:r})}:null}),!n.data.data.length&&e.queryParams&&a.createElement(u,{imageCdnUrl:ke.W.EmptyStates.Rostering.EMPTY_RESULTS}))}())}},52834:(e,t,n)=>{n.d(t,{y:()=>u});var a=n(32735),r=n(97958),c=n(98461),l=n(83345),o=n(12778),s=n(99742),i="rostering.requiresSetUp";function u(){return a.createElement(r.u,null,a.createElement(r.u.Image,{src:s.W.EmptyStates.Rostering.REQUIRES_SET_UP}),a.createElement(r.u.Heading,null,a.createElement(l.x,{namespace:i,phrase:"emptyHeading"})),a.createElement(r.u.Info,{className:"w-50 mb-3"},a.createElement(l.x,{namespace:i,phrase:"emptyInfo"})),a.createElement(c.d,{className:"btn btn-dark",href:o.o.getSupportRequestUrl(),newTab:!0},a.createElement(l.x,{namespace:i,phrase:"button"})))}},56736:(e,t,n)=>{n.d(t,{B:()=>p});var a=n(60139),r=n(23481),c=n(20354),l=n(67651),o=n(72081),s=n(38389),i=n(4594),u=n(44538),m=n(69883),d=r.T.encloseNamespace("rostering.syncUtils"),p=function(e){var t=c.a.useGetFetchAsync(),n=(0,m.Z)();return e?{fullSync:function(){},syncNow:function(){var r={type:a.NK.Success,heading:d("startSyncAlertHeading"),message:d("startSyncAlertBody"),appLinkText:d("startSyncAlertAppLinkText"),appLinkClassName:"info-link"},c={name:o.g.Rostering,type:s.m.Rostering,metadata:{targetMasterId:e.customerId,targetMasterType:i.E.Customer},customerId:e.customerId,dataType:l.B.Learner};t(u.K.createJob(c,function(){n.success(r)},function(){n.error(d("error"))}))}}:{syncNow:function(){},fullSync:function(){}}}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}},79447:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(95685),r=n.n(a),c=n(32735),l=n(46304),o=n(58661),s=n(74512);function i(e,t,n){const a=(e-t)/(n-t)*100;return Math.round(1e3*a)/1e3}function u({min:e,now:t,max:n,label:a,visuallyHidden:c,striped:l,animated:o,className:u,style:m,variant:d,bsPrefix:p,...f},g){return(0,s.jsx)("div",{ref:g,...f,role:"progressbar",className:r()(u,`${p}-bar`,{[`bg-${d}`]:d,[`${p}-bar-animated`]:o,[`${p}-bar-striped`]:o||l}),style:{width:`${i(t,e,n)}%`,...m},"aria-valuenow":t,"aria-valuemin":e,"aria-valuemax":n,children:c?(0,s.jsx)("span",{className:"visually-hidden",children:a}):a})}const m=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:b,bsPrefix:v,variant:y,className:E,children:h,...N}=a;return(0,s.jsx)("div",{ref:n,...N,className:r()(E,v),children:h?(0,o.UI)(h,e=>(0,c.cloneElement)(e,{isChild:!0})):u({min:i,now:m,max:d,label:p,visuallyHidden:f,striped:g,animated:b,bsPrefix:v,variant:y},n)})});m.displayName="ProgressBar";const d=m}}]);
2
- //# sourceMappingURL=4365-0c0d4ddfec-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4365-0c0d4ddfec-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/rostering/rostering-header/RosteringSettingHeader.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-action-button-group/sync-action-button-group.scss","file:///app/packages/libs/shared/src/components/rostering/sync-action-button-group/SyncActionButtonGroup.tsx","file:///app/packages/libs/shared/src/components/rostering/utils/RosteringHelper.ts","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tag-widget-item/TagWidgetItem.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/flight-requests/RosteringRequests.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/libs/shared/src/components/rostering/no-results-empty-state/NoResultsEmptyState.tsx","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/bulk-job-accordion/BulkJobsAccordionHelper.ts","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/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/no-sync-jobs-empty-state/NoSyncJobsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/RosteringSyncListView.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/requires-set-up-empty-state/RequiresSetUpEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/utils/useSyncRostering.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["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 React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nconst namespace = 'rostering.settingHeader';\n\nexport interface RosteringSettingHeaderAppLinks {\n syncJobs: Core.AppLink;\n settings: Core.AppLink;\n}\n\ninterface RosteringSettingHeaderProps {\n appLinks?: RosteringSettingHeaderAppLinks;\n active: keyof RosteringSettingHeaderAppLinks;\n className?: string;\n}\n\nexport function RosteringSettingHeader(props: RosteringSettingHeaderProps): JSX.Element {\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'syncJobs'),\n appLink: props.appLinks?.syncJobs,\n active: props.active === 'syncJobs'\n \n }, {\n name: LanguageService.getPhrase(namespace, 'settings'),\n appLink: props.appLinks?.settings,\n active: props.active === 'settings'\n \n }];\n\n return (\n <div className={props.className}>\n <PillTabSelector tabs={tabs} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"rightButton\":\"GcqRT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nimport styles from './sync-action-button-group.scss';\n\nconst namespace = 'rostering.syncActionButtonGroup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncActionButtonGroupProps {\n onSyncNow?: () => void;\n onFullSync?: () => void;\n}\n\nexport function SyncActionButtonGroup(props: SyncActionButtonGroupProps): JSX.Element {\n return (\n <div className='btn-group px-2' role='group'>\n <Tooltip title={getPhrase('syncNowTooltip')} spanHack placement='left' spanHackClassName={styles.buttonBorder}>\n <button type='button' className={`btn btn-outline-dark ${styles.leftButton}`} onClick={props?.onSyncNow}>{getPhrase('syncNow')}</button>\n </Tooltip>\n {/* todo hide the dropdown for v1 */}\n {/* <button type='button' className={`btn dropdown-toggle btn-outline-dark ${styles.rightButton}`} data-bs-toggle='dropdown'>\n </button>\n <div className='dropdown-menu'>\n <Tooltip title={getPhrase('fullSyncTooltip')} spanHack placement='left' >\n <div className='dropdown-item cursor-pointer' onClick={props?.onFullSync}>{getPhrase('fullSync')}</div>\n </Tooltip>\n </div> */}\n </div>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ScheduleSettingResponse } from 'libs/shared/interfaces';\n\nconst now = new Date();\n\nexport const RosteringHelper = {\n parseUTCToLocal(\n {\n utcHour,\n utcWeekdays,\n utcMinute = 0\n }: {\n utcHour: number,\n utcWeekdays: number[],\n utcMinute: number\n }\n ) {\n const local = utcWeekdays.map(weekday => DateHelper.buildLocalDateFromUTC(weekday, utcHour, utcMinute));\n\n const localWeekdays = local.map(w => w.getDay());\n const localHour = DateHelper.format(ArrayHelper.first(local), 'HH');\n return { hour: +localHour, daysOfWeek: localWeekdays, minute: utcMinute };\n },\n\n // calculating next scheduled job by schedule setting\n getScheduledJobBySetting (setting: ScheduleSettingResponse): Date | null {\n if (!setting || !setting.fullSyncSchedule || !setting.fullSyncSchedule.enabled)\n return null;\n\n const schedule = RosteringHelper.parseUTCToLocal({\n utcHour: setting.fullSyncSchedule.hour,\n utcWeekdays: setting.fullSyncSchedule.daysOfWeek,\n utcMinute: setting.fullSyncSchedule.minute\n });\n const scheduledDate = new Date();\n const weekdayOfToday = now.getDay();\n\n const scheduledWeekday = schedule.daysOfWeek.sort((a, b) => a - b);\n const scheduledToday = schedule.daysOfWeek.includes(weekdayOfToday);\n const hour = schedule.hour;\n const minute = schedule?.minute ?? 0;\n\n if (scheduledToday) {\n scheduledDate.setHours(hour, minute, 0, 0);\n if (now < scheduledDate) {\n return scheduledDate;\n }\n }\n\n const nextScheduledDate = new Date();\n let nextScheduledWeekday = scheduledWeekday.find(d => d > weekdayOfToday);\n if (!nextScheduledWeekday) {\n // cannot find next scheduled date in the current week, must be next week\n nextScheduledWeekday = scheduledWeekday[0];\n }\n // use absolute value of gap to make sure next scheduled date is in the futrue\n const gap = Math.abs(nextScheduledWeekday - weekdayOfToday);\n nextScheduledDate.setDate(now.getDate() + gap);\n nextScheduledDate.setHours(hour, 0, 0, 0);\n return nextScheduledDate;\n }\n};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { BaseObject, Tag } from 'libs/shared/interfaces';\n\nexport interface TagWidgetItemProps {\n appLink: Core.AppLink;\n data: Tag;\n selectedItems?: BaseObject[];\n onClick?: (data: Tag | FilterOption) => void;\n}\n\nexport function TagWidgetItem(props: TagWidgetItemProps): JSX.Element {\n const isSelected = props.selectedItems.find(selection => selection.id === props.data.id);\n\n const colorClass = isSelected ? `bg-gray-900 text-white` : 'bg-light';\n\n return (\n <TagItem\n tag={props.data}\n appLink={props.appLink}\n tagClass={`no-decoration ${colorClass} lh-1`}\n onClick={() => props.onClick(props.data)}\n />\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.CheckCircle} />\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.CheckCircle} />\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>(null);\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 { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { BatchJob, ScheduleSettingRequest } from 'libs/shared/interfaces';\nimport { CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const RosteringRequests = {\n getRostering(): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/rostering`,\n key: `rostering`\n };\n },\n\n getSyncList(queryParams: BulkJobsQueryParams): Flight.Request {\n const params: HashObject = {};\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.jobStatus) {\n const statuses = [];\n if (queryParams.jobStatus.includes('completed')) {\n statuses.push(...[ BatchJobStatus.Completed, BatchJobStatus.CompletedWithError ]);\n }\n if (queryParams.jobStatus.includes('failed')) {\n statuses.push(BatchJobStatus.Failed);\n }\n if (queryParams.jobStatus.includes('inProgress')) {\n statuses.push(...[\n BatchJobStatus.Submitted,\n BatchJobStatus.Queued,\n BatchJobStatus.Pending,\n BatchJobStatus.InProgress ]);\n }\n params.status = statuses;\n }\n\n params.type = BatchJobType.Rostering;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `rostering:sync:${queryParams.cursor}:${queryParams.sort}:${queryParams.jobStatus}`\n };\n },\n\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'rostering:sync',\n type: HttpVerbs.POST,\n invalidationKeys: ['rostering:sync'],\n data,\n success,\n error\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n },\n\n getSyncScheduleSettings(integrationId: string): Flight.SimulatedRequest {\n return {\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `sync-settings:${integrationId}`\n };\n },\n\n updateScheduleSetting(\n data: ScheduleSettingRequest,\n integrationId: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n type: HttpVerbs.PUT,\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `update:sync-settings:${data.customerId}:${integrationId}`,\n invalidationKeys: [`sync-settings:${integrationId}`],\n data,\n success,\n error,\n always\n };\n }\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\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\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\nconst namespace = 'rostering.noResults';\n\ninterface NoResultsEmptyStateProps {\n imageCdnUrl: string;\n}\n\nexport function NoResultsEmptyState(props: NoResultsEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageCdnUrl} />\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}","// 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}","import { BulkJobsAccordionColumn, BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\n\ntype BulkJobsTableColumn = BulkJobsAccordionColumn['id'] | 'actions';\n\nexport const BulkJobAccordionHelper = {\n getCellStyle(width: number) {\n return { width, flex: `${width} 0 auto` };\n },\n\n getColumnCellWidth(column: BulkJobsTableColumn, size: BulkJobsAccordionTableSize = 'std'): number {\n switch (column) {\n case 'checkboxes':\n return 60;\n case 'status':\n return size === 'std' ? 200 : 100;\n case 'id':\n return size === 'std' ? 120 : 85;\n case 'dateCreated':\n return size === 'std' ? 220 : 180;\n case 'submitterName':\n return size === 'std' ? 200 : 180;\n case 'actions':\n return size === 'std' ? 200 : 80;\n default:\n return size === 'std' ? 200 : 100;\n }\n },\n\n getColumnCellStyle(column: BulkJobsTableColumn, size: BulkJobsAccordionTableSize) {\n return BulkJobAccordionHelper.getCellStyle(BulkJobAccordionHelper.getColumnCellWidth(column, size));\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\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\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 size?: BulkJobsAccordionTableSize;\n}\n\nexport function ScheduledSyncJobItem(props: SyncJobsAccordionItemProps): JSX.Element {\n const size = props.size || 'std';\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 style={BulkJobAccordionHelper.getColumnCellStyle('checkboxes', size)}></div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('id', size)}>\n {/* scheduled job don't have source logo, we keep it as placeholder*/}\n </div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('dateCreated', size)}>{DateHelper.format(props.scheduledDate, 'DD/MM/YYYY, hh:mmA')}</div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('status', size)}><SyncStatusBadge status='scheduled' /></div>\n\n <div className='px-2 d-flex align-items-center' style={BulkJobAccordionHelper.getColumnCellStyle('submitterName', size)}>\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`} style={BulkJobAccordionHelper.getColumnCellStyle('actions', size)}></div>\n\n </div>\n </div>\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, BulkJobsAccordionTableSize } 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 isLastOne?: boolean;\n tableSize?: BulkJobsAccordionTableSize;\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='p-4 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.getColumnCellStyle('actions', props.tableSize)}>\n {!isDisabled && (<div className={`${styles.seeMore} text-info`}>\n {isExpanded ? getPhrase('seeLess') : getPhrase('seeMore')}\n </div>\n )}\n </div>\n </div>\n \n {isExpanded && (\n <div className={`bg-white ${props.isLastOne ? '' : '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\nexport type BulkJobsAccordionTableSize = 'std' | 'sm';\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 containerClassName?: string;\n tableSize?: BulkJobsAccordionTableSize;\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={`${props.containerClassName} 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 {/* placeholder column header for see-more action */}\n <div style={BulkJobAccordionHelper.getColumnCellStyle('actions', props.tableSize)}></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, idx) => {\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 tableSize={props.tableSize}\n isLastOne={idx === props.jobs.data.length - 1}\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'>\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, BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\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 containerClassName?: string;\n tableSize?: BulkJobsAccordionTableSize;\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 flex-shrink-0 ${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: BulkJobAccordionHelper.getColumnCellWidth('id', props.tableSize)\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: BulkJobAccordionHelper.getColumnCellWidth('dateCreated', props.tableSize)\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: BulkJobAccordionHelper.getColumnCellWidth('status', props.tableSize)\n }, {\n id: 'submitterName',\n header: getPhrase('performedBy'),\n headerClassName: 'px-2',\n renderClassName: 'px-2',\n render: job => renderSubmiter(job, props),\n width: BulkJobAccordionHelper.getColumnCellWidth('submitterName', props.tableSize)\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 { 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 { NoResultsEmptyState } from 'libs/shared/components/rostering/no-results-empty-state/NoResultsEmptyState';\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 { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJobCollection, BatchJobProgress, Config, CurrentUser, RosteringResponse, RosteringSyncBatchJobSummary, ScheduleSettingResponse } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\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 useLockContentWidth();\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 function onClickExport(jobIds: string[]): Promise<void> {\n return fetchAsync<void>(JobRequests.sendJobReports(jobIds));\n }\n\n function getContent() {\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 && (\n <NoResultsEmptyState imageCdnUrl={ImageUrls.EmptyStates.Rostering.EMPTY_RESULTS} />\n )}\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}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.requiresSetUp';\n\nexport function RequiresSetUpEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.REQUIRES_SET_UP} />\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 \n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('emptyCta')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n \n <ExternalLink\n className='btn btn-dark'\n href={ArticleHelper.getSupportRequestUrl()}\n newTab\n >\n <Text namespace={namespace} phrase='button'/>\n </ExternalLink>\n \n </EmptyState>\n );\n}","import { AlertType, BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { BatchDataType } from 'libs/shared/enums/BatchDataType';\nimport { BatchJobName } from 'libs/shared/enums/BatchJobName';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'rostering.syncUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const useSyncRostering = (currentUser: CurrentUser) => {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n if (!currentUser) {\n return { syncNow: () => {}, fullSync: () => {} };\n }\n\n function syncNow() {\n const alert: BaseAlert = {\n type: AlertType.Success,\n heading: getPhrase('startSyncAlertHeading'),\n message: getPhrase('startSyncAlertBody'),\n appLinkText: getPhrase('startSyncAlertAppLinkText'),\n appLinkClassName: 'info-link'\n };\n\n const data = {\n name: BatchJobName.Rostering,\n type: BatchJobType.Rostering,\n metadata: {\n targetMasterId: currentUser.customerId,\n targetMasterType: MasterType.Customer\n },\n customerId: currentUser.customerId,\n dataType: BatchDataType.Learner\n };\n fetchAsync(RosteringRequests.createJob(\n data,\n () => {\n alerts.success(alert);\n },\n () => {\n alerts.error(getPhrase('error'));\n }\n ));\n }\n\n function fullSync() {\n // todo\n }\n return { fullSync, syncNow };\n};","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","\"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":["PartialSearchFilters","count","className","Array","fill","map","item","index","key","TabContents","props","tab","svgName","name","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","active","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","namespace","RosteringSettingHeader","appLinks","syncJobs","settings","getPhrase","LanguageService","SyncActionButtonGroup","role","Tooltip","title","spanHack","placement","spanHackClassName","onSyncNow","now","Date","RosteringHelper","parseUTCToLocal","utcHour","utcWeekdays","utcMinute","local","weekday","localWeekdays","w","getDay","hour","daysOfWeek","minute","getScheduledJobBySetting","setting","fullSyncSchedule","enabled","schedule","scheduledDate","weekdayOfToday","scheduledWeekday","sort","a","b","scheduledToday","includes","setHours","nextScheduledDate","nextScheduledWeekday","find","d","gap","Math","abs","setDate","getDate","PartialTagItem","tagClass","classNames","TagWidgetItem","colorClass","selectedItems","selection","id","tag","WizardInProgress","percentage","floor","totalItemsComplete","totalItems","Text","phrase","options","actionName","SvgContainer","actionVerb","progressVerbPhrase","objectType","MasterType","userType","UserGroup","totalComplete","total","smartCount","ProgressBar","variant","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","params","jobId","keys","request","statusCompleteAppLink","onStatusCompleted","onCompleteJob","current","xhr","clearTimeout","currentVal","processedItems","RosteringRequests","getRostering","url","getSyncList","queryParams","cursor","order","jobStatus","statuses","push","createJob","success","error","invalidationKeys","getJobSummary","getSyncScheduleSettings","integrationId","updateScheduleSetting","always","customerId","useBulkCheckboxManager","collection","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","set","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","from","bulkChecked","deselectAll","hasSomeSelections","getSelectedCount","size","getMap","useLockContentWidth","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","breadcrumbs","heading","headingButton","description","children","NoResultsEmptyState","EmptyState","src","imageCdnUrl","PartialRow","PartialHeader","PartialSyncJobsTable","PartialSyncJobsList","BulkJobAccordionHelper","getCellStyle","width","flex","getColumnCellWidth","column","getColumnCellStyle","SyncStatusBadge","baseClass","getClassName","getName","ScheduledSyncJobItem","style","DateHelper","BulkJobsAccordionItem","forceExpand","job","isExpanded","setIsExpanded","isDisabled","disableExpand","s","e","stopPropagation","Checkbox","checked","onChange","onToggleCheckbox","columns","render","renderClassName","tableSize","isLastOne","jobDetailsComponent","BulkJobsFilters","SearchFilters","mainFilters","filters","hideHeading","hideDivider","constantIndices","BulkJobsAccordion","showExportSpinner","setShowExportSpinner","CheckboxHelper","jobs","alerts","containerClassName","indeterminate","SpinnerButton","selectedIds","onClickExport","then","disabled","showSpinner","header","headerClassName","pinnedComponent","idx","onPollJob","pagination","cursors","Pagination","ContextService","buttonVariant","SyncJobPolling","onCompleted","Spinner","as","animation","SyncJobSummary","summary","setSummary","isFetchingSummary","setIsFetchingSummary","getCategoryList","bgColor","icon","displayedSummaryKeys","Object","filter","k","S","result","SyncJobDetails","canExport","IconButton","getContent","IN_PROGRESS_GROUP","SyncJobsAccordion","default","rosterSource","metadata","source","HardCoded","DevError","iconUrl","alt","dateCreated","submittedByClickView","SvgContainer2","ClickViewAvatar","submitterName","Avatar","initials","UserHelper","split","renderSubmiter","NoSyncJobsEmptyState","ImageUrls","onStartFullSync","text","RosteringSyncListView","config","ConfigRequests","currentUser","UserRequests","rostering","dataLoaded","hasCompleted","fetchAsync","onSuccess","onError","JobRequests","jobIds","useSetPageMetadata","showTabAndButton","useSyncRostering","syncNow","fullSync","onFullSync","PermissionName","RequiresSetUpEmptyState","nextScheduled","href","newTab","alert","message","appLinkText","appLinkClassName","targetMasterId","targetMasterType","dataType","B","getPercentage","min","max","round","renderProgressBar","label","visuallyHidden","striped","animated","bsPrefix","isChild","rest","wrapperProps","child","cloneElement","displayName"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7122],{23201:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(32735),r=n(92802),c=n(2102),o=n(83345),l=n(33936),s="shared.formButtons";function i(e){var t=(0,r.u6)(),n=(0,l.l)(t);return a.createElement(c.m,{variant:e.variant||"primary",type:"submit",disabled:!n,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?a.createElement(a.Fragment,null,e.submitText):a.createElement(o.x,{namespace:s,phrase:e.isNew?"create":"save"}))}},29057:(e,t,n)=>{n.d(t,{n:()=>E,W:()=>k});var a=n(32735),r=n(80247),c=n(80130),o=n(92802),l=n(91967),s=n(1048),i=n(15611),u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function m(e){var t=e.label,n=e.checkboxLabelClassName,r=e.checkboxLabelFontWeight,o=e.className,l=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return a.createElement(c.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check ".concat(o||"")},a.createElement(E,Object.assign({className:"form-check-input"},l)),a.createElement(c.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===r?"fw-normal":""," \n ").concat(n),htmlFor:l.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&a.createElement(a.Fragment,null,a.createElement("span",null," "),a.createElement(i.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=n(83914),p=n(83345),f=n(73814),y=n(35223);function b(e){var t=(0,o.u6)().values,n=s.t.get(t,e.fieldName);return"string"!=typeof n?a.createElement(a.Fragment,null):a.createElement("div",{className:"float-end text-secondary fw-normal"},n.length,"/",e.limit," characters")}const v={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function g(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 h=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},S="shared.formField";function E(e){var t,n,c=e.children,i=e.showLoadingSpinner,u=h(e,["children","showLoadingSpinner"]),m=(t=a.useState(e.type),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,o,l=[],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)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw r}}return l}}(t,n)||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}}(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.")}()),p=m[0],f=m[1],b=l.q.isFunction(c)?function(e){return c(e)}:a.Children.count(c)?c:null;if("password"!==u.type)return i?a.createElement("div",{className:"position-relative"},a.createElement(o.gN,Object.assign({},s.t.omit(u,["formSize"])),b),a.createElement("div",{className:v.spinner},a.createElement(r.Z,{animation:"border",size:"sm"}))):a.createElement(o.gN,Object.assign({},s.t.omit(u,["formSize"])),b);var S="position-relative ".concat(v.passwordContainer);return u.className&&(S+=" ".concat(u.className)),u.disabled&&(S+=" ".concat(v.passwordContainerDisabled)),a.createElement("div",{className:S},a.createElement(o.gN,Object.assign({},s.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(v.passwordInput," border-0 w-100 h-100 outline-none rounded")}),b),"password"===u.type&&a.createElement(d.x,{svgName:"password"===p?y.vn.VisibleOn:y.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(v.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function k(e){var t=e.label,n=e.className,r=e.showCharacterCounter,l=e.showRequiredStar,i=e.infoTooltip,u=e.infoTooltipPlacement,g=e.infoText,k=e.formSize,N=e.showOptionalLabel,O=e.formGroupClassname,w=e.labelClassName,x=h(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","formGroupClassname","labelClassName"]),T=(0,o.u6)(),C=T.errors,A=T.touched,j=function(){};if("checkbox"===x.type){var I=s.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(I.onChange=j),a.createElement(m,Object.assign({},I))}var L=Object.assign(Object.assign({},x),{className:f.w.getCustomFormControlClassName(C,A,x.name,k,n,"string"==typeof e.as?e.as:null)});return e.disabled&&(L.onChange=j),a.createElement(c.Z.Group,{className:"form-group ".concat(O)},!!t&&a.createElement(c.Z.Label,{htmlFor:x.id,className:"d-flex align-items-center ".concat(w)},t,l&&a.createElement("span",{className:"text-danger"},"*"),i&&a.createElement(d.x,{className:"svg-container text-secondary ".concat(v.infoTooltip),svgName:y.vn.Info,title:i,tooltipPlacement:u,tooltipSpanHack:!0}),N&&a.createElement("span",{className:"text-secondary"}," ",a.createElement(p.x,{namespace:S,phrase:"optional"})),!!r&&!!x.maxLength&&a.createElement("div",{className:"ms-auto"},a.createElement(b,{fieldName:x.name,limit:x.maxLength}))),e.description&&a.createElement("p",null,e.description),a.createElement(E,Object.assign({},L,{"aria-errormessage":"".concat(x.name,"Error")})),!!g&&a.createElement(c.Z.Text,{className:"text-secondary"},g),a.createElement(o.Bc,{name:x.name},function(e){return a.createElement(c.Z.Control.Feedback,{id:"".concat(x.name,"Error"),type:"invalid",role:"status"},e)}))}E.defaultProps={autoComplete:"off"},k.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,n)=>{n.d(t,{b:()=>m,n:()=>u});var a=n(32735),r=n(92802),c=n(91967),o=n(1048);function l(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,o,l=[],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)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw r}}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,a=Array(t);n<t;n++)a[n]=e[n];return a}var i=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function u(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,s=e.initialValues,u=e.onSubmit,m=i(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=o.t.deepClone(e);return function e(n){Object.keys(t).forEach(function(a){t.hasOwnProperty(a)&&(o.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])})}(t),t}(s)):s,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,c=a.resetForm,o=a.setFieldError,s=n&&e.validationSchema?e.validationSchema.cast(t):t;u(s,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e.reset&&c(),e.errors)for(var t=0,n=Object.entries(e.errors);t<n.length;t++){var a=l(n[t],2),s=a[0],i=a[1];o(s,i)}r(!1)})},initialStatus:p}),c.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function m(){return(0,r.u6)()}u.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),c=n(15611),o=n(18559),l=n(11607),s=n(83914),i=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(i.Z.pillTabSelector,"\n ").concat(e.borderRadius?i.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map(function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(i.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?i.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(c.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(i.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(l.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(i.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))})))}m.defaultProps={borderRadius:"lg"}},31647:(e,t,n)=>{n.d(t,{E:()=>l});var a=n(32735),r=n(23481),c=n(38502),o="rostering.settingHeader";function l(e){var t,n,l=[{name:r.T.getPhrase(o,"syncJobs"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.syncJobs,active:"syncJobs"===e.active},{name:r.T.getPhrase(o,"settings"),appLink:null===(n=e.appLinks)||void 0===n?void 0:n.settings,active:"settings"===e.active}];return a.createElement("div",{className:e.className},a.createElement(c.r,{tabs:l}))}},18549:(e,t,n)=>{n.d(t,{G:()=>s});var a=n(32735),r=n(23481),c=n(36532);const o={rightButton:"GcqRT"};var l=r.T.encloseNamespace("rostering.syncActionButtonGroup");function s(e){return a.createElement("div",{className:"btn-group px-2",role:"group"},a.createElement(c.u,{title:l("syncNowTooltip"),spanHack:!0,placement:"left",spanHackClassName:o.buttonBorder},a.createElement("button",{type:"button",className:"btn btn-outline-dark ".concat(o.leftButton),onClick:null==e?void 0:e.onSyncNow},l("syncNow"))))}},62394:(e,t,n)=>{n.d(t,{y:()=>o});var a=n(75896),r=n(110),c=new Date,o={parseUTCToLocal:function(e){var t=e.utcHour,n=e.utcWeekdays,c=e.utcMinute,o=void 0===c?0:c,l=n.map(function(e){return r.O.buildLocalDateFromUTC(e,t,o)}),s=l.map(function(e){return e.getDay()});return{hour:+r.O.format(a.m.first(l),"HH"),daysOfWeek:s,minute:o}},getScheduledJobBySetting:function(e){var t;if(!e||!e.fullSyncSchedule||!e.fullSyncSchedule.enabled)return null;var n=o.parseUTCToLocal({utcHour:e.fullSyncSchedule.hour,utcWeekdays:e.fullSyncSchedule.daysOfWeek,utcMinute:e.fullSyncSchedule.minute}),a=new Date,r=c.getDay(),l=n.daysOfWeek.sort(function(e,t){return e-t}),s=n.daysOfWeek.includes(r),i=n.hour,u=null!==(t=null==n?void 0:n.minute)&&void 0!==t?t:0;if(s&&(a.setHours(i,u,0,0),c<a))return a;var m=new Date,d=l.find(function(e){return e>r});d||(d=l[0]);var p=Math.abs(d-r);return m.setDate(c.getDate()+p),m.setHours(i,0,0,0),m}}},44538:(e,t,n)=>{n.d(t,{K:()=>l});var a=n(99940),r=n(97395),c=n(58739),o=n(38389),l={getRostering:function(){return{url:"{gateway}/v1/users/me/rostering",key:"rostering"}},getSyncList:function(e){var t={};if(e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.jobStatus){var n=[];e.jobStatus.includes("completed")&&n.push.apply(n,[c.K.Completed,c.K.CompletedWithError]),e.jobStatus.includes("failed")&&n.push(c.K.Failed),e.jobStatus.includes("inProgress")&&n.push.apply(n,[c.K.Submitted,c.K.Queued,c.K.Pending,c.K.InProgress]),t.status=n}return t.type=o.m.Rostering,{url:r._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"rostering:sync:".concat(e.cursor,":").concat(e.sort,":").concat(e.jobStatus)}},createJob:function(e,t,n){return{url:"{gateway}/v1/batch/jobs",key:"rostering:sync",type:a.k.POST,invalidationKeys:["rostering:sync"],data:e,success:t,error:n}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}},getSyncScheduleSettings:function(e){return{url:"{gateway}/v1/rostering/".concat(e,"/schedule"),key:"sync-settings:".concat(e)}},updateScheduleSetting:function(e,t,n,r,c){return{type:a.k.PUT,url:"{gateway}/v1/rostering/".concat(t,"/schedule"),key:"update:sync-settings:".concat(e.customerId,":").concat(t),invalidationKeys:["sync-settings:".concat(t)],data:e,success:n,error:r,always:c}}}},73814:(e,t,n)=>{n.d(t,{w:()=>r});var a=n(92802),r={getCustomFormControlClassName:function(e,t,n,r,c,o){var l="";return l=function(e,t){var n="";return n="select"===e?"form-select":"form-control","sm"===t&&(n+=" ".concat(n,"-sm")),"lg"===t&&(n+=" ".concat(n,"-lg")),n}(o,r),(0,a.u9)(t,n)&&(0,a.u9)(e,n)&&(l+=" is-invalid"),c&&(l+=" ".concat(c)),l}}},81803:(e,t,n)=>{n.d(t,{d:()=>f});var a=n(32735),r=n(81886),c=n(23481),o=n(49935),l=n(22902),s=n(14070),i=n(97291),u=n(96368);function m(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 d="settings.settingsLayout",p=function(e){var t=(0,l.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var a=r.Q.C$.getCurrentAppLink();return a.application!==i.O.SETTINGS||n.some(function(e){return e.modules.some(function(e){return"appLink"in e&&e.appLink.action===a.action})})};function f(e){var t,n=p(e.requiredPermissions);if(a.useEffect(function(){n||r.Q.C$.trigger({application:i.O.SETTINGS,action:s.e.Settings.HOME},{replace:!0})},[n]),!n)return a.createElement(a.Fragment,null);var l,u=e.breadcrumbs.map(function(t,n){return{name:t,appLink:{application:i.O.SETTINGS,action:s.e.Settings.HOME},active:n===e.breadcrumbs.length-1}});return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(o.Oo,{breadcrumbs:[{name:c.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:i.O.SETTINGS,action:s.e.Settings.HOME}}].concat((l=u,function(e){if(Array.isArray(e))return m(e)}(l)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(l)||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.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},52834:(e,t,n)=>{n.d(t,{y:()=>u});var a=n(32735),r=n(97958),c=n(98461),o=n(83345),l=n(12778),s=n(99742),i="rostering.requiresSetUp";function u(){return a.createElement(r.u,null,a.createElement(r.u.Image,{src:s.W.EmptyStates.Rostering.REQUIRES_SET_UP}),a.createElement(r.u.Heading,null,a.createElement(o.x,{namespace:i,phrase:"emptyHeading"})),a.createElement(r.u.Info,{className:"w-50 mb-3"},a.createElement(o.x,{namespace:i,phrase:"emptyInfo"})),a.createElement(c.d,{className:"btn btn-dark",href:l.o.getSupportRequestUrl(),newTab:!0},a.createElement(o.x,{namespace:i,phrase:"button"})))}},67122:(e,t,n)=>{n.r(t),n.d(t,{RosteringSyncSettingsView:()=>z});var a=n(32735),r=n(80247),c=n(23481),o=n(20354),l=n(31647),s=n(5173),i=n(75896),u=n(110),m=n(82644),d=n(92802),p=n(28400),f=n(23201),y=n(29057),b=n(83345);const v={select:"eHERO",sourceLabel:"P7yI8",source:"dsINO",logoWrapper:"kPI9A",wrapper:"PYTsc",weekdaysPicker:"W8qyy"};function g(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 h="rostering.settings.schedule",S=c.T.encloseNamespace(h),E=new Array(24).fill(0).map(function(e,t){return t}),k=["daily","weekly"],N=[1,2,3,4,5,6,0],O=new Date,w=(new Date).getTimezoneOffset()/60;function x(e){if(0===e)return"12:00 AM";var t=12===e?12:e%12;return e/12<1?t<10?"0".concat(t,":00 AM"):"".concat(t,":00 AM"):t<10?"0".concat(t,":00 PM"):"".concat(t,":00 PM")}function T(e){return u.O.format(u.O.weekday(O,e),"ddd")}function C(){var e,t=(0,d.u6)();return a.createElement(d.l0,null,a.createElement("div",null,a.createElement("p",null,a.createElement(b.x,{namespace:h,phrase:"info"})),a.createElement("div",{className:"row"}),a.createElement("div",{className:"row align-items-center"},a.createElement("p",{className:"col col-3"},S("start")),a.createElement("div",{className:"col"},a.createElement("div",{className:"d-flex align-items-center flex-gap"},a.createElement(y.W,{className:"".concat(v.select," me-2"),id:"start",name:"startAt",as:"select",value:null!==(e=t.values.startAt)&&void 0!==e?e:2},E.map(function(e){return a.createElement("option",{className:"text-dark",value:e,key:e},x(e))})),a.createElement("p",null,"(EST UTC","".concat(w),") ",Intl.DateTimeFormat().resolvedOptions().timeZone.replace("/"," - "))))),a.createElement("div",{className:"row align-items-center"},a.createElement("p",{className:"col col-3"},S("repeat")),a.createElement("div",{className:"col ".concat(v.wrapper," position-relative")},a.createElement(y.W,{className:"".concat(v.select," d-inline-block"),id:"repeat",name:"repeat",as:"select",value:t.values.repeat},k.map(function(e){return a.createElement("option",{className:"text-dark",value:e,key:e},p.m.toTitleCase(e))})),"weekly"===t.values.repeat&&a.createElement("div",{className:"d-flex align-items-center position-absolute ".concat(v.weekdaysPicker)},a.createElement("span",{className:"ms-2 me-3"},S("on")),a.createElement("div",{className:"btn-group mb-1"},N.map(function(e){return a.createElement("button",{key:e,className:(n=e,r="btn border",t.values.daysOfWeek.includes(n)?r+=" btn-dark":r+=" btn-outline-dark",r),onClick:function(n){!function(e,n){e.preventDefault();var a,r=t.values.daysOfWeek.includes(n)?t.values.daysOfWeek.filter(function(e){return e!==n}):[].concat(function(e){if(Array.isArray(e))return g(e)}(a=t.values.daysOfWeek)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||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}}(a)||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.")}(),[n]);0!==r.length&&t.setFieldValue("daysOfWeek",r)}(n,e)},type:"button"},T(e).charAt(0));var n,r})))))),a.createElement("div",{className:"rounded p-2 bg-light-blue text-info fw-semibold mb-3"},function(e){switch(e.repeat){case"daily":return S("summary",{time:x(e.startAt),repeat:e.repeat});case"weekly":var t,n=N.filter(function(t){return e.daysOfWeek.includes(t)}).map(function(e){return T(e)});return t=n.length>=2?n.slice(0,n.length-1).join(", ")+", and "+n[n.length-1]:n.join(", "),S("weeklySummary",{weekdays:t,time:x(e.startAt),repeat:e.repeat})}}(t.values)),a.createElement(f.A,{isNew:!1,variant:"outline-dark"}))}var A=n(62394),j="rostering.settings.schedule",I=s.Ry().shape({daysOfWeek:s.IX().min(1),startAt:s.Rx().min(0).max(23).required(),repeat:s.nK().oneOf(["daily","weekly"]).default("daily")});function L(e){return a.createElement("div",{className:"py-3 border-bottom w-100"},a.createElement("h2",{className:"h4"},a.createElement(b.x,{namespace:j,phrase:"heading"})),a.createElement(m.n,{initialValues:(t=e.settings.fullSyncSchedule,n=A.y.parseUTCToLocal({utcHour:t.hour,utcWeekdays:t.daysOfWeek,utcMinute:t.minute}),{startAt:n.hour,daysOfWeek:n.daysOfWeek,repeat:7===t.daysOfWeek.length?"daily":"weekly"}),onSubmit:function(t,n){e.onSave(function(e,t){var n=function(e){var t=e.hour,n=e.minute,a=e.weekdays.map(function(e){return u.O.buildUTCDate(e,t,n)});return{hour:+u.O.format(i.m.first(a),"HH"),daysOfWeek:a.map(function(e){return e.getDay()}),minute:+u.O.format(i.m.first(a),"mm")}}({hour:e.startAt,weekdays:e.daysOfWeek,minute:0});return{fullSyncSchedule:{daysOfWeek:"daily"===e.repeat?[0,1,2,3,4,5,6]:n.daysOfWeek,hour:n.hour,minute:n.minute,enabled:t.enabled}}}(t,e.settings.fullSyncSchedule),n)},validationSchema:I},a.createElement(C,null)));var t,n}var P=n(18549),W=n(16714),F=n(44538),R=n(31949),D=n(69883),H=n(79612),G=n(14070),B=n(97291),M=n(81803),Z=n(52834),K=n(56736);const U={settings:"K6Qs1",spinner:"PDZWp"};var V=c.T.encloseNamespace("rostering.rosteringSyncSettings");function z(){var e,t,n,c=o.a.useBasicFetch(R.N.currentUser()),s=o.a.useBasicFetch(F.K.getRostering()),i=o.a.useBasicFetch((null===(e=s.data)||void 0===e?void 0:e.id)&&F.K.getSyncScheduleSettings(s.data.id)),u=o.a.useGetFetch(),m=(0,D.Z)();(0,H.M)({title:V("pageTitle")});var d=(0,K.B)(c.data),p=d.syncNow,f=d.fullSync;return a.createElement(M.d,{heading:V("heading"),breadcrumbs:[V("breadcrumb")],headingButton:function(){var e;return"Active"!==(null===(e=s.data)||void 0===e?void 0:e.status)?a.createElement(a.Fragment,null):a.createElement(P.G,{onSyncNow:p,onFullSync:f})},requiredPermissions:W.C.Rostering},"Active"===(null===(t=s.data)||void 0===t?void 0:t.status)&&a.createElement(l.E,{active:"settings",appLinks:{syncJobs:{application:B.O.SETTINGS,action:G.e.Settings.ROSTERING},settings:{application:B.O.SETTINGS,action:G.e.Settings.ROSTERING_SETTINGS}}}),"Active"!==(null===(n=s.data)||void 0===n?void 0:n.status)?a.createElement(Z.y,null):a.createElement("div",{className:"d-flex flex-column align-items-center justify-content-center ".concat(U.settings)},i.data?a.createElement(a.Fragment,null,a.createElement(L,{onSave:function(e,t){var n=Object.assign(Object.assign({},e),{userId:c.data.id,customerId:c.data.customerId});u(F.K.updateScheduleSetting(n,s.data.id,function(){return m.success(V("success"))},function(){return m.error(V("error"))},function(){return null==t?void 0:t()}))},settings:i.data})):a.createElement("div",{className:U.spinner},a.createElement(r.Z,{as:"div",animation:"border",role:"status"}))))}},56736:(e,t,n)=>{n.d(t,{B:()=>p});var a=n(60139),r=n(23481),c=n(20354),o=n(67651),l=n(72081),s=n(38389),i=n(4594),u=n(44538),m=n(69883),d=r.T.encloseNamespace("rostering.syncUtils"),p=function(e){var t=c.a.useGetFetchAsync(),n=(0,m.Z)();return e?{fullSync:function(){},syncNow:function(){var r={type:a.NK.Success,heading:d("startSyncAlertHeading"),message:d("startSyncAlertBody"),appLinkText:d("startSyncAlertAppLinkText"),appLinkClassName:"info-link"},c={name:l.g.Rostering,type:s.m.Rostering,metadata:{targetMasterId:e.customerId,targetMasterType:i.E.Customer},customerId:e.customerId,dataType:o.B.Learner};t(u.K.createJob(c,function(){n.success(r)},function(){n.error(d("error"))}))}}:{syncNow:function(){},fullSync:function(){}}}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=7122-1555ea40e4-lite.chunk.js.map