@clickview/lite 0.81.2 → 0.82.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/{1969-800b184fc1-lite.chunk.js → 1969-ad6210f903-lite.chunk.js} +3 -3
  4. package/dist/scripts/1969-ad6210f903-lite.chunk.js.map +1 -0
  5. package/dist/scripts/3700-183b5127a1-lite.chunk.js +3 -0
  6. package/dist/scripts/3700-183b5127a1-lite.chunk.js.map +1 -0
  7. package/dist/scripts/{4134-7c9953ed9c-lite.chunk.js → 4134-0351c9f683-lite.chunk.js} +2 -2
  8. package/dist/scripts/{4134-7c9953ed9c-lite.chunk.js.map → 4134-0351c9f683-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/7288-aeb358a012-lite.chunk.js +2 -0
  10. package/dist/scripts/7288-aeb358a012-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{7604-bd0283d577-lite.chunk.js → 7604-f664281904-lite.chunk.js} +3 -3
  12. package/dist/scripts/7604-f664281904-lite.chunk.js.map +1 -0
  13. package/dist/scripts/7996-ad1567eb42-lite.chunk.js +2 -0
  14. package/dist/scripts/7996-ad1567eb42-lite.chunk.js.map +1 -0
  15. package/dist/scripts/bundle-b6ada106d1.min.js +3 -0
  16. package/dist/scripts/{bundle-d51ac7bd71.min.js.map → bundle-b6ada106d1.min.js.map} +1 -1
  17. package/package.json +1 -1
  18. package/dist/scripts/1969-800b184fc1-lite.chunk.js.map +0 -1
  19. package/dist/scripts/3700-b077e78193-lite.chunk.js +0 -3
  20. package/dist/scripts/3700-b077e78193-lite.chunk.js.map +0 -1
  21. package/dist/scripts/7288-0749315a12-lite.chunk.js +0 -2
  22. package/dist/scripts/7288-0749315a12-lite.chunk.js.map +0 -1
  23. package/dist/scripts/7604-bd0283d577-lite.chunk.js.map +0 -1
  24. package/dist/scripts/bundle-d51ac7bd71.min.js +0 -3
  25. /package/dist/scripts/{1969-800b184fc1-lite.chunk.js.LICENSE.txt → 1969-ad6210f903-lite.chunk.js.LICENSE.txt} +0 -0
  26. /package/dist/scripts/{3700-b077e78193-lite.chunk.js.LICENSE.txt → 3700-183b5127a1-lite.chunk.js.LICENSE.txt} +0 -0
  27. /package/dist/scripts/{7604-bd0283d577-lite.chunk.js.LICENSE.txt → 7604-f664281904-lite.chunk.js.LICENSE.txt} +0 -0
  28. /package/dist/scripts/{bundle-d51ac7bd71.min.js.LICENSE.txt → bundle-b6ada106d1.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4134],{23201:(e,t,a)=>{a.d(t,{A:()=>s});var r=a(32735),n=a(92802),l=a(2102),i=a(83345),o=a(33936),c="shared.formButtons";function s(e){var t=(0,n.u6)(),a=(0,o.l)(t);return r.createElement(l.m,{variant:e.variant||"primary",type:"submit",disabled:!a,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?r.createElement(r.Fragment,null,e.submitText):r.createElement(i.x,{namespace:c,phrase:e.isNew?"create":"save"}))}},29057:(e,t,a)=>{a.d(t,{n:()=>N,W:()=>S});var r=a(32735),n=a(80247),l=a(80130),i=a(92802),o=a(91967),c=a(1048),s=a(15611),u=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a};function m(e){var t=e.label,a=e.checkboxLabelClassName,n=e.checkboxLabelFontWeight,i=e.className,o=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return r.createElement(l.Z.Group,{className:"form-group"},r.createElement("div",{className:"form-check ".concat(i||"")},r.createElement(N,Object.assign({className:"form-check-input"},o)),r.createElement(l.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===n?"fw-normal":""," \n ").concat(a),htmlFor:o.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&r.createElement(r.Fragment,null,r.createElement("span",null," "),r.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=a(83914),p=a(83345),f=a(73814),v=a(35223);function g(e){var t=(0,i.u6)().values,a=c.t.get(t,e.fieldName);return"string"!=typeof a?r.createElement(r.Fragment,null):r.createElement("div",{className:"float-end text-secondary fw-normal"},a.length,"/",e.limit," characters")}const b={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var y=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a},E="shared.formField";function N(e){var t,a,l=e.children,s=e.showLoadingSpinner,u=y(e,["children","showLoadingSpinner"]),m=(t=r.useState(e.type),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(t,a)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?h(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],f=m[1],g=o.q.isFunction(l)?function(e){return l(e)}:r.Children.count(l)?l:null;if("password"!==u.type)return s?r.createElement("div",{className:"position-relative"},r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),g),r.createElement("div",{className:b.spinner},r.createElement(n.Z,{animation:"border",size:"sm"}))):r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),g);var E="position-relative ".concat(b.passwordContainer);return u.className&&(E+=" ".concat(u.className)),u.disabled&&(E+=" ".concat(b.passwordContainerDisabled)),r.createElement("div",{className:E},r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(b.passwordInput," border-0 w-100 h-100 outline-none rounded")}),g),"password"===u.type&&r.createElement(d.x,{svgName:"password"===p?v.vn.VisibleOn:v.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(b.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function S(e){var t=e.label,a=e.className,n=e.showCharacterCounter,o=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,h=e.infoText,S=e.formSize,w=e.showOptionalLabel,C=e.formGroupClassname,x=e.labelClassName,O=y(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","formGroupClassname","labelClassName"]),k=(0,i.u6)(),I=k.errors,A=k.touched,j=function(){};if("checkbox"===O.type){var T=c.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(T.onChange=j),r.createElement(m,Object.assign({},T))}var P=Object.assign(Object.assign({},O),{className:f.w.getCustomFormControlClassName(I,A,O.name,S,a,"string"==typeof e.as?e.as:null)});return e.disabled&&(P.onChange=j),r.createElement(l.Z.Group,{className:"form-group ".concat(C)},!!t&&r.createElement(l.Z.Label,{htmlFor:O.id,className:"d-flex align-items-center ".concat(x)},t,o&&r.createElement("span",{className:"text-danger"},"*"),s&&r.createElement(d.x,{className:"svg-container text-secondary ".concat(b.infoTooltip),svgName:v.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),w&&r.createElement("span",{className:"text-secondary"}," ",r.createElement(p.x,{namespace:E,phrase:"optional"})),!!n&&!!O.maxLength&&r.createElement("div",{className:"ms-auto"},r.createElement(g,{fieldName:O.name,limit:O.maxLength}))),e.description&&r.createElement("p",null,e.description),r.createElement(N,Object.assign({},P,{"aria-errormessage":"".concat(O.name,"Error")})),!!h&&r.createElement(l.Z.Text,{className:"text-secondary"},h),r.createElement(i.Bc,{name:O.name},function(e){return r.createElement(l.Z.Control.Feedback,{id:"".concat(O.name,"Error"),type:"invalid",role:"status"},e)}))}N.defaultProps={autoComplete:"off"},S.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,a)=>{a.d(t,{b:()=>m,n:()=>u});var r=a(32735),n=a(92802),l=a(91967),i=a(1048);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(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 c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var s=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a};function u(e){var t=e.castInitialValues,a=e.castValuesOnSubmit,c=e.initialValues,u=e.onSubmit,m=s(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=i.t.deepClone(e);return function e(a){Object.keys(t).forEach(function(r){t.hasOwnProperty(r)&&(i.t.isObject(a[r])?e(a[r]):null===t[r]&&delete t[r])})}(t),t}(c)):c,p={allowInitialSubmit:e.allowInitialSubmit};return r.createElement(n.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,r){var n=r.setSubmitting,l=r.resetForm,i=r.setFieldError,c=a&&e.validationSchema?e.validationSchema.cast(t):t;u(c,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e.reset&&l(),e.errors)for(var t=0,a=Object.entries(e.errors);t<a.length;t++){var r=o(a[t],2),c=r[0],s=r[1];i(c,s)}n(!1)})},initialStatus:p}),l.q.isFunction(e.children)?function(t){return e.children(t)}:r.Children.count(e.children)?e.children:null)}function m(){return(0,n.u6)()}u.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},34479:(e,t,a)=>{a.d(t,{j:()=>g});var r=a(32735),n=a(44645),l=a(51934),i=a.n(l),o=a(23481),c=a(9111),s=a(13876),u=a(10587);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?d(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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}a(67575);var p=o.T.encloseNamespace("shared.imageCropper"),f=/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/;function v(e){var t=m(r.useState(!1),2),a=t[0],n=t[1],l=m(r.useState(!1),2),o=l[0],d=l[1],v=r.useRef(null),g=r.useRef(null);return r.useEffect(function(){var t=new Image;t.src=e.src;var a=v.current.offsetWidth/t.width,r=u.y[e.imageType],l={viewMode:2,autoCropArea:1,ready:function(){return n(!0)}};return r&&(l.minCropBoxWidth=r.width*a,l.minCropBoxHeight=r.height*a,l.aspectRatio=r.width/r.height),g.current=new(i())(v.current,l),function(){g.current.destroy()}},[]),r.createElement(c.G,{title:p("title"),closePopup:e.closePopup,size:e.popupSize},r.createElement("div",null,r.createElement("img",{src:e.src,alt:e.alt,ref:v,className:"img img-fluid"})),r.createElement(s.u,null,r.createElement(s.u.Cancel,{onClick:e.closePopup}),r.createElement(s.u.Submit,{onClick:function(){if(a){var t=g.current.getCroppedCanvas().toDataURL(function(e){var t=e.match(f);if(t)return t[1]}(e.src));d(!0),e.onClickCrop(t,e.closePopup)}},text:p("crop"),variant:"dark",showSpinner:o})))}v.defaultProps={popupSize:"lg"};var g={renderCropper:function(e){var t=(0,n.s)(document.getElementById("dialog-region"));t.render(r.createElement(v,Object.assign({},e,{closePopup:function(){return t.unmount()}})))}}},73814:(e,t,a)=>{a.d(t,{w:()=>n});var r=a(92802),n={getCustomFormControlClassName:function(e,t,a,n,l,i){var o="";return o=function(e,t){var a="";return a="select"===e?"form-select":"form-control","sm"===t&&(a+=" ".concat(a,"-sm")),"lg"===t&&(a+=" ".concat(a,"-lg")),a}(i,n),(0,r.u9)(t,a)&&(0,r.u9)(e,a)&&(o+=" is-invalid"),l&&(o+=" ".concat(l)),o}}},81803:(e,t,a)=>{a.d(t,{d:()=>f});var r=a(32735),n=a(81886),l=a(23481),i=a(49935),o=a(22902),c=a(14070),s=a(97291),u=a(96368);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var d="settings.settingsLayout",p=function(e){var t=(0,o.T)().hasPermissions,a=(0,u.e)();if(e)return t(e);var r=n.Q.C$.getCurrentAppLink();return r.application!==s.O.SETTINGS||a.some(function(e){return e.modules.some(function(e){return"appLink"in e&&e.appLink.action===r.action})})};function f(e){var t,a=p(e.requiredPermissions);if(r.useEffect(function(){a||n.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})},[a]),!a)return r.createElement(r.Fragment,null);var o,u=e.breadcrumbs.map(function(t,a){return{name:t,appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME},active:a===e.breadcrumbs.length-1}});return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),r.createElement("div",{className:"pb-3"},r.createElement(i.Oo,{breadcrumbs:[{name:l.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME}}].concat((o=u,function(e){if(Array.isArray(e))return m(e)}(o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?m(e,t):void 0}}(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&r.createElement(r.Fragment,null,r.createElement("p",null,e.description),r.createElement("hr",null)),e.children)}},54134:(e,t,a)=>{a.r(t),a.d(t,{ProfileDetailsView:()=>R});var r=a(32735),n=a(70680),l=a(23481),i=a(20354),o=a(49985),c=a(65858),s=a(54610),u=a(39151),m=a(31949),d=a(69883),p=a(79612),f=a(93543),v=a(97395),g=a(83345),b=a(34479),h=a(67453),y=a(79483),E=a(64818);const N={profileImage:"e1vsK"};var S="settings.editAvatar";function w(e){var t,a,n,l,i=r.useRef(null),o=(null===(t=e.user.avatar)||void 0===t?void 0:t.url)?h.j.createUrl(e.user.avatar.url,{size:s.h2.Medium}):(n=e.imageCdnUrl,l=E.l.getInitials(e.user.name,e.user.surname),h.j.createUrl(v._.safeUrlConcat(n,"/v1/profile-images?initials=".concat(l)),{size:s.h2.Medium}));return r.createElement(g.D.Provider,{value:S},r.createElement("div",{className:"col-auto form-group d-flex flex-column align-items-center ps-4"},r.createElement("label",{className:"align-self-start"},r.createElement(g.x,{phrase:"profileImage"})),r.createElement("img",{className:"img img-fluid rounded ".concat(N.profileImage," mb-2"),alt:"User avatar",src:o}),r.createElement("button",{className:"btn btn-outline-dark px-3 text-center",onClick:function(){i.current.value=null,i.current.click(null)}},r.createElement(g.x,{phrase:"uploadImage"})),r.createElement("input",{type:"file",className:"file-select d-none",multiple:!1,accept:"image/jpg,image/jpeg,image/png",ref:i,onChange:function(t){var a;(a=t.target.files)&&a[0]&&y.J.onFileSelect(s.__.Avatars,a,function(t){b.j.renderCropper({src:t.src,alt:"",onClickCrop:function(t,a){return e.onSelectImage(function(e){return e.split(",")[1]}(t),a)},imageType:s.__.Avatars})})}}),!!(null===(a=e.user.avatar)||void 0===a?void 0:a.url)&&r.createElement("button",{className:"btn btn-link text-center",onClick:e.onClickRemoveImage},r.createElement(g.x,{phrase:"removeImage"}))))}var C=a(92802),x=a(23201),O=a(29057),k=a(82644),I=a(5173),A=l.T.encloseNamespace("settings.editProfileDetailsForm"),j=(0,I.Ry)().shape({firstName:(0,I.Z_)().max(255,function(){return A("nameExceeds")}).required(function(){return A("nameRequired")}).default("").trim(),surname:(0,I.Z_)().max(255,function(){return A("surnameExceeds")}).required(function(){return A("surnameRequired")}).default("").trim(),username:(0,I.Z_)().max(255,function(){return A("usernameExceeds")}).default("").trim(),displayName:(0,I.Z_)().max(255,function(){return A("displayNameExceeds")}).default("").trim()}),T=l.T.encloseNamespace("settings.editProfileDetailsForm");function P(e){var t,a;return r.createElement(k.n,{initialValues:{firstName:e.user.name,surname:e.user.surname,username:e.user.username,displayName:null!==(a=null===(t=e.user.metadata)||void 0===t?void 0:t.displayName)&&void 0!==a?a:""},validationSchema:j,onSubmit:e.onClickSave},r.createElement(C.l0,null,r.createElement(O.W,{label:T("firstName"),type:"text",name:"firstName",id:"firstName",placeholder:T("firstNamePlaceholder"),autoFocus:!0,showRequiredStar:!0}),r.createElement(O.W,{label:T("lastName"),type:"text",name:"surname",id:"surname",placeholder:T("lastNamePlaceholder"),showRequiredStar:!0}),r.createElement(O.W,{label:T("displayName"),type:"text",name:"displayName",id:"displayName",placeholder:T("displayNamePlaceholder"),infoTooltip:T("displayNameTooltip")}),r.createElement(O.W,{label:T("username"),type:"text",name:"username",id:"username",placeholder:T("usernamePlaceholder"),showRequiredStar:!0,disabled:!0,infoTooltip:T("usernameTooltip")}),r.createElement(x.A,{variant:"dark",submitText:T("saveChanges"),isNew:!1})))}var L=a(81803),F=a(47288);const U={partialLabel:"Z_3rS",partialInput:"B0iyg",partialSubmit:"MZM6I",partialAvatar:"iqthe",partialUploadImage:"qmeIF"};function Z(){return r.createElement("div",{className:"row g-0"},r.createElement("div",{className:"col-4"},r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"partial-loading-background ".concat(U.partialSubmit)})),r.createElement("div",{className:"col form-group d-flex flex-column ps-4"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background mb-2 ".concat(U.partialAvatar)}),r.createElement("div",{className:"partial-loading-background mx-3 ".concat(U.partialUploadImage)})))}var z=l.T.encloseNamespace("settings.profileDetails");function R(){(0,p.M)({title:z("pageTitle")});var e=(0,n.I0)(),t=(0,d.Z)(),a=i.a.useBasicFetch(m.N.currentUser()),l=i.a.useBasicFetch(a.data&&F.N.getUser(a.data.id)),v=i.a.useBasicFetch(u.L.config());return r.createElement(L.d,{heading:z("heading"),breadcrumbs:[z("breadcrumb")]},a.data&&l.data&&v.data?r.createElement("div",{className:"row g-0"},r.createElement("div",{className:"col-4"},r.createElement(P,{user:l.data,onClickSave:function(a,r){var n,s,u={firstName:a.firstName,lastName:a.surname,displayName:a.displayName||null,jobTitle:(null===(s=null===(n=l.data.userProfile)||void 0===n?void 0:n.metadata)||void 0===s?void 0:s.jobTitle)||""};i.a.fetch(e,F.N.updateCurrentUser(u,function(){o.k.logUserAction(a,{location:c.LZ.Settings,actionType:c.Vw.Edit,workflowPhase:c.eu.Complete,entity:c.py.User}),t.success(z("success"))},function(){t.error(z("error"))},r))}})),r.createElement(w,{user:l.data,onSelectImage:function(r,n){i.a.fetch(e,f.A.uploadBase64Image(s.__.Avatars,r,function(r){!function(r,n){i.a.fetch(e,F.N.updateAvatar(r.id,a.data.id,function(){o.k.logUserAction({id:a.data.id,avatarId:r.id,avatarUrl:r.location},{actionType:c.Vw.Associate,workflowPhase:c.eu.Complete,location:c.LZ.Settings,entity:c.py.User,descriptor:c.iF.Avatar}),n(),t.success(z("avatarUploadSuccess"))},function(){t.error(z("avatarUploadError"))}))}(r,n)},function(){t.error(z("avatarUploadError"))}))},onClickRemoveImage:function(){i.a.fetch(e,F.N.deleteAvatar(l.data.avatar.id,a.data.id,function(){o.k.logUserAction({id:a.data.id,avatarId:l.data.avatar.id},{actionType:c.Vw.Dissociate,workflowPhase:c.eu.Complete,location:c.LZ.Settings,entity:c.py.User,descriptor:c.iF.Avatar}),t.success(z("avatarDeleteSuccess"))},function(){t.error(z("avatarDeleteError"))}))},imageCdnUrl:v.data.imageCdnUrl})):r.createElement(Z,null))}},67575:()=>{}}]);
