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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{658-lite-5cb7c60d3b.chunk.css → 3700-lite-2ddbf5e39f.chunk.css} +0 -1
  3. package/dist/css/{4033-lite-b2fb1fd10e.chunk.css → 5987-lite-dc7e18cd99.chunk.css} +1 -0
  4. package/dist/css/{3325-lite-6f710728af.chunk.css → 5999-lite-bd05e26c6b.chunk.css} +1 -0
  5. package/dist/css/{6273-lite-e023522516.chunk.css → 6554-lite-a69c2a69da.chunk.css} +1 -0
  6. package/dist/languages/en.json +1 -1
  7. package/dist/scripts/{1518-c916754d35-lite.chunk.js → 1518-7005bfd3c8-lite.chunk.js} +2 -2
  8. package/dist/scripts/{1518-c916754d35-lite.chunk.js.map → 1518-7005bfd3c8-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/{1670-823b692de0-lite.chunk.js → 1670-d9ced49962-lite.chunk.js} +2 -2
  10. package/dist/scripts/{1670-823b692de0-lite.chunk.js.map → 1670-d9ced49962-lite.chunk.js.map} +1 -1
  11. package/dist/scripts/{1912-f7cadd3e9e-lite.chunk.js → 1912-2271f9d8ee-lite.chunk.js} +2 -2
  12. package/dist/scripts/{1912-f7cadd3e9e-lite.chunk.js.map → 1912-2271f9d8ee-lite.chunk.js.map} +1 -1
  13. package/dist/scripts/{3143-f03801138f-lite.chunk.js → 3143-a754e306a5-lite.chunk.js} +3 -3
  14. package/dist/scripts/{3143-f03801138f-lite.chunk.js.map → 3143-a754e306a5-lite.chunk.js.map} +1 -1
  15. package/dist/scripts/{3191-6f79256d33-lite.chunk.js → 3191-e387636012-lite.chunk.js} +2 -2
  16. package/dist/scripts/{3191-6f79256d33-lite.chunk.js.map → 3191-e387636012-lite.chunk.js.map} +1 -1
  17. package/dist/scripts/3700-3859a400a5-lite.chunk.js +3 -0
  18. package/dist/scripts/3700-3859a400a5-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{4050-57e2409255-lite.chunk.js → 4050-8852c15f40-lite.chunk.js} +3 -3
  20. package/dist/scripts/4050-8852c15f40-lite.chunk.js.map +1 -0
  21. package/dist/scripts/{4802-1b7a767c46-lite.chunk.js → 4802-bc321d7ede-lite.chunk.js} +3 -3
  22. package/dist/scripts/{4802-1b7a767c46-lite.chunk.js.map → 4802-bc321d7ede-lite.chunk.js.map} +1 -1
  23. package/dist/scripts/{5877-6c9d90249b-lite.chunk.js → 5877-20ef40af7c-lite.chunk.js} +2 -2
  24. package/dist/scripts/{5877-6c9d90249b-lite.chunk.js.map → 5877-20ef40af7c-lite.chunk.js.map} +1 -1
  25. package/dist/scripts/5987-ece2ee4793-lite.chunk.js +3 -0
  26. package/dist/scripts/5987-ece2ee4793-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{6273-a71eccd48b-lite.chunk.js → 6554-353cf95001-lite.chunk.js} +2 -2
  28. package/dist/scripts/{6273-a71eccd48b-lite.chunk.js.map → 6554-353cf95001-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/{7815-554d031e0a-lite.chunk.js → 7815-05c5e8df47-lite.chunk.js} +2 -2
  30. package/dist/scripts/{7815-554d031e0a-lite.chunk.js.map → 7815-05c5e8df47-lite.chunk.js.map} +1 -1
  31. package/dist/scripts/{7835-61d04f9f11-lite.chunk.js → 7835-8d490274c8-lite.chunk.js} +3 -3
  32. package/dist/scripts/{7835-61d04f9f11-lite.chunk.js.map → 7835-8d490274c8-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/{8362-5936447d00-lite.chunk.js → 8362-7cac098b34-lite.chunk.js} +3 -3
  34. package/dist/scripts/{8362-5936447d00-lite.chunk.js.map → 8362-7cac098b34-lite.chunk.js.map} +1 -1
  35. package/dist/scripts/{8548-4eeb094dbb-lite.chunk.js → 8548-c987128b9f-lite.chunk.js} +3 -3
  36. package/dist/scripts/{8548-4eeb094dbb-lite.chunk.js.map → 8548-c987128b9f-lite.chunk.js.map} +1 -1
  37. package/dist/scripts/{8756-a3f84f1b64-lite.chunk.js → 8756-560899a88b-lite.chunk.js} +2 -2
  38. package/dist/scripts/{8756-a3f84f1b64-lite.chunk.js.map → 8756-560899a88b-lite.chunk.js.map} +1 -1
  39. package/dist/scripts/{8933-01ed4c4e69-lite.chunk.js → 8933-aa3f547d1e-lite.chunk.js} +3 -3
  40. package/dist/scripts/{8933-01ed4c4e69-lite.chunk.js.map → 8933-aa3f547d1e-lite.chunk.js.map} +1 -1
  41. package/dist/scripts/914-4a8424247f-lite.chunk.js +2 -0
  42. package/dist/scripts/914-4a8424247f-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{9423-d67a0bb6f3-lite.chunk.js → 9423-3ce35ca995-lite.chunk.js} +2 -2
  44. package/dist/scripts/{9423-d67a0bb6f3-lite.chunk.js.map → 9423-3ce35ca995-lite.chunk.js.map} +1 -1
  45. package/dist/scripts/bundle-385a231a9d.min.js +3 -0
  46. package/dist/scripts/{bundle-4276667ced.min.js.map → bundle-385a231a9d.min.js.map} +1 -1
  47. package/package.json +1 -1
  48. package/dist/scripts/4033-d8dbb0d208-lite.chunk.js +0 -3
  49. package/dist/scripts/4033-d8dbb0d208-lite.chunk.js.map +0 -1
  50. package/dist/scripts/4050-57e2409255-lite.chunk.js.map +0 -1
  51. package/dist/scripts/5467-3c44100a58-lite.chunk.js +0 -2
  52. package/dist/scripts/5467-3c44100a58-lite.chunk.js.map +0 -1
  53. package/dist/scripts/658-f500e8210f-lite.chunk.js +0 -3
  54. package/dist/scripts/658-f500e8210f-lite.chunk.js.map +0 -1
  55. package/dist/scripts/bundle-4276667ced.min.js +0 -3
  56. /package/dist/scripts/{3143-f03801138f-lite.chunk.js.LICENSE.txt → 3143-a754e306a5-lite.chunk.js.LICENSE.txt} +0 -0
  57. /package/dist/scripts/{4033-d8dbb0d208-lite.chunk.js.LICENSE.txt → 3700-3859a400a5-lite.chunk.js.LICENSE.txt} +0 -0
  58. /package/dist/scripts/{4050-57e2409255-lite.chunk.js.LICENSE.txt → 4050-8852c15f40-lite.chunk.js.LICENSE.txt} +0 -0
  59. /package/dist/scripts/{4802-1b7a767c46-lite.chunk.js.LICENSE.txt → 4802-bc321d7ede-lite.chunk.js.LICENSE.txt} +0 -0
  60. /package/dist/scripts/{658-f500e8210f-lite.chunk.js.LICENSE.txt → 5987-ece2ee4793-lite.chunk.js.LICENSE.txt} +0 -0
  61. /package/dist/scripts/{7835-61d04f9f11-lite.chunk.js.LICENSE.txt → 7835-8d490274c8-lite.chunk.js.LICENSE.txt} +0 -0
  62. /package/dist/scripts/{8362-5936447d00-lite.chunk.js.LICENSE.txt → 8362-7cac098b34-lite.chunk.js.LICENSE.txt} +0 -0
  63. /package/dist/scripts/{8548-4eeb094dbb-lite.chunk.js.LICENSE.txt → 8548-c987128b9f-lite.chunk.js.LICENSE.txt} +0 -0
  64. /package/dist/scripts/{8933-01ed4c4e69-lite.chunk.js.LICENSE.txt → 8933-aa3f547d1e-lite.chunk.js.LICENSE.txt} +0 -0
  65. /package/dist/scripts/{bundle-4276667ced.min.js.LICENSE.txt → bundle-385a231a9d.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8756],{27150:(e,t,r)=>{r.d(t,{A:()=>x,$:()=>w});var n=r(32735),a=r(23481),l=r(81886),i=r(15611),s=r(83345),o="userManager.userWizardBackButtons";function c(e){return"status"===e.currentStep?n.createElement(n.Fragment,null):n.createElement(i.F,{className:"btn btn-link me-2",appLink:e.appLinks.userManager},n.createElement(s.x,{namespace:o,phrase:"cancel"}))}var u=r(98269),d=r(24453),m=r(45541),p=r(96728),f="userManager.userWizardHeader";function v(e){var t=(0,m.V)(),r=t.duplicateSets,a=t.hasExistingUsers,l=n.useContext(p.e),o=l.disableNext,c=l.onClickConfirm,v=!!(null==r?void 0:r.length),g=d.O.getCurrentContext().appLink;return g.action===e.appLinks.userUploadStatus.polling.action||g.action===e.appLinks.userUploadStatus.complete.action?n.createElement(n.Fragment,null):function(){switch(g.action){case e.appLinks.userUploadPopup.action:case e.appLinks.userUploadReviewAccounts.action:return!v&&!a;case e.appLinks.userUploadFixDuplicates.action:case e.appLinks.userUploadReviewExistingAccounts.action:return!a;default:return!0}}()?n.createElement(u.Z,{className:o?"disabled":"",variant:"dark",onClick:c,disabled:o},n.createElement(s.x,{namespace:f,phrase:"create"})):n.createElement(i.F,{className:"btn btn-dark ".concat(o?"disabled":""),appLink:function(){switch(g.action){case e.appLinks.userUploadReviewAccounts.action:if(v)return e.appLinks.userUploadFixDuplicates;if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadFixDuplicates.action:if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadReviewExistingAccounts.action:if(e.canAddExistingUsers)return e.appLinks.userUploadConfirmation;default:return null}}(),disabled:o},n.createElement(s.x,{namespace:f,phrase:"next"}))}var g=r(19717),h=r(17291),b=r(79352),y=r(76881),E=r(89476);const S={wizardContent:"hHr3C"};var k="userManager.bulkUserUploadWizardLayout",x="bulk:user:upload:nav:lock";function w(e){var t=(0,m.V)(),r=t.users,i=t.setUsers,s=(0,E.f)();return n.useEffect(function(){if(r)return s.lock({id:x,title:a.T.getPhrase(k,"navLockTitle"),text:a.T.getPhrase(k,"navLockBody"),appLinkWhitelist:g.b.getWizardAppLinks(e.appLinks),onConfirmUnlock:function(){i(null)}}),function(){s.unlock(x)};l.Q.C$.trigger(e.appLinks.userManager,{replace:!0})},[]),n.useEffect(function(){(null==r?void 0:r.length)||(s.unlock(x),l.Q.C$.trigger(e.appLinks.userManager,{replace:!0}))},[null==r?void 0:r.length]),r?n.createElement(p.D,null,n.createElement("div",{className:"px-3"},n.createElement(h.C,{title:a.T.getPhrase(k,"bulkUpload"),currentStep:e.currentStep,loaded:!0,continueButton:n.createElement(v,{currentStep:e.currentStep,appLinks:e.appLinks,canAddExistingUsers:e.canAddExistingUsers}),backButton:n.createElement(c,{currentStep:e.currentStep,appLinks:e.appLinks}),breadcrumbs:[{name:a.T.getPhrase(k,"settingsBreadcrumb"),appLink:e.appLinks.settings},{name:a.T.getPhrase(k,e.userType===y.Y.Learner?"studentManager":"staffManager"),appLink:e.appLinks.userManager},{name:a.T.getPhrase(k,"bulkUpload"),active:!0}]}),n.createElement("div",{className:"row g-0"},n.createElement("div",{className:"col-2"},n.createElement(b.a,{steps:g.b.getSteps(e.userType,e.canAddExistingUsers),currentStep:e.currentStep})),n.createElement("div",{className:"col-10 ".concat(S.wizardContent)},e.children)))):n.createElement(n.Fragment,null)}},45541:(e,t,r)=>{r.d(t,{V:()=>u});var n=r(2948),a=r(38143),l=r(39739);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e,t,r){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t){return Object.keys(e||{}).reduce(function(r,n){return t[n]||(r[n]=e[n]),r},{})}var u=function(){var e,t,r,i=(t=(0,n.D)(a.g.BULK_USER_UPLOAD),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,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(t,r)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.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)?o(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.")}()),u=i[0],d=i[1];function m(e){var t=l.P.getNewDuplicates(e);d("duplicateSets",t)}return{users:null==u?void 0:u.users,invalidUsers:null==u?void 0:u.invalidUsers,hasValidatedUsers:!!(null==u?void 0:u.invalidUsers),existingUsersHash:(null==u?void 0:u.existingUsersHash)||{},hasExistingUsers:!!Object.keys((null==u?void 0:u.existingUsersHash)||{}).length,existingUserToAdd:null==u?void 0:u.existingUserToAdd,duplicateSets:null==u?void 0:u.duplicateSets,newUsers:(null===(e=null==u?void 0:u.users)||void 0===e?void 0:e.filter(function(e){var t;return!(null===(t=null==u?void 0:u.existingUsersHash)||void 0===t?void 0:t[e.lookupId])}))||[],setUsers:function(e){d({users:e,invalidUsers:null,existingUsersHash:null}),m(e)},setInvalidUsers:function(e){return d("invalidUsers",e)},setExistingUsers:function(e){return d("existingUsersHash",e)},updateUser:function(e){var t=u.users.map(function(t){return t.lookupId!==e.lookupId?t:e});d({users:t,invalidUsers:c(null==u?void 0:u.invalidUsers,s({},e.lookupId,!0)),existingUsersHash:null==u?void 0:u.existingUsersHash}),m(t)},deleteUsers:function(e){var t,r=e.reduce(function(e,t){return e[t]=!0,e},{}),n=u.users.filter(function(e){return!r[e.lookupId]});d({users:n,invalidUsers:c(null==u?void 0:u.invalidUsers,r),existingUsersHash:c(null==u?void 0:u.existingUsersHash,r),existingUserToAdd:null===(t=null==u?void 0:u.existingUserToAdd)||void 0===t?void 0:t.filter(function(e){return!!(null==u?void 0:u.existingUsersHash[e.lookupId])})}),m(n)}}}},6748:(e,t,r)=>{r.d(t,{i:()=>x});var n=r(32735),a=r(42648),l=r(35509),i=r(91967),s=r(15611),o=r(17808),c=r(1287),u=r(83914),d=r(90281),m={opacity:"0.8",cursor:"grabbing"},p=r(35223);function f(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return g(e,t);var r={}.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)?g(e,t):void 0}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t,r,n,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(r=e.current)||void 0===r?void 0:r.scrollLeft)+1<(null===(n=e.current)||void 0===n?void 0:n.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const b={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var E=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r};function S(e){var t,r;return e.column.canSort?n.createElement("span",{className:"".concat(b.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(r=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==r?r:"")},n.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?p.vn.ArrowRight:p.vn.ArrowLeft,size:u.S.Small})):n.createElement(n.Fragment,null)}function k(e){var t,r,a,u,d,p,v,g,h={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(h.initialState={selectedRowIds:(v=e.initialSelectedRowIds,g={},v.forEach(function(e){return g[e]=!0}),g)}),e.getRowId&&(h.getRowId=e.getRowId);var b,E=l.useTable.apply(void 0,[h].concat((b=function(e){var t=[l.useSortBy,l.useRowSelect,"flex"===e.layout?l.useFlexLayout:l.useBlockLayout];return e.allowFiltering&&(t=[].concat(f(t),[l.useFilters])),e.allowGlobalFiltering&&(t=[].concat(f(t),[l.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return y(e)}(b)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(b)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.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)?y(e,t):void 0}}(b)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),k=E.getTableProps,x=E.getTableBodyProps,w=E.headerGroups,U=E.rows,C=E.prepareRow,N=E.toggleAllRowsSelected,T=E.setGlobalFilter,A=E.setHiddenColumns,L=E.state.sortBy;function I(){return!U.length&&e.emptyState?e.emptyState:U.map(function(t){C(t);var r=function(t){var r,n,a,l,s,o=i.q.isFunction(null===(r=e.theme)||void 0===r?void 0:r.row)?e.theme.row(t):null!==(a=null===(n=e.theme)||void 0===n?void 0:n.row)&&void 0!==a?a:"";return t.isSelected&&(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)&&(o+=" ".concat(null===(s=e.theme)||void 0===s?void 0:s.selectedRow)),e.onSelectRow&&(o+=" cursor-pointer"),e.enableSortableRows&&(o+=" cursor-grab"),o}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function l(){e.onSelectRow&&(e.allowSelectMultipleRows||N(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function o(e,i){var o=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return a?n.createElement("div",{role:"row",key:t.id},n.createElement(s.F,Object.assign({},e,o,{className:r,appLink:a}),O(t))):n.createElement("div",Object.assign({},e,o,{key:t.id,role:"row",className:r,onClick:l}),O(t))}var u=t.getRowProps();return e.enableSortableRows?n.createElement(c.W,{id:t.original.id,key:t.id,childProps:u,childComponent:n.forwardRef(function(e,t){return o(e,t)})}):o(u)})}function O(t){return t.cells.map(function(r){var a=function(t,r){var n,a,l="";return"function"==typeof(null===(n=e.theme)||void 0===n?void 0:n.cell)&&(l=e.theme.cell(t,r)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(l=e.theme.cell),e.onSelectCell&&(l+=" cursor-pointer"),l}(t,r);return n.createElement("div",Object.assign({key:r.column.id},r.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(r)}}),r.render("Cell"))})}return n.useEffect(function(){e.onSort&&e.onSort(L)},[L]),n.useEffect(function(){e.globalFilter&&T(e.globalFilter)},[e.globalFilter]),n.useEffect(function(){e.hiddenColumns&&A(e.hiddenColumns)},[e.hiddenColumns&&e.hiddenColumns.length]),n.createElement("div",Object.assign({},k(),{className:null!==(r=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==r?r:""}),n.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},w.map(function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerRow)&&void 0!==a?a:""}),t.headers.map(function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return n.createElement(S,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&n.createElement(S,{column:t,theme:e.theme}))}))})),n.createElement("div",Object.assign({},x(),{className:null!==(p=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==p?p:""}),e.enableSortableRows?n.createElement(o.Q,{ids:U.map(function(e){return e.original.id}),getDragOverlay:function(t){var r,a,l=U.findIndex(function(e){return e.original.id===t}),i=U[l];return n.createElement("div",Object.assign({},e,{className:(r=e.theme,a="g-0 ",r&&(a+=r.row),a),style:m}),O(i))},onSortEnd:e.onSortingRowsEnd},I()):I()))}function x(e){var t=e.enableSlider,r=e.scrollIncrement,l=e.scrollable,s=E(e,["enableSlider","scrollIncrement","scrollable"]),o=function(){var e,t,r=n.useRef(null),a=(e=n.useState(h(r)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||v(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.")}()),l=a[0],s=a[1],o=i.q.throttle(function(){s(h(r))},200),c=n.useCallback(function(e){var t;r.current&&(null===(t=r.current)||void 0===t||t.removeEventListener("scroll",o)),e&&(s(h(r)),e.addEventListener("scroll",o)),r.current=e},[]);return n.useEffect(function(){(null==r?void 0:r.current)&&s(h(r))},[r]),{ref:c,scrollState:l,scroll:function(e){var t;null===(t=r.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),c=o.ref,u=o.scrollState,m=o.scroll;if(l)return n.createElement(a.$B,{renderTrackHorizontal:function(){return n.createElement("div",{className:b.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},n.createElement(k,Object.assign({},s)));if(!t)return n.createElement(k,Object.assign({},s));function p(e){m(r*("right"===e?1:-1))}return n.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},n.createElement("div",{className:"px-4"},n.createElement("div",{className:"position-relative"},n.createElement(d.W,{direction:d.f.Left,onClick:function(){return p("left")},hide:!u.canScrollLeft}),n.createElement("div",{className:"".concat(b.scrollContainer," ").concat(e.scrollContainerClassName),ref:c},n.createElement(k,Object.assign({},s))),n.createElement(d.W,{direction:d.f.Right,onClick:function(){return p("right")},hide:!u.canScrollRight}))))}x.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},17291:(e,t,r)=>{r.d(t,{C:()=>i});var n=r(32735),a=r(49935),l=r(96728);function i(e){var t=n.useContext(l.e).showButtons;return n.createElement("div",{className:"d-flex justify-content-between"},e.hideHeader?n.createElement("div",null):n.createElement("div",null,n.createElement("h1",{className:"h2"},e.title),e.breadcrumbs&&n.createElement("div",{className:"pb-3"},n.createElement(a.Oo,{breadcrumbs:e.breadcrumbs}))),e.loaded&&t&&n.createElement("div",{className:"d-flex align-items-center"},e.backButton,e.continueButton))}},79352:(e,t,r)=>{r.d(t,{a:()=>o});var n=r(32735),a=r(23481),l=r(15611),i=a.T.encloseNamespace("shared.wizardStepList");function s(e){var t,r,a,i,s,o=n.createElement(n.Fragment,null,n.createElement("div",{className:"d-flex"},!e.hideStepNumber&&n.createElement("div",{className:"flex-shrink-0 flex-grow-0"},"".concat(e.index+1,".")," "),n.createElement("div",null,e.text)),e.subText&&n.createElement("div",{className:"ms-2 ps-1 pt-1"},e.subText)),c="px-2 py-1 mb-1 rounded d-inline-block";return e.isSelected&&(c+=" ".concat((null===(t=e.theme)||void 0===t?void 0:t.isSelectedOverride)||"bg-light-blue fw-semibold")),!e.isSelected&&e.isCompleted&&(c+=" ".concat((null===(r=e.theme)||void 0===r?void 0:r.isCompletedOverride)||"text-info")),n.createElement("li",{className:null===(a=e.theme)||void 0===a?void 0:a.item},e.isCompleted&&e.appLink?n.createElement(l.F,{appLink:e.appLink,className:"".concat(c," ").concat((null===(i=e.theme)||void 0===i?void 0:i.itemContent)||"")},o):n.createElement("div",{className:"".concat(c," ").concat((null===(s=e.theme)||void 0===s?void 0:s.itemContent)||"")},o))}function o(e){var t,r=e.steps.reduce(function(t,r,n){return r.id===e.currentStep&&(t=n+1),t},1);return n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},i("stepNumber",{currentStep:r,totalSteps:e.steps.length})),n.createElement("ol",{className:"list-unstyled ".concat((null===(t=e.theme)||void 0===t?void 0:t.itemsContainer)||"")},e.steps.map(function(t,a){var l=t.id===e.currentStep,i=r>a+1;return n.createElement(s,{index:a,key:t.id,text:t.text,subText:t.subText,isSelected:l,isCompleted:i,appLink:!e.disableAppLinks&&t.appLink,disabled:t.disabled,theme:e.theme})})))}},14794:(e,t,r)=>{r.r(t),r.d(t,{BulkUserUploadFixDuplicatesView:()=>Q});var n=r(32735),a=r(70680),l=r(23481),i=r(81886),s=r(20354),o=r(27150),c=r(1048),u=r(67370),d=r(63598),m=r(93898),p=r(45541),f=r(19717),v=r(91693),g=r(83345),h=r(96728),b=r(76881),y=r(35223),E=r(97958),S="userManager.userDuplicatesEmptyState";function k(e){var t=(0,p.V)().existingUsersHash,r=!!Object.keys(t).length;return n.createElement(E.u,null,n.createElement(E.u.Image,{src:e.imageUrl}),n.createElement(E.u.Heading,null,n.createElement(g.x,{namespace:S,phrase:"heading"})),n.createElement(E.u.Cta,{text:l.T.getPhrase(S,r?"next":"create"),onClick:e.onClickConfirm,className:"btn btn-dark"}))}var x=r(70226),w=r(6748),U=r(11607),C=r(83914),N="userManager.userDuplicateSet",T=function(e,t){return[{Header:l.T.getPhrase(N,"firstName"),id:"firstName",accessor:"firstName",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:12.5},{Header:l.T.getPhrase(N,"lastName"),id:"surname",accessor:"surname",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:12.5},{Header:l.T.getPhrase(N,"email"),id:"email",Cell:function(e){var t=e.row.original,r=t.errorCodes.find(function(e){return e===x.x.EmailAlreadyExisted});return n.createElement("div",{className:"w-100 ".concat(r?"text-danger":"")},t.email)},width:39},{Header:l.T.getPhrase(N,"username"),id:"username",Cell:function(e){var t=e.row.original,r=t.errorCodes.find(function(e){return e===x.x.UsernameAlreadyExisted});return n.createElement("div",{className:"w-100 ".concat(r?"text-danger":"")},t.username)},width:29},{Header:"",id:"actions",accessor:"lookupId",Cell:function(r){var a=r.value;return n.createElement("div",{className:"w-100 d-flex align-items-center"},n.createElement(U.L,{className:"me-2 cursor-pointer",onClick:function(){return e(a)}},n.createElement(C.x,{svgName:y.vn.Edit,title:l.T.getPhrase(N,"editTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0})),n.createElement(U.L,{className:"cursor-pointer",onClick:function(){return t(a)}},n.createElement(C.x,{svgName:y.vn.Close,title:l.T.getPhrase(N,"deleteTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0})))},width:7}]},A="userManager.userDuplicateSet",L={header:"fw-semibold pb-1",headerCell:"px-2 py-1",cell:"px-2 py-1"};function I(e){var t,r,a=(t=e.set.errorCodes,r=e.userType===b.Y.Learner,2===t.length?l.T.getPhrase(A,r?"duplicateUsernameAndEmailStudents":"duplicateUsernameAndEmailStaff"):t.find(function(e){return e===x.x.UsernameAlreadyExisted})?l.T.getPhrase(A,r?"duplicateUsernamesStudents":"duplicateUsernamesStaff"):t.find(function(e){return e===x.x.EmailAlreadyExisted})?l.T.getPhrase(A,r?"duplicateEmailsStudents":"duplicateEmailsStaff"):"");return a?n.createElement("div",{className:"pb-4"},n.createElement("h3",{className:"h5"},n.createElement(g.x,{namespace:A,phrase:"heading",options:{counter:e.index+1}})),n.createElement("p",{className:"text-danger mb-1"},a),n.createElement("div",{className:"p-2 border rounded-3"},n.createElement(w.i,{columns:T(function(t){return e.onClickEdit(e.set.users.find(function(e){return e.lookupId===t}))},function(t){return e.onClickDelete([t])}),data:e.set.users.map(function(t){return{lookupId:t.lookupId,firstName:t.firstName,surname:t.surname,email:t.email,username:t.username,errorCodes:e.set.errorCodes}}),theme:L}))):n.createElement(n.Fragment,null)}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.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)?P(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 P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function R(e){var t=(0,p.V)(),r=t.users,a=t.duplicateSets,i=n.useContext(h.e),s=i.setDisableNext,o=i.setOnClickConfirm,E=e.userType===b.Y.Learner?"userManager.studentDuplicates":"userManager.staffDuplicates",S=l.T.encloseNamespace(E),x=O(n.useState([]),2),w=x[0],U=x[1],C=O(n.useState(),2),N=C[0],T=C[1],A=O(n.useState(a),1)[0];return n.useEffect(function(){s(!!(null==a?void 0:a.length))},[null==a?void 0:a.length]),n.useEffect(function(){o(function(){return e.onClickConfirm})},[e.onClickConfirm]),(null==r?void 0:r.length)?n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(g.x,{namespace:E,phrase:"heading"})),n.createElement("main",{className:"pb-3"},(null==a?void 0:a.length)?n.createElement(n.Fragment,null,n.createElement("p",{className:"mb-3 fw-semibold"},n.createElement(g.x,{namespace:E,phrase:"subheading"})),n.createElement("div",{className:"pb-3"},n.createElement(v.h,{svgName:y.vn.Upload,appLink:e.appLinks.userUploadPopup,className:"btn btn-outline-dark me-2"},n.createElement(g.x,{namespace:E,phrase:"reupload"}))),A.map(function(t,r){var l=t.users.map(function(e){return e.lookupId}),i=a.find(function(e){var t=e.users.map(function(e){return e.lookupId});return c.t.isEqual(l,t)});return i.errorCodes.length?n.createElement(I,{key:r,index:r,set:i,userType:e.userType,onClickEdit:T,onClickDelete:U}):n.createElement(n.Fragment,{key:r})})):n.createElement(n.Fragment,null,n.createElement("p",{className:"mb-3"},n.createElement(g.x,{namespace:E,phrase:"emptyStateSubheading"})),n.createElement(k,{imageUrl:e.emptyStateImageUrl,onClickConfirm:e.onClickConfirm}))),!!N&&n.createElement(m.n,{key:N.lookupId,user:N,setUser:T,closePopup:function(){return(0,u.UJ)(T,e.closePopup)},title:S("editUser"),userType:e.userType,analyticsOptions:f.b.getAnalyticsOptions(e.userType),currentUser:e.currentUser,yearGroups:e.yearGroups,validateUser:e.validateUser,formSize:e.formSize,emailRequired:e.emailRequired,passwordPolicy:e.passwordPolicy,appLinks:e.appLinks,localErrorMessage:e.localErrorMessage,validateEmail:e.validateEmail}),!!w.length&&n.createElement(d.Q,{users:w,userType:e.userType,closePopup:function(){return(0,u.RF)(U,e.closePopup)},analyticsOptions:f.b.getAnalyticsOptions(e.userType)})):n.createElement(n.Fragment,null)}var j=r(26055),F=r(43820),H=r(149),M=r(39739),B=r(31949),D=r(79612),W=r(99742),z=r(29613),V=r(26234),$=r(47288),G=r(18087),q="userManager.bulkUploadFixDuplicates";function Q(e){var t=(0,p.V)(),r=t.users,c=t.existingUsersHash,u=s.a.useBasicFetch(B.N.currentUser()),d=s.a.useBasicFetch(u.data&&$.N.yearGroups(u.data.customerId)),m=s.a.useBasicFetch(u.data&&V.F.getCustomerSecuritySettings(u.data.customerId)),v=(0,a.I0)(),g=s.a.useGetFetchAsync(),h=(0,G.Y)(e.userType);(0,D.M)({title:l.T.getPhrase(q,"pageTitle")});var y=H.b.useCreateJobErrorAlert();function E(t){i.Q.C$.trigger(Object.assign(Object.assign({},h.userUploadStatus.polling),{params:{userType:e.userType,jobId:t.id}}))}return u.data&&d.data?n.createElement(j.A.Provider,{value:F.a.Primary},n.createElement(o.$,{appLinks:h,userType:e.userType,currentStep:"fix-duplicates",canAddExistingUsers:!0},n.createElement("div",{className:"px-3"},n.createElement(R,{onClickConfirm:function(){var t;Object.keys(c).length?i.Q.C$.trigger(h.userUploadReviewExistingAccounts):(t=f.b.getJobData({users:r,customerId:u.data.customerId,userType:e.userType}),s.a.fetch(v,z.q.createJob(t,E,y)))},closePopup:e.closePopup,appLinks:h,userType:e.userType,currentUser:u.data,yearGroups:d.data,validateUser:function(t){var r=M.P.formatCreateOrValidateUserRequest([t],e.userType,u.data.customerId);return g($.N.bulkValidate(r))},validateEmail:function(t){var r={userEmails:[{email:t,userType:e.userType}]};return g($.N.bulkCheckEmail(r,u.data.customerId))},emailRequired:e.userType===b.Y.Staff,passwordPolicy:m.data,emptyStateImageUrl:W.W.EmptyStates.UserManager.DUPLICATES,localErrorMessage:f.b.getErrorMessageOverride(e.userType)})))):n.createElement(n.Fragment,null)}}}]);
