1"use strict";(globalThis["webpackChunkdatabase2ui"]=globalThis["webpackChunkdatabase2ui"]||[]).push([[178],{4604(e,s,t){const a=[{code:"AL",name:"Alabama"},{code:"AK",name:"Alaska"},{code:"AZ",name:"Arizona"},{code:"AR",name:"Arkansas"},{code:"CA",name:"California"},{code:"CO",name:"Colorado"},{code:"CT",name:"Connecticut"},{code:"DE",name:"Delaware"},{code:"DC",name:"District of Columbia"},{code:"FL",name:"Florida"},{code:"GA",name:"Georgia"},{code:"HI",name:"Hawaii"},{code:"ID",name:"Idaho"},{code:"IL",name:"Illinois"},{code:"IN",name:"Indiana"},{code:"IA",name:"Iowa"},{code:"KS",name:"Kansas"},{code:"KY",name:"Kentucky"},{code:"LA",name:"Louisiana"},{code:"ME",name:"Maine"},{code:"MD",name:"Maryland"},{code:"MA",name:"Massachusetts"},{code:"MI",name:"Michigan"},{code:"MN",name:"Minnesota"},{code:"MS",name:"Mississippi"},{code:"MO",name:"Missouri"},{code:"MT",name:"Montana"},{code:"NE",name:"Nebraska"},{code:"NV",name:"Nevada"},{code:"NH",name:"New Hampshire"},{code:"NJ",name:"New Jersey"},{code:"NM",name:"New Mexico"},{code:"NY",name:"New York"},{code:"NC",name:"North Carolina"},{code:"ND",name:"North Dakota"},{code:"OH",name:"Ohio"},{code:"OK",name:"Oklahoma"},{code:"OR",name:"Oregon"},{code:"PA",name:"Pennsylvania"},{code:"RI",name:"Rhode Island"},{code:"SC",name:"South Carolina"},{code:"SD",name:"South Dakota"},{code:"TN",name:"Tennessee"},{code:"TX",name:"Texas"},{code:"UT",name:"Utah"},{code:"VT",name:"Vermont"},{code:"VA",name:"Virginia"},{code:"WA",name:"Washington"},{code:"WV",name:"West Virginia"},{code:"WI",name:"Wisconsin"},{code:"WY",name:"Wyoming"}],r=a.reduce((e,s)=>(e[s.code]=s.name,e),{});t.d(s,["I",0,a,"P",0,r])},5255(e,s,t){var a=t(6432),r=t(3363);const o="homepage-carousel-items";class i{getAll(){return a.A.get(o,{headers:(0,r.A)()})}create(e,s){const t=new FormData,i=JSON.stringify(s),n=new Blob([i],{type:"application/json"});
1return t.append("document",n),t.append("imageFile",e),a.A.post(o,t,{headers:(0,r.A)()})}update(e,s,t){const i=new FormData,n=JSON.stringify(t),l=new Blob([n],{type:"application/json"});return i.append("document",l),s&&i.append("imageFile",s),a.A.patch(`${o}/${e}`,i,{headers:(0,r.A)()})}delete(e){return a.A.delete(`${o}/${e}`,{headers:(0,r.A)()})}}const n=new i;t.d(s,["A",0,n])},1128(e,s,t){var a=t(6432),r=t(3363);const o="sponsors";class i{getAll(){return a.A.get(o,{headers:(0,r.A)()})}create(e,s){const t=new FormData,i=JSON.stringify(s),n=new Blob([i],{type:"application/json"});return t.append("document",n),t.append("imageFile",e),a.A.post(o,t,{headers:(0,r.A)()})}update(e,s,t){const i=new FormData,n=JSON.stringify(t),l=new Blob([n],{type:"application/json"});return i.append("document",l),s&&i.append("imageFile",s),a.A.patch(`${o}/${e}`,i,{headers:(0,r.A)()})}delete(e){return a.A.delete(`${o}/${e}`,{headers:(0,r.A)()})}}const n=new i;t.d(s,["A",0,n])},9787(e,s,t){const a=new Set(["jpg","jpeg","png","webp","gif","avif","tif","tiff"]),r=new Set(["image/jpeg","image/jpg","image/png","image/webp","image/gif","image/avif","image/tiff","image/x-tiff"]),o=e=>{const s=String(e||"").split(/[\\/]/).pop()||"",t=s.lastIndexOf(".");return t>=0?s.slice(t+1).toLowerCase():""},i=e=>{if(!e)return!1;const s="string"===typeof e.type?e.type.trim().toLowerCase():"";return r.has(s)||a.has(o(e.name))};t.d(s,["r",0,i])},4797(e,s,t){t.r(s),t.d(s,{default:()=>Ve});var a=t(641),r=t(33),o=t(3751);const i={key:0},n={class:"container mt-4 mb-5 text-secondary"},l={class:"row g-4"},d={class:"col-12 col-lg-9"},c={id:"sponsors-section"},m={class:"row mb-3"},u={class:"col-12 col-md-4"},p={class:"card mb-4"},g={class:"card-body"},h={class:"table-responsive"},b={class:"table align-middle mb-0"},v={key:0},k={style:{width:"150px"}},I=["src","alt"],L=["href"],y={class:"d-flex align-items-center"},f={class:"me-3"},C={class:"btn-group-vertical btn-group-sm",role:"group","aria-label":"Reorder sponsor"},w=["onClick","disabled"],M=["onClick","disabled"],S=["onClick","disabled"],A=["onClick","disabled"],F={class:"card"},O={class:"card-body"},E={class:"mb-4 text-secondary"},x={class:"row mb-3"},U={class:"col-12 col-md-6"},N={class:"col-12 col-md-6 mt-3 mt-md-0"},P={class:"row mb-3"},W={class:"col-12"},X={class:"form-label"},D={key:0},R={key:0,class:"mb-3"},$=["src","alt"],_={class:"mb-3"},H={class:"row row-cols-2 row-cols-md-3 row-cols-xl-4 g-2"},j={class:"form-check"},T=["value"],Q={class:"form-check-label"},V=["disabled"],q={key:2,class:"alert alert-success mt-3 mb-0",role:"alert"},J={key:3,class:"alert alert-danger mt-3 mb-0",role:"alert"},B={id:"homepage-carousel-section",class:"mt-5 pt-2"},K={key:1,class:"mt-5 text-center"};function G(e,s,t,G,z,Y){const Z=(0,a.g2)("AdminHomepageCarouselSettings");return(0,a.uX)(),(0,a.CE)(a.FK,null,[0==z.loading?((0,a.uX)(),(0,a.CE)("div",i,[(0,a.Lk)("div",n,[(0,a.Lk)("div",l,[s[20]||(s[20]=(0,a.Fv)('<div class="col-12 col-lg-3"><div class="card h-100"><div class="card-body"><h2 class="decorativeUnderline text-uppercase text-secondary mb-4">Admin Settings</h2><div class="list-group"><a href="#sponsors-section" class="list-group-item list-group-item-action"> Sponsors </a><a href="#homepage-carousel-section" class="list-group-item list-group-item-action"> Homepage Carousel </a></div><p class="form-text mt-3 mb-0"> Use this page to manage site-wide homepage sponsors and carousel content. </p></div></div></div>',1)),(0,a.Lk)("div",d,[(0,a.Lk)("div",c,[(0,a.Lk)("div",m,[s[7]||(s[7]=(0,a.Lk)("div",{class:"col-12 col-md-8"},[(0,a.Lk)("h2",{class:"decorativeUnderline text-uppercase text-light"},"Sponsors")],-1)),(0,a.Lk)("div",u,[(0,a.Lk)("button",{class:"btn btn-success float-md-end mt-3 mt-md-0",type:"button",onClick:s[0]||(s[0]=(...e)=>Y.startCreate&&Y.startCreate(...e))}," Add Sponsor ")])]),(0,a.Lk)("div",p,[(0,a.Lk)("div",g,[(0,a.Lk)("div",h,[(0,a.Lk)("table",b,[s[11]||(s[11]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",{scope:"col"},"Logo"),(0,a.Lk)("th",{scope:"col"},"Name"),(0,a.Lk)("th",{scope:"col"},"Link"),(0,a.Lk)("th",{scope:"col"},"States"),(0,a.Lk)("th",{scope:"col"},"Order"),(0,a.Lk)("th",{scope:"col"},"Actions")])],-1)),(0,a.Lk)("tbody",null,[0==z.sponsors.length?((0,a.uX)(),(0,a.CE)("tr",v,[...s[8]||(s[8]=[(0,a.Lk)("td",{colspan:"6",class:"text-center text-muted py-4"},"No sponsors have been configured yet.",-1)])])):(0,a.Q3)("",!0),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(z.sponsors,(e,t)=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id},[(0,a.Lk)("td",k,[(0,a.Lk)("img",{src:Y.sponsorImageUrl(e),alt:e.name,class:"img-fluid rounded shadow-sm"},null,8,I)]),(0,a.Lk)("td",null,(0,r.v_)(e.name),1),(0,a.Lk)("td",null,[(0,a.Lk)("a",{href:e.webpage,target:"_blank",rel:"noopener noreferrer"},(0,r.v_)(e.webpage),9,L)]),(0,a.Lk)("td",null,(0,r.v_)(Y.formatStates(e.states)),1),(0,a.Lk)("td",null,[(0,a.Lk)("div",y,[(0,a.Lk)("span",f,(0,r.v_)(e.sortOrder),1),(0,a.Lk)("div",C,[(0,a.Lk)("button",{class:"btn btn-outline-secondary",type:"button",title:"Move sponsor up","aria-label":"Move sponsor up",onClick:e=>Y.moveSponsor(t,-1),disabled:z.saving||0===t},[...s[9]||(s[9]=[(0,a.Lk)("i",{class:"bi bi-arrow-up","aria-hidden":"true"},null,-1)])],8,w),(0,a.Lk)("button",{class:"btn btn-outline-secondary",type:"button",title:"Move sponsor down","aria-label":"Move sponsor down",onClick:e=>Y.moveSponsor(t,1),disabled:z.saving||t===z.sponsors.length-1},[...s[10]||(s[10]=[(0,a.Lk)("i",{class:"bi bi-arrow-down","aria-hidden":"true"},null,-1)])],8,M)])])]),(0,a.Lk)("td",null,[(0,a.Lk)("button",{class:"btn btn-primary btn-sm me-2",type:"button",onClick:s=>Y.startEdit(e),disabled:z.saving},"Edit",8,S),(0,a.Lk)("button",{class:"btn btn-danger btn-sm",type:"button",onClick:s=>Y.deleteSponsor(e),disabled:z.saving}," Delete ",8,A)])]))),128))])])])])]),(0,a.Lk)("div",F,[(0,a.Lk)("div",O,[(0,a.Lk)("h3",E,(0,r.v_)(Y.isEditingSponsor?"Edit Sponsor":"Add Sponsor"),1),(0,a.Lk)("form",{onSubmit:s[6]||(s[6]=(0,o.D$)((...e)=>Y.submitSponsor&&Y.submitSponsor(...e),["prevent"])),enctype:"multipart/form-data"},[(0,a.Lk)("div",x,[(0,a.Lk)("div",U,[s[12]||(s[12]=(0,a.Lk)("label",{class:"form-label"},[(0,a.eW)("Sponsor Name: ("),(0,a.Lk)("small",{class:"cR4"},"required"),(0,a.eW)(")")],-1)),(0,a.bo)((0,a.Lk)("input",{type:"text",class:"form-control","onUpdate:modelValue":s[1]||(s[1]=e=>z.sponsorForm.name=e),placeholder:"ex: Foley-Baker",required:""},null,512),[[o.Jo,z.sponsorForm.name,void 0,{trim:!0}]]),s[13]||(s[13]=(0,a.Lk)("div",{class:"form-text"},"This is used as the logo alt text.",-1))]),(0,a.Lk)("div",N,[s[14]||(s[14]=(0,a.Lk)("label",{class:"form-label"},[(0,a.eW)("Website Link: ("),(0,a.Lk)("small",{class:"cR4"},"required"),(0,a.eW)(")")],-1)),(0,a.bo)((0,a.Lk)("input",{type:"text",class:"form-control","onUpdate:modelValue":s[2]||(s[2]=e=>z.sponsorForm.webpage=e),placeholder:"https://example.com/",required:""},null,512),[[o.Jo,z.sponsorForm.webpage,void 0,{trim:!0}]])])]),(0,a.Lk)("div",P,[(0,a.Lk)("div",W,[(0,a.Lk)("label",X,[(0,a.eW)((0,r.v_)(Y.isEditingSponsor?"(Optional) Replace ":"")+"Logo Image: ",1),Y.isEditingSponsor?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",D,[...s[15]||(s[15]=[(0,a.eW)("(",-1),(0,a.Lk)("span",{class:"cR4"},"required",-1),(0,a.eW)(")",-1)])]))]),(0,a.Lk)("input",{ref:"sponsorImageInput",class:"form-control",type:"file",accept:".jpg,.jpeg,.png,.webp,.gif,.avif,.tif,.tiff",onChange:s[3]||(s[3]=(...e)=>Y.handleImageChange&&Y.handleImageChange(...e))},null,544),s[16]||(s[16]=(0,a.Lk)("div",{class:"form-text"},"Accepted formats: JPG, PNG, WebP, GIF, AVIF, and TIFF. Maximum file size: 50MB.",-1)),s[17]||(s[17]=(0,a.Lk)("div",{class:"form-text"},"New sponsors are added to the end. Use the up and down arrows in the table to reorder them.",-1))])]),Y.currentPreviewUrl?((0,a.uX)(),(0,a.CE)("div",R,[(0,a.Lk)("img",{src:Y.currentPreviewUrl,alt:z.sponsorForm.name||"Sponsor preview",class:"img-fluid rounded shadow"},null,8,$)])):(0,a.Q3)("",!0),(0,a.Lk)("div",_,[s[18]||(s[18]=(0,a.Lk)("label",{class:"form-label"},"States Where This Sponsor Appears On Instrument Pages:",-1)),(0,a.Lk)("div",H,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(z.stateOptions,e=>((0,a.uX)(),(0,a.CE)("div",{class:"col",key:e.code},[(0,a.Lk)("label",j,[(0,a.bo)((0,a.Lk)("input",{class:"form-check-input",type:"checkbox","onUpdate:modelValue":s[4]||(s[4]=e=>z.sponsorForm.states=e),value:e.code},null,8,T),[[o.lH,z.sponsorForm.states]]),(0,a.Lk)("span",Q,(0,r.v_)(e.name),1)])]))),128))]),s[19]||(s[19]=(0,a.Lk)("div",{class:"form-text"},"Leave every state unchecked if the sponsor should only appear on the homepage.",-1))]),(0,a.Lk)("button",{type:"submit",class:"btn btn-primary me-3",disabled:z.saving}
1,(0,r.v_)(z.saving?"Saving...":Y.isEditingSponsor?"Update Sponsor":"Create Sponsor"),9,V),Y.isEditingSponsor?((0,a.uX)(),(0,a.CE)("button",{key:1,type:"button",class:"btn btn-secondary",onClick:s[5]||(s[5]=(...e)=>Y.startCreate&&Y.startCreate(...e))}," Cancel ")):(0,a.Q3)("",!0),z.successMessage?((0,a.uX)(),(0,a.CE)("div",q,(0,r.v_)(z.successMessage),1)):(0,a.Q3)("",!0),z.errorMessage?((0,a.uX)(),(0,a.CE)("div",J,(0,r.v_)(z.errorMessage),1)):(0,a.Q3)("",!0)],32)])])]),(0,a.Lk)("div",B,[(0,a.bF)(Z)])])])])])):(0,a.Q3)("",!0),1==z.loading?((0,a.uX)(),(0,a.CE)("div",K,[...s[21]||(s[21]=[(0,a.Lk)("h1",{class:"d-inline-block me-3 text-secondary"},"Loading...",-1),(0,a.Lk)("div",{class:"spinner-border text-secondary d-inline-block",role:"status"},[(0,a.Lk)("span",{class:"visually-hidden"},"Loading...")],-1)])])):(0,a.Q3)("",!0)],64)}const z={class:"row mb-3"},Y={class:"col-12 col-md-4"},Z={class:"card mb-4"},ee={class:"card-body"},se={key:0,class:"py-5 text-center"},te={key:1,class:"table-responsive"},ae={class:"table align-middle mb-0"},re={key:0},oe={style:{width:"220px"}},ie=["src","alt"],ne=["href"],le={class:"d-flex align-items-center"},de={class:"me-3"},ce={class:"btn-group-vertical btn-group-sm",role:"group","aria-label":"Reorder carousel item"},me=["onClick","disabled"],ue=["onClick","disabled"],pe=["onClick","disabled"],ge=["onClick","disabled"],he={class:"card"},be={class:"card-body"},ve={class:"mb-4 text-secondary"},ke={class:"row mb-3"},Ie={class:"col-12 col-md-5"},Le={class:"col-12 col-md-7 mt-3 mt-md-0"},ye={class:"form-label"},fe={key:0},Ce={class:"mb-3"},we={key:0,class:"mb-3"},Me=["src","alt"],Se=["disabled"],Ae={key:2,class:"alert alert-success mt-3 mb-0",role:"alert"},Fe={key:3,class:"alert alert-danger mt-3 mb-0",role:"alert"};function Oe(e,s,t,i,n,l){return(0,a.uX)(),(0,a.CE)("div",null,[(0,a.Lk)("div",z,[s[6]||(s[6]=(0,a.Lk)("div",{class:"col-12 col-md-8"},[(0,a.Lk)("h2",{class:"decorativeUnderline text-uppercase text-light"},"Homepage Carousel")],-1)),(0,a.Lk)("div",Y,[(0,a.Lk)("button",{class:"btn btn-success float-md-end mt-3 mt-md-0",type:"button",onClick:s[0]||(s[0]=(...e)=>l.startCreate&&l.startCreate(...e))}," Add Carousel Item ")])]),(0,a.Lk)("div",Z,[(0,a.Lk)("div",ee,[n.loading?((0,a.uX)(),(0,a.CE)("div",se,[...s[7]||(s[7]=[(0,a.Lk)("div",{class:"spinner-border text-secondary mb-3",role:"status"},[(0,a.Lk)("span",{class:"visually-hidden"},"Loading...")],-1),(0,a.Lk)("div",{class:"text-muted"},"Loading homepage carousel items...",-1)])])):((0,a.uX)(),(0,a.CE)("div",te,[(0,a.Lk)("table",ae,[s[11]||(s[11]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",{scope:"col"},"Image"),(0,a.Lk)("th",{scope:"col"},"Caption"),(0,a.Lk)("th",{scope:"col"},"Instrument"),(0,a.Lk)("th",{scope:"col"},"Order"),(0,a.Lk)("th",{scope:"col"},"Actions")])],-1)),(0,a.Lk)("tbody",null,[0==n.carouselItems.length?((0,a.uX)(),(0,a.CE)("tr",re,[...s[8]||(s[8]=[(0,a.Lk)("td",{colspan:"5",class:"text-center text-muted py-4"},"No homepage carousel items have been configured yet.",-1)])])):(0,a.Q3)("",!0),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(n.carouselItems,(e,t)=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id},[(0,a.Lk)("td",oe,[(0,a.Lk)("img",{src:l.carouselImageUrl(e),alt:e.caption||"Homepage carousel preview",class:"img-fluid rounded shadow-sm"},null,8,ie)]),(0,a.Lk)("td",null,(0,r.v_)(e.caption),1),(0,a.Lk)("td",null,[(0,a.Lk)("a",{href:l.carouselItemLink(e),target:"_blank",rel:"noopener noreferrer"},(0,r.v_)(e.instrumentId),9,ne)]),(0,a.Lk)("td",null,[(0,a.Lk)("div",le,[(0,a.Lk)("span",de,(0,r.v_)(e.sortOrder),1),(0,a.Lk)("div",ce,[(0,a.Lk)("button",{class:"btn btn-outline-secondary",type:"button",title:"Move carousel item up","aria-label":"Move carousel item up",onClick:e=>l.moveCarouselItem(t,-1),disabled:n.saving||0===t},[...s[9]||(s[9]=[(0,a.Lk)("i",{class:"bi bi-arrow-up","aria-hidden":"true"},null,-1)])],8,me),(0,a.Lk)("button",{class:"btn btn-outline-secondary",type:"button",title:"Move carousel item down","aria-label":"Move carousel item down",onClick:e=>l.moveCarouselItem(t,1),disabled:n.saving||t===n.carouselItems.length-1},[...s[10]||(s[10]=[(0,a.Lk)("i",{class:"bi bi-arrow-down","aria-hidden":"true"},null,-1)])],8,ue)])])]),(0,a.Lk)("td",null,[(0,a.Lk)("button",{class:"btn btn-primary btn-sm me-2",type:"button",onClick:s=>l.startEdit(e),disabled:n.saving},"Edit",8,pe),(0,a.Lk)("button",{class:"btn btn-danger btn-sm",type:"button",onClick:s=>l.deleteCarouselItem(e),disabled:n.saving}," Delete ",8,ge)])]))),128))])])]))])]),(0,a.Lk)("div",he,[(0,a.Lk)("div",be,[(0,a.Lk)("h3",ve,(0,r.v_)(l.isEditingCarouselItem?"Edit Carousel Item":"Add Carousel Item"),1),(0,a.Lk)("form",{onSubmit:s[5]||(s[5]=(0,o.D$)((...e)=>l.submitCarouselItem&&l.submitCarouselItem(...e),["prevent"])),enctype:"multipart/form-data"},[(0,a.Lk)("div",ke,[(0,a.Lk)("div",Ie,[s[12]||(s[12]=(0,a.Lk)("label",{class:"form-label"},[(0,a.eW)("Instrument ID: ("),(0,a.Lk)("small",{class:"cR4"},"required"),(0,a.eW)(")")],-1)),(0,a.bo)((0,a.Lk)("input",{type:"number",class:"form-control",min:"1","onUpdate:modelValue":s[1]||(s[1]=e=>n.carouselForm.instrumentId=e),placeholder:"3373",required:""},null,512),[[o.Jo,n.carouselForm.instrumentId,void 0,{number:!0}]]),s[13]||(s[13]=(0,a.Lk)("div",{class:"form-text"},"This is used for the slide link target at `/instruments/:id`.",-1))]),(0,a.Lk)("div",Le,[(0,a.Lk)("label",ye,[(0,a.eW)((0,r.v_)(l.isEditingCarouselItem?"(Optional) Replace ":"")+"Carousel Image: ",1),l.isEditingCarouselItem?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",fe,[...s[14]||(s[14]=[(0,a.eW)("(",-1),(0,a.Lk)("span",{class:"cR4"},"required",-1),(0,a.eW)(")",-1)])]))]),(0,a.Lk)("input",{ref:"carouselImageInput",class:"form-control",type:"file",accept:".jpg,.jpeg,.png,.webp,.gif,.avif,.tif,.tiff",onChange:s[2]||(s[2]=(...e)=>l.handleImageChange&&l.handleImageChange(...e))},null,544),s[15]||(s[15]=(0,a.Lk)("div",{class:"form-text"},"Accepted formats: JPG, PNG, WebP, GIF, AVIF, and TIFF. Maximum file size: 50MB.",-1)),s[16]||(s[16]=(0,a.Lk)("div",{class:"form-text"},"New carousel items are added to the end. Use the up and down arrows in the table to reorder them.",-1))])]),(0,a.Lk)("div",Ce,[s[17]||(s[17]=(0,a.Lk)("label",{class:"form-label"},[(0,a.eW)("Caption Text: ("),(0,a.Lk)("small",{class:"cR4"},"required"),(0,a.eW)(")")],-1)),(0,a.bo)((0,a.Lk)("textarea",{class:"form-control",rows:"3","onUpdate:modelValue":s[3]||(s[3]=e=>n.carouselForm.caption=e),placeholder:"Henry Niemann (1897) - Old Otterbein United Methodist Church, Baltimore, Maryland",required:""},null,512),[[o.Jo,n.carouselForm.caption,void 0,{trim:!0}]])]),l.currentPreviewUrl?((0,a.uX)(),(0,a.CE)("div",we,[(0,a.Lk)("img",{src:l.currentPreviewUrl,alt:n.carouselForm.caption||"Homepage carousel preview",class:"img-fluid rounded shadow"},null,8,Me)])):(0,a.Q3)("",!0),(0,a.Lk)("button",{type:"submit",class:"btn btn-primary me-3",disabled:n.saving},(0,r.v_)(n.saving?"Saving...":l.isEditingCarouselItem?"Update Carousel Item":"Create Carousel Item"),9,Se),l.isEditingCarouselItem?((0,a.uX)(),(0,a.CE)("button",{key:1,type:"button",class:"btn btn-secondary",onClick:s[4]||(s[4]=(...e)=>l.startCreate&&l.startCreate(...e))}," Cancel ")):(0,a.Q3)("",!0),n.successMessage?((0,a.uX)(),(0,a.CE)("div",Ae,(0,r.v_)(n.successMessage),1)):(0,a.Q3)("",!0),n.errorMessage?((0,a.uX)(),(0,a.CE)("div",Fe,(0,r.v_)(n.errorMessage),1)):(0,a.Q3)("",!0)],32)])])])}var Ee=t(5255),xe=t(9787);const Ue=52428800,Ne=(e=0)=>({instrumentId:null,caption:"",sortOrder:e}),Pe={name:"AdminHomepageCarouselSettings",data(){return{loading:!0,saving:!1,carouselItems:[],carouselForm:Ne(),editCarouselItemId:null,currentImageFile:null,previewImage:null,successMessage:"",errorMessage:""}},computed:{apiEndpoint(){return"https://api.pipeorgandatabase.org"},isEditingCarouselItem(){return null!==this.editCarouselItemId},editingCarouselItem(){return this.carouselItems.find(e=>e.id===this.editCarouselItemId)||null},currentPreviewUrl(){return this.previewImage?this.previewImage:this.editingCarouselItem?this.carouselImageUrl(this.editingCarouselItem):""}}
1,mounted(){this.loadCarouselItems()},beforeUnmount(){this.revokePreviewImage()},methods:{buildCarouselItemPayload(e,s=e.sortOrder){return{instrumentId:Number.isInteger(e.instrumentId)?e.instrumentId:null,caption:e.caption||"",sortOrder:Number.isInteger(s)?s:0}},getNextSortOrder(){if(0===this.carouselItems.length)return 10;const e=this.carouselItems.reduce((e,s)=>{const t=Number.isInteger(s.sortOrder)?s.sortOrder:0;return Math.max(e,t)},0);return e+10},revokePreviewImage(){this.previewImage&&(URL.revokeObjectURL(this.previewImage),this.previewImage=null)},clearMessages(){this.successMessage="",this.errorMessage=""},resetImageInput(){this.$refs.carouselImageInput&&(this.$refs.carouselImageInput.value="")},carouselImageUrl(e){return e.imagePath?this.apiEndpoint+e.imagePath:e.imageUrl||""},carouselItemLink(e){return`/instruments/${e.instrumentId}`},async moveCarouselItem(e,s){const t=e+s;if(this.saving||t<0||t>=this.carouselItems.length)return;this.clearMessages(),this.saving=!0;const a=[...this.carouselItems],[r]=a.splice(e,1);a.splice(t,0,r);const o=a.map((e,s)=>({carouselItem:e,sortOrder:10*(s+1)})).filter(({carouselItem:e,sortOrder:s})=>e.sortOrder!==s);try{await Promise.all(o.map(({carouselItem:e,sortOrder:s})=>Ee.A.update(e.id,null,this.buildCarouselItemPayload(e,s)))),this.successMessage="Homepage carousel order updated successfully."}catch(i){this.errorMessage=i.message||"Unable to update homepage carousel order."}finally{await this.loadCarouselItems(),this.saving=!1}},async loadCarouselItems(){this.loading=!0;try{const e=await Ee.A.getAll();this.carouselItems=e.data.carouselItems||[],this.isEditingCarouselItem||(this.carouselForm=Ne(this.getNextSortOrder()))}catch(e){this.errorMessage=e.message||"Unable to load homepage carousel items."}finally{this.loading=!1}},startCreate(){this.editCarouselItemId=null,this.currentImageFile=null,this.revokePreviewImage(),this.resetImageInput(),this.carouselForm=Ne(this.getNextSortOrder()),this.clearMessages()},startEdit(e){this.editCarouselItemId=e.id,this.currentImageFile=null,this.revokePreviewImage(),this.resetImageInput(),this.carouselForm={instrumentId:Number.isInteger(e.instrumentId)?e.instrumentId:null,caption:e.caption||"",sortOrder:Number.isInteger(e.sortOrder)?e.sortOrder:0},this.clearMessages()},handleImageChange(e){const s=e.target.files[0];if(this.currentImageFile=null,this.revokePreviewImage(),s){if(!(0,xe.r)(s))return this.errorMessage="Please choose a valid image file.",void(e.target.value="");if(s.size>Ue)return this.errorMessage="Carousel image uploads can be up to 50MB.",void(e.target.value="");this.clearMessages(),this.currentImageFile=s,this.previewImage=URL.createObjectURL(s)}},async submitCarouselItem(){if(this.saving)return;this.clearMessages();const e=this.isEditingCarouselItem;if(!e&&!this.currentImageFile)return void(this.errorMessage="A carousel image file is required.");this.saving=!0;const s=this.buildCarouselItemPayload(this.carouselForm,e&&this.editingCarouselItem?this.editingCarouselItem.sortOrder:this.carouselForm.sortOrder);try{e?await Ee.A.update(this.editCarouselItemId,this.currentImageFile,s):await Ee.A.create(this.currentImageFile,s),this.startCreate(),await this.loadCarouselItems(),this.successMessage=e?"Homepage carousel item updated successfully.":"Homepage carousel item created successfully."}catch(t){this.errorMessage=t.message||"Unable to save homepage carousel item."}finally{this.saving=!1}},async deleteCarouselItem(e){if(confirm(`Delete carousel item "${e.caption}"?`)){this.clearMessages(),this.saving=!0;try{await Ee.A.delete(e.id),this.editCarouselItemId===e.id&&this.startCreate(),await this.loadCarouselItems(),this.successMessage="Homepage carousel item deleted successfully."}catch(s){this.errorMessage=s.message||"Unable to delete homepage carousel item."}finally{this.saving=!1}}}}};var We=t(6262);const Xe=(0,We.A)(Pe,[["render",Oe]]),De=Xe;var Re=t(1128),$e=t(4604),_e=t(8123);const He=52428800,je=(e=0)=>({name:"",webpage:"",states:[],sortOrder:e}),Te={name:"AdminSettings",components:{AdminHomepageCarouselSettings:De},metaInfo(){return{title:"Admin Settings | Pipe Organ Database",meta:[{property:"og:type",name:"og:type",content:"website"},{property:"og:title",name:"og:title",content:"Admin Settings | Pipe Organ Database"},{property:"og:image",name:"og:image",content:"https://api.pipeorgandatabase.org/uploads/images/blank_sm.png"},{property:"twitter:card",name:"twitter:card",content:"summary"},{property:"twitter:image",name:"twitter:image",content:"https://api.pipeorgandatabase.org/uploads/images/blank_sm.png"},{property:"twitter:title",name:"twitter:title",content:"Admin Settings | Pipe Organ Database"}]}},data(){return{loading:!0,saving:!1,sponsors:[],sponsorForm:je(),editSponsorId:null,currentImageFile:null,previewImage:null,successMessage:"",errorMessage:"",stateOptions:$e.I}},computed:{authenticated(){return this.$store.state.auth.status.authenticated},currentUser(){return this.$store.state.auth.user},apiEndpoint(){return"https://api.pipeorgandatabase.org"},isEditingSponsor(){return null!==this.editSponsorId},editingSponsor(){return this.sponsors.find(e=>e.id===this.editSponsorId)||null},currentPreviewUrl(){return this.previewImage?this.previewImage:this.editingSponsor?this.sponsorImageUrl(this.editingSponsor):""}},mounted(){this.authenticated?(0,_e.EQ)(this.currentUser)?this.loadSponsors():this.$router.push("/"):this.$router.push("/login")},beforeUnmount(){this.revokePreviewImage()},methods:{buildSponsorPayload(e,s=e.sortOrder){return{name:e.name||"",webpage:e.webpage||"",sortOrder:Number.isInteger(s)?s:0,states:Array.isArray(e.states)?[...e.states]:[]}},getNextSortOrder(){if(0===this.sponsors.length)return 10;const e=this.sponsors.reduce((e,s)=>{const t=Number.isInteger(s.sortOrder)?s.sortOrder:0;return Math.max(e,t)},0);return e+10},revokePreviewImage(){this.previewImage&&(URL.revokeObjectURL(this.previewImage),this.previewImage=null)},clearMessages(){this.successMessage="",this.errorMessage=""},resetImageInput(){this.$refs.sponsorImageInput&&(this.$refs.sponsorImageInput.value="")},sponsorImageUrl(e){return this.apiEndpoint+(e.imagePath||`/uploads/sponsors/${e.imageFilename}`)},formatStates(e){return Array.isArray(e)&&0!==e.length?e.map(e=>$e.P[e]||e).join(", "):"Homepage only"},async moveSponsor(e,s){const t=e+s;if(this.saving||t<0||t>=this.sponsors.length)return;this.clearMessages(),this.saving=!0;const a=[...this.sponsors],[r]=a.splice(e,1);a.splice(t,0,r);const o=a.map((e,s)=>({sponsor:e,sortOrder:10*(s+1)})).filter(({sponsor:e,sortOrder:s})=>e.sortOrder!==s);try{await Promise.all(o.map(({sponsor:e,sortOrder:s})=>Re.A.update(e.id,null,this.buildSponsorPayload(e,s)))),this.successMessage="Sponsor order updated successfully."}catch(i){this.errorMessage=i.message||"Unable to update sponsor order."}finally{await this.loadSponsors(),this.saving=!1}}
1,async loadSponsors(){this.loading=!0;try{const e=await Re.A.getAll();this.sponsors=e.data.sponsors||[],this.isEditingSponsor||(this.sponsorForm=je(this.getNextSortOrder())),window.prerenderReady=!0}catch(e){this.errorMessage=e.message||"Unable to load sponsors."}finally{this.loading=!1}},startCreate(){this.editSponsorId=null,this.currentImageFile=null,this.revokePreviewImage(),this.resetImageInput(),this.sponsorForm=je(this.getNextSortOrder()),this.clearMessages()},startEdit(e){this.editSponsorId=e.id,this.currentImageFile=null,this.revokePreviewImage(),this.resetImageInput(),this.sponsorForm={name:e.name||"",webpage:e.webpage||"",states:Array.isArray(e.states)?[...e.states]:[],sortOrder:Number.isInteger(e.sortOrder)?e.sortOrder:0},this.clearMessages()},handleImageChange(e){const s=e.target.files[0];if(this.currentImageFile=null,this.revokePreviewImage(),s){if(!(0,xe.r)(s))return this.errorMessage="Please choose a valid image file.",void(e.target.value="");if(s.size>He)return this.errorMessage="Sponsor image uploads can be up to 50MB.",void(e.target.value="");this.clearMessages(),this.currentImageFile=s,this.previewImage=URL.createObjectURL(s)}},async submitSponsor(){if(this.saving)return;this.clearMessages();const e=this.isEditingSponsor;if(!e&&!this.currentImageFile)return void(this.errorMessage="A sponsor image file is required.");this.saving=!0;const s=this.buildSponsorPayload(this.sponsorForm,e&&this.editingSponsor?this.editingSponsor.sortOrder:this.sponsorForm.sortOrder);try{e?await Re.A.update(this.editSponsorId,this.currentImageFile,s):await Re.A.create(this.currentImageFile,s),this.startCreate(),await this.loadSponsors(),this.successMessage=e?"Sponsor updated successfully.":"Sponsor created successfully."}catch(t){this.errorMessage=t.message||"Unable to save sponsor."}finally{this.saving=!1}},async deleteSponsor(e){if(confirm(`Delete sponsor "${e.name}"?`)){this.clearMessages(),this.saving=!0;try{await Re.A.delete(e.id),this.editSponsorId===e.id&&this.startCreate(),await this.loadSponsors(),this.successMessage="Sponsor deleted successfully."}catch(s){this.errorMessage=s.message||"Unable to delete sponsor."}finally{this.saving=!1}}}}},Qe=(0,We.A)(Te,[["render",G]]),Ve=Qe}}]); 2//# sourceMappingURL=178.2cd07aba.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.