PageSourceSearch

https://buildertrend.net/app/static/MassEntityEdit-B1FIRefx.js

js buildertrend.net collected 2026-10-02 10:38:45 UTC 17,191 bytes, 4 lines download raw bytes

1import{k as t,r as p,J as X,A as je,e as Ce,bi as U,I as be}from"./vendor-frozen-BjHTscMc.js";import{m8 as se,he as g,bm as _,b5 as ae,gK as ge,W as ye,ae as Ee,J as x,ar as Me,as as Fe,p as R,R as ne,O as ie,b4 as oe,l as G,gP as we,n as Z,ax as De,eS as Ne,d2 as Te,bk as Se,a3 as ee,m9 as Oe}from"./index-BXLY1or4.js";import{B as Re}from"./BulkAction-BKsxLtjh.js";import{S as ke,U as Be,T as le,N as re,C as Ae,D as de,d as ce,e as ue,f as me,g as W,h as Ie,b as $,i as Ve,G as $e}from"./massEdit.api.types-C4CdDG73.js";import{C as qe}from"./Currency-vBwVcJNE.js";import{C as Pe}from"./customFieldAssociatedType-Brb4ETgO.js";import{b as Le,a as Ue,D as _e}from"./useJobWorkCalendars-CXP_9fQj.js";import{c as Ge}from"./customFieldValues.util-DK-ub5pW.js";import{B as ze}from"./BTDatePickerDate-D5iISZso.js";import{M as fe}from"./IconCalendarBlank-B9MCb2UC.js";import{B as xe}from"./BTInput-BCkEBvP_.js";import{B as Je}from"./BTInputNumber-CsCuvC3c.js";import{D as We}from"./DateRangeDisplayDate-1PhoJK7B.js";import{B as He}from"./BTTextArea-6grCZpdh.js";function Ye({id:e,setFieldValue:s,setFieldTouched:a,fieldValue:n,option:i,autoFocus:o}){const r=n.value;return t.jsx(qe,{id:e,"data-testid":e,onChange:(c,d)=>{s(c,d??0)},onBlur:a,value:r,min:i.min??0,max:i.max,allowNegative:!1,decimalScale:2,autoFocus:o})}function Ke(e){const s={builderId:0,customFieldId:e.customFieldId,label:e.title,tooltipText:e.tooltip??null,isRequired:e.isRequired,dataType:se(e.customFieldDataType)};if(e.customFieldDataType===g.DropDownList||e.customFieldDataType===g.DropDownCheckList||e.customFieldDataType===g.ListOfUsers||e.customFieldDataType===g.ListOfSubs||e.customFieldDataType===g.MultiSelectUsers||e.customFieldDataType===g.MultiSelectSubs){const n=e.options.map(i=>({id:i.id,text:i.text,sortOrder:i.sortOrder}));return{...s,options:n}}return e.customFieldDataType===g.File?{...s,allowedFileTypes:e.allowedFileTypes??null}:s}function Qe({id:e,setFieldValue:s,setFieldTouched:a,fieldValue:n,option:i,autoFocus:o}){const r=p.useMemo(()=>Ke(i),[i]),c=p.useMemo(()=>{const u=Ge(i.customFieldId,se(i.customFieldDataType),Pe.Tasks,0,n.value);return u?[u]:[]},[i,n.value]),d=p.useCallback((u,h)=>{s(e,h)},[e,s]),f=p.useCallback(()=>{a(e,!0)},[e,a]);return t.jsx(Le,{customFieldDefinitions:[r],customFieldValues:c,readOnly:!1,hideLabel:!0,autoFocus:o,formMode:"always-editing",onChange:d,onBlur:f,className:"CustomFieldMassEditFormControl"})}function Xe({id:e,setFieldValue:s,setFieldTouched:a,fieldValue:n,autoFocus:i,errors:o,touched:r}){const[c,d]=p.useState(i??!1),f=X(o,e)!==void 0&&X(r,e)!==void 0;return t.jsxs("div",{className:`DateMassEditPropertyContainer ${!c&&!n.value?"DateMassEditIconView":""}${f?" DateMassEditError":""}`,onClick:()=>{d(!0)},children:[!c&&!n.value&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"DateMassEditPlaceholder",children:"Select date"}),t.jsx(fe,{})]}),(c||n.value)&&t.jsx(ze,{id:e,"data-testid":e,value:n.value,onChange:(u,h)=>{s(u,h),d(!1)},onBlur:()=>{a(e,!0),d(!1)},autoFocus:!0,className:"DateMassDatePicker"})]})}function Ze(){return t.jsx(xe,{id:"emptyMassEditControl","data-testid":"emptyMassEditControl",value:"",onChange:()=>{},disabled:!0})}function et({id:e,setFieldValue:s,setFieldTouched:a,fieldValue:n,option:i,autoFocus:o}){const r=n.value;return t.jsx(Je,{id:e,"data-testid":e,onChange:s,onBlur:a,value:r,min:i.min,max:i.max,allowNull:i.allowNull,autoFocus:o})}function tt({id:e,option:s,setFieldValue:a,setFieldTouched:n,fieldValue:i,autoFocus:o}){return t.jsx(_,{id:e,"data-testid":e,treeData:s.options,multiple:s.isMutliSelect,onChange:a,onBlur:n,value:i.value,defaultOpen:o,dropdownClassName:"MassEditDropdown"})}const st=[],pe=p.createContext(null);function Gt({jobIds:e,children:s}){return t.jsx(pe.Provider,{value:e,children:s})}function at(){const e=p.useContext(pe)??st,s=e.length===1?e[0]:void 0,a=p.useMemo(()=>s===void 0?[]:[s],[s]),n=Ue(a);return s===void 0?void 0:n[s]}function nt({id:e,setFieldValue:s,fieldValue:a}){const[n,i]=p.useState(!1),o=at(),r=a.value,c=r?.startDate??null,d=r?.endDate??null,f=r?.startTime??null,u=r?.endTime??null,h=(E,N,j,O)=>{s(e,{startDate:E,endDate:N,startTime:j,endTime:O})},v=()=>i(!1),y=!!(c||d),D=!!(f||u);function b(E,N){if(!N)return E;const[j,O,S]=N.split(":").map(Number);if(Number.isNaN(j)||Number.isNaN(O))return E;const k=new Date(E);return k.setHours(j,O,Number.isNaN(S)?0:S,0),k}return t.jsx(ae,{trigger:"click",visible:n,onVisibleChange:i,placement:"bottomLeft",breakWord:!1,disabled:!1,widthType:"unrestr
1icted",borderless:!0,destroyTooltipOnHide:!0,shouldCloseOnScroll:!1,content:t.jsx(_e,{rangeMode:"optional",showTime:!0,focusOnMount:!0,startDate:c??void 0,endDate:d??void 0,startTime:f,endTime:u,workCalendar:o,onChange:h,onClose:v}),children:t.jsx("div",{className:"TaskDurationMassEditTrigger","data-testid":"task-duration-mass-edit-trigger",children:y?t.jsx(We,{startDate:b(c??d,c?f:u),endDate:c&&d?b(d,u):void 0,showTime:D,hideEndTime:!u}):t.jsx(fe,{})})})}function it({id:e,setFieldValue:s,setFieldTouched:a,fieldValue:n,option:i,autoFocus:o}){const r=n.value;return i.multiLine?t.jsx(He,{id:e,"data-testid":e,onChange:s,onBlur:a,value:r,maxLength:i.maxLength,autoFocus:o}):t.jsx(xe,{id:e,"data-testid":e,onChange:s,onBlur:a,value:r,max:i.maxLength,autoFocus:o})}function ot({id:e,option:s,setFieldValue:a,setFieldTouched:n,fieldValue:i,autoFocus:o}){return t.jsx(ge,{id:e,"data-testid":e,treeData:s.options,multiple:s.isMutliSelect,onChange:a,onBlur:n,value:i.value,defaultOpen:o,dropdownClassName:"MassEditDropdown"})}function lt(e){const{fieldValue:s,option:a,valueId:n,autoFocus:i}=e;return t.jsxs(t.Fragment,{children:[s.id&&a&&t.jsxs(t.Fragment,{children:[a instanceof ke&&t.jsx(tt,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof Be&&t.jsx(ot,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof le&&t.jsx(it,{...e,option:a,id:n,fieldValue:s,autoFocus:i}),a instanceof re&&t.jsx(et,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof Ae&&t.jsx(Ye,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof de&&t.jsx(Xe,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof ce&&t.jsx(nt,{...e,id:n,option:a,fieldValue:s,autoFocus:i}),a instanceof ue&&t.jsx(Qe,{...e,id:n,option:a,fieldValue:s,autoFocus:i})]}),!a&&t.jsx(Ze,{})]})}const z="You cannot edit the same field multiple times",J="You cannot add and remove the same field at once",rt=[new G({id:$.Add,name:"Add"}),new G({id:$.Remove,name:"Remove"})];function dt(e,s,a){const n=[];for(const i of a){const o=Number(i.id),r=s.filter((u,h)=>h!==e&&u.id===o);if(r.length===0)continue;if(!(i.extraData instanceof W&&i.extraData.showAddRemoveOption)){n.push(o);continue}const d=r.some(u=>u.addOrRemove===$.Add),f=r.some(u=>u.addOrRemove===$.Remove);d&&f&&n.push(o)}return n}const te=({tooltip:e,index:s})=>t.jsx("div",{className:"TooltipWrapper",children:t.jsx(ae,{content:e,"data-testid":`massEditFieldTooltip-${s}`,mouseEnterDelay:.2,trigger:["hover","click"],children:t.jsx(Ne,{style:{cursor:"help"}})})}),ct=({error:e})=>e===z?t.jsx(Z,{className:"margin-bottom-md",message:z,"data-testid":"massEditNonUniqueError",showIcon:!0,type:"error"}):e===J?t.jsx(Z,{className:"margin-bottom-md",message:J,"data-testid":"massEditPushPopError",showIcon:!0,type:"error"}):null;function ut(e){const{handleSubmit:s,values:a,setFieldValue:n,bulkActionStep:i,options:o,setFieldTouched:r,setValues:c,errors:d,getDirtyTrackingProps:f,onCancel:u,title:h}=e,[v,y]=p.useState(0),[D,b]=p.useState(null),[E,N]=p.useState({}),[j,O]=p.useState({}),S=Me(`(max-width: ${Fe.sm}px)`),k=m=>{if(!S)return;const l=dt(m,a.fields,o);return l.length>0?l:void 0},q=()=>{const m=a.fields.length,l=[...a.fields,new me];n("fields",l),b(null),requestAnimationFrame(()=>{const C=document.querySelector(".ModalContentContainer");C&&(C.scrollTop=C.scrollHeight),requestAnimationFrame(()=>{y(m),N(M=>({...M,[m]:(M[m]??0)+1}))})})},H=(m,l,C)=>{Ce.flushSync(()=>{c({...a,fields:a.fields.map((M,B)=>B===m?{...M,id:l,value:void 0,fieldType:C}:M)})}),r(`fields[${m}].value`,!1),y(-1),requestAnimationFrame(()=>{requestAnimationFrame(()=>{b(m),O(M=>({...M,[m]:(M[m]??0)+1}))})})},w=m=>{const l=[...a.fields];l.splice(m,1),n("fields",l)},T=()=>{we(f,{onCloseWithSave:s,onCloseWithoutSave:u}).beforeClose()};return i.header(t.jsx("span",{className:"px-3",children:h})).footer(t.jsxs(t.Fragment,{children:[t.jsx(R,{type:"primary","data-testid":"bulkActionContinue",onClick:()=>s(),children:"Save"}),t.jsx(R,{type:"secondary","data-testid":"bulkActionCancel",onClick:T,children:"Cancel"}),t.jsx("div",{className:"ModalFooterContent",children:t.jsx(R,{type:"secondary","data-testid":"addField",onClick:q,icon:t.jsx(ne,{}),children:"Field"})})]})).onModalClose(T).content(t.jsx(ie,{className:"MassEdit",children:t.jsxs(oe,{children:[d&&d.fields&&typeof d.fields=="string"&&t.jsx(ct,{error:d.fields}),a.fields.map((m,l)=>{const C=`fields[${l}]`,M=`${C}.id`,B=`${C}.value`,F=o.find(A=>Number(A.id)===m.id)?.extraData,he=F?.title,I=F?.helperText?F.helperText:void 0,ve=F instanceof W&&F.showAddRemoveOption,Y=t.jsx(_,{id:M,"data-testid":M,treeData:o,multiple:!1,defaultOpen:l===v,dropdownClassName:"MassEditDropdown",disabledIds:k(l),onChange:(A,L)=>H(l,L,Ie.getMassEditOptionFromClass(F)),onBlur:r,value:m.id},E[l]??0),V=ve?t.jsx(_,{id:`${C}.addOrRemove`,"data-testid":`${C}.addOrRemove`,treeData:rt,multiple:!1,value:m.addOrRemove,dropdownClassName:"MassEditDropdown",onChange:(A,L)=>{n(`${C}.addOrRemove`,L)},onBlur:r}):null,K=t.jsx(lt,{fieldValue:m,option:F,valueId:B,autoFocus:l===D,...e},j[l]??0),P=t.jsx(R,{className:"RemoveFieldButton","data-testid":"removeField",type:"tertiary",onClick:()=>w(l),"aria-label":"Remove field",children:t.jsx(De,{size:"sm"})}),Q=t.jsx(Te,{name:B,children:A=>t.jsx("div",{className:"mt-1 text-sm text-fg-error","data-testid":`${B}.error`,children:A})});return S?t.jsx("div",{className:"mb-3 last:mb-0",children:m.id?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center justify-between gap-2 mb-2",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx("span",{className:"font-semibold truncate",children:he}),F?.tooltip&&t.jsx(te,{tooltip:F.tooltip,index:l})]}),P]}),t.jsxs("div",{className:"flex items-start gap-2",children:[V&&t.jsx("div",{className:"w-25 flex-none",children:V}),t.jsxs("div",{className:"flex-1 min-w-0",children:[K,Q,I&&t.jsx("div",{className:"mt-1 text-sm text-fg-secondary",children:I})]})]})]}):t.jsxs("div",{className:"flex items-start gap-2",children:[t.jsx("div",{className:"flex-1 min-w-0",children:Y}),P]})},C):t.jsxs("div",{className:"flex items-start justify-between gap-2 mb-3 last:mb-0",children:[t.jsxs("div",{className:"flex flex-col gap-4 flex-1 min-w-0 sm:flex-row sm:gap-2",children:[t.jsxs("div",{className:"flex flex-row gap-2 sm:contents",children:[t.jsxs("div",{className:"flex items-start flex-1 min-w-0 sm:w-37 sm:flex-none",children:[t.jsx("div",{className:"w-full",children:Y}),F?.tooltip&&t.jsx(te,{tooltip:F.tooltip,index:l})]}),V&&t.jsx("div",{className:"w-25 flex-none",children:V})]}
1),t.jsxs("div",{className:"sm:flex-auto sm:min-w-0 w-full",children:[K,Q,I&&t.jsx("div",{className:"mt-1 text-sm text-fg-secondary",children:I})]})]}),P]},C)})]})})).render()}function mt(e){let s=!0;return e.forEach((a,n)=>{const i=[...e];i.splice(n,1),s=s&&!i.some(o=>o.id===a.id&&o.addOrRemove===a.addOrRemove)}),s}function ft(e){let s=!0;return e.forEach((a,n)=>{const i=[...e];i.splice(n,1),s=s&&!i.some(o=>o.id===a.id&&o.addOrRemove!==a.addOrRemove&&je(o.value,a.value))}),s}const xt=e=>{let s=null;return e.isMutliSelect?s=x.array().required().of(x.number()):s=x.number().required(),s},pt=e=>{let s=x.string();return e.allowNull||(s=s.required()),e.maxLength&&(s=s.max(e.maxLength)),s},ht=e=>{let s=x.number();return e.allowNull||(s=s.required()),e.max&&(s=s.max(e.max)),e.min&&(s=s.min(e.min)),s},vt=()=>{let e=x.date();return e=e.required(),e},jt=()=>x.mixed(),Ct=e=>{const s=e.customFieldDataType;if(s===g.Text||s===g.MultiLineText){let a=x.string();return e.isRequired&&(a=a.required()),a}if(s===g.DropDownList){let a=x.number();return e.isRequired&&(a=a.required()),a}if(s===g.DropDownCheckList){let a=x.string();return e.isRequired&&(a=a.required("At least one option is required")),a}return s===g.File?x.string().required("Please upload a valid file"):x.mixed()},bt=e=>x.mixed().when("id",(s,a)=>{const n=e.options.find(i=>Number(i.id)===s)?.extraData;return n instanceof W?xt(n):n instanceof le?pt(n):n instanceof re?ht(n):n instanceof de?vt():n instanceof ce?jt():n instanceof ue?Ct(n):a}).label("Value"),gt=e=>x.object().shape({fields:x.array().of(x.object().shape({id:x.number().required().label("Field"),value:bt(e),addOrRemove:x.mixed().label("Add or Remove")})).required().label("Fields").test("ValidateUniqueFields",z,mt).test("ValidatePushPopFields",J,ft)}),yt=Ee({validationSchema:gt,validateOnChange:!0,validateOnBlur:!0,enableReinitialize:!0,enableDirtyTracking:!1,mapPropsToValues:()=>({fields:[new me]}),handleSubmit:(e,{props:s,setSubmitting:a})=>{(async()=>(a(!0),await s.onSubmit(e,s.bulkActionStep),a(!1)))()}})(ut),Et=ye(yt)("Could not load Mass Edit"),Mt=({onCancel:e,bulkActionStep:s,title:a})=>s.header(t.jsx("span",{className:"px-3",children:a})).footer(t.jsxs(t.Fragment,{children:[t.jsx(R,{type:"primary","data-testid":"bulkActionContinue",disabled:!0,children:"Save"}),t.jsx(R,{type:"secondary","data-testid":"bulkActionCancel",onClick:e,children:"Cancel"}),t.jsx("div",{className:"ModalFooterContent",children:t.jsx(R,{type:"secondary","data-testid":"addField",disabled:!0,icon:t.jsx(ne,{}),children:"Field"})})]})).onModalClose(e).content(t.jsx(ie,{children:t.jsx(oe,{children:t.jsxs("div",{className:"flex items-start justify-between gap-2 pb-2",children:[t.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-w-0 sm:flex-row",children:[t.jsx("div",{className:"sm:w-37 sm:flex-none",children:t.jsx(U.Input,{active:!0,size:"default",className:"w-full min-w-full"})}),t.jsx("div",{className:"sm:flex-auto sm:min-w-0",children:t.jsx(U.Input,{active:!0,size:"default",className:"w-full min-w-full"})})]}),t.jsx("div",{className:"w-8 h-8 flex-none",children:t.jsx(U.Input,{active:!0,size:"default",className:"w-full min-w-full"})})]})})})).render();function Ft(e){const s=new Set;return e.forEach(a=>{a.entityData&&Object.keys(a.entityData).forEach(n=>s.add(n))}),Array.from(s)}function wt(e){return e.includes(",")||e.includes('"')||e.includes(`
2`)?`"${e.replace(/"/g,'""')}"`:e}function Dt(e){return e==null?"":typeof e=="object"?JSON.stringify(e):`${e}`}function Nt(e,s){const a=Ft(e),n=["Status","Reason",...a],i=e.map(f=>{const u=[f.success?"Success":"Failed",f.reason??""],h=a.map(v=>Dt(f.entityData?.[v]));return[...u,...h]}),o=[n.join(","),...i.map(f=>f.map(wt).join(","))].join(`
3`),r=new Blob([o],{type:"text/csv;charset=utf-8;"}),c=URL.createObjectURL(r),d=document.createElement("a");d.href=c,d.download=`MassEdit_${s}_Results.csv`,d.click(),URL.revokeObjectURL(c)}const Tt=Se.track({component:"MassEntityEdit"})(({handler:e,editType:s,entityIds:a,onComplete:n,onCancel:i})=>{const[o,r]=p.useState(null),c=Ve(s,a.length),d=p.useCallback(async()=>{try{const y=await e.getMassEditOptions(a).response;if(y?.options){const D=y.options.map(b=>new G({name:b.title,id:b.id,extraData:b}));r(D)}}catch(v){ee(v),i()}},[e,a,i]),f=async(v,y)=>{const D=[];let b=0,E=0,N=0;const j=await y.multiStepAction({data:a,batchSize:$e(s),processBatch:async w=>{try{const T={entityIds:w,fields:v.fields},l=await e.updateMassEdit(T).response;return l?.entityResults&&D.push(...l.entityResults),l?.successCount!=null&&(b+=l.successCount),l?.partialSuccessCount!=null&&(E+=l.partialSuccessCount),l?.totalCount!=null&&(N+=l.totalCount),l?.message&&!l.entityResults&&be.success(l.message),l?.successCount??w.length}catch(T){throw ee(T),T}},label:()=>`Saving ${c}...`,secondaryLabel:(w,T)=>`${w} of ${T} completed`}),S=D.filter(w=>!w.success).length>0,k=N||j.totalCount,q=b||j.successCount;(j.cancelled||S?y.warning:y.complete)({primaryLabel:j.cancelled?"E
3dit Cancelled":"Edit Complete",secondaryLabel:t.jsxs("div",{style:{textAlign:"center"},children:[`Saved ${q} of ${k} ${c}`,E>0&&t.jsx("div",{children:`${E} ${c} partially saved (some fields failed validation)`}),S&&t.jsx("div",{className:"margin-top-md",children:t.jsx("a",{href:"#",onClick:w=>{w.preventDefault(),Nt(D,c)},children:"Click here to download the details on failed processes"})}),j.errorMessage&&t.jsx("div",{className:"margin-top-md",style:{color:Oe},children:j.errorMessage})]}),onOk:n})};p.useEffect(()=>{d()},[d]);const u=o===null,h=`Edit ${a.length} ${c}`;return t.jsx(Re,{onCancel:i,onComplete:async()=>n(),width:"650px",className:"MassEditModal BulkActionAboveActionBar",centered:!1,closable:!1,disableAnimation:!0,mobileAsSheet:!0,removeBodyPadding:!0,renderSteps:[v=>u?t.jsx(Mt,{onCancel:i,bulkActionStep:v,title:h}):t.jsx(Et,{options:o,title:h,onSubmit:f,onCancel:i,bulkActionStep:v,modalConfig:{parentRoute:"",beforeClose:i}})]})}),zt=Object.freeze(Object.defineProperty({__proto__:null,default:Tt},Symbol.toStringTag,{value:"Module"}));export{Tt as M,Gt as T,zt as a};
4//# sourceMappingURL=MassEntityEdit-B1FIRefx.js.map

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.