PageSourceSearch

https://tuforums.com/assets/CurationPage.gVCh2Arz.js

js tuforums.com collected 2026-10-02 00:58:25 UTC 48,755 bytes, 1 lines download raw bytes

1import{u as we,j as e,z as Ee,A as Te,s as Ne,I as Se,a4 as We,a as E,r as K,E as T,cm as qe,e as Ae,c1 as ge,p as H,f as Qe,b as jt,aK as Nt,bD as re,M as St,av as Pt,i as $e,aP as kt}from"./index.C_jEAofg.js";import{r as l,R as It,f as Xe,d as Ye,N as Et}from"./reactRouter.C6cvQAHO.js";import{E as Ke}from"./EditIcon.C3zEPxhx.js";import{T as Je}from"./TrashIcon.BeVW0keM.js";import{A as $,f as Ie,d as me}from"./curationTypeUtils.UzM-6L0y.js";import{F as Tt}from"./FacetQueryBuilder.hyebA0HI.js";import{t as je}from"./rateLimitError.ByypYhRt.js";import{S as Mt}from"./ScrollButton.BuRsjz3s.js";import"./WebAdofaiViewerButton.B_YDorpM.js";import"./levelselectionpopup.XTKS7ydm.js";import{L as Lt}from"./LevelSelectionPopup.BM_HqWse.js";/* empty css                    *//* empty css                            *//* empty css                          */import"./XaccPassPickerJudgementStrip.RmYhi90o.js";/* empty css                          */import"./SearchHelpPopup.BSQYCqH7.js";import{g as Le}from"./uploadErrors.BuoBavFt.js";import"./BulkCreateCurationsConfirmPopup.La29Scy7.js";import{D as He,C as Ve,P as ze}from"./react-beautiful-dnd.esm.C8pEIkAv.js";import{u as Ce}from"./i18n.BxWiIRpk.js";import{I as Ze}from"./ItemPickManager.ByW3m6Qa.js";import{p as wt}from"./packTreePlacement.DdiW6xc5.js";import{c as At}from"./profileIconSlots.D8bRZ9GW.js";import"./changeEmailPopup.CZzcVLs0.js";import{U as Rt}from"./UserManagementPopup.DBiEhQ94.js";import{D as Dt}from"./DiscordRolesPopup.Cg3PX91d.js";import"./recharts.DzmhKP_O.js";import"./Select.BO5et_f4.js";import"./communityTags.D2n_4RPi.js";import"./CreatorStatusBadge.BebQkP3q.js";import"./statFormatters.D_f0oQsy.js";/* empty css                            */import"./raf-schd.esm.Do3U_zjQ.js";import"./levelHelpers.CkOxyFNP.js";import"./passJudgementHitCount.Ccm5-J09.js";import"./levelcreditseditpopup.Bv94erU-.js";import"./CurationTypeSelector.CbUjpZdk.js";import"./sortable.esm.CFCmxV-Q.js";/* empty css                    */import"./RatingInput.DaDmVNeA.js";(function(){try{var c=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};c.SENTRY_RELEASE={id:"aec9389561908f1f1b5366362ca3b629220ab900"},c._sentryModuleMetadata=c._sentryModuleMetadata||{},c._sentryModuleMetadata[new c.Error().stack]=function(m){for(var j=1;j<arguments.length;j++){var N=arguments[j];if(N!=null)for(var o in N)N.hasOwnProperty(o)&&(m[o]=N[o])}return m}({},c._sentryModuleMetadata[new c.Error().stack],{"_sentryBundlerPluginAppKey:tuf-website":!0});var v=new c.Error().stack;v&&(c._sentryDebugIds=c._sentryDebugIds||{},c._sentryDebugIds[v]="8158e0e9-b676-4033-bf30-d68096a105de",c._sentryDebugIdIdentifier="sentry-dbid-8158e0e9-b676-4033-bf30-d68096a105de")}catch{}})();const V={LIST:"LIST",CREATE:"CREATE",EDIT:"EDIT"},Ot=({isOpen:c,onClose:v,curationTypes:m,onTypeUpdate:j,verifiedPassword:N})=>{const{t:o}=Ce(["components","common"]),{reloadCurationTypes:g}=we(),[a,w]=l.useState(V.LIST),[A,f]=l.useState(!1),[M,h]=l.useState(null),[b,ae]=l.useState(!1),[R,ne]=l.useState(!1),[z,I]=l.useState("types"),[C,J]=l.useState([]),[x,se]=l.useState({name:"",color:"#3B82F6",abilities:0n,icon:null,iconPreview:null,group:""});l.useEffect(()=>{c&&(w(V.LIST),h(null),Z())},[c]),l.useEffect(()=>{m&&J([...m].sort((t,n)=>{const i=t.groupSortOrder??0,d=n.groupSortOrder??0;return i!==d?i-d:(t.sortOrder??0)-(n.sortOrder??0)}))},[m]);const le=l.useMemo(()=>{const t={};for(const n of C){const i=n.group||"";t[i]||(t[i]={name:i,types:[],groupSortOrder:n.groupSortOrder??0}),t[i].types.push(n)}return Object.values(t).map(n=>({...n,types:[...n.types].sort((i,d)=>{const y=(i.sortOrder??0)-(d.sortOrder??0);return y!==0?y:(i.id??0)-(d.id??0)}),groupSortOrder:n.types.length>0?Math.min(...n.types.map(i=>i.groupSortOrder??0)):0})).sort((n,i)=>n.groupSortOrder-i.groupSortOrder)},[C]),O=le,Z=()=>{se({name:"",color:"#3B82F6",abilities:0n,icon:null,iconPreview:null,group:""})},F=async()=>{await g(!0),typeof j=="function"&&j()},xe=()=>{w(V.CREATE),Z()},ue=t=>{h(t),se({name:t.name,color:t.color,abilities:BigInt(t.abilities||0),icon:null,iconPreview:t.icon,group:t.group||""}),w(V.EDIT)},ce=async t=>{var n,i,d,y;if(window.confirm(o("typeManagementPopup.confirmations.deleteType",{name:t.name})))try{f(!0),await E.delete(`${K.admin.curations.root()}/types/${t.id}`,{headers:{"X-Super-Admin-Password":N}}),T.success(o("typeManagementPopup.notifications.deleted")),await F()}catch(S){if(!je(S)){const q=((i=(n=S.response)==null?void 0:n.data)==null?void 0:i.error)||((y=(d=S.response)==null?void 0:d.data)==null?void 0:y.message)||"Failed to delete curation type";T.error(q)}}finally{f(!1)}},oe=()=>{w(V.LIST),h(null),Z()},te=(t,n)=>{se(i=>({...i,[t]:n}))},he=t=>{const n=t.target.files[0];if(n){if(!qe(n.type)){T.error("Invalid file type. Only JPEG, PNG, WebP, GIF, and SVG files are allowed.");return}if(n.size>1024*1024){T.error("File size too large. Maximum size is 1MB.");return}se(d=>({...d,icon:n}));const i=new FileReader;i.onload=d=>{se(y=>({...y,iconPreview:d.target.result}))},i.readAsDataURL(n)}},fe=()=>{se(t=>({...t,icon:null,iconPreview:null}))},W=(t,n)=>!t||n===void 0||n===null?!1:(BigInt(t)&BigInt(n))===BigInt(n),be=(t,n,i)=>!t&&t!==0n||n===void 0||n===null?t?BigInt(t):0n:i?BigInt(t||0)|BigInt(n):BigInt(t||0)&~BigInt(n),ee=(t,n)=>{const i=be(x.abilities,t,n);te("abilities",i)},ie=async t=>{var n;if(t.preventDefault(),!x.name.trim()){T.error("Name is required");return}if(!/^#[0-9A-F]{6}$/i.test(x.color)){T.error("Invalid color format. Use hex color (e.g., #3B82F6)");return}try{f(!0);const i={name:x.name.trim(),color:x.color,abilities:x.abilities.toString(),group:((n=x.group)==null?void 0:n.trim())??""};let d;if(a===V.CREATE?(d=await E.post(`${K.admin.curations.root()}/types`,i,{headers:{"X-Super-Admin-Password":N}}),T.success(o("typeManagementPopup.notifications.created"))):(d=await E.put(`${K.admin.curations.root()}/types/${M.id}`,i,{headers:{"X-Super-Admin-Password":N}}),T.success(o("typeManagementPopup.notifications.updated"))),x.icon){const y=new FormData;y.append("icon",x.icon);const S=await E.post(`${K.admin.curations.root()}/types/${d.data.id}/icon`,y,{headers:{"X-Super-Admin-Password":N,"Content-Type":"multipart/form-data"}})}await F(),oe()}catch(i){if(!je(i)){const d=Le(i,`Failed to ${a===V.CREATE?"create":"update"} curation type`);T.error(d)}}finally{f(!1)}},de=async(t,n)=>{if(t.destination&&t.source.droppableId===t.destination.droppableId){ae(!0);try{const d=[...C.filter(D=>(D.group||"")===n)].sort((D,X)=>{const Y=(D.sortOrder??0)-(X.sortOrder??0);return Y!==0?Y:(D.id??0)-(X.id??0)}),y=Array.from(d),[S]=y.splice(t.source.index,1);y.splice(t.destination.index,0,S);const q=y.map((D,X)=>({...D,sortOrder:X}));J(D=>{const X=new Map(q.map(Y=>[Y.id,Y]));return D.map(Y=>X.get(Y.id)??Y)}),await E.put(`${K.admin.curations.root()}/types/sort-orders`,{sortOrders:q.map(D=>({id:D.id,sortOrder:D.sortOrder}))},{headers:{"X-Super-Admin-Password":N}}),T.success(o("typeManagementPopup.notifications.reordered")),await F()}catch(i){console.error("Error updating sort orders:",i),je(i)||T.error(o("typeManagementPopup.notifications.reorderFailed")),m&&J([...m].sort((d,y)=>{const S=d.groupSortOrder??0,q=y.groupSortOrder??0;return S!==q?S-q:(d.sortOrder??0)-(y.sortOrder??0)}))}finally{ae(!1)}}},p=async t=>{if(t.destination){ne(!0);try{const n=Array.from(O),[i]=n.splice(t.source.index,1);n.splice(t.destination.index,0,i);const d=n.map((y,S)=>({name:y.name,sortOrder:S}));J(y=>y.map(S=>{const q=S.group||"",D=d.find(X=>X.name===q);return D?{...S,groupSortOrder:D.sortOrder}:S})),await E.put(`${K.admin.curations.root()}/types/group-sort-orders`,{groups:d},{headers:{"X-Super-Admin-Password":N}}),T.success(o("typeManagementPopup.notifications.groupsReordered")),await F()}catch(n){console.error("Error updating group sort orders:",n),je(n)||T.error(o("typeManagementPopup.notifications.groupReorderFailed")),m&&J([...m].sort((i,d)=>{const y=i.groupSortOrder??0,S=d.groupSortOrder??0;return y!==S?y-S:(i.sortOrder??0)-(d.sortOrder??0)}))}finally{ne(!1)}}};return c?e.jsxs(Ee,{onClose:v,overlayClassName:"type-management-modal",panelClassName:"type-management-modal__content",children:[e.jsx(Te,{variant:"floating",className:"type-management-modal__close-button",onClick:v,type:"button","aria-label":o("buttons.close",{ns:"common"})}),e.jsxs("div",{className:"type-management-modal__header",children:[e.jsxs("h2",{children:[a===V.LIST&&o("typeManagementPopup.title"),a===V.CREATE&&o("typeManagementPopup.create.title"),a===V.EDIT&&o("typeManagementPopup.edit.title")]}),e.jsxs("p",{children:[a===V.LIST&&o("typeManagementPopup.description"),a===V.CREATE&&o("typeManagementPopup.create.description"),a===V.EDIT&&o("typeManagementPopup.edit.description")]})]}),a===V.LIST&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"type-management-modal__actions",children:e.jsxs("button",{className:"type-management-modal__create-btn",onClick:xe,children:["➕",o("typeManagementPopup.actions.create")]})}),e.jsxs("div",{className:"type-management-modal__sub-tabs",children:[e.jsx("button",{type:"button",className:`type-management-modal__sub-tab ${z==="types"?"active":""}`,onClick:()=>I("types"),children:o("typeManagementPopup.tabs.types")}),e.jsx("button",{type:"button",className:`type-management-modal__sub-tab ${z==="groups"?"active":""}`,onClick:()=>I("groups"),children:o("typeManagementPopup.tabs.groups")})]}),z==="types"?e.jsx("div",{className:"type-management-modal__grouped-types",children:A?e.jsx("div",{className:"type-management-modal__loading",children:o("typeManagementPopup.loading")}):C.length===0?e.jsx("div",{className:"type-management-modal__empty",children:o("typeManagementPopup.empty")}):le.map(t=>e.jsxs("div",{className:"type-management-modal__type-group-section",children:[e.jsxs("h3",{className:"type-management-modal__type-group-title",children:[t.name||o("typeManagementPopup.groups.ungrouped"),e.jsxs("span",{className:"type-management-modal__type-group-count",children:["(",t.types.length,")"]})]}),e.jsx(He,{onDragEnd:n=>de(n,t.name),children:e.jsx(Ve,{droppableId:`group-${t.name||"ungrouped"}`,children:n=>e.jsxs("div",{className:"type-management-modal__types",...n.droppableProps,ref:n.innerRef,children:[t.types.map((i,d)=>e.jsx(ze,{draggableId:`type-${i.id}`,index:d,isDragDisabled:b,children:(y,S)=>e.jsxs("div",{ref:y.innerRef,...y.draggableProps,...y.dragHandleProps,className:`type-management-modal__type-item ${S.isDragging?"dragging":""}`,children:[e.jsxs("div",{className:"type-management-modal__type-info",children:[e.jsxs("div",{className:"type-management-modal__type-header",children:[e.jsx("div",{className:"type-management-modal__drag-handle",children:"⋮⋮"}),i.icon&&e.jsx("img",{src:Ne(i.icon,Se.SMALL),alt:`${i.name} icon`,className:"type-management-modal__type-icon"}),e.jsx("h3",{children:i.name})]}),e.jsxs("div",{className:"type-management-modal__type-details",children:[e.jsx("span",{className:"type-management-modal__type-color",style:{backgroundColor:i.color},children:i.color}),e.jsx("span",{className:"type-management-modal__type-abilities",children:i.abilities>0?o("typeManagementPopup.hasAbilities"):o("typeManagementPopup.noAbilities")})]})]}),e.jsxs("div",{className:"type-management-modal__type-actions",children:[e.jsx("button",{type:"button",className:"type-management-modal__action-btn type-management-modal__action-btn--edit",onClick:()=>ue(i),title:o("typeManagementPopup.actions.edit"),disabled:b,children:e.jsx(Ke,{size:30})}),e.jsx("button",{type:"button",className:"type-management-modal__action-btn type-management-modal__action-btn--delete",onClick:()=>ce(i),title:o("typeManagementPopup.actions.delete"),disabled:A||b,children:e.jsx(Je,{size:34})})]})]})},i.id)),n.placeholder]})})})]},t.name||"ungrouped"))}):e.jsx("div",{className:"type-management-modal__groups-tab",children:A?e.jsx("div",{className:"type-management-modal__loading",children:o("typeManagementPopup.loading")}):O.length===0?e.jsx("div",{className:"type-management-modal__empty",children:o("typeManagementPopup.groups.empty")}):e.jsx(He,{onDragEnd:p,children:e.jsx(Ve,{droppableId:"curation-type-groups",children:t=>e.jsxs("div",{className:"type-management-modal__groups-list",...t.droppableProps,ref:t.innerRef,children:[O.map((n,i)=>e.jsx(ze,{draggableId:`ctype-group-${n.name||"ungrouped"}`,index:i,isDragDisabled:R,children:(d,y)=>e.jsxs("div",{ref:d.innerRef,...d.draggableProps,...d.dragHandleProps,className:`type-management-modal__group-item ${y.isDragging?"dragging":""}`,children:[e.jsx("div",{className:"type-management-modal__group-item-name",children:n.name||o("typeManagementPopup.groups.ungrouped")}),e.jsx("div",{className:"type-management-modal__group-item-count",children:o("typeManagementPopup.groups.typeCount",{count:n.types.length})})]})},n.name||"ungrouped")),t.placeholder]})})})})]}),(a===V.CREATE||a===V.EDIT)&&e.jsxs("form",{onSubmit:ie,className:"type-management-modal__form",children:[e.jsxs("div",{className:"type-management-modal__form-group",children:[e.jsx("label",{htmlFor:"name",children:o("typeManagementPopup.form.name")}),e.jsx("input",{id:"name",type:"text",value:x.name,onChange:t=>te("name",t.target.value),placeholder:o("typeManagementPopup.form.namePlaceholder"),required:!0,className:"type-management-modal__input"})]}),e.jsxs("div",{className:"type-management-modal__form-group",children:[e.jsx("label",{htmlFor:"group",children:o("typeManagementPopup.form.group")}),e.jsx("input",{id:"group",type:"text",value:x.group,onChange:t=>te("group",t.target.value),placeholder:o("typeManagementPopup.form.groupPlaceholder"),className:"type-management-modal__input"})]}),e.jsxs("div",{className:"type-management-modal__form-group",children:[e.jsx("label",{htmlFor:"color",children:o("typeManagementPopup.form.color")}),e.jsxs("div",{className:"type-management-modal__color-input",children:[e.jsx("input",{id:"color",type:"color",value:x.color,onChange:t=>te("color",t.target.value),className:"type-management-modal__color-picker"}),e.jsx("input",{type:"text",value:x.color,onChange:t=>te("color",t.target.value),placeholder:"#3B82F6",className:"type-management-modal__color-text"})]})]}),e.jsxs("div",{className:"type-management-modal__form-group",children:[e.jsx("label",{children:o("typeManagementPopup.form.icon")}),e.jsxs("div",{className:"type-management-modal__icon-upload",children:[x.iconPreview&&e.jsxs("div",{className:"type-management-modal__icon-preview",children:[e.jsx("img",{src:Ne(x.iconPreview,Se.SMALL),alt:"Icon preview",className:"type-management-modal__icon-preview-img"}),e.jsx("button",{type:"button",onClick:fe,className:"type-management-modal__icon-remove",children:"✖"})]}),e.jsx("input",{type:"file",accept:We,onChange:he,className:"type-management-modal__file-input",id:"icon-upload"}),e.jsx("label",{htmlFor:"icon-upload",className:"type-management-modal__file-label",children:x.iconPreview?o("typeManagementPopup.form.changeIcon"):o("typeManagementPopup.form.selectIcon")})]}),e.jsx("p",{className:"type-management-modal__help-text",children:o("typeManagementPopup.form.iconHelp")})]}),e.jsxs("div",{className:"type-management-modal__form-group",children:[e.jsx("label",{children:o("typeManagementPopup.form.abilities")}),e.jsxs("div",{className:"type-management-modal__abilities",children:[e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.CUSTOM_CSS),onChange:t=>ee($.CUSTOM_CSS,t.target.checked)}),o("typeManagementPopup.abilities.customCSS")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.CURATOR_ASSIGNABLE),onChange:t=>ee($.CURATOR_ASSIGNABLE,t.target.checked)}),o("typeManagementPopup.abilities.curatorAssignable")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.RATER_ASSIGNABLE),onChange:t=>ee($.RATER_ASSIGNABLE,t.target.checked)}),o("typeManagementPopup.abilities.raterAssignable")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.SHOW_ASSIGNER),onChange:t=>ee($.SHOW_ASSIGNER,t.target.checked)}),o("typeManagementPopup.abilities.showAssigner")]}),e.jsxs("label",{className:"type-management-modal__ability-i
1tem",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.FORCE_DESCRIPTION),onChange:t=>ee($.FORCE_DESCRIPTION,t.target.checked)}),o("typeManagementPopup.abilities.forceDescription")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.FRONT_PAGE_ELIGIBLE),onChange:t=>ee($.FRONT_PAGE_ELIGIBLE,t.target.checked)}),o("typeManagementPopup.abilities.frontPageEligible")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.CUSTOM_COLOR_THEME),onChange:t=>ee($.CUSTOM_COLOR_THEME,t.target.checked)}),o("typeManagementPopup.abilities.customColorTheme")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.LEVEL_LIST_BASIC_GLOW),onChange:t=>ee($.LEVEL_LIST_BASIC_GLOW,t.target.checked)}),o("typeManagementPopup.abilities.levelListBasicGlow")]}),e.jsxs("label",{className:"type-management-modal__ability-item",children:[e.jsx("input",{type:"checkbox",checked:W(x.abilities,$.LEVEL_LIST_LEGENDARY_GLOW),onChange:t=>ee($.LEVEL_LIST_LEGENDARY_GLOW,t.target.checked)}),o("typeManagementPopup.abilities.levelListLegendaryGlow")]})]})]}),e.jsxs("div",{className:"type-management-modal__form-actions",children:[e.jsx("button",{type:"button",onClick:oe,className:"btn-fill-neutral-dark",children:o("buttons.cancel",{ns:"common"})}),e.jsx("button",{type:"submit",disabled:A,className:"btn-fill-primary",children:A?o("typeManagementPopup.buttons.submitting"):a===V.CREATE?o("typeManagementPopup.buttons.create"):o("typeManagementPopup.buttons.update")})]})]})]}):null},Ft=({currentThumbnail:c,onThumbnailUpdate:v,onThumbnailRemove:m,uploadEndpoint:j,className:N="",disabled:o=!1})=>{const{t:g}=Ce("components"),[a,w]=l.useState(null),[A,f]=l.useState(c||""),[M,h]=l.useState(!1),b=l.useRef(null);It.useEffect(()=>{f(c||""),c||(w(null),b.current&&(b.current.value=""))},[c]);const ae=I=>{const C=I.target.files[0];if(C){if(!qe(C.type)){T.error("Invalid file type. Please select a JPEG, PNG, WebP, GIF, or SVG file.");return}if(C.size>10*1024*1024){T.error("File size too large. Please select a file smaller than 10MB.");return}w(C);const J=new FileReader;J.onload=x=>{f(x.target.result)},J.readAsDataURL(C)}},R=async()=>{if(!(!a||!j)){h(!0);try{const I=new FormData;I.append("thumbnail",a);const C=await E.post(j,I,{headers:{"Content-Type":"multipart/form-data"}});C.data.success&&(f(C.data.previewLink),v&&v(C.data.previewLink),w(null),b.current&&(b.current.value=""),T.success(g("thumbnailUpload.uploadSuccess")))}catch(I){const C=Le(I,g("thumbnailUpload.uploadError"));T.error(C)}finally{h(!1)}}},ne=async()=>{if(j)try{await E.delete(j),f(""),w(null),b.current&&(b.current.value=""),m&&m(),T.success(g("thumbnailUpload.removeSuccess"))}catch(I){const C=Le(I,g("thumbnailUpload.removeError"));T.error(C)}},z=`thumbnail-file-${Math.random().toString(36).substr(2,9)}`;return e.jsxs("div",{className:`thumbnail-upload ${N}`,children:[A&&e.jsxs("div",{className:"thumbnail-upload__preview",children:[e.jsx("img",{src:A,alt:"Level thumbnail",className:"thumbnail-upload__image"}),e.jsx("button",{type:"button",onClick:ne,className:"thumbnail-upload__remove",title:g("thumbnailUpload.remove"),disabled:o,children:"✖"})]}),e.jsxs("div",{className:"thumbnail-upload__controls",children:[e.jsx("input",{ref:b,id:z,type:"file",accept:We,onChange:ae,className:"thumbnail-upload__file-input",disabled:o}),e.jsx("label",{htmlFor:z,className:"thumbnail-upload__file-label",children:a?a.name:g("thumbnailUpload.chooseFile")}),a&&e.jsx("button",{type:"button",onClick:R,disabled:M||o,className:"thumbnail-upload__upload-btn",children:M?g("loading.uploading",{ns:"common"}):g("thumbnailUpload.upload")})]}),e.jsx("small",{className:"thumbnail-upload__help",children:g("thumbnailUpload.help")})]})},Ut=1n<<0n,ke=1n<<11n,Bt=1n<<12n,Gt=1n<<14n;function $t(c){const v=(c==null?void 0:c.types)||[];return{id:c==null?void 0:c.id,shortDescription:(c==null?void 0:c.shortDescription)||"",description:(c==null?void 0:c.description)||"",customCSS:(c==null?void 0:c.customCSS)||"",customColor:(c==null?void 0:c.customColor)||"#ffffff",previewLink:(c==null?void 0:c.previewLink)||null,isDuplicate:(c==null?void 0:c.isDuplicate)||!1,typeIds:v.map(m=>m.id)}}function Me(){return{id:void 0,shortDescription:"",description:"",customCSS:"",customColor:"#ffffff",previewLink:null,isDuplicate:!1,typeIds:[]}}const Ht=({isOpen:c,onClose:v,levelId:m,level:j,curationTypes:N,onUpdate:o,onCurationPatched:g})=>{var de;const{t:a}=Ce(["components","common"]),w=Xe(),A=Ye(),{user:f}=Ae(),{difficultyDict:M}=we(),[h,b]=l.useState(Me),[ae,R]=l.useState(null),[ne,z]=l.useState(!1),[I,C]=l.useState(!1),[J,x]=l.useState(!1),[se,le]=l.useState([]),O=l.useMemo(()=>{const p=N||[],t=new Map(p.map(i=>[i.id,i])),n=new Map((se||[]).map(i=>[i.id,i]));return h.typeIds.map(i=>
1t.get(i)||n.get(i)).filter(Boolean)},[h.typeIds,N,se]),Z=f&&ge(f,[H.SUPER_ADMIN,H.HEAD_CURATOR]),F=l.useMemo(()=>f?Z?!0:ge(f,[H.CURATOR,H.RATER])?O.length===0?!0:O.every(p=>Ie(f.permissionFlags,p.abilities)):!1:!1,[O,f,Z]),xe=l.useCallback(p=>!f||Z||Ie(f.permissionFlags,p.abilities),[f,Z]),ue=l.useMemo(()=>({sectionCurrent:a("curationEditPopup.form.typesCurrent"),sectionAdd:a("curationEditPopup.form.typesAdd"),searchPlaceholder:a("curationEditPopup.form.typesSearchPlaceholder"),emptySelected:a("curationEditPopup.form.typesNoneSelected"),emptyPool:a("curationEditPopup.form.typesNoneAvailable"),noResults:a("curationEditPopup.form.typesNoResults"),removeItem:a("curationEditPopup.form.removeType"),addItem:a("curationEditPopup.form.addType")}),[a]),ce=Z||O.length>0&&O.some(p=>me(p,Ut)),oe=Z||O.length>0&&O.some(p=>me(p,Gt)),te=Z||O.length>0&&O.some(p=>me(p,Bt)||me(p,ke)),he=ce,fe=oe,W=l.useCallback(async()=>{if(m){z(!0);try{const n=((await E.get(`${K.admin.curations.root()}`,{params:{levelId:m,limit:200}})).data.curations||[])[0];le((n==null?void 0:n.types)||[]),b(n?$t(n):Me()),n!=null&&n.level?R(n.level):j&&R(j)}catch(p){console.error(p),T.error(a("curationEditPopup.errors.loadFailed")),le([]),b(Me())}finally{z(!1)}}},[m,j,a]);l.useEffect(()=>{!c||!m||(R(j||null),W())},[c,m,j,W]),l.useEffect(()=>{var p;((p=A.state)==null?void 0:p.customCSS)!==void 0&&J&&(b(t=>({...t,customCSS:A.state.customCSS})),x(!1),w(A.pathname,{replace:!0,state:{}}))},[A.state,w,A.pathname,J]);const be=()=>{for(const p of h.typeIds){const t=O.find(n=>n.id===p);if(t&&me(t,ke)&&!(String(h.shortDescription??"").trim()||String(h.description??"").trim()))return T.error(a("curationEditPopup.form.descriptionRequiredType",{name:t.name})),!1}return!0},ee=async p=>{var t,n,i;if(p.preventDefault(),!(!m||!be())){if(!F){T.error(a("curationEditPopup.errors.cannotManageCuration"));return}try{C(!0);const d={typeIds:h.typeIds,isDuplicate:h.isDuplicate};te&&(d.shortDescription=h.shortDescription,d.description=h.description),ce&&(d.customCSS=h.customCSS),oe&&(d.customColor=h.customColor);const y=await E.put(`${K.admin.curations.root()}/level/${m}`,d);T.success(a("curationEditPopup.notifications.updated")),o({levelId:m,curations:y.data.curations,level:(t=y.data.curations[0])==null?void 0:t.level}),v()}catch(d){T.error(((i=(n=d.response)==null?void 0:n.data)==null?void 0:i.error)||a("curationEditPopup.errors.updateFailed"))}finally{C(!1)}}},ie=ae||j;return!c||!m?null:e.jsxs(Ee,{onClose:v,overlayClassName:"curation-edit-modal",panelClassName:"curation-edit-modal__content",children:[e.jsx(Te,{variant:"floating",type:"button",className:"curation-edit-modal__close-button",onClick:v,"aria-label":a("buttons.close",{ns:"common"})}),e.jsxs("div",{className:"curation-edit-modal__header",children:[e.jsx("h2",{children:a("curationEditPopup.title")}),e.jsx("p",{children:a("curationEditPopup.descriptionLevel")})]}),e.jsxs("div",{className:"curation-edit-modal__content-scroll",children:[ie&&e.jsx("div",{className:"curation-edit-modal__level-info",children:e.jsx("div",{className:"curation-edit-modal__level-card",children:e.jsxs("div",{className:"curation-edit-modal__level-header",children:[e.jsx("img",{src:Ne((de=M[ie.diffId])==null?void 0:de.icon,Se.MEDIUM)||"/default-difficulty-icon.png",alt:"",className:"curation-edit-modal__difficulty-icon"}),e.jsxs("div",{className:"curation-edit-modal__level-details",children:[e.jsx("h3",{children:ie.song||"Unknown Level"}),e.jsx("p",{className:"curation-edit-modal__level-artist",children:ie.artist||"Unknown Artist"}),e.jsx("p",{className:"curation-edit-modal__level-creator",children:Qe(ie)}),e.jsxs("p",{className:"curation-edit-modal__level-id",children:["#",m]})]})]})})}),ne?e.jsx("div",{className:"curation-edit-modal__loading-inline",children:a("loading.generic",{ns:"common"})}):e.jsxs("form",{onSubmit:ee,className:"curation-edit-modal__form",children:[e.jsx("div",{className:"curation-edit-modal__form-group curation-edit-modal__types-tags",children:e.jsx(Ze,{className:"curation-edit-modal__item-pick",items:N||[],selectedIds:h.typeIds,onSelectedIdsChange:p=>b(t=>({...t,typeIds:p})),poolFilter:xe,enableGrouping:!0,fallbackGroupLabel:a("facetQueryBuilder.fallbackGroup"),labels:ue,resetSearchSignal:c})}),e.jsxs("div",{className:"curation-edit-modal__form-group curation-edit-modal__duplicate-flag",children:[e.jsxs("label",{className:"curation-edit-modal__checkbox-label",htmlFor:"curation-is-duplicate",children:[e.jsx("input",{id:"curation-is-duplicate",type:"checkbox",checked:h.isDuplicate,onChange:p=>b(t=>
1({...t,isDuplicate:p.target.checked})),disabled:!F}),e.jsx("span",{children:a("curationEditPopup.form.isDuplicate")})]}),e.jsx("p",{className:"curation-edit-modal__field-help",children:a("curationEditPopup.form.isDuplicateHelp")})]}),e.jsxs("div",{className:"curation-edit-modal__form-group",children:[e.jsxs("label",{htmlFor:"curation-short",children:[a("curationEditPopup.form.shortDescription"),O.some(p=>me(p,ke))&&e.jsx("span",{className:"required",children:"*"})]}),e.jsx("input",{id:"curation-short",type:"text",value:h.shortDescription,onChange:p=>b(t=>({...t,shortDescription:p.target.value})),className:"curation-edit-modal__input",maxLength:255,disabled:!F||!te})]}),e.jsxs("div",{className:"curation-edit-modal__form-group",children:[e.jsxs("label",{htmlFor:"curation-desc",children:[a("curationEditPopup.form.description"),O.some(p=>me(p,ke))&&e.jsx("span",{className:"required",children:"*"})]}),e.jsx("textarea",{id:"curation-desc",value:h.description,onChange:p=>b(t=>({...t,description:p.target.value})),className:"curation-edit-modal__textarea",rows:3,disabled:!F||!te})]}),fe&&e.jsxs("div",{className:"curation-edit-modal__form-group",children:[e.jsx("label",{htmlFor:"curation-color",children:a("curationEditPopup.form.customColor")}),e.jsxs("div",{className:"curation-edit-modal__color-input",children:[e.jsx("input",{id:"curation-color",type:"color",value:h.customColor,onChange:p=>b(t=>({...t,customColor:p.target.value})),className:"curation-edit-modal__color-picker",disabled:!F||!oe}),e.jsx("input",{type:"text",value:h.customColor,onChange:p=>b(t=>({...t,customColor:p.target.value})),className:"curation-edit-modal__color-text",disabled:!F||!oe})]})]}),e.jsxs("div",{className:"curation-edit-modal__form-group curation-edit-modal__form-group--custom-css",children:[e.jsx("label",{htmlFor:"curation-css",children:a("curationEditPopup.form.customCSS")}),!he&&e.jsx("p",{className:"curation-edit-modal__help-text curation-edit-modal__css-unsupported-hint",children:a("curationEditPopup.warnings.cssUnsupported")}),e.jsx("textarea",{id:"curation-css",value:h.customCSS,onChange:p=>b(t=>({...t,customCSS:p.target.value})),className:"curation-edit-modal__css-textarea curation-edit-modal__textarea",rows:6,disabled:!F||!ce}),e.jsx("button",{type:"button",className:"curation-edit-modal__preview-button",disabled:!F||!ce,onClick:()=>{x(!0),w(`/admin/curations/preview/${m}`,{state:{customCSS:h.customCSS}})},children:a("curationEditPopup.form.previewCSS")})]}),h.id!=null&&e.jsxs("div",{className:"curation-edit-modal__form-group",children:[e.jsx("label",{children:a("curationEditPopup.form.thumbnail")}),e.jsx(Ft,{disabled:!F,currentThumbnail:h.previewLink,onThumbnailUpdate:p=>{b(t=>({...t,previewLink:p})),g&&g({id:h.id,previewLink:p,levelId:m})},onThumbnailRemove:()=>{b(p=>({...p,previewLink:null})),g&&g({id:h.id,previewLink:null,levelId:m})},uploadEndpoint:`${K.admin.curations.root()}/${h.id}/thumbnail`})]}),e.jsxs("div",{className:"curation-edit-modal__actions",children:[e.jsx("button",{type:"button",onClick:v,className:"curation-edit-modal__cancel-btn",disabled:I,children:a("buttons.cancel",{ns:"common"})}),e.jsx("button",{type:"submit",className:"curation-edit-modal__save-btn",disabled:I||!F,children:I?a("loading.saving",{ns:"common"}):a("curationEditPopup.actions.saveAll")})]})]})]})]})},Vt=({isOpen:c,onClose:v,curationTypes:m=[],onSubmit:j,submitting:N=!1,suppressDismiss:o=!1})=>{const{t:g}=Ce(["components","common"]),{user:a}=Ae(),[w,A]=l.useState(""),[f,M]=l.useState([]);l.useEffect(()=>{c&&(A(""),M([]))},[c]);const h=a&&ge(a,[H.SUPER_ADMIN,H.HEAD_CURATOR]),b=l.useCallback(C=>!a||h||Ie(a.permissionFlags,C.abilities),[a,h]),ae=l.useMemo(()=>({sectionCurrent:g("bulkCreateCurationsPopup.typesCurrent"),sectionAdd:g("bulkCreateCurationsPopup.typesAdd"),searchPlaceholder:g("bulkCreateCurationsPopup.typesSearchPlaceholder"),emptySelected:g("bulkCreateCurationsPopup.typesNoneSelected"),emptyPool:g("bulkCreateCurationsPopup.typesNoneAvailable"),noResults:g("bulkCreateCurationsPopup.typesNoResults"),removeItem:g("bulkCreateCurationsPopup.removeType"),addItem:g("bulkCreateCurationsPopup.addType")}),[g]),R=l.useMemo(()=>wt(w),[w]),ne=R.length>0&&f.length>0&&!N,z=l.useCallback(C=>{M(At(C,m))},[m]),I=()=>{!ne||!j||j({levelIds:R,typeIds:f})};return c?e.jsxs(Ee,{onClose:v,closeDisabled:N||o,overlayClassName:"bulk-create-curations-popup__overlay",panelClassName:"bulk-create-curations-popup",children:[e.jsx(Te,{variant:"floating",className:"bulk-create-curations-popup__close-btn",onClick:v,disabled:N||o,"aria-label":g("buttons.close",{ns:"common"})}),e.jsxs("div",{className:"bulk-create-curations-popup__content",children:[e.jsx("h2",{className:"bulk-create-curations-popup__title",children:g("bulkCreateCurationsPopup.title")}),e.jsxs("label",{className:"bulk-create-curations-popup__field",children:[e.jsx("span",{className:"bulk-create-curations-popup__label",children:g("bulkCreateCurationsPopup.levelIds")}),e.jsx("input",{type:"text",className:"bulk-create-curations-popup__input",value:w,onChange:C=>A(C.target.value),placeholder:g("bulkCreateCurationsPopup.levelIdsPlaceholder"),autoFocus:!0,disabled:N}),e.jsx("span",{className:"bulk-create-curations-popup__hint",children:g("bulkCreateCurationsPopup.levelIdsParsed",{count:R.length})})]}),e.jsxs("div",{className:"bulk-create-curations-popup__field",children:[e.jsx("span",{className:"bulk-create-curations-popup__label",children:g("bulkCreateCurationsPopup.types")}),e.jsx(Ze,{className:"bulk-create-curations-popup__item-pick",items:m,selectedIds:f,onSelectedIdsChange:z,poolFilter:b,enableGrouping:!0,fallbackGroupLabel:g("facetQueryBuilder.fallbackGroup"),labels:ae,resetSearchSignal:c})]}),e.jsxs("div",{className:"bulk-create-curations-popup__actions",children:[e.jsx("button",{type:"button",className:"bulk-create-curations-popup__secondary-btn",onClick:v,disabled:N||o,children:g("buttons.cancel",{ns:"common"})}),e.jsx("button",{type:"button",className:"bulk-create-curations-popup__primary-btn",onClick:I,disabled:!ne||o,children:N?g("bulkCreateCurationsPopup.submitting"):g("bulkCreateCurationsPopup.submit",{count:R.length})})]})]})]}):null},zt=["not_found","cannot_manage"],Wt=({isOpen:c,invalid:v=[],validCount:m=0,onConfirm:j,onCancel:N,submitting:o=!1,allInvalid:g=!1})=>{const{t:a}=Ce(["components","common"]),w=l.useMemo(()=>{const f=new Map;for(const M of v){const h=f.get(M.reason)??[];h.push(M.levelId),f.set(M.reason,h)}return zt.filter(M=>f.has(M)).map(M=>({reason:M,levelIds:f.get(M)}))},[v]);if(!c)return null;const A=f=>{switch(f){case"not_found":return a("bulkCreateCurationsConfirmPopup.reasons.notFound");case"cannot_manage":return a("bulkCreateCurationsConfirmPopup.reasons.cannotManage");default:return f}};return e.jsxs(Ee,{onClose:N,closeDisabled:o,overlayClassName:"bulk-create-curations-confirm-popup__overlay",panelClassName:"bulk-create-curations-confirm-popup",children:[e.jsx(Te,{variant:"floating",className:"bulk-create-curations-confirm-popup__close-btn",onClick:N,disabled:o,"aria-label":a("buttons.close",{ns:"common"})}),e.jsxs("div",{className:"bulk-create-curations-confirm-popup__content",children:[e.jsx("h2",{className:"bulk-create-curations-confirm-popup__title",children:a(g?"bulkCreateCurationsConfirmPopup.titleAllInvalid":"bulkCreateCurationsConfirmPopup.title")}),e.jsx("p",{className:"bulk-create-curations-confirm-popup__message",children:g?a("bulkCreateCurationsConfirmPopup.messageAllInvalid"):a("bulkCreateCurationsConfirmPopup.message",{val
1idCount:m})}),e.jsxs("div",{className:"bulk-create-curations-confirm-popup__invalid-section",children:[e.jsx("span",{className:"bulk-create-curations-confirm-popup__label",children:a("bulkCreateCurationsConfirmPopup.invalidHeading",{count:v.length})}),e.jsx("div",{className:"bulk-create-curations-confirm-popup__invalid-list",children:w.map(({reason:f,levelIds:M})=>e.jsxs("div",{className:"bulk-create-curations-confirm-popup__invalid-group",children:[e.jsx("span",{className:"bulk-create-curations-confirm-popup__invalid-reason",children:A(f)}),e.jsx("span",{className:"bulk-create-curations-confirm-popup__invalid-ids",children:M.join(", ")})]},f))})]}),e.jsxs("div",{className:"bulk-create-curations-confirm-popup__actions",children:[e.jsx("button",{type:"button",className:"bulk-create-curations-confirm-popup__secondary-btn",onClick:N,disabled:o,children:a("buttons.cancel",{ns:"common"})}),!g&&e.jsx("button",{type:"button",className:"bulk-create-curations-confirm-popup__primary-btn",onClick:j,disabled:m===0||o,children:o?a("bulkCreateCurationsConfirmPopup.submitting"):a("bulkCreateCurationsConfirmPopup.proceed",{count:m})})]})]})]})},Aa=()=>{var Ue,Be,Ge;const c=Xe(),v=Ye(),{user:m}=Ae(),{curationTypes:j,reloadCurationTypes:N,difficultyDict:o,curationTypesDict:g}=we(),{t:a}=Ce(["pages","common"]),w=l.useMemo(()=>jt({title:a("curation.meta.title"),description:a("curation.meta.description"),pathname:v.pathname,noindex:!0}),[a,v.pathname]),[A,f]=l.useState(!1),[M,h]=l.useState([]),[b,ae]=l.useState(1),[R,ne]=l.useState(1),[z,I]=l.useState("1"),[C,J]=l.useState({curationFacet:null,search:""}),[x,se]=l.useState(""),[le,O]=l.useState(""),[Z,F]=l.useState(!1),[xe,ue]=l.useState(null),[ce,oe]=l.useState(!1),[te,he]=l.useState(!1),[fe,W]=l.useState(!1),[be,ee]=l.useState(!1),[ie,de]=l.useState(!1),[p,t]=l.useState(!1),[n,i]=l.useState(!1),[d,y]=l.useState({open:!1,validLevelIds:[],invalid:[],typeIds:[],skippedCount:0}),[S,q]=l.useState(null),D=l.useRef(null),X=l.useRef(null),Y=l.useRef(null),ye=l.useRef(null),et=Z||ce||te||fe||be||ie||p||d.open;Nt(et);const tt=async r=>{try{return ye.current&&ye.current.cancel("New password verification initiated"),ye.current=E.CancelToken.source(),await E.head(`${K.admin.verifyPassword()}?origin=curation`,{headers:{"X-Super-Admin-Password":r},cancelToken:ye.current.token}),se(r),F(!1),!0}catch(s){return E.isCancel(s)||je(s)||re.error("Invalid password"),!1}},at=async()=>{if(await tt(le)){const{type:s}=xe;s==="manage"?ot():s==="discordRoles"&&de(!0),ue(null)}O("")},nt=()=>{ue({type:"manage"}),F(!0)},st=()=>{ee(!0)},ot=()=>{N(),he(!0)},rt=()=>{q(null),oe(!0)},it=()=>{t(!0)},lt=r=>{var u;if(!Re(r))return;const s=r.level??((u=r.curations[0])==null?void 0:u.level);q({level:s,curations:r.curations}),W(!0)},ct=async r=>{var s,u,_;try{X.current&&X.current.cancel("New level selection initiated"),X.current=E.CancelToken.source();const P=await E.post(`${K.admin.curations.root()}`,{levelId:r.levelId},{cancelToken:X.current.token});re.success(a("curation.notifications.levelAdded"));const k=P.data.curation,L=k.levelId??((s=k.level)==null?void 0:s.id);h(B=>{const Q=B.findIndex(G=>{var U,_e;return(((U=G.level)==null?void 0:U.id)??((_e=G.curations[0])==null?void 0:_e.levelId))===L});if(Q>=0){const G=[...B],U=[...G[Q].curations,k];return G[Q]={...G[Q],level:G[Q].level??k.level,curations:U},G}return[{level:k.level,curations:[k]},...B]}),oe(!1),q(null)}catch(P){if(E.isCancel(P))return;re.error(((_=(u=P.response)==null?void 0:u.data)==null?void 0:_.error)||"Failed to add level curation")}},ut=({levelId:r,curations:s})=>{h(u=>u.map(_=>{var L,B,Q;return(((L=_.level)==null?void 0:L.id)??((B=_.curations[0])==null?void 0:B.levelId))!==r?_:{level:((Q=s[0])==null?void 0:Q.level)??_.level,curations:s}}))},dt=r=>{h(s=>s.map(u=>{var P,k;const _=((P=u.level)==null?void 0:P.id)??((k=u.curations[0])==null?void 0:k.levelId);return r.levelId!=null&&_!==r.levelId?u:{...u,curations:u.curations.map(L=>L.id===r.id?{...L,previewLink:r.previewLink}:L)}}))},pt=async r=>{var s,u;if(window.confirm(a("curation.confirmations.deleteCuration")))try{Y.current&&Y.current.cancel("New delete request initiated"),Y.current=E.CancelToken.source(),await E.delete(`${K.admin.curations.root()}/${r.id}`,{cancelToken:Y.current.token}),h(_=>_.map(P=>({...P,curations:P.curations.filter(k=>k.id!==r.id)})).filter(P=>P.curations.length>0)),re.success(a("curation.notifications.deleted"))}catch(_){if(E.isCancel(_))return;re.error(((u=(s=_.response)==null?void 0:s.data)==null?void 0:u.error)||"Failed to delete curation")}},Pe=r=>{if(!r||!m)return!1;if(ge(m,[H.SUPER_ADMIN,H.HEAD_CURATOR]))return!0;
1if(!ge(m,[H.CURATOR,H.RATER]))return!1;const s=r.types||(r.type?[r.type]:[]);return s.length===0?!0:s.every(u=>u.abilities==null?!1:Ie(m.permissionFlags,u.abilities))},Re=r=>r.curations.length>0&&r.curations.every(s=>Pe(s)),De=async()=>{var r,s;try{D.current&&D.current.cancel("New fetch request initiated"),D.current=E.CancelToken.source(),f(!0);const u=new URLSearchParams({page:b,groupByLevel:"true",...C.search&&{search:C.search}}),_=kt({curationTypes:C.curationFacet,combine:"and"});_&&u.append("facetQuery",_);const P=await E.get(`${K.admin.curations.root()}?${u}`,{cancelToken:D.current.token});h(P.data.levelInstances??[]);const k=P.data.totalPages;ne(typeof k=="number"?k:0)}catch(u){if(E.isCancel(u))return;re.error(((s=(r=u.response)==null?void 0:r.data)==null?void 0:s.error)||"Failed to fetch curations")}finally{f(!1)}},Oe=()=>{y({open:!1,validLevelIds:[],invalid:[],typeIds:[],skippedCount:0})},mt=(r,s,u)=>{const _=(r||0)+(s||0);if(u>0){re.success(a("curation.notifications.bulkPartialSuccess",{affected:_,skipped:u}));return}re.success(a("curation.notifications.bulkSuccess",{created:r||0,updated:s||0}))},Fe=async({levelIds:r,typeIds:s,skippedCount:u=0})=>{var _,P;if(!(!(r!=null&&r.length)||!(s!=null&&s.length))){i(!0);try{const k=await E.post(`${K.admin.curations.root()}`,{levelIds:r,typeIds:s}),{created:L=0,updated:B=0}=k.data||{};mt(L,B,u),t(!1),Oe(),await De()}catch(k){re.error(((P=(_=k.response)==null?void 0:_.data)==null?void 0:P.error)||a("curation.notifications.bulkFailed"))}finally{i(!1)}}},gt=async({levelIds:r,typeIds:s})=>{var u,_;if(!(!(r!=null&&r.length)||!(s!=null&&s.length))){i(!0);try{const P=await E.post(`${K.admin.curations.root()}`,{levelIds:r,typeIds:s,validateOnly:!0}),{validLevelIds:k=[],invalid:L=[]}=P.data||{};if(L.length===0){i(!1),await Fe({levelIds:k,typeIds:s,skippedCount:0});return}y({open:!0,validLevelIds:k,invalid:L,typeIds:s,skippedCount:L.length})}catch(P){re.error(((_=(u=P.response)==null?void 0:u.data)==null?void 0:_.error)||a("curation.notifications.bulkFailed"))}finally{i(!1)}}},ht=async()=>{const{validLevelIds:r,typeIds:s,skippedCount:u}=d;r.length&&await Fe({levelIds:r,typeIds:s,skippedCount:u})};l.useEffect(()=>{De()},[b,C]),l.useEffect(()=>()=>{D.current&&D.current.cancel("Component unmounted"),X.current&&X.current.cancel("Component unmounted"),Y.current&&Y.current.cancel("Component unmounted"),ye.current&&ye.current.cancel("Component unmounted")},[]),l.useEffect(()=>{var r,s;if((r=v.state)!=null&&r.updatedCuration){const{updatedCuration:u,action:_}=v.state;h(P=>{var G;let k=!1;const L=P.map(U=>U.curations.some(pe=>pe.id===u.id)?(k=!0,{...U,curations:U.curations.map(pe=>pe.id===u.id?u:pe)}):U);if(k)return L;const B=u.levelId??((G=u.level)==null?void 0:G.id),Q=L.findIndex(U=>{var _e,pe;return(((_e=U.level)==null?void 0:_e.id)??((pe=U.curations[0])==null?void 0:pe.levelId))===B});if(Q>=0){const U=[...L];return U[Q]={...U[Q],curations:[...U[Q].curations,u]},U}return[{level:u.level,curations:[u]},...L]}),_==="discarded"?re.success(a("curation.notifications.discarded")):_==="backToEdit"&&Pe(u)&&(q({level:u.level,curations:null,levelId:u.levelId??((s=u.level)==null?void 0:s.id)}),W(!0)),c(v.pathname,{replace:!0,state:{}})}},[v.state,c,v.pathname,m]);
1const ft=(r,s)=>{J(u=>({...u,[r]:s})),ae(1),I("1")},ve=r=>{ae(r),I(r.toString())},bt=()=>{if(b>1){const r=b-1;ve(r),r<=2&&I("1")}},yt=()=>{b<R&&ve(b+1)},_t=r=>{const s=r.target.value;if(I(s),s==="")return;const u=s.replace(/^0+/,"")||"0",_=parseInt(u);!isNaN(_)&&_>=1&&_<=R&&ve(_)},Ct=()=>{if(z===""||z==="0"){I("1"),ve(1);return}const r=z.replace(/^0+/,"")||"0",s=parseInt(r);(isNaN(s)||s<1||s>R)&&(I("1"),ve(1))},xt=()=>{oe(!1),q(null)},vt=()=>{W(!1),q(null)};return e.jsxs("div",{className:"curation-page",children:[e.jsx(St,{...w}),e.jsxs("div",{className:"curation-container page-content",children:[e.jsxs("div",{className:"curation-header",children:[e.jsx("h1",{children:a("curation.title")}),e.jsx("p",{children:a("curation.description")})]}),e.jsxs("div",{className:"curation-filters",children:[e.jsxs("div",{className:"curation-filter-group",children:[e.jsx("label",{children:a("curation.filters.search")}),e.jsxs("div",{className:"curation-filter-group-content",children:[e.jsx("input",{name:"curation-search",className:"input-search",autoComplete:"off","aria-autocomplete":"none",type:"text",value:C.search,onChange:r=>ft("search",Pt(r.target.value)),placeholder:a("curation.filters.searchPlaceholder")}),e.jsx(Tt,{items:j,value:C.curationFacet,onChange:r=>J(s=>({...s,curationFacet:r})),title:a("curation.filters.selectedTypes")})]})]}),ge(m,[H.SUPER_ADMIN,H.HEAD_CURATOR,H.RATER,H.CURATOR])&&e.jsxs("div",{className:"curation-add-buttons__group",children:[e.jsxs("button",{type:"button",className:"curation-add-level-btn",onClick:rt,title:a("curation.actions.addLevel"),children:["🎵 ",a("curation.actions.addLevel")]}),e.jsx("button",{type:"button",className:"curation-bulk-add-btn",onClick:it,title:a("curation.actions.bulkCreate"),"aria-label":a("curation.actions.bulkCreate"),children:"➔📋"})]}),ge(m,[H.SUPER_ADMIN,H.HEAD_CURATOR])&&e.jsxs("div",{className:"curation-buttons",children:[$e(m,H.SUPER_ADMIN)&&e.jsxs("button",{className:"curation-manage-types-btn",onClick:nt,title:a("curation.actions.manageTypes"),children:["⚙️",a("curation.actions.manageTypes")]}),e.jsxs("button",{className:"curation-manage-curators-btn",onClick:st,title:a("curation.actions.manageCurators"),children:["👥",a("curation.actions.manageCurators")]}),e.jsxs(Et,{className:"curation-schedule-btn",to:"/admin/curations/schedules",title:a("curation.actions.manageSchedule"),children:["📅",a("curation.actions.manageSchedule")]}),$e(m,H.SUPER_ADMIN)&&e.jsxs("button",{className:"curation-discord-roles-btn",onClick:()=>{x?de(!0):(ue({type:"discordRoles"}),F(!0))},title:a("components:discordRoles.title",{defaultValue:"Discord Role Sync"}),children:["💬",a("components:discordRoles.title",{defaultValue:"Discord Roles"})]})]})]}),e.jsx("div",{className:"curation-list",children:A?e.jsx("div",{className:"curation-loading",children:a("curation.loading")}):M.length===0?e.jsx("div",{className:"curation-empty",children:a("curation.empty")}):M.map(r=>{var _,P,k,L;const s=r.level??((_=r.curations[0])==null?void 0:_.level),u=(s==null?void 0:s.id)??`row-${(P=r.curations[0])==null?void 0:P.id}`;return e.jsx("div",{className:"curation-item curation-item--level",children:e.jsxs("div",{className:"curation-item-wrapper curation-item-wrapper--level",children:[e.jsxs("div",{className:"curation-song-wrapper",children:[e.jsxs("div",{className:"curation-song-header",children:[e.jsx("img",{src:Ne((k=o[s==null?void 0:s.diffId])==null?void 0:k.icon,Se.MEDIUM)||"/default-difficulty-icon.png",alt:((L=o[s==null?void 0:s.diffId])==null?void 0:L.name)||"Difficulty",className:"curation-difficulty-icon"}),e.jsx("h3",{children:(s==null?void 0:s.song)||"Unknown Level"}),e.jsxs("p",{className:"curation-level-id",children:["#",s==null?void 0:s.id]})]}),e.jsxs("div",{className:"curation-artist-creator",children:[e.jsx("p",{className:"curation-artist",children:(s==null?void 0:s.artist)||"Unknown Artist"}),e.jsx("p",{className:"curation-creator",children:Qe(s)})]})]}),Re(r)&&e.jsx("button",{type:"button",className:"curation-level-edit-btn",onClick:()=>lt(r),title:a("curation.actions.editLevel"),children:e.jsx(Ke,{})}),e.jsx("div",{className:"curation-level-curations",children:r.curations.map(B=>
1{const Q=B.types||(B.type?[B.type]:[]);return e.jsxs("div",{className:`curation-type-slot ${Pe(B)?"":"protected"}`,children:[e.jsx("div",{className:"curation-type-info curation-type-info--inline curation-type-info--multi",children:Q.length===0?e.jsx("span",{className:"curation-type-name curation-type-name--empty",children:"—"}):Q.map(G=>{var U;return e.jsxs("span",{className:"curation-type-badge",children:[e.jsx("img",{src:Ne(G.id!=null&&((U=g==null?void 0:g[G.id])==null?void 0:U.icon)||G.icon,Se.SMALL)||"/default-curation-icon.png",alt:"",className:"curation-type-slot-icon"}),e.jsx("span",{className:"curation-type-name",style:{color:G.color},children:G.name})]},G.id)})}),Pe(B)&&e.jsx("div",{className:"curation-item-actions",children:e.jsx("button",{type:"button",className:"curation-action-btn curation-action-btn--delete",onClick:()=>pt(B),title:a("curation.actions.deleteCuration"),children:e.jsx(Je,{})})})]},B.id)})})]})},u)})}),R>1&&e.jsxs("div",{className:"curation-pagination",children:[e.jsx("button",{onClick:bt,disabled:b===1,className:"curation-pagination-btn",children:a("pagination.previous",{ns:"common"})}),e.jsxs("div",{className:"curation-page-controls",children:[e.jsx("span",{children:a("curation.pagination.pageLabel")}),e.jsx("input",{type:"number",max:R,value:z,onChange:_t,onBlur:Ct,className:"curation-page-input","aria-label":a("pagination.page",{ns:"common",page:b,total:R})}),e.jsx("span",{children:a("curation.pagination.pageOf",{total:R})})]}),e.jsx("button",{onClick:yt,disabled:b>=R,className:"curation-pagination-btn",children:a("pagination.next",{ns:"common"})})]})]}),Z&&e.jsx("div",{className:"password-modal",children:e.jsxs("div",{className:"password-modal-content",children:[e.jsx("h3",{children:a("curation.password.title")}),e.jsx("p",{children:a("curation.password.description")}),e.jsx("input",{type:"password",autoComplete:"section-password-super-admin",value:le,onChange:r=>O(r.target.value),placeholder:a("curation.password.placeholder")}),e.jsxs("div",{className:"password-modal-actions",children:[e.jsx("button",{className:"confirm-btn btn-fill-primary",onClick:at,disabled:!le,children:a("curation.password.submit")}),e.jsx("button",{className:"cancel-btn btn-fill-neutral-dark",onClick:()=>{F(!1),O(""),ue(null)},children:a("buttons.cancel",{ns:"common"})})]})]})}),e.jsx(Lt,{isOpen:ce,onClose:xt,onLevelSelect:ct,curationTypes:j}),e.jsx(Vt,{isOpen:p,onClose:()=>{!n&&!d.open&&t(!1)},curationTypes:j,onSubmit:gt,submitting:n&&!d.open,suppressDismiss:d.open}),e.jsx(Wt,{isOpen:d.open,invalid:d.invalid,validCount:d.validLevelIds.length,allInvalid:d.validLevelIds.length===0,onConfirm:ht,onCancel:()=>{n||Oe()},submitting:n}),e.jsx(Ot,{isOpen:te,onClose:()=>he(!1),curationTypes:j,verifiedPassword:x}),e.jsx(Ht,{isOpen:fe,onClose:vt,levelId:S&&(S.levelId??((Ue=S.level)==null?void 0:Ue.id)??((Ge=(Be=S.curations)==null?void 0:Be[0])==null?void 0:Ge.levelId)),level:S==null?void 0:S.level,curationTypes:j,onUpdate:ut,onCurationPatched:dt}),be&&e.jsx(Rt,{onClose:()=>ee(!1),currentUser:m,managementType:"curator"}),e.jsx(Dt,{isOpen:ie,onClose:()=>de(!1),roleType:"CURATION",curationTypes:j,verifiedPassword:x}),e.jsx("div",{className:"curation-notifications"}),e.jsx(Mt,{})]})};export{Aa as default};

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.