@clickview/lite 0.81.1 → 0.81.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bundles.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "appBundle": "bundle-b08335a08f.min.js",
2
+ "appBundle": "bundle-3f3d63ce55.min.js",
3
3
  "cssBundle": "lite-app-b4540a3be1.css",
4
4
  "polyfillBundle": "polyfills-909f9fc0c1.min.js"
5
5
  }
@@ -1,3 +1,3 @@
1
- /*! For license information please see 1969-800b184fc1-lite.chunk.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1969],{82631:(e,t,r)=>{r.d(t,{B:()=>s});var n=r(32735),a=r(66187),o=r(66122);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(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 l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var c="OTHER";function u(e,t){return t.includes(e)?e:e?c:""}function s(e){var t=e.error,r=e.onChange,l=e.countryCode,s=e.isTertiary,f=(0,a.o)({countryCode:l,isTertiary:s}),d=u(e.initialValue,f),m=i(n.useState(d),2),v=m[0],b=m[1],y=i(n.useState(d===c?e.initialValue:""),2),p=y[0],g=y[1];n.useEffect(function(){b(u(e.initialValue,f))},[e.initialValue]);var h=v===c;return n.createElement("div",{className:"form-group"},n.createElement("label",{htmlFor:e.id,className:e.labelClassName},"Job title",e.required&&n.createElement("span",{className:"text-danger"},"*")),n.createElement("div",{className:"mb-2"},n.createElement("select",{id:e.id,name:e.id,className:"form-select ".concat("lg"===e.size?"form-select-lg":""," ").concat(v.length?"text-dark":"text-secondary"," ").concat(!!t&&"is-invalid"),value:v,placeholder:"Role",onChange:function(e){b(e.target.value),g(""),r(e.target.value===c?"":e.target.value)}},n.createElement("option",{value:"",disabled:!0,className:"text-secondary"},e.placeholder?e.placeholder:n.createElement(n.Fragment,null,"What do you do?")),f.map(function(e,t){return n.createElement("option",{value:e,className:"text-dark",key:t},e)}),n.createElement("option",{value:c,className:"text-dark"},"Other")),!!t&&!h&&n.createElement(o.A,{name:e.id},t)),h&&n.createElement("div",{className:"mb-3"},n.createElement("input",{className:"form-control ".concat("lg"===e.size?"form-select-lg":""," ").concat(!!t&&"is-invalid"),type:"text",value:p,placeholder:"What do you do?",autoFocus:!0,onChange:function(e){g(e.target.value),r(e.target.value)}}),!!t&&n.createElement(o.A,{name:e.id},t)))}},12238:(e,t,r)=>{var n;r.d(t,{C:()=>n}),function(e){e.MasterId="master_id",e.CrmId="crm_id",e.SalesforceId="salesforce_id"}(n||(n={}))},66187:(e,t,r)=>{r.d(t,{I:()=>f,o:()=>s});var n=r(93824);function a(e){return a="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},a(e)}function o(e,t,r){return(t=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=["Teacher","Librarian / Teacher Librarian","Head of Department","Instructional Technology Specialist","Curriculum Coordinator","School Leadership","District Leadership","Academic Coach","Principal","IT / IT Specialist"],l=["Professor","Lecturer","Course Coordinator / Administrator","Digital Learning Manager","Tutor","Teaching Fellow","Librarian","Learning Technologist","Teaching Assistant","Researcher","IT"],c=o(o(o(o(o({},n.C.AU,["Teacher","Librarian / Teacher Librarian","Curriculum Coordinator","Digital Technology Coordinator","SSO / SLSO","IT","Head of Department","Head of Subject","Assistant Principal","Deputy Principal","Principal","Business Manager"]),n.C.NZ,["Teacher","Librarian / Teacher Librarian","Curriculum Leader","e-Learning Coordinator","IT","Head of Department","Head of Faculty","Learning Support","Learning Assistant","Deputy Principal","Assistant Principal","Principal"]),n.C.UK,["Teacher","Librarian / Teacher Librarian","IT/LRC","e-Learning/ICT Coordinator","Head of Key Stage","Head of Department","Subject Lead","Assistant Head Teacher","Deputy Head Teacher","Head Teacher"]),n.C.US,i),n.C.CA,["Teacher","Librarian / Teacher Librarian","Educational Assistant (EA)","Learning Support Teacher / Resource Teacher","Department Head / Manager","Curriculum Coordinator / Consultant","School Counsellor / Guidance Counsellor","Vice-Principal","Principal","Superintendent","Director of Education"]),u=o(o({},n.C.AU,l),n.C.UK,["Professor","Lecturer","Course Coordinator / Administrator","Digital Learning Manager","Tutor","Teaching Fellow","Librarian","Learning Technologist","Teacher","Teaching Assistant","Researcher","IT"]);function s(e){var t,r=null===(t=e.countryCode)||void 0===t?void 0:t.toLowerCase();return e.isTertiary?u[r]||l:c[r]||i}function f(e){return(null==e?void 0:e.toLowerCase().includes("student"))||(null==e?void 0:e.toLowerCase().includes("parent"))}},66122:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(32735);function a(e){return n.createElement("span",{id:"".concat(e.name,"Error"),className:"".concat(e.className," invalid-feedback d-block"),role:"status"},e.children)}},85246:(e,t,r)=>{r.r(t),r.d(t,{OnboardingSelectRoleView:()=>D});var n=r(32735),a=r(23481),o=r(20354),i=r(65858),l=r(45716),c=r(38304),u=r(90976),s=r(82631),f=r(12528),d=r(83914),m=r(83345),v=r(54610),b=r(31949),y=r(22902),p=r(79612),g=r(67453),h=r(35223),S=r(99742),T=r(84550),C=r(12058),E=r(15114),j=r(23923),L=r(73190),w=r(90815),A=r(44842);const N={customerLogo:"O0Fk5"};function O(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var c=n&&n.prototype instanceof l?n:l,u=Object.create(c.prototype);return I(u,"_invoke",function(r,n,a){var o,l,c,u=0,s=a||[],f=!1,d={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,r){return o=t,l=0,c=e,d.n=r,i}};function m(r,n){for(l=r,c=n,t=0;!f&&u&&!a&&t<s.length;t++){var a,o=s[t],m=d.p,v=o[2];r>3?(a=v===n)&&(c=o[(l=o[4])?5:(l=3,3)],o[4]=o[5]=e):o[0]<=m&&((a=r<2&&m<o[1])?(l=0,d.v=n,d.n=o[1]):m<v&&(a=r<3||o[0]>n||n>v)&&(o[4]=r,o[5]=n,d.n=v,l=0))}if(a||r>1)return i;throw f=!0,n}return function(a,s,v){if(u>1)throw TypeError("Generator is already running");for(f&&1===s&&m(s,v),l=s,c=v;(t=l<2?e:c)||!f;){o||(l?l<3?(l>1&&(d.n=-1),m(l,c)):d.n=c:d.v=c);try{if(u=2,o){if(l||(a="next"),t=o[a]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,l<2&&(l=0)}else 1===l&&(t=o.return)&&t.call(o),l<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),l=1);o=e}else if((t=(f=d.n<0)?c:r.call(n,d))!==i)break}catch(t){o=e,l=1,c=t}finally{u=1}}return{value:t,done:f}}}(r,a,o),!0),u}var i={};function l(){}function c(){}function u(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(I(t={},n,function(){return this}),t),f=u.prototype=l.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,I(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return c.prototype=u,I(f,"constructor",u),I(u,"constructor",c),c.displayName="GeneratorFunction",I(u,a,"GeneratorFunction"),I(f),I(f,a,"Generator"),I(f,n,function(){return this}),I(f,"toString",function(){return"[object Generator]"}),(O=function(){return{w:o,m:d}})()}function I(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}I=function(e,t,r,n){if(t)a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r;else{var o=function(t,r){I(e,t,function(e){return this._invoke(t,r,e)})};o("next",0),o("throw",1),o("return",2)}},I(e,t,r,n)}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?P(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var k=function(e,t,r,n){return new(r||(r=Promise))(function(a,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function l(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,l)}c((n=n.apply(e,t||[])).next())})},U="onboarding.selectRole";function D(e){var t,r=(0,L.Q)(e.redirectUrl),I=r.onClickBack,P=r.exitOnboarding,D=r.completeStepAsync,_=r.onSaveError,B=(0,w.H)().logEvent,H=o.a.useBasicFetch(b.N.currentUser()),V=o.a.useBasicFetch(H.data&&b.N.user(H.data.id)),F=o.a.useGetFetchAsync(),M=(0,y.T)().hasPermissions;(0,p.M)({title:l.H["select-role"].getPageTitle()});var R=(0,j.B)(),G=x(n.useState(""),2),z=G[0],J=G[1],K=x(n.useState(""),2),Q=K[0],W=K[1];return n.createElement(E.z,{namespace:U},n.createElement(E.z.Left,{className:"bg-ultramarine d-flex align-items-center"},n.createElement("div",{className:"px-5 pt-4"},n.createElement("img",{className:"img-fluid",src:S.W.OnboardingV2.SelectRole.BACKGROUND}))),n.createElement(E.z.Right,{hasCustomButtons:!1,onClickNext:function(){var e;return k(this,void 0,void 0,O().m(function t(){return O().w(function(t){for(;;)switch(t.n){case 0:if(z){t.n=1;break}return t.a(2);case 1:return B(i.Vw.Click,i.Ix.Next,{jobTitle:z},{jobTitleOverride:z}),u.s.removeUsageIntention(null===(e=H.data)||void 0===e?void 0:e.id),t.p=2,t.n=3,F(b.N.updateJobTitle(H.data.id,H.data.customerId,z));case 3:return t.n=4,D({jobTitleOverride:z});case 4:t.n=6;break;case 5:return t.p=5,t.v,_(),t.a(2,Promise.reject());case 6:return t.a(2)}},t,null,[[2,5]])}))},onClickBack:I,onClickComeBackLater:function(){var e,t,r;return!!(null===(r=null===(t=null===(e=V.data)||void 0===e?void 0:e.userProfile)||void 0===t?void 0:t.metadata)||void 0===r?void 0:r.jobTitle)||!c.m.hasNonBdmTrial(M)}()?P:null,disableNext:!!Q||!z},n.createElement("div",{className:"position-relative"},!!(null===(t=H.data)||void 0===t?void 0:t.customerLogo)&&n.createElement("div",{className:"".concat(N.customerLogo," mx-auto mb-3")},n.createElement(f.f,{imageUrl:g.j.createUrl(H.data.customerLogo,{size:v.h2.Small}),svgName:h.vn.GraduationCap,variant:"green",svgSize:d.S.ExtraLarge})),n.createElement(T.W,null,n.createElement(m.x,{phrase:"heading"}))),n.createElement(C.X,{className:"mb-3 mt-2"},n.createElement(m.x,{phrase:"info",options:{schoolName:H.data.customerName}})),n.createElement("label",null,n.createElement(m.x,{phrase:"roleLabel"})),n.createElement(s.B,{id:"onboarding-job-title",onChange:function(e){J(e),B(i.Vw.Select,i.Ix.SelectJobTitle,{jobTitle:z});var t=A.h.validateJobTitle(e),r=t.isValid,n=t.errorMessage;r?n&&W(""):W(n)},countryCode:H.data.countryCode,placeholder:a.T.getPhrase(U,"rolePlaceholder"),initialValue:z,error:Q,size:"lg",labelClassName:"d-none",isTertiary:R})))}},44842:(e,t,r)=>{r.d(t,{h:()=>d});var n=r(97395),a=r(12238),o=r(19808);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?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 r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e,t,r){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s=/\$+[\w\s]?/,f=u(u(u(u({},o.b.AU,"02 9509 2600"),o.b.UK,"+44 (0)333 207 6595"),o.b.NZ,"09 916 1156"),o.b.US,null),d={getSalesforceId:function(e){if(e&&e.length){var t=e.find(function(e){return e.type===a.C.SalesforceId});if(t)return t.externalId}},buildQueryData:function(e,t){var r={id:e,fname:null==t?void 0:t.givenName,sname:null==t?void 0:t.familyName,email:null==t?void 0:t.email};return Object.entries(r).filter(function(e){return!!l(e,2)[1]}).reduce(function(e,t){var r=l(t,2),n=r[0],a=r[1];return Object.assign(Object.assign({},e),u({},n,a))},{})},getBookDemoUrl:function(e,t,r){var a=d.getSalesforceId(r),o=n._.safeUrlConcat(e,"/book-a-demo/");return n._.urlBuilder(o,d.buildQueryData(a,t))},getUpgradePageUrl:function(e,t,r){var a=d.getSalesforceId(r),o=n._.safeUrlConcat(e,"/contact-us/trial-upgrade/");return n._.urlBuilder(o,d.buildQueryData(a,t))},getContactNumber:function(e){return f[e]},validateJobTitle:function(e){return s.test(e)?{isValid:!1,errorMessage:"Please enter a valid job title."}:e.length>255?{isValid:!1,errorMessage:"Job title cannot exceed max length of 255 characters."}:{isValid:!0}}}}}]);
3
- //# sourceMappingURL=1969-800b184fc1-lite.chunk.js.map
1
+ /*! For license information please see 1969-ad6210f903-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1969],{82631:(e,t,r)=>{r.d(t,{B:()=>s});var n=r(32735),a=r(66187),o=r(66122);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(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 l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var c="OTHER";function u(e,t){return t.includes(e)?e:e?c:""}function s(e){var t=e.error,r=e.onChange,l=e.countryCode,s=e.isTertiary,f=(0,a.o)({countryCode:l,isTertiary:s}),d=u(e.initialValue,f),m=i(n.useState(d),2),v=m[0],b=m[1],y=i(n.useState(d===c?e.initialValue:""),2),p=y[0],g=y[1];n.useEffect(function(){b(u(e.initialValue,f))},[e.initialValue]);var h=v===c;return n.createElement("div",{className:"form-group"},n.createElement("label",{htmlFor:e.id,className:e.labelClassName},"Job title",e.required&&n.createElement("span",{className:"text-danger"},"*")),n.createElement("div",{className:"mb-2"},n.createElement("select",{id:e.id,name:e.id,className:"form-select ".concat("lg"===e.size?"form-select-lg":""," ").concat(v.length?"text-dark":"text-secondary"," ").concat(!!t&&"is-invalid"),value:v,placeholder:"Role",onChange:function(e){b(e.target.value),g(""),r(e.target.value===c?"":e.target.value)}},n.createElement("option",{value:"",disabled:!0,className:"text-secondary"},e.placeholder?e.placeholder:n.createElement(n.Fragment,null,"What do you do?")),f.map(function(e,t){return n.createElement("option",{value:e,className:"text-dark",key:t},e)}),n.createElement("option",{value:c,className:"text-dark"},"Other")),!!t&&!h&&n.createElement(o.A,{name:e.id},t)),h&&n.createElement("div",{className:"mb-3"},n.createElement("input",{className:"form-control ".concat("lg"===e.size?"form-select-lg":""," ").concat(!!t&&"is-invalid"),type:"text",value:p,placeholder:"What do you do?",autoFocus:!0,onChange:function(e){g(e.target.value),r(e.target.value)}}),!!t&&n.createElement(o.A,{name:e.id},t)))}},12238:(e,t,r)=>{var n;r.d(t,{C:()=>n}),function(e){e.MasterId="master_id",e.CrmId="crm_id",e.SalesforceId="salesforce_id"}(n||(n={}))},66187:(e,t,r)=>{r.d(t,{I:()=>f,o:()=>s});var n=r(93824);function a(e){return a="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},a(e)}function o(e,t,r){return(t=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=["Teacher","Librarian / Teacher Librarian","Head of Department","Instructional Technology Specialist","Curriculum Coordinator","School Leadership","District Leadership","Academic Coach","Principal","IT / IT Specialist"],l=["Professor","Lecturer","Course Coordinator / Administrator","Digital Learning Manager","Tutor","Teaching Fellow","Librarian","Learning Technologist","Teaching Assistant","Researcher","IT"],c=o(o(o(o(o({},n.C.AU,["Teacher","Librarian / Teacher Librarian","Curriculum Coordinator","Digital Technology Coordinator","SSO / SLSO","IT","Head of Department","Head of Subject","Assistant Principal","Deputy Principal","Principal","Business Manager"]),n.C.NZ,["Teacher","Librarian / Teacher Librarian","Curriculum Leader","e-Learning Coordinator","IT","Head of Department","Head of Faculty","Learning Support","Learning Assistant","Deputy Principal","Assistant Principal","Principal"]),n.C.UK,["Teacher","Librarian / Teacher Librarian","IT/LRC","e-Learning/ICT Coordinator","Head of Key Stage","Head of Department","Subject Lead","Assistant Head Teacher","Deputy Head Teacher","Head Teacher"]),n.C.US,i),n.C.CA,["Teacher","Librarian / Teacher Librarian","Educational Assistant (EA)","Learning Support Teacher / Resource Teacher","Department Head / Manager","Curriculum Coordinator / Consultant","School Counsellor / Guidance Counsellor","Vice-Principal","Principal","Superintendent","Director of Education"]),u=o(o({},n.C.AU,l),n.C.UK,["Professor","Lecturer","Course Coordinator / Administrator","Digital Learning Manager","Tutor","Teaching Fellow","Librarian","Learning Technologist","Teacher","Teaching Assistant","Researcher","IT"]);function s(e){var t,r=null===(t=e.countryCode)||void 0===t?void 0:t.toLowerCase();return e.isTertiary?u[r]||l:c[r]||i}function f(e){return(null==e?void 0:e.toLowerCase().includes("student"))||(null==e?void 0:e.toLowerCase().includes("parent"))}},66122:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(32735);function a(e){return n.createElement("span",{id:"".concat(e.name,"Error"),className:"".concat(e.className," invalid-feedback d-block"),role:"status"},e.children)}},85246:(e,t,r)=>{r.r(t),r.d(t,{OnboardingSelectRoleView:()=>D});var n=r(32735),a=r(23481),o=r(20354),i=r(65858),l=r(45716),c=r(38304),u=r(90976),s=r(82631),f=r(12528),d=r(83914),m=r(83345),v=r(54610),b=r(31949),y=r(22902),p=r(79612),g=r(67453),h=r(35223),S=r(99742),C=r(84550),T=r(12058),E=r(15114),N=r(23923),j=r(73190),L=r(90815),w=r(44842);const A={customerLogo:"O0Fk5"};function O(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function o(r,n,a,o){var c=n&&n.prototype instanceof l?n:l,u=Object.create(c.prototype);return x(u,"_invoke",function(r,n,a){var o,l,c,u=0,s=a||[],f=!1,d={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,r){return o=t,l=0,c=e,d.n=r,i}};function m(r,n){for(l=r,c=n,t=0;!f&&u&&!a&&t<s.length;t++){var a,o=s[t],m=d.p,v=o[2];r>3?(a=v===n)&&(c=o[(l=o[4])?5:(l=3,3)],o[4]=o[5]=e):o[0]<=m&&((a=r<2&&m<o[1])?(l=0,d.v=n,d.n=o[1]):m<v&&(a=r<3||o[0]>n||n>v)&&(o[4]=r,o[5]=n,d.n=v,l=0))}if(a||r>1)return i;throw f=!0,n}return function(a,s,v){if(u>1)throw TypeError("Generator is already running");for(f&&1===s&&m(s,v),l=s,c=v;(t=l<2?e:c)||!f;){o||(l?l<3?(l>1&&(d.n=-1),m(l,c)):d.n=c:d.v=c);try{if(u=2,o){if(l||(a="next"),t=o[a]){if(!(t=t.call(o,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,l<2&&(l=0)}else 1===l&&(t=o.return)&&t.call(o),l<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),l=1);o=e}else if((t=(f=d.n<0)?c:r.call(n,d))!==i)break}catch(t){o=e,l=1,c=t}finally{u=1}}return{value:t,done:f}}}(r,a,o),!0),u}var i={};function l(){}function c(){}function u(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(x(t={},n,function(){return this}),t),f=u.prototype=l.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,x(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return c.prototype=u,x(f,"constructor",u),x(u,"constructor",c),c.displayName="GeneratorFunction",x(u,a,"GeneratorFunction"),x(f),x(f,a,"Generator"),x(f,n,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(O=function(){return{w:o,m:d}})()}function x(e,t,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}x=function(e,t,r,n){if(t)a?a(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r;else{var o=function(t,r){x(e,t,function(e){return this._invoke(t,r,e)})};o("next",0),o("throw",1),o("return",2)}},x(e,t,r,n)}function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?P(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var k=function(e,t,r,n){return new(r||(r=Promise))(function(a,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function l(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,l)}c((n=n.apply(e,t||[])).next())})},U="onboarding.selectRole";function D(e){var t,r=(0,j.Q)(e.redirectUrl),x=r.onClickBack,P=r.exitOnboarding,D=r.completeStepAsync,_=r.onSaveError,B=(0,L.H)().logEvent,H=o.a.useBasicFetch(b.N.currentUser()),V=o.a.useBasicFetch(H.data&&b.N.user(H.data.id)),F=o.a.useGetFetchAsync(),M=(0,y.T)().hasPermissions;(0,p.M)({title:l.H["select-role"].getPageTitle()});var R=(0,N.B)(),G=I(n.useState(""),2),z=G[0],J=G[1],K=I(n.useState(""),2),Q=K[0],W=K[1];return n.createElement(E.z,{namespace:U},n.createElement(E.z.Left,{className:"bg-ultramarine d-flex align-items-center"},n.createElement("div",{className:"px-5 pt-4"},n.createElement("img",{className:"img-fluid",src:S.W.OnboardingV2.SelectRole.BACKGROUND}))),n.createElement(E.z.Right,{hasCustomButtons:!1,onClickNext:function(){var e;return k(this,void 0,void 0,O().m(function t(){return O().w(function(t){for(;;)switch(t.n){case 0:if(z){t.n=1;break}return t.a(2);case 1:return B(i.Vw.Click,i.Ix.Next,{jobTitle:z},{jobTitleOverride:z}),u.s.removeUsageIntention(null===(e=H.data)||void 0===e?void 0:e.id),t.p=2,t.n=3,F(b.N.updateCurrentUser({firstName:H.data.givenName,lastName:H.data.familyName,displayName:H.data.displayName,jobTitle:z}));case 3:return t.n=4,D({jobTitleOverride:z});case 4:t.n=6;break;case 5:return t.p=5,t.v,_(),t.a(2,Promise.reject());case 6:return t.a(2)}},t,null,[[2,5]])}))},onClickBack:x,onClickComeBackLater:function(){var e,t,r;return!!(null===(r=null===(t=null===(e=V.data)||void 0===e?void 0:e.userProfile)||void 0===t?void 0:t.metadata)||void 0===r?void 0:r.jobTitle)||!c.m.hasNonBdmTrial(M)}()?P:null,disableNext:!!Q||!z},n.createElement("div",{className:"position-relative"},!!(null===(t=H.data)||void 0===t?void 0:t.customerLogo)&&n.createElement("div",{className:"".concat(A.customerLogo," mx-auto mb-3")},n.createElement(f.f,{imageUrl:g.j.createUrl(H.data.customerLogo,{size:v.h2.Small}),svgName:h.vn.GraduationCap,variant:"green",svgSize:d.S.ExtraLarge})),n.createElement(C.W,null,n.createElement(m.x,{phrase:"heading"}))),n.createElement(T.X,{className:"mb-3 mt-2"},n.createElement(m.x,{phrase:"info",options:{schoolName:H.data.customerName}})),n.createElement("label",null,n.createElement(m.x,{phrase:"roleLabel"})),n.createElement(s.B,{id:"onboarding-job-title",onChange:function(e){J(e),B(i.Vw.Select,i.Ix.SelectJobTitle,{jobTitle:z});var t=w.h.validateJobTitle(e),r=t.isValid,n=t.errorMessage;r?n&&W(""):W(n)},countryCode:H.data.countryCode,placeholder:a.T.getPhrase(U,"rolePlaceholder"),initialValue:z,error:Q,size:"lg",labelClassName:"d-none",isTertiary:R})))}},44842:(e,t,r)=>{r.d(t,{h:()=>d});var n=r(97395),a=r(12238),o=r(19808);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?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 r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e,t,r){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s=/\$+[\w\s]?/,f=u(u(u(u({},o.b.AU,"02 9509 2600"),o.b.UK,"+44 (0)333 207 6595"),o.b.NZ,"09 916 1156"),o.b.US,null),d={getSalesforceId:function(e){if(e&&e.length){var t=e.find(function(e){return e.type===a.C.SalesforceId});if(t)return t.externalId}},buildQueryData:function(e,t){var r={id:e,fname:null==t?void 0:t.givenName,sname:null==t?void 0:t.familyName,email:null==t?void 0:t.email};return Object.entries(r).filter(function(e){return!!l(e,2)[1]}).reduce(function(e,t){var r=l(t,2),n=r[0],a=r[1];return Object.assign(Object.assign({},e),u({},n,a))},{})},getBookDemoUrl:function(e,t,r){var a=d.getSalesforceId(r),o=n._.safeUrlConcat(e,"/book-a-demo/");return n._.urlBuilder(o,d.buildQueryData(a,t))},getUpgradePageUrl:function(e,t,r){var a=d.getSalesforceId(r),o=n._.safeUrlConcat(e,"/contact-us/trial-upgrade/");return n._.urlBuilder(o,d.buildQueryData(a,t))},getContactNumber:function(e){return f[e]},validateJobTitle:function(e){return s.test(e)?{isValid:!1,errorMessage:"Please enter a valid job title."}:e.length>255?{isValid:!1,errorMessage:"Job title cannot exceed max length of 255 characters."}:{isValid:!0}}}}}]);
3
+ //# sourceMappingURL=1969-ad6210f903-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/1969-ad6210f903-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/enums/ProspectLookup.ts","file:///app/packages/libs/shared/src/apps/sign-up/utils/getJobTitles.ts","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/projects/lite/src/apps/onboarding/views/select-role/select-role.scss","file:///app/packages/projects/lite/src/apps/onboarding/views/select-role/OnboardingSelectRoleView.tsx","file:///app/packages/projects/lite/src/apps/sign-up/helpers/UpgradeHelper.ts"],"sourcesContent":["import React from 'react';\n\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { getJobTitles } from 'libs/shared/apps/sign-up/utils/getJobTitles';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst OTHER_VALUE = 'OTHER';\n\nfunction getInitialSelection(initialValue: JobTitles | string, jobTitles: JobTitles[]): JobTitles | '' | typeof OTHER_VALUE {\n if (jobTitles.includes(initialValue as JobTitles))\n return initialValue as JobTitles;\n\n if (initialValue)\n return OTHER_VALUE;\n\n return '';\n}\n\ninterface JobTitleInputProps {\n id: string;\n error: string;\n onChange: (jobTitle: JobTitles | '') => void;\n countryCode: CountryCode;\n placeholder?: string;\n initialValue?: JobTitles | string;\n size?: 'lg'\n labelClassName?: string;\n required?: boolean;\n isTertiary: boolean;\n}\n\nexport function JobTitleInput(props: JobTitleInputProps): JSX.Element {\n const {\n error,\n onChange,\n countryCode,\n isTertiary\n } = props;\n\n const jobTitles = getJobTitles({ countryCode, isTertiary });\n\n const initialSelection = getInitialSelection(props.initialValue, jobTitles);\n\n const [ selection, setSelection ] = React.useState<JobTitles | '' | typeof OTHER_VALUE>(initialSelection);\n const [ other, setOther ] = React.useState(initialSelection === OTHER_VALUE ? props.initialValue : '');\n\n React.useEffect(() => {\n setSelection(getInitialSelection(props.initialValue, jobTitles));\n }, [props.initialValue]);\n\n function onChangeSelection(event: React.ChangeEvent<HTMLSelectElement>): void {\n setSelection(event.target.value as JobTitles);\n setOther('');\n onChange(event.target.value === OTHER_VALUE ? '' : event.target.value as JobTitles);\n }\n\n function onChangeOther(event: React.ChangeEvent<HTMLInputElement>): void {\n setOther(event.target.value);\n onChange(event.target.value as JobTitles);\n }\n\n const showOther = selection === OTHER_VALUE;\n\n return (\n <div className='form-group'>\n <label htmlFor={props.id} className={props.labelClassName}>\n Job title\n {props.required && <span className='text-danger'>*</span>}\n </label>\n <div className='mb-2'>\n <select\n id={props.id}\n name={props.id}\n className={`form-select ${props.size === 'lg' ? 'form-select-lg' : ''} ${selection.length ? 'text-dark' : 'text-secondary'} ${!!error && 'is-invalid'}`}\n value={selection}\n placeholder='Role'\n onChange={onChangeSelection}\n >\n <option value='' disabled className='text-secondary'>\n {props.placeholder ? props.placeholder : <>What do you do?</>}\n </option>\n {jobTitles.map((title, key) => <option value={title} className='text-dark' key={key}>{title}</option>)}\n <option value={OTHER_VALUE} className='text-dark'>Other</option>\n </select>\n {!!error && !showOther && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n {showOther &&\n <div className='mb-3'>\n <input\n className={`form-control ${props.size === 'lg' ? 'form-select-lg' : ''} ${!!error && 'is-invalid'}`}\n type='text'\n value={other}\n placeholder='What do you do?'\n autoFocus\n onChange={onChangeOther}\n />\n {!!error && <FormFeedback name={props.id}>{error}</FormFeedback>}\n </div>\n }\n </div>\n );\n}","/**\n * There are more lookup types than this, but these are the only\n * ones the product should really care about - Sha\n */\nexport enum ProspectLookupType {\n MasterId = 'master_id',\n CrmId = 'crm_id',\n SalesforceId = 'salesforce_id'\n}\n\nexport interface ProspectLookup {\n prospectId: string;\n externalId: string;\n type: ProspectLookupType;\n}","import { AuK12JobTitles, AuTertiaryJobTitles, CaK12JobTitles, JobTitles, NzK12JobTitles, UkK12JobTitles, UkTertiaryJobTitles, UsK12JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst AU_K12_JOB_TITLES: AuK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Coordinator',\n 'Digital Technology Coordinator',\n 'SSO / SLSO',\n 'IT',\n 'Head of Department',\n 'Head of Subject',\n 'Assistant Principal',\n 'Deputy Principal',\n 'Principal',\n 'Business Manager'\n];\n\nconst UK_K12_JOB_TITLES: UkK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'IT/LRC',\n 'e-Learning/ICT Coordinator',\n 'Head of Key Stage',\n 'Head of Department',\n 'Subject Lead',\n 'Assistant Head Teacher',\n 'Deputy Head Teacher',\n 'Head Teacher'\n];\n\nconst US_K12_JOB_TITLES: UsK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Head of Department',\n 'Instructional Technology Specialist',\n 'Curriculum Coordinator',\n 'School Leadership',\n 'District Leadership',\n 'Academic Coach',\n 'Principal',\n 'IT / IT Specialist'\n];\n\nconst NZ_K12_JOB_TITLES: NzK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Curriculum Leader',\n 'e-Learning Coordinator',\n 'IT',\n 'Head of Department',\n 'Head of Faculty',\n 'Learning Support',\n 'Learning Assistant',\n 'Deputy Principal',\n 'Assistant Principal',\n 'Principal'\n];\n\nconst CA_K12_JOB_TITLES: CaK12JobTitles[] = [\n 'Teacher',\n 'Librarian / Teacher Librarian',\n 'Educational Assistant (EA)',\n 'Learning Support Teacher / Resource Teacher',\n 'Department Head / Manager',\n 'Curriculum Coordinator / Consultant',\n 'School Counsellor / Guidance Counsellor',\n 'Vice-Principal',\n 'Principal',\n 'Superintendent',\n 'Director of Education'\n];\n\nconst AU_TERTIARY_JOB_TITLES: AuTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst UK_TERTIARY_JOB_TITLES: UkTertiaryJobTitles[] = [\n 'Professor',\n 'Lecturer',\n 'Course Coordinator / Administrator',\n 'Digital Learning Manager',\n 'Tutor',\n 'Teaching Fellow',\n 'Librarian',\n 'Learning Technologist',\n 'Teacher',\n 'Teaching Assistant',\n 'Researcher',\n 'IT'\n];\n\nconst K12_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_K12_JOB_TITLES,\n [CountryCode.NZ]: NZ_K12_JOB_TITLES,\n [CountryCode.UK]: UK_K12_JOB_TITLES,\n [CountryCode.US]: US_K12_JOB_TITLES,\n [CountryCode.CA]: CA_K12_JOB_TITLES\n};\n\nconst TERTIARY_JOB_TITLES: Record<string, JobTitles[]> = {\n [CountryCode.AU]: AU_TERTIARY_JOB_TITLES,\n [CountryCode.UK]: UK_TERTIARY_JOB_TITLES\n};\n\ntype Options = {\n countryCode: CountryCode;\n isTertiary: boolean;\n};\n\nexport function getJobTitles(options: Options): JobTitles[] {\n const key = options.countryCode?.toLowerCase();\n\n if (options.isTertiary)\n return TERTIARY_JOB_TITLES[key] || AU_TERTIARY_JOB_TITLES; // Default to AU Tertiary if not found\n\n return K12_JOB_TITLES[key] || US_K12_JOB_TITLES; // Default to US K12 if not found\n}\n\nexport function isLearnerJobTitle(jobTitle: string): boolean {\n return jobTitle?.toLowerCase().includes('student') ||\n jobTitle?.toLowerCase().includes('parent');\n}","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"customerLogo\":\"O0Fk5\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { OnboardingStorageHelper } from 'libs/shared/apps/onboarding/utils/OnboardingStorageHelper';\nimport { JobTitleInput } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { OnboardingScreenHeading } from 'apps/onboarding/components/heading/OnboardingScreenHeading';\nimport { OnboardingScreenInfo } from 'apps/onboarding/components/info/OnboardingScreenInfo';\nimport { OnboardingLayout } from 'apps/onboarding/components/layout/OnboardingLayout';\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { useOnboardingCallbacks } from 'apps/onboarding/hooks/useOnboardingCallbacks';\nimport { useOnboardingEventLogger } from 'apps/onboarding/hooks/useOnboardingEventLogger';\nimport { OnboardingViewProps } from 'apps/onboarding/interfaces/OnboardingViewProps';\nimport { UpgradeHelper } from 'apps/sign-up/helpers/UpgradeHelper';\n\nimport styles from './select-role.scss';\n\nconst namespace = 'onboarding.selectRole';\n\nexport function OnboardingSelectRoleView(props: OnboardingViewProps): JSX.Element {\n const { onClickBack, exitOnboarding, completeStepAsync, onSaveError } = useOnboardingCallbacks(props.redirectUrl);\n const { logEvent } = useOnboardingEventLogger();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const masterUser = Flight.useBasicFetch<User>(currentUser.data && UserRequests.user(currentUser.data.id));\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const { hasPermissions } = usePermissions();\n useSetPageMetadata({ title: OnboardingScreenConfigs['select-role'].getPageTitle() });\n const isTertiary = useIsTertiary();\n\n const [ jobTitle, setJobTitle ] = React.useState<JobTitles | ''>('');\n const [ errorMessage, setErrorMessage ] = React.useState<string>('');\n\n function onChangeJobTitle(value: JobTitles | ''): void {\n setJobTitle(value);\n\n logEvent(UserAction.Select, OnboardingDescriptor.SelectJobTitle, {\n jobTitle\n });\n\n const { isValid, errorMessage } = UpgradeHelper.validateJobTitle(value);\n\n if (!isValid) {\n setErrorMessage(errorMessage);\n return;\n }\n\n if (errorMessage)\n setErrorMessage('');\n }\n\n function canComeBackLater(): boolean {\n if (masterUser.data?.userProfile?.metadata?.jobTitle)\n return true;\n\n if (!OnboardingPathwayHelper.hasNonBdmTrial(hasPermissions))\n return true;\n\n // Trial users with no job title can't come back later. They must set their job title.\n return false;\n }\n\n async function onClickNext(): Promise<void> {\n if (!jobTitle)\n return;\n\n logEvent(UserAction.Click, OnboardingDescriptor.Next, {\n jobTitle\n }, {\n jobTitleOverride: jobTitle\n });\n\n OnboardingStorageHelper.removeUsageIntention(currentUser.data?.id);\n\n try {\n await fetchAsync(UserRequests.updateCurrentUser({\n firstName: currentUser.data.givenName,\n lastName: currentUser.data.familyName,\n displayName: currentUser.data.displayName,\n jobTitle\n }));\n await completeStepAsync({ jobTitleOverride: jobTitle });\n } catch {\n onSaveError();\n return Promise.reject();\n }\n }\n\n return (\n <OnboardingLayout namespace={namespace}>\n <OnboardingLayout.Left className='bg-ultramarine d-flex align-items-center'>\n <div className='px-5 pt-4'>\n <img className='img-fluid' src={ImageUrls.OnboardingV2.SelectRole.BACKGROUND} />\n </div>\n </OnboardingLayout.Left>\n\n <OnboardingLayout.Right\n hasCustomButtons={false}\n onClickNext={onClickNext}\n onClickBack={onClickBack}\n onClickComeBackLater={canComeBackLater() ? exitOnboarding : null}\n disableNext={!!errorMessage || !jobTitle}\n >\n <div className='position-relative'>\n {!!currentUser.data?.customerLogo && (\n <div className={`${styles.customerLogo} mx-auto mb-3`}>\n <IconCircle\n imageUrl={ImageHelper.createUrl(currentUser.data.customerLogo, { size: ImageSize.Small })}\n svgName={cvSvgLibrary.GraduationCap}\n variant='green'\n svgSize={SvgContainerSize.ExtraLarge}\n />\n </div>\n )}\n\n <OnboardingScreenHeading>\n <Text phrase='heading' />\n </OnboardingScreenHeading>\n </div>\n\n <OnboardingScreenInfo className='mb-3 mt-2'>\n <Text phrase='info' options={{ schoolName: currentUser.data.customerName }} />\n </OnboardingScreenInfo>\n\n <label>\n <Text phrase='roleLabel' />\n </label>\n <JobTitleInput\n id='onboarding-job-title'\n onChange={onChangeJobTitle}\n countryCode={currentUser.data.countryCode}\n placeholder={LanguageService.getPhrase(namespace, 'rolePlaceholder')}\n initialValue={jobTitle}\n error={errorMessage}\n size='lg'\n labelClassName='d-none'\n isTertiary={isTertiary}\n />\n </OnboardingLayout.Right>\n </OnboardingLayout>\n );\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { ProspectLookup, ProspectLookupType } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nconst BASE_DEMO_PATH = '/book-a-demo/';\nconst BASE_UPGRADE_PATH = '/contact-us/trial-upgrade/';\n\nconst INVALID_JOB_TITLE_REGEX = /\\$+[\\w\\s]?/;\n/**\n * TODO: Should we phone numbers to the config?\n */\nconst CONTACT_NUMBERS = {\n [InstanceRegion.AU]: '02 9509 2600',\n [InstanceRegion.UK]: '+44 (0)333 207 6595',\n [InstanceRegion.NZ]: '09 916 1156',\n [InstanceRegion.US]: null as string\n};\n\nexport const UpgradeHelper = {\n getSalesforceId(lookup: ProspectLookup[]) {\n if (!lookup || !lookup.length) return;\n \n const sfAccountLookup = lookup.find(item => item.type === ProspectLookupType.SalesforceId);\n \n if (!sfAccountLookup) return;\n \n return sfAccountLookup.externalId;\n },\n\n buildQueryData(salesforceId: string, currentUser: CurrentUser) {\n const queryData = {\n id: salesforceId,\n fname: currentUser?.givenName,\n sname: currentUser?.familyName,\n email: currentUser?.email\n };\n return Object.entries(queryData)\n .filter(([ , v ]) => !!v)\n .reduce((acc, [ k, v ]) => ({ ...acc, [k]: v }), {});\n },\n\n getBookDemoUrl(marketingSiteUrl: string, currentUser: CurrentUser, lookups: ProspectLookup[]) {\n const salesforceId = UpgradeHelper.getSalesforceId(lookups);\n \n const demoPath = UrlHelper.safeUrlConcat(marketingSiteUrl, BASE_DEMO_PATH);\n return UrlHelper.urlBuilder(demoPath, UpgradeHelper.buildQueryData(salesforceId, currentUser));\n },\n\n getUpgradePageUrl(marketingSiteUrl: string, currentUser: CurrentUser, lookups: ProspectLookup[]) {\n const salesforceId = UpgradeHelper.getSalesforceId(lookups);\n \n const upgradePath = UrlHelper.safeUrlConcat(marketingSiteUrl, BASE_UPGRADE_PATH);\n return UrlHelper.urlBuilder(upgradePath, UpgradeHelper.buildQueryData(salesforceId, currentUser));\n },\n\n getContactNumber(instanceRegion: InstanceRegion) {\n return CONTACT_NUMBERS[instanceRegion];\n },\n\n validateJobTitle(jobTitle: JobTitles | '') {\n if (INVALID_JOB_TITLE_REGEX.test(jobTitle)) {\n return {\n isValid: false,\n errorMessage: 'Please enter a valid job title.'\n };\n }\n\n if (jobTitle.length > 255) {\n return {\n isValid: false,\n errorMessage: 'Job title cannot exceed max length of 255 characters.'\n };\n }\n\n return {\n isValid: true\n };\n }\n};"],"names":["OTHER_VALUE","getInitialSelection","initialValue","jobTitles","includes","JobTitleInput","props","error","onChange","countryCode","isTertiary","initialSelection","selection","setSelection","other","setOther","showOther","className","htmlFor","id","labelClassName","required","name","size","length","value","placeholder","event","target","disabled","map","title","key","type","autoFocus","ProspectLookupType","US_K12_JOB_TITLES","AU_TERTIARY_JOB_TITLES","K12_JOB_TITLES","C","TERTIARY_JOB_TITLES","getJobTitles","options","toLowerCase","isLearnerJobTitle","jobTitle","FormFeedback","role","children","namespace","OnboardingSelectRoleView","useOnboardingCallbacks","redirectUrl","onClickBack","exitOnboarding","completeStepAsync","onSaveError","logEvent","useOnboardingEventLogger","currentUser","UserRequests","masterUser","data","fetchAsync","hasPermissions","usePermissions","useSetPageMetadata","OnboardingScreenConfigs","useIsTertiary","setJobTitle","errorMessage","setErrorMessage","OnboardingLayout","src","ImageUrls","hasCustomButtons","onClickNext","jobTitleOverride","OnboardingStorageHelper","firstName","givenName","lastName","familyName","displayName","Promise","reject","onClickComeBackLater","userProfile","metadata","OnboardingPathwayHelper","canComeBackLater","disableNext","customerLogo","IconCircle","imageUrl","ImageHelper","svgName","variant","svgSize","SvgContainer","S","OnboardingScreenHeading","Text","phrase","OnboardingScreenInfo","schoolName","customerName","UpgradeHelper","isValid","LanguageService","INVALID_JOB_TITLE_REGEX","CONTACT_NUMBERS","getSalesforceId","lookup","sfAccountLookup","find","item","externalId","buildQueryData","salesforceId","queryData","fname","sname","email","Object","entries","filter","reduce","acc","k","v","getBookDemoUrl","marketingSiteUrl","lookups","demoPath","getUpgradePageUrl","upgradePath","getContactNumber","instanceRegion","validateJobTitle","test"],"sourceRoot":""}
@@ -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":"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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, 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":""}