1"use strict";(self.webpackChunksmarpshare_frontend=self.webpackChunksmarpshare_frontend||[]).push([[2522],{34:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{l:()=>DragNDropArea});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(96540);const handleDragOver=event=>{event.preventDefault(),event.stopPropagation()},DragNDropArea=({children,onDrop})=>react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{onDragOver:handleDragOver,onDrop:event=>((event,handleSelectFiles)=>{if(handleDragOver(event),!event.dataTransfer.files||0===event.dataTransfer.files.length)return;const fileInput=document.createElement("input");fileInput.type="file",fileInput.style.display="none",document.body.appendChild(fileInput);const dataTransfer=new DataTransfer;Array.from(event.dataTransfer.files).forEach((file=>dataTransfer.items.add(file))),fileInput.files=dataTransfer.files;const changeEvent=new Event("change",{bubbles:!0});fileInput.dispatchEvent(changeEvent),handleSelectFiles({target:fileInput}),document.body.removeChild(fileInput)})(event,onDrop)},children)},5741:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{M:()=>ImageInput});var _emotion_styled__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(59295),_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(11432),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(96540),src_app_react_common_hooks_use_get_text__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(87914);const TextWrapper=_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A.div` 2 display: flex; 3 align-items: center; 4 justify-content: center; 5`,BrowseButton=(0,_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A)(_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_3__.B$)` 6 ::part(button) { 7 text-decoration: underline; 8 color: ${props=>props.theme.color.PrimaryDefault}; 9 padding-left: 5px; 10 padding-right: 5px; 11 12 &:hover { 13 background-color: transparent; 14 } 15 } 16`,ImageInput=({text,onChange,inputRef,multiple=!1,hasCustomText=!1,...props})=>{const{gettext}=(0,src_app_react_common_hooks_use_get_text__WEBPACK_IMPORTED_MODULE_2__.z)(),promptText=gettext(multiple?"Drag and drop your images here, or":"Drag and drop your image here, or");return react__WEBPACK_IMPORTED_MODULE_1__.createElement("div",{className:"image-placeholder-caption","data-testid":"image-placeholder-caption"},text?react__WEBPACK_IMPORTED_MODULE_1__.createElement("span",null,text):!hasCustomText&&react__WEBPACK_IMPORTED_MODULE_1__.createElement(TextWrapper,null,react__WEBPACK_IMPORTED_MODULE_1__.createElement("span",null,promptText)," ",react__WEBPACK_IMPORTED_MODULE_1__.createElement(BrowseButton,{variant:"text",color:"primary"},gettext("browse"))," ",react__WEBPACK_IMPORTED_MODULE_1__.createElement("span",null,gettext("your computer."))),react__WEBPACK_IMPORTED_MODULE_1__.createElement("input",{type:"file",style:{display:"none"},onChange,ref:inputRef,...props,multiple}))}},31242:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{x:()=>ImagePlaceholder});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(96540),classnames__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(32485),_emotion_styled__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(59295),_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(11432),src_design_system_components__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(66931);const Content=_emotion_styled__WEBPACK_IMPORTED_MODULE_2__.A.div` 17 border-radius: 8px; 18 height: 184px; 19 width: 100%; 20 border: 1px dashed #d7dbe0; 21 display: flex; 22 justify-content: center; 23 align-items: center; 24 color: #000000; 25 26 .flex-break { 27 flex-basis: 100%; 28 } 29 30 .image-placeholder-caption { 31 text-align: center; 32 font-size: 15px; 33 font-weight: 400; 34 line-height: 24px; 35 color: #000000; 36 } 37`,Placeholder=_emotion_styled__WEBPACK_IMPORTED_MODULE_2__.A.div` 38 display: flex; 39 justify-content: center; 40 align-items: center; 41 flex-wrap: wrap; 42 flex-direction: column; 43`,ImagePlaceholder=({className,children,showPlaceholder,onClick,title})=>react__WEBPACK_IMPORTED_MODULE_0__.createElement(Content,{onClick,className:classnames__WEBPACK_IMPORTED_MODULE_1__(className,{hoverable:!!onClick})},showPlaceholder?react__WEBPACK_IMPORTED_MODULE_0__.createElement(Placeholder,null,react__WEBPACK_IMPORTED_MODULE_0__.createElement(_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_4__.k0,{icon:"upload-outlined",size:"xl"}),title&&react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",null,react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"flex-break"},react__WEBPACK_IMPORTED_MODULE_0__.createElement(src_design_system_components__WEBPACK_IMPORTED_MODULE_3__.hK,{dir:"y",size:"m"})),title)):children),ButtonGroupContent=_emotion_styled__WEBPACK_IMPORTED_MODULE_2__.A.div` 44 width: 100%; 45 height: 100%; 46 display: flex; 47 padding: ${props=>props.theme.spacing.S}; 48`,ImageUploaderControl=_emotion_styled__WEBPACK_IMPORTED_MODULE_2__.A.label` 49 flex: 1; 50 flex-wrap: wrap; 51 display: flex; 52 align-items: center; 53 justify-content: center; 54 align-content: center; 55 background-color: white; 56 border: 1px solid transparent; 57 58 &:hover { 59 border-color: ${props=>props.theme.color.PrimaryDefault}; 60 cursor: pointer; 61 } 62 63 &:first-of-type { 64 border-top-left-radius: 5px; 65 border-bottom-left-radius: 5px; 66 } 67 68 &:last-of-type { 69 border-top-right-radius: 5px; 70 border-bottom-right-radius: 5px; 71 } 72`,Loader=_emotion_styled__WEBPACK_IMPORTED_MODULE_2__.A.div` 73 border: 4px solid color(primary-default);
74 border-top: 4px solid color(space-darkest); 75 border-radius: 50%; 76 width: 64px; 77 height: 64px; 78 animation: spin 2s linear infinite; 79 80 border-color: ${props=>props.theme.color.PrimaryDefault}; 81`;ImagePlaceholder.Loader=Loader,ImagePlaceholder.Button=({icon,children,onClick})=>react__WEBPACK_IMPORTED_MODULE_0__.createElement(ImageUploaderControl,{onClick},icon,react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"flex-break"},react__WEBPACK_IMPORTED_MODULE_0__.createElement(src_design_system_components__WEBPACK_IMPORTED_MODULE_3__.hK,{dir:"y",size:"m"})),children),ImagePlaceholder.ButtonGroup=({children})=>react__WEBPACK_IMPORTED_MODULE_0__.createElement(ButtonGroupContent,null,react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children).reduce(((prev,curr,index)=>[prev,react__WEBPACK_IMPORTED_MODULE_0__.createElement(src_design_system_components__WEBPACK_IMPORTED_MODULE_3__.hK,{dir:"x",size:"s",key:`sep-${index}`}),curr])))},37373:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{ve:()=>HeaderWithGroupSelection,uA:()=>HeaderWithGroupSelectionRenderer,lW:()=>NO_FILTER_OPTION_VALUE,Xy:()=>mapStateToProps});var react=__webpack_require__(96540),es=__webpack_require__(49924),redux=__webpack_require__(82960),stencil_generated=__webpack_require__(11432),emotion_styled_browser_esm=__webpack_require__(59295),effects=__webpack_require__(61412),cat_select_facade=__webpack_require__(33544),use_cat_select=__webpack_require__(50071),use_get_text=__webpack_require__(87914);const Select=(0,emotion_styled_browser_esm.A)(cat_select_facade.j)` 82 ${({theme:{cat:{fontSize,fontWeight,color,radius}}})=>`\n\t\tcolor: ${color.uiFontBase};\n\t\twidth: 240px;\n\t\t--cat-border-radius-m: ${radius.l};\n\t\t--cat-border-color-dark: 235, 236, 240;\n\t\t::part(input) {\n\t\t\tfont-size: ${fontSize.m};\n\t\t\tfont-weight: ${fontWeight.head};\n\t\t}\n\t`} 83`,CatGroupSelect=({options,value,onGroupChange})=>{const{gettext}=(0,use_get_text.z)();return react.createElement(Select,{label:gettext("Group select"),labelHidden:!0,required:!0,options:(0,use_cat_select.a)(options,(folder=>folder.value),(folder=>folder.display)),nativeAttributes:{"data-testid":"group-select"},noItems:gettext("No matching group found"),value,onCatChange:event=>{if(!event.target.value||event.target.value===value)return;const group=options.find((({value})=>value===event.target.value));group&&onGroupChange(group)}})};var use_query_params=__webpack_require__(47547),use_session=__webpack_require__(84280);const GroupLabel=emotion_styled_browser_esm.A.p` 84 color: ${p=>p.theme.cat.color.uiFontBase}; 85`,NO_FILTER_OPTION_VALUE="no_filter",HeaderWithGroupSelectionRenderer=({groupOptions,isGroupSelectionEnabled,isFetchingGroups,selectedGroup,onGroupSelection,fetchGroups,testId,title,toolbar,isUpdateQueryParamEnabled=!0,isNoFilterOptionEnabled=!0,noFilterOptionText})=>{const[queryParams,setQueryParam]=(0,use_query_params.s)(),{groupId:groupIdFromUrl}=queryParams,{session:{company:{_id:companyId,isGroupEnabled},user}}=(0,use_session.w)(),{gettext}=(0,use_get_text.z)(),[hasMounted,setHasMounted]=react.useState(!1),noFilterOption={value:NO_FILTER_OPTION_VALUE,display:noFilterOptionText||gettext("All groups")};react.useEffect((()=>{if(setHasMounted(!0),isGroupEnabled&&isGroupSelectionEnabled){fetchGroups(!0)}else handleGroupSelection({display:user.groupName,value:user.groupId})}),[]);const filteredGroupOptions=react.useMemo((()=>{const groups=(groupOptions=>user.companyId!==companyId&&isGroupEnabled?groupOptions.filter((group=>group.value!==user.groupId)):groupOptions)(groupOptions);return isNoFilterOptionEnabled?[noFilterOption,...groups]:groups}),[groupOptions]),handleGroupSelection=group=>{onGroupSelection(group),isUpdateQueryParamEnabled&&updateQueryParam(group)},updateQueryParam=group=>{if((null==group?void 0:group.value)!==NO_FILTER_OPTION_VALUE)setQueryParam({...queryParams,groupId:null==group?void 0:group.value});else{const{groupId,...query}=queryParams;setQueryParam({...query})}};react.useEffect((()=>{if(!isGroupSelectionEnabled||!hasMounted||isFetchingGroups)return;const groupToSelect=(()=>
85{if(!groupIdFromUrl&&isNoFilterOptionEnabled)return noFilterOption;let groupToSelect=filteredGroupOptions.find((({value})=>value===(groupIdFromUrl||user.groupId)));return void 0===groupToSelect&&(groupToSelect=filteredGroupOptions[0]),groupToSelect})();void 0!==groupToSelect&&groupToSelect.value!==(null==selectedGroup?void 0:selectedGroup.value)&&handleGroupSelection(groupToSelect)}),[groupOptions,groupIdFromUrl]);return react.createElement("div",{className:"cat-flex-col cat-gap-s"},react.createElement("h1",{className:"cat-h1","data-testid":testId},title),react.createElement("div",{className:"cat-flex cat-justify-between"},isGroupEnabled?isGroupSelectionEnabled?isFetchingGroups?react.createElement(stencil_generated.K0,{"data-testid":"loading-indicator"}):0===filteredGroupOptions.length?gettext("No groups for this user. Please check your user role."):1===filteredGroupOptions.length?react.createElement(GroupLabel,{className:"cat-text-l","data-testid":"group-label"},filteredGroupOptions[0].display):react.createElement(CatGroupSelect,{options:filteredGroupOptions,value:(null==selectedGroup?void 0:selectedGroup.value)||"",onGroupChange:handleGroupSelection}):react.createElement(GroupLabel,{className:"cat-text-l","data-testid":"group-label"},null==selectedGroup?void 0:selectedGroup.display):null,toolbar))},mapStateToProps=state=>({isFetchingGroups:state.Group.isFetching,groupOptions:Object.values(state.Group.groupList).map((({general:{name,_id}})=>({display:name,value:_id})))}),HeaderWithGroupSelection=(0,es.Ng)(mapStateToProps,(dispatch=>(0,redux.bindActionCreators)({fetchGroups:effects.pl},dispatch)))(HeaderWithGroupSelectionRenderer)},53255:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{G:()=>ImageUploader});var _emotion_styled__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(59295),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(96540),_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(11432),_image_input__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(5741),_image_placeholder__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(31242),_image_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(3554);const ImageUploader=({onSelectImages,imageInputText,width,imageCountLimit,isLoading})=>{const imageInputEl=react__WEBPACK_IMPORTED_MODULE_1__.useRef(null),Content=_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A.section` 86 display: flex; 87 flex-direction: column; 88 align-items: center; 89 padding: ${props=>props.theme.spacing.S}; 90 border: 1px dashed #d7dbe0; 91 border-radius: 5px; 92 width: ${width||"800px"}; 93 `,ImagePlaceholderStyled=(0,_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A)(_image_placeholder__WEBPACK_IMPORTED_MODULE_3__.x)` 94 border: 0; 95 background: white; 96 `,LoadingWrapper=_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A.div` 97 width: 100%; 98 height: 184px; 99 `;return react__WEBPACK_IMPORTED_MODULE_1__.createElement(Content,null,isLoading?react__WEBPACK_IMPORTED_MODULE_1__.createElement(LoadingWrapper,{className:"cat-flex cat-justify-center cat-items-center"},react__WEBPACK_IMPORTED_MODULE_1__.createElement(_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_5__.K0,{size:"l","data-testid":"image-uploading-spinner"})):react__WEBPACK_IMPORTED_MODULE_1__.createElement(ImagePlaceholderStyled,{showPlaceholder:!0,onClick:()=>{var _a;return null===(_a=null==imageInputEl?void 0:imageInputEl.current)||void 0===_a?void 0:_a.click()},title:react__WEBPACK_IMPORTED_MODULE_1__.createElement(_image_input__WEBPACK_IMPORTED_MODULE_2__.M,{text:imageInputText,onChange:onSelectImages,inputRef:imageInputEl,accept:_image_utils__WEBPACK_IMPORTED_MODULE_4__.Zw,multiple:imageCountLimit>1,"data-testid":"image-upload-input"})}))}},71909:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{k:()=>ImagePreview});var _emotion_styled__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(59295),_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(11432),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(96540);const DeleteButton=(0,_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A)(_haiilo_catalyst_react__WEBPACK_IMPORTED_MODULE_2__.B$)` 100 ${({theme:{cat:{spacing:{s}}}})=>`\n\t\tposition: absolute;\n\t\tright: ${s};\n\t\ttop: ${s};\n\t`} 101`,Container=_emotion_styled__WEBPACK_IMPORTED_MODULE_0__.A.div` 102 ${({theme:{cat:{color,radius}}})=>`\n\t\tposition: relative;\n\t\tborder: 1px solid ${color.uiBorderDefault};\n\t\tborder-radius: ${radius.m};\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t`} 103`,ImagePreview=({children,remove})=>react__WEBPACK_IMPORTED_MODULE_1__.createElement(Container,null,react__WEBPACK_IMPORTED_MODULE_1__.createElement(DeleteButton,{className:"image-preview-action",onCatClick:remove,icon:"trash-outlined",iconOnly:!0,nativeAttributes:{"data-testid":"delete-button"}}),children)},72522:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{RewardPage:()=>RewardPage});var emotion_styled_browser_esm=__webpack_require__(59295),stencil_generated=__webpack_require__(11432),react=__webpack_require__(96540),tracking_utils=__webpack_require__(48458),api=__webpack_require__(56433),string_utils=__webpack_require__(73225),util=__webpack_require__(58151),use_get_text=__webpack_require__(87914),use_session=__webpack_require__(84280),components=__webpack_require__(66931),toast=__webpack_require__(62614);const Body=emotion_styled_browser_esm.A.div` 104 color: ${p=>p.theme.cat.color.uiFontBase}; 105`,DeleteRewardDialog=({reward:{title,_id},onClose})=>{const{gettext}=(0,use_get_text.z)(),[isLoading,setIsLoading]=react.useState(!1);return react.createElement(components.Au,{show:!0,onClose:()=>onClose(),width:524},react.createElement(components.Au.Header,{title:gettext("Delete reward")}),react.createElement(components.Au.Content,null,react.createElement(Body,null,react.createElement("p",{className:"cat-text-l","data-testid":"reward-delete-dialog-description"},gettext("Are you sure you want to delete")," ",react.createElement("strong",null,title),"?"))),react.createElement(components.Au.FooterActions,null,react.createElement(stencil_generated.B$,{onClick:async()=>{var _a,_b;setIsLoading(!0);const[,error]=await(0,util.Oi)((()=>api.gM.deleteReward(_id)));if(setIsLoading(!1),error)return(0,toast.Kf)({message:null!==(_a=(0,string_utils.fi)(error))&&void 0!==_a?_a:gettext("Failed to delete reward. Please try again.")}),void tracking_utils.A.error(null!==(_b=(0,string_utils.fi)(error))&&void 0!==_b?_b:"Failed to delete reward. Please try again.","DeleteRewardDialog.handleDelete",(0,string_utils.hT)(error));(0,toast.tP)({message:gettext("Reward has been deleted.")}),onClose(!0)},color:"primary",variant:"filled",nativeAttributes:{"data-testid":"delete-button"},loading:isLoading}
105,gettext("Delete"))))};var use_document_title=__webpack_require__(10207),header_with_group_selection=__webpack_require__(37373),dist=__webpack_require__(71287),drag_n_drop_area=__webpack_require__(34),image_preview=__webpack_require__(71909),image_uploader=__webpack_require__(53255),shared_react_components=__webpack_require__(67940),file_utils=__webpack_require__(47339),media=__webpack_require__(75088),image_utils=__webpack_require__(3554),catalyst_provider=__webpack_require__(2784);const RewardForm=emotion_styled_browser_esm.A.div` 106 color: ${p=>p.theme.cat.color.uiFontBase}; 107`,AddEditRewardDialog=({reward,groupId,onClose})=>{const{gettext}=(0,use_get_text.z)(),[form,setForm]=react.useState(reward),[formErrors,setFormErrors]=react.useState({image:"",title:!1,description:!1,point:!1}),{session:{user}}=(0,use_session.w)(),[isSaving,setIsSaving]=react.useState(!1),[isUploadingImage,setIsUploadingImage]=react.useState(!1),dialogTitle=form._id?gettext("Edit reward"):gettext("Create new reward");(0,catalyst_provider.g)({"error.AddEditRewardDialog.title":gettext("Please enter title for the reward"),"error.AddEditRewardDialog.point":gettext("Please enter price for the reward (not less than 1 point)")});const handleSelectFiles=async event=>{var _a;const file=null===(_a=(0,file_utils.fz)(event))||void 0===_a?void 0:_a[0];if(!file)return;setFormErrors((prev=>({...prev,image:""})));const validationError=(file=>[...image_utils.k3,image_utils.DL].includes(file.type)?null:gettext("Please select an image or a gif to upload."))(file);if(validationError)return void setFormErrors((prev=>({...prev,image:validationError})));const metadata=await(async file=>{try{return await(0,image_utils.K4)(URL.createObjectURL(file))}catch(_a){return setFormErrors((prev=>({...prev,image:gettext("An error occurred while processing the image. Please try again.")}))),null}})(file);metadata&&(setIsUploadingImage(!0),await(async metadata=>{try{const uploadedImages=await(0,media.eC)([metadata.url],user._id,dist.LWb.Image);setForm((prev=>({...prev,imageUrl:uploadedImages[0].accessUrl})))}catch(_a){setFormErrors((prev=>({...prev,image:gettext("An error occurred while uploading the image. Please try again.")})))}})(metadata),setIsUploadingImage(!1))};return react.createElement(components.Au,{show:!0,onClose,width:524},react.createElement(components.Au.Header,{title:dialogTitle}),react.createElement(components.Au.Content,null,react.createElement(RewardForm,{className:"cat-form"},react.createElement(stencil_generated.BU,{required:!0,label:gettext("Title"),value:form.title,maxLength:400,nativeAttributes:{"data-testid":"title-input"},onCatChange:event=>{const value=event.target.value||"";setForm({...form,title:value}),setFormErrors((prev=>({...prev,title:!1})))},errors:formErrors.title?["AddEditRewardDialog.title"]:[]}),react.createElement(stencil_generated.Fc,{onCatChange:event=>{const value=event.target.value||"";setForm({...form,description:value})},label:gettext("Description"),nativeAttributes:{"data-testid":"description-input"}}),react.createElement(stencil_generated.BU,{required:!0,type:"number",label:gettext("Price"),min:1,textSuffix:"points",value:form.point.toString(),nativeAttributes:{"data-testid":"points-input"},onCatChange:event=>{const value=event.target.value||"";Number(value)<=0?setFormErrors((prev=>({...prev,point:!0}))):(setForm({...form,point:Number(value)}),setFormErrors((prev=>({...prev,point:!1}))))},errors:formErrors.point?["AddEditRewardDialog.point"]:[]}),form.imageUrl?react.createElement(image_preview.k,{remove:()=>setForm({...form,imageUrl:""})},react.createElement(shared_react_components.Cr,{imageUrl:form.imageUrl,token:dist.JRo.FitIn,id:"post-link-image-preview"})):react.createElement(react.Fragment,null,formErrors.image&&react.createElement(stencil_generated.Jv,{className:"cat-mb-s",color:"danger"},formErrors.image),react.createElement(drag_n_drop_area.l,{onDrop:handleSelectFiles},react.createElement(image_uploader.G,{onSelectImages:handleSelectFiles,imageCountLimit:1,width:"100%",isLoading:isUploadingImage}))))),react.createElement(components.Au.FooterActions,null,react.createElement(stencil_generated.B$,{onClick:async()=>{var _a,_b;if(!form.title)return void setFormErrors((prev=>({...prev,title:!0})));if(!form.point||form.point<=0)return void setFormErrors((prev=>({...prev,point:!0})));setIsSaving(!0);const[,error]=await(0,util.Oi)((async()=>form._id?api.gM.updateReward(form._id,form):api.gM.createReward({...form,groupId})));if(setIsSaving(!1),error)return(0,toast.Kf)({message:null!==(_a=(0,string_utils.fi)(error))&&void 0!==_a?_a:gettext("Something went wrong while saving changes, please try again later.")}),void tracking_utils.A.error(null!==(_b=(0,string_utils.fi)(error))&&void 0!==_b?_b:"Something went wrong while saving changes, please try again later.","AddEditRewardDialog.handleSave",(0,string_utils.hT)(error));onClose(!0)},color:"primary",variant:"filled",nativeAttributes:{"data-testid":"save-button"},loading:isSaving}
107,gettext("Save"))))},claim_reward_dialog_Body=emotion_styled_browser_esm.A.div` 108 color: ${p=>p.theme.cat.color.uiFontBase}; 109`,ImageWrapper=emotion_styled_browser_esm.A.div` 110 img { 111 max-width: 270px; 112 width: 100%; 113 height: 152px; 114 } 115`,ClaimRewardDialog=({reward:{_id,imageUrl,title},onClose})=>{const{gettext}=(0,use_get_text.z)(),[isLoading,setIsLoading]=react.useState(!1),[message,setMessage]=react.useState("");return react.createElement(components.Au,{show:!0,onClose:()=>onClose(),width:524},react.createElement(components.Au.Header,{title:gettext("Claim reward")}),react.createElement(components.Au.Content,null,react.createElement(claim_reward_dialog_Body,null,react.createElement(ImageWrapper,{className:"cat-flex cat-flex-col cat-items-center cat-mb-m"},react.createElement(shared_react_components.Cr,{imageUrl,token:dist.JRo.Post,fallbackImage:"/images/no-image-16x9.jpg","data-testid":"reward-image",className:"cat-radius-l"})),react.createElement(stencil_generated.Fc,{label:gettext("Message to administrator"),requiredMarker:"none",value:message,onCatChange:e=>setMessage(e.target.value||""),placeholder:gettext("Add a quick note for the admin â like size or type.")}))),react.createElement(components.Au.FooterActions,null,react.createElement(stencil_generated.B$,{onClick:async()=>{var _a,_b;setIsLoading(!0);const[,error]=await(0,util.Oi)((()=>api.Zk.claimReward({rewardId:_id,message})));if(setIsLoading(!1),error)return(0,toast.Kf)({message:null!==(_a=(0,string_utils.fi)(error))&&void 0!==_a?_a:gettext("Failed to claim. Please try again.")}),void tracking_utils.A.error(null!==(_b=(0,string_utils.fi)(error))&&void 0!==_b?_b:"Failed to claim reward. Please try again.","ClaimRewardDialog.handleClaim",(0,string_utils.hT)(error));(0,toast.tP)({message:`${title} ${gettext("has been claimed!")}`}),onClose(!0)},color:"primary",variant:"filled",nativeAttributes:{"data-testid":"reward-claim-modal-button"},loading:isLoading},gettext("Claim"))))};var emotion_react_browser_esm=__webpack_require__(17437);const Wrapper=emotion_styled_browser_esm.A.div` 116 width: 100%; 117 height: ${({height})=>height}px; 118 background-color: ${({bgColor})=>bgColor}; 119`,StyledIcon=(0,emotion_styled_browser_esm.A)(stencil_generated.k0)` 120 color: ${({iconColor})=>iconColor}; 121 font-size: ${({iconSize})=>iconSize}px; 122`,FallbackImage=({height=152,bgColor="#ced2dd",icon,iconSize=56,iconColor="#ffffff","data-testid":testId="fallback-image"})=>react.createElement(Wrapper,{height,bgColor,className:"cat-flex cat-justify-center cat-items-center"},react.createElement(StyledIcon,{icon,iconSize,"data-testid":testId,iconColor,size:"inline"})),reward_item_ImageWrapper=emotion_styled_browser_esm.A.div` 123 position: relative; 124 125 img { 126 width: 100%; 127 height: 152px; 128 } 129`,Card=(0,emotion_styled_browser_esm.A)(stencil_generated.Re)` 130 color: ${p=>p.theme.cat.color.uiFontBase}; 131 padding: 0; 132 overflow: hidden; 133`,maintainLineHeight=emotion_react_browser_esm.AH` 134 &:empty::before { 135 content: "\\00a0"; 136 } 137`,Title=emotion_styled_browser_esm.A.h4` 138 ${maintainLineHeight}; 139`,Description=emotion_styled_browser_esm.A.p` 140 ${maintainLineHeight}; 141`,Option=emotion_styled_browser_esm.A.div` 142 position: absolute; 143 right: 0; 144 padding: ${({theme})=>theme.cat.spacing.m}; 145`,PendingButtonWrapper=emotion_styled_browser_esm.A.div` 146 height: ${p=>p.theme.cat.spacing.xl}; 147`,RewardItem=({reward,onEditReward,onDeleteReward,onClaimReward})=>{const{title,imageUrl,description,point,pendingUser}=reward,{session:{user},sessionUtil:{isGroupAdmin,isManager}}=(0,use_session.w)(),{gettext,ngettext}=(0,use_get_text.z)();return react.createElement(Card,{className:"cat-border","data-testid":`reward-item-${reward._id}`},react.createElement(reward_item_ImageWrapper,null,(isManager()||isGroupAdmin())&&react.createElement(Option,{className:"cat-flex cat-flex-row cat-gap-s"},react.createElement(stencil_generated.B$,{icon:"16-pen-outlined",iconOnly:!0,nativeAttributes:{"data-testid":"reward-edit-button"},size:"xs",onClick:onEditReward}),react.createElement(stencil_generated.B$,{icon:"16-editor-delete",iconOnly:!0,nativeAttributes:{"data-testid":"reward-delete-button"},size:"xs",onClick:onDeleteReward})),react.createElement(shared_react_components.Cr,{imageUrl,token:dist.JRo.Post,fallbackImage:react.createElement(FallbackImage,{icon:"star-circle-filled","data-testid":"reward-icon"}),"data-testid":"reward-image"})),react.createElement("div",{className:"cat-p-m cat-flex-col cat-text-center cat-items-center"},react.createElement(Title,{className:"cat-h4"}
147,title),react.createElement(Description,{className:"cat-text-m cat-m-0 cat-mt-s"},description),(isManager()||isGroupAdmin())&&react.createElement(PendingButtonWrapper,{className:"cat-mt-m"},pendingUser&&pendingUser.length>0&&react.createElement(stencil_generated.B$,{variant:"outlined",color:"primary",icon:"external-link-outlined",size:"s",nativeAttributes:{"data-testid":"pending-claims-button"},url:`/#/reward/${reward._id}/pending?groupId=${reward.groupId}`},pendingUser.length," ",ngettext(gettext("claim pending"),gettext("claims pending"),pendingUser.length))),react.createElement("div",{className:"cat-mt-l cat-flex cat-items-center cat-gap-xs"},react.createElement(stencil_generated.k0,{icon:"tag-outlined",size:"xl"}),react.createElement("h5",{className:"cat-h5"},point," ",ngettext(gettext("point"),gettext("points"),point))),react.createElement(stencil_generated.QS,{content:gettext("You do not have enough points for this reward. Share more to earn more points."),placement:"bottom",disabled:user.Coin>=point,size:"s"},react.createElement(stencil_generated.B$,{style:{width:"fit-content"},className:"cat-mt-l",variant:"filled",disabled:point>user.Coin,color:"primary",onClick:()=>{if(user.Coin<point){const errorMessage=gettext("You do not have enough points for this reward. Share more to earn more points!");return(0,toast.Kf)({message:errorMessage})}onClaimReward()},nativeAttributes:{"data-testid":"reward-claim-button"}},gettext("Claim")))))},RewardGrid=emotion_styled_browser_esm.A.div` 148 --grid-min: 250px; 149`,RewardPage=()=>{const{gettext}=(0,use_get_text.z)(),[isLoading,setIsLoading]=react.useState(!1),[rewards,setRewards]=react.useState(null),[rewardToDelete,setRewardToDelete]=react.useState(null),[rewardToClaim,setRewardToClaim]=react.useState(null),[rewardToEdit,setRewardToEdit]=react.useState(null),[selectedGroup,setSelectedGroup]=react.useState(null);(0,use_document_title.r)({title:gettext("Rewards")});const{session:{user,company:{isGroupEnabled}},sessionUtil:{isGroupAdmin,isManager}}=(0,use_session.w)(),fetchRewards=react.useCallback((async()=>{var _a,_b;setIsLoading(!0),setRewards(null);const[response,error]=await(0,util.Oi)((()=>api.gM.getRewardList((null==selectedGroup?void 0:selectedGroup.value)||user.groupId)));if(setIsLoading(!1),error)return(0,toast.Kf)({message:null!==(_a=(0,string_utils.fi)(error))&&void 0!==_a?_a:gettext("Failed to load rewards. Please try again.")}),void tracking_utils.A.error(null!==(_b=(0,string_utils.fi)(error))&&void 0!==_b?_b:"Failed to load rewards. Please try again.","RewardPage.fetchRewards",(0,string_utils.hT)(error));setRewards(response.data)}),[user.groupId,gettext,selectedGroup]);(0,react.useEffect)((()=>{selectedGroup&&fetchRewards()}),[fetchRewards,selectedGroup]);const handleCloseDialog=shouldRefetch=>{shouldRefetch&&fetchRewards(),setRewardToClaim(null),setRewardToDelete(null),setRewardToEdit(null)},toolbar=isManager()||isGroupAdmin()?react.createElement("div",{className:"cat-flex-row cat-gap-m"},react.createElement(stencil_generated.B$,{color:"primary",variant:"filled",icon:"plus-outlined",onClick:()=>setRewardToEdit({title:"",imageUrl:"",description:"",point:0,groupId:(null==selectedGroup?void 0:selectedGroup.value)||user.groupId}),nativeAttributes:{"data-testid":"new-reward-button"}},gettext("New reward")),react.createElement(stencil_generated.B$,{color:"primary",variant:"outlined",icon:"list-unordered-outlined",url:`/#/reward/delivered?groupId=${(null==selectedGroup?void 0:selectedGroup.value)||user.groupId}`,nativeAttributes:{"data-testid":"deliver-reward-list"}},gettext("List of delivered rewards"))):null;return react.createElement(react.Fragment,null,react.createElement("div",{className:"cat-flex cat-flex-row cat-items-end cat-gap-m"},react.createElement("div",{className:"cat-flex-1"},react.createElement(header_with_group_selection.ve,{isGroupSelectionEnabled:isGroupEnabled&&isManager(),onGroupSelection:setSelectedGroup,selectedGroup,title:gettext("Rewards"),testId:"page-header",toolbar,isNoFilterOptionEnabled:!1}))),isLoading?react.createElement("div",{className:"cat-flex cat-justify-center cat-mt-l"},react.createElement(stencil_generated.K0,{size:"xl","data-testid":"loading-indicator"})):react.createElement(react.Fragment,null,rewards&&0!==rewards.length?react.createElement(RewardGrid,{className:"cat-grid cat-grid-auto cat-gap-m cat-mv-l"},null==rewards?void 0:rewards.map((reward=>react.createElement(RewardItem,{key:reward._id,reward,onDeleteReward:()=>setRewardToDelete(reward),onEditReward:()=>setRewardToEdit(reward),onClaimReward:()=>setRewardToClaim(reward)})))):react.createElement("div",{className:"cat-flex cat-flex-col cat-items-center cat-p-xl"},react.createElement("h4",{className:"cat-h4 cat-mb-m"},gettext("Nothing here yet")),react.createElement("img",{src:"/images/empty-state.svg",alt:"",className:"cat-mt-xl","aria-hidden":!0}))),rewardToDelete&&react.createElement(DeleteRewardDialog,{onClose:handleCloseDialog,reward:rewardToDelete}),rewardToClaim&&react.createElement(ClaimRewardDialog,{onClose:handleCloseDialog,reward:rewardToClaim}),rewardToEdit&&selectedGroup&&react.createElement(AddEditRewardDialog,{groupId:selectedGroup.value,reward:rewardToEdit,onClose:handleCloseDialog}))}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.