PageSourceSearch

https://www.mokilsin.org/_next/static/chunks/4330-755b5153e6693d05.js

js mokilsin.org collected 2026-10-06 03:40:56 UTC 34,172 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4330],{69368:function(e,t,n){n.d(t,{Z:function(){return C}});var r=n(63366),i=n(87462),a=n(67294),l=n(90512),o=n(94780),s=n(51025),c=n(21964),d=n(88169),u=n(85893),p=(0,d.Z)((0,u.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),h=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),m=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox"),f=n(98216),g=n(28628),x=n(90948),b=n(86206),v=n(1588),y=n(34867);function getCheckboxUtilityClass(e){return(0,y.ZP)("MuiCheckbox",e)}let j=(0,v.Z)("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),w=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size","className"],useUtilityClasses=e=>{let{classes:t,indeterminate:n,color:r,size:a}=e,l={root:["root",n&&"indeterminate",`color${(0,f.Z)(r)}`,`size${(0,f.Z)(a)}`]},s=(0,o.Z)(l,getCheckboxUtilityClass,t);return(0,i.Z)({},t,s)},k=(0,x.ZP)(c.Z,{shouldForwardProp:e=>(0,b.Z)(e)||"classes"===e,name:"MuiCheckbox",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.indeterminate&&t.indeterminate,t[`size${(0,f.Z)(n.size)}`],"default"!==n.color&&t[`color${(0,f.Z)(n.color)}`]]}})(({theme:e,ownerState:t})=>(0,i.Z)({color:(e.vars||e).palette.text.secondary},!t.disableRipple&&{"&:hover":{backgroundColor:e.vars?`rgba(${"default"===t.color?e.vars.palette.action.activeChannel:e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,s.Fq)("default"===t.color?e.palette.action.active:e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==t.color&&{[`&.${j.checked}, &.${j.indeterminate}`]:{color:(e.vars||e).palette[t.color].main},[`&.${j.disabled}`]:{color:(e.vars||e).palette.action.disabled}})),_=(0,u.jsx)(h,{}),I=(0,u.jsx)(p,{}),S=(0,u.jsx)(m,{}),Z=a.forwardRef(function(e,t){var n,o;let s=(0,g.i)({props:e,name:"MuiCheckbox"}),{checkedIcon:c=_,color:d="primary",icon:p=I,indeterminate:h=!1,indeterminateIcon:m=S,inputProps:f,size:x="medium",className:b}=s,v=(0,r.Z)(s,w),y=h?m:p,j=h?m:c,Z=(0,i.Z)({},s,{color:d,indeterminate:h,size:x}),C=useUtilityClasses(Z);return(0,u.jsx)(k,(0,i.Z)({type:"checkbox",inputProps:(0,i.Z)({"data-indeterminate":h},f),icon:a.cloneElement(y,{fontSize:null!=(n=y.props.fontSize)?n:x}),checkedIcon:a.cloneElement(j,{fontSize:null!=(o=j.props.fontSize)?o:x}),ownerState:Z,ref:t,className:(0,l.Z)(C.root,b)},v,{classes:C}))});var C=Z},79965:function(e,t,n){n.d(t,{Z:function(){return useFormControl}});var r=n(67294);let i=r.createContext(void 0);function useFormControl(){return r.useContext(i)}},21964:function(e,t,n){n.d(t,{Z:function(){return j}});var r=n(63366),i=n(87462),a=n(67294),l=n(90512),o=n(94780),s=n(98216),c=n(90948),d=n(86206),u=n(49299),p=n(79965),h=n(49990),m=n(1588),f=n(34867);function getSwitchBaseUtilityClass(e){return(0,f.ZP)("PrivateSwitchBase",e)}(0,m.Z)("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]);var g=n(85893);let x=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],useUtilityClasses=e=>{let{classes:t,checked:n,disabled:r,edge:i}=e,a={root:["root",n&&"checked",r&&"disabled",i&&`edge${(0,s.Z)(i)}`],input:["input"]};return(0,o.Z)(a,getSwitchBaseUtilityClass,t)},b=(0,c.ZP)(h.Z,{name:"MuiSwitchBase"})(({ownerState:e})=>(0,i.Z)({padding:9,borderRadius:"50%"},"start"===e.edge&&{marginLeft:"small"===e.size?-3:-12},"end"===e.edge&&{marginRight:"small"===e.size?-3:-12})),v=(0,c.ZP)("input",{name:"MuiSwitchBase",shouldForwardProp:d.Z})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),y=a.forwardRef(function(e,t){let{autoFocus:n,checked:a,checkedIcon:o,className:s,defaultChecked:c,disabled:d,disableFocusRipple:h=!1,edge:m=!1,icon:f,id:y,inputProps:j,inputRef:w,name:k,onBlur:_,onChange:I,onFocus:S,readOnly:Z,required:C=!1,tabIndex:P,type:O,value:F}=e,R=(0,r.Z)(e,x),[z,M]=(0,u.Z)({controlled:a,default:!!c,name:"SwitchBase",state:"checked"}),E=(0,p.Z)(),A=d;E&&void 0===A&&(A=E.disabled);let L="checkbox"===O||"radio"===O,W=(0,i.Z)({},e,{checked:z,disabled:A,disableFocusRipple:h,edge:m}),q=useUtilityClasses(W);return(0,g.jsxs)(b,(0,i.Z)({component:"span",className:(0,l.Z)(q.root,s),centerRipple:!0,focusRipple:!h,disabled:A,tabIndex:null,role:void 0,onFocus:e=>{S&&S(e),E&&E.onFocus&&E.onFocus(e)},onBlur:e=>{_&&_(e),E&&E.onBlur&&E.onBlur(e)},ownerState:W,ref:t},R,{children:[(0,g.jsx)(v,(0,i.Z)({autoFocus:n,checked:a,defaultChecked:c,className:q.input,disabled:A,id:L?y:void 0,name:k,onChange:e=>{if(e.nativeEvent.defaultPrevented)return;let t=e.target.checked;M(t),I&&I(e,t)},readOnly:Z,ref:w,required:C,ownerState:W,tabIndex:P,type:O},"checkbox"===O&&void 0===F?{}:{value:F},j)),z?o:f]}))});var j=y},23312:function(e,t,n){var r,i=n(67294);function _extends(){return(_extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(null,arguments)}t.Z=function(e){return i.createElement("svg",_extends({width:32,height:32,fill:"none",xmlns:"http://www.w3.org/2000/svg"},e),r||(r=i.createElement("path",{d:"m10.58 18.373 9.635-9.636a3.004 3.004 0 0 1 4.242 0 3.003 3.003 0 0 1 0 4.243L11.201 26.064a4.998 4.998 0 0 1-7.07 0 4.998 4.998 0 0 1 0-7.07L17.244 6.05a6.997 6.997 0 0 1 9.898 0 6.997 6.997 0 0 1 .002 9.9l-9.492 9.493",stroke:"#999",strokeWidth:2,strokeLinecap:"round"})))}},471:function(e,t,n){n.d(t,{I:function(){return BoardLayout}});var r=n(85893),i=n(67294),a=n(4480),l=n(88767),o=n(57445),s=n(5133);function BoardLayout(e){let{children:t}=e,n=(0,a.Zl)(o.U7);return(0,i.useEffect)(()=>{n(e=>({...e,page:{...e.page,useHeader:!0,useFooter:!0}}))},[n]),(0,l.useQuery)({queryFn:s.UQ,onSuccess:e=>{n(t=>({...t,pageList:e.data.list,page:{...t.page,useHeader:!0,useFooter:!0}}))}}),(0,r.jsx)(r.Fragment,{children:t})}},14052:function(e,t,n){var r=n(16373),i=n.n(r);t.Z=()=>{let loadImage=e=>new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=n,r.src=URL.createObjectURL(e)}),imageResizing=async e=>{try{let t=await loadImage(e);if(t.width<=2560&&t.height<=2560)return e;let n=document.createElement("canvas"),r=Math.min(2560/t.width,2560/t.height);n.width=Math.floor(t.width*r),n.height=Math.floor(t.height*r);let a=i()({tile:1024,concurrency:1,features:["js"],createImageBitmap:!1});await a.resize(t,n,{alpha:!0,unsharpAmount:80,unsharpRadius:.6,unsharpThreshold:2,quality:3});let l=await a.toBlob(n,e.type,.9),o=new File([l],e.name,{type:e.type,lastModified:Date.now()});return URL.revokeObjectURL(t.src),o}catch(e){throw e}};return{checkImageValidation:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return!!e&&(null==e?void 0:e.size)!==0&&(t.includes(e.type)?!(e.size>n)||(alert((null==r?void 0:r.fileSize)||"파일 크기를 확인해주세요."),!1):(alert((null==r?void 0:r.fileType)||"파일 형식을 확인해주세요."),!1))},imageResizing}}},39746:function(e,t,n){var r=n(85893),i=n(67294),a=n(9008),l=n.n(a),o=n(4480),s=n(57445);let c=["commerce","starter","growth"];t.Z=e=>{let{children:t,commonCode:n,bodyRef:a,footerRef:d}=e,{plan:u}=(0,o.sJ)(s.ZP),p=!c.includes(u),[h,m]=(0,i.useState)(),parseHeadTags=e=>{var t;let n=new DOMParser,r=n.parseFromString(e,"text/html"),i=(null===(t=r.head.querySelector("title"))||void 0===t?void 0:t.innerText)||"",a=Array.from(r.head.querySelectorAll("meta")).map(e=>({name:e.getAttribute("name"),property:e.getAttribute("property"),content:e.getAttribute("content")})),l=Array.from(r.head.querySelectorAll("link")).map(e=>({rel:e.getAttribute("rel"),href:e.getAttribute("href"),type:e.getAttribute("type")})),o=Array.from(r.head.querySelectorAll("style")).map(e=>e.textContent),s=Array.from(r.head.querySelectorAll("script")).map(e=>({src:e.getAttribute("src"),content:e.textContent,type:e.getAttribute("type")})),c=r.head.querySelector("base")?{href:r.head.querySelector("base").getAttribute("href"),target:r.head.querySelector("base").getAttribute("target")}:null,d=Array.from(r.head.querySelectorAll("noscript")).map(e=>e.textContent);return{title:i,metas:a,links:l,styles:o,scripts:s,base:c,noscripts:d}},appendScripts=e=>{for(let n of e){var t=document.createElement("script");n.type&&(t.type=n.type),n.src&&(t.src=n.src),n.content&&(t.innerHTML=n.content),document.body.appendChild(t)}};return(0,i.useEffect)(()=>
1{if(!p&&n){if(m(parseHeadTags(null==n?void 0:n.commonHeader)),(null==a?void 0:a.current)&&(null==n?void 0:n.commonBody)){a.current.innerHTML=n.commonBody;let{scripts:e}=parseHeadTags(n.commonBody);appendScripts(e)}if((null==d?void 0:d.current)&&(null==n?void 0:n.commonFooter)){d.current.innerHTML=n.commonFooter;let{scripts:e}=parseHeadTags(n.commonFooter);appendScripts(e)}}},[p,n]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(l(),{children:[(null==h?void 0:h.title)&&(0,r.jsx)("title",{children:null==h?void 0:h.title}),null==h?void 0:h.metas.map((e,t)=>(0,r.jsx)("meta",{...e.name&&{name:e.name},...e.property&&{property:e.property},content:e.content},"meta-".concat(t))),null==h?void 0:h.links.map((e,t)=>(0,r.jsx)("link",{rel:e.rel,href:e.href,...e.type&&{type:e.type}},"link-".concat(t))),null==h?void 0:h.styles.map((e,t)=>(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:e}},"style-".concat(t))),null==h?void 0:h.scripts.map((e,t)=>e.src?(0,r.jsx)("script",{src:e.src,...e.type&&{type:e.type}},"script-".concat(t)):(0,r.jsx)("script",{dangerouslySetInnerHTML:{__html:e.content},...e.type&&{type:e.type}},"script-".concat(t))),(null==h?void 0:h.base)&&(0,r.jsx)("base",{href:null==h?void 0:h.base.href,...(null==h?void 0:h.base.target)&&{target:null==h?void 0:h.base.target}}),null==h?void 0:h.noscripts.map((e,t)=>(0,r.jsx)("noscript",{dangerouslySetInnerHTML:{__html:e}},"noscript-".concat(t)))]}),t]})}},29554:function(e,t,n){n.d(t,{Z:function(){return Write}});var r=n(82729),i=n(85893),a=n(5152),l=n.n(a),o=n(41664),s=n.n(o),c=n(11163),d=n(67294),u=n(88767),p=n(87536),h=n(63448),m=n(56312),f=n(47171),g=n(49378),x=n(25675),b=n.n(x),v=n(7986),y=n(16829),j=n(50594);function _templateObject(){let e=(0,r._)(["\n  justify-content: flex-start;\n  padding: 12px;\n  background-color: rgba(0, 0, 0, 0.03);\n\n  & > div {\n    position: relative;\n    display: inline-flex;\n  }\n\n  .delete {\n    position: absolute;\n    top: 0;\n    right: -24px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background-color: rgba(0, 0, 0, 0.5);\n    width: 24px;\n    height: 24px;\n    cursor: pointer;\n\n    &:hover {\n      background-color: rgba(0, 0, 0, 0.8);\n    }\n  }\n"]);return _templateObject=function(){return e},e}let w=(0,y.Z)(v.Rx.gq)(_templateObject());var _components_Images=e=>{let{fileList:t,removeFile:n}=e,[r,a]=(0,d.useState)([]);return(0,d.useEffect)(()=>{if(!t||0===t.length){a([]);return}let e=Array.from(t).map(e=>e?new Promise(t=>{let n=new FileReader;n.onload=()=>t(n.result),n.readAsDataURL(e)}):"");Promise.all(e).then(e=>{a(e)})},[t]),0===t.length?null:(0,i.jsx)(w,{children:r.map((e,t)=>(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"delete",onClick:()=>n(t),"aria-hidden":"true",children:(0,i.jsx)(j.Z,{style:{fontSize:20,color:"#fff"}})}),(0,i.jsx)(b(),{src:e,alt:"Preview ".concat(t),width:100,height:100,style:{maxWidth:"100px",maxHeight:"100px",objectFit:"cover"}})]},t))})},k=n(83780),_=n(23312);function Files_templateObject(){let e=(0,r._)(["\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n  gap: 8px;\n  padding: 12px;\n  background-color: rgba(0, 0, 0, 0.03);\n  white-space: nowrap;\n\n  & > div {\n    position: relative;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: flex-start;\n    gap: 8px;\n    padding: 4px;\n    width: 100%;\n\n    svg {\n      transform: scale(0.7);\n      margin-right: -4px;\n    }\n\n    .name {\n      color: #121212;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n    .size {\n      color: #999;\n      font-size: 12px;\n      margin-top: 2px;\n    }\n    .delete {\n      color: #ff3f3f;\n      font-size: 12px;\n      margin-top: 2px;\n      cursor: pointer;\n\n      &:hover {\n        // color: #333;\n        text-decoration: underline;\n      }\n    }\n  }\n"]);return Files_templateObject=function(){return e},e}let I=(0,y.Z)(v.Rx.tu)(Files_templateObject());var _components_Files=e=>{let{files:t,removeFile:n}=e;
1return(null==t?void 0:t.length)===0?null:(0,i.jsx)(v.Rx.tu,{align:"flex-start",justify:"flex-start",gap:"4px",children:(0,i.jsx)(I,{children:t&&[...t].map((e,t)=>{let{name:r,size:a}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(_.Z,{}),(0,i.jsx)("div",{className:"name",children:r}),(0,i.jsxs)("div",{className:"size",children:["(",(0,k.sS)(a),")"]}),(0,i.jsx)("div",{className:"delete",onClick:()=>n(t),children:"삭제"})]},"uploaded-file-".concat(t))})})})};function Password_templateObject(){let e=(0,r._)(["\n  height: 400px;\n"]);return Password_templateObject=function(){return e},e}function _templateObject1(){let e=(0,r._)(["\n  gap: 8px;\n  width: 300px;\n  max-width: 95vw;\n  padding: 16px 12px 12px;\n  background-color: #fff;\n\n  p {\n    font-size: 14px;\n    margin-bottom: 8px;\n  }\n\n  input {\n    width: 100%;\n    height: 40px;\n    padding: 0 12px;\n    border: 1px solid #e7e7e7;\n    outline: none !important;\n  }\n"]);return _templateObject1=function(){return e},e}function _templateObject2(){let e=(0,r._)(["\n  width: 100%;\n  height: 40px;\n  background-color: #333;\n  color: #fff;\n  cursor: pointer;\n"]);return _templateObject2=function(){return e},e}function _templateObject3(){let e=(0,r._)(["\n  border: 1px solid #e7e7e7;\n  background-color: transparent;\n  color: #121212;\n"]);return _templateObject3=function(){return e},e}let S=(0,y.Z)(v.Rx.tu)(Password_templateObject()),Z=(0,y.Z)(v.Rx.tu)(_templateObject1()),C=y.Z.button(_templateObject2()),P=(0,y.Z)(C)(_templateObject3());var _components_Password=e=>{let{isOpen:t,onConfirm:n}=e,r=(0,d.useRef)(null);return t?(0,i.jsx)(S,{children:(0,i.jsxs)(Z,{children:[(0,i.jsx)("p",{children:"비밀번호를 입력해주세요."}),(0,i.jsx)("input",{ref:r,type:"password"}),(0,i.jsxs)(v.Rx.gq,{gap:"8px",children:[(0,i.jsx)(P,{onClick:()=>{history.back()},children:"뒤로가기"}),(0,i.jsx)(C,{onClick:()=>{var e;let t=(null==r?void 0:null===(e=r.current)||void 0===e?void 0:e.value)||"";(null==t?void 0:t.length)===0?alert("비밀번호를 입력해주세요."):n(t)},children:"확인"})]})]})}):null},O=n(26761),F=n(97651),R=n(96915),_components_WrapperModify=e=>{let{children:t,boardId:n,postId:r}=e,{data:a,isFetched:l}=(0,F.Z)(n),{isLoggedIn:o,user:{isAdmin:s,isStaff:c,name:p,groupIds:h}}=(0,O.Z)(),[m,f]=(0,d.useState)(!1),[g,x]=(0,d.useState)(null),[b,v]=(0,d.useState)(null),[y,j]=(0,d.useState)(null),[w,k]=(0,d.useState)(null),_=(0,u.useMutation)(R.PQ),I=(0,u.useMutation)(R.SD);(0,d.useEffect)(()=>{l&&(a||(alert("게시판이 존재하지 않습니다."),history.back()),x(!!(()=>{var e;let t=null==a?void 0:null===(e=a.permissions)||void 0===e?void 0:e.find(e=>"write_post"===e.type),{roles:n,groups:r}=t,{all:i,login:l,admin:s,group:d}=n;if(i)return!0;if(l)return o;if(s)return c;if(d){if(c)return!0;let e=new Set(h);return r.some(t=>e.has(t))}})()))},[l,a]),(0,d.useEffect)(()=>{if(null!==g&&null!==b){if(g||b){f(!0);return}alert("권한이 없습니다.\n관리자에게 문의해주세요."),history.back()}},[g,b]),(0,d.useEffect)(()=>{r&&fetchData(null)},[r]);let fetchData=async e=>{try{var t;let{data:i}=await _.mutateAsync({boardId:n,postId:r,password:e||null});if(0===i.authorId&&!i.hasPermission){if(e){let t=await checkPassword(e);if(!t)return}else{j({type:"modify",onConfirm:e=>{fetchData(e)},onClose:()=>{history.back()}});return}}v(!!i.hasPermission||0===i.authorId),k({post:i,defaultValues:{boardId:n,postId:r,categoryId:i.categoryId,title:i.title,contents:i.contents,isVisible:!!i.isVisible,isSecret:!!i.isSecret,fixPost:!!i.fixedSeq,writer:i.writer,password:e||null,thumbnailImageId:(null===(t=i.thumbnailImage)||void 0===t?void 0:t.id)||0,subImageIds:i.subImages.map(e=>e.id),fileIds:i.files.map(e=>e.id),tags:i.tags}})}catch(e){errorProcess(e)}},checkPassword=async e=>{try{let{data:t}=await I.mutateAsync({boardId:n,postId:r,password:e});return"ok"===t}catch(e){return errorProcess(e),!1}},errorProcess=e=>{var t,n;let r=null==e?void 0:null===(n=e.response)||void 0===n?void 0:null===(t=n.data)||void 0===t?void 0:t.code;switch(r){case"POST_NOT_ALLOWED":alert("권한이 없습니다.\n관리자
1에게 문의해주세요."),history.back();break;case"POST_NOT_VISIBLE":alert("조회할 수 없는 게시글입니다.\n관리자에게 문의해주세요."),history.back();break;case"POST_PASSWORD_REQUIRED":j({type:"modify",onConfirm:e=>{fetchData(e)},onClose:()=>{history.back()}});break;case"POST_PASSWORD_INVALID":case"POST_SECRET_PASSWORD_INVALID":alert("비밀번호가 올바르지 않습니다.\n다시 한 번 시도해주세요."),j({type:"modify",onConfirm:e=>{fetchData(e)},onClose:()=>{history.back()}});break;case"POST_BAD_REQUEST":alert("요청 중 문제가 발생했습니다.\n관리자에게 문의해주세요."),history.back()}};return(0,i.jsxs)(i.Fragment,{children:[w&&l&&m&&d.cloneElement(t,{data:a,username:p,isAdmin:s,isLoggedIn:o,post:w.post,defaultValues:w.defaultValues}),(0,i.jsx)(_components_Password,{isOpen:!!y,onConfirm:e=>{null==y||y.onConfirm(e),j(null)}})]})},WrapperWrite=e=>{let{children:t,boardId:n}=e,{data:r,isFetched:i}=(0,F.Z)(n),{isLoggedIn:a,user:{isStaff:l,name:o,groupIds:s}}=(0,O.Z)(),[c,u]=(0,d.useState)(!1);return(0,d.useEffect)(()=>{i&&(r||(alert("게시판이 존재하지 않습니다."),history.back()),(()=>{var e;let t=null==r?void 0:null===(e=r.permissions)||void 0===e?void 0:e.find(e=>"write_post"===e.type),{roles:n,groups:i}=t,{all:o,login:c,admin:d,group:u}=n;if(o)return!0;if(c)return a;if(d)return l;if(u){if(l)return!0;let e=new Set(s);return i.some(t=>e.has(t))}})()?u(!0):(alert("권한이 없습니다.\n관리자에게 문의해주세요."),history.back()))},[i,r]),i&&c&&d.cloneElement(t,{data:r,username:o,isStaff:l,isLoggedIn:a})},z=n(90948),M=n(69368);let E=(0,z.ZP)("span")(()=>({borderRadius:3,width:16,height:16,boxShadow:"inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)",backgroundColor:"#fff",backgroundImage:"linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))","input:hover ~ &":{backgroundColor:"#fff"},"input:disabled ~ &":{background:"#eeeeee"}})),A=(0,z.ZP)(E)({backgroundColor:"#000",backgroundImage:"linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))","&::before":{display:"block",width:16,height:16,backgroundImage:"url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E\")",content:'""'},"input:hover ~ &":{backgroundColor:"#000"}});var _components_Checkbox=function(e){return(0,i.jsx)(M.Z,{sx:{"&:hover":{bgcolor:"transparent"}},disableRipple:!0,color:"default",checkedIcon:(0,i.jsx)(A,{}),icon:(0,i.jsx)(E,{}),inputProps:{"aria-label":"Checkbox demo"},...e})},L=n(14052),_hook_useFileUpload=e=>{let[t,n]=(0,d.useState)(!1),[r,i]=(0,d.useState)({current:0,total:0}),a=(0,u.useMutation)(R.$0),l=(0,u.useMutation)(R.yv),multiFileUpload=async e=>{let t=[];for(let r of(n(!0),i({current:0,total:[...e].reduce((e,t)=>e+Math.ceil(t.size/5242880),0)}),e)){let{id:e}=await fileUpload(r);t.push(e)}return n(!1),t},fileUpload=async t=>{n(!0);try{let{data:n}=await a.mutateAsync({boardId:e,fileName:t.name,fileSize:t.size,chunkSize:5}),{uploadId:r,downloadFileName:o,convertedFileName:s,fileSize:c,extension:d,urls:u}=n,p=[];for(let e of u){let{partNumber:n,url:r}=e,a=await fetch(r,{method:"PUT",body:t.slice((n-1)*5242880,5242880*n,t.type)});if(!a.ok)throw Error("Upload failed");p.push({partNumber:n,eTag:a.headers.get("ETag")}),i(e=>({current:e.current+1,total:e.total}))}let{data:h}=await l.mutateAsync({boardId:e,uploadId:r,downloadFileName:o,convertedFileName:s,fileSize:c,extension:d,parts:p});return h}catch(e){throw e}finally{n(!1)}};return{multiFileUpload,isLoading:t,progress:r}},_hook=()=>({checkFileValidation:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;if(!e||(null==e?void 0:e.size)===0)return!1;if(e.size>n)return alert((null==r?void 0:r.fileSize)||"파일 크기를 확인해주세요."),!1;let i=t.some(t=>e.name.toLowerCase().endsWith(t));return!!i||(alert((null==r?void 0:r.fileType)||"파일 형식을 확인해주세요."),!1)}});async function createFileFromObject(e){let{name:t,url:n}=e;try{let e=await fetch(n),r=await e.blob(),i=new File([r],t,{type:r.type});return i}catch(e){return null}}
1function Write_templateObject(){let e=(0,r._)(["\n  .ck-content {\n    strong {\n      color: inherit;\n    }\n\n    ul,\n    ol {\n      padding-left: 40px;\n    }\n\n    a {\n      color: LinkText;\n      :hover {\n        text-decoration: underline;\n      }\n    }\n\n    // 이미지 간 간격을 제거요청, cx 문의로 추가된 css\n    .image {\n      margin-block: 0;\n    }\n    .image-inline {\n      vertical-align: bottom;\n    }\n  }\n\n  width: 100%;\n  max-width: 1280px;\n  gap: 16px;\n  margin: 0 auto 40px;\n  padding: 40px 24px;\n  font-size: 14px;\n  color: #121212;\n\n  .form-error {\n    color: #ff0000;\n    font-size: 12px;\n    padding: 4px;\n  }\n\n  label {\n    color: #121212;\n  }\n\n  .category {\n    flex: none;\n    width: auto;\n  }\n  .title {\n    flex: 1;\n  }\n\n  input[type='text'],\n  input[type='password'] {\n    width: 100%;\n    height: 42px;\n    padding: 0 8px;\n    border: 1px solid #e7e7e7;\n    outline: none;\n\n    &.error {\n      border: 1px solid #ff0000;\n    }\n  }\n\n  label {\n    display: flex;\n    align-items: center;\n    gap: 5px;\n    height: 42px;\n\n    cursor: pointer;\n\n    span {\n      font-size: 14px;\n    }\n\n    .is-fix-unavailable {\n      margin-top: 2px;\n      color: #aaa;\n      font-size: 13px;\n\n      a {\n        color: #121212;\n        &:hover {\n          text-decoration: underline;\n        }\n      }\n    }\n  }\n\n  &:before {\n    content: '';\n    position: absolute;\n    display: block;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #ffffff;\n    z-index: -1;\n  }\n\n  img,\n  input[type='text'],\n  input[type='password'],\n  textarea {\n    border-radius: inherit;\n  }\n\n  @media (max-width: 768px) {\n    padding: 0 12px;\n  }\n"]);return Write_templateObject=function(){return e},e}function Write_templateObject1(){let e=(0,r._)(["\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 150px;\n  height: 40px;\n  border-radius: 0;\n  background-color: #f7f6f8;\n  color: #999;\n  cursor: pointer;\n  // cursor: no-drop;\n\n  &.active {\n    background-color: #333;\n    color: #fff;\n    cursor: pointer;\n  }\n"]);return Write_templateObject1=function(){return e},e}function Write_templateObject2(){let e=(0,r._)(["\n  align-items: center;\n  justify-content: flex-start;\n  gap: 12px;\n  font-size: 13px;\n\n  label {\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0px;\n    height: 32px;\n    width: 120px;\n    padding: 0 !important;\n    outline: none;\n    border: 1px solid #e7e7e7;\n    background-color: #fff;\n    cursor: pointer;\n\n    &:hover {\n      border-color: #999;\n    }\n\n    input[type='file'] {\n      display: none;\n    }\n  }\n\n  span {\n    color: #999;\n  }\n"]);return Write_templateObject2=function(){return e},e}function Write_templateObject3(){let e=(0,r._)(["\n  width: 100%;\n  height: 1px;\n  margin: 12px 0;\n  background-color: #e7e7e7;\n"]);return Write_templateObject3=function(){return e},e}let W=l()(()=>Promise.all([n.e(1375),n.e(9261)]).then(n.bind(n,69261)),{loadableGenerated:{webpack:()=>[69261]},ssr:!1,loading:()=>(0,i.jsx)(v.Rx.tu,{style:{height:640,border:"1px solid #e7e7e7"},children:(0,i.jsx)(g.Z,{isLoading:!0,isFullScreen:!1})})}),q=["image/png","image/jpg","image/jpeg","image/bmp","image/gif","image/webp","image/svg+xml"],B=["jpg","jpeg","png","gif","bmp","webp","svg","zip","flac","aac","mp3","wav","mp4","pdf","eps","doc","docx","ppt","pptx","xls","xlsx","hwp","hwpx","txt","csv"],U=h.Ry({boardId:h.Z_(),postId:h.Z_().optional(),categoryId:h.Rx().nonnegative({message:"categoryId는 0 이상의 값이어야 합니다."}),title:h.Z_().refine(e=>!!e.trim(),"제목을 입력해주세요."),contents:h.Z_().min(1,{message:"내용을 입력해주세요."}),isVisible:h.O7().refine(e=>!0===e,{message:"isVisible 필드는 필수입니다."}),isSecret:h.O7().optional(),fixPost:h.O7().optional(),writer:h.Z_().refine(e=>!!e,{message:"작성자를 입력해주세요."}),password:h.Z_().optional().nullable().refine(e=>!e||/^\d{4}$/.test(e),{message:"비밀번호는 4자리 숫자여야 합니다."}),thumbnailImageId:h.Rx().optional(),subImageIds:h.IX(h.Rx()).optional(),fileIds:h.IX(h.Rx()).optional(),tags:h.IX(h.Z_()).optional()}),WriteContainer=e=>{var t,n;let{...r}=e,{data:a,username:l,isAdmin:o,isLoggedIn:h,boardId:x,postId:b,post:y,defaultValues:j}=r,{control:w,register:k,setValue:_,handleSubmit:I,formState:{isValid:S,errors:Z}}=(0,p.cI)({mode:"onChange",resolver:(0,m.F)(U),defaultValues:j||{boardId:x,categoryId:0,title:"",contents:"",isVisible:!0,isSecret:!1,fixPost:!1,writer:h?l:"",password:"",thumbnailImageId:0,subImageIds:[],fileIds:[],tags:[]}}),C=(0,c.useRouter)(),{checkImageValidation:P}=(0,L.Z)(),{checkFileValidation:O}=_hook(),{multiFileUpload:F}=_hook_useFileUpload(x),[z,M]=(0,d.useState)(null),[E,A]=(0,d.useState)([]),[H,$]=(0,d.useState)(!1),[G,Q]=(0,d.useState)(!h),J=(0,d.useMemo)(()=>[{id:0,name:"전체",seq:0},...(null==a?void 0:a.categories)||[]],[a]),X=(0,d.useMemo)(()=>{try{var e;return(null===(e=J.find(e=>e.id===(null==j?void 0:j.categoryId)))||void 0===e?void 0:e.name)||null}catch(e){return null}},[null==y?void 0:y.categoryId,J]),{data:K,isFetched:Y}=(0,u.useQuery)(["getBoardsPostsFixedAvailable",x],()=>(0,R.uw)({boardId:x}),{select:e=>e.data}),ee=d.useMemo(()=>null!=y&&!!y.fixedSeq||!!Y&&K.isFixAvailable,[Y,y,K]);(0,d.useEffect)(()=>
1{if(!y)return;let initFiles=async()=>{if(y.thumbnailImage){let e=await createFileFromObject(y.thumbnailImage);M({isUploaded:!0,file:e})}if(y.files){let e=[];for(let t of y.files){let n=await createFileFromObject(t);e.push({id:t.id,file:n})}A(e)}};initFiles(),Q(0===y.authorId)},[y]);let et=(0,u.useMutation)(R.VJ,{onSuccess:()=>{let{prev:e,...t}=C.query,n="string"==typeof e?e:"/";C.push({pathname:n,query:t})},onError:e=>{alert("게시글 등록 중 문제가 발생했습니다.\n다시 한 번 시도해주세요.")}}),en=(0,u.useMutation)(R.ux,{onSuccess:e=>{let{data:t}=e;alert("게시글을 수정하였습니다.");let n=b?"/board/".concat(x,"/").concat(b):"/";C.push({pathname:n,query:C.query})},onError:e=>{alert("게시글 수정 중 문제가 발생했습니다.\n다시 한 번 시도해주세요.")}}),er=(0,u.useMutation)(R.MC,{onError:e=>{}}),extractImgIdFromHtml=e=>{try{let t=new DOMParser,n=t.parseFromString(e,"text/html"),r=n.querySelector("img");if(!r)return!1;{let e=r.getAttribute("src")||"";if(!["https://cdn.dev.qshop.ai","https://cdn.stg.qshop.ai","https://cdn.qshop.ai"].some(t=>e.startsWith(t)))return!1;{let t=new URL(e),n=t.searchParams.get("id")||"";return parseInt(n)}}}catch(e){return!1}},handleUploadThumbnail=async e=>{let t=e.target.files;if(!t||0===t.length)return;let n=P(t[0],q,20971520,{fileType:"이미지는 JPG, JPEG, PNG, GIF, BMP, WEBP, SVG 형식의 파일을 업로드해 주세요.",fileSize:"이미지는 장당 최대 20MB이하로 업로드해 주세요."});n&&M({isUploaded:!1,file:t[0]})},handleUploadFile=async e=>{let t=e.target.files;if(!t||0===t.length)return;for(let e=0;e<t.length;e++){let n=O(t[e],B,20971520);if(!n)return}let n=[...t].map(e=>({id:null,file:e}));A(e=>{let t=[...e,...n];return t.length>=10&&alert("파일은 최대 10개까지 업로드할 수 있습니다."),[...e,...n].slice(0,10)})};return(0,i.jsxs)(N,{children:[(0,i.jsxs)(v.Rx.gq,{justify:"space-between",gap:"20px",children:[(0,i.jsxs)(v.Rx.gq,{style:{width:"fit-content"},gap:"16px",children:[(0,i.jsx)("div",{className:"is-secret",children:(0,i.jsxs)("label",{children:[(0,i.jsx)(p.Qr,{name:"isSecret",control:w,defaultValue:!1,render:e=>{let{field:t}=e;return(0,i.jsx)(_components_Checkbox,{...t,checked:t.value,disableRipple:!0,sx:{color:"#D5D5D7",padding:0,"&.Mui-checked":{color:"#000"},"& .MuiSvgIcon-root":{fontSize:20}}})}}),(0,i.jsx)("span",{children:"비밀글"})]})}),o?(0,i.jsx)("div",{className:"is-notice",children:(0,i.jsxs)("label",{children:[(0,i.jsx)(p.Qr,{name:"fixPost",control:w,defaultValue:!1,render:e=>{let{field:t}=e;return(0,i.jsx)(_components_Checkbox,{...t,checked:t.value,disabled:!ee,disableRipple:!0,sx:{color:"#D5D5D7",padding:0,"&.Mui-checked":{color:"#000"},"& .MuiSvgIcon-root":{fontSize:20}}})}}),(0,i.jsx)("span",{children:"고정글"}),!ee&&(0,i.jsxs)("span",{className:"is-fix-unavailable",children:["(고정글 한도를 초과했습니다."," ",(0,i.jsx)(s(),{href:"/admin/contents/board/".concat(x),target:"_blank",children:"고정글 편집하기"}),"를 눌러 관리하세요)"]})]})}):null]}),(0,i.jsx)(T,{className:S?"active":"",onClick:()=>{if(document.querySelector(".ck-source-editing-area")){alert("HTML 소스 편집모드를 해제한 뒤 글을 등록 해주세요.");return}I(async e=>{try{if(e.contents.length>1e5){alert("게시글 내용은 100,000자 이내에서 등록 가능합니다.\n내용 확인 후 다시 등록해주세요.");return}$(!0);let n={...e};if(z){if(z.file&&!z.isUploaded){var t;let e=new FormData;e.append("file",z.file);let{data:r}=await er.mutateAsync({boardId:x,formData:e});n.thumbnailImageId=null==r?void 0:null===(t=r.item)||void 0===t?void 0:t.id}}else{let e=extractImgIdFromHtml(n.contents);e?n.thumbnailImageId=e:n.thumbnailImageId=0}if(E.length>0){let e=E.filter(e=>e.id).map(e=>e.id),t=E.filter(e=>!e.id).map(e=>e.file),r=await F(t);n.fileIds=[...e,...r]}else n.fileIds=[];b?en.mutate(n):et.mutate(n)}catch(e){}finally{$(!1)}})()},children:"등록하기"})]}),(0,i.jsxs)(v.Rx.gq,{align:"flex-start",gap:"12px",children:[(0,i.jsx)("div",{className:"category",children:(0,i.jsx)(f.default,{idx:0,items:J,onChange:e=>{(null==j?void 0:j.categoryId)!==0&&(null==e?void 0:e.id)===0?_("categoryId",(null==e?void 0:e.id)||0):_("categoryId",(null==e?void 0:e.id)||(null==j?void 0:j.categoryId)||0)},placeholder:"카테고리를 선택해주세요.",customStyle:{width:150,height:42},keyName:null,value:X||null,inputRef:null,customWidth:null,style:null})}),(0,i.jsxs)("div",{className:"title",children:[(0,i.jsx)("input",{type:"text",placeholder:"제목",className:Z.title?"error":"",...k("title")}),Z.title&&(0,i.jsx)("div",{className:"form-error",children:String(null===(t=Z.title)||void 0===t?void 0:t.message)})]})]}),G?(0,i.jsxs)(v.Rx.gq,{align:"flex-start",justify:"flex-start",ga
1p:"12px",children:[(0,i.jsxs)("div",{className:"non-member-name",children:[(0,i.jsx)("input",{type:"text",placeholder:"작성자",className:Z.writer?"error":"",...k("writer")}),Z.writer&&(0,i.jsx)("div",{className:"form-error",children:String(null===(n=Z.writer)||void 0===n?void 0:n.message)})]}),(0,i.jsx)("div",{className:"non-member-password",children:(0,i.jsx)("input",{type:"password",disabled:!!b,placeholder:"비밀번호 (4자리 숫자)",className:Z.password?"error":"",...k("password"),maxLength:4})})]}):null,(0,i.jsx)(p.Qr,{control:w,name:"contents",rules:{required:"게시글 내용을 입력해주세요.",maxLength:{value:1e5,message:"최대 10만자 까지 작성가능합니다."}},render:e=>{let{field:{onChange:t,value:n}}=e;return(0,i.jsx)(W,{boardId:x,defaultValue:n,onChange:t,isError:!!(null==Z?void 0:Z.contents),isProductDetail:!0,useResize:!0,onReady:e=>{}})}}),(0,i.jsx)(V,{}),(0,i.jsxs)(D,{children:[(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"file",name:"upload-file",accept:"image/*",onChange:handleUploadThumbnail}),"대표 이미지 업로드"]}),(0,i.jsx)("span",{children:"파일형식: JPG, JPEG, PNG, GIF, BMP, WEBP, SVG / 20MB 이내"})]}),(0,i.jsx)(_components_Images,{fileList:z?[z.file]:[],removeFile:()=>{M(null)}}),(0,i.jsx)(V,{}),(0,i.jsxs)(D,{children:[(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"file",name:"upload-file",multiple:!0,onChange:handleUploadFile}),"첨부파일 업로드"]}),(0,i.jsx)("span",{children:"최대 10개 / 20MB 이내"})]}),(0,i.jsx)(_components_Files,{files:E.map(e=>e.file),removeFile:e=>{A(t=>[...t.slice(0,e),...t.slice(e+1)])}}),(0,i.jsx)(g.Z,{isLoading:H})]})},N=(0,y.Z)(v.Rx.tu)(Write_templateObject()),T=y.Z.button(Write_templateObject1()),D=(0,y.Z)(v.Rx.gq)(Write_templateObject2()),V=y.Z.div(Write_templateObject3());var Write=e=>{let{...t}=e,{boardId:n,postId:r}=t;return r?(0,i.jsx)(_components_WrapperModify,{boardId:n,postId:r,children:(0,i.jsx)(WriteContainer,{...t})}):(0,i.jsx)(WrapperWrite,{boardId:n,children:(0,i.jsx)(WriteContainer,{...t})})}},97651:function(e,t,n){var r=n(88767),i=n(96915);t.Z=e=>(0,r.useQuery)(["getBoard",e],()=>(0,i.WU)(e),{onSuccess:e=>{}})}}]);

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.