@clickview/lite 0.48.0-rc.7 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
- package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
- package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
- package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
- package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
- package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
- /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7708],{26055:(e,t,r)=>{r.d(t,{A:()=>n});var n=r(32735).createContext(null)},12458:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(1048),a=r(49985),o=r(65858),s=r(58739),c=["userIdMap","params","action","subAction","allUsersSelected","allUsersCount","scrollContainer"],i={getAnalyticsActionName:function(e){if(!(null==e?void 0:e.action))return null;switch(e.action){case"activation":return(null==e?void 0:e.subAction)?"deactivate"===e.subAction?"Deactivate":"Reactivate":"Deactivate / reactivate";case"addToClassroom":return"Add to classroom";case"changeYearGroup":return"Change year group";case"delete":return"Delete user";case"resetEmail":return"Send password reset email";case"activationEmail":return"Send account activation email";case"resetPassword":return"Reset password";case"yearGroupRollover":return"Annual year group rollover";case"removeFromSchool":return"Remove user";default:return null}},onClickNext:function(e,t){if(e){var r={userCount:e.userIdMap.size,step:t},s=i.getAnalyticsActionName(e);s&&(r.action=s);var l=n.t.omit(e,c);Object.keys(l).length&&(r.actionData=l),a.k.logUserAction(r,{location:o.LZ.BulkUserActionsWizard,workflowPhase:o.eu.Next,actionType:o.Vw.BulkAction,entity:o.py.User})}},logYearGroupRolloverEntry:function(e){a.k.logUserAction({action:i.getAnalyticsActionName({action:"yearGroupRollover"})},{entity:o.py.User,actionType:o.Vw.BulkAction,workflowPhase:o.eu.Start,location:e})},getJobStatus:function(e){switch(e){case s.K.Completed:return"Success";case s.K.CompletedWithError:return"Completed with some errors";case s.K.Failed:return"Failed";default:return null}}}},88319:(e,t,r)=>{r.d(t,{q:()=>O});var n=r(32735),a=r(70680),o=r(20354),s=r(49985),c=r(65858),i=r(12458),l=r(11607),u=r(83345);function d(e){var t=e.childComponent;return n.createElement("ul",{className:"m-0 list-unstyled striped-list"},e.objects.map((function(r){return n.createElement(t,{key:r.id,object:r,objectType:e.objectType})})))}var m=r(4594),p=r(76881),f="userManager.wizardCompletedWithError";function g(e){var t;return(null===(t=e.erroredObjects)||void 0===t?void 0:t.length)?n.createElement(u.D.Provider,{value:f},n.createElement("div",{className:"pb-3"},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",null,n.createElement("h2",{className:"h4 mb-3"},n.createElement(u.x,{phrase:"Create"===e.actionVerb?"headingCreate":"headingAction"})),n.createElement("p",null,n.createElement(u.x,{phrase:e.objectType===m.E.User?"Create"===e.actionVerb?e.userType===p.Y.Learner?"totalCreatedStudents":"totalCreatedStaff":e.userType===p.Y.Learner?"totalActionedStudents":"totalActionedStaff":e.objectType===m.E.Video?"totalActionedVideos":"totalActionedItems",options:{totalUpdated:e.totalObjects-e.totalErroredResults,totalObjects:e.totalObjects}})))),n.createElement("div",{className:"d-flex align-items-cetner justify-content-between mb-2"},n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(u.x,{phrase:"Create"===e.actionVerb?"unsuccessfulCreations":"unsuccessfulActions",options:{smartCount:e.totalErroredResults}})),!!e.actionButton&&n.createElement(l.L,{className:"info-link",onClick:function(){return e.actionButton.onClick(e.erroredObjects)}},e.actionButton.text)),n.createElement(d,{objects:e.erroredObjects,objectType:e.objectType,childComponent:function(t){return e.getErrorListItem(t.object)}}))):n.createElement(n.Fragment,null)}var y=r(98269),b=r(12778);const v={imageWidth:"Gjry1"};var h="userManager.wizardFailed";function C(e){var t=b.o.getSupportRequestUrl();return n.createElement("div",{className:"d-flex flex-column align-items-center"},n.createElement("div",{className:"".concat(v.imageWidth," text-center py-4")},n.createElement("img",{className:"img-fluid",src:e.failedImageUrl})),n.createElement("h2",{className:"h3"},n.createElement(u.x,{namespace:h,phrase:"heading"})),n.createElement("p",{className:"mb-0"},n.createElement(u.x,{namespace:h,phrase:"Create"===e.actionVerb?"failedCreate":"failedAction"})),!!t&&n.createElement("p",null,n.createElement(u.x,{namespace:h,phrase:"contactSupport",options:{href:t,linkClass:"info-link"}})),e.onClickTryAgain&&n.createElement(y.Z,{variant:"outline-dark",className:t?"":"mt-3",onClick:e.onClickTryAgain},n.createElement(u.x,{namespace:h,phrase:"tryAgain"})))}var E=r(36848);const j={imageWidth:"picjj"};var A="userManager.wizardSucceeded";function k(e){return n.createElement("div",{className:"d-flex flex-column align-items-center"},n.createElement("div",{className:"".concat(j.imageWidth," text-center pt-4 pb-2")},n.createElement("img",{className:"img-fluid",src:e.successImageUrl})),n.createElement("h2",{className:"h3"},n.createElement(u.x,{namespace:A,phrase:"success"})),n.createElement("p",{className:"text-center",dangerouslySetInnerHTML:{__html:e.message}}),e.finishAppLink&&n.createElement(E.F,{className:"btn btn-dark",appLink:e.finishAppLink,onClick:e.onFinish},n.createElement(u.x,{namespace:A,phrase:"finish"})))}var S,w=r(96728),T=r(58739),I=r(38389);!function(e){e[e.All=0]="All",e[e.NoAction=1]="NoAction",e[e.Succeed=2]="Succeed",e[e.Failed=3]="Failed"}(S||(S={}));var U=r(60115),x=r(64818),F=r(89476);function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function O(e){var t,r,l=(0,a.I0)(),u=function(e,t){var r,n=(0,a.I0)(),s=function(r){return t(e,S.Failed,r)},c=(0,U.K)(s,(function(e){return o.a.getFetch(n)(s(e))})),i=c.items,l=c.isFetching,u=null!==(r=null==i?void 0:i.map((function(e){return!e.objectData&&e.metadata&&"firstname"in e.metadata?{name:e.metadata.firstname,surname:e.metadata.surname,userType:x.l.getUserType(e.metadata),username:e.metadata.username,errorCode:e.status}:Object.assign(Object.assign({},e.objectData),{errorCode:e.status})})))&&void 0!==r?r:[];return{isFetching:l,objects:u,count:u.length}}(e.job.id,e.getResultsRequest),d=(0,F.f)(),m=n.useContext(w.e),p=m.setShowButtons,f=m.showButtons,y=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,s,c=[],i=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);i=!0);}catch(e){l=!0,a=e}finally{try{if(!i&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(l)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?N(e,t):void 0}}(t,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.")}()),b=y[0],v=y[1];return n.useEffect((function(){e.job.type===I.m.RolloverYearGroup&&l({type:o.a.Actions.INVALIDATE,keys:["year:group:rollover:status"],request:null})}),[e.job.type]),n.useEffect((function(){var t;if(!e.preventLoggingAnalytics&&!b){v(!0);var r=Object.assign(Object.assign({},null!==(t=e.analyticsData)&&void 0!==t?t:{}),{id:e.job.id,userCount:e.summary.totalProcessed,totalSucceeded:e.summary.totalSucceeded,totalErrored:e.summary.totalErrored,totalNoAction:e.summary.totalNoAction}),n=i.I.getJobStatus(e.job.status);n&&(r.status=n);var a={workflowPhase:c.eu.Complete};e.analyticsOptions&&(a=s.k.mergeOptions(e.analyticsOptions,a)),s.k.logUserAction(r,a)}}),[e.preventLoggingAnalytics,b]),n.useEffect((function(){e.navLockId&&d.unlock(e.navLockId)}),[]),n.useEffect((function(){switch(e.job.status){case T.K.Completed:case T.K.Failed:f&&p(!1);break;case T.K.CompletedWithError:f||p(!0)}}),[e.job.status]),e.job.status===T.K.Completed?n.createElement(k,{message:e.actionSucceededMessage,successImageUrl:e.successImageUrl,actionVerb:e.actionVerb,finishAppLink:e.finishAppLink,onFinish:e.onFinish}):e.job.status===T.K.CompletedWithError?n.createElement(g,{erroredObjects:u.objects,totalObjects:e.objectCount,totalErroredResults:u.count,userType:null==e?void 0:e.userType,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl,actionVerb:e.actionVerb,objectType:e.objectType,getErrorListItem:e.getErrorListItem,actionButton:e.errorActionButton}):n.createElement(C,{onClickTryAgain:e.onClickTryAgain,failedImageUrl:e.failedImageUrl,actionVerb:e.actionVerb})}},58739:(e,t,r)=>{var n;r.d(t,{K:()=>n}),function(e){e[e.Submitted=0]="Submitted",e[e.Queued=1]="Queued",e[e.Pending=2]="Pending",e[e.InProgress=3]="InProgress",e[e.Completed=4]="Completed",e[e.CompletedWithError=5]="CompletedWithError",e[e.Failed=6]="Failed"}(n||(n={}))},94644:(e,t,r)=>{r.d(t,{r:()=>u});var n=r(50242),a=r(81886),o=r(67058),s=r(14553),c=r(49267),i=r(49075),l={notFound:o.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:i._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},l),t);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new s.badRequest):r.forbidden||a.Q.Ry.throw(new s.forbidden.privacy):r.notFound||a.Q.Ry.throw(new s.notFound))}}},91286:(e,t,r)=>{r.d(t,{v:()=>s});var n=r(32735),a=r(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,t,r){var s=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){s.forEach((function(e){(0,a.r)(e.statusCode,t,r)}))}),[o(s),t,r])}},60115:(e,t,r)=>{r.d(t,{K:()=>l});var n=r(32735),a=r(50242),o=r(91967),s=400,c=r(45719);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function l(e,t,r,l,u,d){var m,p,f,g,y=(m=(0,n.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,s,c=[],i=!0,l=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);i=!0);}catch(e){l=!0,a=e}finally{try{if(!i&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(l)throw a}}return c}}(m,p)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,t):void 0}}(m,p)||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.")}()),b=y[0],v=y[1],h=t,C=(0,c.P)((function(t){if(!e)return null;var r=e(t);return r?r.key:null}),l,u);return f={fetchNextPage:function(){if(t&&e&&C)return v((function(e){return e+1})),h(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},g=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-s)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-s)return;f.fetchNextPage()}},(0,n.useEffect)((function(){var e=o.q.throttle(g,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,n.useEffect)((function(){C&&C.shouldInitialFetch&&t&&(h(),v((function(e){return e+1})))}),[null==C?void 0:C.shouldInitialFetch,t]),(0,n.useEffect)((function(){var e,t;if((null==C?void 0:C.statusCode)&&o.q.isFunction(r)){var n=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));n!==a.k.ClientError&&n!==a.k.ServerError||r(b,C.statusCode)}}),[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},18957:(e,t,r)=>{r.r(t),r.d(t,{BulkUserUploadStatusCompleteView:()=>S});var n=r(32735),a=r(70680),o=r(23481),s=r(81886),c=r(20354),i=r(65858),l=r(56532),u=r(26055),d=r(43820),m=r(45541),p=r(149),f=r(19717),g=r(88319),y=r(4594),b=r(76881),v=r(39151),h=r(31949),C=r(91286),E=r(99742),j=r(29613),A=r(18087),k=o.T.encloseNamespace("userManager.bulkUserUploadStatusCompleted");function S(e){var t,r,o=(0,m.V)(),S=o.users,w=o.existingUserToAdd,T=o.existingUsersHash,I=(0,A.Y)(e.userType),U=c.a.useBasicFetch(h.N.currentUser()),x=c.a.useBasicFetch(v.L.config()),F=c.a.useBasicFetch(j.q.getJob(e.jobId)),N=c.a.useBasicFetch(j.q.getJobSummary(e.jobId));(0,C.v)(F);var O=(0,a.I0)(),R=p.b.useCreateJobErrorAlert(),L=f.b.getNewUsers(S,T);function P(t){s.Q.C$.trigger(Object.assign(Object.assign({},I.userUploadStatus.polling),{params:{userType:e.userType,jobId:t.id}}))}var B=(null!==(t=null==L?void 0:L.length)&&void 0!==t?t:0)+(null!==(r=null==w?void 0:w.length)&&void 0!==r?r:0),q=!!(F.data&&x.data&&U.data&&N.data);return n.createElement(u.A.Provider,{value:d.a.Primary},n.createElement(l.$,{appLinks:I,userType:e.userType,currentStep:"status",canAddExistingUsers:!0},!!q&&n.createElement(g.q,{job:F.data,summary:N.data,objectCount:S.length,objectType:y.E.User,userType:e.userType,finishAppLink:I.userManager,imageCdnUrl:x.data.imageCdnUrl,successImageUrl:E.W.SUCCESS,failedImageUrl:E.W.WIZARD_ERROR,currentUser:U.data,onClickTryAgain:function(){var t=f.b.getJobData({users:L,existingUsers:w,customerId:U.data.customerId,userType:e.userType});c.a.fetch(O,j.q.createJob(t,P,R))},getResultsRequest:j.q.getJobResults,actionSucceededMessage:e.userType===b.Y.Learner?k("createStudentsSuccess",{smartCount:B}):k("createStaffSuccess",{smartCount:B}),navLockId:l.A,actionVerb:"Create",analyticsOptions:{location:i.LZ.BulkUserUploadWizard,entity:i.py.User,actionType:i.Vw.Create,descriptor:i.yh.Bulk},preventLoggingAnalytics:!S,getErrorListItem:function(e){return p.b.getErrorListItem(e,x.data.imageCdnUrl,U.data)}})))}},29613:(e,t,r)=>{r.d(t,{q:()=>s});var n=r(99940),a=r(97395),o=r(149),s={createJob:function(e,t,r){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:n.k.POST,data:e,success:t,error:r}},getJobs:function(e){var t={},r=[],n=[];return e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.bulkActionType?(r=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],t.type=r):t.type=o.O,e.userType&&(n=Array.isArray(e.userType)?e.userType:[e.userType],t.dataType=n),{url:a._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(r.sort().join(":"),":").concat(n.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,t,r){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:t,error:r}},getJobResults:function(e,t,r,n,o){var s={status:t};return r&&(s.cursor=r),{url:a._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),s),key:"job:".concat(e,":results:").concat(t,":").concat(r),success:n,error:o}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:n.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}}}]);
|
|
2
|
-
//# sourceMappingURL=7708-
|
|
2
|
+
//# sourceMappingURL=7708-e91903481a-lite.chunk.js.map
|
package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7708-ece31b78a9-lite.chunk.js","mappings":"wIAIaA,E,SAA2B,cAAuC,K,kFCElEC,EAA0E,CACrF,YAAa,SAAU,SAAU,YAAa,mBAAoB,gBAAiB,mBCIxEC,EAAiC,CAC5CC,uBAAsB,SAACC,GACrB,KAAKA,aAAS,EAATA,EAAWC,QACd,OAAO,KAET,OAAQD,EAAUC,QAChB,IAAK,aACH,OAAKD,aAAS,EAATA,EAAWE,WAGY,eAAxBF,EAAUE,UACL,aAEF,aALE,0BAOX,IAAK,iBACH,MAAO,mBACT,IAAK,kBACH,MAAO,oBACT,IAAK,SACH,MAAO,cACT,IAAK,aACH,MAAO,4BACT,IAAK,kBACH,MAAO,gCACT,IAAK,gBACH,MAAO,iBACT,IAAK,oBACH,MAAO,6BACT,IAAK,mBACH,MAAO,cACT,QACE,OAAO,KAEb,EAEAC,YAAW,SAACH,EAAqCI,GAC/C,GAAKJ,EAAL,CAGA,IAAMK,EAA4B,CAChCC,UAAWN,EAAUO,UAAUC,KAC/BC,KAAML,GAGFM,EAAaZ,EAA+BC,uBAAuBC,GAErEU,IACFL,EAAcJ,OAASS,GAEzB,IAAMC,EAAaC,EAAA,OAAkBZ,EAAWH,GAG5CgB,OAAOC,KAAKH,GAAYI,SAC1BV,EAAcM,WAAaA,GAE7BK,EAAA,gBAA8BX,EAAe,CAC3CY,SAAU,2BACVC,cAAe,UACfC,WAAY,gBACZC,OAAQ,WAtBF,CAwBV,EAEAC,0BAAyB,SAACJ,GACxBD,EAAA,gBAA8B,CAC5Bf,OAAQH,EAA+BC,uBAAuB,CAAEE,OAAQ,uBACvE,CACDmB,OAAQ,UACRD,WAAY,gBACZD,cAAe,WACfD,SAAAA,GAEJ,EAEAK,aAAY,SAACC,GACX,OAAQA,GACN,KAAKC,EAAA,YACH,MAAO,UACT,KAAKA,EAAA,qBACH,MAAO,6BACT,KAAKA,EAAA,SACH,MAAO,SACT,QACE,OAAO,KAEb,E,+HCjFI,SAAUC,EAA8CC,GAC5D,IAAMC,EAAiBD,EAAME,eAE7B,OACE,sBAAIC,UAAU,kCACXH,EAAMI,QAAQC,KAAI,SAAAC,GACjB,OACE,gBAACL,EAAc,CACbM,IAAKD,EAAOE,GACZF,OAAQA,EACRG,WAAYT,EAAMS,YAGxB,IAGN,C,yBCbMC,EAAY,uCAeZ,SAAUC,EAGdX,G,MAEA,OAAyB,QAApB,EAAAA,EAAMY,sBAAc,eAAEvB,QAiBzB,gBAAC,aAAiC,CAACwB,MAAOH,GACxC,uBAAKP,UAAU,QACb,uBAAKA,UAAU,kCACb,2BACE,sBAAIA,UAAU,WACZ,gBAACW,EAAA,EAAI,CAACC,OAA6B,WAArBf,EAAMgB,WAA0B,gBAAkB,mBAGlE,yBACE,gBAACF,EAAA,EAAI,CACHC,OAvBRf,EAAMS,aAAeQ,EAAA,OACE,WAArBjB,EAAMgB,WACDhB,EAAMkB,WAAaC,EAAA,UAAoB,uBAAyB,oBAElEnB,EAAMkB,WAAaC,EAAA,UAAoB,wBAA0B,qBAEtEnB,EAAMS,aAAeQ,EAAA,QAChB,sBAEF,qBAeKG,QAAS,CACPC,aAAcrB,EAAMsB,aAAetB,EAAMuB,oBACzCD,aAActB,EAAMsB,mBAO9B,uBAAKnB,UAAU,0DACb,qBAAGA,UAAU,oBACX,gBAACW,EAAA,EAAI,CACHC,OAA6B,WAArBf,EAAMgB,WAA0B,wBAA0B,sBAClEI,QAAS,CAAEI,WAAYxB,EAAMuB,0BAI9BvB,EAAMyB,cACP,gBAACC,EAAA,EAAS,CACRvB,UAAU,YACVwB,QAAS,kBAAM3B,EAAMyB,aAAaE,QAAQ3B,EAAMY,eAAe,GAE9DZ,EAAMyB,aAAaG,OAK1B,gBAAC7B,EAAU,CACTK,QAASJ,EAAMY,eACfH,WAAYT,EAAMS,WAClBP,eAAgB,SAAA2B,GAAU,OAAI7B,EAAM8B,iBAAiBD,EAAWvB,OAAO,MAzDtE,gCA8DX,C,0BCrGA,SAAgB,WAAa,SCQ7B,IAAM,EAAY,2BAUZ,SAAUyB,EAAa/B,GAC3B,IAAMgC,EAAaC,EAAA,yBAEnB,OACE,uBAAK9B,UAAU,yCACb,uBAAKA,UAAS,UAAK,aAAiB,sBAClC,uBACEA,UAAU,YACV+B,IAAKlC,EAAMmC,kBAGf,sBAAIhC,UAAU,MACZ,gBAACW,EAAA,EAAI,CAACJ,UAAW,EAAWK,OAAO,aAGrC,qBAAGZ,UAAU,QACX,gBAACW,EAAA,EAAI,CAACJ,UAAW,EAAWK,OAA6B,WAArBf,EAAMgB,WAA0B,eAAiB,oBAGpFgB,GACD,yBACE,gBAAClB,EAAA,EAAI,CACHJ,UAAW,EACXK,OAAO,iBACPK,QAAS,CAAEgB,KAAMJ,EAAYK,UAAW,gBAK7CrC,EAAMsC,iBACL,gBAACC,EAAA,EAAM,CAACC,QAAQ,eAAerC,UAAY6B,EAAsB,GAAT,OAAaL,QAAS3B,EAAMsC,iBAClF,gBAACxB,EAAA,EAAI,CAACJ,UAAW,EAAWK,OAAO,cAK7C,C,eCtDA,SAAgB,WAAa,SCS7B,IAAM,EAAY,8BAYZ,SAAU0B,EAAgBzC,GAC9B,OACE,uBAAKG,UAAU,yCACb,uBAAKA,UAAS,UAAK,aAAiB,2BAClC,uBACEA,UAAU,YACV+B,IAAKlC,EAAM0C,mBAGf,sBAAIvC,UAAU,MACZ,gBAACW,EAAA,EAAI,CAACJ,UAAW,EAAWK,OAAO,aAErC,qBAAGZ,UAAU,cAAcwC,wBAAyB,CAAEC,OAAQ5C,EAAM6C,WACnE7C,EAAM8C,eACL,gBAACC,EAAA,EAAgB,CAAC5C,UAAU,eAAe6C,QAAShD,EAAM8C,cAAenB,QAAS3B,EAAMiD,UACtF,gBAACnC,EAAA,EAAI,CAACJ,UAAW,EAAWK,OAAO,YAK7C,C,IC1CYmC,E,kCAAZ,SAAYA,GACV,iBACA,2BACA,yBACA,sBACD,CALD,CAAYA,IAAAA,EAAoB,K,+ICoD1B,SAAUC,EAGdnD,GAEA,I,IAAMoD,GAAW,UACXxC,ECvCF,SACJyC,EACAC,G,MAEMF,GAAW,UAEXG,EAAiB,SAACC,GACtB,OAAOF,EACLD,EACAH,EAAqBO,OACrBD,EAEJ,EAMA,GAGI,OAAyCD,GAP3B,SAACC,GACjB,OAAO,aAAgBJ,EAAhB,CAA0BG,EAAeC,GAClD,IAGSE,EAAc,EAArBC,MACYC,EAAwB,EAApCC,WAGIzD,EAeJ,QAf8C,EAAAsD,aAAc,EAAdA,EAAgBrD,KAAI,SAAAyD,GAClE,OAAKA,EAAOC,YAAcD,EAAOE,UAAY,cAAeF,EAAOE,SAC1D,CACLC,KAAMH,EAAOE,SAASE,UACtBC,QAASL,EAAOE,SAASG,QACzBjD,SAAUkD,EAAA,cAAuBN,EAAOE,UACxCK,SAAUP,EAAOE,SAASK,SAC1BC,UAAWR,EAAOjE,QAIf,OAAP,wBACKiE,EAAOC,YAAU,CACpBO,UAAWR,EAAOjE,QAEtB,WAAE,QAAI,GAEN,MAAO,CACLgE,WAAYD,EACZxD,QAASA,EACTmE,MAAOnE,EAAQf,OAEnB,CDNyBmF,CAA+BxE,EAAMyE,IAAIjE,GAAIR,EAAMsD,mBACpEoB,GAAU,EAAAC,EAAA,KAChB,EAAwC,aAAiBC,EAAA,GAAjDC,EAAc,EAAdA,eAAgBC,EAAW,EAAXA,YAE2C,G,EAArB,YAAe,G,EAAM,E,k5BAA3DC,EAAc,KAAEC,EAAiB,KAmEzC,OAjEA,aAAgB,WACVhF,EAAMyE,IAAIQ,OAASC,EAAA,qBAErB9B,EAAS,CACP6B,KAAM,uBACN7F,KAAM,CAAC,8BACP+F,QAAS,MAGf,GAAG,CAACnF,EAAMyE,IAAIQ,OAEd,aAAgB,W,MACd,IAAIjF,EAAMoF,0BAA2BL,EAArC,CAGAC,GAAkB,GAElB,IAAMrG,EAAa,+BACM,QAAnB,EAAAqB,EAAMrB,qBAAa,QAAI,CAAC,GAAE,CAC9B6B,GAAIR,EAAMyE,IAAIjE,GACd5B,UAAWoB,EAAMqF,QAAQC,eACzBC,eAAgBvF,EAAMqF,QAAQE,eAC9BC,aAAcxF,EAAMqF,QAAQG,aAC5BC,cAAezF,EAAMqF,QAAQI,gBAGzB5F,EAASzB,EAAA,eAA4C4B,EAAMyE,IAAI5E,QAEjEA,IACFlB,EAAckB,OAASA,GAEzB,IAAI6F,EAAyC,CAAElG,cAAe,eAE1DQ,EAAM2F,mBACRD,EAAuBpG,EAAA,eAA6BU,EAAM2F,iBAAkBD,IAG9EpG,EAAA,gBAA8BX,EAAe+G,EAxBrC,CAyBV,GAAG,CAAE1F,EAAMoF,wBAAyBL,IAEpC,aAAgB,WACV/E,EAAM4F,WACRlB,EAAQmB,OAAO7F,EAAM4F,UACzB,GAAG,IAEH,aAAgB,WACd,OAAQ5F,EAAMyE,IAAI5E,QAChB,KAAKC,EAAA,YACL,KAAKA,EAAA,SACCgF,GACFD,GAAe,GAEjB,MAEF,KAAK/E,EAAA,qBACEgF,GACHD,GAAe,GAOvB,GAAG,CAAC7E,EAAMyE,IAAI5E,SAEVG,EAAMyE,IAAI5E,SAAWC,EAAA,YAErB,gBAAC2C,EAAe,CACdI,QAAS7C,EAAM8F,uBACfpD,gBAAiB1C,EAAM0C,gBACvB1B,WAAYhB,EAAMgB,WAClB8B,cAAe9C,EAAM8C,cACrBG,SAAUjD,EAAMiD,WAKlBjD,EAAMyE,IAAI5E,SAAWC,EAAA,qBAErB,gBAACa,EAAwB,CACvBC,eAAgBA,EAAeR,QAC/BkB,aAActB,EAAM+F,YACpBxE,oBAAqBX,EAAe2D,MACpCrD,SAAUlB,aAAK,EAALA,EAAOkB,SACjB8E,YAAahG,EAAMgG,YACnBC,YAAajG,EAAMiG,YACnBjF,WAAYhB,EAAMgB,WAClBP,WAAYT,EAAMS,WAClBqB,iBAAkB9B,EAAM8B,iBACxBL,aAAczB,EAAMkG,oBAMxB,gBAACnE,EAAY,CACXO,gBAAiBtC,EAAMsC,gBACvBH,eAAgBnC,EAAMmC,eACtBnB,WAAYhB,EAAMgB,YAGxB,C,kBErKA,IAAYlB,E,iBAAZ,SAAYA,GACV,6BACA,uBACA,yBACA,+BACA,6BACA,+CACA,sBACD,CARD,CAAYA,IAAAA,EAAc,I,yGC0BpBqG,EAA8B,CAClCC,SAAU,IACVC,UAAW,CACTC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,QAAS,KAEXC,WAAY,KAGR,SAAUC,EACdC,GAMkC,IALlCC,EAAA,uDAA+B,CAAC,EAKhCC,EAAA,uDAAgC,CAAC,EAEjC,GAAKF,EAAL,CAGA,IAAIG,EAGFA,EADmB,iBAAVH,EACIA,EAEAA,EAAK/G,OAGpB,IAAMmH,EAAW,OAAH,wBACTb,GACAU,GAGAE,GAGA,yBAAmCA,KAGpCA,IAAe,aAMfA,IAAe,cAUdD,EAAUJ,YACb,aAAuB,IAAIM,EAASN,YAN/BI,EAAUT,WACb,aAAuB,IAAIW,EAASX,UAAUI,SAX3CK,EAAUV,UACb,aAAuB,IAAIY,EAASZ,UAvBhC,CAuCV,C,6DChFA,SAASa,EAAiBC,GACxB,OAAOA,EAAW7G,KAAI,SAAA8G,GAAG,OAAIA,EAAIJ,UAAU,IAAEK,KAAK,IACpD,CAGM,SAAUC,EACdC,EACAC,EACAC,GAEA,IAAMN,EAAaO,MAAMC,QAAQJ,GAAeA,EAAc,CAACA,IAE/D,IAAAK,YAAU,WACRT,EAAWU,SAAQ,SAAAT,IACjB,OAAgBA,EAAIJ,WAAYQ,EAAcC,EAChD,GACF,GAAG,CAAEP,EAAiBC,GAAaK,EAAcC,GACnD,C,wECnBMK,EAAmB,I,qHC2BnB,SAAUC,EACdC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,I,ID1BgChH,EAC1BiH,ECyB+C,G,GAAX,IAAAC,UAAS,G,EAAE,E,k5BAA7CC,EAAY,KAAEC,EAAe,KAE/BC,EAAcT,EAcdU,GAAW,QAZjB,SAAgBlF,GACd,IAAKuE,EACH,OAAO,KAET,IAAM5C,EAAU4C,EAAWvE,GAE3B,OAAK2B,EAGEA,EAAQ5E,IAFN,IAGX,GAIE2H,EACAC,GAwCF,ODrFgC/G,ECwDd,CAChBuH,cATF,WACE,GAAKX,GAAcD,GAAeW,EAIlC,OADAF,GAAgB,SAAAI,GAAU,OAAIA,EAAa,CAAC,IACrCH,EAAYC,EAASG,WAC9B,EAIEC,WAAWJ,aAAQ,EAARA,EAAUG,YACrBhF,WAAY6E,aAAQ,EAARA,EAAU7E,WACtBuE,gBAAAA,GD3DIC,EAAe,WACnB,IAAIjH,EAAQyC,WAAZ,CAGA,GAAKzC,EAAQgH,gBAON,CACL,IAAQA,EAAoBhH,EAApBgH,gBAKR,GAJ4BA,EAAgBW,wBAAwBC,OAASZ,EAAgBa,UAEzEb,EAAgBc,aAAerB,EAGjD,MACH,MAVC,GAJ4BsB,OAAOC,YAAcC,SAASC,gBAAgBL,UAEtDI,SAASC,gBAAgBJ,aAAerB,EAG1D,OAWJzG,EAAQuH,eAnBA,CAoBV,GAEA,IAAAhB,YAAU,WACR,IAAM4B,EAAWC,EAAA,WAAwBnB,EAAc,KAEjDD,EAAkBhH,EAAQgH,iBAAmBe,OAKnD,OAHI/H,EAAQ0H,SACVV,EAAgBqB,iBAAiB,SAAUF,GAEtC,kBAAMnB,EAAgBsB,oBAAoB,SAAUH,EAAS,CACtE,GAAG,CAAEnI,EAAQ0H,QAAS1H,EAAQuH,cAAevH,EAAQgH,mBC6BrD,IAAAT,YAAU,WACHe,GAGDA,EAASiB,oBAAsB3B,IACjCS,IACAD,GAAgB,SAAAI,GAAU,OAAIA,EAAa,CAAC,IAEhD,GAAG,CAAEF,aAAQ,EAARA,EAAUiB,mBAAoB3B,KAEnC,IAAAL,YAAU,W,QACR,IAAKe,aAAQ,EAARA,EAAU3B,aAAeyC,EAAA,aAA0BvB,GAAxD,CAGA,IAAM2B,IAAoE,QAA/B,EAAmB,QAAnB,EAAAlB,EAAS3B,kBAAU,eAAE8C,kBAAU,eAAEC,OAAO,EAAG,IAElFF,IAAoBG,EAAA,eAA+BH,IAAoBG,EAAA,eAG3E9B,EAAQM,EAAcG,EAAS3B,WAPvB,CAQV,GAAG,CAAC2B,aAAQ,EAARA,EAAU3B,aAEP,CACLpD,MAAO+E,aAAQ,EAARA,EAAU/E,MACjBmF,WAAWJ,aAAQ,EAARA,EAAUG,YACrBA,WAAYH,aAAQ,EAARA,EAAUG,WACtBhF,WAAY6E,aAAQ,EAARA,EAAU7E,WACtBmG,WAAYtB,aAAQ,EAARA,EAAUsB,WACtBC,sBAAuBvB,aAAQ,EAARA,EAAUuB,sBAErC,C,iTC3EMC,EAAY,qBADA,6CAGZ,SAAUC,EAAiCnK,G,QAC/C,GAAwD,SAAhDoK,EAAK,EAALA,MAAOC,EAAiB,EAAjBA,kBAAmBC,EAAiB,EAAjBA,kBAE5BC,GAAW,OAAuBvK,EAAMkB,UAExC8E,EAAc,kBAAkC,mBAChDwE,EAAS,kBAA6B,cACtC/F,EAAM,kBAA+B,WAAmBzE,EAAMqD,QAC9DgC,EAAU,kBAAsC,kBAA0BrF,EAAMqD,SAEtF,OAAqBoB,GAErB,IAAMrB,GAAW,UAEXqH,EAAmB,6BAEnBC,EAAW,gBAAiCN,EAAOE,GAazD,SAASK,EAAYlG,GACnB,eAA2B,OAAD,wBACrB8F,EAASK,iBAAiBC,SAAO,CACpCC,OAAQ,CACN5J,SAAUlB,EAAMkB,SAChBmC,MAAOoB,EAAIjE,MAGjB,CACA,IAAMuK,GAAmC,QAAhB,EAAAL,aAAQ,EAARA,EAAUrL,cAAM,QAAI,IAA+B,QAAzB,EAAAgL,aAAiB,EAAjBA,EAAmBhL,cAAM,QAAI,GAQ1E2L,KAAevG,EAAIwG,MAAUT,EAAOS,MAAUjF,EAAYiF,MAAU5F,EAAQ4F,MAElF,OACE,gBAAC,aAAiC,CAACpK,MAAO,aACxC,gBAAC,IAA0B,CACzB0J,SAAUA,EACVrJ,SAAUlB,EAAMkB,SAChBxC,YAAY,SACZwM,qBAAmB,KAEhBF,GACD,gBAAC,IAAe,CACdvG,IAAKA,EAAIwG,KACT5F,QAASA,EAAQ4F,KACjBlF,YAAaqE,EAAM/K,OACnBoB,WAAY,SACZS,SAAUlB,EAAMkB,SAChB4B,cAAeyH,EAASY,YACxBlF,YAAauE,EAAOS,KAAKhF,YACzBvD,gBAAiB,YACjBP,eAAgB,iBAChB6D,YAAaA,EAAYiF,KACzB3I,gBAlDV,WACE,IAAM8I,EAAU,eAAgC,CAC9ChB,MAAOM,EACPW,cAAehB,EACfiB,WAAYtF,EAAYiF,KAAKK,WAC7BpK,SAAUlB,EAAMkB,WAGlB,UAAakC,EAAU,cAAsBgI,EAAST,EAAaF,GACrE,EA0CUnH,kBAAmB,kBACnBwC,uBA7BD9F,EAAMkB,WAAa,YACtBgJ,EAAU,wBAAyB,CAAE1I,WAAYuJ,IACjDb,EAAU,qBAAsB,CAAE1I,WAAYuJ,IA4B1CnF,UAAW,IACX5E,WAAW,SACX2E,iBAAkB,CAChBpG,SAAU,0BACVG,OAAQ,UACRD,WAAY,YACZ8L,WAAY,WAEdnG,yBAA0BgF,EAC1BtI,iBAAkB,SAACxB,GAAiC,OAClD,qBAAuCA,EAAQkK,EAAOS,KAAKhF,YAAaD,EAAYiF,KAAK,KAOvG,C,sEC5GaO,EAAc,CACzBC,UAAS,SACPR,EACAS,EACAC,GAEA,MAAO,CACLC,IAAK,0BACLrL,IAAK,aACL0E,KAAM,SACNgG,KAAAA,EACAS,QAAAA,EACAC,MAAAA,EAEJ,EAEAE,QAAO,SAACC,GACN,IAAMhB,EAAqB,CAAC,EAExBiB,EAAkC,GAClCC,EAAyB,GA+B7B,OA7BIF,EAAYtI,SACdsH,EAAOtH,OAASsI,EAAYtI,QAE1BsI,EAAYG,OACW,WAArBH,EAAYG,KACdnB,EAAOoB,MAAQ,MAEfpB,EAAOoB,MAAQ,QAGfJ,EAAYK,gBACdJ,EAAkBtE,MAAMC,QAAQoE,EAAYK,gBACxCL,EAAYK,eACZ,CAACL,EAAYK,gBAEjBrB,EAAO7F,KAAO8G,GAGdjB,EAAO7F,KAAO,IAGZ6G,EAAY5K,WACd8K,EAAYvE,MAAMC,QAAQoE,EAAY5K,UAClC4K,EAAY5K,SACZ,CAAC4K,EAAY5K,UAEjB4J,EAAOsB,SAAWJ,GAGb,CACLJ,IAAK,eAAqB,0BAA2Bd,GACrDvK,IAAK,cAAF,OAAgBuL,EAAYtI,OAAM,YAAIsI,EAAYG,KAAI,YAAIF,EAAgBE,OAAO7E,KAAK,KAAI,YAAI4E,EAAUC,OAAO7E,KAAK,MAE3H,EAEAiF,OAAM,SAAC7L,GACL,MAAO,CACLoL,IAAK,2BAAF,OAA6BpL,GAChCD,IAAK,OAAF,OAASC,GAEhB,EAEA8L,eAAc,SACZ9L,EACAkL,EACAC,GAEA,MAAO,CACLC,IAAK,2BAAF,OAA6BpL,EAAE,aAClCD,IAAK,OAAF,OAASC,EAAE,aACd+L,iBAAkB,OAAF,OAAS/L,EAAE,aAC3BkL,QAAAA,EACAC,MAAAA,EAEJ,EAEAa,cAAa,SACXhM,EACAX,EACA2D,EACAkI,EACAC,GAEA,IAAMb,EAAqB,CACzBjL,OAAAA,GAMF,OAHI2D,IACFsH,EAAOtH,OAASA,GAEX,CACLoI,IAAK,eAAqB,2BAAD,OAA4BpL,EAAE,YAAYsK,GACnEvK,IAAK,OAAF,OAASC,EAAE,oBAAYX,EAAM,YAAI2D,GACpCkI,QAAAA,EACAC,MAAAA,EAEJ,EAEAc,2BAA0B,SAACnB,GACzB,MAAO,CACLM,IAAK,4CAAF,OAA8CN,EAAU,yBAC3D/K,IAAK,6BAET,EAEAmM,eAAc,SAACC,GACb,MAAO,CACLf,IAAK,oCACLrL,IAAK,oBAAF,OAAsBoM,EAAIV,OAAO7E,KAAK,MACzCnC,KAAM,SACNgG,KAAM,CACJ2B,OAAQD,GAGd,EAEAE,cAAa,SAACrM,GACZ,MAAO,CACLoL,IAAK,2BAAF,OAA6BpL,EAAE,YAClCD,IAAK,eAAF,OAAiBC,GAExB,E","sources":["file:///app/packages/libs/shared/src/apps/user-manager/context/UserManagerClientContext.ts","file:///app/packages/libs/shared/src/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel.ts","file:///app/packages/libs/shared/src/apps/user-manager/utils/BulkUserActionsAnalyticsHelper.ts","file:///app/packages/libs/shared/src/components/wizard/object-list/ObjectList.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/failed/wizard-failed.scss","file:///app/packages/libs/shared/src/components/wizard/status/statuses/failed/WizardFailed.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/succeeded/wizard-succeeded.scss","file:///app/packages/libs/shared/src/components/wizard/status/statuses/succeeded/WizardSucceeded.tsx","file:///app/packages/libs/shared/src/enums/BatchJobResultStatus.ts","file:///app/packages/libs/shared/src/components/wizard/status/completed/WizardCompleted.tsx","file:///app/packages/libs/shared/src/hooks/useErroredBulkActions.ts","file:///app/packages/libs/shared/src/enums/BatchJobStatus.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/status/complete/BulkUserUploadStatusCompleteView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);","import { Classroom, YearGroup } from 'libs/shared/interfaces';\n\nimport { BulkUserActionOptions, BulkUserSubAction } from '../../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserManagerQueryParams } from '../query-params/UserManagerQueryParams';\n\n// Please keep this array up to date with the interface below, so that the data we log to analytics remains accurate\nexport const BaseBulkUserActionsViewModelKeys: Array<keyof BulkUserActionsViewModel> = [\n 'userIdMap', 'params', 'action', 'subAction', 'allUsersSelected', 'allUsersCount', 'scrollContainer'\n];\n\nexport interface BulkUserActionsViewModel {\n userIdMap?: Map<string, boolean>;\n params?: UserManagerQueryParams;\n\n action?: BulkUserActionOptions; // TODO: Rename this to \"actionCategory\"\n subAction?: BulkUserSubAction; // TODO: Rename this to \"action\"\n\n // Used to determine if we can show year group rollover\n allUsersSelected?: boolean;\n allUsersCount?: number;\n scrollContainer?: HTMLElement;\n}\n\nexport interface BulkUserActionsYearGroupRolloverViewModel extends BulkUserActionsViewModel {\n yearGroup: YearGroup;\n}\n\nexport interface BulkUserActionsAddToClassroomViewModel extends BulkUserActionsViewModel {\n classroom: Classroom;\n}\n\nexport interface BulkUserActionsResetPasswordViewModel extends BulkUserActionsViewModel {\n password: string;\n changeOnNextLogin: boolean;\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\n\nimport { BulkUserActionStepId } from '../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { BaseBulkUserActionsViewModelKeys, BulkUserActionsViewModel } from '../interfaces/viewmodels/BulkUserActionsViewModel';\n\nexport const BulkUserActionsAnalyticsHelper = {\n getAnalyticsActionName(viewModel: BulkUserActionsViewModel): string | null {\n if (!viewModel?.action)\n return null;\n\n switch (viewModel.action) {\n case 'activation': {\n if (!viewModel?.subAction)\n return 'Deactivate / reactivate';\n\n if (viewModel.subAction === 'deactivate')\n return 'Deactivate';\n\n return 'Reactivate';\n }\n case 'addToClassroom':\n return 'Add to classroom';\n case 'changeYearGroup':\n return 'Change year group';\n case 'delete':\n return 'Delete user';\n case 'resetEmail':\n return 'Send password reset email';\n case 'activationEmail':\n return 'Send account activation email';\n case 'resetPassword':\n return 'Reset password';\n case 'yearGroupRollover':\n return 'Annual year group rollover';\n case 'removeFromSchool':\n return 'Remove user';\n default:\n return null;\n }\n },\n\n onClickNext(viewModel: BulkUserActionsViewModel, currentStep: BulkUserActionStepId): void {\n if (!viewModel)\n return;\n\n const analyticsData: HashObject = {\n userCount: viewModel.userIdMap.size,\n step: currentStep\n };\n\n const actionName = BulkUserActionsAnalyticsHelper.getAnalyticsActionName(viewModel);\n\n if (actionName)\n analyticsData.action = actionName;\n\n const actionData = ObjectHelper.omit(viewModel, BaseBulkUserActionsViewModelKeys);\n\n // Adds extra items like the `yearGroup` on year group actions or `password` on the reset pw action\n if (Object.keys(actionData).length)\n analyticsData.actionData = actionData;\n\n AnalyticsHelper.logUserAction(analyticsData, {\n location: LocationContext.BulkUserActionsWizard,\n workflowPhase: WorkflowPhase.Next,\n actionType: UserAction.BulkAction,\n entity: EntityType.User\n });\n },\n\n logYearGroupRolloverEntry(location: LocationContext): void {\n AnalyticsHelper.logUserAction({\n action: BulkUserActionsAnalyticsHelper.getAnalyticsActionName({ action: 'yearGroupRollover' })\n }, {\n entity: EntityType.User,\n actionType: UserAction.BulkAction,\n workflowPhase: WorkflowPhase.Start,\n location\n });\n },\n\n getJobStatus(status: BatchJobStatus): string | null {\n switch (status) {\n case BatchJobStatus.Completed:\n return 'Success';\n case BatchJobStatus.CompletedWithError:\n return 'Completed with some errors';\n case BatchJobStatus.Failed:\n return 'Failed';\n default:\n return null;\n }\n }\n};","import React from 'react';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\n\ninterface ObjectListProps<T extends BaseObject = BaseObject> {\n objects: T[];\n objectType: MasterType;\n childComponent: (props: BaseObjectItemProps<T>) => JSX.Element;\n}\n\nexport interface BaseObjectItemProps<T extends BaseObject = BaseObject> {\n object: T;\n objectType: MasterType;\n}\n\nexport function ObjectList<T extends BaseObject = BaseObject>(props: ObjectListProps<T>): JSX.Element {\n const ChildComponent = props.childComponent;\n\n return (\n <ul className='m-0 list-unstyled striped-list'>\n {props.objects.map(object => {\n return (\n <ChildComponent\n key={object.id}\n object={object}\n objectType={props.objectType}\n />\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ObjectList } from 'libs/shared/components/wizard/object-list/ObjectList';\nimport { BatchJobResultErrorCode } from 'libs/shared/enums/BatchJobResultErrorCode';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, CurrentUser, WizardActionVerb } from 'libs/shared/interfaces';\n\nexport type ObjectWithErrorCode<TObject extends BaseObject> = TObject & {\n errorCode: BatchJobResultErrorCode;\n}\n\nexport interface WizardErrorActionButton<TObject = BaseObject> {\n onClick: (erroredObject: ObjectWithErrorCode<TObject>[]) => void;\n text: string;\n}\n\nconst namespace = 'userManager.wizardCompletedWithError';\n\ninterface WizardCompletedWithErrorProps<TObject> {\n erroredObjects: ObjectWithErrorCode<TObject>[];\n totalObjects: number;\n objectType?: MasterType;\n totalErroredResults: number;\n userType?: UserGroup;\n imageCdnUrl: string;\n actionVerb: WizardActionVerb;\n currentUser?: CurrentUser;\n getErrorListItem?: (erroredObjects: ObjectWithErrorCode<TObject>) => JSX.Element;\n actionButton?: WizardErrorActionButton;\n}\n\nexport function WizardCompletedWithError<\n TObject extends BaseObject = BaseObject\n>(\n props: WizardCompletedWithErrorProps<TObject>\n): JSX.Element {\n if (!props.erroredObjects?.length)\n return <></>;\n\n const getTotalUpdatedPhrase = () => {\n if (props.objectType === MasterType.User) {\n if (props.actionVerb === 'Create')\n return props.userType === UserGroup.Learner ? 'totalCreatedStudents' : 'totalCreatedStaff';\n \n return props.userType === UserGroup.Learner ? 'totalActionedStudents' : 'totalActionedStaff';\n }\n if (props.objectType === MasterType.Video) {\n return 'totalActionedVideos';\n }\n return 'totalActionedItems';\n };\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <div>\n <h2 className='h4 mb-3'>\n <Text phrase={props.actionVerb === 'Create' ? 'headingCreate' : 'headingAction'} />\n </h2>\n\n <p>\n <Text\n phrase={getTotalUpdatedPhrase()}\n options={{\n totalUpdated: props.totalObjects - props.totalErroredResults,\n totalObjects: props.totalObjects\n }}\n />\n </p>\n </div>\n </div>\n\n <div className='d-flex align-items-cetner justify-content-between mb-2'>\n <p className='fw-semibold mb-0'>\n <Text\n phrase={props.actionVerb === 'Create' ? 'unsuccessfulCreations' : 'unsuccessfulActions'}\n options={{ smartCount: props.totalErroredResults }}\n />\n </p>\n\n {!!props.actionButton && (\n <DivButton\n className='info-link'\n onClick={() => props.actionButton.onClick(props.erroredObjects)}\n >\n {props.actionButton.text}\n </DivButton>\n )}\n </div>\n\n <ObjectList<ObjectWithErrorCode<TObject>>\n objects={props.erroredObjects}\n objectType={props.objectType}\n childComponent={childProps => props.getErrorListItem(childProps.object)}\n />\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageWidth\":\"Gjry1\"};","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport styles from './wizard-failed.scss';\n\nconst namespace = 'userManager.wizardFailed';\n\ninterface WizardFailedProps {\n onClickTryAgain?: () => void;\n failedImageUrl: string;\n actionVerb: WizardActionVerb;\n}\n\ntype Props = React.PropsWithChildren<WizardFailedProps>;\n\nexport function WizardFailed(props: Props): JSX.Element {\n const supportUrl = ArticleHelper.getSupportRequestUrl();\n\n return (\n <div className='d-flex flex-column align-items-center'>\n <div className={`${styles.imageWidth} text-center py-4`}>\n <img\n className='img-fluid'\n src={props.failedImageUrl}\n />\n </div>\n <h2 className='h3'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n\n <p className='mb-0'>\n <Text namespace={namespace} phrase={props.actionVerb === 'Create' ? 'failedCreate' : 'failedAction'} />\n </p>\n\n {!!supportUrl && (\n <p>\n <Text\n namespace={namespace}\n phrase='contactSupport'\n options={{ href: supportUrl, linkClass: 'info-link' }}\n />\n </p>\n )}\n\n {props.onClickTryAgain && (\n <Button variant='outline-dark' className={!supportUrl ? 'mt-3' : ''} onClick={props.onClickTryAgain}>\n <Text namespace={namespace} phrase='tryAgain' />\n </Button>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageWidth\":\"picjj\"};","import React from 'react';\n\nimport { AppLink } from 'libs/common/backbone/core';\n\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\n\nimport styles from './wizard-succeeded.scss';\n\nconst namespace = 'userManager.wizardSucceeded';\n\ninterface WizardSucceededProps {\n finishAppLink?: AppLink;\n message: string;\n successImageUrl: string;\n actionVerb?: WizardActionVerb;\n onFinish?: () => void;\n}\n\ntype Props = React.PropsWithChildren<WizardSucceededProps>;\n\nexport function WizardSucceeded(props: Props): JSX.Element {\n return (\n <div className='d-flex flex-column align-items-center'>\n <div className={`${styles.imageWidth} text-center pt-4 pb-2`}>\n <img\n className='img-fluid'\n src={props.successImageUrl}\n />\n </div>\n <h2 className='h3'>\n <Text namespace={namespace} phrase='success' />\n </h2>\n <p className='text-center' dangerouslySetInnerHTML={{ __html: props.message }} />\n {props.finishAppLink && (\n <AppLinkComponent className='btn btn-dark' appLink={props.finishAppLink} onClick={props.onFinish}>\n <Text namespace={namespace} phrase='finish' />\n </AppLinkComponent>\n )}\n </div>\n );\n}","export enum BatchJobResultStatus {\n All = 0,\n NoAction = 1,\n Succeed = 2,\n Failed = 3\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { BulkUserActionsAnalyticsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsAnalyticsHelper';\nimport { ObjectWithErrorCode, WizardCompletedWithError, WizardErrorActionButton } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { WizardFailed } from 'libs/shared/components/wizard/status/statuses/failed/WizardFailed';\nimport { WizardSucceeded } from 'libs/shared/components/wizard/status/statuses/succeeded/WizardSucceeded';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { GetResultsRequest, useErroredBulkActions } from 'libs/shared/hooks/useErroredBulkActions';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BaseObject, BatchJob, BatchJobSummary, CurrentUser, WizardActionVerb } from 'libs/shared/interfaces';\n\ninterface WizardCompletedProps<TObject> {\n job: BatchJob;\n summary: BatchJobSummary;\n userType?: UserGroup;\n objectCount: number;\n objectType: MasterType;\n getResultsRequest: GetResultsRequest;\n onClickTryAgain?: () => void;\n actionSucceededMessage: string;\n actionVerb: WizardActionVerb;\n navLockId?: string;\n onFinish?: () => void;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n preventLoggingAnalytics: boolean;\n\n imageCdnUrl: string;\n failedImageUrl: string;\n successImageUrl: string;\n \n currentUser?: CurrentUser;\n\n finishAppLink?: AppLink;\n \n getErrorListItem?: (erroredObjects: ObjectWithErrorCode<TObject>) => JSX.Element;\n errorActionButton?: WizardErrorActionButton;\n}\n\nexport function WizardCompleted<\n TObject extends BaseObject = BaseObject\n>(\n props: WizardCompletedProps<TObject>\n): JSX.Element {\n const dispatch = useDispatch();\n const erroredObjects = useErroredBulkActions<TObject>(props.job.id, props.getResultsRequest);\n const navLock = useNavLock();\n const { setShowButtons, showButtons } = React.useContext(WizardLayoutContext);\n\n const [ hasLoggedEvent, setHasLoggedEvent ] = React.useState(false);\n\n React.useEffect(() => {\n if (props.job.type === BatchJobType.RolloverYearGroup) {\n // Clear year group rollover status\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: ['year:group:rollover:status'],\n request: null\n });\n }\n }, [props.job.type]);\n\n React.useEffect(() => {\n if (props.preventLoggingAnalytics || hasLoggedEvent)\n return;\n\n setHasLoggedEvent(true);\n\n const analyticsData: HashObject = {\n ...(props.analyticsData ?? {}),\n id: props.job.id,\n userCount: props.summary.totalProcessed,\n totalSucceeded: props.summary.totalSucceeded,\n totalErrored: props.summary.totalErrored,\n totalNoAction: props.summary.totalNoAction\n };\n\n const status = BulkUserActionsAnalyticsHelper.getJobStatus(props.job.status);\n\n if (status)\n analyticsData.status = status;\n \n let analyticsOptionsData: AnalyticsOptions = { workflowPhase: WorkflowPhase.Complete };\n\n if (props.analyticsOptions) {\n analyticsOptionsData = AnalyticsHelper.mergeOptions(props.analyticsOptions, analyticsOptionsData);\n }\n\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptionsData);\n }, [ props.preventLoggingAnalytics, hasLoggedEvent ]);\n\n React.useEffect(() => {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n }, []);\n\n React.useEffect(() => {\n switch (props.job.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.Failed:\n if (showButtons) {\n setShowButtons(false);\n }\n break;\n\n case BatchJobStatus.CompletedWithError:\n if (!showButtons) {\n setShowButtons(true);\n }\n break;\n\n default:\n break;\n }\n }, [props.job.status]);\n\n if (props.job.status === BatchJobStatus.Completed) {\n return (\n <WizardSucceeded\n message={props.actionSucceededMessage}\n successImageUrl={props.successImageUrl}\n actionVerb={props.actionVerb}\n finishAppLink={props.finishAppLink}\n onFinish={props.onFinish}\n />\n );\n }\n\n if (props.job.status === BatchJobStatus.CompletedWithError) {\n return (\n <WizardCompletedWithError<TObject>\n erroredObjects={erroredObjects.objects}\n totalObjects={props.objectCount}\n totalErroredResults={erroredObjects.count}\n userType={props?.userType}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n actionVerb={props.actionVerb}\n objectType={props.objectType}\n getErrorListItem={props.getErrorListItem}\n actionButton={props.errorActionButton}\n />\n );\n }\n\n return (\n <WizardFailed\n onClickTryAgain={props.onClickTryAgain}\n failedImageUrl={props.failedImageUrl}\n actionVerb={props.actionVerb}\n />\n );\n}","import { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ObjectWithErrorCode } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, BatchJobResult } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\n\ninterface GetErroredObjects<TObject> {\n objects: ObjectWithErrorCode<TObject>[];\n isFetching: boolean;\n count: number;\n}\n\nexport type GetResultsRequest = (jobId: string, status: BatchJobResultStatus, cursor?: string) => Flight.Request;\n\nexport function useErroredBulkActions<TObject extends BaseObject>(\n jobId: string,\n getResultsRequest: GetResultsRequest\n): GetErroredObjects<TObject> {\n const dispatch = useDispatch();\n\n const getResultsPage = (cursor?: string) => {\n return getResultsRequest(\n jobId,\n BatchJobResultStatus.Failed,\n cursor\n );\n };\n\n const fetchNext = (cursor?: string) => {\n return Flight.getFetch(dispatch)(getResultsPage(cursor));\n };\n\n const {\n items: erroredResults,\n isFetching: isFetchingErroredResults\n } = useInfiniteList<BatchJobResult<TObject>>(getResultsPage, fetchNext);\n\n const objects: ObjectWithErrorCode<TObject>[] = erroredResults?.map(result => {\n if (!result.objectData && result.metadata && 'firstname' in result.metadata) {\n return {\n name: result.metadata.firstname,\n surname: result.metadata.surname,\n userType: UserHelper.getUserType(result.metadata as any),\n username: result.metadata.username,\n errorCode: result.status\n } as unknown as ObjectWithErrorCode<TObject>;\n }\n\n return {\n ...result.objectData,\n errorCode: result.status\n };\n }) ?? [];\n\n return {\n isFetching: isFetchingErroredResults,\n objects: objects,\n count: objects.length // TODO: Get a proper count from the backend\n };\n}","export enum BatchJobStatus {\n Submitted = 0,\n Queued = 1,\n Pending = 2,\n InProgress = 3,\n Completed = 4,\n CompletedWithError = 5,\n Failed = 6\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, OperationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { BULK_USER_UPLOAD_NAV_LOCK_ID, BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { WizardCompleted } from 'libs/shared/components/wizard/status/completed/WizardCompleted';\nimport { ObjectWithErrorCode } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { BatchJob, BatchJobSummary, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUserUploadStatusCompleted';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function BulkUserUploadStatusCompleteView(props: UserWizardStatusParams): JSX.Element {\n const { users, existingUserToAdd, existingUsersHash } = useBulkUploadUsers();\n\n const appLinks = getUserManagerAppLinks(props.userType);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const job = Flight.useBasicFetch<BatchJob>(JobRequests.getJob(props.jobId));\n const summary = Flight.useBasicFetch<BatchJobSummary>(JobRequests.getJobSummary(props.jobId));\n\n useHandleObjectError(job);\n\n const dispatch = useDispatch();\n\n const onCreateJobError = BulkUserActionsHelper.useCreateJobErrorAlert();\n\n const newUsers = BulkUserUploadHelper.getNewUsers(users, existingUsersHash);\n\n function onClickTryAgain(): void {\n const jobData = BulkUserUploadHelper.getJobData({\n users: newUsers,\n existingUsers: existingUserToAdd,\n customerId: currentUser.data.customerId,\n userType: props.userType\n });\n\n Flight.fetch(dispatch, JobRequests.createJob(jobData, onCreateJob, onCreateJobError));\n }\n\n function onCreateJob(job: BatchJob): void {\n Core.AppLinkHelper.trigger({\n ...appLinks.userUploadStatus.polling,\n params: {\n userType: props.userType,\n jobId: job.id\n }\n });\n }\n const totalUsersCount = (newUsers?.length ?? 0) + (existingUserToAdd?.length ?? 0);\n\n function getSuccessMessage(): string {\n return props.userType === UserGroup.Learner\n ? getPhrase('createStudentsSuccess', { smartCount: totalUsersCount })\n : getPhrase('createStaffSuccess', { smartCount: totalUsersCount });\n }\n\n const dataLoaded = !!job.data && !!config.data && !!currentUser.data && !!summary.data;\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='status'\n canAddExistingUsers\n >\n {!!dataLoaded && (\n <WizardCompleted\n job={job.data}\n summary={summary.data}\n objectCount={users.length}\n objectType={MasterType.User}\n userType={props.userType}\n finishAppLink={appLinks.userManager}\n imageCdnUrl={config.data.imageCdnUrl}\n successImageUrl={ImageUrls.SUCCESS}\n failedImageUrl={ImageUrls.WIZARD_ERROR}\n currentUser={currentUser.data}\n onClickTryAgain={onClickTryAgain}\n getResultsRequest={JobRequests.getJobResults}\n actionSucceededMessage={getSuccessMessage()}\n navLockId={BULK_USER_UPLOAD_NAV_LOCK_ID}\n actionVerb='Create'\n analyticsOptions={{\n location: LocationContext.BulkUserUploadWizard,\n entity: EntityType.User,\n actionType: UserAction.Create,\n descriptor: OperationDescriptor.Bulk\n }}\n preventLoggingAnalytics={!users}\n getErrorListItem={(object: ObjectWithErrorCode<User>) =>\n BulkUserActionsHelper.getErrorListItem(object, config.data.imageCdnUrl, currentUser.data)\n }\n />\n )}\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\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: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\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.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\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};"],"names":["UserManagerClientContext","BaseBulkUserActionsViewModelKeys","BulkUserActionsAnalyticsHelper","getAnalyticsActionName","viewModel","action","subAction","onClickNext","currentStep","analyticsData","userCount","userIdMap","size","step","actionName","actionData","ObjectHelper","Object","keys","length","AnalyticsHelper","location","workflowPhase","actionType","entity","logYearGroupRolloverEntry","getJobStatus","status","BatchJobStatus","ObjectList","props","ChildComponent","childComponent","className","objects","map","object","key","id","objectType","namespace","WizardCompletedWithError","erroredObjects","value","Text","phrase","actionVerb","MasterType","userType","UserGroup","options","totalUpdated","totalObjects","totalErroredResults","smartCount","actionButton","DivButton","onClick","text","childProps","getErrorListItem","WizardFailed","supportUrl","ArticleHelper","src","failedImageUrl","href","linkClass","onClickTryAgain","Button","variant","WizardSucceeded","successImageUrl","dangerouslySetInnerHTML","__html","message","finishAppLink","AppLink","appLink","onFinish","BatchJobResultStatus","WizardCompleted","dispatch","jobId","getResultsRequest","getResultsPage","cursor","Failed","erroredResults","items","isFetchingErroredResults","isFetching","result","objectData","metadata","name","firstname","surname","UserHelper","username","errorCode","count","useErroredBulkActions","job","navLock","useNavLock","WizardLayoutContext","setShowButtons","showButtons","hasLoggedEvent","setHasLoggedEvent","type","BatchJobType","request","preventLoggingAnalytics","summary","totalProcessed","totalSucceeded","totalErrored","totalNoAction","analyticsOptionsData","analyticsOptions","navLockId","unlock","actionSucceededMessage","objectCount","currentUser","imageCdnUrl","errorActionButton","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","getPhrase","BulkUserUploadStatusCompleteView","users","existingUserToAdd","existingUsersHash","appLinks","config","onCreateJobError","newUsers","onCreateJob","userUploadStatus","polling","params","totalUsersCount","dataLoaded","data","canAddExistingUsers","userManager","jobData","existingUsers","customerId","descriptor","JobRequests","createJob","success","error","url","getJobs","queryParams","bulkActionTypes","userTypes","sort","order","bulkActionType","dataType","getJob","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","sendJobReports","ids","jobIds","getJobSummary"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/7708-e91903481a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/context/UserManagerClientContext.ts","file:///app/packages/libs/shared/src/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel.ts","file:///app/packages/libs/shared/src/apps/user-manager/utils/BulkUserActionsAnalyticsHelper.ts","file:///app/packages/libs/shared/src/components/wizard/object-list/ObjectList.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/failed/wizard-failed.scss","file:///app/packages/libs/shared/src/components/wizard/status/statuses/failed/WizardFailed.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/succeeded/wizard-succeeded.scss","file:///app/packages/libs/shared/src/components/wizard/status/statuses/succeeded/WizardSucceeded.tsx","file:///app/packages/libs/shared/src/enums/BatchJobResultStatus.ts","file:///app/packages/libs/shared/src/components/wizard/status/completed/WizardCompleted.tsx","file:///app/packages/libs/shared/src/hooks/useErroredBulkActions.ts","file:///app/packages/libs/shared/src/enums/BatchJobStatus.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/status/complete/BulkUserUploadStatusCompleteView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);","import { Classroom, YearGroup } from 'libs/shared/interfaces';\n\nimport { BulkUserActionOptions, BulkUserSubAction } from '../../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserManagerQueryParams } from '../query-params/UserManagerQueryParams';\n\n// Please keep this array up to date with the interface below, so that the data we log to analytics remains accurate\nexport const BaseBulkUserActionsViewModelKeys: Array<keyof BulkUserActionsViewModel> = [\n 'userIdMap', 'params', 'action', 'subAction', 'allUsersSelected', 'allUsersCount', 'scrollContainer'\n];\n\nexport interface BulkUserActionsViewModel {\n userIdMap?: Map<string, boolean>;\n params?: UserManagerQueryParams;\n\n action?: BulkUserActionOptions; // TODO: Rename this to \"actionCategory\"\n subAction?: BulkUserSubAction; // TODO: Rename this to \"action\"\n\n // Used to determine if we can show year group rollover\n allUsersSelected?: boolean;\n allUsersCount?: number;\n scrollContainer?: HTMLElement;\n}\n\nexport interface BulkUserActionsYearGroupRolloverViewModel extends BulkUserActionsViewModel {\n yearGroup: YearGroup;\n}\n\nexport interface BulkUserActionsAddToClassroomViewModel extends BulkUserActionsViewModel {\n classroom: Classroom;\n}\n\nexport interface BulkUserActionsResetPasswordViewModel extends BulkUserActionsViewModel {\n password: string;\n changeOnNextLogin: boolean;\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\n\nimport { BulkUserActionStepId } from '../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { BaseBulkUserActionsViewModelKeys, BulkUserActionsViewModel } from '../interfaces/viewmodels/BulkUserActionsViewModel';\n\nexport const BulkUserActionsAnalyticsHelper = {\n getAnalyticsActionName(viewModel: BulkUserActionsViewModel): string | null {\n if (!viewModel?.action)\n return null;\n\n switch (viewModel.action) {\n case 'activation': {\n if (!viewModel?.subAction)\n return 'Deactivate / reactivate';\n\n if (viewModel.subAction === 'deactivate')\n return 'Deactivate';\n\n return 'Reactivate';\n }\n case 'addToClassroom':\n return 'Add to classroom';\n case 'changeYearGroup':\n return 'Change year group';\n case 'delete':\n return 'Delete user';\n case 'resetEmail':\n return 'Send password reset email';\n case 'activationEmail':\n return 'Send account activation email';\n case 'resetPassword':\n return 'Reset password';\n case 'yearGroupRollover':\n return 'Annual year group rollover';\n case 'removeFromSchool':\n return 'Remove user';\n default:\n return null;\n }\n },\n\n onClickNext(viewModel: BulkUserActionsViewModel, currentStep: BulkUserActionStepId): void {\n if (!viewModel)\n return;\n\n const analyticsData: HashObject = {\n userCount: viewModel.userIdMap.size,\n step: currentStep\n };\n\n const actionName = BulkUserActionsAnalyticsHelper.getAnalyticsActionName(viewModel);\n\n if (actionName)\n analyticsData.action = actionName;\n\n const actionData = ObjectHelper.omit(viewModel, BaseBulkUserActionsViewModelKeys);\n\n // Adds extra items like the `yearGroup` on year group actions or `password` on the reset pw action\n if (Object.keys(actionData).length)\n analyticsData.actionData = actionData;\n\n AnalyticsHelper.logUserAction(analyticsData, {\n location: LocationContext.BulkUserActionsWizard,\n workflowPhase: WorkflowPhase.Next,\n actionType: UserAction.BulkAction,\n entity: EntityType.User\n });\n },\n\n logYearGroupRolloverEntry(location: LocationContext): void {\n AnalyticsHelper.logUserAction({\n action: BulkUserActionsAnalyticsHelper.getAnalyticsActionName({ action: 'yearGroupRollover' })\n }, {\n entity: EntityType.User,\n actionType: UserAction.BulkAction,\n workflowPhase: WorkflowPhase.Start,\n location\n });\n },\n\n getJobStatus(status: BatchJobStatus): string | null {\n switch (status) {\n case BatchJobStatus.Completed:\n return 'Success';\n case BatchJobStatus.CompletedWithError:\n return 'Completed with some errors';\n case BatchJobStatus.Failed:\n return 'Failed';\n default:\n return null;\n }\n }\n};","import React from 'react';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\n\ninterface ObjectListProps<T extends BaseObject = BaseObject> {\n objects: T[];\n objectType: MasterType;\n childComponent: (props: BaseObjectItemProps<T>) => JSX.Element;\n}\n\nexport interface BaseObjectItemProps<T extends BaseObject = BaseObject> {\n object: T;\n objectType: MasterType;\n}\n\nexport function ObjectList<T extends BaseObject = BaseObject>(props: ObjectListProps<T>): JSX.Element {\n const ChildComponent = props.childComponent;\n\n return (\n <ul className='m-0 list-unstyled striped-list'>\n {props.objects.map(object => {\n return (\n <ChildComponent\n key={object.id}\n object={object}\n objectType={props.objectType}\n />\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ObjectList } from 'libs/shared/components/wizard/object-list/ObjectList';\nimport { BatchJobResultErrorCode } from 'libs/shared/enums/BatchJobResultErrorCode';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, CurrentUser, WizardActionVerb } from 'libs/shared/interfaces';\n\nexport type ObjectWithErrorCode<TObject extends BaseObject> = TObject & {\n errorCode: BatchJobResultErrorCode;\n}\n\nexport interface WizardErrorActionButton<TObject = BaseObject> {\n onClick: (erroredObject: ObjectWithErrorCode<TObject>[]) => void;\n text: string;\n}\n\nconst namespace = 'userManager.wizardCompletedWithError';\n\ninterface WizardCompletedWithErrorProps<TObject> {\n erroredObjects: ObjectWithErrorCode<TObject>[];\n totalObjects: number;\n objectType?: MasterType;\n totalErroredResults: number;\n userType?: UserGroup;\n imageCdnUrl: string;\n actionVerb: WizardActionVerb;\n currentUser?: CurrentUser;\n getErrorListItem?: (erroredObjects: ObjectWithErrorCode<TObject>) => JSX.Element;\n actionButton?: WizardErrorActionButton;\n}\n\nexport function WizardCompletedWithError<\n TObject extends BaseObject = BaseObject\n>(\n props: WizardCompletedWithErrorProps<TObject>\n): JSX.Element {\n if (!props.erroredObjects?.length)\n return <></>;\n\n const getTotalUpdatedPhrase = () => {\n if (props.objectType === MasterType.User) {\n if (props.actionVerb === 'Create')\n return props.userType === UserGroup.Learner ? 'totalCreatedStudents' : 'totalCreatedStaff';\n \n return props.userType === UserGroup.Learner ? 'totalActionedStudents' : 'totalActionedStaff';\n }\n if (props.objectType === MasterType.Video) {\n return 'totalActionedVideos';\n }\n return 'totalActionedItems';\n };\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <div>\n <h2 className='h4 mb-3'>\n <Text phrase={props.actionVerb === 'Create' ? 'headingCreate' : 'headingAction'} />\n </h2>\n\n <p>\n <Text\n phrase={getTotalUpdatedPhrase()}\n options={{\n totalUpdated: props.totalObjects - props.totalErroredResults,\n totalObjects: props.totalObjects\n }}\n />\n </p>\n </div>\n </div>\n\n <div className='d-flex align-items-cetner justify-content-between mb-2'>\n <p className='fw-semibold mb-0'>\n <Text\n phrase={props.actionVerb === 'Create' ? 'unsuccessfulCreations' : 'unsuccessfulActions'}\n options={{ smartCount: props.totalErroredResults }}\n />\n </p>\n\n {!!props.actionButton && (\n <DivButton\n className='info-link'\n onClick={() => props.actionButton.onClick(props.erroredObjects)}\n >\n {props.actionButton.text}\n </DivButton>\n )}\n </div>\n\n <ObjectList<ObjectWithErrorCode<TObject>>\n objects={props.erroredObjects}\n objectType={props.objectType}\n childComponent={childProps => props.getErrorListItem(childProps.object)}\n />\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageWidth\":\"Gjry1\"};","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport styles from './wizard-failed.scss';\n\nconst namespace = 'userManager.wizardFailed';\n\ninterface WizardFailedProps {\n onClickTryAgain?: () => void;\n failedImageUrl: string;\n actionVerb: WizardActionVerb;\n}\n\ntype Props = React.PropsWithChildren<WizardFailedProps>;\n\nexport function WizardFailed(props: Props): JSX.Element {\n const supportUrl = ArticleHelper.getSupportRequestUrl();\n\n return (\n <div className='d-flex flex-column align-items-center'>\n <div className={`${styles.imageWidth} text-center py-4`}>\n <img\n className='img-fluid'\n src={props.failedImageUrl}\n />\n </div>\n <h2 className='h3'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n\n <p className='mb-0'>\n <Text namespace={namespace} phrase={props.actionVerb === 'Create' ? 'failedCreate' : 'failedAction'} />\n </p>\n\n {!!supportUrl && (\n <p>\n <Text\n namespace={namespace}\n phrase='contactSupport'\n options={{ href: supportUrl, linkClass: 'info-link' }}\n />\n </p>\n )}\n\n {props.onClickTryAgain && (\n <Button variant='outline-dark' className={!supportUrl ? 'mt-3' : ''} onClick={props.onClickTryAgain}>\n <Text namespace={namespace} phrase='tryAgain' />\n </Button>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageWidth\":\"picjj\"};","import React from 'react';\n\nimport { AppLink } from 'libs/common/backbone/core';\n\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\n\nimport styles from './wizard-succeeded.scss';\n\nconst namespace = 'userManager.wizardSucceeded';\n\ninterface WizardSucceededProps {\n finishAppLink?: AppLink;\n message: string;\n successImageUrl: string;\n actionVerb?: WizardActionVerb;\n onFinish?: () => void;\n}\n\ntype Props = React.PropsWithChildren<WizardSucceededProps>;\n\nexport function WizardSucceeded(props: Props): JSX.Element {\n return (\n <div className='d-flex flex-column align-items-center'>\n <div className={`${styles.imageWidth} text-center pt-4 pb-2`}>\n <img\n className='img-fluid'\n src={props.successImageUrl}\n />\n </div>\n <h2 className='h3'>\n <Text namespace={namespace} phrase='success' />\n </h2>\n <p className='text-center' dangerouslySetInnerHTML={{ __html: props.message }} />\n {props.finishAppLink && (\n <AppLinkComponent className='btn btn-dark' appLink={props.finishAppLink} onClick={props.onFinish}>\n <Text namespace={namespace} phrase='finish' />\n </AppLinkComponent>\n )}\n </div>\n );\n}","export enum BatchJobResultStatus {\n All = 0,\n NoAction = 1,\n Succeed = 2,\n Failed = 3\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { BulkUserActionsAnalyticsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsAnalyticsHelper';\nimport { ObjectWithErrorCode, WizardCompletedWithError, WizardErrorActionButton } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { WizardFailed } from 'libs/shared/components/wizard/status/statuses/failed/WizardFailed';\nimport { WizardSucceeded } from 'libs/shared/components/wizard/status/statuses/succeeded/WizardSucceeded';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { GetResultsRequest, useErroredBulkActions } from 'libs/shared/hooks/useErroredBulkActions';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BaseObject, BatchJob, BatchJobSummary, CurrentUser, WizardActionVerb } from 'libs/shared/interfaces';\n\ninterface WizardCompletedProps<TObject> {\n job: BatchJob;\n summary: BatchJobSummary;\n userType?: UserGroup;\n objectCount: number;\n objectType: MasterType;\n getResultsRequest: GetResultsRequest;\n onClickTryAgain?: () => void;\n actionSucceededMessage: string;\n actionVerb: WizardActionVerb;\n navLockId?: string;\n onFinish?: () => void;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n preventLoggingAnalytics: boolean;\n\n imageCdnUrl: string;\n failedImageUrl: string;\n successImageUrl: string;\n \n currentUser?: CurrentUser;\n\n finishAppLink?: AppLink;\n \n getErrorListItem?: (erroredObjects: ObjectWithErrorCode<TObject>) => JSX.Element;\n errorActionButton?: WizardErrorActionButton;\n}\n\nexport function WizardCompleted<\n TObject extends BaseObject = BaseObject\n>(\n props: WizardCompletedProps<TObject>\n): JSX.Element {\n const dispatch = useDispatch();\n const erroredObjects = useErroredBulkActions<TObject>(props.job.id, props.getResultsRequest);\n const navLock = useNavLock();\n const { setShowButtons, showButtons } = React.useContext(WizardLayoutContext);\n\n const [ hasLoggedEvent, setHasLoggedEvent ] = React.useState(false);\n\n React.useEffect(() => {\n if (props.job.type === BatchJobType.RolloverYearGroup) {\n // Clear year group rollover status\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: ['year:group:rollover:status'],\n request: null\n });\n }\n }, [props.job.type]);\n\n React.useEffect(() => {\n if (props.preventLoggingAnalytics || hasLoggedEvent)\n return;\n\n setHasLoggedEvent(true);\n\n const analyticsData: HashObject = {\n ...(props.analyticsData ?? {}),\n id: props.job.id,\n userCount: props.summary.totalProcessed,\n totalSucceeded: props.summary.totalSucceeded,\n totalErrored: props.summary.totalErrored,\n totalNoAction: props.summary.totalNoAction\n };\n\n const status = BulkUserActionsAnalyticsHelper.getJobStatus(props.job.status);\n\n if (status)\n analyticsData.status = status;\n \n let analyticsOptionsData: AnalyticsOptions = { workflowPhase: WorkflowPhase.Complete };\n\n if (props.analyticsOptions) {\n analyticsOptionsData = AnalyticsHelper.mergeOptions(props.analyticsOptions, analyticsOptionsData);\n }\n\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptionsData);\n }, [ props.preventLoggingAnalytics, hasLoggedEvent ]);\n\n React.useEffect(() => {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n }, []);\n\n React.useEffect(() => {\n switch (props.job.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.Failed:\n if (showButtons) {\n setShowButtons(false);\n }\n break;\n\n case BatchJobStatus.CompletedWithError:\n if (!showButtons) {\n setShowButtons(true);\n }\n break;\n\n default:\n break;\n }\n }, [props.job.status]);\n\n if (props.job.status === BatchJobStatus.Completed) {\n return (\n <WizardSucceeded\n message={props.actionSucceededMessage}\n successImageUrl={props.successImageUrl}\n actionVerb={props.actionVerb}\n finishAppLink={props.finishAppLink}\n onFinish={props.onFinish}\n />\n );\n }\n\n if (props.job.status === BatchJobStatus.CompletedWithError) {\n return (\n <WizardCompletedWithError<TObject>\n erroredObjects={erroredObjects.objects}\n totalObjects={props.objectCount}\n totalErroredResults={erroredObjects.count}\n userType={props?.userType}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n actionVerb={props.actionVerb}\n objectType={props.objectType}\n getErrorListItem={props.getErrorListItem}\n actionButton={props.errorActionButton}\n />\n );\n }\n\n return (\n <WizardFailed\n onClickTryAgain={props.onClickTryAgain}\n failedImageUrl={props.failedImageUrl}\n actionVerb={props.actionVerb}\n />\n );\n}","import { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ObjectWithErrorCode } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, BatchJobResult } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\n\ninterface GetErroredObjects<TObject> {\n objects: ObjectWithErrorCode<TObject>[];\n isFetching: boolean;\n count: number;\n}\n\nexport type GetResultsRequest = (jobId: string, status: BatchJobResultStatus, cursor?: string) => Flight.Request;\n\nexport function useErroredBulkActions<TObject extends BaseObject>(\n jobId: string,\n getResultsRequest: GetResultsRequest\n): GetErroredObjects<TObject> {\n const dispatch = useDispatch();\n\n const getResultsPage = (cursor?: string) => {\n return getResultsRequest(\n jobId,\n BatchJobResultStatus.Failed,\n cursor\n );\n };\n\n const fetchNext = (cursor?: string) => {\n return Flight.getFetch(dispatch)(getResultsPage(cursor));\n };\n\n const {\n items: erroredResults,\n isFetching: isFetchingErroredResults\n } = useInfiniteList<BatchJobResult<TObject>>(getResultsPage, fetchNext);\n\n const objects: ObjectWithErrorCode<TObject>[] = erroredResults?.map(result => {\n if (!result.objectData && result.metadata && 'firstname' in result.metadata) {\n return {\n name: result.metadata.firstname,\n surname: result.metadata.surname,\n userType: UserHelper.getUserType(result.metadata as any),\n username: result.metadata.username,\n errorCode: result.status\n } as unknown as ObjectWithErrorCode<TObject>;\n }\n\n return {\n ...result.objectData,\n errorCode: result.status\n };\n }) ?? [];\n\n return {\n isFetching: isFetchingErroredResults,\n objects: objects,\n count: objects.length // TODO: Get a proper count from the backend\n };\n}","export enum BatchJobStatus {\n Submitted = 0,\n Queued = 1,\n Pending = 2,\n InProgress = 3,\n Completed = 4,\n CompletedWithError = 5,\n Failed = 6\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, OperationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { BULK_USER_UPLOAD_NAV_LOCK_ID, BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { WizardCompleted } from 'libs/shared/components/wizard/status/completed/WizardCompleted';\nimport { ObjectWithErrorCode } from 'libs/shared/components/wizard/status/statuses/completed-with-error/WizardCompletedWithError';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { BatchJob, BatchJobSummary, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUserUploadStatusCompleted';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function BulkUserUploadStatusCompleteView(props: UserWizardStatusParams): JSX.Element {\n const { users, existingUserToAdd, existingUsersHash } = useBulkUploadUsers();\n\n const appLinks = getUserManagerAppLinks(props.userType);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const job = Flight.useBasicFetch<BatchJob>(JobRequests.getJob(props.jobId));\n const summary = Flight.useBasicFetch<BatchJobSummary>(JobRequests.getJobSummary(props.jobId));\n\n useHandleObjectError(job);\n\n const dispatch = useDispatch();\n\n const onCreateJobError = BulkUserActionsHelper.useCreateJobErrorAlert();\n\n const newUsers = BulkUserUploadHelper.getNewUsers(users, existingUsersHash);\n\n function onClickTryAgain(): void {\n const jobData = BulkUserUploadHelper.getJobData({\n users: newUsers,\n existingUsers: existingUserToAdd,\n customerId: currentUser.data.customerId,\n userType: props.userType\n });\n\n Flight.fetch(dispatch, JobRequests.createJob(jobData, onCreateJob, onCreateJobError));\n }\n\n function onCreateJob(job: BatchJob): void {\n Core.AppLinkHelper.trigger({\n ...appLinks.userUploadStatus.polling,\n params: {\n userType: props.userType,\n jobId: job.id\n }\n });\n }\n const totalUsersCount = (newUsers?.length ?? 0) + (existingUserToAdd?.length ?? 0);\n\n function getSuccessMessage(): string {\n return props.userType === UserGroup.Learner\n ? getPhrase('createStudentsSuccess', { smartCount: totalUsersCount })\n : getPhrase('createStaffSuccess', { smartCount: totalUsersCount });\n }\n\n const dataLoaded = !!job.data && !!config.data && !!currentUser.data && !!summary.data;\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='status'\n canAddExistingUsers\n >\n {!!dataLoaded && (\n <WizardCompleted\n job={job.data}\n summary={summary.data}\n objectCount={users.length}\n objectType={MasterType.User}\n userType={props.userType}\n finishAppLink={appLinks.userManager}\n imageCdnUrl={config.data.imageCdnUrl}\n successImageUrl={ImageUrls.SUCCESS}\n failedImageUrl={ImageUrls.WIZARD_ERROR}\n currentUser={currentUser.data}\n onClickTryAgain={onClickTryAgain}\n getResultsRequest={JobRequests.getJobResults}\n actionSucceededMessage={getSuccessMessage()}\n navLockId={BULK_USER_UPLOAD_NAV_LOCK_ID}\n actionVerb='Create'\n analyticsOptions={{\n location: LocationContext.BulkUserUploadWizard,\n entity: EntityType.User,\n actionType: UserAction.Create,\n descriptor: OperationDescriptor.Bulk\n }}\n preventLoggingAnalytics={!users}\n getErrorListItem={(object: ObjectWithErrorCode<User>) =>\n BulkUserActionsHelper.getErrorListItem(object, config.data.imageCdnUrl, currentUser.data)\n }\n />\n )}\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\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: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\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.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\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};"],"names":["UserManagerClientContext","BaseBulkUserActionsViewModelKeys","BulkUserActionsAnalyticsHelper","getAnalyticsActionName","viewModel","action","subAction","onClickNext","currentStep","analyticsData","userCount","userIdMap","size","step","actionName","actionData","ObjectHelper","Object","keys","length","AnalyticsHelper","location","workflowPhase","actionType","entity","logYearGroupRolloverEntry","getJobStatus","status","BatchJobStatus","ObjectList","props","ChildComponent","childComponent","className","objects","map","object","key","id","objectType","namespace","WizardCompletedWithError","erroredObjects","value","Text","phrase","actionVerb","MasterType","userType","UserGroup","options","totalUpdated","totalObjects","totalErroredResults","smartCount","actionButton","DivButton","onClick","text","childProps","getErrorListItem","WizardFailed","supportUrl","ArticleHelper","src","failedImageUrl","href","linkClass","onClickTryAgain","Button","variant","WizardSucceeded","successImageUrl","dangerouslySetInnerHTML","__html","message","finishAppLink","AppLink","appLink","onFinish","BatchJobResultStatus","WizardCompleted","dispatch","jobId","getResultsRequest","getResultsPage","cursor","Failed","erroredResults","items","isFetchingErroredResults","isFetching","result","objectData","metadata","name","firstname","surname","UserHelper","username","errorCode","count","useErroredBulkActions","job","navLock","useNavLock","WizardLayoutContext","setShowButtons","showButtons","hasLoggedEvent","setHasLoggedEvent","type","BatchJobType","request","preventLoggingAnalytics","summary","totalProcessed","totalSucceeded","totalErrored","totalNoAction","analyticsOptionsData","analyticsOptions","navLockId","unlock","actionSucceededMessage","objectCount","currentUser","imageCdnUrl","errorActionButton","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","getPhrase","BulkUserUploadStatusCompleteView","users","existingUserToAdd","existingUsersHash","appLinks","config","onCreateJobError","newUsers","onCreateJob","userUploadStatus","polling","params","totalUsersCount","dataLoaded","data","canAddExistingUsers","userManager","jobData","existingUsers","customerId","descriptor","JobRequests","createJob","success","error","url","getJobs","queryParams","bulkActionTypes","userTypes","sort","order","bulkActionType","dataType","getJob","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","sendJobReports","ids","jobIds","getJobSummary"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 771-
|
|
1
|
+
/*! For license information please see 771-5612b4ffc2-lite.chunk.js.LICENSE.txt */
|
|
2
2
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[771],{90771:(t,e,r)=>{r.r(e),r.d(e,{DeleteStudentsVideoView:()=>k});var n=r(32735),o=r(23481),i=r(81886),a=r(20354),c=r(49985),u=r(65858),l=r(9111),s=r(13876),f=r(83345),h=r(4594),p=r(43012),y=r(20768),d=r(1575),v=r(69883),m=r(14070),g=r(97291),w=r(47288);function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function E(){E=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof m?e:m,a=Object.create(i.prototype),c=new A(n||[]);return o(a,"_invoke",{value:j(t,r,c)}),a}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var h="suspendedStart",p="suspendedYield",y="executing",d="completed",v={};function m(){}function g(){}function w(){}var x={};l(x,a,(function(){return this}));var L=Object.getPrototypeOf,S=L&&L(L(N([])));S&&S!==r&&n.call(S,a)&&(x=S);var _=w.prototype=m.prototype=Object.create(x);function k(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function O(t,e){function r(o,i,a,c){var u=f(t[o],t,i);if("throw"!==u.type){var l=u.arg,s=l.value;return s&&"object"==b(s)&&n.call(s,"__await")?e.resolve(s.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(s).then((function(t){l.value=t,a(l)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var i;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return i=i?i.then(o,o):o()}})}function j(e,r,n){var o=h;return function(i,a){if(o===y)throw Error("Generator is already running");if(o===d){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=I(c,n);if(u){if(u===v)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=y;var l=f(e,r,n);if("normal"===l.type){if(o=n.done?d:p,l.arg===v)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=d,n.method="throw",n.arg=l.arg)}}}function I(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,I(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var i=f(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,v;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function T(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function A(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function N(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return i.next=i}}throw new TypeError(b(e)+" is not iterable")}return g.prototype=w,o(_,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:g,configurable:!0}),g.displayName=l(w,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===g||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,l(t,u,"GeneratorFunction")),t.prototype=Object.create(_),t},e.awrap=function(t){return{__await:t}},k(O.prototype),l(O.prototype,c,(function(){return this})),e.AsyncIterator=O,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new O(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},k(_),l(_,u,"Generator"),l(_,a,(function(){return this})),l(_,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=N,A.prototype={constructor:A,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),T(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;T(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:N(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var L=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))},S="userManager.deleteStudentsVideo",_=o.T.encloseNamespace(S);function k(t){var e,r,o,b,k=(o=n.useState(!1),b=2,function(t){if(Array.isArray(t))return t}(o)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,c=[],u=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(c.push(n.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(o,b)||function(t,e){if(t){if("string"==typeof t)return x(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(t,e):void 0}}(o,b)||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.")}()),O=k[0],j=k[1],I=(0,v.Z)(),P=a.a.useGetFetchAsync(),T=a.a.useBasicFetch(w.N.getUser(t.userId)),A=a.a.useBasicFetch((e=t.videoId,(r=t.typeId).toString()===h.E.Clip.toString()?p.e.clip(e):r.toString()===h.E.Interactive.toString()?y.b.interactiveMetadata(e):d.R.video(e))),N=A.hasCompleted&&T.hasCompleted;return n.createElement(l.G,{title:_("title"),closePopup:t.closePopup,showLoadingSpinner:!N},N&&n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(f.x,{namespace:S,phrase:"info",options:{video:A.data.name,name:T.data.name}})),n.createElement(s.u,null,n.createElement(s.u.Cancel,{onClick:t.closePopup}),n.createElement(s.u.Submit,{variant:"danger",text:_("delete",{name:T.data.name}),showSpinner:O,onClick:function(){return L(this,void 0,void 0,E().mark((function e(){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return j(!0),e.prev=1,e.next=4,P(d.R.delete(t.videoId));case 4:I.success(_("success",{video:A.data.name,name:T.data.name,escapeText:!0})),c.k.logUserAction({id:t.videoId},{actionType:u.Vw.Delete,entity:u.py.Video,location:u.LZ.Popup,workflowPhase:u.eu.Complete}),i.Q.C$.trigger({application:g.O.USER_MANAGER,action:m.e.UserManager.STUDENTS_VIDEOS,args:[t.userId]}),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),I.error(_("error",{video:A.data.name,name:T.data.name,escapeText:!0}));case 12:return e.prev=12,t.closePopup(),e.finish(12);case 15:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})))}}))))}}}]);
|
|
3
|
-
//# sourceMappingURL=771-
|
|
3
|
+
//# sourceMappingURL=771-5612b4ffc2-lite.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/771-
|
|
1
|
+
{"version":3,"file":"scripts/771-5612b4ffc2-lite.chunk.js","mappings":";ozOAwBMA,EAAY,kCACZC,EAAY,qBAAiCD,GAkB7C,SAAUE,EAAwBC,GACtC,IAjBkBC,EAAYC,MAiB+B,KAArB,YAAe,KAAM,o5BAArDC,EAAW,KAAEC,EAAc,KAE7BC,GAAS,SACTC,EAAa,uBAEbC,EAAO,kBAA2B,YAA4BP,EAAMQ,SACpEC,EAAQ,mBAvBIR,EAuBmCD,EAAMU,SAvB7BR,EAuBsCF,EAAME,QAtB/DS,aAAe,oBACjB,SAAkBV,GAEvBC,EAAOS,aAAe,2BACjB,wBAAwCV,GAE1C,UAAoBA,KA+CrBW,EACJH,EAAMI,cACNN,EAAKM,aAGP,OACE,gBAAC,IAAK,CACJC,MAAOhB,EAAU,SACjBiB,WAAYf,EAAMe,WAClBC,oBAAqBJ,GAEpBA,GACC,gCACE,yBACE,gBAAC,IAAI,CAACf,UAAWA,EAAWoB,OAAO,OAAOC,QAAS,CAAET,MAAOA,EAAMU,KAAKC,KAAMA,KAAMb,EAAKY,KAAKC,SAG/F,gBAAC,IAAY,KACX,gBAAC,WAAmB,CAACC,QAASrB,EAAMe,aACpC,gBAAC,WAAmB,CAClBO,QAAQ,SACRC,KAAMzB,EAAU,SAAU,CAAEsB,KAAMb,EAAKY,KAAKC,OAC5CjB,YAAaA,EACbkB,QApDZ,+HAII,OAHFjB,GAAe,GAAM,kBAGbE,EAAW,WAAqBN,EAAMU,UAAS,OAErDL,EAAOmB,QAAQ1B,EAAU,UAAW,CAAEW,MAAOA,EAAMU,KAAKC,KAAMA,KAAMb,EAAKY,KAAKC,KAAMK,YAAY,KAEhG,kBAA8B,CAC5BxB,GAAID,EAAMU,SACT,CACDgB,WAAY,YACZC,OAAQ,WACRC,SAAU,WACVC,cAAe,gBAGjB,eAA2B,CACzBC,YAAa,iBACbC,OAAQ,gCACRC,KAAM,CAAChC,EAAMQ,UACZ,gDAEHH,EAAO4B,MAAMnC,EAAU,QAAS,CAAEW,MAAOA,EAAMU,KAAKC,KAAMA,KAAMb,EAAKY,KAAKC,KAAMK,YAAY,KAAS,QAElF,OAFkF,UAErGzB,EAAMe,aAAa,2EAEtB,MAgCH","sources":["file:///app/packages/projects/lite/src/apps/user-manager/views/delete-students-video/DeleteStudentsVideoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, User, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'userManager.deleteStudentsVideo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getRequest(id: string, typeId: string): Flight.Request {\n if (typeId.toString() === MasterType.Clip.toString())\n return ClipRequests.clip(id);\n\n if (typeId.toString() === MasterType.Interactive.toString())\n return InteractiveRequests.interactiveMetadata(id);\n\n return VideoRequests.video(id);\n}\n\ninterface DeleteVideoViewProps extends PopupViewProps {\n userId: string;\n videoId: string;\n typeId: string;\n}\n\nexport function DeleteStudentsVideoView(props: DeleteVideoViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const user = Flight.useBasicFetch<User>(UserManagerRequests.getUser(props.userId));\n const video = Flight.useBasicFetch<Video>(getRequest(props.videoId, props.typeId));\n\n async function onClickDelete(): Promise<void> {\n setShowSpinner(true);\n\n try {\n await fetchAsync(VideoRequests.delete(props.videoId));\n\n alerts.success(getPhrase('success', { video: video.data.name, name: user.data.name, escapeText: true }));\n\n AnalyticsHelper.logUserAction({\n id: props.videoId\n }, {\n actionType: UserAction.Delete,\n entity: EntityType.Video,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STUDENTS_VIDEOS,\n args: [props.userId]\n });\n } catch {\n alerts.error(getPhrase('error', { video: video.data.name, name: user.data.name, escapeText: true }));\n } finally {\n props.closePopup();\n }\n }\n\n const hasLoaded = (\n video.hasCompleted &&\n user.hasCompleted\n );\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded && (\n <>\n <p>\n <Text namespace={namespace} phrase='info' options={{ video: video.data.name, name: user.data.name }} />\n </p>\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n text={getPhrase('delete', { name: user.data.name })}\n showSpinner={showSpinner}\n onClick={onClickDelete}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}"],"names":["namespace","getPhrase","DeleteStudentsVideoView","props","id","typeId","showSpinner","setShowSpinner","alerts","fetchAsync","user","userId","video","videoId","toString","hasLoaded","hasCompleted","title","closePopup","showLoadingSpinner","phrase","options","data","name","onClick","variant","text","success","escapeText","actionType","entity","location","workflowPhase","application","action","args","error"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7855],{75314:(e,t,n)=>{n.d(t,{j:()=>w});var a=n(32735),r=n(80247),o=n(23481),i=n(91967),c=n(76177),l=n(4594),s=n(45778),m=n(60376),u=n(36511),d=n(35223);const p={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"};var v="shared.classroomGroupRecipientItemMetadata";function g(e){var t;return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(m.f,{svgName:d.vn.Group,variant:(0,u.I)(null===(t=e.classroomGroup.metadata)||void 0===t?void 0:t.colour)})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.classroomGroup.name),a.createElement("p",{className:"text-secondary m-0"},function(e){var t,n,a,r=null!==(n=null===(t=e.users)||void 0===t?void 0:t.count)&&void 0!==n?n:0,i=null===(a=e.classroom)||void 0===a?void 0:a.name;return i?o.T.getPhrase(v,"subheading",{classroomName:i,smartCount:r}):""}(e.classroomGroup))))}var f="shared.classroomRecipientItemMetadata";function E(e){return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(m.f,{svgName:d.vn.Classrooms,variant:"teal"})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.classroom.name),a.createElement("p",{className:"text-secondary m-0"},(n=null===(t=e.classroom.users)||void 0===t?void 0:t.count,Number.isInteger(n)?o.T.getPhrase(f,"subheading",{smartCount:n}):""))));var t,n}var h=n(20789),y=n(76881),C=n(86613),x=n(64818),b=o.T.encloseNamespace("shared.userRecipientItemMetadata");function N(e){var t;return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(h.q,{imageUrl:null===(t=e.user.avatar)||void 0===t?void 0:t.url,imageCdnUrl:e.imageCdnUrl,initials:x.l.getInitials(e.user.name,e.user.surname)})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.showDisplayName?x.l.getDisplayName(e.user):x.l.getFullName(e.user)),a.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=x.l.getUserType(e),n=x.l.getUserRole(e);if(t===y.Y.Staff)return n===C.i.Admin?b("admin"):b("staff");var a=x.l.getYearGroup(e);return(null==a?void 0:a.name)?a.name:b("student")}(e.user))))}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var k=o.T.encloseNamespace("share.recipientItem");function I(e){switch(e){case l.E.User:return k("removeUser");case l.E.Classroom:return k("removeClassroom");case l.E.ClassroomGroup:return k("removeGroup")}return null}function w(e){var t,n,o=(t=a.useState(!1),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,o,i,c=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return S(e,t);var n=Object.prototype.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}}(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.")}()),m=o[0],u=o[1],d="".concat(p.recipientItem," d-flex");m&&(d+=" ".concat(p.showSpinner));var v="".concat(e.removeRecipient?p.recipientDetailsWithRemoveButton:p.recipientDetails," d-inline-block ms-2");return a.createElement("div",{className:d},s.G.isType(e.entity,l.E.User)?a.createElement(N,{user:e.entity,imageCdnUrl:e.imageCdnUrl,detailsClassName:v,showDisplayName:e.showDisplayName,getSubText:e.getSubText}):s.G.isType(e.entity,l.E.Classroom)?a.createElement(E,{classroom:e.entity,detailsClassName:v}):s.G.isType(e.entity,l.E.ClassroomGroup)?a.createElement(g,{classroomGroup:e.entity,detailsClassName:v}):void 0,i.q.isFunction(e.removeRecipient)&&a.createElement("div",{className:"".concat(p.removeRecipient," d-inline-flex justify-content-center align-items-center")},m?a.createElement(r.Z,{as:"div",size:"sm",animation:"border",role:"status"}):a.createElement(c.u,{title:I(e.entity.typeId),spanHack:!0},a.createElement("div",{className:"btn-close cursor-pointer",role:"button","aria-label":"Close",onClick:function(){u(!0),e.removeRecipient(e.entity.id,(function(){return u(!1)}))}}))))}},82872:(e,t,n)=>{n.d(t,{t:()=>k});var a=n(32735),r=n(91967),o=n(11607),i=n(83914),c=n(4594),l=n(76881),s=n(36511),m=n(45778),u=n(35223),d=n(64818),p=n(80247),v=n(23481);const g={avatar:"srrS3"};function f(e){var t=e.imageUrl,n=e.initials,r={};return t&&(r.backgroundImage="url('".concat(t,"')")),a.createElement("div",{className:g.avatar,style:r},t?a.createElement(a.Fragment,null," "):n)}var E=n(76177);const h={svgContainer:"laVU4",selection:"vEOCt",expander:"d1NHd",iconContainer:"rFH4W",icon:"BarYz",bubble:"HF0E8",spinnerContainer:"iKeXW",remove:"pyzCM",removeBubble:"mgt6Y"};var y=v.T.encloseNamespace("shared.inputSelection");function C(e){var t,n="".concat(h.svgContainer," ").concat(h.icon);return e.typeId===c.E.Classroom?n+=" text-teal":n+=" text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)),n}function x(e){var t,n=function(e){var t;switch(e.typeId){case c.E.Classroom:return"text-teal-hover";case c.E.ClassroomGroup:return"text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour),"-hover")}}(e.selection),r=e.selection.typeId===c.E.Classroom;if(!e.canExpand){if(!e.selection.typeId||e.selection.typeId===c.E.User){var l=e.selection;return a.createElement("div",{className:h.svgContainer},a.createElement(f,{imageUrl:null===(t=l.avatar)||void 0===t?void 0:t.url,initials:d.l.getInitials(e.selection.name,e.selection.surname)}))}return a.createElement(E.u,{title:y(r?"emptyClassroom":"emptyGroup")},a.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},a.createElement(i.x,{className:C(e.selection),svgName:r?u.vn.Classrooms:u.vn.Group})))}return e.hasExpanded?a.createElement("div",{className:"d-flex align-items-center text-white ".concat(h.spinnerContainer," ").concat(h.svgContainer)},a.createElement(p.Z,{as:"div",size:"sm",animation:"border",role:"status"})):a.createElement(a.Fragment,null,a.createElement(o.L,{className:"align-items-center cursor-pointer text-white border border-white rounded-circle ".concat(h.expander," ").concat(n),onClick:e.onClickExpand},a.createElement(i.x,{svgName:u.vn.Plus,className:"d-flex align-items-center ".concat(h.svgContainer)})),a.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},a.createElement(i.x,{className:C(e.selection),svgName:r?u.vn.Classrooms:u.vn.Group})))}function b(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,o,i,c=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var n=Object.prototype.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=new Array(t);n<t;n++)a[n]=e[n];return a}function S(e){var t;if(!e.typeId)return"dark-blue";switch(e.typeId){case c.E.User:return"number"==typeof e.userType?2===e.userType?"dark-blue":"indigo":e.userType===l.Y.Learner?"dark-blue":"indigo";case c.E.Classroom:return"teal";case c.E.ClassroomGroup:return(0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)}}function k(e){var t,n,r,l=m.G.isType(e.selection,c.E.Classroom),s=m.G.isType(e.selection,c.E.ClassroomGroup),d=e.onClickExpand&&(l||s),p=!!(null===(t=e.selection.users)||void 0===t?void 0:t.count),v=!!(null===(r=null===(n=e.selection.users)||void 0===n?void 0:n.data)||void 0===r?void 0:r.length),g=b(a.useState(!1),2),f=g[0],E=g[1],y=b(a.useState(d&&p),2),C=y[0],x=y[1];if(a.useEffect((function(){x(d&&p)}),[d,p]),v){var N=e.selection,k=S(e.selection);return a.createElement("div",{className:"d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-".concat(k," text-").concat(k," ").concat(h.bubble)},N.users.data.map((function(t){return a.createElement(I,{key:"".concat(t.id,":").concat(e.selection.id),selection:t,colourVariant:k,hasStudentExperience:e.hasStudentExperience})})),a.createElement(o.L,{className:"cursor-pointer position-absolute text-".concat(k," ").concat(h.removeBubble),onClick:function(){return e.onClickRemove(e.selection)}},a.createElement(i.x,{svgName:u.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}return a.createElement(I,{selection:e.selection,canExpand:C,hasExpanded:f,onClickExpand:function(){E(!0),e.onClickExpand(e.selection.id)},onClickRemove:e.onClickRemove,colourVariant:S(e.selection),hasStudentExperience:e.hasStudentExperience})}function I(e){var t=e.colourVariant||S(e.selection),n=e.selection.name;return e.selection.typeId===c.E.User&&(n=e.hasStudentExperience?d.l.getDisplayName(e.selection):d.l.getFullName(e.selection)),a.createElement("div",{className:"".concat(h.selection," bg-").concat(t," rounded-pill text-").concat(t," d-flex align-items-center me-1 mt-1 overflow-hidden")},!e.hideExpander&&a.createElement(x,{canExpand:e.canExpand,hasExpanded:e.hasExpanded,onClickExpand:e.onClickExpand,selection:e.selection}),a.createElement("span",{className:"mx-1 text-white text-truncate"},n),r.q.isFunction(e.onClickRemove)&&a.createElement(o.L,{className:"d-flex align-items-center cursor-pointer align-self-stretch text-white ".concat(h.remove),onClick:function(){return e.onClickRemove(e.selection)}},a.createElement(i.x,{svgName:u.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}},7855:(e,t,n)=>{n.d(t,{d:()=>g,R:()=>f});var a=n(32735),r=n(23481),o=n(75896),i=n(75314),c=n(2136),l=n(83914),s=n(89589),m=n(97481),u=n(35223),d=n(82872);const p={container:"Dc3kX",suggestionsContainerOpen:"c5t3e",selectionContainer:"kFjoN",sectionContainer:"mLrE3"};var v="shared.tokenizedTypeahead",g=10;function f(e){var t;return a.createElement("div",{className:"form-control h-auto d-flex align-items-top position-relative ".concat(e.hideIcon?"":"py-1 px-0"," ").concat(e.className)},!e.hideIcon&&a.createElement(l.x,{className:"svg-container m-1",svgName:u.vn.Search}),a.createElement("div",{className:"".concat(p.selectionContainer," d-flex flex-wrap align-items-center mt-n1")},e.selections.map((function(t){return e.getInputTokenComponent?e.getInputTokenComponent(t):a.createElement(d.t,{key:t.id,selection:t,onClickRemove:e.removeSelection,onClickExpand:e.fetchSelectionMembers,hasStudentExperience:e.hasStudentExperience})})),a.createElement(c.E,Object.assign({},e,{onBackspace:function(){e.selections.length&&e.removeSelection(o.m.last(e.selections))},recentSearchHeading:e.recentSearchHeading||r.T.getPhrase(v,"recentSearchHeading"),placeholder:(null===(t=e.selections)||void 0===t?void 0:t.length)?" ":e.placeholder,searchIconPlacement:!1,clearQueryOnSelect:!0,getSuggestionComponent:function(t){return e.getSuggestionComponent?e.getSuggestionComponent(t):a.createElement(i.j,{entity:t,imageCdnUrl:e.imageCdnUrl,showDisplayName:e.hasStudentExperience})},getEmptyStateComponent:function(t){return a.createElement(s.x,{query:t,imageUrl:e.emptyStateImageUrl})},getErrorStateComponent:function(t){return a.createElement(m.d,{imageUrl:e.errorStateImageUrl,onClickTryAgain:t})},theme:{container:p.container,suggestionsContainerOpen:"bg-white py-1 rounded border mt-1 ".concat(p.suggestionsContainerOpen),sectionContainer:"border-bottom py-1 ".concat(p.sectionContainer)},sectionTitleClassName:"ps-2",renderSuggestionsOnInputFocus:e.renderSuggestionsOnInputFocus,onSuggestionDependencies:[e.selections]}))),!!e.sharePermissionsDescription&&a.createElement("span",{className:"px-2 text-secondary text-nowrap"},e.sharePermissionsDescription))}f.defaultProps={renderSuggestionsOnInputFocus:!0}},89589:(e,t,n)=>{n.d(t,{x:()=>l});var a=n(32735),r=n(83345),o=n(28329);const i={emptyState:"bKTf0"};var c="shared.typeaheadEmptyState";function l(e){var t=e.query,n=void 0===t?"":t,l=e.imageUrl,s=(0,o.N)(n,300);return a.createElement("div",{className:"d-flex flex-column align-items-center text-center",onClick:function(e){e.stopPropagation()}},a.createElement("img",{alt:"",role:"presentation",src:l,className:"pb-2 ".concat(i.emptyState)}),a.createElement("h2",{className:"h6"},a.createElement(r.x,{namespace:c,phrase:"noResults",options:{query:s,smartCount:s.length}})))}},97481:(e,t,n)=>{n.d(t,{d:()=>l});var a=n(32735),r=n(11607),o=n(83345);const i={emptyState:"k5mEG"};var c="shared.typeaheadErrorState";function l(e){return a.createElement("div",{className:"d-flex flex-column align-items-center text-center",onClick:function(e){e.stopPropagation()}},a.createElement("img",{alt:"",role:"presentation",src:e.imageUrl,className:"pb-2 ".concat(i.emptyState)}),a.createElement("h2",{className:"h6"},a.createElement(o.x,{namespace:c,phrase:"error"})),a.createElement(r.L,{onClick:function(t){t.stopPropagation(),e.onClickTryAgain()},className:"btn btn-link info-link p-0"},a.createElement(o.x,{namespace:c,phrase:"tryAgain"})))}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(96787);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}}}]);
|
|
2
|
-
//# sourceMappingURL=7855-
|
|
2
|
+
//# sourceMappingURL=7855-4b69540a71-lite.chunk.js.map
|