2
- //# sourceMappingURL=8756-a3f84f1b64-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8756],{27150:(e,t,r)=>{r.d(t,{A:()=>x,$:()=>w});var n=r(32735),a=r(23481),l=r(81886),i=r(15611),s=r(83345),o="userManager.userWizardBackButtons";function c(e){return"status"===e.currentStep?n.createElement(n.Fragment,null):n.createElement(i.F,{className:"btn btn-link me-2",appLink:e.appLinks.userManager},n.createElement(s.x,{namespace:o,phrase:"cancel"}))}var u=r(98269),d=r(24453),m=r(45541),p=r(96728),f="userManager.userWizardHeader";function v(e){var t=(0,m.V)(),r=t.duplicateSets,a=t.hasExistingUsers,l=n.useContext(p.e),o=l.disableNext,c=l.onClickConfirm,v=!!(null==r?void 0:r.length),g=d.O.getCurrentContext().appLink;return g.action===e.appLinks.userUploadStatus.polling.action||g.action===e.appLinks.userUploadStatus.complete.action?n.createElement(n.Fragment,null):function(){switch(g.action){case e.appLinks.userUploadPopup.action:case e.appLinks.userUploadReviewAccounts.action:return!v&&!a;case e.appLinks.userUploadFixDuplicates.action:case e.appLinks.userUploadReviewExistingAccounts.action:return!a;default:return!0}}()?n.createElement(u.Z,{className:o?"disabled":"",variant:"dark",onClick:c,disabled:o},n.createElement(s.x,{namespace:f,phrase:"create"})):n.createElement(i.F,{className:"btn btn-dark ".concat(o?"disabled":""),appLink:function(){switch(g.action){case e.appLinks.userUploadReviewAccounts.action:if(v)return e.appLinks.userUploadFixDuplicates;if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadFixDuplicates.action:if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadReviewExistingAccounts.action:if(e.canAddExistingUsers)return e.appLinks.userUploadConfirmation;default:return null}}(),disabled:o},n.createElement(s.x,{namespace:f,phrase:"next"}))}var g=r(19717),h=r(17291),b=r(79352),y=r(76881),E=r(89476);const S={wizardContent:"hHr3C"};var k="userManager.bulkUserUploadWizardLayout",x="bulk:user:upload:nav:lock";function w(e){var t=(0,m.V)(),r=t.users,i=t.setUsers,s=(0,E.f)();return n.useEffect(function(){if(r)return s.lock({id:x,title:a.T.getPhrase(k,"navLockTitle"),text:a.T.getPhrase(k,"navLockBody"),appLinkWhitelist:g.b.getWizardAppLinks(e.appLinks),onConfirmUnlock:function(){i(null)}}),function(){s.unlock(x)};l.Q.C$.trigger(e.appLinks.userManager,{replace:!0})},[]),n.useEffect(function(){(null==r?void 0:r.length)||(s.unlock(x),l.Q.C$.trigger(e.appLinks.userManager,{replace:!0}))},[null==r?void 0:r.length]),r?n.createElement(p.D,null,n.createElement("div",{className:"px-3"},n.createElement(h.C,{title:a.T.getPhrase(k,"bulkUpload"),currentStep:e.currentStep,loaded:!0,continueButton:n.createElement(v,{currentStep:e.currentStep,appLinks:e.appLinks,canAddExistingUsers:e.canAddExistingUsers}),backButton:n.createElement(c,{currentStep:e.currentStep,appLinks:e.appLinks}),breadcrumbs:[{name:a.T.getPhrase(k,"settingsBreadcrumb"),appLink:e.appLinks.settings},{name:a.T.getPhrase(k,e.userType===y.Y.Learner?"studentManager":"staffManager"),appLink:e.appLinks.userManager},{name:a.T.getPhrase(k,"bulkUpload"),active:!0}]}),n.createElement("div",{className:"row g-0"},n.createElement("div",{className:"col-2"},n.createElement(b.a,{steps:g.b.getSteps(e.userType,e.canAddExistingUsers),currentStep:e.currentStep})),n.createElement("div",{className:"col-10 ".concat(S.wizardContent)},e.children)))):n.createElement(n.Fragment,null)}},45541:(e,t,r)=>{r.d(t,{V:()=>u});var n=r(2948),a=r(38143),l=r(39739);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e,t,r){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t){return Object.keys(e||{}).reduce(function(r,n){return t[n]||(r[n]=e[n]),r},{})}var u=function(){var e,t,r,i=(t=(0,n.D)(a.g.BULK_USER_UPLOAD),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,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(t,r)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.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)?o(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.")}()),u=i[0],d=i[1];function m(e){var t=l.P.getNewDuplicates(e);d("duplicateSets",t)}return{users:null==u?void 0:u.users,invalidUsers:null==u?void 0:u.invalidUsers,hasValidatedUsers:!!(null==u?void 0:u.invalidUsers),existingUsersHash:(null==u?void 0:u.existingUsersHash)||{},hasExistingUsers:!!Object.keys((null==u?void 0:u.existingUsersHash)||{}).length,existingUserToAdd:null==u?void 0:u.existingUserToAdd,duplicateSets:null==u?void 0:u.duplicateSets,newUsers:(null===(e=null==u?void 0:u.users)||void 0===e?void 0:e.filter(function(e){var t;return!(null===(t=null==u?void 0:u.existingUsersHash)||void 0===t?void 0:t[e.lookupId])}))||[],setUsers:function(e){d({users:e,invalidUsers:null,existingUsersHash:null}),m(e)},setInvalidUsers:function(e){return d("invalidUsers",e)},setExistingUsers:function(e){return d("existingUsersHash",e)},updateUser:function(e){var t=u.users.map(function(t){return t.lookupId!==e.lookupId?t:e});d({users:t,invalidUsers:c(null==u?void 0:u.invalidUsers,s({},e.lookupId,!0)),existingUsersHash:null==u?void 0:u.existingUsersHash}),m(t)},deleteUsers:function(e){var t,r=e.reduce(function(e,t){return e[t]=!0,e},{}),n=u.users.filter(function(e){return!r[e.lookupId]});d({users:n,invalidUsers:c(null==u?void 0:u.invalidUsers,r),existingUsersHash:c(null==u?void 0:u.existingUsersHash,r),existingUserToAdd:null===(t=null==u?void 0:u.existingUserToAdd)||void 0===t?void 0:t.filter(function(e){return!!(null==u?void 0:u.existingUsersHash[e.lookupId])})}),m(n)}}}},6748:(e,t,r)=>{r.d(t,{i:()=>x});var n=r(32735),a=r(42648),l=r(35509),i=r(91967),s=r(15611),o=r(17808),c=r(1287),u=r(83914),d=r(90281),m={opacity:"0.8",cursor:"grabbing"},p=r(35223);function f(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return g(e,t);var r={}.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)?g(e,t):void 0}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t,r,n,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(r=e.current)||void 0===r?void 0:r.scrollLeft)+1<(null===(n=e.current)||void 0===n?void 0:n.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const b={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var E=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r};function S(e){var t,r;return e.column.canSort?n.createElement("span",{className:"".concat(b.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(r=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==r?r:"")},n.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?p.vn.ArrowRight:p.vn.ArrowLeft,size:u.S.Small})):n.createElement(n.Fragment,null)}function k(e){var t,r,a,u,d,p,v,g,h={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(h.initialState={selectedRowIds:(v=e.initialSelectedRowIds,g={},v.forEach(function(e){return g[e]=!0}),g)}),e.getRowId&&(h.getRowId=e.getRowId);var b,E=l.useTable.apply(void 0,[h].concat((b=function(e){var t=[l.useSortBy,l.useRowSelect,"flex"===e.layout?l.useFlexLayout:l.useBlockLayout];return e.allowFiltering&&(t=[].concat(f(t),[l.useFilters])),e.allowGlobalFiltering&&(t=[].concat(f(t),[l.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return y(e)}(b)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(b)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var r={}.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)?y(e,t):void 0}}(b)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),k=E.getTableProps,x=E.getTableBodyProps,w=E.headerGroups,U=E.rows,C=E.prepareRow,N=E.toggleAllRowsSelected,T=E.setGlobalFilter,A=E.setHiddenColumns,L=E.state.sortBy;function I(){return!U.length&&e.emptyState?e.emptyState:U.map(function(t){C(t);var r=function(t){var r,n,a,l,s,o=i.q.isFunction(null===(r=e.theme)||void 0===r?void 0:r.row)?e.theme.row(t):null!==(a=null===(n=e.theme)||void 0===n?void 0:n.row)&&void 0!==a?a:"";return t.isSelected&&(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)&&(o+=" ".concat(null===(s=e.theme)||void 0===s?void 0:s.selectedRow)),e.onSelectRow&&(o+=" cursor-pointer"),e.enableSortableRows&&(o+=" cursor-grab"),o}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function l(){e.onSelectRow&&(e.allowSelectMultipleRows||N(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function o(e,i){var o=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return a?n.createElement("div",{role:"row",key:t.id},n.createElement(s.F,Object.assign({},e,o,{className:r,appLink:a}),O(t))):n.createElement("div",Object.assign({},e,o,{key:t.id,role:"row",className:r,onClick:l}),O(t))}var u=t.getRowProps();return e.enableSortableRows?n.createElement(c.W,{id:t.original.id,key:t.id,childProps:u,childComponent:n.forwardRef(function(e,t){return o(e,t)})}):o(u)})}function O(t){return t.cells.map(function(r){var a=function(t,r){var n,a,l="";return"function"==typeof(null===(n=e.theme)||void 0===n?void 0:n.cell)&&(l=e.theme.cell(t,r)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(l=e.theme.cell),e.onSelectCell&&(l+=" cursor-pointer"),l}(t,r);return n.createElement("div",Object.assign({key:r.column.id},r.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(r)}}),r.render("Cell"))})}return n.useEffect(function(){e.onSort&&e.onSort(L)},[L]),n.useEffect(function(){e.globalFilter&&T(e.globalFilter)},[e.globalFilter]),n.useEffect(function(){e.hiddenColumns&&A(e.hiddenColumns)},[e.hiddenColumns&&e.hiddenColumns.length]),n.createElement("div",Object.assign({},k(),{className:null!==(r=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==r?r:""}),n.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},w.map(function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerRow)&&void 0!==a?a:""}),t.headers.map(function(t){var r,a;return n.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(r=e.theme)||void 0===r?void 0:r.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return n.createElement(S,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&n.createElement(S,{column:t,theme:e.theme}))}))})),n.createElement("div",Object.assign({},x(),{className:null!==(p=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==p?p:""}),e.enableSortableRows?n.createElement(o.Q,{ids:U.map(function(e){return e.original.id}),getDragOverlay:function(t){var r,a,l=U.findIndex(function(e){return e.original.id===t}),i=U[l];return n.createElement("div",Object.assign({},e,{className:(r=e.theme,a="g-0 ",r&&(a+=r.row),a),style:m}),O(i))},onSortEnd:e.onSortingRowsEnd},I()):I()))}function x(e){var t=e.enableSlider,r=e.scrollIncrement,l=e.scrollable,s=E(e,["enableSlider","scrollIncrement","scrollable"]),o=function(){var e,t,r=n.useRef(null),a=(e=n.useState(h(r)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||v(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.")}()),l=a[0],s=a[1],o=i.q.throttle(function(){s(h(r))},200),c=n.useCallback(function(e){var t;r.current&&(null===(t=r.current)||void 0===t||t.removeEventListener("scroll",o)),e&&(s(h(r)),e.addEventListener("scroll",o)),r.current=e},[]);return n.useEffect(function(){(null==r?void 0:r.current)&&s(h(r))},[r]),{ref:c,scrollState:l,scroll:function(e){var t;null===(t=r.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),c=o.ref,u=o.scrollState,m=o.scroll;if(l)return n.createElement(a.$B,{renderTrackHorizontal:function(){return n.createElement("div",{className:b.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},n.createElement(k,Object.assign({},s)));if(!t)return n.createElement(k,Object.assign({},s));function p(e){m(r*("right"===e?1:-1))}return n.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},n.createElement("div",{className:"px-4"},n.createElement("div",{className:"position-relative"},n.createElement(d.W,{direction:d.f.Left,onClick:function(){return p("left")},hide:!u.canScrollLeft}),n.createElement("div",{className:"".concat(b.scrollContainer," ").concat(e.scrollContainerClassName),ref:c},n.createElement(k,Object.assign({},s))),n.createElement(d.W,{direction:d.f.Right,onClick:function(){return p("right")},hide:!u.canScrollRight}))))}x.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},17291:(e,t,r)=>{r.d(t,{C:()=>i});var n=r(32735),a=r(49935),l=r(96728);function i(e){var t=n.useContext(l.e).showButtons;return n.createElement("div",{className:"d-flex justify-content-between"},e.hideHeader?n.createElement("div",null):n.createElement("div",null,n.createElement("h1",{className:"h2"},e.title),e.breadcrumbs&&n.createElement("div",{className:"pb-3"},n.createElement(a.Oo,{breadcrumbs:e.breadcrumbs}))),e.loaded&&t&&n.createElement("div",{className:"d-flex align-items-center"},e.backButton,e.continueButton))}},79352:(e,t,r)=>{r.d(t,{a:()=>o});var n=r(32735),a=r(23481),l=r(15611),i=a.T.encloseNamespace("shared.wizardStepList");function s(e){var t,r,a,i,s,o=n.createElement(n.Fragment,null,n.createElement("div",{className:"d-flex"},!e.hideStepNumber&&n.createElement("div",{className:"flex-shrink-0 flex-grow-0"},"".concat(e.index+1,".")," "),n.createElement("div",null,e.text)),e.subText&&n.createElement("div",{className:"ms-2 ps-1 pt-1"},e.subText)),c="px-2 py-1 mb-1 rounded d-inline-block";return e.isSelected&&(c+=" ".concat((null===(t=e.theme)||void 0===t?void 0:t.isSelectedOverride)||"bg-light-blue fw-semibold")),!e.isSelected&&e.isCompleted&&(c+=" ".concat((null===(r=e.theme)||void 0===r?void 0:r.isCompletedOverride)||"text-info")),n.createElement("li",{className:null===(a=e.theme)||void 0===a?void 0:a.item},e.isCompleted&&e.appLink?n.createElement(l.F,{appLink:e.appLink,className:"".concat(c," ").concat((null===(i=e.theme)||void 0===i?void 0:i.itemContent)||"")},o):n.createElement("div",{className:"".concat(c," ").concat((null===(s=e.theme)||void 0===s?void 0:s.itemContent)||"")},o))}function o(e){var t,r=e.steps.reduce(function(t,r,n){return r.id===e.currentStep&&(t=n+1),t},1);return n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},i("stepNumber",{currentStep:r,totalSteps:e.steps.length})),n.createElement("ol",{className:"list-unstyled ".concat((null===(t=e.theme)||void 0===t?void 0:t.itemsContainer)||"")},e.steps.map(function(t,a){var l=t.id===e.currentStep,i=r>a+1;return n.createElement(s,{index:a,key:t.id,text:t.text,subText:t.subText,isSelected:l,isCompleted:i,appLink:!e.disableAppLinks&&t.appLink,disabled:t.disabled,theme:e.theme})})))}},14794:(e,t,r)=>{r.r(t),r.d(t,{BulkUserUploadFixDuplicatesView:()=>Q});var n=r(32735),a=r(70680),l=r(23481),i=r(81886),s=r(20354),o=r(27150),c=r(1048),u=r(67370),d=r(63598),m=r(93898),p=r(45541),f=r(19717),v=r(91693),g=r(83345),h=r(96728),b=r(76881),y=r(35223),E=r(97958),S="userManager.userDuplicatesEmptyState";function k(e){var t=(0,p.V)().existingUsersHash,r=!!Object.keys(t).length;return n.createElement(E.u,null,n.createElement(E.u.Image,{src:e.imageUrl}),n.createElement(E.u.Heading,null,n.createElement(g.x,{namespace:S,phrase:"heading"})),n.createElement(E.u.Cta,{text:l.T.getPhrase(S,r?"next":"create"),onClick:e.onClickConfirm,className:"btn btn-dark"}))}var x=r(70226),w=r(6748),U=r(11607),C=r(83914),N="userManager.userDuplicateSet",T=function(e,t){return[{Header:l.T.getPhrase(N,"firstName"),id:"firstName",accessor:"firstName",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:12.5},{Header:l.T.getPhrase(N,"lastName"),id:"surname",accessor:"surname",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:12.5},{Header:l.T.getPhrase(N,"email"),id:"email",Cell:function(e){var t=e.row.original,r=t.errorCodes.find(function(e){return e===x.x.EmailAlreadyExisted});return n.createElement("div",{className:"w-100 ".concat(r?"text-danger":"")},t.email)},width:39},{Header:l.T.getPhrase(N,"username"),id:"username",Cell:function(e){var t=e.row.original,r=t.errorCodes.find(function(e){return e===x.x.UsernameAlreadyExisted});return n.createElement("div",{className:"w-100 ".concat(r?"text-danger":"")},t.username)},width:29},{Header:"",id:"actions",accessor:"lookupId",Cell:function(r){var a=r.value;return n.createElement("div",{className:"w-100 d-flex align-items-center"},n.createElement(U.L,{className:"me-2 cursor-pointer",onClick:function(){return e(a)}},n.createElement(C.x,{svgName:y.vn.Edit,title:l.T.getPhrase(N,"editTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0})),n.createElement(U.L,{className:"cursor-pointer",onClick:function(){return t(a)}},n.createElement(C.x,{svgName:y.vn.Close,title:l.T.getPhrase(N,"deleteTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0})))},width:7}]},A="userManager.userDuplicateSet",L={header:"fw-semibold pb-1",headerCell:"px-2 py-1",cell:"px-2 py-1"};function I(e){var t,r,a=(t=e.set.errorCodes,r=e.userType===b.Y.Learner,2===t.length?l.T.getPhrase(A,r?"duplicateUsernameAndEmailStudents":"duplicateUsernameAndEmailStaff"):t.find(function(e){return e===x.x.UsernameAlreadyExisted})?l.T.getPhrase(A,r?"duplicateUsernamesStudents":"duplicateUsernamesStaff"):t.find(function(e){return e===x.x.EmailAlreadyExisted})?l.T.getPhrase(A,r?"duplicateEmailsStudents":"duplicateEmailsStaff"):"");return a?n.createElement("div",{className:"pb-4"},n.createElement("h3",{className:"h5"},n.createElement(g.x,{namespace:A,phrase:"heading",options:{counter:e.index+1}})),n.createElement("p",{className:"text-danger mb-1"},a),n.createElement("div",{className:"p-2 border rounded-3"},n.createElement(w.i,{columns:T(function(t){return e.onClickEdit(e.set.users.find(function(e){return e.lookupId===t}))},function(t){return e.onClickDelete([t])}),data:e.set.users.map(function(t){return{lookupId:t.lookupId,firstName:t.firstName,surname:t.surname,email:t.email,username:t.username,errorCodes:e.set.errorCodes}}),theme:L}))):n.createElement(n.Fragment,null)}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,l,i,s=[],o=!0,c=!1;try{if(l=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=l.call(r)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,a=e}finally{try{if(!o&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.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)?P(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 P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function R(e){var t=(0,p.V)(),r=t.users,a=t.duplicateSets,i=n.useContext(h.e),s=i.setDisableNext,o=i.setOnClickConfirm,E=e.userType===b.Y.Learner?"userManager.studentDuplicates":"userManager.staffDuplicates",S=l.T.encloseNamespace(E),x=O(n.useState([]),2),w=x[0],U=x[1],C=O(n.useState(),2),N=C[0],T=C[1],A=O(n.useState(a),1)[0];return n.useEffect(function(){s(!!(null==a?void 0:a.length))},[null==a?void 0:a.length]),n.useEffect(function(){o(function(){return e.onClickConfirm})},[e.onClickConfirm]),(null==r?void 0:r.length)?n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(g.x,{namespace:E,phrase:"heading"})),n.createElement("main",{className:"pb-3"},(null==a?void 0:a.length)?n.createElement(n.Fragment,null,n.createElement("p",{className:"mb-3 fw-semibold"},n.createElement(g.x,{namespace:E,phrase:"subheading"})),n.createElement("div",{className:"pb-3"},n.createElement(v.h,{svgName:y.vn.Upload,appLink:e.appLinks.userUploadPopup,className:"btn btn-outline-dark me-2"},n.createElement(g.x,{namespace:E,phrase:"reupload"}))),A.map(function(t,r){var l=t.users.map(function(e){return e.lookupId}),i=a.find(function(e){var t=e.users.map(function(e){return e.lookupId});return c.t.isEqual(l,t)});return i.errorCodes.length?n.createElement(I,{key:r,index:r,set:i,userType:e.userType,onClickEdit:T,onClickDelete:U}):n.createElement(n.Fragment,{key:r})})):n.createElement(n.Fragment,null,n.createElement("p",{className:"mb-3"},n.createElement(g.x,{namespace:E,phrase:"emptyStateSubheading"})),n.createElement(k,{imageUrl:e.emptyStateImageUrl,onClickConfirm:e.onClickConfirm}))),!!N&&n.createElement(m.n,{key:N.lookupId,user:N,setUser:T,closePopup:function(){return(0,u.UJ)(T,e.closePopup)},title:S("editUser"),userType:e.userType,analyticsOptions:f.b.getAnalyticsOptions(e.userType),currentUser:e.currentUser,yearGroups:e.yearGroups,validateUser:e.validateUser,formSize:e.formSize,emailRequired:e.emailRequired,passwordPolicy:e.passwordPolicy,appLinks:e.appLinks,localErrorMessage:e.localErrorMessage,validateEmail:e.validateEmail}),!!w.length&&n.createElement(d.Q,{users:w,userType:e.userType,closePopup:function(){return(0,u.RF)(U,e.closePopup)},analyticsOptions:f.b.getAnalyticsOptions(e.userType)})):n.createElement(n.Fragment,null)}var j=r(26055),F=r(43820),H=r(149),M=r(39739),B=r(31949),D=r(79612),W=r(99742),z=r(29613),V=r(80658),$=r(47288),G=r(18087),q="userManager.bulkUploadFixDuplicates";function Q(e){var t=(0,p.V)(),r=t.users,c=t.existingUsersHash,u=s.a.useBasicFetch(B.N.currentUser()),d=s.a.useBasicFetch(u.data&&$.N.yearGroups(u.data.customerId)),m=s.a.useBasicFetch(u.data&&V.F.getCustomerSecuritySettings(u.data.customerId)),v=(0,a.I0)(),g=s.a.useGetFetchAsync(),h=(0,G.Y)(e.userType);(0,D.M)({title:l.T.getPhrase(q,"pageTitle")});var y=H.b.useCreateJobErrorAlert();function E(t){i.Q.C$.trigger(Object.assign(Object.assign({},h.userUploadStatus.polling),{params:{userType:e.userType,jobId:t.id}}))}return u.data&&d.data?n.createElement(j.A.Provider,{value:F.a.Primary},n.createElement(o.$,{appLinks:h,userType:e.userType,currentStep:"fix-duplicates",canAddExistingUsers:!0},n.createElement("div",{className:"px-3"},n.createElement(R,{onClickConfirm:function(){var t;Object.keys(c).length?i.Q.C$.trigger(h.userUploadReviewExistingAccounts):(t=f.b.getJobData({users:r,customerId:u.data.customerId,userType:e.userType}),s.a.fetch(v,z.q.createJob(t,E,y)))},closePopup:e.closePopup,appLinks:h,userType:e.userType,currentUser:u.data,yearGroups:d.data,validateUser:function(t){var r=M.P.formatCreateOrValidateUserRequest([t],e.userType,u.data.customerId);return g($.N.bulkValidate(r))},validateEmail:function(t){var r={userEmails:[{email:t,userType:e.userType}]};return g($.N.bulkCheckEmail(r,u.data.customerId))},emailRequired:e.userType===b.Y.Staff,passwordPolicy:m.data,emptyStateImageUrl:W.W.EmptyStates.UserManager.DUPLICATES,localErrorMessage:f.b.getErrorMessageOverride(e.userType)})))):n.createElement(n.Fragment,null)}}}]);
2
+ //# sourceMappingURL=8756-560899a88b-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/8756-a3f84f1b64-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/header/back-buttons/BulkUserUploadBackButton.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/header/continue-buttons/BulkUserUploadContinueButton.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/layout/bulk-user-upload-wizard-layout.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout.tsx","file:///app/packages/libs/shared/src/apps/user-manager/hooks/useBulkUploadUsers.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/components/wizard/header/WizardHeader.tsx","file:///app/packages/libs/shared/src/components/wizard/step-list/WizardStepList.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/empty-state/UserDuplicatesEmptyState.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/user-duplicate-set/UserDuplicateSetUtils.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/user-duplicate-set/UserDuplicateSet.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/UserDuplicates.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/fix-duplicates/BulkUserUploadFixDuplicatesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { BulkUserUploadStepId } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.userWizardBackButtons';\n\ninterface BulkUserUploadBackButtonProps {\n currentStep: BulkUserUploadStepId;\n appLinks: UserManagerAppLinks;\n}\n\nexport function BulkUserUploadBackButton(props: BulkUserUploadBackButtonProps): JSX.Element {\n if (props.currentStep === 'status')\n return <></>;\n\n return (\n <AppLink\n className='btn btn-link me-2'\n appLink={props.appLinks.userManager}\n >\n <Text namespace={namespace} phrase='cancel' />\n </AppLink>\n );\n}","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { ContextService } from 'libs/analytics/services/ContextService';\n\nimport { BulkUserUploadStepId } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\n\nconst namespace = 'userManager.userWizardHeader';\n\ninterface BulkUserUploadContinueButtonProps {\n currentStep: BulkUserUploadStepId;\n appLinks: UserManagerAppLinks;\n canAddExistingUsers: boolean;\n}\n\nexport function BulkUserUploadContinueButton(props: BulkUserUploadContinueButtonProps): JSX.Element {\n const { duplicateSets, hasExistingUsers } = useBulkUploadUsers();\n const { disableNext, onClickConfirm } = React.useContext(WizardLayoutContext);\n\n const spreadsheetHasDuplicates = !!duplicateSets?.length;\n\n const currentAppLink = ContextService.getCurrentContext().appLink;\n\n if (currentAppLink.action === props.appLinks.userUploadStatus.polling.action)\n return <></>;\n\n // we hide the button cuz we have one in the success component\n if (currentAppLink.action === props.appLinks.userUploadStatus.complete.action)\n return <></>;\n\n function willUploadOnNext(): boolean {\n switch (currentAppLink.action) {\n case props.appLinks.userUploadPopup.action:\n case props.appLinks.userUploadReviewAccounts.action:\n return !spreadsheetHasDuplicates && !hasExistingUsers;\n\n case props.appLinks.userUploadFixDuplicates.action:\n return !hasExistingUsers;\n\n case props.appLinks.userUploadReviewExistingAccounts.action:\n return !hasExistingUsers;\n\n default:\n return true;\n }\n }\n\n if (willUploadOnNext()) {\n return (\n <Button\n className={disableNext ? 'disabled' : ''}\n variant='dark'\n onClick={onClickConfirm}\n disabled={disableNext}\n >\n <Text\n namespace={namespace}\n phrase='create'\n />\n </Button>\n );\n }\n\n function getNextAppLink() {\n switch (currentAppLink.action) {\n case props.appLinks.userUploadReviewAccounts.action:\n if (spreadsheetHasDuplicates)\n return props.appLinks.userUploadFixDuplicates;\n if (hasExistingUsers && props.canAddExistingUsers)\n return props.appLinks.userUploadReviewExistingAccounts;\n\n case props.appLinks.userUploadFixDuplicates.action:\n if (hasExistingUsers && props.canAddExistingUsers)\n return props.appLinks.userUploadReviewExistingAccounts;\n\n case props.appLinks.userUploadReviewExistingAccounts.action:\n if (props.canAddExistingUsers)\n return props.appLinks.userUploadConfirmation;\n\n default:\n return null;\n }\n }\n\n return (\n <AppLink\n className={`btn btn-dark ${disableNext ? 'disabled' : ''}`}\n appLink={getNextAppLink()}\n disabled={disableNext}\n >\n <Text\n namespace={namespace}\n phrase='next'\n />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"wizardContent\":\"hHr3C\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { BulkUserUploadBackButton } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/header/back-buttons/BulkUserUploadBackButton';\nimport { BulkUserUploadContinueButton } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/header/continue-buttons/BulkUserUploadContinueButton';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { WizardHeader } from 'libs/shared/components/wizard/header/WizardHeader';\nimport { WizardStepList } from 'libs/shared/components/wizard/step-list/WizardStepList';\nimport { WizardLayoutContextProvider } from 'libs/shared/context/WizardLayoutContext';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\n\nimport styles from './bulk-user-upload-wizard-layout.scss';\n\nexport type BulkUserUploadStepId = 'review-accounts' | 'fix-duplicates' | 'review-existing-accounts' | 'confirmation' |'status';\n\nconst namespace = 'userManager.bulkUserUploadWizardLayout';\nexport const BULK_USER_UPLOAD_NAV_LOCK_ID = 'bulk:user:upload:nav:lock';\n\ntype BulkUserUploadWizardLayoutProps = React.PropsWithChildren<{\n appLinks: UserManagerAppLinks;\n userType: UserGroup;\n currentStep: BulkUserUploadStepId;\n canAddExistingUsers?: boolean;\n}>;\n\nexport function BulkUserUploadWizardLayout(props: BulkUserUploadWizardLayoutProps): JSX.Element {\n const { users, setUsers } = useBulkUploadUsers();\n\n const navLock = useNavLock();\n\n React.useEffect(() => {\n // If there is no view model, redirect away\n if (!users) {\n Core.AppLinkHelper.trigger(props.appLinks.userManager, { replace: true });\n return;\n }\n\n navLock.lock({\n id: BULK_USER_UPLOAD_NAV_LOCK_ID,\n title: LanguageService.getPhrase(namespace, 'navLockTitle'),\n text: LanguageService.getPhrase(namespace, 'navLockBody'),\n appLinkWhitelist: BulkUserUploadHelper.getWizardAppLinks(props.appLinks),\n onConfirmUnlock: () => {\n setUsers(null);\n }\n });\n\n return () => {\n navLock.unlock(BULK_USER_UPLOAD_NAV_LOCK_ID);\n };\n }, []);\n\n React.useEffect(() => {\n if (users?.length)\n return;\n\n navLock.unlock(BULK_USER_UPLOAD_NAV_LOCK_ID);\n Core.AppLinkHelper.trigger(props.appLinks.userManager, { replace: true });\n }, [users?.length]);\n\n if (!users)\n return <></>;\n\n return (\n <WizardLayoutContextProvider>\n <div className='px-3'>\n <WizardHeader<BulkUserUploadStepId>\n title={LanguageService.getPhrase(namespace, 'bulkUpload')}\n currentStep={props.currentStep}\n loaded\n continueButton={\n <BulkUserUploadContinueButton\n currentStep={props.currentStep}\n appLinks={props.appLinks}\n canAddExistingUsers={props.canAddExistingUsers}\n />\n }\n backButton={<BulkUserUploadBackButton currentStep={props.currentStep} appLinks={props.appLinks} />}\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: props.appLinks.settings\n },\n {\n name: LanguageService.getPhrase(namespace, props.userType === UserGroup.Learner ? 'studentManager' : 'staffManager'),\n appLink: props.appLinks.userManager\n },\n {\n name: LanguageService.getPhrase(namespace, 'bulkUpload'),\n active: true\n }\n ]}\n />\n\n <div className='row g-0'>\n <div className='col-2'>\n <WizardStepList<BulkUserUploadStepId>\n steps={BulkUserUploadHelper.getSteps(props.userType, props.canAddExistingUsers)}\n currentStep={props.currentStep}\n />\n </div>\n\n <div className={`col-10 ${styles.wizardContent}`}>\n {props.children}\n </div>\n </div>\n </div>\n </WizardLayoutContextProvider>\n );\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { EditUserRequest } from '../interfaces';\nimport { BulkUserUploadViewModel, UserHash } from '../interfaces/viewmodels/BulkUserUploadViewModel';\nimport { UserManagerHelper } from '../utils/UserManagerHelper';\n\nfunction updateUserHash(userHash: UserHash, updatedUserIdsHash: HashObject<boolean>): UserHash {\n const updatedUsers = Object.keys(userHash || {}).reduce((updatedObj: UserHash, lookupId) => {\n if (!updatedUserIdsHash[lookupId])\n updatedObj[lookupId] = userHash[lookupId];\n return updatedObj;\n }, {});\n\n return updatedUsers;\n}\n\nexport const useBulkUploadUsers = () => {\n const [ viewModel, setViewModel ] = useViewModel<BulkUserUploadViewModel>(SharedViewModelKeys.BULK_USER_UPLOAD);\n\n function initializeUsers(users?: EditUserRequest[]): void {\n setViewModel({\n users,\n invalidUsers: null,\n existingUsersHash: null\n });\n\n updateDuplicates(users);\n }\n\n function updateUser(updatedUser: EditUserRequest): void {\n const updatedUsers = viewModel.users.map(user => {\n if (user.lookupId !== updatedUser.lookupId)\n return user;\n\n return updatedUser;\n });\n\n setViewModel({\n users: updatedUsers,\n invalidUsers: updateUserHash(viewModel?.invalidUsers, { [updatedUser.lookupId]: true }),\n existingUsersHash: viewModel?.existingUsersHash\n });\n\n updateDuplicates(updatedUsers);\n }\n\n function deleteUsers(deletedUsers: string[]): void {\n const userIdHash = deletedUsers.reduce((prev: HashObject, curr) => {\n prev[curr] = true;\n return prev;\n }, {});\n\n const updatedUsers = viewModel.users.filter(user => !userIdHash[user.lookupId]);\n\n setViewModel({\n users: updatedUsers,\n invalidUsers: updateUserHash(viewModel?.invalidUsers, userIdHash),\n existingUsersHash: updateUserHash(viewModel?.existingUsersHash, userIdHash),\n existingUserToAdd: viewModel?.existingUserToAdd?.filter(u => !!viewModel?.existingUsersHash[u.lookupId])\n });\n\n updateDuplicates(updatedUsers);\n }\n\n function updateDuplicates(users?: EditUserRequest[]): void {\n const duplicateSets = UserManagerHelper.getNewDuplicates(users);\n setViewModel('duplicateSets', duplicateSets);\n }\n\n return {\n users: viewModel?.users,\n invalidUsers: viewModel?.invalidUsers,\n hasValidatedUsers: !!viewModel?.invalidUsers,\n existingUsersHash: viewModel?.existingUsersHash || {},\n hasExistingUsers: !!Object.keys(viewModel?.existingUsersHash || {}).length,\n existingUserToAdd: viewModel?.existingUserToAdd,\n duplicateSets: viewModel?.duplicateSets,\n newUsers: viewModel?.users?.filter(u => !viewModel?.existingUsersHash?.[u.lookupId]) || [],\n\n setUsers: initializeUsers,\n setInvalidUsers: (invalidUsers: UserHash) => setViewModel('invalidUsers', invalidUsers),\n setExistingUsers: (existingUsers: UserHash) => setViewModel('existingUsersHash', existingUsers),\n updateUser,\n deleteUsers\n };\n};","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\n\ninterface WizardHeaderProps<TStepId> {\n currentStep: TStepId;\n title: string;\n continueButton: JSX.Element;\n backButton: JSX.Element;\n breadcrumbs?: Breadcrumb[];\n hideHeader?: boolean;\n loaded: boolean;\n}\n\nexport function WizardHeader<TStepId>(props: WizardHeaderProps<TStepId>): JSX.Element {\n const { showButtons } = React.useContext(WizardLayoutContext);\n\n return (\n <div className='d-flex justify-content-between'>\n {!props.hideHeader ? (\n <div>\n <h1 className='h2'>{props.title}</h1>\n\n {props.breadcrumbs &&\n <div className='pb-3'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n </div>\n ) : <div/>}\n\n {props.loaded && showButtons && (\n <div className='d-flex align-items-center'>\n {props.backButton}\n {props.continueButton}\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nconst namespace = 'shared.wizardStepList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface WizardStep<StepId extends string> {\n id: StepId;\n text: string;\n appLink?: Core.AppLink;\n subText?: string;\n disabled?: boolean;\n openInNewTab?: boolean;\n}\n\ninterface WizardStepListTheme {\n item?: string;\n itemsContainer?: string;\n itemContent?: string;\n isSelectedOverride?: string;\n isCompletedOverride?: string;\n}\n\ninterface WizardStepListItemProps {\n appLink: Core.AppLink;\n isSelected: boolean;\n isCompleted: boolean;\n text: string;\n subText?: string;\n disabled: boolean;\n index: number;\n hideStepNumber?: boolean;\n theme?: WizardStepListTheme;\n}\n\nfunction WizardStepListItem(props: WizardStepListItemProps): JSX.Element {\n const content = (\n <>\n <div className='d-flex'>\n {!props.hideStepNumber && <div className='flex-shrink-0 flex-grow-0'>{`${props.index + 1}.`}&nbsp;</div>}\n <div>{props.text}</div>\n </div>\n\n {props.subText && (\n <div className='ms-2 ps-1 pt-1'>\n {props.subText}\n </div>\n )}\n </>\n );\n\n \n let className = 'px-2 py-1 mb-1 rounded d-inline-block';\n\n if (props.isSelected) {\n className += ` ${props.theme?.isSelectedOverride || 'bg-light-blue fw-semibold'}`;\n }\n\n if ((!props.isSelected && props.isCompleted))\n className += ` ${props.theme?.isCompletedOverride || 'text-info'}`;\n\n return (\n <li className={props.theme?.item}>\n {(props.isCompleted && props.appLink)\n ? (\n <AppLink appLink={props.appLink} className={`${className} ${props.theme?.itemContent || ''}`}>\n {content}\n </AppLink>\n ) : (\n <div className={`${className} ${props.theme?.itemContent || ''}`}>\n {content}\n </div>\n )\n }\n </li>\n );\n}\n\ninterface WizardStepListProps<StepId extends string> {\n currentStep: StepId;\n steps: WizardStep<StepId>[];\n disableAppLinks?: boolean;\n theme?: WizardStepListTheme;\n}\n\nexport function WizardStepList<StepId extends string>(props: WizardStepListProps<StepId>): JSX.Element {\n const currentStepNumber = props.steps.reduce((acc, step, i) => {\n if (step.id === props.currentStep)\n acc = i + 1;\n\n return acc;\n }, 1);\n\n return (\n <>\n <h2 className='h4'>\n {getPhrase('stepNumber', { currentStep: currentStepNumber, totalSteps: props.steps.length })}\n </h2>\n\n <ol className={`list-unstyled ${props.theme?.itemsContainer || ''}`}>\n {props.steps.map((step, i) => {\n const isSelected = step.id === props.currentStep;\n const isCompleted = currentStepNumber > i + 1;\n\n return (\n <WizardStepListItem\n index={i}\n key={step.id}\n text={step.text}\n subText={step.subText}\n isSelected={isSelected}\n isCompleted={isCompleted}\n appLink={!props.disableAppLinks && step.appLink}\n disabled={step.disabled}\n theme={props.theme}\n />\n );\n })}\n </ol>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.userDuplicatesEmptyState';\n\ninterface UserDuplicatesEmptyStateProps {\n imageUrl: string;\n onClickConfirm: () => void;\n}\n\nexport function UserDuplicatesEmptyState(props: UserDuplicatesEmptyStateProps): JSX.Element {\n const { existingUsersHash } = useBulkUploadUsers();\n\n const goNext = !!Object.keys(existingUsersHash).length;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, goNext ? 'next' : 'create')}\n onClick={props.onClickConfirm}\n className='btn btn-dark'\n />\n </EmptyState>\n );\n}","import React from 'react';\nimport { CellProps, Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.userDuplicateSet';\n\ninterface UserDuplicateData {\n lookupId: string;\n firstName: string;\n surname: string;\n email: string;\n username: string;\n errorCodes: UserValidationCode[];\n}\n\nexport const getColumns = (\n onClickEdit: (id: string) => void,\n onClickDelete: (id: string) => void\n): Column<UserDuplicateData>[] => ([\n {\n Header: LanguageService.getPhrase(namespace, 'firstName'),\n id: 'firstName',\n accessor: 'firstName',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 12.5\n },\n {\n Header: LanguageService.getPhrase(namespace, 'lastName'),\n id: 'surname',\n accessor: 'surname',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 12.5\n },\n {\n Header: LanguageService.getPhrase(namespace, 'email'),\n id: 'email',\n Cell: (cell: CellProps<UserDuplicateData>) => {\n const data = cell.row.original;\n const hasError = data.errorCodes.find(e => e === UserValidationCode.EmailAlreadyExisted);\n\n return (\n <div className={`w-100 ${hasError ? 'text-danger' : ''}`}>\n {data.email}\n </div>\n );\n },\n width: 39\n },\n {\n Header: LanguageService.getPhrase(namespace, 'username'),\n id: 'username',\n Cell: (cell: CellProps<UserDuplicateData>) => {\n const data = cell.row.original;\n const hasError = data.errorCodes.find(e => e === UserValidationCode.UsernameAlreadyExisted);\n\n return (\n <div className={`w-100 ${hasError ? 'text-danger' : ''}`}>\n {data.username}\n </div>\n );\n },\n width: 29\n },\n {\n Header: '',\n id: 'actions',\n accessor: 'lookupId',\n Cell: ({ value: lookupId }) => (\n <div className='w-100 d-flex align-items-center'>\n <DivButton className='me-2 cursor-pointer' onClick={() => onClickEdit(lookupId)}>\n <SvgContainer\n svgName={cvSvgLibrary.Edit}\n title={LanguageService.getPhrase(namespace, 'editTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <DivButton className='cursor-pointer' onClick={() => onClickDelete(lookupId)}>\n <SvgContainer\n svgName={cvSvgLibrary.Close}\n title={LanguageService.getPhrase(namespace, 'deleteTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n </div>\n ),\n width: 7\n }\n]);","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { DuplicateUserSet } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserUploadViewModel';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { getColumns } from './UserDuplicateSetUtils';\n\nconst namespace = 'userManager.userDuplicateSet';\n\nconst TABLE_THEME: TableTheme = {\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n cell: 'px-2 py-1'\n};\n\nfunction getErrorMessage(errorCodes: UserValidationCode[], userType: UserGroup): string {\n const isStudent = userType === UserGroup.Learner;\n\n if (errorCodes.length === 2)\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateUsernameAndEmailStudents' : 'duplicateUsernameAndEmailStaff');\n\n if (errorCodes.find(c => c === UserValidationCode.UsernameAlreadyExisted))\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateUsernamesStudents' : 'duplicateUsernamesStaff');\n\n if (errorCodes.find(c => c === UserValidationCode.EmailAlreadyExisted))\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateEmailsStudents' : 'duplicateEmailsStaff');\n\n return '';\n}\n\ninterface UserDuplicateSetProps {\n index: number;\n set: DuplicateUserSet;\n userType: UserGroup;\n\n onClickEdit: (user: EditUserRequest) => void;\n onClickDelete: (users: string[]) => void;\n}\n\nexport function UserDuplicateSet(props: UserDuplicateSetProps): JSX.Element {\n const errorMessage = getErrorMessage(props.set.errorCodes, props.userType);\n\n const onClickEdit = (id: string) => props.onClickEdit(props.set.users.find(u => u.lookupId === id));\n const onClickDelete = (id: string) => props.onClickDelete([id]);\n\n if (!errorMessage)\n return <></>;\n\n return (\n <div className='pb-4'>\n <h3 className='h5'>\n <Text namespace={namespace} phrase='heading' options={{ counter: props.index + 1 }} />\n </h3>\n <p className='text-danger mb-1'>\n {errorMessage}\n </p>\n\n <div className='p-2 border rounded-3'>\n <Table\n columns={getColumns(onClickEdit, onClickDelete)}\n data={props.set.users.map(u => ({\n lookupId: u.lookupId,\n firstName: u.firstName,\n surname: u.surname,\n email: u.email,\n username: u.username,\n errorCodes: props.set.errorCodes\n }))}\n theme={TABLE_THEME}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { onCloseDeletePopup, onCloseEditPopup } from 'libs/shared/apps/user-manager/components/bulk-upload/BulkUserUploadEvents';\nimport { DeleteUploadedUserPopup } from 'libs/shared/apps/user-manager/components/delete-uploaded-user-popup/DeleteUploadedUserPopup';\nimport { EditUploadedUserPopup } from 'libs/shared/apps/user-manager/components/edit-uploaded-user-popup/EditUploadedUserPopup';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { BulkUserEmailCheckResponse, EditUserRequest, ErroredUsers, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { DuplicateUserSet } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserUploadViewModel';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser, PropsWithPopupViewProps, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { UserDuplicatesEmptyState } from './empty-state/UserDuplicatesEmptyState';\nimport { UserDuplicateSet } from './user-duplicate-set/UserDuplicateSet';\n\ntype UserDuplicatesProps = PropsWithPopupViewProps<{\n userType: UserGroup;\n appLinks: UserManagerAppLinks;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n validateUser: (user: EditUserRequest) => Promise<ErroredUsers>;\n validateEmail?: (email: string) => Promise<BulkUserEmailCheckResponse>;\n emailRequired: boolean;\n passwordPolicy: SecuritySettingsResponse;\n emptyStateImageUrl: string;\n onClickConfirm: () => void;\n formSize?: FormSize;\n localErrorMessage?: HashObject;\n}>;\n\nexport function UserDuplicates(props: UserDuplicatesProps): JSX.Element {\n const { users, duplicateSets } = useBulkUploadUsers();\n\n const { setDisableNext, setOnClickConfirm } = React.useContext(WizardLayoutContext);\n\n const namespace = props.userType === UserGroup.Learner\n ? 'userManager.studentDuplicates'\n : 'userManager.staffDuplicates';\n\n const getPhrase = LanguageService.encloseNamespace(namespace);\n\n const [ deletingUsers, setDeletingUsers ] = React.useState<string[]>([]);\n const [ editingUser, setEditingUser ] = React.useState<EditUserRequest>();\n\n const [initialSets] = React.useState<DuplicateUserSet[]>(duplicateSets);\n\n React.useEffect(() => {\n setDisableNext(!!duplicateSets?.length);\n }, [duplicateSets?.length]);\n\n React.useEffect(() => {\n setOnClickConfirm(() => props.onClickConfirm);\n }, [props.onClickConfirm]);\n\n if (!users?.length)\n return <></>;\n\n return (\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='heading' /></h2>\n\n <main className='pb-3'>\n {duplicateSets?.length ? (\n <>\n <p className='mb-3 fw-semibold'>\n <Text namespace={namespace} phrase='subheading' />\n </p>\n\n <div className='pb-3'>\n <IconButton svgName={cvSvgLibrary.Upload} appLink={props.appLinks.userUploadPopup} className='btn btn-outline-dark me-2'>\n <Text namespace={namespace} phrase='reupload' />\n </IconButton>\n </div>\n\n {initialSets.map((initialSet, index) => {\n const initialSetIds = initialSet.users.map(u => u.lookupId);\n\n const updatedSet = duplicateSets.find(updatedSet => {\n const updatedSetIds = updatedSet.users.map(u => u.lookupId);\n\n return ObjectHelper.isEqual(initialSetIds, updatedSetIds);\n });\n\n const isResolved = !updatedSet.errorCodes.length;\n\n if (isResolved)\n return <React.Fragment key={index}></React.Fragment>;\n\n return (\n <UserDuplicateSet\n key={index}\n index={index}\n set={updatedSet}\n userType={props.userType}\n onClickEdit={setEditingUser}\n onClickDelete={setDeletingUsers}\n />\n );\n })}\n </>\n ) : (\n <>\n <p className='mb-3'>\n <Text namespace={namespace} phrase='emptyStateSubheading' />\n </p>\n <UserDuplicatesEmptyState imageUrl={props.emptyStateImageUrl} onClickConfirm={props.onClickConfirm} />\n </>\n )}\n \n </main>\n\n {!!editingUser && (\n <EditUploadedUserPopup\n key={editingUser.lookupId}\n user={editingUser}\n setUser={setEditingUser}\n closePopup={() => onCloseEditPopup(setEditingUser, props.closePopup)}\n title={getPhrase('editUser')}\n userType={props.userType}\n analyticsOptions={BulkUserUploadHelper.getAnalyticsOptions(props.userType)}\n currentUser={props.currentUser}\n yearGroups={props.yearGroups}\n validateUser={props.validateUser}\n formSize={props.formSize}\n emailRequired={props.emailRequired}\n passwordPolicy={props.passwordPolicy}\n appLinks={props.appLinks}\n localErrorMessage={props.localErrorMessage}\n validateEmail={props.validateEmail}\n />\n )}\n\n {!!deletingUsers.length && (\n <DeleteUploadedUserPopup\n users={deletingUsers}\n userType={props.userType}\n closePopup={() => onCloseDeletePopup(setDeletingUsers, props.closePopup)}\n analyticsOptions={BulkUserUploadHelper.getAnalyticsOptions(props.userType)}\n />\n )}\n </>\n );\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 { BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserDuplicates } from 'libs/shared/apps/user-manager/components/bulk-upload/user-duplicates/UserDuplicates';\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 { BulkUserEmailCheckRequest, BulkUserEmailCheckResponse, EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserWizardParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJob, CurrentUser, PropsWithPopupViewProps, YearGroup } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SecuritySettingsRequests } from 'apps/settings/flight-requests/SecuritySettingsRequests';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUploadFixDuplicates';\n\nexport function BulkUserUploadFixDuplicatesView(props: PropsWithPopupViewProps<UserWizardParams>): JSX.Element {\n const { users, existingUsersHash } = useBulkUploadUsers();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && UserManagerRequests.yearGroups(currentUser.data.customerId)\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(currentUser.data &&\n SecuritySettingsRequests.getCustomerSecuritySettings(currentUser.data.customerId));\n\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n const appLinks = getUserManagerAppLinks(props.userType);\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n function validateUser(_user: EditUserRequest): Promise<ErroredUsers> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest(\n [_user],\n props.userType,\n currentUser.data.customerId\n );\n\n return fetchAsync(UserManagerRequests.bulkValidate(data));\n }\n\n function validateEmail(email: string): Promise<BulkUserEmailCheckResponse> {\n const body: BulkUserEmailCheckRequest = {\n userEmails: [{ email, userType: props.userType }]\n };\n\n return fetchAsync(UserManagerRequests.bulkCheckEmail(body, currentUser.data.customerId));\n }\n\n const onCreateJobError = BulkUserActionsHelper.useCreateJobErrorAlert();\n\n function onClickConfirm() {\n if (Object.keys(existingUsersHash).length) {\n goToNextStep();\n return;\n }\n startBulkUpload();\n }\n\n function goToNextStep() {\n Core.AppLinkHelper.trigger(appLinks.userUploadReviewExistingAccounts);\n return;\n }\n\n function startBulkUpload(): void {\n const jobData = BulkUserUploadHelper.getJobData({\n users, customerId: currentUser.data.customerId, userType: props.userType\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\n if (!currentUser.data || !yearGroups.data)\n return <></>;\n \n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='fix-duplicates'\n canAddExistingUsers\n >\n <div className='px-3'>\n <UserDuplicates\n onClickConfirm={onClickConfirm}\n closePopup={props.closePopup}\n appLinks={appLinks}\n userType={props.userType}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n validateUser={validateUser}\n validateEmail={validateEmail}\n emailRequired={props.userType === UserGroup.Staff}\n passwordPolicy={passwordPolicy.data}\n emptyStateImageUrl={ImageUrls.EmptyStates.UserManager.DUPLICATES}\n localErrorMessage={BulkUserUploadHelper.getErrorMessageOverride(props.userType)}\n />\n </div>\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}"],"names":["namespace","BulkUserUploadBackButton","props","currentStep","AppLink","className","appLink","appLinks","userManager","Text","phrase","BulkUserUploadContinueButton","useBulkUploadUsers","duplicateSets","hasExistingUsers","WizardLayoutContext","disableNext","onClickConfirm","spreadsheetHasDuplicates","length","currentAppLink","ContextService","action","userUploadStatus","polling","complete","userUploadPopup","userUploadReviewAccounts","userUploadFixDuplicates","userUploadReviewExistingAccounts","willUploadOnNext","Button","variant","onClick","disabled","canAddExistingUsers","userUploadConfirmation","getNextAppLink","BULK_USER_UPLOAD_NAV_LOCK_ID","BulkUserUploadWizardLayout","users","setUsers","navLock","useNavLock","lock","id","title","LanguageService","text","appLinkWhitelist","BulkUserUploadHelper","onConfirmUnlock","unlock","replace","WizardHeader","loaded","continueButton","backButton","breadcrumbs","name","settings","userType","UserGroup","active","WizardStepList","steps","children","updateUserHash","userHash","updatedUserIdsHash","Object","keys","reduce","updatedObj","lookupId","viewModel","setViewModel","updateDuplicates","invalidUsers","hasValidatedUsers","existingUsersHash","existingUserToAdd","newUsers","filter","u","setInvalidUsers","setExistingUsers","existingUsers","updateUser","updatedUser","updatedUsers","map","user","deleteUsers","deletedUsers","userIdHash","prev","curr","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","emptyState","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","renderCells","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","showButtons","hideHeader","getPhrase","WizardStepListItem","content","hideStepNumber","index","subText","isSelectedOverride","isCompleted","isCompletedOverride","itemContent","currentStepNumber","acc","step","i","totalSteps","itemsContainer","disableAppLinks","UserDuplicatesEmptyState","goNext","EmptyState","src","imageUrl","getColumns","onClickEdit","onClickDelete","Header","accessor","Cell","value","width","hasError","errorCodes","find","e","UserValidationCode","email","username","DivButton","tooltipPlacement","tooltipSpanHack","TABLE_THEME","UserDuplicateSet","isStudent","errorMessage","set","c","options","counter","firstName","surname","UserDuplicates","setDisableNext","setOnClickConfirm","deletingUsers","setDeletingUsers","editingUser","setEditingUser","initialSets","IconButton","initialSet","initialSetIds","updatedSet","updatedSetIds","ObjectHelper","emptyStateImageUrl","EditUploadedUserPopup","setUser","closePopup","analyticsOptions","currentUser","yearGroups","validateUser","formSize","emailRequired","passwordPolicy","localErrorMessage","validateEmail","DeleteUploadedUserPopup","BulkUserUploadFixDuplicatesView","UserRequests","UserManagerRequests","customerId","SecuritySettingsRequests","dispatch","fetchAsync","useSetPageMetadata","onCreateJobError","BulkUserActionsHelper","onCreateJob","job","params","jobId","UserManagerClientContext","UserManagerClient","jobData","JobRequests","_user","UserManagerHelper","userEmails","ImageUrls"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/8756-560899a88b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/header/back-buttons/BulkUserUploadBackButton.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/header/continue-buttons/BulkUserUploadContinueButton.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/layout/bulk-user-upload-wizard-layout.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout.tsx","file:///app/packages/libs/shared/src/apps/user-manager/hooks/useBulkUploadUsers.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/components/wizard/header/WizardHeader.tsx","file:///app/packages/libs/shared/src/components/wizard/step-list/WizardStepList.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/empty-state/UserDuplicatesEmptyState.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/user-duplicate-set/UserDuplicateSetUtils.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/user-duplicate-set/UserDuplicateSet.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-upload/user-duplicates/UserDuplicates.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/fix-duplicates/BulkUserUploadFixDuplicatesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { BulkUserUploadStepId } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.userWizardBackButtons';\n\ninterface BulkUserUploadBackButtonProps {\n currentStep: BulkUserUploadStepId;\n appLinks: UserManagerAppLinks;\n}\n\nexport function BulkUserUploadBackButton(props: BulkUserUploadBackButtonProps): JSX.Element {\n if (props.currentStep === 'status')\n return <></>;\n\n return (\n <AppLink\n className='btn btn-link me-2'\n appLink={props.appLinks.userManager}\n >\n <Text namespace={namespace} phrase='cancel' />\n </AppLink>\n );\n}","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { ContextService } from 'libs/analytics/services/ContextService';\n\nimport { BulkUserUploadStepId } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\n\nconst namespace = 'userManager.userWizardHeader';\n\ninterface BulkUserUploadContinueButtonProps {\n currentStep: BulkUserUploadStepId;\n appLinks: UserManagerAppLinks;\n canAddExistingUsers: boolean;\n}\n\nexport function BulkUserUploadContinueButton(props: BulkUserUploadContinueButtonProps): JSX.Element {\n const { duplicateSets, hasExistingUsers } = useBulkUploadUsers();\n const { disableNext, onClickConfirm } = React.useContext(WizardLayoutContext);\n\n const spreadsheetHasDuplicates = !!duplicateSets?.length;\n\n const currentAppLink = ContextService.getCurrentContext().appLink;\n\n if (currentAppLink.action === props.appLinks.userUploadStatus.polling.action)\n return <></>;\n\n // we hide the button cuz we have one in the success component\n if (currentAppLink.action === props.appLinks.userUploadStatus.complete.action)\n return <></>;\n\n function willUploadOnNext(): boolean {\n switch (currentAppLink.action) {\n case props.appLinks.userUploadPopup.action:\n case props.appLinks.userUploadReviewAccounts.action:\n return !spreadsheetHasDuplicates && !hasExistingUsers;\n\n case props.appLinks.userUploadFixDuplicates.action:\n return !hasExistingUsers;\n\n case props.appLinks.userUploadReviewExistingAccounts.action:\n return !hasExistingUsers;\n\n default:\n return true;\n }\n }\n\n if (willUploadOnNext()) {\n return (\n <Button\n className={disableNext ? 'disabled' : ''}\n variant='dark'\n onClick={onClickConfirm}\n disabled={disableNext}\n >\n <Text\n namespace={namespace}\n phrase='create'\n />\n </Button>\n );\n }\n\n function getNextAppLink() {\n switch (currentAppLink.action) {\n case props.appLinks.userUploadReviewAccounts.action:\n if (spreadsheetHasDuplicates)\n return props.appLinks.userUploadFixDuplicates;\n if (hasExistingUsers && props.canAddExistingUsers)\n return props.appLinks.userUploadReviewExistingAccounts;\n\n case props.appLinks.userUploadFixDuplicates.action:\n if (hasExistingUsers && props.canAddExistingUsers)\n return props.appLinks.userUploadReviewExistingAccounts;\n\n case props.appLinks.userUploadReviewExistingAccounts.action:\n if (props.canAddExistingUsers)\n return props.appLinks.userUploadConfirmation;\n\n default:\n return null;\n }\n }\n\n return (\n <AppLink\n className={`btn btn-dark ${disableNext ? 'disabled' : ''}`}\n appLink={getNextAppLink()}\n disabled={disableNext}\n >\n <Text\n namespace={namespace}\n phrase='next'\n />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"wizardContent\":\"hHr3C\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { BulkUserUploadBackButton } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/header/back-buttons/BulkUserUploadBackButton';\nimport { BulkUserUploadContinueButton } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/header/continue-buttons/BulkUserUploadContinueButton';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { WizardHeader } from 'libs/shared/components/wizard/header/WizardHeader';\nimport { WizardStepList } from 'libs/shared/components/wizard/step-list/WizardStepList';\nimport { WizardLayoutContextProvider } from 'libs/shared/context/WizardLayoutContext';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\n\nimport styles from './bulk-user-upload-wizard-layout.scss';\n\nexport type BulkUserUploadStepId = 'review-accounts' | 'fix-duplicates' | 'review-existing-accounts' | 'confirmation' |'status';\n\nconst namespace = 'userManager.bulkUserUploadWizardLayout';\nexport const BULK_USER_UPLOAD_NAV_LOCK_ID = 'bulk:user:upload:nav:lock';\n\ntype BulkUserUploadWizardLayoutProps = React.PropsWithChildren<{\n appLinks: UserManagerAppLinks;\n userType: UserGroup;\n currentStep: BulkUserUploadStepId;\n canAddExistingUsers?: boolean;\n}>;\n\nexport function BulkUserUploadWizardLayout(props: BulkUserUploadWizardLayoutProps): JSX.Element {\n const { users, setUsers } = useBulkUploadUsers();\n\n const navLock = useNavLock();\n\n React.useEffect(() => {\n // If there is no view model, redirect away\n if (!users) {\n Core.AppLinkHelper.trigger(props.appLinks.userManager, { replace: true });\n return;\n }\n\n navLock.lock({\n id: BULK_USER_UPLOAD_NAV_LOCK_ID,\n title: LanguageService.getPhrase(namespace, 'navLockTitle'),\n text: LanguageService.getPhrase(namespace, 'navLockBody'),\n appLinkWhitelist: BulkUserUploadHelper.getWizardAppLinks(props.appLinks),\n onConfirmUnlock: () => {\n setUsers(null);\n }\n });\n\n return () => {\n navLock.unlock(BULK_USER_UPLOAD_NAV_LOCK_ID);\n };\n }, []);\n\n React.useEffect(() => {\n if (users?.length)\n return;\n\n navLock.unlock(BULK_USER_UPLOAD_NAV_LOCK_ID);\n Core.AppLinkHelper.trigger(props.appLinks.userManager, { replace: true });\n }, [users?.length]);\n\n if (!users)\n return <></>;\n\n return (\n <WizardLayoutContextProvider>\n <div className='px-3'>\n <WizardHeader<BulkUserUploadStepId>\n title={LanguageService.getPhrase(namespace, 'bulkUpload')}\n currentStep={props.currentStep}\n loaded\n continueButton={\n <BulkUserUploadContinueButton\n currentStep={props.currentStep}\n appLinks={props.appLinks}\n canAddExistingUsers={props.canAddExistingUsers}\n />\n }\n backButton={<BulkUserUploadBackButton currentStep={props.currentStep} appLinks={props.appLinks} />}\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: props.appLinks.settings\n },\n {\n name: LanguageService.getPhrase(namespace, props.userType === UserGroup.Learner ? 'studentManager' : 'staffManager'),\n appLink: props.appLinks.userManager\n },\n {\n name: LanguageService.getPhrase(namespace, 'bulkUpload'),\n active: true\n }\n ]}\n />\n\n <div className='row g-0'>\n <div className='col-2'>\n <WizardStepList<BulkUserUploadStepId>\n steps={BulkUserUploadHelper.getSteps(props.userType, props.canAddExistingUsers)}\n currentStep={props.currentStep}\n />\n </div>\n\n <div className={`col-10 ${styles.wizardContent}`}>\n {props.children}\n </div>\n </div>\n </div>\n </WizardLayoutContextProvider>\n );\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { EditUserRequest } from '../interfaces';\nimport { BulkUserUploadViewModel, UserHash } from '../interfaces/viewmodels/BulkUserUploadViewModel';\nimport { UserManagerHelper } from '../utils/UserManagerHelper';\n\nfunction updateUserHash(userHash: UserHash, updatedUserIdsHash: HashObject<boolean>): UserHash {\n const updatedUsers = Object.keys(userHash || {}).reduce((updatedObj: UserHash, lookupId) => {\n if (!updatedUserIdsHash[lookupId])\n updatedObj[lookupId] = userHash[lookupId];\n return updatedObj;\n }, {});\n\n return updatedUsers;\n}\n\nexport const useBulkUploadUsers = () => {\n const [ viewModel, setViewModel ] = useViewModel<BulkUserUploadViewModel>(SharedViewModelKeys.BULK_USER_UPLOAD);\n\n function initializeUsers(users?: EditUserRequest[]): void {\n setViewModel({\n users,\n invalidUsers: null,\n existingUsersHash: null\n });\n\n updateDuplicates(users);\n }\n\n function updateUser(updatedUser: EditUserRequest): void {\n const updatedUsers = viewModel.users.map(user => {\n if (user.lookupId !== updatedUser.lookupId)\n return user;\n\n return updatedUser;\n });\n\n setViewModel({\n users: updatedUsers,\n invalidUsers: updateUserHash(viewModel?.invalidUsers, { [updatedUser.lookupId]: true }),\n existingUsersHash: viewModel?.existingUsersHash\n });\n\n updateDuplicates(updatedUsers);\n }\n\n function deleteUsers(deletedUsers: string[]): void {\n const userIdHash = deletedUsers.reduce((prev: HashObject, curr) => {\n prev[curr] = true;\n return prev;\n }, {});\n\n const updatedUsers = viewModel.users.filter(user => !userIdHash[user.lookupId]);\n\n setViewModel({\n users: updatedUsers,\n invalidUsers: updateUserHash(viewModel?.invalidUsers, userIdHash),\n existingUsersHash: updateUserHash(viewModel?.existingUsersHash, userIdHash),\n existingUserToAdd: viewModel?.existingUserToAdd?.filter(u => !!viewModel?.existingUsersHash[u.lookupId])\n });\n\n updateDuplicates(updatedUsers);\n }\n\n function updateDuplicates(users?: EditUserRequest[]): void {\n const duplicateSets = UserManagerHelper.getNewDuplicates(users);\n setViewModel('duplicateSets', duplicateSets);\n }\n\n return {\n users: viewModel?.users,\n invalidUsers: viewModel?.invalidUsers,\n hasValidatedUsers: !!viewModel?.invalidUsers,\n existingUsersHash: viewModel?.existingUsersHash || {},\n hasExistingUsers: !!Object.keys(viewModel?.existingUsersHash || {}).length,\n existingUserToAdd: viewModel?.existingUserToAdd,\n duplicateSets: viewModel?.duplicateSets,\n newUsers: viewModel?.users?.filter(u => !viewModel?.existingUsersHash?.[u.lookupId]) || [],\n\n setUsers: initializeUsers,\n setInvalidUsers: (invalidUsers: UserHash) => setViewModel('invalidUsers', invalidUsers),\n setExistingUsers: (existingUsers: UserHash) => setViewModel('existingUsersHash', existingUsers),\n updateUser,\n deleteUsers\n };\n};","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\n\ninterface WizardHeaderProps<TStepId> {\n currentStep: TStepId;\n title: string;\n continueButton: JSX.Element;\n backButton: JSX.Element;\n breadcrumbs?: Breadcrumb[];\n hideHeader?: boolean;\n loaded: boolean;\n}\n\nexport function WizardHeader<TStepId>(props: WizardHeaderProps<TStepId>): JSX.Element {\n const { showButtons } = React.useContext(WizardLayoutContext);\n\n return (\n <div className='d-flex justify-content-between'>\n {!props.hideHeader ? (\n <div>\n <h1 className='h2'>{props.title}</h1>\n\n {props.breadcrumbs &&\n <div className='pb-3'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n </div>\n ) : <div/>}\n\n {props.loaded && showButtons && (\n <div className='d-flex align-items-center'>\n {props.backButton}\n {props.continueButton}\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nconst namespace = 'shared.wizardStepList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface WizardStep<StepId extends string> {\n id: StepId;\n text: string;\n appLink?: Core.AppLink;\n subText?: string;\n disabled?: boolean;\n openInNewTab?: boolean;\n}\n\ninterface WizardStepListTheme {\n item?: string;\n itemsContainer?: string;\n itemContent?: string;\n isSelectedOverride?: string;\n isCompletedOverride?: string;\n}\n\ninterface WizardStepListItemProps {\n appLink: Core.AppLink;\n isSelected: boolean;\n isCompleted: boolean;\n text: string;\n subText?: string;\n disabled: boolean;\n index: number;\n hideStepNumber?: boolean;\n theme?: WizardStepListTheme;\n}\n\nfunction WizardStepListItem(props: WizardStepListItemProps): JSX.Element {\n const content = (\n <>\n <div className='d-flex'>\n {!props.hideStepNumber && <div className='flex-shrink-0 flex-grow-0'>{`${props.index + 1}.`}&nbsp;</div>}\n <div>{props.text}</div>\n </div>\n\n {props.subText && (\n <div className='ms-2 ps-1 pt-1'>\n {props.subText}\n </div>\n )}\n </>\n );\n\n \n let className = 'px-2 py-1 mb-1 rounded d-inline-block';\n\n if (props.isSelected) {\n className += ` ${props.theme?.isSelectedOverride || 'bg-light-blue fw-semibold'}`;\n }\n\n if ((!props.isSelected && props.isCompleted))\n className += ` ${props.theme?.isCompletedOverride || 'text-info'}`;\n\n return (\n <li className={props.theme?.item}>\n {(props.isCompleted && props.appLink)\n ? (\n <AppLink appLink={props.appLink} className={`${className} ${props.theme?.itemContent || ''}`}>\n {content}\n </AppLink>\n ) : (\n <div className={`${className} ${props.theme?.itemContent || ''}`}>\n {content}\n </div>\n )\n }\n </li>\n );\n}\n\ninterface WizardStepListProps<StepId extends string> {\n currentStep: StepId;\n steps: WizardStep<StepId>[];\n disableAppLinks?: boolean;\n theme?: WizardStepListTheme;\n}\n\nexport function WizardStepList<StepId extends string>(props: WizardStepListProps<StepId>): JSX.Element {\n const currentStepNumber = props.steps.reduce((acc, step, i) => {\n if (step.id === props.currentStep)\n acc = i + 1;\n\n return acc;\n }, 1);\n\n return (\n <>\n <h2 className='h4'>\n {getPhrase('stepNumber', { currentStep: currentStepNumber, totalSteps: props.steps.length })}\n </h2>\n\n <ol className={`list-unstyled ${props.theme?.itemsContainer || ''}`}>\n {props.steps.map((step, i) => {\n const isSelected = step.id === props.currentStep;\n const isCompleted = currentStepNumber > i + 1;\n\n return (\n <WizardStepListItem\n index={i}\n key={step.id}\n text={step.text}\n subText={step.subText}\n isSelected={isSelected}\n isCompleted={isCompleted}\n appLink={!props.disableAppLinks && step.appLink}\n disabled={step.disabled}\n theme={props.theme}\n />\n );\n })}\n </ol>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.userDuplicatesEmptyState';\n\ninterface UserDuplicatesEmptyStateProps {\n imageUrl: string;\n onClickConfirm: () => void;\n}\n\nexport function UserDuplicatesEmptyState(props: UserDuplicatesEmptyStateProps): JSX.Element {\n const { existingUsersHash } = useBulkUploadUsers();\n\n const goNext = !!Object.keys(existingUsersHash).length;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, goNext ? 'next' : 'create')}\n onClick={props.onClickConfirm}\n className='btn btn-dark'\n />\n </EmptyState>\n );\n}","import React from 'react';\nimport { CellProps, Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.userDuplicateSet';\n\ninterface UserDuplicateData {\n lookupId: string;\n firstName: string;\n surname: string;\n email: string;\n username: string;\n errorCodes: UserValidationCode[];\n}\n\nexport const getColumns = (\n onClickEdit: (id: string) => void,\n onClickDelete: (id: string) => void\n): Column<UserDuplicateData>[] => ([\n {\n Header: LanguageService.getPhrase(namespace, 'firstName'),\n id: 'firstName',\n accessor: 'firstName',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 12.5\n },\n {\n Header: LanguageService.getPhrase(namespace, 'lastName'),\n id: 'surname',\n accessor: 'surname',\n Cell: ({ value }) => (\n <div className='w-100'>\n {value}\n </div>\n ),\n width: 12.5\n },\n {\n Header: LanguageService.getPhrase(namespace, 'email'),\n id: 'email',\n Cell: (cell: CellProps<UserDuplicateData>) => {\n const data = cell.row.original;\n const hasError = data.errorCodes.find(e => e === UserValidationCode.EmailAlreadyExisted);\n\n return (\n <div className={`w-100 ${hasError ? 'text-danger' : ''}`}>\n {data.email}\n </div>\n );\n },\n width: 39\n },\n {\n Header: LanguageService.getPhrase(namespace, 'username'),\n id: 'username',\n Cell: (cell: CellProps<UserDuplicateData>) => {\n const data = cell.row.original;\n const hasError = data.errorCodes.find(e => e === UserValidationCode.UsernameAlreadyExisted);\n\n return (\n <div className={`w-100 ${hasError ? 'text-danger' : ''}`}>\n {data.username}\n </div>\n );\n },\n width: 29\n },\n {\n Header: '',\n id: 'actions',\n accessor: 'lookupId',\n Cell: ({ value: lookupId }) => (\n <div className='w-100 d-flex align-items-center'>\n <DivButton className='me-2 cursor-pointer' onClick={() => onClickEdit(lookupId)}>\n <SvgContainer\n svgName={cvSvgLibrary.Edit}\n title={LanguageService.getPhrase(namespace, 'editTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <DivButton className='cursor-pointer' onClick={() => onClickDelete(lookupId)}>\n <SvgContainer\n svgName={cvSvgLibrary.Close}\n title={LanguageService.getPhrase(namespace, 'deleteTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n </div>\n ),\n width: 7\n }\n]);","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { DuplicateUserSet } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserUploadViewModel';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { getColumns } from './UserDuplicateSetUtils';\n\nconst namespace = 'userManager.userDuplicateSet';\n\nconst TABLE_THEME: TableTheme = {\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n cell: 'px-2 py-1'\n};\n\nfunction getErrorMessage(errorCodes: UserValidationCode[], userType: UserGroup): string {\n const isStudent = userType === UserGroup.Learner;\n\n if (errorCodes.length === 2)\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateUsernameAndEmailStudents' : 'duplicateUsernameAndEmailStaff');\n\n if (errorCodes.find(c => c === UserValidationCode.UsernameAlreadyExisted))\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateUsernamesStudents' : 'duplicateUsernamesStaff');\n\n if (errorCodes.find(c => c === UserValidationCode.EmailAlreadyExisted))\n return LanguageService.getPhrase(namespace, isStudent ? 'duplicateEmailsStudents' : 'duplicateEmailsStaff');\n\n return '';\n}\n\ninterface UserDuplicateSetProps {\n index: number;\n set: DuplicateUserSet;\n userType: UserGroup;\n\n onClickEdit: (user: EditUserRequest) => void;\n onClickDelete: (users: string[]) => void;\n}\n\nexport function UserDuplicateSet(props: UserDuplicateSetProps): JSX.Element {\n const errorMessage = getErrorMessage(props.set.errorCodes, props.userType);\n\n const onClickEdit = (id: string) => props.onClickEdit(props.set.users.find(u => u.lookupId === id));\n const onClickDelete = (id: string) => props.onClickDelete([id]);\n\n if (!errorMessage)\n return <></>;\n\n return (\n <div className='pb-4'>\n <h3 className='h5'>\n <Text namespace={namespace} phrase='heading' options={{ counter: props.index + 1 }} />\n </h3>\n <p className='text-danger mb-1'>\n {errorMessage}\n </p>\n\n <div className='p-2 border rounded-3'>\n <Table\n columns={getColumns(onClickEdit, onClickDelete)}\n data={props.set.users.map(u => ({\n lookupId: u.lookupId,\n firstName: u.firstName,\n surname: u.surname,\n email: u.email,\n username: u.username,\n errorCodes: props.set.errorCodes\n }))}\n theme={TABLE_THEME}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { onCloseDeletePopup, onCloseEditPopup } from 'libs/shared/apps/user-manager/components/bulk-upload/BulkUserUploadEvents';\nimport { DeleteUploadedUserPopup } from 'libs/shared/apps/user-manager/components/delete-uploaded-user-popup/DeleteUploadedUserPopup';\nimport { EditUploadedUserPopup } from 'libs/shared/apps/user-manager/components/edit-uploaded-user-popup/EditUploadedUserPopup';\nimport { useBulkUploadUsers } from 'libs/shared/apps/user-manager/hooks/useBulkUploadUsers';\nimport { BulkUserEmailCheckResponse, EditUserRequest, ErroredUsers, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { DuplicateUserSet } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserUploadViewModel';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser, PropsWithPopupViewProps, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { UserDuplicatesEmptyState } from './empty-state/UserDuplicatesEmptyState';\nimport { UserDuplicateSet } from './user-duplicate-set/UserDuplicateSet';\n\ntype UserDuplicatesProps = PropsWithPopupViewProps<{\n userType: UserGroup;\n appLinks: UserManagerAppLinks;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n validateUser: (user: EditUserRequest) => Promise<ErroredUsers>;\n validateEmail?: (email: string) => Promise<BulkUserEmailCheckResponse>;\n emailRequired: boolean;\n passwordPolicy: SecuritySettingsResponse;\n emptyStateImageUrl: string;\n onClickConfirm: () => void;\n formSize?: FormSize;\n localErrorMessage?: HashObject;\n}>;\n\nexport function UserDuplicates(props: UserDuplicatesProps): JSX.Element {\n const { users, duplicateSets } = useBulkUploadUsers();\n\n const { setDisableNext, setOnClickConfirm } = React.useContext(WizardLayoutContext);\n\n const namespace = props.userType === UserGroup.Learner\n ? 'userManager.studentDuplicates'\n : 'userManager.staffDuplicates';\n\n const getPhrase = LanguageService.encloseNamespace(namespace);\n\n const [ deletingUsers, setDeletingUsers ] = React.useState<string[]>([]);\n const [ editingUser, setEditingUser ] = React.useState<EditUserRequest>();\n\n const [initialSets] = React.useState<DuplicateUserSet[]>(duplicateSets);\n\n React.useEffect(() => {\n setDisableNext(!!duplicateSets?.length);\n }, [duplicateSets?.length]);\n\n React.useEffect(() => {\n setOnClickConfirm(() => props.onClickConfirm);\n }, [props.onClickConfirm]);\n\n if (!users?.length)\n return <></>;\n\n return (\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='heading' /></h2>\n\n <main className='pb-3'>\n {duplicateSets?.length ? (\n <>\n <p className='mb-3 fw-semibold'>\n <Text namespace={namespace} phrase='subheading' />\n </p>\n\n <div className='pb-3'>\n <IconButton svgName={cvSvgLibrary.Upload} appLink={props.appLinks.userUploadPopup} className='btn btn-outline-dark me-2'>\n <Text namespace={namespace} phrase='reupload' />\n </IconButton>\n </div>\n\n {initialSets.map((initialSet, index) => {\n const initialSetIds = initialSet.users.map(u => u.lookupId);\n\n const updatedSet = duplicateSets.find(updatedSet => {\n const updatedSetIds = updatedSet.users.map(u => u.lookupId);\n\n return ObjectHelper.isEqual(initialSetIds, updatedSetIds);\n });\n\n const isResolved = !updatedSet.errorCodes.length;\n\n if (isResolved)\n return <React.Fragment key={index}></React.Fragment>;\n\n return (\n <UserDuplicateSet\n key={index}\n index={index}\n set={updatedSet}\n userType={props.userType}\n onClickEdit={setEditingUser}\n onClickDelete={setDeletingUsers}\n />\n );\n })}\n </>\n ) : (\n <>\n <p className='mb-3'>\n <Text namespace={namespace} phrase='emptyStateSubheading' />\n </p>\n <UserDuplicatesEmptyState imageUrl={props.emptyStateImageUrl} onClickConfirm={props.onClickConfirm} />\n </>\n )}\n \n </main>\n\n {!!editingUser && (\n <EditUploadedUserPopup\n key={editingUser.lookupId}\n user={editingUser}\n setUser={setEditingUser}\n closePopup={() => onCloseEditPopup(setEditingUser, props.closePopup)}\n title={getPhrase('editUser')}\n userType={props.userType}\n analyticsOptions={BulkUserUploadHelper.getAnalyticsOptions(props.userType)}\n currentUser={props.currentUser}\n yearGroups={props.yearGroups}\n validateUser={props.validateUser}\n formSize={props.formSize}\n emailRequired={props.emailRequired}\n passwordPolicy={props.passwordPolicy}\n appLinks={props.appLinks}\n localErrorMessage={props.localErrorMessage}\n validateEmail={props.validateEmail}\n />\n )}\n\n {!!deletingUsers.length && (\n <DeleteUploadedUserPopup\n users={deletingUsers}\n userType={props.userType}\n closePopup={() => onCloseDeletePopup(setDeletingUsers, props.closePopup)}\n analyticsOptions={BulkUserUploadHelper.getAnalyticsOptions(props.userType)}\n />\n )}\n </>\n );\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 { BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserDuplicates } from 'libs/shared/apps/user-manager/components/bulk-upload/user-duplicates/UserDuplicates';\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 { BulkUserEmailCheckRequest, BulkUserEmailCheckResponse, EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserWizardParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJob, CurrentUser, PropsWithPopupViewProps, YearGroup } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SecuritySettingsRequests } from 'apps/settings/flight-requests/SecuritySettingsRequests';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUploadFixDuplicates';\n\nexport function BulkUserUploadFixDuplicatesView(props: PropsWithPopupViewProps<UserWizardParams>): JSX.Element {\n const { users, existingUsersHash } = useBulkUploadUsers();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && UserManagerRequests.yearGroups(currentUser.data.customerId)\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(currentUser.data &&\n SecuritySettingsRequests.getCustomerSecuritySettings(currentUser.data.customerId));\n\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n const appLinks = getUserManagerAppLinks(props.userType);\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n function validateUser(_user: EditUserRequest): Promise<ErroredUsers> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest(\n [_user],\n props.userType,\n currentUser.data.customerId\n );\n\n return fetchAsync(UserManagerRequests.bulkValidate(data));\n }\n\n function validateEmail(email: string): Promise<BulkUserEmailCheckResponse> {\n const body: BulkUserEmailCheckRequest = {\n userEmails: [{ email, userType: props.userType }]\n };\n\n return fetchAsync(UserManagerRequests.bulkCheckEmail(body, currentUser.data.customerId));\n }\n\n const onCreateJobError = BulkUserActionsHelper.useCreateJobErrorAlert();\n\n function onClickConfirm() {\n if (Object.keys(existingUsersHash).length) {\n goToNextStep();\n return;\n }\n startBulkUpload();\n }\n\n function goToNextStep() {\n Core.AppLinkHelper.trigger(appLinks.userUploadReviewExistingAccounts);\n return;\n }\n\n function startBulkUpload(): void {\n const jobData = BulkUserUploadHelper.getJobData({\n users, customerId: currentUser.data.customerId, userType: props.userType\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\n if (!currentUser.data || !yearGroups.data)\n return <></>;\n \n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='fix-duplicates'\n canAddExistingUsers\n >\n <div className='px-3'>\n <UserDuplicates\n onClickConfirm={onClickConfirm}\n closePopup={props.closePopup}\n appLinks={appLinks}\n userType={props.userType}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n validateUser={validateUser}\n validateEmail={validateEmail}\n emailRequired={props.userType === UserGroup.Staff}\n passwordPolicy={passwordPolicy.data}\n emptyStateImageUrl={ImageUrls.EmptyStates.UserManager.DUPLICATES}\n localErrorMessage={BulkUserUploadHelper.getErrorMessageOverride(props.userType)}\n />\n </div>\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}"],"names":["namespace","BulkUserUploadBackButton","props","currentStep","AppLink","className","appLink","appLinks","userManager","Text","phrase","BulkUserUploadContinueButton","useBulkUploadUsers","duplicateSets","hasExistingUsers","WizardLayoutContext","disableNext","onClickConfirm","spreadsheetHasDuplicates","length","currentAppLink","ContextService","action","userUploadStatus","polling","complete","userUploadPopup","userUploadReviewAccounts","userUploadFixDuplicates","userUploadReviewExistingAccounts","willUploadOnNext","Button","variant","onClick","disabled","canAddExistingUsers","userUploadConfirmation","getNextAppLink","BULK_USER_UPLOAD_NAV_LOCK_ID","BulkUserUploadWizardLayout","users","setUsers","navLock","useNavLock","lock","id","title","LanguageService","text","appLinkWhitelist","BulkUserUploadHelper","onConfirmUnlock","unlock","replace","WizardHeader","loaded","continueButton","backButton","breadcrumbs","name","settings","userType","UserGroup","active","WizardStepList","steps","children","updateUserHash","userHash","updatedUserIdsHash","Object","keys","reduce","updatedObj","lookupId","viewModel","setViewModel","updateDuplicates","invalidUsers","hasValidatedUsers","existingUsersHash","existingUserToAdd","newUsers","filter","u","setInvalidUsers","setExistingUsers","existingUsers","updateUser","updatedUser","updatedUsers","map","user","deleteUsers","deletedUsers","userIdHash","prev","curr","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","emptyState","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","renderCells","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","showButtons","hideHeader","getPhrase","WizardStepListItem","content","hideStepNumber","index","subText","isSelectedOverride","isCompleted","isCompletedOverride","itemContent","currentStepNumber","acc","step","i","totalSteps","itemsContainer","disableAppLinks","UserDuplicatesEmptyState","goNext","EmptyState","src","imageUrl","getColumns","onClickEdit","onClickDelete","Header","accessor","Cell","value","width","hasError","errorCodes","find","e","UserValidationCode","email","username","DivButton","tooltipPlacement","tooltipSpanHack","TABLE_THEME","UserDuplicateSet","isStudent","errorMessage","set","c","options","counter","firstName","surname","UserDuplicates","setDisableNext","setOnClickConfirm","deletingUsers","setDeletingUsers","editingUser","setEditingUser","initialSets","IconButton","initialSet","initialSetIds","updatedSet","updatedSetIds","ObjectHelper","emptyStateImageUrl","EditUploadedUserPopup","setUser","closePopup","analyticsOptions","currentUser","yearGroups","validateUser","formSize","emailRequired","passwordPolicy","localErrorMessage","validateEmail","DeleteUploadedUserPopup","BulkUserUploadFixDuplicatesView","UserRequests","UserManagerRequests","customerId","SecuritySettingsRequests","dispatch","fetchAsync","useSetPageMetadata","onCreateJobError","BulkUserActionsHelper","onCreateJob","job","params","jobId","UserManagerClientContext","UserManagerClient","jobData","JobRequests","_user","UserManagerHelper","userEmails","ImageUrls"],"sourceRoot":""}