2
- //# sourceMappingURL=4134-7c9953ed9c-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4134],{23201:(e,t,a)=>{a.d(t,{A:()=>s});var r=a(32735),n=a(92802),l=a(2102),i=a(83345),o=a(33936),c="shared.formButtons";function s(e){var t=(0,n.u6)(),a=(0,o.l)(t);return r.createElement(l.m,{variant:e.variant||"primary",type:"submit",disabled:!a,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?r.createElement(r.Fragment,null,e.submitText):r.createElement(i.x,{namespace:c,phrase:e.isNew?"create":"save"}))}},29057:(e,t,a)=>{a.d(t,{n:()=>N,W:()=>S});var r=a(32735),n=a(80247),l=a(80130),i=a(92802),o=a(91967),c=a(1048),s=a(15611),u=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a};function m(e){var t=e.label,a=e.checkboxLabelClassName,n=e.checkboxLabelFontWeight,i=e.className,o=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return r.createElement(l.Z.Group,{className:"form-group"},r.createElement("div",{className:"form-check ".concat(i||"")},r.createElement(N,Object.assign({className:"form-check-input"},o)),r.createElement(l.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===n?"fw-normal":""," \n ").concat(a),htmlFor:o.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&r.createElement(r.Fragment,null,r.createElement("span",null," "),r.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=a(83914),p=a(83345),f=a(73814),v=a(35223);function g(e){var t=(0,i.u6)().values,a=c.t.get(t,e.fieldName);return"string"!=typeof a?r.createElement(r.Fragment,null):r.createElement("div",{className:"float-end text-secondary fw-normal"},a.length,"/",e.limit," characters")}const b={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var y=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a},E="shared.formField";function N(e){var t,a,l=e.children,s=e.showLoadingSpinner,u=y(e,["children","showLoadingSpinner"]),m=(t=r.useState(e.type),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(t,a)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?h(e,t):void 0}}(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],f=m[1],g=o.q.isFunction(l)?function(e){return l(e)}:r.Children.count(l)?l:null;if("password"!==u.type)return s?r.createElement("div",{className:"position-relative"},r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),g),r.createElement("div",{className:b.spinner},r.createElement(n.Z,{animation:"border",size:"sm"}))):r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),g);var E="position-relative ".concat(b.passwordContainer);return u.className&&(E+=" ".concat(u.className)),u.disabled&&(E+=" ".concat(b.passwordContainerDisabled)),r.createElement("div",{className:E},r.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(b.passwordInput," border-0 w-100 h-100 outline-none rounded")}),g),"password"===u.type&&r.createElement(d.x,{svgName:"password"===p?v.vn.VisibleOn:v.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(b.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function S(e){var t=e.label,a=e.className,n=e.showCharacterCounter,o=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,h=e.infoText,S=e.formSize,w=e.showOptionalLabel,C=e.formGroupClassname,x=e.labelClassName,O=y(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","formGroupClassname","labelClassName"]),k=(0,i.u6)(),I=k.errors,A=k.touched,j=function(){};if("checkbox"===O.type){var T=c.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(T.onChange=j),r.createElement(m,Object.assign({},T))}var P=Object.assign(Object.assign({},O),{className:f.w.getCustomFormControlClassName(I,A,O.name,S,a,"string"==typeof e.as?e.as:null)});return e.disabled&&(P.onChange=j),r.createElement(l.Z.Group,{className:"form-group ".concat(C)},!!t&&r.createElement(l.Z.Label,{htmlFor:O.id,className:"d-flex align-items-center ".concat(x)},t,o&&r.createElement("span",{className:"text-danger"},"*"),s&&r.createElement(d.x,{className:"svg-container text-secondary ".concat(b.infoTooltip),svgName:v.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),w&&r.createElement("span",{className:"text-secondary"}," ",r.createElement(p.x,{namespace:E,phrase:"optional"})),!!n&&!!O.maxLength&&r.createElement("div",{className:"ms-auto"},r.createElement(g,{fieldName:O.name,limit:O.maxLength}))),e.description&&r.createElement("p",null,e.description),r.createElement(N,Object.assign({},P,{"aria-errormessage":"".concat(O.name,"Error")})),!!h&&r.createElement(l.Z.Text,{className:"text-secondary"},h),r.createElement(i.Bc,{name:O.name},function(e){return r.createElement(l.Z.Control.Feedback,{id:"".concat(O.name,"Error"),type:"invalid",role:"status"},e)}))}N.defaultProps={autoComplete:"off"},S.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,a)=>{a.d(t,{b:()=>m,n:()=>u});var r=a(32735),n=a(92802),l=a(91967),i=a(1048);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(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 c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var s=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a};function u(e){var t=e.castInitialValues,a=e.castValuesOnSubmit,c=e.initialValues,u=e.onSubmit,m=s(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=i.t.deepClone(e);return function e(a){Object.keys(t).forEach(function(r){t.hasOwnProperty(r)&&(i.t.isObject(a[r])?e(a[r]):null===t[r]&&delete t[r])})}(t),t}(c)):c,p={allowInitialSubmit:e.allowInitialSubmit};return r.createElement(n.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,r){var n=r.setSubmitting,l=r.resetForm,i=r.setFieldError,c=a&&e.validationSchema?e.validationSchema.cast(t):t;u(c,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e.reset&&l(),e.errors)for(var t=0,a=Object.entries(e.errors);t<a.length;t++){var r=o(a[t],2),c=r[0],s=r[1];i(c,s)}n(!1)})},initialStatus:p}),l.q.isFunction(e.children)?function(t){return e.children(t)}:r.Children.count(e.children)?e.children:null)}function m(){return(0,n.u6)()}u.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},34479:(e,t,a)=>{a.d(t,{j:()=>g});var r=a(32735),n=a(44645),l=a(51934),i=a.n(l),o=a(23481),c=a(9111),s=a(13876),u=a(10587);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,l,i,o=[],c=!0,s=!1;try{if(l=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(r=l.call(a)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(s)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?d(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 d(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}a(67575);var p=o.T.encloseNamespace("shared.imageCropper"),f=/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/;function v(e){var t=m(r.useState(!1),2),a=t[0],n=t[1],l=m(r.useState(!1),2),o=l[0],d=l[1],v=r.useRef(null),g=r.useRef(null);return r.useEffect(function(){var t=new Image;t.src=e.src;var a=v.current.offsetWidth/t.width,r=u.y[e.imageType],l={viewMode:2,autoCropArea:1,ready:function(){return n(!0)}};return r&&(l.minCropBoxWidth=r.width*a,l.minCropBoxHeight=r.height*a,l.aspectRatio=r.width/r.height),g.current=new(i())(v.current,l),function(){g.current.destroy()}},[]),r.createElement(c.G,{title:p("title"),closePopup:e.closePopup,size:e.popupSize},r.createElement("div",null,r.createElement("img",{src:e.src,alt:e.alt,ref:v,className:"img img-fluid"})),r.createElement(s.u,null,r.createElement(s.u.Cancel,{onClick:e.closePopup}),r.createElement(s.u.Submit,{onClick:function(){if(a){var t=g.current.getCroppedCanvas().toDataURL(function(e){var t=e.match(f);if(t)return t[1]}(e.src));d(!0),e.onClickCrop(t,e.closePopup)}},text:p("crop"),variant:"dark",showSpinner:o})))}v.defaultProps={popupSize:"lg"};var g={renderCropper:function(e){var t=(0,n.s)(document.getElementById("dialog-region"));t.render(r.createElement(v,Object.assign({},e,{closePopup:function(){return t.unmount()}})))}}},73814:(e,t,a)=>{a.d(t,{w:()=>n});var r=a(92802),n={getCustomFormControlClassName:function(e,t,a,n,l,i){var o="";return o=function(e,t){var a="";return a="select"===e?"form-select":"form-control","sm"===t&&(a+=" ".concat(a,"-sm")),"lg"===t&&(a+=" ".concat(a,"-lg")),a}(i,n),(0,r.u9)(t,a)&&(0,r.u9)(e,a)&&(o+=" is-invalid"),l&&(o+=" ".concat(l)),o}}},81803:(e,t,a)=>{a.d(t,{d:()=>f});var r=a(32735),n=a(81886),l=a(23481),i=a(49935),o=a(22902),c=a(14070),s=a(97291),u=a(96368);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var d="settings.settingsLayout",p=function(e){var t=(0,o.T)().hasPermissions,a=(0,u.e)();if(e)return t(e);var r=n.Q.C$.getCurrentAppLink();return r.application!==s.O.SETTINGS||a.some(function(e){return e.modules.some(function(e){return"appLink"in e&&e.appLink.action===r.action})})};function f(e){var t,a=p(e.requiredPermissions);if(r.useEffect(function(){a||n.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})},[a]),!a)return r.createElement(r.Fragment,null);var o,u=e.breadcrumbs.map(function(t,a){return{name:t,appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME},active:a===e.breadcrumbs.length-1}});return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),r.createElement("div",{className:"pb-3"},r.createElement(i.Oo,{breadcrumbs:[{name:l.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME}}].concat((o=u,function(e){if(Array.isArray(e))return m(e)}(o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?m(e,t):void 0}}(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&r.createElement(r.Fragment,null,r.createElement("p",null,e.description),r.createElement("hr",null)),e.children)}},54134:(e,t,a)=>{a.r(t),a.d(t,{ProfileDetailsView:()=>R});var r=a(32735),n=a(70680),l=a(23481),i=a(20354),o=a(49985),c=a(65858),s=a(54610),u=a(39151),m=a(31949),d=a(69883),p=a(79612),f=a(93543),v=a(97395),g=a(83345),b=a(34479),h=a(67453),y=a(79483),E=a(64818);const N={profileImage:"e1vsK"};var S="settings.editAvatar";function w(e){var t,a,n,l,i=r.useRef(null),o=(null===(t=e.user.avatar)||void 0===t?void 0:t.url)?h.j.createUrl(e.user.avatar.url,{size:s.h2.Medium}):(n=e.imageCdnUrl,l=E.l.getInitials(e.user.name,e.user.surname),h.j.createUrl(v._.safeUrlConcat(n,"/v1/profile-images?initials=".concat(l)),{size:s.h2.Medium}));return r.createElement(g.D.Provider,{value:S},r.createElement("div",{className:"col-auto form-group d-flex flex-column align-items-center ps-4"},r.createElement("label",{className:"align-self-start"},r.createElement(g.x,{phrase:"profileImage"})),r.createElement("img",{className:"img img-fluid rounded ".concat(N.profileImage," mb-2"),alt:"User avatar",src:o}),r.createElement("button",{className:"btn btn-outline-dark px-3 text-center",onClick:function(){i.current.value=null,i.current.click(null)}},r.createElement(g.x,{phrase:"uploadImage"})),r.createElement("input",{type:"file",className:"file-select d-none",multiple:!1,accept:"image/jpg,image/jpeg,image/png",ref:i,onChange:function(t){var a;(a=t.target.files)&&a[0]&&y.J.onFileSelect(s.__.Avatars,a,function(t){b.j.renderCropper({src:t.src,alt:"",onClickCrop:function(t,a){return e.onSelectImage(function(e){return e.split(",")[1]}(t),a)},imageType:s.__.Avatars})})}}),!!(null===(a=e.user.avatar)||void 0===a?void 0:a.url)&&r.createElement("button",{className:"btn btn-link text-center",onClick:e.onClickRemoveImage},r.createElement(g.x,{phrase:"removeImage"}))))}var C=a(92802),x=a(23201),O=a(29057),k=a(82644),I=a(5173),A=l.T.encloseNamespace("settings.editProfileDetailsForm"),j=(0,I.Ry)().shape({firstName:(0,I.Z_)().max(255,function(){return A("nameExceeds")}).required(function(){return A("nameRequired")}).default("").trim(),surname:(0,I.Z_)().max(255,function(){return A("surnameExceeds")}).required(function(){return A("surnameRequired")}).default("").trim(),username:(0,I.Z_)().max(255,function(){return A("usernameExceeds")}).default("").trim(),displayName:(0,I.Z_)().max(255,function(){return A("displayNameExceeds")}).default("").trim()}),T=l.T.encloseNamespace("settings.editProfileDetailsForm");function P(e){var t,a;return r.createElement(k.n,{initialValues:{firstName:e.user.name,surname:e.user.surname,username:e.user.username,displayName:null!==(a=null===(t=e.user.metadata)||void 0===t?void 0:t.displayName)&&void 0!==a?a:""},validationSchema:j,onSubmit:e.onClickSave},r.createElement(C.l0,null,r.createElement(O.W,{label:T("firstName"),type:"text",name:"firstName",id:"firstName",placeholder:T("firstNamePlaceholder"),autoFocus:!0,showRequiredStar:!0}),r.createElement(O.W,{label:T("lastName"),type:"text",name:"surname",id:"surname",placeholder:T("lastNamePlaceholder"),showRequiredStar:!0}),r.createElement(O.W,{label:T("displayName"),type:"text",name:"displayName",id:"displayName",placeholder:T("displayNamePlaceholder"),infoTooltip:T("displayNameTooltip")}),r.createElement(O.W,{label:T("username"),type:"text",name:"username",id:"username",placeholder:T("usernamePlaceholder"),showRequiredStar:!0,disabled:!0,infoTooltip:T("usernameTooltip")}),r.createElement(x.A,{variant:"dark",submitText:T("saveChanges"),isNew:!1})))}var L=a(81803),F=a(47288);const U={partialLabel:"Z_3rS",partialInput:"B0iyg",partialSubmit:"MZM6I",partialAvatar:"iqthe",partialUploadImage:"qmeIF"};function Z(){return r.createElement("div",{className:"row g-0"},r.createElement("div",{className:"col-4"},r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"form-group"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background w-100 ".concat(U.partialInput)})),r.createElement("div",{className:"partial-loading-background ".concat(U.partialSubmit)})),r.createElement("div",{className:"col form-group d-flex flex-column ps-4"},r.createElement("div",{className:"partial-loading-background ".concat(U.partialLabel)}),r.createElement("div",{className:"partial-loading-background mb-2 ".concat(U.partialAvatar)}),r.createElement("div",{className:"partial-loading-background mx-3 ".concat(U.partialUploadImage)})))}var z=l.T.encloseNamespace("settings.profileDetails");function R(){(0,p.M)({title:z("pageTitle")});var e=(0,n.I0)(),t=(0,d.Z)(),a=i.a.useBasicFetch(m.N.currentUser()),l=i.a.useBasicFetch(a.data&&F.N.getUser(a.data.id)),v=i.a.useBasicFetch(u.L.config());return r.createElement(L.d,{heading:z("heading"),breadcrumbs:[z("breadcrumb")]},a.data&&l.data&&v.data?r.createElement("div",{className:"row g-0"},r.createElement("div",{className:"col-4"},r.createElement(P,{user:l.data,onClickSave:function(a,r){var n,s,u={firstName:a.firstName,lastName:a.surname,displayName:a.displayName||null,jobTitle:(null===(s=null===(n=l.data.userProfile)||void 0===n?void 0:n.metadata)||void 0===s?void 0:s.jobTitle)||""};i.a.fetch(e,m.N.updateCurrentUser(u,function(){o.k.logUserAction(a,{location:c.LZ.Settings,actionType:c.Vw.Edit,workflowPhase:c.eu.Complete,entity:c.py.User}),t.success(z("success"))},function(){t.error(z("error"))},r))}})),r.createElement(w,{user:l.data,onSelectImage:function(r,n){i.a.fetch(e,f.A.uploadBase64Image(s.__.Avatars,r,function(r){!function(r,n){i.a.fetch(e,F.N.updateAvatar(r.id,a.data.id,function(){o.k.logUserAction({id:a.data.id,avatarId:r.id,avatarUrl:r.location},{actionType:c.Vw.Associate,workflowPhase:c.eu.Complete,location:c.LZ.Settings,entity:c.py.User,descriptor:c.iF.Avatar}),n(),t.success(z("avatarUploadSuccess"))},function(){t.error(z("avatarUploadError"))}))}(r,n)},function(){t.error(z("avatarUploadError"))}))},onClickRemoveImage:function(){i.a.fetch(e,F.N.deleteAvatar(l.data.avatar.id,a.data.id,function(){o.k.logUserAction({id:a.data.id,avatarId:l.data.avatar.id},{actionType:c.Vw.Dissociate,workflowPhase:c.eu.Complete,location:c.LZ.Settings,entity:c.py.User,descriptor:c.iF.Avatar}),t.success(z("avatarDeleteSuccess"))},function(){t.error(z("avatarDeleteError"))}))},imageCdnUrl:v.data.imageCdnUrl})):r.createElement(Z,null))}},67575:()=>{}}]);
2
+ //# sourceMappingURL=4134-0351c9f683-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/4134-7c9953ed9c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/image-cropper/SimpleCropper.tsx","file:///app/packages/libs/shared/src/utils/CropperHelper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/components/edit-avatar/edit-avatar.scss","file:///app/packages/projects/lite/src/apps/settings/components/edit-avatar/EditAvatar.tsx","file:///app/packages/projects/lite/src/apps/settings/components/edit-profile-details-form/ProfileDetailsValidationSchema.ts","file:///app/packages/projects/lite/src/apps/settings/components/edit-profile-details-form/EditProfileDetailsForm.tsx","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/partial-loading/partial-profile-details.scss","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/partial-loading/PartialProfileDetails.tsx","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/ProfileDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = ObjectHelper.get(values, props.fieldName as string);\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n description?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n formGroupClassname?: string;\n labelClassName?: string;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n formGroupClassname,\n labelClassName: labelGlassName,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className={`form-group ${formGroupClassname}`}>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className={`d-flex align-items-center ${labelGlassName}`}>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n {props.description &&\n <p>\n {props.description}\n </p>\n }\n\n <FieldWrapper {...fieldWrapperProps} aria-errormessage={`${fieldProps.name}Error`} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback id={`${fieldProps.name}Error`} type='invalid' role='status'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\nimport Cropper from 'cropperjs';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport './image-cropper.scss';\n\nconst namespace = 'shared.imageCropper';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MIME_REGEX = /data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,.*/;\n\nconst getImageMimeType = (dataUrl: string) => {\n const mime = dataUrl.match(MIME_REGEX);\n\n if (!mime)\n return;\n\n return mime[1];\n};\n\nexport interface SimpleCropperProps {\n src: string;\n alt: string;\n onClickCrop: (dataUrl: string, closePopup: () => void) => void;\n closePopup: () => void;\n popupSize?: 'sm' | 'md' |'lg' | 'xl';\n\n /**\n * If an imageType isn't provide the aspect ratio\n * and min sizes won'd be locked\n */\n imageType?: ImageType;\n}\n\nSimpleCropper.defaultProps = {\n popupSize: 'lg'\n};\n\nexport function SimpleCropper(props: SimpleCropperProps): JSX.Element {\n const [ imageLoaded, setImageLoaded ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const imageRef = React.useRef<HTMLImageElement>(null);\n const cropperRef = React.useRef<Cropper>(null);\n\n const crop = () => {\n if (!imageLoaded)\n return;\n\n const croppedDataUrl = cropperRef.current.getCroppedCanvas().toDataURL(getImageMimeType(props.src));\n\n setShowSpinner(true);\n props.onClickCrop(croppedDataUrl, props.closePopup);\n };\n\n React.useEffect(() => {\n const image = new Image();\n image.src = props.src;\n\n const viewPortToImageRatio = imageRef.current.offsetWidth / image.width;\n const dimensions = ImageMinDimensions[props.imageType];\n\n const options: Cropper.Options = {\n viewMode: 2,\n autoCropArea: 1, // Number between 0 and 1 that defines the initial cropper area as a percentage of the image.\n ready: () => setImageLoaded(true)\n };\n\n if (dimensions) {\n options.minCropBoxWidth = dimensions.width * viewPortToImageRatio;\n options.minCropBoxHeight = dimensions.height * viewPortToImageRatio;\n options.aspectRatio = dimensions.width / dimensions.height;\n }\n\n cropperRef.current = new Cropper(imageRef.current, options);\n\n return () => { cropperRef.current.destroy(); };\n }, []);\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n size={props.popupSize}\n >\n <div>\n <img\n src={props.src}\n alt={props.alt}\n ref={imageRef}\n className='img img-fluid'\n />\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n onClick={crop}\n text={getPhrase('crop')}\n variant='dark'\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { SimpleCropper, SimpleCropperProps } from 'libs/shared/components/image-cropper/SimpleCropper';\n\nexport const CropperHelper = {\n renderCropper(props: Omit<SimpleCropperProps, 'closePopup'>): void {\n const root = createRoot(document.getElementById('dialog-region'));\n\n root.render(\n <SimpleCropper\n {...props}\n closePopup={() => root.unmount()}\n />\n );\n }\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"profileImage\":\"e1vsK\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { User } from 'libs/shared/interfaces';\nimport { CropperHelper } from 'libs/shared/utils/CropperHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { ImageSelectHelper } from 'libs/shared/utils/ImageSelectHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './edit-avatar.scss';\n\nconst namespace = 'settings.editAvatar';\n\nfunction getFallBackImageUrl(imageCdnUrl: string, initials: string): string {\n return ImageHelper.createUrl(\n UrlHelper.safeUrlConcat(imageCdnUrl, `/v1/profile-images?initials=${initials}`),\n { size: ImageSize.Medium }\n );\n}\n\nfunction getDataUrl(imageUrl: string): string {\n return imageUrl.split(',')[1];\n}\n\ninterface EditAvatarProps {\n user: User;\n onSelectImage: (dataUrl: string, closePopup: () => void) => void;\n onClickRemoveImage: () => void;\n imageCdnUrl: string;\n}\n\nexport function EditAvatar(props: EditAvatarProps): JSX.Element {\n const imageInputRef = React.useRef(null);\n\n const avatar = props.user.avatar?.url\n ? ImageHelper.createUrl(props.user.avatar.url, { size: ImageSize.Medium })\n : getFallBackImageUrl(props.imageCdnUrl, UserHelper.getInitials(props.user.name, props.user.surname));\n\n function onClickUploadImage(): void {\n imageInputRef.current.value = null;\n imageInputRef.current.click(null);\n }\n\n function onImageSelect(files: FileList): void {\n if (!files || !files[0])\n return;\n\n ImageSelectHelper.onFileSelect(ImageType.Avatars, files, image => {\n CropperHelper.renderCropper({\n src: image.src,\n alt: '',\n onClickCrop: (imageUrl, closePopup) => props.onSelectImage(getDataUrl(imageUrl), closePopup),\n imageType: ImageType.Avatars\n });\n });\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='col-auto form-group d-flex flex-column align-items-center ps-4'>\n <label className='align-self-start'><Text phrase='profileImage' /></label>\n <img\n className={`img img-fluid rounded ${styles.profileImage} mb-2`}\n alt='User avatar'\n src={avatar}\n />\n <button className='btn btn-outline-dark px-3 text-center' onClick={onClickUploadImage}>\n <Text phrase='uploadImage' />\n </button>\n <input\n type='file'\n className='file-select d-none'\n multiple={false}\n accept='image/jpg,image/jpeg,image/png'\n ref={imageInputRef}\n onChange={e => onImageSelect(e.target.files)}\n />\n\n {!!props.user.avatar?.url && (\n <button className='btn btn-link text-center' onClick={props.onClickRemoveImage}>\n <Text phrase='removeImage' />\n </button>\n )}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'settings.editProfileDetailsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const ProfileDetailsValidationSchema = object().shape({\n firstName: string()\n .max(255, () => getPhrase('nameExceeds'))\n .required(() => getPhrase('nameRequired'))\n .default('')\n .trim(),\n surname: string()\n .max(255, () => getPhrase('surnameExceeds'))\n .required(() => getPhrase('surnameRequired'))\n .default('')\n .trim(),\n username: string()\n .max(255, () => getPhrase('usernameExceeds'))\n .default('')\n .trim(),\n displayName: string()\n .max(255, () => getPhrase('displayNameExceeds'))\n .default('')\n .trim()\n});","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { User } from 'libs/shared/interfaces';\n\nimport { ProfileDetailsValidationSchema } from './ProfileDetailsValidationSchema';\n\nconst namespace = 'settings.editProfileDetailsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditProfileDetailsProps {\n user: User;\n onClickSave: (data: EditUserRequest) => void;\n}\n\nexport function EditProfileDetails(props: EditProfileDetailsProps): JSX.Element {\n return (\n <FormWrapper<EditUserRequest>\n initialValues={{\n firstName: props.user.name,\n surname: props.user.surname,\n username: props.user.username,\n displayName: props.user.metadata?.displayName ?? ''\n }}\n validationSchema={ProfileDetailsValidationSchema}\n onSubmit={props.onClickSave}\n >\n <Form>\n <FormField\n label={getPhrase('firstName')}\n type='text'\n name='firstName'\n id='firstName'\n placeholder={getPhrase('firstNamePlaceholder')}\n autoFocus\n showRequiredStar\n />\n <FormField\n label={getPhrase('lastName')}\n type='text'\n name='surname'\n id='surname'\n placeholder={getPhrase('lastNamePlaceholder')}\n showRequiredStar\n />\n <FormField\n label={getPhrase('displayName')}\n type='text'\n name='displayName'\n id='displayName'\n placeholder={getPhrase('displayNamePlaceholder')}\n infoTooltip={getPhrase('displayNameTooltip')}\n />\n <FormField\n label={getPhrase('username')}\n type='text'\n name='username'\n id='username'\n placeholder={getPhrase('usernamePlaceholder')}\n showRequiredStar\n // TODO: Remove when we support modifying usernames\n disabled\n infoTooltip={getPhrase('usernameTooltip')}\n />\n <FormButtons variant='dark' submitText={getPhrase('saveChanges')} isNew={false} />\n </Form>\n </FormWrapper>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLabel\":\"Z_3rS\",\"partialInput\":\"B0iyg\",\"partialSubmit\":\"MZM6I\",\"partialAvatar\":\"iqthe\",\"partialUploadImage\":\"qmeIF\"};","import React from 'react';\n\nimport styles from './partial-profile-details.scss';\n\nexport function PartialProfileDetails(): JSX.Element {\n return (\n <div className='row g-0'>\n <div className='col-4'>\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className={`partial-loading-background ${styles.partialSubmit}`} />\n </div>\n\n <div className='col form-group d-flex flex-column ps-4'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background mb-2 ${styles.partialAvatar}`} />\n <div className={`partial-loading-background mx-3 ${styles.partialUploadImage}`} />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EditCurrentUserDetails, EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ImageRequests } from 'shared/flight-requests/ImageRequests';\n\nimport { EditAvatar } from 'apps/settings/components/edit-avatar/EditAvatar';\nimport { EditProfileDetails } from 'apps/settings/components/edit-profile-details-form/EditProfileDetailsForm';\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nimport { PartialProfileDetails } from './partial-loading/PartialProfileDetails';\n\nconst namespace = 'settings.profileDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ProfileDetailsView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data && UserManagerRequests.getUser(currentUser.data.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function onClickSaveProfileDetails(updatedUser: EditUserRequest, onDone?: () => void): void {\n const details: EditCurrentUserDetails = {\n firstName: updatedUser.firstName,\n lastName: updatedUser.surname,\n displayName: updatedUser.displayName || null,\n jobTitle: user.data.userProfile?.metadata?.jobTitle || ''\n };\n\n Flight.fetch(dispatch, UserManagerRequests.updateCurrentUser(details, () => {\n AnalyticsHelper.logUserAction(updatedUser, {\n location: LocationContext.Settings,\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.User\n });\n\n alerts.success(getPhrase('success'));\n }, () => {\n alerts.error(getPhrase('error'));\n }, onDone));\n }\n\n function onSelectImage(dataUrl: string, closePopup: () => void): void {\n Flight.fetch(dispatch, ImageRequests.uploadBase64Image(ImageType.Avatars, dataUrl, data => {\n onImageUploaded(data, closePopup);\n }, () => {\n alerts.error(getPhrase('avatarUploadError'));\n }));\n }\n\n function onImageUploaded(uploadedAvatarModel: HashObject, closePopup: () => void): void {\n Flight.fetch(dispatch, UserManagerRequests.updateAvatar(uploadedAvatarModel.id, currentUser.data.id, () => {\n AnalyticsHelper.logUserAction({\n id: currentUser.data.id,\n avatarId: uploadedAvatarModel.id,\n avatarUrl: uploadedAvatarModel.location\n }, {\n actionType: UserAction.Associate,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Settings,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Avatar\n });\n \n closePopup();\n alerts.success(getPhrase('avatarUploadSuccess'));\n }, () => {\n alerts.error(getPhrase('avatarUploadError'));\n }));\n }\n\n function onClickRemoveImage(): void {\n Flight.fetch(dispatch, UserManagerRequests.deleteAvatar(user.data.avatar.id, currentUser.data.id, () => {\n AnalyticsHelper.logUserAction({\n id: currentUser.data.id,\n avatarId: user.data.avatar.id\n }, {\n actionType: UserAction.Dissociate,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Settings,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Avatar\n });\n\n alerts.success(getPhrase('avatarDeleteSuccess'));\n }, () => {\n alerts.error(getPhrase('avatarDeleteError'));\n }));\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n >\n {(currentUser.data && user.data && config.data)\n ? (\n <div className='row g-0'>\n <div className='col-4'>\n <EditProfileDetails\n user={user.data}\n onClickSave={onClickSaveProfileDetails}\n />\n </div>\n\n <EditAvatar\n user={user.data}\n onSelectImage={onSelectImage}\n onClickRemoveImage={onClickRemoveImage}\n imageCdnUrl={config.data.imageCdnUrl}\n />\n </div>\n ) : <PartialProfileDetails />\n }\n </SettingsLayout>\n );\n}"],"names":["namespace","FormButtons","props","formikProps","canSubmit","variant","type","disabled","size","className","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","values","field","ObjectHelper","fieldName","length","limit","children","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","Spinner","animation","containerClassName","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","formGroupClassname","labelGlassName","labelClassName","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","description","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getPhrase","LanguageService","MIME_REGEX","SimpleCropper","imageLoaded","setImageLoaded","setShowSpinner","imageRef","cropperRef","image","Image","src","viewPortToImageRatio","current","offsetWidth","width","dimensions","imageType","viewMode","autoCropArea","ready","minCropBoxWidth","minCropBoxHeight","height","aspectRatio","destroy","Popup","closePopup","popupSize","alt","ref","PopupButtons","croppedDataUrl","getCroppedCanvas","toDataURL","dataUrl","mime","match","getImageMimeType","onClickCrop","text","CropperHelper","renderCropper","root","document","getElementById","render","unmount","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","breadcrumbs","map","i","active","heading","headingButton","EditAvatar","imageCdnUrl","initials","imageInputRef","avatar","user","url","ImageHelper","UserHelper","surname","UrlHelper","click","multiple","accept","e","files","target","ImageSelectHelper","imageUrl","onSelectImage","split","getDataUrl","onClickRemoveImage","ProfileDetailsValidationSchema","shape","firstName","max","required","trim","username","displayName","EditProfileDetails","metadata","onClickSave","placeholder","autoFocus","PartialProfileDetails","ProfileDetailsView","useSetPageMetadata","dispatch","alerts","currentUser","UserRequests","data","UserManagerRequests","config","ConfigRequests","updatedUser","onDone","details","lastName","jobTitle","userProfile","AnalyticsHelper","location","actionType","workflowPhase","entity","success","error","ImageRequests","uploadedAvatarModel","avatarId","avatarUrl","descriptor","onImageUploaded"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/4134-0351c9f683-lite.chunk.js","mappings":"8LAWMA,EAAY,qBAUZ,SAAUC,EAAuCC,GACrD,IAAMC,GAAc,UAEdC,GAAY,OAAiBD,GAEnC,OACE,gBAAC,IAAa,CACZE,QAASH,EAAMG,SAAW,UAC1BC,KAAK,SACLC,UAAWH,EACXI,KAAMN,EAAMM,KACZC,UAAWP,EAAMO,UAAYP,EAAMO,UAAY,GAC/CC,YAAaP,EAAYQ,cAExBT,EAAMU,WACH,gCAAGV,EAAMU,YACT,gBAAC,IAAI,CAACZ,UAAWA,EAAWa,OAAQX,EAAMY,MAAQ,SAAW,SAGvE,C,ucC7BM,SAAUC,EAAab,GAC3B,IAAQc,EAAqFd,EAArFc,MAAOC,EAA8Ef,EAA9Ee,uBAAwBC,EAAsDhB,EAAtDgB,wBAAyBT,EAA6BP,EAA7BO,UAAcU,EAAU,EAAKjB,EAAvF,0EAEN,OACE,gBAACkB,EAAA,QAAU,CAACX,UAAU,cACpB,uBAAKA,UAAS,qBAAgBA,GAAa,KACzC,gBAACY,EAAY,eAACZ,UAAU,oBAAuBU,IAC/C,gBAACC,EAAA,QAAU,CACTX,UAAS,0CAAiE,WAA5BS,EAAuC,YAAc,GAAE,wBACnGD,GACFK,QAASH,EAAWI,IAEnBP,GAEFd,EAAMsB,iBAAmBtB,EAAMuB,qBAC9B,gCACE,iCACA,gBAACC,EAAA,EAAO,CAACC,QAASzB,EAAMsB,gBAAiBf,UAAU,aAChDP,EAAMuB,uBAOrB,C,gDCzBM,SAAUG,EAA4C1B,GAC1D,IAAQ2B,GAAW,UAAXA,OAEFC,EAAQC,EAAA,MAAiBF,EAAQ3B,EAAM8B,WAE7C,MAAqB,iBAAVF,EACF,iCAGP,uBAAKrB,UAAU,sCACZqB,EAAMG,OAAM,IAAG/B,EAAMgC,MAAK,cAGjC,CCvBA,SAAgB,eAAiB,QAAQ,cAAgB,QAAQ,kBAAoB,QAAQ,0BAA4B,QAAQ,YAAc,QAAQ,QAAU,S,sbCmB3JlC,EAAY,mBAoCZ,SAAUqB,EACdnB,GAEA,I,IAAQiC,EAAgDjC,EAAhDiC,SAAUC,EAAsClC,EAAtCkC,mBAAuBjB,EAAU,EAAKjB,EAAlD,mCAE8C,G,EAA1B,WAAeA,EAAMI,M,EAAK,E,o4BAA5CA,EAAI,KAAE+B,EAAO,KASfC,EAAmBC,EAAA,aAA0BJ,GAC/C,SAACK,GAAa,OAAKL,EAASK,EAAE,EAC9B,iBAAqBL,GAAYA,EAAW,KAEhD,GAAwB,aAApBhB,EAAWb,KACb,OAAI8B,EAEA,uBAAK3B,UAAU,qBACb,gBAAC,KAAK,iBAAMsB,EAAA,OAAkBZ,EAAY,CAAC,cACxCmB,GAGH,uBAAK7B,UAAW,WACd,gBAACgC,EAAA,EAAO,CAACC,UAAU,SAASlC,KAAK,SAOvC,gBAAC,KAAK,iBAAMuB,EAAA,OAAkBZ,EAAY,CAAC,cACxCmB,GAKP,IAAIK,EAAqB,qBAAH,OAAwB,qBAY9C,OAVIxB,EAAWV,YACbkC,GAAsB,IAAJ,OAAQxB,EAAWV,YAEnCU,EAAWZ,WACboC,GAAsB,IAAJ,OAAQ,8BAO1B,uBAAKlC,UAAWkC,GACd,gBAAC,KAAK,iBACCZ,EAAA,OAAkBZ,EAAY,CAAE,WAAY,OAAQ,cAAe,CACxEb,KAAMA,EACNG,UAAS,UAAK,gBAAoB,gDAEjC6B,GAEkB,aAApBnB,EAAWb,MACV,gBAACsC,EAAA,EAAY,CACXC,QAAkB,aAATvC,EAAsB,eAAyB,gBACxDG,UAAS,uCAAkC,kBAC3CqC,QA1DR,WAEIT,EADW,aAAT/B,EACM,OAEA,WACZ,IA0DF,CAOM,SAAUyC,EAAqC7C,GACnD,IACEc,EAYEd,EAZFc,MACAP,EAWEP,EAXFO,UACAuC,EAUE9C,EAVF8C,qBACAC,EASE/C,EATF+C,iBACAC,EAQEhD,EARFgD,YACAC,EAOEjD,EAPFiD,qBACAC,EAMElD,EANFkD,SACAC,EAKEnD,EALFmD,SACAC,EAIEpD,EAJFoD,kBACAC,EAGErD,EAHFqD,mBACgBC,EAEdtD,EAFFuD,eACGtC,EAAU,EACXjB,EAbE,sLAeN,GAA4B,UAApBwD,EAAM,EAANA,OAAQC,EAAO,EAAPA,QAIVC,EAAmB,WAAO,EAEhC,GAAwB,aAApBzC,EAAWb,KAAqB,CAClC,IAAMuD,EAAS9B,EAAA,OAAkB7B,EAAO,CAAE,WAAY,yBAKtD,OAHIA,EAAMK,WACRsD,EAAOC,SAAWF,GAEb,gBAAC7C,EAAY,iBAAK8C,GAC1B,CAED,IAAME,EAAoB,OAAH,wBAClB5C,GAAU,CACbV,UAAWuD,EAAA,gCACTN,EACAC,EACAxC,EAAW8C,KACXZ,EACA5C,EACoB,iBAAbP,EAAMgE,GAAkBhE,EAAMgE,GAAK,QAO9C,OAHIhE,EAAMK,WACRwD,EAAkBD,SAAWF,GAG7B,gBAACxC,EAAA,QAAU,CAACX,UAAS,qBAAgB8C,MAChCvC,GACD,gBAACI,EAAA,QAAU,CAACE,QAASH,EAAWI,GAAId,UAAS,oCAA+B+C,IACzExC,EACAiC,GAAoB,wBAAMxC,UAAU,eAAa,KACjDyC,GACC,gBAACN,EAAA,EAAY,CACXnC,UAAS,uCAAkC,eAC3CoC,QAAS,UACTsB,MAAOjB,EACPkB,iBAAkBjB,EAClBkB,iBAAe,IAGlBf,GAAqB,wBAAM7C,UAAU,kBAAgB,IAAO,gBAAC6D,EAAA,EAAI,CAACtE,UAAWA,EAAWa,OAAO,gBAE7FmC,KAA2B7B,EAAiDoD,WAC7E,uBAAK9D,UAAU,WACb,gBAACmB,EAAgB,CACfI,UAAYb,EAAW8C,KACvB/B,MAAQf,EAAiDoD,cAMlErE,EAAMsE,aACL,yBACGtE,EAAMsE,aAIX,gBAACnD,EAAY,iBAAK0C,EAAiB,+BAAwB5C,EAAW8C,KAAI,cAEvEb,GACD,gBAAChC,EAAA,OAAS,CAACX,UAAU,kBAClB2C,GAIL,gBAAC,KAAY,CAACa,KAAM9C,EAAW8C,MAC5B,SAACQ,GAAoB,OAAK,gBAACrD,EAAA,mBAAqB,CAACG,GAAE,UAAKJ,EAAW8C,KAAI,SAAS3D,KAAK,UAAUoE,KAAK,UAAUD,EAAqC,GAI5J,CA7KApD,EAAasD,aAAe,CAC1BC,aAAc,OA2EhB7B,EAAU4B,aAAe,CACvBC,aAAc,MACdzB,qBAAsB,M,06CCxElB,SAAU0B,EAId3E,GACA,IAAQ4E,EAAmF5E,EAAnF4E,kBAAmBC,EAAgE7E,EAAhE6E,mBAAoBC,EAA4C9E,EAA5C8E,cAAeC,EAA6B/E,EAA7B+E,SAAa9E,EAAW,EAAKD,EAArF,uEAMAgF,EAAqCJ,GAAqB5E,EAAMiF,iBAClEjF,EAAMiF,iBAAiBC,KA3D7B,SAA4DJ,GAC1D,IAAKA,EACH,MAAO,CAAC,EAEV,IAAMnD,EAAS,cAAuBmD,GAetC,OAbA,SAASK,EAAgBC,GACvBC,OAAOC,KAAK3D,GAAQ4D,QAAQ,SAACC,GACtB7D,EAAO8D,eAAeD,KAGvB,aAAsBJ,EAAMI,IAC9BL,EAAgBC,EAAMI,IACC,OAAhB7D,EAAO6D,WACP7D,EAAO6D,GAClB,EACF,CAEAL,CAAgBxD,GACTA,CACT,CAuCkC+D,CAAsBZ,IAClDA,EA4BEa,EAA+B,CACnCC,mBAAoB5F,EAAM4F,oBAG5B,OACE,gBAAC,KAAM,eACLC,oBAAkB,GACb5F,EAA6D,CAClE6E,cAAeE,EACfD,SAnCoB,SACtBpD,EAAkB,GAEhB,IADAmE,EAAa,EAAbA,cAAeC,EAAS,EAATA,UAAWC,EAAa,EAAbA,cAOtBC,EAAgBpB,GAAsB7E,EAAMiF,iBAC9CjF,EAAMiF,iBAAiBC,KAAKvD,GAC5BA,EAEJoD,EAASkB,EAAe,WAAoD,IAAnDC,EAAA,uDAA6C,CAAC,EAGrE,GAFAA,EAAQC,OAASJ,IAEbG,EAAQ1C,OACV,IAAK,IAAL,MAA6B6B,OAAOe,QAAQF,EAAQ1C,QAAO,eAAE,CAAxD,gBAAQgC,EAAG,KAAEa,EAAK,KACrBL,EAAcR,EAAKa,EACpB,CAGHP,GAAc,EAChB,EACF,EAYIH,cAAeA,IAEd,eAA0B3F,EAAMiC,UAC7B,SAACK,GAA0B,OAAMtC,EAAMiC,SAA6DK,EAAE,EACtG,iBAAqBtC,EAAMiC,UAAYjC,EAAMiC,SAAW,KAIlE,CAEM,SAAUqE,IACd,OAAO,SACT,CApEA3B,EAAYF,aAAe,CACzBG,mBAAmB,EACnBC,oBAAoB,E,qoCC3CtB,IACM0B,EAAYC,EAAA,mBADA,uBAGZC,EAAa,4CA6Bb,SAAUC,EAAc1G,GAC5B,IAA6D,IAArB,YAAe,GAAM,GAArD2G,EAAW,KAAEC,EAAc,KAC0B,IAArB,YAAe,GAAM,GAArDpG,EAAW,KAAEqG,EAAc,KAE7BC,EAAW,SAA+B,MAC1CC,EAAa,SAAsB,MAoCzC,OAxBA,YAAgB,WACd,IAAMC,EAAQ,IAAIC,MAClBD,EAAME,IAAMlH,EAAMkH,IAElB,IAAMC,EAAuBL,EAASM,QAAQC,YAAcL,EAAMM,MAC5DC,EAAa,IAAmBvH,EAAMwH,WAEtCtB,EAA2B,CAC/BuB,SAAU,EACVC,aAAc,EACdC,MAAO,WAAF,OAAQf,GAAe,EAAK,GAWnC,OARIW,IACFrB,EAAQ0B,gBAAkBL,EAAWD,MAAQH,EAC7CjB,EAAQ2B,iBAAmBN,EAAWO,OAASX,EAC/CjB,EAAQ6B,YAAcR,EAAWD,MAAQC,EAAWO,QAGtDf,EAAWK,QAAU,IAAI,IAAJ,CAAYN,EAASM,QAASlB,GAE5C,WAAQa,EAAWK,QAAQY,SAAW,CAC/C,EAAG,IAGD,gBAACC,EAAA,EAAK,CACJhE,MAAOsC,EAAU,SACjB2B,WAAYlI,EAAMkI,WAClB5H,KAAMN,EAAMmI,WAEZ,2BACE,uBACEjB,IAAKlH,EAAMkH,IACXkB,IAAKpI,EAAMoI,IACXC,IAAKvB,EACLvG,UAAU,mBAId,gBAAC+H,EAAA,EAAY,KACX,gBAACA,EAAA,SAAmB,CAAC1F,QAAS5C,EAAMkI,aACpC,gBAACI,EAAA,SAAmB,CAClB1F,QApDK,WACX,GAAK+D,EAAL,CAGA,IAAM4B,EAAiBxB,EAAWK,QAAQoB,mBAAmBC,UAtCxC,SAACC,GACxB,IAAMC,EAAOD,EAAQE,MAAMnC,GAE3B,GAAKkC,EAGL,OAAOA,EAAK,EACd,CA+B2EE,CAAiB7I,EAAMkH,MAE9FL,GAAe,GACf7G,EAAM8I,YAAYP,EAAgBvI,EAAMkI,WALhC,CAMV,EA6CQa,KAAMxC,EAAU,QAChBpG,QAAQ,OACRK,YAAaA,KAKvB,CAvEAkG,EAAcjC,aAAe,CAC3B0D,UAAW,MCpCN,IAAMa,EAAgB,CAC3BC,cAAa,SAACjJ,GACZ,IAAMkJ,GAAO,OAAWC,SAASC,eAAe,kBAEhDF,EAAKG,OACH,gBAAC3C,EAAa,iBACR1G,EAAK,CACTkI,WAAY,WAAF,OAAQgB,EAAKI,SAAS,KAGtC,E,kDCSWxF,EAAa,CACxByF,8BAA6B,SAC3B/F,EACAC,EACA+F,EACAlJ,EACAmJ,EACArJ,GAEA,IAAIG,EAAY,GAWhB,OATAA,EA/BJ,SAAqBH,EAAcE,GACjC,IAAIC,EAAY,GAgBhB,OAZIA,EADG,WADCH,EAEQ,cAGA,eAGH,OAATE,IACFC,GAAa,IAAJ,OAAQA,EAAS,QAEf,OAATD,IACFC,GAAa,IAAJ,OAAQA,EAAS,QAErBA,CACT,CAagBmJ,CAAYtJ,EAAME,IAG1B,QAAMmD,EAAS+F,KAAc,QAAMhG,EAAQgG,KAC7CjJ,GAAa,eAEXkJ,IACFlJ,GAAa,IAAJ,OAAQkJ,IAEZlJ,CACT,E,qOC/BF,IAAMT,EAAY,0BAKL6J,EAAuB,SAACC,GACnC,IAAQC,GAAmB,SAAnBA,eACFC,GAAiB,SAOvB,GAAIF,EACF,OAAOC,EAAeD,GAExB,IAAMG,EAAe,2BAOrB,OAAIA,EAAaC,cAAgB,cAG1BF,EAAeG,KAAK,SAAAC,GACzB,OAAOA,EAAMC,QAAQF,KAAK,SAAAG,GACxB,MAAI,YAAaA,GACRA,EAAe3I,QAAQ4I,SAAWN,EAAaM,MAI1D,EACF,EACF,EAUM,SAAUC,EAAetK,G,MACvBuK,EAAYZ,EAAqB3J,EAAM4J,qBAW7C,GATA,YAAgB,WACTW,GACH,eAA2B,CACzBP,YAAa,aACbK,OAAQ,mBACP,CAAEG,SAAS,GAElB,EAAG,CAACD,KAECA,EACH,OAAO,iCAET,I,EAAME,EAAczK,EAAMyK,YAAYC,IAAI,SAAC3G,EAAM4G,GAAC,MAAM,CACtD5G,KAAAA,EACAtC,QAAS,CACPuI,YAAa,aACbK,OAAQ,mBAEVO,OAAQD,IAAM3K,EAAMyK,YAAY1I,OAAS,EAC1C,GAED,OACE,uBAAKxB,UAAU,QACb,uBAAKA,UAAU,qDACb,sBAAIA,UAAU,MAAMP,EAAM6K,SACN,QAAnB,EAAA7K,EAAM8K,qBAAa,wBAEtB,uBAAKvK,UAAU,QACb,gBAAC,KAAW,CACVkK,YAAW,CACT,CACE1G,KAAM,cAA0BjE,EAAW,sBAC3C2B,QAAS,CACPuI,YAAa,aACbK,OAAQ,qBAEX,Q,EACEI,E,wmBAIRzK,EAAMsE,aACL,gCACE,yBAAItE,EAAMsE,aACV,4BAIHtE,EAAMiC,SAGb,C,qQCjHA,SAAgB,aAAe,SCa/B,IAAMnC,EAAY,sBAoBZ,SAAUiL,EAAW/K,G,QAlBEgL,EAAqBC,EAmB1CC,EAAgB,SAAa,MAE7BC,GAA0B,QAAjB,EAAAnL,EAAMoL,KAAKD,cAAM,eAAEE,KAC9BC,EAAA,YAAsBtL,EAAMoL,KAAKD,OAAOE,IAAK,CAAE/K,KAAM,eAtB9B0K,EAuBHhL,EAAMgL,YAvBkBC,EAuBLM,EAAA,cAAuBvL,EAAMoL,KAAKrH,KAAM/D,EAAMoL,KAAKI,SAtBvFF,EAAA,YACLG,EAAA,gBAAwBT,EAAa,+BAAF,OAAiCC,IACpE,CAAE3K,KAAM,eAyCV,OACE,gBAAC,aAAiC,CAAC+F,MAAOvG,GACxC,uBAAKS,UAAU,kEACb,yBAAOA,UAAU,oBAAmB,gBAAC6D,EAAA,EAAI,CAACzD,OAAO,kBACjD,uBACEJ,UAAS,gCAA2B,eAAmB,SACvD6H,IAAI,cACJlB,IAAKiE,IAEP,0BAAQ5K,UAAU,wCAAwCqC,QA5BhE,WACEsI,EAAc9D,QAAQf,MAAQ,KAC9B6E,EAAc9D,QAAQsE,MAAM,KAC9B,GA0BQ,gBAACtH,EAAA,EAAI,CAACzD,OAAO,iBAEf,yBACEP,KAAK,OACLG,UAAU,qBACVoL,UAAU,EACVC,OAAO,iCACPvD,IAAK6C,EACLtH,SAAU,SAAAiI,GAhClB,IAAuBC,KAgCcD,EAAEE,OAAOD,QA/B7BA,EAAM,IAGrBE,EAAA,eAA+B,aAAmBF,EAAO,SAAA9E,GACvDgC,EAAA,gBAA4B,CAC1B9B,IAAKF,EAAME,IACXkB,IAAK,GACLU,YAAa,SAACmD,EAAU/D,GAAU,OAAKlI,EAAMkM,cA/BrD,SAAoBD,GAClB,OAAOA,EAASE,MAAM,KAAK,EAC7B,CA6BmEC,CAAWH,GAAW/D,EAAW,EAC5FV,UAAW,cAEf,EAqBkD,OAG1B,QAAjB,EAAAxH,EAAMoL,KAAKD,cAAM,eAAEE,MACpB,0BAAQ9K,UAAU,2BAA2BqC,QAAS5C,EAAMqM,oBAC1D,gBAACjI,EAAA,EAAI,CAACzD,OAAO,kBAMzB,C,0DCpFM4F,EAAYC,EAAA,mBADA,mCAGL8F,GAAiC,UAASC,MAAM,CAC3DC,WAAW,UACRC,IAAI,IAAK,kBAAMlG,EAAU,cAAc,GACvCmG,SAAS,kBAAMnG,EAAU,eAAe,GAAC,QACjC,IACRoG,OACHnB,SAAS,UACNiB,IAAI,IAAK,kBAAMlG,EAAU,iBAAiB,GAC1CmG,SAAS,kBAAMnG,EAAU,kBAAkB,GAAC,QACpC,IACRoG,OACHC,UAAU,UACPH,IAAI,IAAK,kBAAMlG,EAAU,kBAAkB,GAAC,QACpC,IACRoG,OACHE,aAAa,UACVJ,IAAI,IAAK,kBAAMlG,EAAU,qBAAqB,GAAC,QACvC,IACRoG,SCXC,EAAYnG,EAAA,mBADA,mCAQZ,SAAUsG,EAAmB9M,G,QACjC,OACE,gBAAC2E,EAAA,EAAW,CACVG,cAAe,CACb0H,UAAWxM,EAAMoL,KAAKrH,KACtByH,QAASxL,EAAMoL,KAAKI,QACpBoB,SAAU5M,EAAMoL,KAAKwB,SACrBC,YAA6C,QAAhC,EAAmB,QAAnB,EAAA7M,EAAMoL,KAAK2B,gBAAQ,eAAEF,mBAAW,QAAI,IAEnD5H,iBAAkBqH,EAClBvH,SAAU/E,EAAMgN,aAEhB,gBAAC,KAAI,KACH,gBAACnK,EAAA,EAAS,CACR/B,MAAO,EAAU,aACjBV,KAAK,OACL2D,KAAK,YACL1C,GAAG,YACH4L,YAAa,EAAU,wBACvBC,WAAS,EACTnK,kBAAgB,IAElB,gBAACF,EAAA,EAAS,CACR/B,MAAO,EAAU,YACjBV,KAAK,OACL2D,KAAK,UACL1C,GAAG,UACH4L,YAAa,EAAU,uBACvBlK,kBAAgB,IAElB,gBAACF,EAAA,EAAS,CACR/B,MAAO,EAAU,eACjBV,KAAK,OACL2D,KAAK,cACL1C,GAAG,cACH4L,YAAa,EAAU,0BACvBjK,YAAa,EAAU,wBAEzB,gBAACH,EAAA,EAAS,CACR/B,MAAO,EAAU,YACjBV,KAAK,OACL2D,KAAK,WACL1C,GAAG,WACH4L,YAAa,EAAU,uBACvBlK,kBAAgB,EAEhB1C,UAAQ,EACR2C,YAAa,EAAU,qBAEzB,gBAACjD,EAAA,EAAW,CAACI,QAAQ,OAAOO,WAAY,EAAU,eAAgBE,OAAO,KAIjF,C,0BCzEA,SAAgB,aAAe,QAAQ,aAAe,QAAQ,cAAgB,QAAQ,cAAgB,QAAQ,mBAAqB,SCG7H,SAAUuM,IACd,OACE,uBAAK5M,UAAU,WACb,uBAAKA,UAAU,SACb,uBAAKA,UAAU,cACb,uBAAKA,UAAS,qCAAgC,kBAC9C,uBAAKA,UAAS,2CAAsC,mBAGtD,uBAAKA,UAAU,cACb,uBAAKA,UAAS,qCAAgC,kBAC9C,uBAAKA,UAAS,2CAAsC,mBAGtD,uBAAKA,UAAU,cACb,uBAAKA,UAAS,qCAAgC,kBAC9C,uBAAKA,UAAS,2CAAsC,mBAGtD,uBAAKA,UAAU,cACb,uBAAKA,UAAS,qCAAgC,kBAC9C,uBAAKA,UAAS,2CAAsC,mBAGtD,uBAAKA,UAAS,qCAAgC,oBAGhD,uBAAKA,UAAU,0CACb,uBAAKA,UAAS,qCAAgC,kBAC9C,uBAAKA,UAAS,0CAAqC,mBACnD,uBAAKA,UAAS,0CAAqC,yBAI3D,CCXA,IACM,EAAYiG,EAAA,mBADA,2BAGZ,SAAU4G,KACd,EAAAC,EAAA,GAAmB,CAAEpJ,MAAO,EAAU,eAEtC,IAAMqJ,GAAW,UACXC,GAAS,SAETC,EAAc,kBAAkCC,EAAA,iBAChDrC,EAAO,kBAA2BoC,EAAYE,MAAQC,EAAA,UAA4BH,EAAYE,KAAKrM,KACnGuM,EAAS,kBAA6BC,EAAA,YAwE5C,OACE,gBAACvD,EAAA,EAAc,CACbO,QAAS,EAAU,WACnBJ,YAAa,CAAC,EAAU,gBAEtB+C,EAAYE,MAAQtC,EAAKsC,MAAQE,EAAOF,KAEtC,uBAAKnN,UAAU,WACb,uBAAKA,UAAU,SACb,gBAACuM,EAAkB,CACjB1B,KAAMA,EAAKsC,KACXV,YAjFd,SAAmCc,EAA8BC,G,QACzDC,EAAkC,CACtCxB,UAAWsB,EAAYtB,UACvByB,SAAUH,EAAYtC,QACtBqB,YAAaiB,EAAYjB,aAAe,KACxCqB,UAAyC,QAA/B,EAAqB,QAArB,EAAA9C,EAAKsC,KAAKS,mBAAW,eAAEpB,gBAAQ,eAAEmB,WAAY,IAGzD,UAAaZ,EAAUG,EAAA,oBAA+BO,EAAS,WAC7DI,EAAA,gBAA8BN,EAAa,CACzCO,SAAU,cACVC,WAAY,UACZC,cAAe,cACfC,OAAQ,YAGVjB,EAAOkB,QAAQ,EAAU,WAC3B,EAAG,WACDlB,EAAOmB,MAAM,EAAU,SACzB,EAAGX,GACL,KAiEU,gBAAChD,EAAU,CACTK,KAAMA,EAAKsC,KACXxB,cAjEZ,SAAuBxD,EAAiBR,GACtC,UAAaoF,EAAUqB,EAAA,oBAAgC,aAAmBjG,EAAS,SAAAgF,IAOrF,SAAyBkB,EAAiC1G,GACxD,UAAaoF,EAAUK,EAAA,eAAiCiB,EAAoBvN,GAAImM,EAAYE,KAAKrM,GAAI,WACnG+M,EAAA,gBAA8B,CAC5B/M,GAAImM,EAAYE,KAAKrM,GACrBwN,SAAUD,EAAoBvN,GAC9ByN,UAAWF,EAAoBP,UAC9B,CACDC,WAAY,eACZC,cAAe,cACfF,SAAU,cACVG,OAAQ,UACRO,WAAY,cAGd7G,IACAqF,EAAOkB,QAAQ,EAAU,uBAC3B,EAAG,WACDlB,EAAOmB,MAAM,EAAU,qBACzB,GACF,CAzBIM,CAAgBtB,EAAMxF,EACxB,EAAG,WACDqF,EAAOmB,MAAM,EAAU,qBACzB,GACF,EA4DYrC,mBArCZ,WACE,UAAaiB,EAAUK,EAAA,eAAiCvC,EAAKsC,KAAKvC,OAAO9J,GAAImM,EAAYE,KAAKrM,GAAI,WAChG+M,EAAA,gBAA8B,CAC5B/M,GAAImM,EAAYE,KAAKrM,GACrBwN,SAAUzD,EAAKsC,KAAKvC,OAAO9J,IAC1B,CACDiN,WAAY,gBACZC,cAAe,cACfF,SAAU,cACVG,OAAQ,UACRO,WAAY,cAGdxB,EAAOkB,QAAQ,EAAU,uBAC3B,EAAG,WACDlB,EAAOmB,MAAM,EAAU,qBACzB,GACF,EAqBY1D,YAAa4C,EAAOF,KAAK1C,eAG3B,gBAACmC,EAAqB,MAIlC,C","sources":["file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/image-cropper/SimpleCropper.tsx","file:///app/packages/libs/shared/src/utils/CropperHelper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/components/edit-avatar/edit-avatar.scss","file:///app/packages/projects/lite/src/apps/settings/components/edit-avatar/EditAvatar.tsx","file:///app/packages/projects/lite/src/apps/settings/components/edit-profile-details-form/ProfileDetailsValidationSchema.ts","file:///app/packages/projects/lite/src/apps/settings/components/edit-profile-details-form/EditProfileDetailsForm.tsx","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/partial-loading/partial-profile-details.scss","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/partial-loading/PartialProfileDetails.tsx","file:///app/packages/projects/lite/src/apps/settings/views/profile-details/ProfileDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = ObjectHelper.get(values, props.fieldName as string);\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n description?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n formGroupClassname?: string;\n labelClassName?: string;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n formGroupClassname,\n labelClassName: labelGlassName,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className={`form-group ${formGroupClassname}`}>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className={`d-flex align-items-center ${labelGlassName}`}>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n {props.description &&\n <p>\n {props.description}\n </p>\n }\n\n <FieldWrapper {...fieldWrapperProps} aria-errormessage={`${fieldProps.name}Error`} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback id={`${fieldProps.name}Error`} type='invalid' role='status'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\nimport Cropper from 'cropperjs';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport './image-cropper.scss';\n\nconst namespace = 'shared.imageCropper';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MIME_REGEX = /data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,.*/;\n\nconst getImageMimeType = (dataUrl: string) => {\n const mime = dataUrl.match(MIME_REGEX);\n\n if (!mime)\n return;\n\n return mime[1];\n};\n\nexport interface SimpleCropperProps {\n src: string;\n alt: string;\n onClickCrop: (dataUrl: string, closePopup: () => void) => void;\n closePopup: () => void;\n popupSize?: 'sm' | 'md' |'lg' | 'xl';\n\n /**\n * If an imageType isn't provide the aspect ratio\n * and min sizes won'd be locked\n */\n imageType?: ImageType;\n}\n\nSimpleCropper.defaultProps = {\n popupSize: 'lg'\n};\n\nexport function SimpleCropper(props: SimpleCropperProps): JSX.Element {\n const [ imageLoaded, setImageLoaded ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const imageRef = React.useRef<HTMLImageElement>(null);\n const cropperRef = React.useRef<Cropper>(null);\n\n const crop = () => {\n if (!imageLoaded)\n return;\n\n const croppedDataUrl = cropperRef.current.getCroppedCanvas().toDataURL(getImageMimeType(props.src));\n\n setShowSpinner(true);\n props.onClickCrop(croppedDataUrl, props.closePopup);\n };\n\n React.useEffect(() => {\n const image = new Image();\n image.src = props.src;\n\n const viewPortToImageRatio = imageRef.current.offsetWidth / image.width;\n const dimensions = ImageMinDimensions[props.imageType];\n\n const options: Cropper.Options = {\n viewMode: 2,\n autoCropArea: 1, // Number between 0 and 1 that defines the initial cropper area as a percentage of the image.\n ready: () => setImageLoaded(true)\n };\n\n if (dimensions) {\n options.minCropBoxWidth = dimensions.width * viewPortToImageRatio;\n options.minCropBoxHeight = dimensions.height * viewPortToImageRatio;\n options.aspectRatio = dimensions.width / dimensions.height;\n }\n\n cropperRef.current = new Cropper(imageRef.current, options);\n\n return () => { cropperRef.current.destroy(); };\n }, []);\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n size={props.popupSize}\n >\n <div>\n <img\n src={props.src}\n alt={props.alt}\n ref={imageRef}\n className='img img-fluid'\n />\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n onClick={crop}\n text={getPhrase('crop')}\n variant='dark'\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { SimpleCropper, SimpleCropperProps } from 'libs/shared/components/image-cropper/SimpleCropper';\n\nexport const CropperHelper = {\n renderCropper(props: Omit<SimpleCropperProps, 'closePopup'>): void {\n const root = createRoot(document.getElementById('dialog-region'));\n\n root.render(\n <SimpleCropper\n {...props}\n closePopup={() => root.unmount()}\n />\n );\n }\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"profileImage\":\"e1vsK\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { User } from 'libs/shared/interfaces';\nimport { CropperHelper } from 'libs/shared/utils/CropperHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { ImageSelectHelper } from 'libs/shared/utils/ImageSelectHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './edit-avatar.scss';\n\nconst namespace = 'settings.editAvatar';\n\nfunction getFallBackImageUrl(imageCdnUrl: string, initials: string): string {\n return ImageHelper.createUrl(\n UrlHelper.safeUrlConcat(imageCdnUrl, `/v1/profile-images?initials=${initials}`),\n { size: ImageSize.Medium }\n );\n}\n\nfunction getDataUrl(imageUrl: string): string {\n return imageUrl.split(',')[1];\n}\n\ninterface EditAvatarProps {\n user: User;\n onSelectImage: (dataUrl: string, closePopup: () => void) => void;\n onClickRemoveImage: () => void;\n imageCdnUrl: string;\n}\n\nexport function EditAvatar(props: EditAvatarProps): JSX.Element {\n const imageInputRef = React.useRef(null);\n\n const avatar = props.user.avatar?.url\n ? ImageHelper.createUrl(props.user.avatar.url, { size: ImageSize.Medium })\n : getFallBackImageUrl(props.imageCdnUrl, UserHelper.getInitials(props.user.name, props.user.surname));\n\n function onClickUploadImage(): void {\n imageInputRef.current.value = null;\n imageInputRef.current.click(null);\n }\n\n function onImageSelect(files: FileList): void {\n if (!files || !files[0])\n return;\n\n ImageSelectHelper.onFileSelect(ImageType.Avatars, files, image => {\n CropperHelper.renderCropper({\n src: image.src,\n alt: '',\n onClickCrop: (imageUrl, closePopup) => props.onSelectImage(getDataUrl(imageUrl), closePopup),\n imageType: ImageType.Avatars\n });\n });\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='col-auto form-group d-flex flex-column align-items-center ps-4'>\n <label className='align-self-start'><Text phrase='profileImage' /></label>\n <img\n className={`img img-fluid rounded ${styles.profileImage} mb-2`}\n alt='User avatar'\n src={avatar}\n />\n <button className='btn btn-outline-dark px-3 text-center' onClick={onClickUploadImage}>\n <Text phrase='uploadImage' />\n </button>\n <input\n type='file'\n className='file-select d-none'\n multiple={false}\n accept='image/jpg,image/jpeg,image/png'\n ref={imageInputRef}\n onChange={e => onImageSelect(e.target.files)}\n />\n\n {!!props.user.avatar?.url && (\n <button className='btn btn-link text-center' onClick={props.onClickRemoveImage}>\n <Text phrase='removeImage' />\n </button>\n )}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'settings.editProfileDetailsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const ProfileDetailsValidationSchema = object().shape({\n firstName: string()\n .max(255, () => getPhrase('nameExceeds'))\n .required(() => getPhrase('nameRequired'))\n .default('')\n .trim(),\n surname: string()\n .max(255, () => getPhrase('surnameExceeds'))\n .required(() => getPhrase('surnameRequired'))\n .default('')\n .trim(),\n username: string()\n .max(255, () => getPhrase('usernameExceeds'))\n .default('')\n .trim(),\n displayName: string()\n .max(255, () => getPhrase('displayNameExceeds'))\n .default('')\n .trim()\n});","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { User } from 'libs/shared/interfaces';\n\nimport { ProfileDetailsValidationSchema } from './ProfileDetailsValidationSchema';\n\nconst namespace = 'settings.editProfileDetailsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditProfileDetailsProps {\n user: User;\n onClickSave: (data: EditUserRequest) => void;\n}\n\nexport function EditProfileDetails(props: EditProfileDetailsProps): JSX.Element {\n return (\n <FormWrapper<EditUserRequest>\n initialValues={{\n firstName: props.user.name,\n surname: props.user.surname,\n username: props.user.username,\n displayName: props.user.metadata?.displayName ?? ''\n }}\n validationSchema={ProfileDetailsValidationSchema}\n onSubmit={props.onClickSave}\n >\n <Form>\n <FormField\n label={getPhrase('firstName')}\n type='text'\n name='firstName'\n id='firstName'\n placeholder={getPhrase('firstNamePlaceholder')}\n autoFocus\n showRequiredStar\n />\n <FormField\n label={getPhrase('lastName')}\n type='text'\n name='surname'\n id='surname'\n placeholder={getPhrase('lastNamePlaceholder')}\n showRequiredStar\n />\n <FormField\n label={getPhrase('displayName')}\n type='text'\n name='displayName'\n id='displayName'\n placeholder={getPhrase('displayNamePlaceholder')}\n infoTooltip={getPhrase('displayNameTooltip')}\n />\n <FormField\n label={getPhrase('username')}\n type='text'\n name='username'\n id='username'\n placeholder={getPhrase('usernamePlaceholder')}\n showRequiredStar\n // TODO: Remove when we support modifying usernames\n disabled\n infoTooltip={getPhrase('usernameTooltip')}\n />\n <FormButtons variant='dark' submitText={getPhrase('saveChanges')} isNew={false} />\n </Form>\n </FormWrapper>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLabel\":\"Z_3rS\",\"partialInput\":\"B0iyg\",\"partialSubmit\":\"MZM6I\",\"partialAvatar\":\"iqthe\",\"partialUploadImage\":\"qmeIF\"};","import React from 'react';\n\nimport styles from './partial-profile-details.scss';\n\nexport function PartialProfileDetails(): JSX.Element {\n return (\n <div className='row g-0'>\n <div className='col-4'>\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className='form-group'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background w-100 ${styles.partialInput}`} />\n </div>\n\n <div className={`partial-loading-background ${styles.partialSubmit}`} />\n </div>\n\n <div className='col form-group d-flex flex-column ps-4'>\n <div className={`partial-loading-background ${styles.partialLabel}`} />\n <div className={`partial-loading-background mb-2 ${styles.partialAvatar}`} />\n <div className={`partial-loading-background mx-3 ${styles.partialUploadImage}`} />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EditCurrentUserDetails, EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ImageRequests } from 'shared/flight-requests/ImageRequests';\n\nimport { EditAvatar } from 'apps/settings/components/edit-avatar/EditAvatar';\nimport { EditProfileDetails } from 'apps/settings/components/edit-profile-details-form/EditProfileDetailsForm';\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nimport { PartialProfileDetails } from './partial-loading/PartialProfileDetails';\n\nconst namespace = 'settings.profileDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ProfileDetailsView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data && UserManagerRequests.getUser(currentUser.data.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function onClickSaveProfileDetails(updatedUser: EditUserRequest, onDone?: () => void): void {\n const details: EditCurrentUserDetails = {\n firstName: updatedUser.firstName,\n lastName: updatedUser.surname,\n displayName: updatedUser.displayName || null,\n jobTitle: user.data.userProfile?.metadata?.jobTitle || ''\n };\n\n Flight.fetch(dispatch, UserRequests.updateCurrentUser(details, () => {\n AnalyticsHelper.logUserAction(updatedUser, {\n location: LocationContext.Settings,\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.User\n });\n\n alerts.success(getPhrase('success'));\n }, () => {\n alerts.error(getPhrase('error'));\n }, onDone));\n }\n\n function onSelectImage(dataUrl: string, closePopup: () => void): void {\n Flight.fetch(dispatch, ImageRequests.uploadBase64Image(ImageType.Avatars, dataUrl, data => {\n onImageUploaded(data, closePopup);\n }, () => {\n alerts.error(getPhrase('avatarUploadError'));\n }));\n }\n\n function onImageUploaded(uploadedAvatarModel: HashObject, closePopup: () => void): void {\n Flight.fetch(dispatch, UserManagerRequests.updateAvatar(uploadedAvatarModel.id, currentUser.data.id, () => {\n AnalyticsHelper.logUserAction({\n id: currentUser.data.id,\n avatarId: uploadedAvatarModel.id,\n avatarUrl: uploadedAvatarModel.location\n }, {\n actionType: UserAction.Associate,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Settings,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Avatar\n });\n \n closePopup();\n alerts.success(getPhrase('avatarUploadSuccess'));\n }, () => {\n alerts.error(getPhrase('avatarUploadError'));\n }));\n }\n\n function onClickRemoveImage(): void {\n Flight.fetch(dispatch, UserManagerRequests.deleteAvatar(user.data.avatar.id, currentUser.data.id, () => {\n AnalyticsHelper.logUserAction({\n id: currentUser.data.id,\n avatarId: user.data.avatar.id\n }, {\n actionType: UserAction.Dissociate,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Settings,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Avatar\n });\n\n alerts.success(getPhrase('avatarDeleteSuccess'));\n }, () => {\n alerts.error(getPhrase('avatarDeleteError'));\n }));\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n >\n {(currentUser.data && user.data && config.data)\n ? (\n <div className='row g-0'>\n <div className='col-4'>\n <EditProfileDetails\n user={user.data}\n onClickSave={onClickSaveProfileDetails}\n />\n </div>\n\n <EditAvatar\n user={user.data}\n onSelectImage={onSelectImage}\n onClickRemoveImage={onClickRemoveImage}\n imageCdnUrl={config.data.imageCdnUrl}\n />\n </div>\n ) : <PartialProfileDetails />\n }\n </SettingsLayout>\n );\n}"],"names":["namespace","FormButtons","props","formikProps","canSubmit","variant","type","disabled","size","className","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","values","field","ObjectHelper","fieldName","length","limit","children","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","Spinner","animation","containerClassName","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","formGroupClassname","labelGlassName","labelClassName","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","description","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getPhrase","LanguageService","MIME_REGEX","SimpleCropper","imageLoaded","setImageLoaded","setShowSpinner","imageRef","cropperRef","image","Image","src","viewPortToImageRatio","current","offsetWidth","width","dimensions","imageType","viewMode","autoCropArea","ready","minCropBoxWidth","minCropBoxHeight","height","aspectRatio","destroy","Popup","closePopup","popupSize","alt","ref","PopupButtons","croppedDataUrl","getCroppedCanvas","toDataURL","dataUrl","mime","match","getImageMimeType","onClickCrop","text","CropperHelper","renderCropper","root","document","getElementById","render","unmount","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","breadcrumbs","map","i","active","heading","headingButton","EditAvatar","imageCdnUrl","initials","imageInputRef","avatar","user","url","ImageHelper","UserHelper","surname","UrlHelper","click","multiple","accept","e","files","target","ImageSelectHelper","imageUrl","onSelectImage","split","getDataUrl","onClickRemoveImage","ProfileDetailsValidationSchema","shape","firstName","max","required","trim","username","displayName","EditProfileDetails","metadata","onClickSave","placeholder","autoFocus","PartialProfileDetails","ProfileDetailsView","useSetPageMetadata","dispatch","alerts","currentUser","UserRequests","data","UserManagerRequests","config","ConfigRequests","updatedUser","onDone","details","lastName","jobTitle","userProfile","AnalyticsHelper","location","actionType","workflowPhase","entity","success","error","ImageRequests","uploadedAvatarModel","avatarId","avatarUrl","descriptor","onImageUploaded"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7288],{70197:(e,r,t)=>{var s;t.d(r,{q:()=>s}),function(e){e.YearGroupValues="yearGroups.value",e.UserProfilesStatus="userProfiles.status"}(s||(s={}))},47288:(e,r,t)=>{t.d(r,{N:()=>k});var s,a,n=t(99940),o=t(97395),u=t(1048),c=t(39739),i=t(62803),l=t(70197);!function(e){e.yearGroups="yearGroups",e.userProfiles="userProfiles"}(s||(s={})),function(e){e.TermsGroupBy="terms-group-by",e.NestedTermsGroupBy="nested-terms-group-by"}(a||(a={}));var d,y=t(5960),v=t(54610),m=t(78417);function g(e){return g="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},g(e)}function p(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return f(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?f(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,s=Array(r);t<r;t++)s[t]=e[t];return s}function h(e,r,t){return(r=function(e){var r=function(e){if("object"!=g(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var t=r.call(e,"string");if("object"!=g(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==g(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}!function(e){e.Content="content",e.OnlineContent="online_content",e.User="user",e.Customer="customer",e.Tag="tag",e.Organisation="organisation",e.Channel="channel"}(d||(d={}));var k={getUsers:function(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0,n=arguments.length>5?arguments[5]:void 0,u={query:c.P.buildGetUsersQuery(r,t)};s&&(u.cursor=s);var i="school:users:".concat(e,":").concat(r);return i+=Object.keys(u).map(function(e){return u[e]}).join(":"),{url:o._.urlBuilder("{gateway}/v1/customers/".concat(e,"/users"),u),key:i,success:a,error:n}},getUser:function(e){return{url:"{gateway}/v1/users/".concat(e,"?query=avatar"),key:"school:users:".concat(e)}},getStudentVideos:function(e,r){var t=i.v.VIDEO_COLLECTION,s=i.v.CLIP_COLLECTION,a=i.v.INTERACTIVE,n=["videos[".concat(t,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}"),"clips[".concat(s,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}"),"interactives[".concat(a,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}")],u={query:"(".concat(n.join("|"),"){orderbydesc:timestamp}"),permissionFilterOption:m.r.StripMetadata};return r&&(u.cursor=r),{url:o._.urlBuilder("{gateway}/v1/objects/".concat(e,"/members"),u),key:"school:users:videos:".concat(e,":").concat(r)}},bulkRemoveUsers:function(e,r,t,s){var a,o=["school:users","search:users","search:aggregation"];return(null===(a=e.userIds)||void 0===a?void 0:a.length)&&e.userIds.forEach(function(e){return o.push("school:users:".concat(e))}),{url:"{gateway}/v1/users/delete",key:"delete:school:users",invalidationKeys:o,type:n.k.POST,data:e,success:r,error:t,always:s}},removeUsersFromSchool:function(e){return{url:"{gateway}/v1/users/remove",key:"remove:school:users",invalidationKeys:["school:users","search:users","search:aggregation"],type:n.k.POST,data:e}},createUsers:function(e){var r=e.users,t=e.success,s=e.error,a=e.always;return{url:"{gateway}/v1/users",key:"create:users",data:r,type:n.k.POST,invalidationKeys:["school:users","user:count","search:users"],success:t,error:s,always:a}},updateUser:function(e,r,t,s,a,o){var u=["school:users:".concat(e.userId)];return r.toString()===e.userId.toString()&&u.push("currentuser"),{url:"{gateway}/v1/users",key:"edit:user",type:n.k.PUT,data:e,invalidationKeys:["search:aggregation"],success:t,error:s,always:a,updateState:{keys:"search:user:count",updateData:function(e){if(!o)return e;var r=Object.keys(e),t=Object.assign({},e);return r.forEach(function(r){r.includes("filters.yearGroup.value:0")&&(t[r].count=e[r].count-1)}),t}}}},searchUsers:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0,u=arguments.length>6?arguments[6]:void 0,i=c.P.buildSearchDataAndKey({customerId:e,userId:r,userType:t,queryParams:s,cursor:a}),l=i.data,d=i.key;return{url:"{gateway}/v3/search",data:l,type:n.k.POST,key:d,success:o,error:u}},getSearchUserIds:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0,i=c.P.buildSearchData({customerId:e,userId:r,userType:t,queryParams:s}),l="search:user:ids";return{url:"{gateway}/v3/search/ids",key:l+=u.t.flattenObjectToString(i),data:i,type:n.k.POST,normalize:!1,success:a,error:o}},getSearchAggregation:function(e){var r=e.userId,t=e.customerId,o=e.userType,u=e.queryParams,i=void 0===u?{}:u,y=e.userIds,v=e.field,m=v===l.q.UserProfilesStatus?s.userProfiles:s.yearGroups,g=c.P.buildSearchFiltersObject(t,o,i),p="search:aggregation:".concat(r,":").concat(t,":").concat(v,":");p+=Object.keys(g).sort().map(function(e){return g[e]}).join(":"),p+=":"+y.join(":");var f={indices:["user"],searchType:d.User,isLearner:!1,type:a.NestedTermsGroupBy,userId:r.toString(),customerId:t.toString(),data:{field:v,nestedPath:m,termsFilters:h({},"".concat(m,".customerId"),[t])},idFilters:y,filters:g};return{url:"{gateway}/v1/search/aggregation",type:n.k.POST,key:p,data:f,normalize:!1,formatData:function(e){var r=e.termCount;return v!==l.q.UserProfilesStatus?r:Object.keys(r).reduce(function(e,t){return e[t.charAt(0).toUpperCase()+t.slice(1)]=r[t],e},{})}}},bulkToggleActivation:function(e,r,t,s,a){return{url:"{gateway}/v1/users/status",key:"update:users:status",type:n.k.PUT,data:e,success:t,error:s,always:a,invalidationKeys:["school:users:".concat(e.customerId,":").concat(r)].concat(p(e.users.map(function(e){return"school:users:".concat(e.userId)})),["search:aggregation"])}},bulkValidate:function(e,r,t,s,a){return{url:"{gateway}/v1/users/validate",type:n.k.POST,key:"validate:users",data:e,success:t,error:s,always:a,normalize:!1,formatData:function(e){return e.failedResults.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}})}}},bulkCheckEmail:function(e,r,t,s,a){return{url:"{gateway}/v1/customers/".concat(r,"/users/email-statuses"),type:n.k.POST,key:"validate:".concat(r,":email:").concat(e.userEmails.map(function(e){return e.email}).join(",")),data:e,success:t,error:s,always:a}},bulkUsersValidate:function(e,r,t,s,a,o){return{url:"{gateway}/v2/users/validate?allowEmailInUse=".concat(r),type:n.k.POST,key:"validate:email:in:use:users:".concat(r),data:e.users,success:s,error:a,always:o,formatData:function(e){var r,t,s=(null===(r=e.failedResults)||void 0===r?void 0:r.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}}))||[],a=(null===(t=e.successfulResults)||void 0===t?void 0:t.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}}))||[];return[].concat(p(s),p(a))}}},yearGroups:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/year-groups?query={orderby:value}"),key:"yeargroups:".concat(e)}},updateAvatar:function(e,r,t,s){return{url:"{gateway}/v1/users/me/avatar",key:"update:avatar",type:n.k.PUT,invalidationKeys:["currentuser","school:users:".concat(r)],data:{fileId:e,fileIdType:v.z9.ImageAPIv2},success:t,error:s}},deleteAvatar:function(e,r,t,s){return{url:"{gateway}/v1/users/me/avatar/".concat(e),key:"delete:avatar",type:n.k.DELETE,updateState:{keys:["school:users:".concat(r),"currentuser"],updateData:function(e){var t=e["school:users:".concat(r)],s=e.currentuser;return t.avatar=null,s.avatar=null,h(h({},"school:users:".concat(r),t),"currentuser",s)}},success:t,error:s}},changeEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/me/email",key:"change:email",type:n.k.PUT,data:{email:e},success:r,error:t,always:s}},changePassword:function(e,r,t,s){return{url:"{gateway}/v1/users/me/password",key:"change:password",type:n.k.PUT,data:{currentPassword:e.currentPassword,newPassword:e.newPassword},success:r,error:t,always:s}},changeUserPassword:function(e,r,t,s,a,o,u){return{url:"{gateway}/v1/users/admin/change-password",key:"change:password:".concat(r,":").concat(e),type:n.k.PUT,data:{userId:e,newPassword:t,changeOnNextLogin:s},success:a,error:o,always:u}},resendActivationEmail:function(e,r,t){return{url:"{gateway}/v1/users/admin/activation",key:"send:activation:email",type:n.k.POST,data:{userId:e},success:r,error:t}},sendPasswordResetEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/admin/account-reminder",key:"send:password:reset:email",type:n.k.POST,data:{userIds:[e],customerId:r},success:t,error:s}},resendVerificationEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/admin/email-verification",key:"send:verification:email",type:n.k.POST,data:{userId:e,customerId:r},success:t,error:s}},userCount:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=c.P.buildSearchData({customerId:e,userId:r,userType:t,queryParams:s}),o="search:user:count";return o+=u.t.flattenObjectToString(a),{url:"{gateway}/v3/search/count",data:a,type:n.k.POST,key:o,normalize:!1}},authenticationMethods:function(e){return{url:o._.urlBuilder("{gateway}/v1/users/authentication-methods",{id:e}),key:"login:methods:".concat(e.sort().join(":")),normalizeOptions:{idAttribute:"userId"}}},getIdentityProviders:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/identity-providers"),key:"identity:providers:".concat(e),normalize:!1}},getSsoMappings:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/sso-year-group-mappings"),key:"sso:year:group:mappings:".concat(e),normalize:!1}},updateSsoMappings:function(e,r){return{url:"{gateway}/v1/customers/".concat(e,"/sso-year-group-mappings"),key:"sso:year:group:mappings:".concat(e,":update"),type:n.k.POST,invalidationKeys:"sso:year:group:mappings:".concat(e),data:r}},joinRequests:function(){return{url:"{gateway}/v1/customers/join-requests?status=pending",key:"join:requests",normalize:!1}},resolveJoinRequest:function(e,r){return{url:"{gateway}/v1/customers/join-requests/".concat(e),key:"resolve:join:request",type:n.k.PUT,data:{status:r},normalize:!1,invalidationKeys:["join:requests"]}},inviteUserToCustomer:function(e,r,t,s){return{url:"{gateway}/v1/customers/".concat(e,"/users/invitation"),key:"invite:user:customer:".concat(e),type:n.k.PUT,data:r,invalidationKeys:["school:users","search:users"],success:t,error:s}}}}}]);
2
+ //# sourceMappingURL=7288-aeb358a012-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/7288-aeb358a012-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/enums/AggregateSearchField.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchNestedPath.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchType.ts","file:///app/packages/libs/shared/src/enums/SearchType.ts","file:///app/packages/projects/lite/src/apps/user-manager/flight-requests/UserManagerRequests.ts"],"sourcesContent":["export enum AggregateSearchField {\n YearGroupValues = 'yearGroups.value',\n UserProfilesStatus = 'userProfiles.status'\n}","export enum AggregateSearchNestedPath {\n yearGroups = 'yearGroups',\n userProfiles = 'userProfiles'\n}","export enum AggregateSearchType {\n TermsGroupBy = 'terms-group-by',\n NestedTermsGroupBy = 'nested-terms-group-by',\n}","export enum SearchType {\n Content = 'content',\n OnlineContent = 'online_content',\n User = 'user',\n Customer = 'customer',\n Tag = 'tag',\n Organisation = 'organisation',\n Channel = 'channel'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SearchResults, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BulkCreateOrValidateUserRequest, BulkCreateUsersResponse, BulkDeleteUsersRequest, BulkInviteUsersRequest, BulkInviteUsersResponse, BulkUpdateUserStatusRequest, BulkUserEmailCheckRequest, BulkUserEmailCheckResponse, BulkUsersCreationOrAddValidateResponse, BulkValidateUsersResponse, ChangePasswordRequest, EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { AggregateSearchField } from 'libs/shared/enums/AggregateSearchField';\nimport { AggregateSearchNestedPath } from 'libs/shared/enums/AggregateSearchNestedPath';\nimport { AggregateSearchType } from 'libs/shared/enums/AggregateSearchType';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { FileIdType } from 'libs/shared/enums/Images';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { SearchType } from 'libs/shared/enums/SearchType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { User, UserCollection } from 'libs/shared/interfaces';\nimport { AggregateSearchRequest } from 'libs/shared/interfaces/requests/AggregateSearchRequest';\n\nimport { JoinRequestStatus } from 'apps/user-manager/enums/JoinRequestStatus';\n\nimport { UpdateSsoYearGroupMappings } from '../interfaces/UpdateSsoYearGroupMappings';\n\n\nexport const UserManagerRequests = {\n getUsers(\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (users: UserCollection) => void,\n error?: () => void\n ): Flight.Request {\n const backendParams: HashObject = { query: UserManagerHelper.buildGetUsersQuery(userType, queryParams) };\n\n if (cursor)\n backendParams.cursor = cursor;\n\n let key = `school:users:${customerId}:${userType}`;\n key += Object.keys(backendParams).map(key => backendParams[key]).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/customers/${customerId}/users`, backendParams),\n key,\n success,\n error\n };\n },\n\n getUser(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/users/${id}?query=avatar`,\n key: `school:users:${id}`\n };\n },\n\n getStudentVideos(id: string, cursor?: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const query = [\n `videos[${VIDEO_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `clips[${CLIP_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`\n ];\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `school:users:videos:${id}:${cursor}`\n };\n },\n\n bulkRemoveUsers(\n data: BulkDeleteUsersRequest,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n if (data.userIds?.length)\n data.userIds.forEach(id => invalidationKeys.push(`school:users:${id}`));\n\n return {\n url: '{gateway}/v1/users/delete',\n key: 'delete:school:users',\n invalidationKeys,\n type: HttpVerbs.POST,\n data,\n success,\n error,\n always\n };\n },\n\n removeUsersFromSchool(data: BulkDeleteUsersRequest): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n return {\n url: '{gateway}/v1/users/remove',\n key: `remove:school:users`,\n invalidationKeys,\n type: HttpVerbs.POST,\n data\n };\n },\n\n createUsers({\n users,\n success,\n error,\n always\n }: {\n users: BulkCreateOrValidateUserRequest,\n success?: (res: BulkCreateUsersResponse) => void,\n error?: () => void,\n always?: () => void,\n }): Flight.Request {\n return {\n url: '{gateway}/v1/users',\n key: 'create:users',\n data: users,\n type: HttpVerbs.POST,\n invalidationKeys: [ 'school:users', 'user:count', 'search:users' ],\n success,\n error,\n always\n };\n },\n\n updateUser(\n user: EditUserRequest,\n currentUserId: string,\n success?: (updatedUser?: User) => void,\n error?: () => void,\n always?: () => void,\n shouldUpdateCount?: boolean\n ): Flight.Request {\n const updateStateKeys = [`school:users:${user.userId}`];\n\n if (currentUserId.toString() === user.userId.toString())\n updateStateKeys.push('currentuser');\n\n return {\n url: '{gateway}/v1/users',\n key: 'edit:user',\n type: HttpVerbs.PUT,\n data: user,\n invalidationKeys: ['search:aggregation'],\n success,\n error,\n always,\n updateState: {\n keys: `search:user:count`,\n updateData: (state: any) => {\n if (!shouldUpdateCount)\n return state;\n\n const keys = Object.keys(state);\n const newState: HashObject = { ...state };\n keys.forEach(k => {\n // since there is a delay between the user being updated and the user count being updated from search api\n // we manually update the unknown year group user count in the state\n // so we can get the up-to-date count for the unknown year group warning banner\n if (k.includes('filters.yearGroup.value:0')) {\n newState[k].count = state[k].count - 1;\n }\n });\n return newState;\n }\n\n }\n };\n },\n\n searchUsers(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (results: SearchResults<SearchResultsObject<User>>) => void,\n error?: () => void\n ): Flight.Request {\n const { data, key } = UserManagerHelper.buildSearchDataAndKey({\n customerId,\n userId,\n userType,\n queryParams,\n cursor\n });\n\n return {\n url: `{gateway}/v3/search`,\n data: data,\n type: HttpVerbs.POST,\n key,\n success,\n error\n };\n },\n\n getSearchUserIds(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n success?: (userIds: string[]) => void,\n error?: () => void\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:ids`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: '{gateway}/v3/search/ids',\n key,\n data,\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error\n };\n },\n\n getSearchAggregation(options: {\n userId: string,\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams,\n userIds: string[],\n field: AggregateSearchField\n }): Flight.Request {\n const { userId, customerId, userType, queryParams = {}, userIds, field } = options;\n\n const nestedPath = field === AggregateSearchField.UserProfilesStatus\n ? AggregateSearchNestedPath.userProfiles\n : AggregateSearchNestedPath.yearGroups;\n\n const filters = UserManagerHelper.buildSearchFiltersObject(customerId, userType, queryParams);\n\n let key = `search:aggregation:${userId}:${customerId}:${field}:`;\n key += Object.keys(filters).sort().map(key => filters[key]).join(':');\n key += ':' + userIds.join(':');\n \n const data: AggregateSearchRequest = {\n // Fixed\n indices: ['user'],\n searchType: SearchType.User,\n isLearner: false,\n type: AggregateSearchType.NestedTermsGroupBy,\n\n // Dynamic\n userId: userId.toString(),\n customerId: customerId.toString(),\n data: {\n field,\n nestedPath,\n termsFilters: {\n [`${nestedPath}.customerId`]: [customerId]\n }\n },\n idFilters: userIds,\n filters\n };\n\n const formatData = (data: any) => {\n const response = data.termCount;\n if (field !== AggregateSearchField.UserProfilesStatus)\n return response;\n\n return Object.keys(response).reduce((prev: HashObject, key: string) => {\n // Our ObjectStatus enum is capitalised, but it's lower case in the search index\n prev[key.charAt(0).toUpperCase() + key.slice(1)] = response[key];\n return prev;\n }, {});\n };\n\n return {\n url: '{gateway}/v1/search/aggregation',\n type: HttpVerbs.POST,\n key,\n data,\n normalize: false,\n formatData\n };\n },\n\n bulkToggleActivation(\n data: BulkUpdateUserStatusRequest,\n userType: UserGroup,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/status`,\n key: 'update:users:status',\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n always,\n invalidationKeys: [ `school:users:${data.customerId}:${userType}`, ...data.users.map(u => `school:users:${u.userId}`), 'search:aggregation' ]\n };\n },\n\n bulkValidate(\n data: BulkCreateOrValidateUserRequest,\n customerId?: string,\n success?: (res: ErroredUsers) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/validate',\n type: HttpVerbs.POST,\n key: 'validate:users',\n data,\n success,\n error,\n always,\n normalize: false,\n formatData: (data: BulkValidateUsersResponse) => {\n return data.failedResults.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n }));\n }\n };\n },\n\n bulkCheckEmail(\n data: BulkUserEmailCheckRequest,\n customerId: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/email-statuses`,\n type: HttpVerbs.POST,\n key: `validate:${customerId}:email:${data.userEmails.map(({ email }) => email).join(',')}`,\n data,\n success,\n error,\n always\n };\n },\n\n bulkUsersValidate(\n data: BulkCreateOrValidateUserRequest,\n canInviteExistingUsers: boolean,\n customerId?: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v2/users/validate?allowEmailInUse=${canInviteExistingUsers}`,\n type: HttpVerbs.POST,\n key: `validate:email:in:use:users:${canInviteExistingUsers}`,\n data: data.users,\n success,\n error,\n always,\n formatData: (data: BulkUsersCreationOrAddValidateResponse) => {\n const failed = data.failedResults?.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n })) || [];\n\n const succeed = data.successfulResults?.map(res => ({\n errorCodes: res.errorCodes,\n users: [res.user]\n })) || [];\n\n return [ ...failed, ...succeed ];\n }\n };\n },\n\n yearGroups(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/year-groups?query={orderby:value}`,\n key: `yeargroups:${customerId}`\n };\n },\n\n /**\n * Avatar requests\n */\n updateAvatar(imageId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/avatar',\n key: 'update:avatar',\n type: HttpVerbs.PUT,\n invalidationKeys: [ 'currentuser', `school:users:${userId}` ],\n data: {\n fileId: imageId,\n fileIdType: FileIdType.ImageAPIv2\n },\n success,\n error\n };\n },\n\n deleteAvatar(avatarId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/avatar/${avatarId}`,\n key: 'delete:avatar',\n type: HttpVerbs.DELETE,\n updateState: {\n keys: [ `school:users:${userId}`, 'currentuser' ],\n updateData: (data: HashObject) => {\n const userObj = data[`school:users:${userId}`];\n const currentUserObj = data.currentuser;\n\n userObj.avatar = null;\n currentUserObj.avatar = null;\n\n return {\n [`school:users:${userId}`]: userObj,\n ['currentuser']: currentUserObj\n };\n }\n },\n success,\n error\n };\n },\n\n /**\n * Account settings\n */\n changeEmail(\n email: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/email`,\n key: 'change:email',\n type: HttpVerbs.PUT,\n data: {\n email\n },\n success,\n error,\n always\n };\n },\n\n changePassword(\n passwordModel: ChangePasswordRequest,\n success?: () => void,\n error?: (jqXHR: JQuery.jqXHR) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/password`,\n key: 'change:password',\n type: HttpVerbs.PUT,\n data: {\n currentPassword: passwordModel.currentPassword,\n newPassword: passwordModel.newPassword\n },\n success,\n error,\n always\n };\n },\n\n changeUserPassword(\n userId: string,\n userType: UserGroup,\n newPassword: string,\n changeOnNextLogin: boolean,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/admin/change-password`,\n key: `change:password:${userType}:${userId}`,\n type: HttpVerbs.PUT,\n data: {\n userId,\n newPassword,\n changeOnNextLogin\n },\n success,\n error,\n always\n };\n },\n\n resendActivationEmail(userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/activation',\n key: 'send:activation:email',\n type: HttpVerbs.POST,\n data: { userId },\n success,\n error\n };\n },\n\n sendPasswordResetEmail(userId: string, customerId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/account-reminder',\n key: 'send:password:reset:email',\n type: HttpVerbs.POST,\n data: { userIds: [userId], customerId },\n success,\n error\n };\n },\n\n resendVerificationEmail(\n userId: string,\n customerId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/email-verification',\n key: 'send:verification:email',\n type: HttpVerbs.POST,\n data: { userId, customerId },\n success,\n error\n };\n },\n \n /**\n * Other\n */\n userCount(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {}\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:count`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: `{gateway}/v3/search/count`,\n data,\n type: HttpVerbs.POST,\n key,\n normalize: false\n };\n },\n\n authenticationMethods(ids: string[]): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/users/authentication-methods`, { id: ids }),\n key: `login:methods:${ids.sort().join(':')}`,\n normalizeOptions: {\n idAttribute: 'userId'\n }\n };\n },\n\n getIdentityProviders(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/identity-providers`,\n key: `identity:providers:${customerId}`,\n normalize: false\n };\n },\n\n getSsoMappings(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}`,\n normalize: false\n };\n },\n\n updateSsoMappings(customerId: string, mappings: UpdateSsoYearGroupMappings): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}:update`,\n type: HttpVerbs.POST,\n invalidationKeys: `sso:year:group:mappings:${customerId}`,\n data: mappings\n };\n },\n\n joinRequests(): Flight.Request {\n return {\n url: '{gateway}/v1/customers/join-requests?status=pending',\n key: 'join:requests',\n normalize: false\n };\n },\n\n resolveJoinRequest(\n requestId: string,\n status: JoinRequestStatus\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/join-requests/${requestId}`,\n key: 'resolve:join:request',\n type: HttpVerbs.PUT,\n data: { status },\n normalize: false,\n invalidationKeys: ['join:requests']\n };\n },\n // to invite or add a existing user to a customer\n inviteUserToCustomer(\n customerId: string,\n data: BulkInviteUsersRequest,\n success?: (res: BulkInviteUsersResponse) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/invitation`,\n key: `invite:user:customer:${customerId}`,\n type: HttpVerbs.PUT,\n data,\n invalidationKeys: [ 'school:users', 'search:users' ],\n success,\n error\n };\n }\n};\n\n"],"names":["AggregateSearchField","AggregateSearchNestedPath","AggregateSearchType","SearchType","UserManagerRequests","getUsers","customerId","userType","queryParams","cursor","success","error","backendParams","query","UserManagerHelper","key","Object","keys","map","join","url","UrlHelper","getUser","id","getStudentVideos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","CurationStatus","params","permissionFilterOption","PermissionFilterOption","bulkRemoveUsers","data","always","invalidationKeys","userIds","length","forEach","push","type","HttpVerbs","removeUsersFromSchool","createUsers","users","updateUser","user","currentUserId","shouldUpdateCount","updateStateKeys","userId","toString","updateState","updateData","state","newState","k","includes","count","searchUsers","getSearchUserIds","ObjectHelper","normalize","getSearchAggregation","options","field","nestedPath","userProfiles","yearGroups","filters","sort","indices","searchType","User","isLearner","NestedTermsGroupBy","termsFilters","idFilters","formatData","response","termCount","reduce","prev","charAt","toUpperCase","slice","bulkToggleActivation","u","bulkValidate","failedResults","result","errorCodes","bulkCheckEmail","userEmails","email","bulkUsersValidate","canInviteExistingUsers","failed","succeed","successfulResults","res","updateAvatar","imageId","fileId","fileIdType","deleteAvatar","avatarId","userObj","currentUserObj","currentuser","avatar","changeEmail","changePassword","passwordModel","currentPassword","newPassword","changeUserPassword","changeOnNextLogin","resendActivationEmail","sendPasswordResetEmail","resendVerificationEmail","userCount","authenticationMethods","ids","normalizeOptions","idAttribute","getIdentityProviders","getSsoMappings","updateSsoMappings","mappings","joinRequests","resolveJoinRequest","requestId","status","inviteUserToCustomer"],"sourceRoot":""}