@medipha/feed 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -25,4 +25,4 @@ ${t} {`;return Ft(n,function(e,t){ht(e,t)&&(r=`${r} ${Mt.genRule(e,t)}`)}),`${r}
|
|
|
25
25
|
`),c=s.map(e=>{let t=Math.min(Math.floor((e.match(/^ */)?.[0].length??0)/2),4),n=Math.max(0,Math.min(4,t+r));return Rh.repeat(n)+e.trimStart()}),l=c.join(`
|
|
26
26
|
`),u=c[0].length-s[0].length;return{text:e.slice(0,i)+l+e.slice(o),selectionStart:Math.max(i,t+u),selectionEnd:Math.max(i,n+l.length-s.join(`
|
|
27
27
|
`).length)}}function Bh(e,t,n,r,i){let a=e.slice(0,t),o=e.slice(n),s=a.lastIndexOf(`{`);if(s!==-1&&a.indexOf(`}`,s)===-1&&o.startsWith(`}`)){let i=a.slice(s+1),c=i.indexOf(`|`);if(c!==-1){let a=i.slice(0,c).split(` `),l=i.slice(c+1),u=e.slice(t,n),d=wh(r),f=a.filter(e=>e!==r&&wh(e)!==d),p=a.includes(r)?f:[...f,r],m=s+l.length;if(p.length===0)return{text:e.slice(0,s)+l+u+o.slice(1),selectionStart:m,selectionEnd:m+u.length};let h=`{${[...p.filter(e=>!wh(e)),...p.filter(wh)].join(` `)}|`;return{text:`${e.slice(0,s)}${h}${l}${u}}${o.slice(1)}`,selectionStart:s+h.length+l.length,selectionEnd:s+h.length+l.length+u.length}}}let c=`{${r}|`,l=e.slice(t,n)||i;return{text:`${a}${c}${l}}${o}`,selectionStart:t+c.length,selectionEnd:t+c.length+l.length}}function Vh(e,t,n,r){return Bh(e,t,n,r,`chữ đổi màu`)}function Hh(e,t,n,r){return Bh(e,t,n,r,`chữ đổi cỡ`)}function Uh(e,t){let n=e.slice(0,t),r=n.lastIndexOf(`{`);if(r===-1||n.indexOf(`}`,r)!==-1)return[];let i=n.slice(r+1),a=i.indexOf(`|`);return a===-1?[]:i.slice(0,a).split(` `)}function Wh(e,t){return Uh(e,t).find(Th)??null}function Gh(e,t){return Uh(e,t).find(wh)??null}var Kh=[{format:`bold`,label:`In đậm (Ctrl+B)`,icon:(0,f.jsx)(m.BoldOutlined,{})},{format:`italic`,label:`In nghiêng (Ctrl+I)`,icon:(0,f.jsx)(m.ItalicOutlined,{})},{format:`underline`,label:`Gạch chân (Ctrl+U)`,icon:(0,f.jsx)(m.UnderlineOutlined,{})},{format:`strike`,label:`Gạch ngang`,icon:(0,f.jsx)(m.StrikethroughOutlined,{})}],qh=[{format:`heading`,label:`Tiêu đề`,icon:(0,f.jsx)(m.FontSizeOutlined,{})},{format:`bullets`,label:`Danh sách`,icon:(0,f.jsx)(m.UnorderedListOutlined,{})},{format:`numbers`,label:`Danh sách đánh số`,icon:(0,f.jsx)(m.OrderedListOutlined,{})},{format:`quote`,label:`Trích dẫn`,icon:(0,f.jsx)(`span`,{className:`med-feed-format-bar__quote`,children:`❝`})}],Jh=[{color:`red`,hex:`#dc2626`,label:`Đỏ`},{color:`orange`,hex:`#ea580c`,label:`Cam`},{color:`green`,hex:`#16a34a`,label:`Xanh lá`},{color:`blue`,hex:`#2563eb`,label:`Xanh dương`},{color:`purple`,hex:`#9333ea`,label:`Tím`},{color:`gray`,hex:`#6b7280`,label:`Xám`}],Yh=[{size:`sm`,label:`Nhỏ`,preview:12},{size:`lg`,label:`Lớn`,preview:17},{size:`xl`,label:`Rất lớn`,preview:21}];function Xh({onInline:e,onLines:t,activeInline:n=[],activeLines:r=[],onColor:i,activeColor:a,onIndent:o,onSize:s,activeSize:c,onUndo:u,onRedo:d,canUndo:p,canRedo:h}){let g=e=>e.preventDefault(),_=(e,t,n,r,i,a=!1)=>(0,f.jsx)(l.Tooltip,{title:e,children:(0,f.jsx)(l.Button,{type:`text`,size:`small`,icon:t,"aria-label":e,"aria-pressed":n||void 0,disabled:a,className:n?`med-feed-format-bar__btn--active`:void 0,onMouseDown:g,onClick:r})},i);return(0,f.jsxs)(`div`,{className:`med-feed-format-bar`,role:`toolbar`,"aria-label":`Định dạng văn bản`,children:[_(`Hoàn tác (Ctrl+Z)`,(0,f.jsx)(m.UndoOutlined,{}),!1,()=>u?.(),`undo`,!p),_(`Làm lại (Ctrl+Y)`,(0,f.jsx)(m.RedoOutlined,{}),!1,()=>d?.(),`redo`,!h),(0,f.jsx)(`span`,{className:`med-feed-format-bar__divider`,"aria-hidden":!0}),Kh.map(t=>_(t.label,t.icon,n.includes(t.format),()=>e(t.format),t.format)),(0,f.jsx)(l.Popover,{trigger:`click`,placement:`bottom`,content:(0,f.jsx)(`div`,{className:`med-feed-format-bar__colors`,role:`menu`,"aria-label":`Màu chữ`,children:Jh.map(e=>(0,f.jsx)(`button`,{type:`button`,role:`menuitem`,"aria-label":`Màu ${e.label}`,"aria-pressed":a===e.color,className:a===e.color?`med-feed-format-bar__swatch med-feed-format-bar__swatch--active`:`med-feed-format-bar__swatch`,style:{color:e.hex},onMouseDown:g,onClick:()=>i?.(e.color),children:`A`},e.color))}),children:(0,f.jsx)(l.Tooltip,{title:`Màu chữ`,children:(0,f.jsx)(l.Button,{type:`text`,size:`small`,icon:(0,f.jsx)(m.FontColorsOutlined,{}),"aria-label":`Màu chữ`,className:a?`med-feed-format-bar__btn--active`:void 0,onMouseDown:g})})},`color`),(0,f.jsx)(l.Popover,{trigger:`click`,placement:`bottom`,content:(0,f.jsx)(`div`,{className:`med-feed-format-bar__sizes`,role:`menu`,"aria-label":`Cỡ chữ`,children:Yh.map(e=>(0,f.jsxs)(`button`,{type:`button`,role:`menuitem`,"aria-label":`Cỡ chữ ${e.label}`,"aria-pressed":c===e.size,className:c===e.size?`med-feed-format-bar__size med-feed-format-bar__size--active`:`med-feed-format-bar__size`,style:{fontSize:e.preview},onMouseDown:g,onClick:()=>s?.(e.size),children:[`A`,(0,f.jsx)(`span`,{className:`med-feed-format-bar__size-label`,children:e.label})]},e.size))}),children:(0,f.jsx)(l.Tooltip,{title:`Cỡ chữ`,children:(0,f.jsx)(l.Button,{type:`text`,size:`small`,icon:(0,f.jsx)(`span`,{className:`med-feed-format-bar__size-icon`,children:`Aa`}),"aria-label":`Cỡ chữ`,className:c?`med-feed-format-bar__btn--active`:void 0,onMouseDown:g})})},`size`),(0,f.jsx)(`span`,{className:`med-feed-format-bar__divider`,"aria-hidden":!0}),qh.map(e=>_(e.label,e.icon,r.includes(e.format),()=>t(e.format),e.format)),_(`Thụt đầu dòng`,(0,f.jsx)(m.MenuUnfoldOutlined,{}),!1,()=>o?.(1),`indent`),_(`Bỏ thụt đầu dòng`,(0,f.jsx)(m.MenuFoldOutlined,{}),!1,()=>o?.(-1),`outdent`)]})}function Zh(e,t){return e instanceof y&&e.status>=400&&e.status<500?`${t}: ${e.message}`:`Không tải lên được ${t}`}var Qh=[{key:`image`,label:`Ảnh`,icon:(0,f.jsx)(m.PictureOutlined,{style:{color:`#45bd62`}}),accept:`.jpg,.jpeg,.png,.gif,.webp`,kind:`image`},{key:`video`,label:`Video`,icon:(0,f.jsx)(m.PlayCircleOutlined,{style:{color:`#f3425f`}}),accept:`.mp4,.webm,.mov`,kind:`video`},{key:`document`,label:`Tài liệu`,icon:(0,f.jsx)(m.FileTextOutlined,{style:{color:`var(--feed-primary)`}}),accept:`.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx`,kind:`document`}];function $h({count:e,disabled:t,variant:n=`label`,onUploadStart:r,onUploaded:i,onQuestion:a}){let{api:o,me:s}=P(),c=s.mediaLimitsMb??k,u=({file:e})=>{let t=e;r(),o.uploadMedia(t,t.name).then(i,e=>{l.message.error(Zh(e,t.name)),i(null)})},d=t=>(n,r)=>e+r.length>10?(l.message.warning(`Mỗi bài tối đa 10 tệp`),l.Upload.LIST_IGNORE):n.size>c[t]*1024*1024?(l.message.warning(`${n.name}: tối đa ${c[t]} MB`),l.Upload.LIST_IGNORE):!0,p=(e,r,i)=>n===`icon`?(0,f.jsx)(l.Tooltip,{title:e,children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,size:`large`,icon:r,disabled:t,"aria-label":e,onClick:i,className:`med-feed-picker-icon`})}):(0,f.jsx)(l.Button,{type:`text`,icon:r,disabled:t,onClick:i,children:e});return(0,f.jsxs)(f.Fragment,{children:[Qh.map(e=>(0,f.jsx)(l.Upload,{accept:e.accept,multiple:!0,showUploadList:!1,customRequest:u,beforeUpload:d(e.kind),children:p(e.label,e.icon)},e.key)),a&&p(`Hỏi đáp`,(0,f.jsx)(m.QuestionCircleOutlined,{style:{color:`#f7b928`}}),a)]})}function eg({media:e,uploadingCount:t,onRemove:n}){let r=e.filter(e=>e.kind!==`DOCUMENT`),i=e.filter(e=>e.kind===`DOCUMENT`);return e.length===0&&t===0?null:(0,f.jsxs)(`div`,{className:`med-feed-attached`,children:[(r.length>0||t>0)&&(0,f.jsxs)(`div`,{className:`med-feed-attached__images`,children:[r.map(e=>(0,f.jsxs)(`div`,{className:`med-feed-attached__thumb`,children:[e.kind===`VIDEO`?(0,f.jsxs)(f.Fragment,{children:[e.thumbnailUrl?(0,f.jsx)(`img`,{src:e.thumbnailUrl,alt:e.fileName,referrerPolicy:`no-referrer`}):(0,f.jsx)(`video`,{src:e.fileUrl,muted:!0,preload:`metadata`}),(0,f.jsx)(m.PlayCircleOutlined,{className:`med-feed-attached__play`})]}):(0,f.jsx)(`img`,{src:e.fileUrl,alt:e.fileName,referrerPolicy:`no-referrer`}),(0,f.jsx)(l.Button,{size:`small`,shape:`circle`,icon:(0,f.jsx)(m.CloseOutlined,{}),className:`med-feed-attached__remove`,"aria-label":`Bỏ ${e.fileName}`,onClick:()=>n(e.id)})]},e.id)),Array.from({length:t},(e,t)=>(0,f.jsx)(`div`,{className:`med-feed-attached__thumb med-feed-attached__thumb--loading`,children:(0,f.jsx)(m.LoadingOutlined,{})},`uploading-${t}`))]}),i.length>0&&(0,f.jsx)(l.List,{size:`small`,dataSource:i,renderItem:e=>(0,f.jsx)(l.List.Item,{actions:[(0,f.jsx)(l.Button,{type:`text`,size:`small`,icon:(0,f.jsx)(m.CloseOutlined,{}),"aria-label":`Bỏ ${e.fileName}`,onClick:()=>n(e.id)},`remove`)],children:(0,f.jsx)(l.List.Item.Meta,{avatar:(0,f.jsx)(um,{fileName:e.fileName}),title:e.fileName,description:Dp(e.fileSize)})})})]})}var tg=`hỏi đáp`,ng=85;function rg(e){return e.find(e=>e.name.trim().toLowerCase()===tg)}var ig=(0,d.forwardRef)(function({categories:e=[],initialPost:t,intent:n=`text`,onDirtyChange:r,onSaved:i,zoomed:a=!1,showPreview:o=!1},s){let{api:c,me:u}=P(),p=(0,d.useRef)(null),h=(0,d.useRef)(new Map(t?.mentionedUsers.map(e=>[e.fullName,e]))),g=(0,d.useRef)(crypto.randomUUID()),_=rg(e),[v,y]=(0,d.useState)(tp(t?.content??``,t?.mentionedUsers??[])),[b,x]=(0,d.useState)(t?.category?.id??(n===`question`?_?.id??null:null)),[S,C]=(0,d.useState)(t?.media??[]),[w,T]=(0,d.useState)(0),[E,D]=(0,d.useState)(null),[O,k]=(0,d.useState)(null),[A,j]=(0,d.useState)(``),[ee,M]=(0,d.useState)(!1),[te,ne]=(0,d.useState)(!0),[N,re]=(0,d.useState)({start:0,end:0}),[ie,ae]=(0,d.useState)([]),[oe,se]=(0,d.useState)([]),ce=!!t,le=!v.trim()&&S.length===0,ue=ve(v),de=E!==null||w>0,fe=S.length===0&&v.length<ng&&!v.includes(`
|
|
28
|
-
`),pe=Ph(v,N.start,N.end),me=Fh(v,N.start),he=e=>{e!==v&&(ae(e=>[...e.slice(-99),v]),se([]),y(e))},ge=()=>{if(ie.length===0)return;let e=ie[ie.length-1];ae(ie.slice(0,-1)),se([...oe,v]),y(e)},_e=()=>{if(oe.length===0)return;let e=oe[oe.length-1];se(oe.slice(0,-1)),ae([...ie,v]),y(e)};(0,d.useEffect)(()=>{p.current?.focus()},[]),(0,d.useEffect)(()=>{r?.(!ce&&!le)},[ce,le,r]);let ye=async e=>{if(le)return l.message.warning(`Bài viết cần có nội dung hoặc tệp đính kèm`),!1;D(e);let n={content:ep(v,h.current),mediaIds:S.map(e=>e.id),categoryId:b};try{let r;return t?(r=await c.updatePost(t.id,n),e===`submit`&&r.status===`DRAFT`&&(r=await c.submitPost(r.id))):(r=await c.createPost({...n,clientPostId:g.current,submit:e===`submit`}),g.current=crypto.randomUUID()),l.message.success(r.status===`DRAFT`?`Đã lưu nháp`:r.status===`PENDING`?`Bài viết đã vào hàng chờ duyệt`:r.status===`APPROVED`?`Bài viết đã được duyệt, chờ phát hành`:`Đã lưu bài viết`),i(r),!0}catch{return l.message.error(`Không lưu được bài viết, vui lòng thử lại`),!1}finally{D(null)}},be=()=>p.current?.textarea??null,xe=()=>{let e=be();e&&re({start:e.selectionStart??0,end:e.selectionEnd??0})},Se=e=>{he(e.text),requestAnimationFrame(()=>{let t=be();t?.focus(),t?.setSelectionRange(e.selectionStart,e.selectionEnd),xe()})},Ce=e=>{let t=be(),n=t?.selectionStart??v.length,r=t?.selectionEnd??v.length;Se(e(v,n,r))},we=e=>Ce((t,n,r)=>Oh(t,n,r,e)),Te=e=>Ce((t,n,r)=>Lh(t,n,r,e)),Ee={b:`bold`,i:`italic`,u:`underline`},De=e=>{let t=be(),n=t?.selectionStart??v.length,r=t?.selectionEnd??v.length;if(e.key===`Enter`&&(e.shiftKey||e.altKey)&&n===r){e.preventDefault(),Se({text:`${v.slice(0,n)}\n${v.slice(r)}`,selectionStart:n+1,selectionEnd:n+1});return}if(e.key===`Enter`&&!e.shiftKey&&n===r){let t=Ih(v,n);if(t){e.preventDefault(),Se(t);return}}let i=Ee[e.key.toLowerCase()];if((e.ctrlKey||e.metaKey)&&!e.shiftKey&&!e.altKey&&i){e.preventDefault(),we(i);return}if((e.ctrlKey||e.metaKey)&&!e.altKey){let t=e.key.toLowerCase();t===`z`&&!e.shiftKey?(e.preventDefault(),ge()):(t===`z`&&e.shiftKey||t===`y`)&&(e.preventDefault(),_e())}},F={id:t?.id??`draft-preview`,author:u.user??{id:u.userId,fullName:``,avatarUrl:null,departmentName:null},content:ep(v,h.current),mentionedUsers:[...h.current.values()],media:S,status:`PUBLISHED`,commentsLocked:t?.commentsLocked??!1,reactionCount:t?.reactionCount??0,topReactionTypes:t?.topReactionTypes??[],myReaction:null,commentCount:t?.commentCount??0,shareCount:t?.shareCount??0,sharedByMe:!1,createdAt:t?.createdAt??new Date().toISOString()};(0,d.useImperativeHandle)(s,()=>({saveDraft:()=>ye(`draft`),isDirty:()=>!ce&&!le}));let Oe=(0,f.jsxs)(`div`,{className:`med-feed-composer-form`,children:[(0,f.jsxs)(`div`,{className:`med-feed-composer-form__author`,children:[(0,f.jsx)(Hm,{size:40}),(0,f.jsxs)(`span`,{className:`med-feed-composer-form__author-info`,children:[(0,f.jsx)(`span`,{className:`med-feed-composer-form__author-name`,children:Hp.name}),(0,f.jsx)(`span`,{className:`med-feed-composer-form__pills`,children:(0,f.jsx)(Ch,{categories:e,value:b,onChange:x})})]})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__body`,children:[te&&(0,f.jsx)(Xh,{onInline:we,onLines:Te,activeInline:pe,activeLines:me,onColor:e=>Ce((t,n,r)=>Vh(t,n,r,e)),activeColor:Wh(v,N.start),onIndent:e=>Ce((t,n,r)=>zh(t,n,r,e)),onSize:e=>Ce((t,n,r)=>Hh(t,n,r,e)),activeSize:Gh(v,N.start),onUndo:ge,onRedo:_e,canUndo:ie.length>0,canRedo:oe.length>0}),(0,f.jsx)($f,{ref:p,value:v,onChange:e=>{he(e),xe()},onPick:e=>h.current.set(e.fullName,e),onKeyUp:xe,onMouseUp:xe,onKeyDown:De,placeholder:`Bạn ơi, bạn đang nghĩ gì thế?`,autoSize:a||o?{minRows:12,maxRows:30}:{minRows:4,maxRows:14},style:O?{background:O,borderRadius:8,padding:`8px 12px`}:void 0,className:fe?`med-feed-composer-form__text med-feed-composer-form__text--large`:`med-feed-composer-form__text`}),A&&(0,f.jsx)(l.Tag,{icon:(0,f.jsx)(m.EnvironmentOutlined,{}),color:`blue`,closable:!0,onClose:()=>j(``),className:`med-feed-composer-form__location-tag`,children:A}),ue&&(0,f.jsx)(sm,{url:ue}),(0,f.jsx)(eg,{media:S,uploadingCount:w,onRemove:e=>C(t=>t.filter(t=>t.id!==e))})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__toolbar`,children:[(0,f.jsxs)(`div`,{className:`med-feed-composer-form__toolbar-group`,children:[(0,f.jsx)(l.Popover,{trigger:`click`,content:(0,f.jsx)(`div`,{className:`med-feed-composer-form__color-grid`,children:[`#ffffff`,`#fde68a`,`#fca5a5`,`#86efac`,`#93c5fd`,`#d8b4fe`,`#f9a8d4`,`#c7d2fe`].map(e=>(0,f.jsx)(`button`,{type:`button`,className:`med-feed-composer-form__color-btn`,style:{background:e,borderColor:O===e?`var(--feed-primary)`:`#e5e7eb`},onClick:()=>k(e===`#ffffff`?null:e),"aria-label":e},e))}),children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.BgColorsOutlined,{style:{color:`var(--feed-primary)`,fontSize:20}}),className:`med-feed-composer-form__toolbar-btn`,"aria-label":`Màu nền`})}),(0,f.jsx)(l.Tooltip,{title:te?`Ẩn định dạng`:`Định dạng văn bản`,children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.FontColorsOutlined,{style:{fontSize:18}}),className:te?`med-feed-composer-form__toolbar-btn med-feed-composer-form__toolbar-btn--active`:`med-feed-composer-form__toolbar-btn`,"aria-label":`Định dạng văn bản`,"aria-pressed":te,onClick:()=>ne(e=>!e)})}),O&&O!==`#ffffff`&&(0,f.jsx)(l.Button,{type:`text`,size:`small`,onClick:()=>k(null),children:`Xóa màu`})]}),(0,f.jsx)(`div`,{className:`med-feed-composer-form__toolbar-group`,children:(0,f.jsx)(l.Popover,{trigger:`click`,overlayClassName:`med-feed-portal med-feed-emoji-popover`,content:(0,f.jsx)(Vf,{onPick:e=>he(`${v}${e}`)}),children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.SmileOutlined,{style:{color:`#f7b928`,fontSize:20}}),className:`med-feed-composer-form__toolbar-btn`,"aria-label":`Cảm xúc`})})})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__add`,children:[(0,f.jsx)(`span`,{className:`med-feed-composer-form__add-label`,children:`Thêm vào bài viết của bạn`}),(0,f.jsxs)(`span`,{className:`med-feed-composer-form__add-actions`,children:[(0,f.jsx)($h,{variant:`icon`,count:S.length+w,disabled:E!==null,onUploadStart:()=>T(e=>e+1),onUploaded:e=>{T(e=>e-1),e&&C(t=>[...t,e])},onQuestion:_?()=>x(_.id):void 0}),(0,f.jsx)(l.Popover,{trigger:`click`,open:ee,onOpenChange:M,content:(0,f.jsxs)(`div`,{style:{display:`flex`,gap:8,minWidth:220},children:[(0,f.jsx)(l.Input,{size:`small`,placeholder:`Nhập vị trí...`,value:A,onChange:e=>j(e.target.value),onPressEnter:()=>M(!1),prefix:(0,f.jsx)(m.EnvironmentOutlined,{})}),(0,f.jsx)(l.Button,{size:`small`,type:`primary`,onClick:()=>M(!1),children:`Xong`})]}),children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,size:`large`,icon:(0,f.jsx)(m.EnvironmentOutlined,{style:{color:`#10b981`,fontSize:22}}),"aria-label":`Vị trí`,className:`med-feed-picker-icon`})})]})]}),(0,f.jsx)(`div`,{className:`med-feed-composer-form__actions`,children:(0,f.jsx)(l.Button,{type:`primary`,block:!0,size:`large`,className:`med-feed-composer-form__submit`,disabled:de||le,loading:E===`submit`,onClick:()=>void ye(`submit`),children:`Hoàn thành`})})]});return o?(0,f.jsxs)(`div`,{className:`med-feed-composer-split`,children:[(0,f.jsx)(`div`,{className:`med-feed-composer-split__editor`,children:Oe}),(0,f.jsx)(`aside`,{className:`med-feed-composer-split__preview`,"aria-label":`Xem trước bài viết`,children:v.trim()||S.length>0?(0,f.jsx)(Jm,{post:F,mode:`preview`}):(0,f.jsx)(`div`,{className:`med-feed-composer-split__empty`,children:`Nội dung bài sẽ hiện ở đây khi bạn gõ.`})})]}):Oe});function ag({open:e,categories:t,intent:n,initialPost:r,onClose:i,onSaved:a}){let o=(0,d.useRef)(!1),s=(0,d.useRef)(null),[c,u]=(0,d.useState)(!1),[p,h]=(0,d.useState)(!1),[g,_]=(0,d.useState)(!1),[v,y]=(0,d.useState)(!1),b=(0,d.useCallback)(e=>{o.current=e},[]),x=()=>{if(!(s.current?.isDirty()??o.current)){i();return}u(!0)},S=async()=>{if(p)return;if(!s.current){u(!1),i();return}h(!0);let e=await s.current.saveDraft();h(!1),e&&(u(!1),i())};return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l.Modal,{open:e,title:(0,f.jsxs)(`span`,{className:`med-feed-create-modal__title`,children:[r?`Sửa bài viết`:`Tạo bài viết`,(0,f.jsxs)(`span`,{className:`med-feed-create-modal__tools`,children:[(0,f.jsx)(l.Tooltip,{title:g?`Thoát toàn màn hình`:`Mở trình soạn toàn màn hình`,children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,icon:g?(0,f.jsx)(m.CompressOutlined,{}):(0,f.jsx)(m.ExpandOutlined,{}),"aria-label":g?`Thu nhỏ`:`Phóng to`,"aria-pressed":g,className:g?`med-feed-create-modal__tool--active`:void 0,onClick:()=>_(e=>!e)})}),(0,f.jsx)(l.Tooltip,{title:v?`Ẩn`:`Xem`,children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,icon:v?(0,f.jsx)(m.EyeInvisibleOutlined,{}):(0,f.jsx)(m.EyeOutlined,{}),"aria-label":`Xem trước`,"aria-pressed":v,className:v?`med-feed-create-modal__tool--active`:void 0,onClick:()=>y(e=>!e)})})]})]}),footer:null,width:g?`100vw`:v?1180:680,style:g?{top:0,maxWidth:`100vw`,margin:0,paddingBottom:0}:void 0,centered:!g,destroyOnClose:!0,maskClosable:!1,onCancel:x,closeIcon:(0,f.jsx)(m.CloseOutlined,{}),className:g?`med-feed-portal med-feed-create-modal med-feed-create-modal--fullscreen`:`med-feed-portal med-feed-create-modal`,children:(0,f.jsx)(ig,{ref:s,zoomed:g,showPreview:v,categories:t,intent:n,initialPost:r,onDirtyChange:b,onSaved:e=>{o.current=!1,u(!1),a(e),i()}})}),(0,f.jsx)(l.Modal,{open:c,zIndex:1100,width:560,maskStyle:{zIndex:1099,background:`rgba(0, 0, 0, 0.65)`},title:`Lưu bài viết này làm bản nháp?`,onCancel:()=>{p||u(!1)},footer:[(0,f.jsx)(l.Button,{type:`text`,disabled:p,onClick:()=>{p||(u(!1),i())},children:`Xóa bản nhập`},`discard`),(0,f.jsx)(l.Button,{type:`primary`,loading:p,onClick:()=>void S(),children:`Lưu làm bản nháp`},`draft`)],centered:!0,destroyOnClose:!0,closeIcon:(0,f.jsx)(m.CloseOutlined,{}),className:`med-feed-portal med-feed-confirm-modal`,children:(0,f.jsx)(`p`,{children:`Nếu bỏ bây giờ, bạn sẽ mất bài viết này.`})})]})}function og({categories:e,onSaved:t}){let{me:n}=P(),[r,i]=(0,d.useState)(null);return n.canPost?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(l.Button,{type:`primary`,className:`med-feed-create-button`,onClick:()=>i(Date.now()),children:[(0,f.jsx)(`span`,{className:`med-feed-create-button__icon`,"aria-hidden":!0}),`Tạo bài viết`]}),(0,f.jsx)(ag,{open:r!==null,categories:e,intent:`text`,onClose:()=>i(null),onSaved:t},r??`closed`)]}):null}function sg({title:e,description:t,extra:n}){return(0,f.jsxs)(`div`,{className:`med-feed-page-header`,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(l.Typography.Title,{level:4,className:`med-feed-page-header__title`,children:e}),t&&(0,f.jsx)(l.Typography.Text,{type:`secondary`,children:t})]}),n]})}var cg=[{key:`ALL`,label:`Tất cả`},{key:`DRAFT`,label:`Nháp`},{key:`PENDING`,label:`Chờ duyệt`},{key:`APPROVED`,label:`Đã duyệt`},{key:`PUBLISHED`,label:`Đang phát hành`},{key:`UNPUBLISHED`,label:`Đã gỡ`}];function lg(){let{api:e,me:t,isPostFeed:n}=P(),[r,i]=(0,d.useState)(`ALL`),[a,o]=(0,d.useState)(null),s=r===`ALL`?void 0:r,c=F((0,d.useCallback)(()=>e.listCategories(),[e]),`categories`),u=Oe((0,d.useCallback)(t=>e.listMyPosts({status:s,cursor:t}),[e,s]),`my-posts|${r}`),p=async t=>{try{let n=await e.submitPost(t.id);u.updateItem(t.id,()=>n),l.message.success(n.status===`APPROVED`?`Bài viết đã được duyệt, chờ phát hành`:`Bài viết đã vào hàng chờ duyệt`)}catch{l.message.error(`Không gửi được bài viết`)}};return(0,f.jsxs)(`div`,{className:`med-feed-my-posts med-feed-stack`,children:[(0,f.jsx)(sg,{title:`Bài của tôi`,description:`Quản lý nháp, bài chờ duyệt và bài đang phát hành của bạn`,extra:n&&(0,f.jsx)(og,{categories:c.data??[],onSaved:e=>{(r===`ALL`||r===e.status)&&u.prependItem(e)}})}),(0,f.jsx)(l.Tabs,{activeKey:r,onChange:e=>i(e),items:cg.map(e=>({key:e.key,label:e.label}))}),(0,f.jsx)(Ym,{list:u,emptyText:`Không có bài viết`,renderFooter:e=>n&&(e.status===`DRAFT`||e.status===`PENDING`)&&(0,f.jsxs)(l.Space,{wrap:!0,className:`med-feed-my-posts__footer-actions`,children:[(0,f.jsx)(l.Button,{className:`med-feed-my-posts__edit`,icon:(0,f.jsx)(m.EditOutlined,{}),onClick:()=>o(e),children:`Sửa`}),e.status===`DRAFT`&&t.canPost&&(0,f.jsx)(l.Button,{className:`med-feed-my-posts__done`,type:`primary`,icon:(0,f.jsx)(m.SendOutlined,{}),onClick:()=>void p(e),children:`Hoàn thành`})]})}),(0,f.jsx)(ag,{open:a!==null,categories:c.data??[],intent:`text`,initialPost:a??void 0,onClose:()=>o(null),onSaved:e=>u.updateItem(e.id,()=>e)},a?.id??`closed`)]})}function ug({value:e,onChange:t,aspectRatio:n=`16 / 9`,maxWidth:r}){let{api:i}=P(),a=(0,d.useRef)(null),[o,s]=(0,d.useState)(!1),[c,u]=(0,d.useState)(!1),p=async e=>{if(e){if(!e.type.startsWith(`image/`)){l.message.error(`Chỉ nhận file ảnh`);return}s(!0);try{let n=await i.uploadMedia(e,e.name);t?.(n.fileUrl)}catch{l.message.error(`Không tải được ảnh`)}finally{s(!1)}}};return(0,f.jsxs)(`div`,{className:c?`med-feed-image-field med-feed-image-field--drag`:`med-feed-image-field`,style:{maxWidth:r},onDragOver:e=>{e.preventDefault(),u(!0)},onDragLeave:()=>u(!1),onDrop:e=>{e.preventDefault(),u(!1),p(e.dataTransfer.files?.[0])},children:[(0,f.jsxs)(`button`,{type:`button`,className:`med-feed-image-field__drop`,style:{aspectRatio:n},disabled:o,onClick:()=>a.current?.click(),children:[e?(0,f.jsx)(`img`,{src:e,alt:`Ảnh đã chọn`,className:`med-feed-image-field__preview`}):(0,f.jsxs)(`span`,{className:`med-feed-image-field__placeholder`,children:[(0,f.jsx)(m.PictureOutlined,{}),(0,f.jsx)(`strong`,{children:`Tải ảnh lên`}),(0,f.jsx)(`span`,{children:`Kéo thả hoặc bấm để chọn ảnh`})]}),e&&(0,f.jsxs)(`span`,{className:`med-feed-image-field__change`,children:[(0,f.jsx)(m.CameraOutlined,{}),` Đổi ảnh`]}),o&&(0,f.jsxs)(`span`,{className:`med-feed-image-field__busy`,children:[(0,f.jsx)(m.LoadingOutlined,{}),` Đang tải...`]})]}),(0,f.jsx)(`input`,{ref:a,type:`file`,accept:`image/*`,hidden:!0,onChange:e=>{p(e.target.files?.[0]),e.target.value=``}})]})}var dg=`DD/MM/YYYY HH:mm`;function fg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.listManageEvents(),[e]),`manage-events`),[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o]=l.Form.useForm(),s=e=>{o.setFieldsValue(e===`new`?{title:``,startsAt:(0,_.default)().add(1,`day`).startOf(`hour`),endsAt:null,location:``,description:``,imageUrl:``}:{title:e.title,startsAt:(0,_.default)(e.startsAt),endsAt:e.endsAt?(0,_.default)(e.endsAt):null,location:e.location??``,description:e.description??``,imageUrl:e.imageUrl}),r(e)},c=async()=>{let i=await o.validateFields(),s={title:i.title.trim(),startsAt:i.startsAt.toISOString(),endsAt:i.endsAt?i.endsAt.toISOString():null,location:i.location.trim()||null,description:i.description.trim()||null,imageUrl:i.imageUrl};a(!0);try{n===`new`?await e.createEvent(s):n&&await e.updateEvent(n.id,s),l.message.success(`Đã lưu sự kiện`),r(null),t.reload()}catch(e){l.message.error(b(e,`FEED_EVENT_INVALID`)?`Thông tin sự kiện không hợp lệ`:`Không lưu được sự kiện`)}finally{a(!1)}},u=async n=>{try{await e.deleteEvent(n.id),l.message.success(`Đã xoá sự kiện`),t.reload()}catch{l.message.error(`Không xoá được sự kiện`)}};return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-events-admin`,children:[(0,f.jsx)(sg,{title:`Sự kiện`,description:`Khung bên phải bảng tin hiện sự kiện mới tạo gần nhất`,extra:(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.PlusOutlined,{}),onClick:()=>s(`new`),children:`Thêm sự kiện`})}),(0,f.jsx)(l.Table,{rowKey:`id`,columns:[{title:`Ảnh`,dataIndex:`imageUrl`,width:90,render:e=>(0,f.jsx)(`img`,{src:e,alt:``,className:`med-feed-events-admin__thumb`})},{title:`Sự kiện`,dataIndex:`title`},{title:`Thời gian`,width:260,render:(e,t)=>nh(t.startsAt,t.endsAt)},{title:`Địa điểm`,dataIndex:`location`,width:180,render:e=>e??``},{title:``,fixed:`right`,width:100,render:(e,t)=>(0,f.jsxs)(l.Space,{size:8,children:[(0,f.jsx)(l.Button,{icon:(0,f.jsx)(m.EditOutlined,{}),"aria-label":`Sửa`,onClick:()=>s(t)}),(0,f.jsx)(l.Popconfirm,{title:`Xoá sự kiện này?`,okText:`Xoá`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>u(t),children:(0,f.jsx)(l.Button,{danger:!0,icon:(0,f.jsx)(m.DeleteOutlined,{}),"aria-label":`Xoá`})})]})}],dataSource:t.data??[],loading:t.loading,pagination:!1,scroll:{x:`max-content`}}),(0,f.jsx)(l.Modal,{open:n!==null,title:(0,f.jsxs)(`div`,{className:`med-feed-events-form__head`,children:[(0,f.jsx)(`strong`,{children:n===`new`?`Thêm sự kiện`:`Sửa sự kiện`}),(0,f.jsx)(`span`,{children:`Hiện ở khung bên phải bảng tin cho mọi người`})]}),okText:n===`new`?`Thêm sự kiện`:`Lưu thay đổi`,cancelText:`Huỷ`,confirmLoading:i,width:560,centered:!0,wrapClassName:`med-feed-portal med-feed-events-form-modal`,maskStyle:{background:`rgba(11, 28, 48, 0.5)`,backdropFilter:`blur(4px)`},onOk:()=>void c(),onCancel:()=>r(null),destroyOnClose:!0,children:(0,f.jsxs)(l.Form,{form:o,layout:`vertical`,preserve:!1,requiredMark:!1,children:[(0,f.jsx)(l.Form.Item,{name:`imageUrl`,label:`Ảnh bìa`,rules:[{required:!0,message:`Cần có ảnh bìa`}],children:(0,f.jsx)(ug,{aspectRatio:`16 / 9`})}),(0,f.jsx)(l.Form.Item,{name:`title`,label:`Tên sự kiện`,rules:[{required:!0,whitespace:!0,message:`Nhập tên sự kiện`}],children:(0,f.jsx)(l.Input,{size:`large`,maxLength:120,placeholder:`Ví dụ: Hội thao Meditech 2026`})}),(0,f.jsxs)(`div`,{className:`med-feed-events-form__row`,children:[(0,f.jsx)(l.Form.Item,{name:`startsAt`,label:`Bắt đầu`,rules:[{required:!0,message:`Chọn giờ bắt đầu`}],children:(0,f.jsx)(l.DatePicker,{size:`large`,showTime:!0,format:dg,style:{width:`100%`}})}),(0,f.jsx)(l.Form.Item,{name:`endsAt`,label:`Kết thúc`,dependencies:[`startsAt`],rules:[({getFieldValue:e})=>({validator:(t,n)=>{let r=e(`startsAt`);return n&&r&&n.isBefore(r)?Promise.reject(Error(`Giờ kết thúc phải sau giờ bắt đầu`)):Promise.resolve()}})],children:(0,f.jsx)(l.DatePicker,{size:`large`,showTime:!0,format:dg,placeholder:`Không bắt buộc`,style:{width:`100%`}})})]}),(0,f.jsx)(l.Form.Item,{name:`location`,label:`Địa điểm`,children:(0,f.jsx)(l.Input,{size:`large`,maxLength:200,placeholder:`Ví dụ: Sân vận động Quân khu 7`})}),(0,f.jsx)(l.Form.Item,{name:`description`,label:`Mô tả ngắn`,children:(0,f.jsx)(l.Input.TextArea,{rows:4,maxLength:2e3,showCount:!0,placeholder:`Giới thiệu nội dung, đối tượng tham gia...`})})]})})]})}var pg=300;function mg({value:e,onChange:t,placeholder:n=`Tất cả tác giả`}){let{api:r}=P(),[i,a]=(0,d.useState)([]),[o,s]=(0,d.useState)(!1),c=(0,d.useRef)();return(0,d.useEffect)(()=>()=>clearTimeout(c.current),[]),(0,f.jsx)(l.Select,{showSearch:!0,allowClear:!0,value:e,placeholder:n,suffixIcon:(0,f.jsx)(m.UserOutlined,{}),filterOption:!1,onSearch:e=>{clearTimeout(c.current),e.trim()&&(s(!0),c.current=setTimeout(()=>{r.searchUsers(e).then(e=>{a(e),s(!1)},()=>s(!1))},pg))},onChange:e=>t(e),notFoundContent:o?(0,f.jsx)(l.Spin,{size:`small`}):`Gõ tên hoặc mã nhân viên`,style:{minWidth:200},className:`med-feed-author-select`,options:i.map(e=>({value:e.id,label:e.departmentName?`${e.fullName} · ${e.departmentName}`:e.fullName}))})}var hg={"7d":`7 ngày gần nhất`,"30d":`30 ngày gần nhất`,"90d":`90 ngày gần nhất`,"this-month":`Tháng này`,"this-year":`Năm nay`};function gg(e){let t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`);return`${e.getFullYear()}-${t}-${n}`}function _g(e){return typeof e==`object`}function vg(e,t=new Date){if(_g(e))return e;let n=e,r=new Date(t);return n===`this-month`?r.setDate(1):n===`this-year`?r.setMonth(0,1):r.setDate(t.getDate()-(Number.parseInt(n,10)-1)),{from:gg(r),to:gg(t)}}var yg=`YYYY-MM-DD`;function bg({value:e,onChange:t}){let n=vg(e),r=(0,d.useMemo)(()=>Object.fromEntries(Object.keys(hg).map(e=>{let{from:t,to:n}=vg(e);return[hg[e],[(0,_.default)(t,yg),(0,_.default)(n,yg)]]})),[]);return(0,f.jsx)(`span`,{className:`med-feed-date-range med-feed-pill-fields`,children:(0,f.jsx)(l.DatePicker.RangePicker,{value:[(0,_.default)(n.from,yg),(0,_.default)(n.to,yg)],format:`DD/MM/YYYY`,allowClear:!1,ranges:r,placeholder:[`Từ ngày`,`Đến ngày`],disabledDate:e=>e.isAfter((0,_.default)(),`day`),onChange:e=>{let[n,r]=e??[];n&&r&&t({from:n.format(yg),to:r.format(yg)})}})})}function xg({post:e,onOpen:t}){let n=new Map(e.mentionedUsers.map(e=>[e.id,e.fullName])),r=e.media.find(e=>e.kind===`IMAGE`);return(0,f.jsxs)(`button`,{type:`button`,className:`med-feed-table-post`,onClick:()=>t(e),children:[r?(0,f.jsx)(`img`,{src:r.fileUrl,alt:``,referrerPolicy:`no-referrer`}):(0,f.jsx)(`span`,{className:`med-feed-table-post__placeholder`,"aria-hidden":!0,children:e.media.length>0?`📎`:`Aa`}),(0,f.jsxs)(`span`,{className:`med-feed-table-post__body`,children:[(0,f.jsx)(l.Typography.Paragraph,{ellipsis:{rows:2},className:`med-feed-table-post__text`,children:xe(e.content,160,n)||(r?`[Hình ảnh]`:`[Tài liệu]`)}),(0,f.jsxs)(`span`,{className:`med-feed-table-post__meta`,children:[Ep(e.createdAt),e.media.length>0&&` · ${e.media.length} tệp đính kèm`]})]})]})}function Sg({post:e,onClose:t,onChanged:n,onRemoved:r,onEdit:i,readOnly:a=!1}){let{api:o}=P(),[s,c]=(0,d.useState)(!1),u=async(e,r)=>{c(!0);try{n(await e()),l.message.success(r),t()}catch{l.message.error(`Thao tác không thành công, bài có thể đã được người khác xử lý`)}finally{c(!1)}},p=e&&(0,f.jsxs)(l.Space,{children:[(0,f.jsx)(Vm,{post:e,labelled:!0,onRemoved:e=>{r(e),t()}}),e.status===`PENDING`&&(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.approvePost(e.id),`Đã duyệt bài, chờ phát hành`),children:`Duyệt`}),e.status===`APPROVED`&&(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.publishPost(e.id),`Đã phát hành bài lên bảng tin`),children:`Phát Hành`}),e.status===`PUBLISHED`&&(e.commentsLocked?(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>o.unlockComments(e.id),`Đã mở bình luận`),children:`Mở bình luận`}):(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>o.lockComments(e.id),`Đã khoá bình luận`),children:`Khoá bình luận`})),e.status===`PUBLISHED`&&(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>e.pinnedAt?o.unpinPost(e.id):o.pinPost(e.id),e.pinnedAt?`Đã bỏ ghim bài`:`Đã ghim bài lên đầu bảng tin`),children:e.pinnedAt?`Bỏ ghim`:`Ghim lên đầu`}),e.status===`PUBLISHED`&&(0,f.jsx)(l.Button,{danger:!0,loading:s,onClick:()=>void u(()=>o.unpublishPost(e.id),`Đã gỡ bài khỏi bảng tin`),children:`Gỡ bài`}),e.status===`UNPUBLISHED`&&(0,f.jsxs)(f.Fragment,{children:[i&&(0,f.jsx)(l.Button,{disabled:s,onClick:()=>{i(e),t()},children:`Sửa`}),(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.submitPost(e.id),`Đã gửi duyệt lại`),children:`Gửi duyệt lại`})]})]});return(0,f.jsx)(l.Drawer,{title:`Xem bài viết`,width:720,open:e!==null,onClose:t,extra:a?void 0:p,destroyOnClose:!0,className:`med-feed-portal med-feed-review-drawer`,children:e&&(0,f.jsx)(Jm,{post:e,mode:`preview`})})}var Cg=10,wg=[{key:`PENDING`,label:`Chờ duyệt`,hint:`Cần xử lý`,tone:`pending`},{key:`APPROVED`,label:`Đã duyệt`,hint:`Chờ phát hành`,tone:`approved`},{key:`PUBLISHED`,label:`Đang phát hành`,hint:`Đang hiển thị`,tone:`published`},{key:`UNPUBLISHED`,label:`Đã gỡ`,hint:`Gỡ khỏi bảng tin`,tone:`unpublished`},{key:`DELETED`,label:`Đã xoá`,hint:`Lưu cho báo cáo`,tone:`deleted`},{key:`ALL`,label:`Tất cả`,hint:`Mọi trạng thái`,tone:`all`}];function Tg(){let{api:e}=P(),[t,n]=(0,d.useState)(`30d`),[r,i]=(0,d.useState)(`PENDING`),[a,o]=(0,d.useState)(),[s,c]=(0,d.useState)(``),[u,p]=(0,d.useState)(``),[h,g]=(0,d.useState)(1),[_,v]=(0,d.useState)([]),[y,b]=(0,d.useState)(null),[x,S]=(0,d.useState)(null),[C,w]=(0,d.useState)(null),T=(0,d.useMemo)(()=>vg(t),[t]),E=F((0,d.useCallback)(()=>e.listCategories(),[e]),`categories`),D=F((0,d.useCallback)(()=>e.listManagePosts({...T,status:r===`ALL`?void 0:r,authorId:a,q:s||void 0,page:h,pageSize:Cg}),[e,T,r,a,s,h]),JSON.stringify({range:T,status:r,authorId:a,q:s,page:h})),O=F((0,d.useCallback)(()=>e.getManageCounts(T),[e,T]),JSON.stringify(T)),k=()=>{v([]),D.reload(),O.reload()};(0,d.useEffect)(()=>{let e=u.trim();if(e===s)return;let t=setTimeout(()=>{c(e),g(1),v([])},350);return()=>clearTimeout(t)},[u,s]);let A=e=>t=>{e(t),g(1),v([])},j=async(e,t,n)=>{S(e.id);try{await t(),l.message.success(n),k()}catch{l.message.error(`Thao tác không thành công, bài có thể đã được người khác xử lý`)}finally{S(null)}},ee=async()=>{try{await e.approvePosts(_),l.message.success(`Đã duyệt ${_.length} bài viết, chờ phát hành`),k()}catch{l.message.error(`Không duyệt được các bài đã chọn`)}},M=(e,t,n,r,i=`default`)=>(0,f.jsx)(l.Tooltip,{title:t,children:(0,f.jsx)(l.Button,{size:`small`,icon:n,"aria-label":t,loading:x===e.id&&i!=="default",className:`med-feed-manage__action med-feed-manage__action--${i}`,onClick:r})});return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-manage`,children:[(0,f.jsx)(sg,{title:`Trung tâm duyệt bài viết`,description:`Duyệt, phát hành, gỡ và theo dõi tương tác của mọi bài viết trên bảng tin`,extra:(0,f.jsx)(og,{categories:E.data??[],onSaved:k})}),(0,f.jsxs)(`section`,{className:`med-feed-manage__panel`,children:[(0,f.jsx)(`div`,{className:`med-feed-manage__tabs`,role:`tablist`,"aria-label":`Lọc theo trạng thái`,children:wg.map(e=>{let t=e.key===`ALL`?O.data?O.data.PENDING+O.data.APPROVED+O.data.PUBLISHED+O.data.UNPUBLISHED+O.data.DELETED:void 0:O.data?.[e.key],n=r===e.key;return(0,f.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":n,title:e.hint,className:`med-feed-manage__tab med-feed-manage__tab--${e.tone}${n?` med-feed-manage__tab--active`:``}`,onClick:()=>A(i)(e.key),children:[e.label,(0,f.jsx)(`span`,{className:`med-feed-manage__tab-count`,children:t===void 0?`–`:$(t)})]},e.key)})}),(0,f.jsxs)(`div`,{className:`med-feed-manage__toolbar med-feed-pill-fields`,children:[(0,f.jsx)(l.Input,{allowClear:!0,value:u,prefix:(0,f.jsx)(m.SearchOutlined,{}),placeholder:`Tìm theo nội dung bài viết…`,className:`med-feed-manage__search`,onPressEnter:()=>A(c)(u.trim()),onChange:e=>{p(e.target.value),e.target.value||A(c)(``)}}),(0,f.jsx)(bg,{value:t,onChange:A(n)}),(0,f.jsx)(mg,{value:a,onChange:A(o)}),(s||a||JSON.stringify(T)!==JSON.stringify(vg(`30d`)))&&(0,f.jsx)(l.Button,{type:`link`,icon:(0,f.jsx)(m.CloseCircleOutlined,{}),className:`med-feed-manage__clear`,onClick:()=>{p(``),c(``),o(void 0),n(`30d`),g(1),v([])},children:`Xoá bộ lọc`})]}),_.length>0&&(0,f.jsxs)(`div`,{className:`med-feed-manage__bulk`,children:[(0,f.jsxs)(`span`,{children:[`Đã chọn `,(0,f.jsx)(`strong`,{children:_.length}),` bài chờ duyệt`]}),(0,f.jsxs)(l.Space,{children:[(0,f.jsx)(l.Button,{onClick:()=>v([]),children:`Bỏ chọn`}),(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.CheckOutlined,{}),onClick:()=>void ee(),children:`Duyệt hàng loạt`})]})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`id`,columns:[{title:`Bài viết`,key:`content`,render:(e,t)=>(0,f.jsx)(xg,{post:t,onOpen:b})},{title:`Tác giả`,key:`author`,width:220,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-author`,children:[(0,f.jsx)(Gf,{user:t.author,size:32}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(`strong`,{children:t.author.fullName}),t.author.departmentName&&(0,f.jsx)(`span`,{children:t.author.departmentName})]})]})},{title:`Trạng thái`,key:`status`,width:130,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-status`,children:[(0,f.jsx)(Wm,{status:t.status}),t.pinnedAt&&t.status===`PUBLISHED`&&(0,f.jsx)(Um,{})]})},{title:`Ngày tạo`,key:`createdAt`,width:150,render:(e,t)=>(0,f.jsx)(`span`,{className:`med-feed-table-date`,children:Ep(t.createdAt)})},{title:`Tương tác`,key:`engagement`,width:220,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-engagement`,children:[(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.LikeOutlined,{}),` `,$(t.reactionCount)]}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.CommentOutlined,{}),` `,$(t.commentCount)]}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.ShareAltOutlined,{}),` `,$(t.shareCount)]})]})},{title:`Thao tác`,key:`actions`,fixed:`right`,width:180,align:`right`,render:(t,n)=>(0,f.jsxs)(l.Space,{size:6,children:[n.status===`PENDING`&&M(n,`Duyệt`,(0,f.jsx)(m.CheckOutlined,{}),()=>void j(n,()=>e.approvePost(n.id),`Đã duyệt bài, chờ phát hành`),`primary`),n.status===`APPROVED`&&M(n,`Phát Hành`,(0,f.jsx)(m.CloudUploadOutlined,{}),()=>void j(n,()=>e.publishPost(n.id),`Đã phát hành bài lên bảng tin`),`primary`),n.status===`PUBLISHED`&&M(n,n.pinnedAt?`Bỏ ghim`:`Ghim lên đầu`,n.pinnedAt?(0,f.jsx)(m.PushpinFilled,{}):(0,f.jsx)(m.PushpinOutlined,{}),()=>void j(n,()=>n.pinnedAt?e.unpinPost(n.id):e.pinPost(n.id),n.pinnedAt?`Đã bỏ ghim bài`:`Đã ghim bài lên đầu bảng tin`)),n.status===`PUBLISHED`&&M(n,`Gỡ bài`,(0,f.jsx)(m.EyeInvisibleOutlined,{}),()=>void j(n,()=>e.unpublishPost(n.id),`Đã gỡ bài khỏi bảng tin`),`danger`),n.status===`UNPUBLISHED`&&(0,f.jsxs)(f.Fragment,{children:[M(n,`Sửa bài`,(0,f.jsx)(m.EditOutlined,{}),()=>w(n)),M(n,`Gửi duyệt lại`,(0,f.jsx)(m.SendOutlined,{}),()=>void j(n,()=>e.submitPost(n.id),`Đã gửi duyệt lại`),`primary`),M(n,`Xoá bài`,(0,f.jsx)(m.DeleteOutlined,{}),()=>Rm(()=>j(n,()=>e.deletePost(n.id),`Đã xoá bài viết`)))]}),M(n,`Xem chi tiết`,(0,f.jsx)(m.EyeOutlined,{}),()=>b(n))]})}],dataSource:D.data?.items??[],loading:D.loading,rowSelection:{selectedRowKeys:_,onChange:e=>v(e),getCheckboxProps:e=>({disabled:e.status!==`PENDING`})},locale:{emptyText:D.error?`Không tải được danh sách bài`:`Không có bài viết nào`},scroll:{x:1040},pagination:{current:h,pageSize:Cg,total:D.data?.total??0,showSizeChanger:!1,showTotal:(e,[t,n])=>`Hiển thị ${t}–${n} trong ${$(e)} bài viết`,onChange:e=>{g(e),v([])}}})]}),(0,f.jsx)(Sg,{post:y,onClose:()=>b(null),onChanged:k,onRemoved:k,onEdit:w}),(0,f.jsx)(ag,{open:C!==null,categories:E.data??[],intent:`text`,initialPost:C??void 0,onClose:()=>w(null),onSaved:k},C?.id??`closed`)]})}var Eg=/^https?:\/\/\S+$/;function Dg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.getRightBanner(),[e]),`banner-settings`),[n]=l.Form.useForm(),[r,i]=(0,d.useState)(!1),a=t.data?.imageUrl?t.data:null;(0,d.useEffect)(()=>{t.data&&n.setFieldsValue({imageUrl:t.data.imageUrl??``,linkUrl:t.data.linkUrl??``})},[t.data,n]);let o=async()=>{let r=await n.validateFields();i(!0);try{await e.setRightBanner({imageUrl:r.imageUrl,linkUrl:r.linkUrl.trim()||null}),l.message.success(`Đã lưu banner`),t.reload()}catch{l.message.error(`Không lưu được banner`)}finally{i(!1)}},s=async()=>{try{await e.clearRightBanner(),n.setFieldsValue({imageUrl:``,linkUrl:``}),l.message.success(`Đã gỡ banner`),t.reload()}catch{l.message.error(`Không gỡ được banner`)}};return(0,f.jsxs)(`div`,{className:`med-feed-banner-settings`,children:[(0,f.jsx)(sg,{title:`Banner bên phải`,description:`Ảnh quảng cáo hiện dưới khung sự kiện ở cột phải bảng tin`}),(0,f.jsx)(`section`,{className:`med-feed-banner-settings__panel`,children:(0,f.jsxs)(l.Form,{form:n,layout:`vertical`,requiredMark:!1,children:[(0,f.jsx)(l.Form.Item,{name:`imageUrl`,label:`Ảnh banner`,extra:`Nên dùng ảnh dọc; ảnh hiện rộng đúng bằng cột phải và giữ nguyên tỉ lệ.`,rules:[{required:!0,message:`Cần chọn ảnh banner`}],children:(0,f.jsx)(ug,{aspectRatio:`4 / 7`,maxWidth:280})}),(0,f.jsx)(l.Form.Item,{name:`linkUrl`,label:`Đường dẫn khi bấm vào (không bắt buộc)`,rules:[{pattern:Eg,message:`Đường dẫn phải bắt đầu bằng http:// hoặc https://`}],children:(0,f.jsx)(l.Input,{size:`large`,maxLength:2048,placeholder:`https://...`})}),(0,f.jsxs)(`div`,{className:`med-feed-banner-settings__actions`,children:[(0,f.jsx)(l.Button,{type:`primary`,loading:r,onClick:()=>void o(),children:`Lưu banner`}),a&&(0,f.jsx)(l.Popconfirm,{title:`Gỡ banner này?`,okText:`Gỡ`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>s(),children:(0,f.jsx)(l.Button,{danger:!0,icon:(0,f.jsx)(m.DeleteOutlined,{}),children:`Gỡ banner`})})]})]})})]})}var Og=`#2ea053`;function kg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.listManageCategories(),[e]),`manage-categories`),[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o]=l.Form.useForm(),s=l.Form.useWatch(`color`,o),c=l.Form.useWatch(`name`,o),u=n===`new`||!n?null:n.id,p=s?(t.data??[]).find(e=>e.id!==u&&e.color?.toLowerCase()===s.toLowerCase()):void 0,h=e=>{let n=(t.data??[]).reduce((e,t)=>Math.max(e,t.sortOrder+1),0);o.setFieldsValue(e===`new`?{name:``,color:Og,sortOrder:n,hidden:!1}:{name:e.name,color:e.color??Og,sortOrder:e.sortOrder,hidden:e.hidden}),r(e)},g=async()=>{let i=await o.validateFields(),s={...i,name:i.name.trim()};a(!0);try{n===`new`?await e.createCategory(s):n&&await e.updateCategory(n.id,s),l.message.success(`Đã lưu chuyên mục`),r(null),t.reload()}catch(e){l.message.error(b(e,`FEED_CATEGORY_INVALID`)?`Tên chuyên mục đã tồn tại hoặc không hợp lệ`:`Không lưu được chuyên mục`)}finally{a(!1)}},_=async n=>{try{await e.deleteCategory(n.id),l.message.success(`Đã xoá chuyên mục`),t.reload()}catch(e){l.message.error(b(e,`FEED_CATEGORY_IN_USE`)?`Chuyên mục đã có bài viết, hãy ẩn thay vì xoá`:`Không xoá được chuyên mục`)}},v=async(n,r)=>{try{await e.updateCategory(n.id,{hidden:r}),t.reload()}catch{l.message.error(`Không cập nhật được chuyên mục`)}};return(0,f.jsxs)(`div`,{className:`med-feed-categories`,children:[(0,f.jsx)(sg,{title:`Thiết lập chuyên mục`,description:`Tạo, sửa, ẩn hoặc xoá các chuyên mục của bảng tin`,extra:(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.PlusOutlined,{}),onClick:()=>h(`new`),children:`Thêm chuyên mục`})}),(0,f.jsxs)(`section`,{className:`med-feed-categories__panel`,children:[(0,f.jsxs)(`div`,{className:`med-feed-categories__head`,children:[(0,f.jsx)(`h3`,{className:`med-feed-categories__title`,children:t.data?`${t.data.length} chuyên mục`:`Chuyên mục`}),(0,f.jsx)(`span`,{className:`med-feed-categories__hint`,children:`Chuyên mục bị ẩn không hiện ở bảng tin nhưng bài cũ vẫn giữ nhãn`})]}),(0,f.jsx)(l.Table,{className:`med-feed-categories-table`,rowKey:`id`,columns:[{title:`Chuyên mục`,dataIndex:`name`,render:(e,t)=>(0,f.jsx)(Ag,{name:e,color:t.color})},{title:`Thứ tự`,dataIndex:`sortOrder`,width:90},{title:`Số bài`,dataIndex:`postCount`,width:90,render:e=>(0,f.jsx)(`span`,{className:`med-feed-categories__count`,children:e})},{title:`Hiển thị`,width:100,render:(e,t)=>(0,f.jsx)(l.Switch,{size:`small`,checked:!t.hidden,onChange:e=>void v(t,!e),"aria-label":`Hiển thị ${t.name}`})},{title:``,fixed:`right`,width:100,render:(e,t)=>(0,f.jsxs)(l.Space,{size:8,children:[(0,f.jsx)(l.Button,{className:`med-feed-categories__action`,icon:(0,f.jsx)(m.EditOutlined,{}),"aria-label":`Sửa`,onClick:()=>h(t)}),(0,f.jsx)(l.Popconfirm,{title:`Xoá chuyên mục này?`,okText:`Xoá`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>_(t),children:(0,f.jsx)(l.Button,{className:`med-feed-categories__action med-feed-categories__action--danger`,icon:(0,f.jsx)(m.DeleteOutlined,{}),"aria-label":`Xoá`})})]})}],dataSource:t.data??[],loading:t.loading,pagination:!1,scroll:{x:`max-content`},rowClassName:e=>e.hidden?`med-feed-categories__row--hidden`:``})]}),(0,f.jsx)(l.Modal,{open:n!==null,title:n===`new`?`Thêm chuyên mục`:`Sửa chuyên mục`,okText:`Lưu`,cancelText:`Huỷ`,confirmLoading:i,onOk:()=>void g(),onCancel:()=>r(null),destroyOnClose:!0,children:(0,f.jsxs)(l.Form,{form:o,layout:`vertical`,preserve:!1,children:[(0,f.jsxs)(`div`,{className:`med-feed-category-preview`,children:[`Xem trước`,(0,f.jsx)(Ag,{name:c?.trim()||`Tên chuyên mục`,color:s})]}),(0,f.jsx)(l.Form.Item,{name:`name`,label:`Tên chuyên mục`,rules:[{required:!0,whitespace:!0,message:`Nhập tên chuyên mục`}],children:(0,f.jsx)(l.Input,{maxLength:60})}),(0,f.jsx)(l.Form.Item,{name:`color`,label:`Màu`,rules:[{pattern:/^#[0-9a-fA-F]{6}$/,message:`Màu dạng #rrggbb`}],validateStatus:p?`warning`:void 0,help:p?`Màu này đã dùng cho "${p.name}"`:void 0,children:(0,f.jsx)(jg,{})}),(0,f.jsx)(l.Form.Item,{name:`sortOrder`,label:`Thứ tự hiển thị`,children:(0,f.jsx)(l.InputNumber,{precision:0,style:{width:`100%`}})}),(0,f.jsx)(l.Form.Item,{name:`hidden`,label:`Ẩn khỏi bảng tin`,valuePropName:`checked`,children:(0,f.jsx)(l.Switch,{})})]})})]})}function Ag({name:e,color:t}){return(0,f.jsxs)(`span`,{className:`med-feed-category-chip`,style:t?{"--tone":t}:void 0,children:[(0,f.jsx)(`span`,{className:`med-feed-category-chip__dot`,"aria-hidden":!0}),(0,f.jsx)(`span`,{className:`med-feed-category-chip__name`,children:e})]})}function jg({value:e,onChange:t}){let n=/^#[0-9a-fA-F]{6}$/.test(e??``);return(0,f.jsxs)(`div`,{className:`med-feed-category-color`,children:[(0,f.jsx)(`input`,{type:`color`,"aria-label":`Chọn màu`,value:n?e:Og,onChange:e=>t?.(e.target.value)}),(0,f.jsx)(l.Input,{maxLength:7,placeholder:`#2ea053`,value:e,onChange:e=>t?.(e.target.value)})]})}function Mg(){let{basePath:e}=P(),t=`${e.replace(/\/+$/,``)}/settings`,n=[{to:`${t}/categories`,label:`Thiết lập chuyên mục`},{to:`${t}/banner`,label:`Banner`}];return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-settings`,children:[(0,f.jsx)(`nav`,{className:`med-feed-settings__tabs`,"aria-label":`Cấu hình`,children:n.map(e=>(0,f.jsx)(p.NavLink,{to:e.to,className:({isActive:e})=>e?`med-feed-settings__tab med-feed-settings__tab--active`:`med-feed-settings__tab`,children:e.label},e.to))}),(0,f.jsxs)(p.Routes,{children:[(0,f.jsx)(p.Route,{index:!0,element:(0,f.jsx)(p.Navigate,{to:`categories`,replace:!0})}),(0,f.jsx)(p.Route,{path:`categories`,element:(0,f.jsx)(kg,{})}),(0,f.jsx)(p.Route,{path:`banner`,element:(0,f.jsx)(Dg,{})})]})]})}var Ng={ZALO:`Zalo`,FACEBOOK:`Facebook`,CHAT:`Chat`,LINK:`Liên kết`};function Pg({title:e,value:t,icon:n,tone:r,detail:i,loading:a}){return(0,f.jsxs)(`div`,{className:`med-feed-kpi med-feed-kpi--${r}`,children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__icon`,"aria-hidden":!0,children:n}),(0,f.jsxs)(`div`,{className:`med-feed-kpi__body`,children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__title`,children:e}),a?(0,f.jsx)(l.Skeleton.Input,{active:!0,size:`small`,className:`med-feed-kpi__skeleton`}):(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__value`,children:$(t??0)}),i&&(0,f.jsx)(`span`,{className:`med-feed-kpi__detail`,children:i})]})]})]})}function Fg({overview:e,loading:t}){let n=Se.filter(t=>(e?.reactionsByType[t]??0)>0),r=e?.postsByStatus??{},i=[`ZALO`,`FACEBOOK`,`CHAT`,`LINK`].filter(t=>(e?.sharesByChannel?.[t]??0)>0);return(0,f.jsxs)(`div`,{className:`med-feed-kpis`,children:[(0,f.jsx)(Pg,{title:`Bài viết`,tone:`posts`,value:e?.postCount,icon:(0,f.jsx)(m.FileTextOutlined,{}),loading:t,detail:`${$(r.PUBLISHED??0)} đang phát hành · ${$(r.UNPUBLISHED??0)} đã gỡ · ${$(r.PENDING??0)} chờ duyệt`}),(0,f.jsx)(Pg,{title:`Reaction`,tone:`reactions`,value:e?.reactionTotal,icon:(0,f.jsx)(m.LikeFilled,{}),loading:t,detail:n.length>0?n.map(t=>`${bm[t].label} ${$(e?.reactionsByType[t]??0)}`).join(` · `):`Chưa có cảm xúc nào`}),(0,f.jsx)(Pg,{title:`Bình luận`,tone:`comments`,value:e?.commentCount,icon:(0,f.jsx)(m.CommentOutlined,{}),loading:t,detail:`${$(e?.rootCommentCount??0)} bình luận · ${$(e?.replyCount??0)} trả lời`}),(0,f.jsx)(Pg,{title:`Chia sẻ`,tone:`shares`,value:e?.shareTotal,icon:(0,f.jsx)(m.ShareAltOutlined,{}),loading:t,detail:i.length>0?i.map(t=>`${Ng[t]} ${$(e?.sharesByChannel?.[t]??0)}`).join(` · `):`Chưa có lượt chia sẻ`})]})}var Ig=[{value:`day`,label:`Ngày`},{value:`week`,label:`Tuần`},{value:`month`,label:`Tháng`}];function Lg(e){let t=String(e.getMonth()+1).padStart(2,`0`);return`${e.getFullYear()}-${t}-${String(e.getDate()).padStart(2,`0`)}`}function Rg(e,t=new Date){let n=new Date(t);return e===`week`&&n.setDate(t.getDate()-(t.getDay()+6)%7),e===`month`&&n.setDate(1),{from:Lg(n),to:Lg(t)}}function zg({value:e,onChange:t}){let n=vg(e),r=Ig.find(({value:e})=>{let t=Rg(e);return t.from===n.from&&t.to===n.to})?.value;return(0,f.jsx)(l.Radio.Group,{className:`med-feed-segmented`,optionType:`button`,options:Ig,value:r,onChange:e=>t(Rg(e.target.value))})}var Bg=10,Vg=[{value:`total`,label:`Tổng tương tác`},{value:`reactions`,label:`Reaction`},{value:`comments`,label:`Bình luận`}];function Hg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)(`total`),[i,a]=(0,d.useState)({from:e.from,to:e.to}),[o,s]=(0,d.useState)(``),[c,u]=(0,d.useState)(``),[p,h]=(0,d.useState)(null),g=(0,d.useMemo)(()=>({...e,...vg(i),...c?{q:c}:{}}),[e,i,c]),_=F((0,d.useCallback)(()=>t.getTopPosts({...g,sortBy:n,limit:Bg}),[t,g,n]),`${JSON.stringify(g)}|${n}`);return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`med-feed-report-toolbar med-feed-pill-fields`,children:[(0,f.jsx)(l.Input,{allowClear:!0,value:o,prefix:(0,f.jsx)(m.SearchOutlined,{}),placeholder:`Tìm theo nội dung bài viết… (Enter để tìm)`,className:`med-feed-report-toolbar__search`,onPressEnter:()=>u(o.trim()),onChange:e=>{s(e.target.value),e.target.value||u(``)}}),(0,f.jsx)(zg,{value:i,onChange:a}),(0,f.jsx)(bg,{value:i,onChange:a}),(0,f.jsx)(l.Select,{value:n,onChange:r,options:Vg,style:{minWidth:170},"aria-label":`Xếp theo`})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`id`,pagination:!1,loading:_.loading,dataSource:_.data??[],locale:{emptyText:_.error?`Không tải được danh sách`:c?`Không có bài nào khớp`:`Chưa có bài trong khoảng này`},scroll:{x:900},columns:[{title:`#`,key:`rank`,width:56,render:(e,t,n)=>(0,f.jsx)(`span`,{className:n<3?`med-feed-top-rank med-feed-top-rank--top`:`med-feed-top-rank`,children:n+1})},{title:`Bài viết`,key:`post`,render:(e,t)=>(0,f.jsx)(xg,{post:t,onOpen:h})},{title:`Tương tác`,key:`engagement`,width:280,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-engagement`,children:[(0,f.jsxs)(`span`,{title:`Reaction`,children:[(0,f.jsx)(m.LikeOutlined,{}),` `,$(t.reactionCount)]}),(0,f.jsxs)(`span`,{title:`Bình luận`,children:[(0,f.jsx)(m.CommentOutlined,{}),` `,$(t.commentCount)]}),(0,f.jsxs)(`span`,{title:`Chia sẻ`,children:[(0,f.jsx)(m.ShareAltOutlined,{}),` `,$(t.shareCount)]})]})},{title:`Tổng tương tác`,key:`total`,width:130,align:`right`,render:(e,t)=>(0,f.jsx)(`strong`,{children:$(t.reactionCount+t.commentCount+t.shareCount)})},{title:``,key:`actions`,fixed:`right`,width:64,align:`right`,render:(e,t)=>(0,f.jsx)(l.Tooltip,{title:`Xem chi tiết`,children:(0,f.jsx)(l.Button,{size:`small`,icon:(0,f.jsx)(m.EyeOutlined,{}),"aria-label":`Xem chi tiết`,className:`med-feed-manage__action`,onClick:()=>h(t)})})}]}),(0,f.jsx)(Sg,{post:p,onClose:()=>h(null),onChanged:()=>_.reload(),onRemoved:()=>_.reload(),readOnly:!0})]})}var Ug=10;function Wg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)({from:e.from,to:e.to}),[i,a]=(0,d.useState)(),[o,s]=(0,d.useState)(null),c=(0,d.useMemo)(()=>({...e,...vg(n),...i?{userId:i}:{}}),[e,n,i]),u=F((0,d.useCallback)(()=>t.getTopUsers({...c,limit:Ug}),[t,c]),JSON.stringify(c));return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`med-feed-report-toolbar med-feed-pill-fields`,children:[(0,f.jsx)(mg,{value:i,onChange:a,placeholder:`Tất cả nhân viên`}),(0,f.jsx)(zg,{value:n,onChange:r}),(0,f.jsx)(bg,{value:n,onChange:r})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:e=>e.user.id,pagination:!1,loading:u.loading,dataSource:u.data??[],locale:{emptyText:u.error?`Không tải được số liệu`:`Chưa có hoạt động`},scroll:{x:1200},columns:[{title:`#`,key:`rank`,width:56,render:(e,t,n)=>(0,f.jsx)(`span`,{className:!i&&n<3?`med-feed-top-rank med-feed-top-rank--top`:`med-feed-top-rank`,children:n+1})},{title:`Nhân viên`,key:`user`,width:240,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-report-person`,children:[(0,f.jsx)(Gf,{user:t.user,size:32}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(`strong`,{children:t.user.fullName}),t.user.departmentName&&(0,f.jsx)(`span`,{children:t.user.departmentName})]})]})},{title:`Bài tương tác nhiều nhất`,key:`topPost`,render:(e,t)=>t.topPost?(0,f.jsx)(xg,{post:t.topPost.post,onOpen:s}):(0,f.jsx)(`span`,{className:`med-feed-report-muted`,children:`—`})},{title:`Reaction`,dataIndex:`reactions`,width:100,align:`right`,render:$},{title:`Bình luận`,dataIndex:`comments`,width:100,align:`right`,render:$},{title:`Chia sẻ`,dataIndex:`shares`,width:90,align:`right`,render:$},{title:`Tổng tương tác`,dataIndex:`total`,width:130,align:`right`,render:e=>(0,f.jsx)(`strong`,{children:$(e)})}]}),(0,f.jsx)(Sg,{post:o,onClose:()=>s(null),onChanged:()=>u.reload(),onRemoved:()=>u.reload(),readOnly:!0})]})}var Gg=[`#7c3aed`,`#2563eb`,`#0d9488`],Kg=[{label:`Ngày`,value:`day`},{label:`Tuần`,value:`week`},{label:`Tháng`,value:`month`}];function qg(e,t){let[n,r,i]=e.slice(0,10).split(`-`);return t===`month`?`${r}/${n}`:t===`week`?`Tuần ${i}/${r}`:`${i}/${r}`}function Jg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)(`day`),[i,a]=(0,d.useState)({from:e.from,to:e.to}),o=(0,d.useMemo)(()=>({...e,...vg(i)}),[e,i]),[s,c]=(0,d.useState)(!1),u=F((0,d.useCallback)(()=>t.getReportsTimeseries({...o,groupBy:n}),[t,o,n]),`${JSON.stringify(o)}|${n}`),p=u.data??[],m=p.map(e=>qg(e.bucket,n)),h={chart:{type:`line`,toolbar:{show:!1},zoom:{enabled:!1},fontFamily:`inherit`},colors:Gg,stroke:{width:2,curve:`smooth`},markers:{size:0,hover:{size:5},strokeColors:`#ffffff`,strokeWidth:2},dataLabels:{enabled:!1},legend:{position:`top`,horizontalAlign:`right`,fontSize:`13px`},grid:{borderColor:`#eef0f4`,strokeDashArray:4},xaxis:{categories:m,tickAmount:Math.min(m.length,10),labels:{style:{colors:`#65676b`}},axisBorder:{show:!1},crosshairs:{show:!0}},yaxis:{min:0,forceNiceScale:!0,labels:{formatter:e=>$(Math.round(e))}},tooltip:{shared:!0,intersect:!1,y:{formatter:e=>$(e)}}};return(0,f.jsx)(l.Card,{bordered:!1,className:`med-feed-report-panel`,title:`Xu hướng tương tác`,extra:(0,f.jsxs)(l.Space,{wrap:!0,children:[(0,f.jsx)(bg,{value:i,onChange:a}),(0,f.jsx)(l.Radio.Group,{size:`small`,className:`med-feed-segmented`,optionType:`button`,options:Kg,value:n,onChange:e=>r(e.target.value)}),(0,f.jsx)(l.Button,{size:`small`,type:`text`,onClick:()=>c(!s),children:s?`Biểu đồ`:`Bảng số liệu`})]}),children:u.loading?(0,f.jsx)(l.Skeleton,{active:!0,paragraph:{rows:6}}):p.length===0?(0,f.jsx)(l.Empty,{description:u.error?`Không tải được số liệu`:`Chưa có tương tác trong khoảng này`}):s?(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`bucket`,size:`small`,pagination:!1,scroll:{y:320},dataSource:p,columns:[{title:`Thời gian`,key:`bucket`,render:(e,t)=>qg(t.bucket,n)},{title:`Reaction`,dataIndex:`reactions`,align:`right`,render:$},{title:`Bình luận`,dataIndex:`comments`,align:`right`,render:$}]}):(0,f.jsx)(v.default,{type:`line`,height:320,options:h,series:[{name:`Reaction`,data:p.map(e=>e.reactions)},{name:`Bình luận`,data:p.map(e=>e.comments)}]})})}function Yg(){let{api:e}=P(),[t,n]=(0,d.useState)(`30d`),r=(0,d.useMemo)(()=>vg(t),[t]),i=F((0,d.useCallback)(()=>e.getReportsOverview(r),[e,r]),JSON.stringify(r));return(0,f.jsxs)(`div`,{className:`med-feed-wide`,children:[(0,f.jsx)(sg,{title:`Thống kê & báo cáo`,description:`Tương tác trên bảng tin nội bộ theo khoảng thời gian`,extra:(0,f.jsx)(bg,{value:t,onChange:n})}),(0,f.jsxs)(`div`,{className:`med-feed-stack`,children:[(0,f.jsx)(Fg,{overview:i.data,loading:i.loading}),(0,f.jsx)(Jg,{range:r},JSON.stringify(r)),(0,f.jsx)(l.Card,{bordered:!1,className:`med-feed-report-panel med-feed-report-tabs`,children:(0,f.jsx)(l.Tabs,{items:[{key:`posts`,label:`Bài có tương tác cao`,children:(0,f.jsx)(Hg,{range:r},JSON.stringify(r))},{key:`people`,label:`Người tương tác nhiều nhất`,children:(0,f.jsx)(Wg,{range:r},JSON.stringify(r))}]})})]})]})}function Xg(){let{me:e,basePath:t}=P(),n=t.replace(/\/+$/,``),r=[...e.canManage?[{to:n||`/`,label:`Duyệt bài viết`,icon:(0,f.jsx)(m.FileDoneOutlined,{}),end:!0}]:[],...e.canPost?[{to:`${n}/my-posts`,label:`Bài của tôi`,icon:(0,f.jsx)(m.ProfileOutlined,{})}]:[],...e.canManage?[{to:`${n}/reports`,label:`Thống kê & Báo cáo`,icon:(0,f.jsx)(m.BarChartOutlined,{})},{to:`${n}/events`,label:`Sự kiện`,icon:(0,f.jsx)(m.CalendarOutlined,{})},{to:`${n}/settings`,label:`Cấu hình`,icon:(0,f.jsx)(m.SettingOutlined,{})}]:[]];return r.length===0?(0,f.jsx)(`div`,{className:`med-feed-content`,children:(0,f.jsx)(l.Result,{status:`403`,title:`Bạn không có quyền quản lý bảng tin`})}):(0,f.jsxs)(`div`,{className:`med-feed-admin`,children:[(0,f.jsxs)(`aside`,{className:`med-feed-admin__sidebar`,children:[(0,f.jsxs)(`div`,{className:`med-feed-admin__brand`,children:[(0,f.jsx)(`span`,{className:`med-feed-admin__logo`,"aria-hidden":!0,children:`N`}),(0,f.jsxs)(`span`,{className:`med-feed-admin__brand-text`,children:[(0,f.jsx)(`strong`,{children:`Quản trị bảng tin`}),(0,f.jsx)(`span`,{children:`Bảng tin nội bộ`})]})]}),(0,f.jsx)(`div`,{className:`med-feed-admin__section`,children:`Điều hướng`}),(0,f.jsx)(`nav`,{className:`med-feed-admin__nav`,"aria-label":`Quản trị bảng tin`,children:r.map(e=>(0,f.jsxs)(p.NavLink,{to:e.to,end:e.end,className:({isActive:e})=>e?`med-feed-admin__nav-item med-feed-admin__nav-item--active`:`med-feed-admin__nav-item`,children:[(0,f.jsx)(`span`,{className:`med-feed-admin__nav-icon`,children:e.icon}),e.label]},e.to))})]}),(0,f.jsx)(`main`,{className:`med-feed-admin__main`,children:(0,f.jsxs)(p.Routes,{children:[(0,f.jsx)(p.Route,{index:!0,element:e.canManage?(0,f.jsx)(Tg,{}):(0,f.jsx)(p.Navigate,{to:`${n}/my-posts`,replace:!0})}),(0,f.jsx)(p.Route,{path:`my-posts`,element:(0,f.jsx)(Zg,{allowed:e.canPost,page:(0,f.jsx)(lg,{})})}),(0,f.jsx)(p.Route,{path:`reports`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(Yg,{})})}),(0,f.jsx)(p.Route,{path:`events`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(fg,{})})}),(0,f.jsx)(p.Route,{path:`settings/*`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(Mg,{})})}),(0,f.jsx)(p.Route,{path:`posts/:postId`,element:(0,f.jsx)(bh,{})}),(0,f.jsx)(p.Route,{path:`*`,element:(0,f.jsx)(l.Result,{status:`404`,title:`Không tìm thấy trang`})})]})})]})}function Zg({allowed:e,page:t}){return e?(0,f.jsx)(f.Fragment,{children:t}):(0,f.jsx)(l.Result,{status:`403`,title:`Bạn không có quyền truy cập trang này`})}function Qg(e){return(0,f.jsx)(Ee,{runtimeProps:{...e,isPostFeed:!0},isAdmin:!0,children:(0,f.jsx)(Xg,{})})}exports.NewsfeedAdminModule=Qg,exports.NewsfeedModule=Sh;
|
|
28
|
+
`),pe=Ph(v,N.start,N.end),me=Fh(v,N.start),he=e=>{e!==v&&(ae(e=>[...e.slice(-99),v]),se([]),y(e))},ge=()=>{if(ie.length===0)return;let e=ie[ie.length-1];ae(ie.slice(0,-1)),se([...oe,v]),y(e)},_e=()=>{if(oe.length===0)return;let e=oe[oe.length-1];se(oe.slice(0,-1)),ae([...ie,v]),y(e)};(0,d.useEffect)(()=>{p.current?.focus()},[]),(0,d.useEffect)(()=>{r?.(!ce&&!le)},[ce,le,r]);let ye=async e=>{if(le)return l.message.warning(`Bài viết cần có nội dung hoặc tệp đính kèm`),!1;D(e);let n={content:ep(v,h.current),mediaIds:S.map(e=>e.id),categoryId:b};try{let r;return t?(r=await c.updatePost(t.id,n),e===`submit`&&r.status===`DRAFT`&&(r=await c.submitPost(r.id))):(r=await c.createPost({...n,clientPostId:g.current,submit:e===`submit`}),g.current=crypto.randomUUID()),l.message.success(r.status===`DRAFT`?`Đã lưu nháp`:r.status===`PENDING`?`Bài viết đã vào hàng chờ duyệt`:r.status===`APPROVED`?`Bài viết đã được duyệt, chờ phát hành`:`Đã lưu bài viết`),i(r),!0}catch{return l.message.error(`Không lưu được bài viết, vui lòng thử lại`),!1}finally{D(null)}},be=()=>p.current?.textarea??null,xe=()=>{let e=be();e&&re({start:e.selectionStart??0,end:e.selectionEnd??0})},Se=e=>{he(e.text),requestAnimationFrame(()=>{let t=be();t?.focus(),t?.setSelectionRange(e.selectionStart,e.selectionEnd),xe()})},Ce=e=>{let t=be(),n=t?.selectionStart??v.length,r=t?.selectionEnd??v.length;Se(e(v,n,r))},we=e=>Ce((t,n,r)=>Oh(t,n,r,e)),Te=e=>Ce((t,n,r)=>Lh(t,n,r,e)),Ee={b:`bold`,i:`italic`,u:`underline`},De=e=>{let t=be(),n=t?.selectionStart??v.length,r=t?.selectionEnd??v.length;if(e.key===`Enter`&&(e.shiftKey||e.altKey)&&n===r){e.preventDefault(),Se({text:`${v.slice(0,n)}\n${v.slice(r)}`,selectionStart:n+1,selectionEnd:n+1});return}if(e.key===`Enter`&&!e.shiftKey&&n===r){let t=Ih(v,n);if(t){e.preventDefault(),Se(t);return}}let i=Ee[e.key.toLowerCase()];if((e.ctrlKey||e.metaKey)&&!e.shiftKey&&!e.altKey&&i){e.preventDefault(),we(i);return}if((e.ctrlKey||e.metaKey)&&!e.altKey){let t=e.key.toLowerCase();t===`z`&&!e.shiftKey?(e.preventDefault(),ge()):(t===`z`&&e.shiftKey||t===`y`)&&(e.preventDefault(),_e())}},F={id:t?.id??`draft-preview`,author:u.user??{id:u.userId,fullName:``,avatarUrl:null,departmentName:null},content:ep(v,h.current),mentionedUsers:[...h.current.values()],media:S,status:`PUBLISHED`,commentsLocked:t?.commentsLocked??!1,reactionCount:t?.reactionCount??0,topReactionTypes:t?.topReactionTypes??[],myReaction:null,commentCount:t?.commentCount??0,shareCount:t?.shareCount??0,sharedByMe:!1,createdAt:t?.createdAt??new Date().toISOString()};(0,d.useImperativeHandle)(s,()=>({saveDraft:()=>ye(`draft`),isDirty:()=>!ce&&!le}));let Oe=(0,f.jsxs)(`div`,{className:`med-feed-composer-form`,children:[(0,f.jsxs)(`div`,{className:`med-feed-composer-form__author`,children:[(0,f.jsx)(Hm,{size:40}),(0,f.jsxs)(`span`,{className:`med-feed-composer-form__author-info`,children:[(0,f.jsx)(`span`,{className:`med-feed-composer-form__author-name`,children:Hp.name}),(0,f.jsx)(`span`,{className:`med-feed-composer-form__pills`,children:(0,f.jsx)(Ch,{categories:e,value:b,onChange:x})})]})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__body`,children:[te&&(0,f.jsx)(Xh,{onInline:we,onLines:Te,activeInline:pe,activeLines:me,onColor:e=>Ce((t,n,r)=>Vh(t,n,r,e)),activeColor:Wh(v,N.start),onIndent:e=>Ce((t,n,r)=>zh(t,n,r,e)),onSize:e=>Ce((t,n,r)=>Hh(t,n,r,e)),activeSize:Gh(v,N.start),onUndo:ge,onRedo:_e,canUndo:ie.length>0,canRedo:oe.length>0}),(0,f.jsx)($f,{ref:p,value:v,onChange:e=>{he(e),xe()},onPick:e=>h.current.set(e.fullName,e),onKeyUp:xe,onMouseUp:xe,onKeyDown:De,placeholder:`Tạo bài viết mới...`,autoSize:a||o?{minRows:12,maxRows:30}:{minRows:4,maxRows:14},style:O?{background:O,borderRadius:8,padding:`8px 12px`}:void 0,className:fe?`med-feed-composer-form__text med-feed-composer-form__text--large`:`med-feed-composer-form__text`}),A&&(0,f.jsx)(l.Tag,{icon:(0,f.jsx)(m.EnvironmentOutlined,{}),color:`blue`,closable:!0,onClose:()=>j(``),className:`med-feed-composer-form__location-tag`,children:A}),ue&&(0,f.jsx)(sm,{url:ue}),(0,f.jsx)(eg,{media:S,uploadingCount:w,onRemove:e=>C(t=>t.filter(t=>t.id!==e))})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__toolbar`,children:[(0,f.jsxs)(`div`,{className:`med-feed-composer-form__toolbar-group`,children:[(0,f.jsx)(l.Popover,{trigger:`click`,content:(0,f.jsx)(`div`,{className:`med-feed-composer-form__color-grid`,children:[`#ffffff`,`#fde68a`,`#fca5a5`,`#86efac`,`#93c5fd`,`#d8b4fe`,`#f9a8d4`,`#c7d2fe`].map(e=>(0,f.jsx)(`button`,{type:`button`,className:`med-feed-composer-form__color-btn`,style:{background:e,borderColor:O===e?`var(--feed-primary)`:`#e5e7eb`},onClick:()=>k(e===`#ffffff`?null:e),"aria-label":e},e))}),children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.BgColorsOutlined,{style:{color:`var(--feed-primary)`,fontSize:20}}),className:`med-feed-composer-form__toolbar-btn`,"aria-label":`Màu nền`})}),(0,f.jsx)(l.Tooltip,{title:te?`Ẩn định dạng`:`Định dạng văn bản`,children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.FontColorsOutlined,{style:{fontSize:18}}),className:te?`med-feed-composer-form__toolbar-btn med-feed-composer-form__toolbar-btn--active`:`med-feed-composer-form__toolbar-btn`,"aria-label":`Định dạng văn bản`,"aria-pressed":te,onClick:()=>ne(e=>!e)})}),O&&O!==`#ffffff`&&(0,f.jsx)(l.Button,{type:`text`,size:`small`,onClick:()=>k(null),children:`Xóa màu`})]}),(0,f.jsx)(`div`,{className:`med-feed-composer-form__toolbar-group`,children:(0,f.jsx)(l.Popover,{trigger:`click`,overlayClassName:`med-feed-portal med-feed-emoji-popover`,content:(0,f.jsx)(Vf,{onPick:e=>he(`${v}${e}`)}),children:(0,f.jsx)(l.Button,{type:`text`,icon:(0,f.jsx)(m.SmileOutlined,{style:{color:`#f7b928`,fontSize:20}}),className:`med-feed-composer-form__toolbar-btn`,"aria-label":`Cảm xúc`})})})]}),(0,f.jsxs)(`div`,{className:`med-feed-composer-form__add`,children:[(0,f.jsx)(`span`,{className:`med-feed-composer-form__add-label`,children:`Thêm vào bài viết của bạn`}),(0,f.jsxs)(`span`,{className:`med-feed-composer-form__add-actions`,children:[(0,f.jsx)($h,{variant:`icon`,count:S.length+w,disabled:E!==null,onUploadStart:()=>T(e=>e+1),onUploaded:e=>{T(e=>e-1),e&&C(t=>[...t,e])},onQuestion:_?()=>x(_.id):void 0}),(0,f.jsx)(l.Popover,{trigger:`click`,open:ee,onOpenChange:M,content:(0,f.jsxs)(`div`,{style:{display:`flex`,gap:8,minWidth:220},children:[(0,f.jsx)(l.Input,{size:`small`,placeholder:`Nhập vị trí...`,value:A,onChange:e=>j(e.target.value),onPressEnter:()=>M(!1),prefix:(0,f.jsx)(m.EnvironmentOutlined,{})}),(0,f.jsx)(l.Button,{size:`small`,type:`primary`,onClick:()=>M(!1),children:`Xong`})]}),children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,size:`large`,icon:(0,f.jsx)(m.EnvironmentOutlined,{style:{color:`#10b981`,fontSize:22}}),"aria-label":`Vị trí`,className:`med-feed-picker-icon`})})]})]}),(0,f.jsx)(`div`,{className:`med-feed-composer-form__actions`,children:(0,f.jsx)(l.Button,{type:`primary`,block:!0,size:`large`,className:`med-feed-composer-form__submit`,disabled:de||le,loading:E===`submit`,onClick:()=>void ye(`submit`),children:`Hoàn thành`})})]});return o?(0,f.jsxs)(`div`,{className:`med-feed-composer-split`,children:[(0,f.jsx)(`div`,{className:`med-feed-composer-split__editor`,children:Oe}),(0,f.jsx)(`aside`,{className:`med-feed-composer-split__preview`,"aria-label":`Xem trước bài viết`,children:v.trim()||S.length>0?(0,f.jsx)(Jm,{post:F,mode:`preview`}):(0,f.jsx)(`div`,{className:`med-feed-composer-split__empty`,children:`Nội dung bài sẽ hiện ở đây khi bạn gõ.`})})]}):Oe});function ag({open:e,categories:t,intent:n,initialPost:r,onClose:i,onSaved:a}){let o=(0,d.useRef)(!1),s=(0,d.useRef)(null),[c,u]=(0,d.useState)(!1),[p,h]=(0,d.useState)(!1),[g,_]=(0,d.useState)(!1),[v,y]=(0,d.useState)(!1),b=(0,d.useCallback)(e=>{o.current=e},[]),x=()=>{if(!(s.current?.isDirty()??o.current)){i();return}u(!0)},S=async()=>{if(p)return;if(!s.current){u(!1),i();return}h(!0);let e=await s.current.saveDraft();h(!1),e&&(u(!1),i())};return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(l.Modal,{open:e,title:(0,f.jsxs)(`span`,{className:`med-feed-create-modal__title`,children:[r?`Sửa bài viết`:`Tạo bài viết`,(0,f.jsxs)(`span`,{className:`med-feed-create-modal__tools`,children:[(0,f.jsx)(l.Tooltip,{title:g?`Thoát toàn màn hình`:`Mở trình soạn toàn màn hình`,children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,icon:g?(0,f.jsx)(m.CompressOutlined,{}):(0,f.jsx)(m.ExpandOutlined,{}),"aria-label":g?`Thu nhỏ`:`Phóng to`,"aria-pressed":g,className:g?`med-feed-create-modal__tool--active`:void 0,onClick:()=>_(e=>!e)})}),(0,f.jsx)(l.Tooltip,{title:v?`Ẩn`:`Xem`,children:(0,f.jsx)(l.Button,{type:`text`,shape:`circle`,icon:v?(0,f.jsx)(m.EyeInvisibleOutlined,{}):(0,f.jsx)(m.EyeOutlined,{}),"aria-label":`Xem trước`,"aria-pressed":v,className:v?`med-feed-create-modal__tool--active`:void 0,onClick:()=>y(e=>!e)})})]})]}),footer:null,width:g?`100vw`:v?1180:680,style:g?{top:0,maxWidth:`100vw`,margin:0,paddingBottom:0}:void 0,centered:!g,destroyOnClose:!0,maskClosable:!1,onCancel:x,closeIcon:(0,f.jsx)(m.CloseOutlined,{}),className:g?`med-feed-portal med-feed-create-modal med-feed-create-modal--fullscreen`:`med-feed-portal med-feed-create-modal`,children:(0,f.jsx)(ig,{ref:s,zoomed:g,showPreview:v,categories:t,intent:n,initialPost:r,onDirtyChange:b,onSaved:e=>{o.current=!1,u(!1),a(e),i()}})}),(0,f.jsx)(l.Modal,{open:c,zIndex:1100,width:560,maskStyle:{zIndex:1099,background:`rgba(0, 0, 0, 0.65)`},title:`Lưu bài viết này làm bản nháp?`,onCancel:()=>{p||u(!1)},footer:[(0,f.jsx)(l.Button,{type:`text`,disabled:p,onClick:()=>{p||(u(!1),i())},children:`Xóa bản nhập`},`discard`),(0,f.jsx)(l.Button,{type:`primary`,loading:p,onClick:()=>void S(),children:`Lưu làm bản nháp`},`draft`)],centered:!0,destroyOnClose:!0,closeIcon:(0,f.jsx)(m.CloseOutlined,{}),className:`med-feed-portal med-feed-confirm-modal`,children:(0,f.jsx)(`p`,{children:`Nếu bỏ bây giờ, bạn sẽ mất bài viết này.`})})]})}function og({categories:e,onSaved:t}){let{me:n}=P(),[r,i]=(0,d.useState)(null);return n.canPost?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(l.Button,{type:`primary`,className:`med-feed-create-button`,onClick:()=>i(Date.now()),children:[(0,f.jsx)(`span`,{className:`med-feed-create-button__icon`,"aria-hidden":!0}),`Tạo bài viết`]}),(0,f.jsx)(ag,{open:r!==null,categories:e,intent:`text`,onClose:()=>i(null),onSaved:t},r??`closed`)]}):null}function sg({title:e,description:t,extra:n}){return(0,f.jsxs)(`div`,{className:`med-feed-page-header`,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(l.Typography.Title,{level:4,className:`med-feed-page-header__title`,children:e}),t&&(0,f.jsx)(l.Typography.Text,{type:`secondary`,children:t})]}),n]})}var cg=[{key:`ALL`,label:`Tất cả`},{key:`DRAFT`,label:`Nháp`},{key:`PENDING`,label:`Chờ duyệt`},{key:`APPROVED`,label:`Đã duyệt`},{key:`PUBLISHED`,label:`Đang phát hành`},{key:`UNPUBLISHED`,label:`Đã gỡ`}];function lg(){let{api:e,me:t,isPostFeed:n}=P(),[r,i]=(0,d.useState)(`ALL`),[a,o]=(0,d.useState)(null),s=r===`ALL`?void 0:r,c=F((0,d.useCallback)(()=>e.listCategories(),[e]),`categories`),u=Oe((0,d.useCallback)(t=>e.listMyPosts({status:s,cursor:t}),[e,s]),`my-posts|${r}`),p=async t=>{try{let n=await e.submitPost(t.id);u.updateItem(t.id,()=>n),l.message.success(n.status===`APPROVED`?`Bài viết đã được duyệt, chờ phát hành`:`Bài viết đã vào hàng chờ duyệt`)}catch{l.message.error(`Không gửi được bài viết`)}};return(0,f.jsxs)(`div`,{className:`med-feed-my-posts med-feed-stack`,children:[(0,f.jsx)(sg,{title:`Bài của tôi`,description:`Quản lý nháp, bài chờ duyệt và bài đang phát hành của bạn`,extra:n&&(0,f.jsx)(og,{categories:c.data??[],onSaved:e=>{(r===`ALL`||r===e.status)&&u.prependItem(e)}})}),(0,f.jsx)(l.Tabs,{activeKey:r,onChange:e=>i(e),items:cg.map(e=>({key:e.key,label:e.label}))}),(0,f.jsx)(Ym,{list:u,emptyText:`Không có bài viết`,renderFooter:e=>n&&(e.status===`DRAFT`||e.status===`PENDING`)&&(0,f.jsxs)(l.Space,{wrap:!0,className:`med-feed-my-posts__footer-actions`,children:[(0,f.jsx)(l.Button,{className:`med-feed-my-posts__edit`,icon:(0,f.jsx)(m.EditOutlined,{}),onClick:()=>o(e),children:`Sửa`}),e.status===`DRAFT`&&t.canPost&&(0,f.jsx)(l.Button,{className:`med-feed-my-posts__done`,type:`primary`,icon:(0,f.jsx)(m.SendOutlined,{}),onClick:()=>void p(e),children:`Hoàn thành`})]})}),(0,f.jsx)(ag,{open:a!==null,categories:c.data??[],intent:`text`,initialPost:a??void 0,onClose:()=>o(null),onSaved:e=>u.updateItem(e.id,()=>e)},a?.id??`closed`)]})}function ug({value:e,onChange:t,aspectRatio:n=`16 / 9`,maxWidth:r}){let{api:i}=P(),a=(0,d.useRef)(null),[o,s]=(0,d.useState)(!1),[c,u]=(0,d.useState)(!1),p=async e=>{if(e){if(!e.type.startsWith(`image/`)){l.message.error(`Chỉ nhận file ảnh`);return}s(!0);try{let n=await i.uploadMedia(e,e.name);t?.(n.fileUrl)}catch{l.message.error(`Không tải được ảnh`)}finally{s(!1)}}};return(0,f.jsxs)(`div`,{className:c?`med-feed-image-field med-feed-image-field--drag`:`med-feed-image-field`,style:{maxWidth:r},onDragOver:e=>{e.preventDefault(),u(!0)},onDragLeave:()=>u(!1),onDrop:e=>{e.preventDefault(),u(!1),p(e.dataTransfer.files?.[0])},children:[(0,f.jsxs)(`button`,{type:`button`,className:`med-feed-image-field__drop`,style:{aspectRatio:n},disabled:o,onClick:()=>a.current?.click(),children:[e?(0,f.jsx)(`img`,{src:e,alt:`Ảnh đã chọn`,className:`med-feed-image-field__preview`}):(0,f.jsxs)(`span`,{className:`med-feed-image-field__placeholder`,children:[(0,f.jsx)(m.PictureOutlined,{}),(0,f.jsx)(`strong`,{children:`Tải ảnh lên`}),(0,f.jsx)(`span`,{children:`Kéo thả hoặc bấm để chọn ảnh`})]}),e&&(0,f.jsxs)(`span`,{className:`med-feed-image-field__change`,children:[(0,f.jsx)(m.CameraOutlined,{}),` Đổi ảnh`]}),o&&(0,f.jsxs)(`span`,{className:`med-feed-image-field__busy`,children:[(0,f.jsx)(m.LoadingOutlined,{}),` Đang tải...`]})]}),(0,f.jsx)(`input`,{ref:a,type:`file`,accept:`image/*`,hidden:!0,onChange:e=>{p(e.target.files?.[0]),e.target.value=``}})]})}var dg=`DD/MM/YYYY HH:mm`;function fg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.listManageEvents(),[e]),`manage-events`),[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o]=l.Form.useForm(),s=e=>{o.setFieldsValue(e===`new`?{title:``,startsAt:(0,_.default)().add(1,`day`).startOf(`hour`),endsAt:null,location:``,description:``,imageUrl:``}:{title:e.title,startsAt:(0,_.default)(e.startsAt),endsAt:e.endsAt?(0,_.default)(e.endsAt):null,location:e.location??``,description:e.description??``,imageUrl:e.imageUrl}),r(e)},c=async()=>{let i=await o.validateFields(),s={title:i.title.trim(),startsAt:i.startsAt.toISOString(),endsAt:i.endsAt?i.endsAt.toISOString():null,location:i.location.trim()||null,description:i.description.trim()||null,imageUrl:i.imageUrl};a(!0);try{n===`new`?await e.createEvent(s):n&&await e.updateEvent(n.id,s),l.message.success(`Đã lưu sự kiện`),r(null),t.reload()}catch(e){l.message.error(b(e,`FEED_EVENT_INVALID`)?`Thông tin sự kiện không hợp lệ`:`Không lưu được sự kiện`)}finally{a(!1)}},u=async n=>{try{await e.deleteEvent(n.id),l.message.success(`Đã xoá sự kiện`),t.reload()}catch{l.message.error(`Không xoá được sự kiện`)}};return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-events-admin`,children:[(0,f.jsx)(sg,{title:`Sự kiện`,description:`Khung bên phải bảng tin hiện sự kiện mới tạo gần nhất`,extra:(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.PlusOutlined,{}),onClick:()=>s(`new`),children:`Thêm sự kiện`})}),(0,f.jsx)(l.Table,{rowKey:`id`,columns:[{title:`Ảnh`,dataIndex:`imageUrl`,width:90,render:e=>(0,f.jsx)(`img`,{src:e,alt:``,className:`med-feed-events-admin__thumb`})},{title:`Sự kiện`,dataIndex:`title`},{title:`Thời gian`,width:260,render:(e,t)=>nh(t.startsAt,t.endsAt)},{title:`Địa điểm`,dataIndex:`location`,width:180,render:e=>e??``},{title:``,fixed:`right`,width:100,render:(e,t)=>(0,f.jsxs)(l.Space,{size:8,children:[(0,f.jsx)(l.Button,{icon:(0,f.jsx)(m.EditOutlined,{}),"aria-label":`Sửa`,onClick:()=>s(t)}),(0,f.jsx)(l.Popconfirm,{title:`Xoá sự kiện này?`,okText:`Xoá`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>u(t),children:(0,f.jsx)(l.Button,{danger:!0,icon:(0,f.jsx)(m.DeleteOutlined,{}),"aria-label":`Xoá`})})]})}],dataSource:t.data??[],loading:t.loading,pagination:!1,scroll:{x:`max-content`}}),(0,f.jsx)(l.Modal,{open:n!==null,title:(0,f.jsxs)(`div`,{className:`med-feed-events-form__head`,children:[(0,f.jsx)(`strong`,{children:n===`new`?`Thêm sự kiện`:`Sửa sự kiện`}),(0,f.jsx)(`span`,{children:`Hiện ở khung bên phải bảng tin cho mọi người`})]}),okText:n===`new`?`Thêm sự kiện`:`Lưu thay đổi`,cancelText:`Huỷ`,confirmLoading:i,width:560,centered:!0,wrapClassName:`med-feed-portal med-feed-events-form-modal`,maskStyle:{background:`rgba(11, 28, 48, 0.5)`,backdropFilter:`blur(4px)`},onOk:()=>void c(),onCancel:()=>r(null),destroyOnClose:!0,children:(0,f.jsxs)(l.Form,{form:o,layout:`vertical`,preserve:!1,requiredMark:!1,children:[(0,f.jsx)(l.Form.Item,{name:`imageUrl`,label:`Ảnh bìa`,rules:[{required:!0,message:`Cần có ảnh bìa`}],children:(0,f.jsx)(ug,{aspectRatio:`16 / 9`})}),(0,f.jsx)(l.Form.Item,{name:`title`,label:`Tên sự kiện`,rules:[{required:!0,whitespace:!0,message:`Nhập tên sự kiện`}],children:(0,f.jsx)(l.Input,{size:`large`,maxLength:120,placeholder:`Ví dụ: Hội thao Meditech 2026`})}),(0,f.jsxs)(`div`,{className:`med-feed-events-form__row`,children:[(0,f.jsx)(l.Form.Item,{name:`startsAt`,label:`Bắt đầu`,rules:[{required:!0,message:`Chọn giờ bắt đầu`}],children:(0,f.jsx)(l.DatePicker,{size:`large`,showTime:!0,format:dg,style:{width:`100%`}})}),(0,f.jsx)(l.Form.Item,{name:`endsAt`,label:`Kết thúc`,dependencies:[`startsAt`],rules:[({getFieldValue:e})=>({validator:(t,n)=>{let r=e(`startsAt`);return n&&r&&n.isBefore(r)?Promise.reject(Error(`Giờ kết thúc phải sau giờ bắt đầu`)):Promise.resolve()}})],children:(0,f.jsx)(l.DatePicker,{size:`large`,showTime:!0,format:dg,placeholder:`Không bắt buộc`,style:{width:`100%`}})})]}),(0,f.jsx)(l.Form.Item,{name:`location`,label:`Địa điểm`,children:(0,f.jsx)(l.Input,{size:`large`,maxLength:200,placeholder:`Ví dụ: Sân vận động Quân khu 7`})}),(0,f.jsx)(l.Form.Item,{name:`description`,label:`Mô tả ngắn`,children:(0,f.jsx)(l.Input.TextArea,{rows:4,maxLength:2e3,showCount:!0,placeholder:`Giới thiệu nội dung, đối tượng tham gia...`})})]})})]})}var pg=300;function mg({value:e,onChange:t,placeholder:n=`Tất cả tác giả`}){let{api:r}=P(),[i,a]=(0,d.useState)([]),[o,s]=(0,d.useState)(!1),c=(0,d.useRef)();return(0,d.useEffect)(()=>()=>clearTimeout(c.current),[]),(0,f.jsx)(l.Select,{showSearch:!0,allowClear:!0,value:e,placeholder:n,suffixIcon:(0,f.jsx)(m.UserOutlined,{}),filterOption:!1,onSearch:e=>{clearTimeout(c.current),e.trim()&&(s(!0),c.current=setTimeout(()=>{r.searchUsers(e).then(e=>{a(e),s(!1)},()=>s(!1))},pg))},onChange:e=>t(e),notFoundContent:o?(0,f.jsx)(l.Spin,{size:`small`}):`Gõ tên hoặc mã nhân viên`,style:{minWidth:200},className:`med-feed-author-select`,options:i.map(e=>({value:e.id,label:e.departmentName?`${e.fullName} · ${e.departmentName}`:e.fullName}))})}var hg={"7d":`7 ngày gần nhất`,"30d":`30 ngày gần nhất`,"90d":`90 ngày gần nhất`,"this-month":`Tháng này`,"this-year":`Năm nay`};function gg(e){let t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`);return`${e.getFullYear()}-${t}-${n}`}function _g(e){return typeof e==`object`}function vg(e,t=new Date){if(_g(e))return e;let n=e,r=new Date(t);return n===`this-month`?r.setDate(1):n===`this-year`?r.setMonth(0,1):r.setDate(t.getDate()-(Number.parseInt(n,10)-1)),{from:gg(r),to:gg(t)}}var yg=`YYYY-MM-DD`;function bg({value:e,onChange:t}){let n=vg(e),r=(0,d.useMemo)(()=>Object.fromEntries(Object.keys(hg).map(e=>{let{from:t,to:n}=vg(e);return[hg[e],[(0,_.default)(t,yg),(0,_.default)(n,yg)]]})),[]);return(0,f.jsx)(`span`,{className:`med-feed-date-range med-feed-pill-fields`,children:(0,f.jsx)(l.DatePicker.RangePicker,{value:[(0,_.default)(n.from,yg),(0,_.default)(n.to,yg)],format:`DD/MM/YYYY`,allowClear:!1,ranges:r,placeholder:[`Từ ngày`,`Đến ngày`],disabledDate:e=>e.isAfter((0,_.default)(),`day`),onChange:e=>{let[n,r]=e??[];n&&r&&t({from:n.format(yg),to:r.format(yg)})}})})}function xg({post:e,onOpen:t}){let n=new Map(e.mentionedUsers.map(e=>[e.id,e.fullName])),r=e.media.find(e=>e.kind===`IMAGE`);return(0,f.jsxs)(`button`,{type:`button`,className:`med-feed-table-post`,onClick:()=>t(e),children:[r?(0,f.jsx)(`img`,{src:r.fileUrl,alt:``,referrerPolicy:`no-referrer`}):(0,f.jsx)(`span`,{className:`med-feed-table-post__placeholder`,"aria-hidden":!0,children:e.media.length>0?`📎`:`Aa`}),(0,f.jsxs)(`span`,{className:`med-feed-table-post__body`,children:[(0,f.jsx)(l.Typography.Paragraph,{ellipsis:{rows:2},className:`med-feed-table-post__text`,children:xe(e.content,160,n)||(r?`[Hình ảnh]`:`[Tài liệu]`)}),(0,f.jsxs)(`span`,{className:`med-feed-table-post__meta`,children:[Ep(e.createdAt),e.media.length>0&&` · ${e.media.length} tệp đính kèm`]})]})]})}function Sg({post:e,onClose:t,onChanged:n,onRemoved:r,onEdit:i,readOnly:a=!1}){let{api:o}=P(),[s,c]=(0,d.useState)(!1),u=async(e,r)=>{c(!0);try{n(await e()),l.message.success(r),t()}catch{l.message.error(`Thao tác không thành công, bài có thể đã được người khác xử lý`)}finally{c(!1)}},p=e&&(0,f.jsxs)(l.Space,{children:[(0,f.jsx)(Vm,{post:e,labelled:!0,onRemoved:e=>{r(e),t()}}),e.status===`PENDING`&&(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.approvePost(e.id),`Đã duyệt bài, chờ phát hành`),children:`Duyệt`}),e.status===`APPROVED`&&(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.publishPost(e.id),`Đã phát hành bài lên bảng tin`),children:`Phát Hành`}),e.status===`PUBLISHED`&&(e.commentsLocked?(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>o.unlockComments(e.id),`Đã mở bình luận`),children:`Mở bình luận`}):(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>o.lockComments(e.id),`Đã khoá bình luận`),children:`Khoá bình luận`})),e.status===`PUBLISHED`&&(0,f.jsx)(l.Button,{loading:s,onClick:()=>void u(()=>e.pinnedAt?o.unpinPost(e.id):o.pinPost(e.id),e.pinnedAt?`Đã bỏ ghim bài`:`Đã ghim bài lên đầu bảng tin`),children:e.pinnedAt?`Bỏ ghim`:`Ghim lên đầu`}),e.status===`PUBLISHED`&&(0,f.jsx)(l.Button,{danger:!0,loading:s,onClick:()=>void u(()=>o.unpublishPost(e.id),`Đã gỡ bài khỏi bảng tin`),children:`Gỡ bài`}),e.status===`UNPUBLISHED`&&(0,f.jsxs)(f.Fragment,{children:[i&&(0,f.jsx)(l.Button,{disabled:s,onClick:()=>{i(e),t()},children:`Sửa`}),(0,f.jsx)(l.Button,{type:`primary`,loading:s,onClick:()=>void u(()=>o.submitPost(e.id),`Đã gửi duyệt lại`),children:`Gửi duyệt lại`})]})]});return(0,f.jsx)(l.Drawer,{title:`Xem bài viết`,width:720,open:e!==null,onClose:t,extra:a?void 0:p,destroyOnClose:!0,className:`med-feed-portal med-feed-review-drawer`,children:e&&(0,f.jsx)(Jm,{post:e,mode:`preview`})})}var Cg=10,wg=[{key:`PENDING`,label:`Chờ duyệt`,hint:`Cần xử lý`,tone:`pending`},{key:`APPROVED`,label:`Đã duyệt`,hint:`Chờ phát hành`,tone:`approved`},{key:`PUBLISHED`,label:`Đang phát hành`,hint:`Đang hiển thị`,tone:`published`},{key:`UNPUBLISHED`,label:`Đã gỡ`,hint:`Gỡ khỏi bảng tin`,tone:`unpublished`},{key:`DELETED`,label:`Đã xoá`,hint:`Lưu cho báo cáo`,tone:`deleted`},{key:`ALL`,label:`Tất cả`,hint:`Mọi trạng thái`,tone:`all`}];function Tg(){let{api:e}=P(),[t,n]=(0,d.useState)(`30d`),[r,i]=(0,d.useState)(`PENDING`),[a,o]=(0,d.useState)(),[s,c]=(0,d.useState)(``),[u,p]=(0,d.useState)(``),[h,g]=(0,d.useState)(1),[_,v]=(0,d.useState)([]),[y,b]=(0,d.useState)(null),[x,S]=(0,d.useState)(null),[C,w]=(0,d.useState)(null),T=(0,d.useMemo)(()=>vg(t),[t]),E=F((0,d.useCallback)(()=>e.listCategories(),[e]),`categories`),D=F((0,d.useCallback)(()=>e.listManagePosts({...T,status:r===`ALL`?void 0:r,authorId:a,q:s||void 0,page:h,pageSize:Cg}),[e,T,r,a,s,h]),JSON.stringify({range:T,status:r,authorId:a,q:s,page:h})),O=F((0,d.useCallback)(()=>e.getManageCounts(T),[e,T]),JSON.stringify(T)),k=()=>{v([]),D.reload(),O.reload()};(0,d.useEffect)(()=>{let e=u.trim();if(e===s)return;let t=setTimeout(()=>{c(e),g(1),v([])},350);return()=>clearTimeout(t)},[u,s]);let A=e=>t=>{e(t),g(1),v([])},j=async(e,t,n)=>{S(e.id);try{await t(),l.message.success(n),k()}catch{l.message.error(`Thao tác không thành công, bài có thể đã được người khác xử lý`)}finally{S(null)}},ee=async()=>{try{await e.approvePosts(_),l.message.success(`Đã duyệt ${_.length} bài viết, chờ phát hành`),k()}catch{l.message.error(`Không duyệt được các bài đã chọn`)}},M=(e,t,n,r,i=`default`)=>(0,f.jsx)(l.Tooltip,{title:t,children:(0,f.jsx)(l.Button,{size:`small`,icon:n,"aria-label":t,loading:x===e.id&&i!=="default",className:`med-feed-manage__action med-feed-manage__action--${i}`,onClick:r})});return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-manage`,children:[(0,f.jsx)(sg,{title:`Trung tâm duyệt bài viết`,description:`Duyệt, phát hành, gỡ và theo dõi tương tác của mọi bài viết trên bảng tin`,extra:(0,f.jsx)(og,{categories:E.data??[],onSaved:k})}),(0,f.jsxs)(`section`,{className:`med-feed-manage__panel`,children:[(0,f.jsx)(`div`,{className:`med-feed-manage__tabs`,role:`tablist`,"aria-label":`Lọc theo trạng thái`,children:wg.map(e=>{let t=e.key===`ALL`?O.data?O.data.PENDING+O.data.APPROVED+O.data.PUBLISHED+O.data.UNPUBLISHED+O.data.DELETED:void 0:O.data?.[e.key],n=r===e.key;return(0,f.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":n,title:e.hint,className:`med-feed-manage__tab med-feed-manage__tab--${e.tone}${n?` med-feed-manage__tab--active`:``}`,onClick:()=>A(i)(e.key),children:[e.label,(0,f.jsx)(`span`,{className:`med-feed-manage__tab-count`,children:t===void 0?`–`:$(t)})]},e.key)})}),(0,f.jsxs)(`div`,{className:`med-feed-manage__toolbar med-feed-pill-fields`,children:[(0,f.jsx)(l.Input,{allowClear:!0,value:u,prefix:(0,f.jsx)(m.SearchOutlined,{}),placeholder:`Tìm theo nội dung bài viết…`,className:`med-feed-manage__search`,onPressEnter:()=>A(c)(u.trim()),onChange:e=>{p(e.target.value),e.target.value||A(c)(``)}}),(0,f.jsx)(bg,{value:t,onChange:A(n)}),(0,f.jsx)(mg,{value:a,onChange:A(o)}),(s||a||JSON.stringify(T)!==JSON.stringify(vg(`30d`)))&&(0,f.jsx)(l.Button,{type:`link`,icon:(0,f.jsx)(m.CloseCircleOutlined,{}),className:`med-feed-manage__clear`,onClick:()=>{p(``),c(``),o(void 0),n(`30d`),g(1),v([])},children:`Xoá bộ lọc`})]}),_.length>0&&(0,f.jsxs)(`div`,{className:`med-feed-manage__bulk`,children:[(0,f.jsxs)(`span`,{children:[`Đã chọn `,(0,f.jsx)(`strong`,{children:_.length}),` bài chờ duyệt`]}),(0,f.jsxs)(l.Space,{children:[(0,f.jsx)(l.Button,{onClick:()=>v([]),children:`Bỏ chọn`}),(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.CheckOutlined,{}),onClick:()=>void ee(),children:`Duyệt hàng loạt`})]})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`id`,columns:[{title:`Bài viết`,key:`content`,render:(e,t)=>(0,f.jsx)(xg,{post:t,onOpen:b})},{title:`Tác giả`,key:`author`,width:220,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-author`,children:[(0,f.jsx)(Gf,{user:t.author,size:32}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(`strong`,{children:t.author.fullName}),t.author.departmentName&&(0,f.jsx)(`span`,{children:t.author.departmentName})]})]})},{title:`Trạng thái`,key:`status`,width:130,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-status`,children:[(0,f.jsx)(Wm,{status:t.status}),t.pinnedAt&&t.status===`PUBLISHED`&&(0,f.jsx)(Um,{})]})},{title:`Ngày tạo`,key:`createdAt`,width:150,render:(e,t)=>(0,f.jsx)(`span`,{className:`med-feed-table-date`,children:Ep(t.createdAt)})},{title:`Tương tác`,key:`engagement`,width:220,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-engagement`,children:[(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.LikeOutlined,{}),` `,$(t.reactionCount)]}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.CommentOutlined,{}),` `,$(t.commentCount)]}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(m.ShareAltOutlined,{}),` `,$(t.shareCount)]})]})},{title:`Thao tác`,key:`actions`,fixed:`right`,width:180,align:`right`,render:(t,n)=>(0,f.jsxs)(l.Space,{size:6,children:[n.status===`PENDING`&&M(n,`Duyệt`,(0,f.jsx)(m.CheckOutlined,{}),()=>void j(n,()=>e.approvePost(n.id),`Đã duyệt bài, chờ phát hành`),`primary`),n.status===`APPROVED`&&M(n,`Phát Hành`,(0,f.jsx)(m.CloudUploadOutlined,{}),()=>void j(n,()=>e.publishPost(n.id),`Đã phát hành bài lên bảng tin`),`primary`),n.status===`PUBLISHED`&&M(n,n.pinnedAt?`Bỏ ghim`:`Ghim lên đầu`,n.pinnedAt?(0,f.jsx)(m.PushpinFilled,{}):(0,f.jsx)(m.PushpinOutlined,{}),()=>void j(n,()=>n.pinnedAt?e.unpinPost(n.id):e.pinPost(n.id),n.pinnedAt?`Đã bỏ ghim bài`:`Đã ghim bài lên đầu bảng tin`)),n.status===`PUBLISHED`&&M(n,`Gỡ bài`,(0,f.jsx)(m.EyeInvisibleOutlined,{}),()=>void j(n,()=>e.unpublishPost(n.id),`Đã gỡ bài khỏi bảng tin`),`danger`),n.status===`UNPUBLISHED`&&(0,f.jsxs)(f.Fragment,{children:[M(n,`Sửa bài`,(0,f.jsx)(m.EditOutlined,{}),()=>w(n)),M(n,`Gửi duyệt lại`,(0,f.jsx)(m.SendOutlined,{}),()=>void j(n,()=>e.submitPost(n.id),`Đã gửi duyệt lại`),`primary`),M(n,`Xoá bài`,(0,f.jsx)(m.DeleteOutlined,{}),()=>Rm(()=>j(n,()=>e.deletePost(n.id),`Đã xoá bài viết`)))]}),M(n,`Xem chi tiết`,(0,f.jsx)(m.EyeOutlined,{}),()=>b(n))]})}],dataSource:D.data?.items??[],loading:D.loading,rowSelection:{selectedRowKeys:_,onChange:e=>v(e),getCheckboxProps:e=>({disabled:e.status!==`PENDING`})},locale:{emptyText:D.error?`Không tải được danh sách bài`:`Không có bài viết nào`},scroll:{x:1040},pagination:{current:h,pageSize:Cg,total:D.data?.total??0,showSizeChanger:!1,showTotal:(e,[t,n])=>`Hiển thị ${t}–${n} trong ${$(e)} bài viết`,onChange:e=>{g(e),v([])}}})]}),(0,f.jsx)(Sg,{post:y,onClose:()=>b(null),onChanged:k,onRemoved:k,onEdit:w}),(0,f.jsx)(ag,{open:C!==null,categories:E.data??[],intent:`text`,initialPost:C??void 0,onClose:()=>w(null),onSaved:k},C?.id??`closed`)]})}var Eg=/^https?:\/\/\S+$/;function Dg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.getRightBanner(),[e]),`banner-settings`),[n]=l.Form.useForm(),[r,i]=(0,d.useState)(!1),a=t.data?.imageUrl?t.data:null;(0,d.useEffect)(()=>{t.data&&n.setFieldsValue({imageUrl:t.data.imageUrl??``,linkUrl:t.data.linkUrl??``})},[t.data,n]);let o=async()=>{let r=await n.validateFields();i(!0);try{await e.setRightBanner({imageUrl:r.imageUrl,linkUrl:r.linkUrl.trim()||null}),l.message.success(`Đã lưu banner`),t.reload()}catch{l.message.error(`Không lưu được banner`)}finally{i(!1)}},s=async()=>{try{await e.clearRightBanner(),n.setFieldsValue({imageUrl:``,linkUrl:``}),l.message.success(`Đã gỡ banner`),t.reload()}catch{l.message.error(`Không gỡ được banner`)}};return(0,f.jsxs)(`div`,{className:`med-feed-banner-settings`,children:[(0,f.jsx)(sg,{title:`Banner bên phải`,description:`Ảnh quảng cáo hiện dưới khung sự kiện ở cột phải bảng tin`}),(0,f.jsx)(`section`,{className:`med-feed-banner-settings__panel`,children:(0,f.jsxs)(l.Form,{form:n,layout:`vertical`,requiredMark:!1,children:[(0,f.jsx)(l.Form.Item,{name:`imageUrl`,label:`Ảnh banner`,extra:`Nên dùng ảnh dọc; ảnh hiện rộng đúng bằng cột phải và giữ nguyên tỉ lệ.`,rules:[{required:!0,message:`Cần chọn ảnh banner`}],children:(0,f.jsx)(ug,{aspectRatio:`4 / 7`,maxWidth:280})}),(0,f.jsx)(l.Form.Item,{name:`linkUrl`,label:`Đường dẫn khi bấm vào (không bắt buộc)`,rules:[{pattern:Eg,message:`Đường dẫn phải bắt đầu bằng http:// hoặc https://`}],children:(0,f.jsx)(l.Input,{size:`large`,maxLength:2048,placeholder:`https://...`})}),(0,f.jsxs)(`div`,{className:`med-feed-banner-settings__actions`,children:[(0,f.jsx)(l.Button,{type:`primary`,loading:r,onClick:()=>void o(),children:`Lưu banner`}),a&&(0,f.jsx)(l.Popconfirm,{title:`Gỡ banner này?`,okText:`Gỡ`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>s(),children:(0,f.jsx)(l.Button,{danger:!0,icon:(0,f.jsx)(m.DeleteOutlined,{}),children:`Gỡ banner`})})]})]})})]})}var Og=`#2ea053`;function kg(){let{api:e}=P(),t=F((0,d.useCallback)(()=>e.listManageCategories(),[e]),`manage-categories`),[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[o]=l.Form.useForm(),s=l.Form.useWatch(`color`,o),c=l.Form.useWatch(`name`,o),u=n===`new`||!n?null:n.id,p=s?(t.data??[]).find(e=>e.id!==u&&e.color?.toLowerCase()===s.toLowerCase()):void 0,h=e=>{let n=(t.data??[]).reduce((e,t)=>Math.max(e,t.sortOrder+1),0);o.setFieldsValue(e===`new`?{name:``,color:Og,sortOrder:n,hidden:!1}:{name:e.name,color:e.color??Og,sortOrder:e.sortOrder,hidden:e.hidden}),r(e)},g=async()=>{let i=await o.validateFields(),s={...i,name:i.name.trim()};a(!0);try{n===`new`?await e.createCategory(s):n&&await e.updateCategory(n.id,s),l.message.success(`Đã lưu chuyên mục`),r(null),t.reload()}catch(e){l.message.error(b(e,`FEED_CATEGORY_INVALID`)?`Tên chuyên mục đã tồn tại hoặc không hợp lệ`:`Không lưu được chuyên mục`)}finally{a(!1)}},_=async n=>{try{await e.deleteCategory(n.id),l.message.success(`Đã xoá chuyên mục`),t.reload()}catch(e){l.message.error(b(e,`FEED_CATEGORY_IN_USE`)?`Chuyên mục đã có bài viết, hãy ẩn thay vì xoá`:`Không xoá được chuyên mục`)}},v=async(n,r)=>{try{await e.updateCategory(n.id,{hidden:r}),t.reload()}catch{l.message.error(`Không cập nhật được chuyên mục`)}};return(0,f.jsxs)(`div`,{className:`med-feed-categories`,children:[(0,f.jsx)(sg,{title:`Thiết lập chuyên mục`,description:`Tạo, sửa, ẩn hoặc xoá các chuyên mục của bảng tin`,extra:(0,f.jsx)(l.Button,{type:`primary`,icon:(0,f.jsx)(m.PlusOutlined,{}),onClick:()=>h(`new`),children:`Thêm chuyên mục`})}),(0,f.jsxs)(`section`,{className:`med-feed-categories__panel`,children:[(0,f.jsxs)(`div`,{className:`med-feed-categories__head`,children:[(0,f.jsx)(`h3`,{className:`med-feed-categories__title`,children:t.data?`${t.data.length} chuyên mục`:`Chuyên mục`}),(0,f.jsx)(`span`,{className:`med-feed-categories__hint`,children:`Chuyên mục bị ẩn không hiện ở bảng tin nhưng bài cũ vẫn giữ nhãn`})]}),(0,f.jsx)(l.Table,{className:`med-feed-categories-table`,rowKey:`id`,columns:[{title:`Chuyên mục`,dataIndex:`name`,render:(e,t)=>(0,f.jsx)(Ag,{name:e,color:t.color})},{title:`Thứ tự`,dataIndex:`sortOrder`,width:90},{title:`Số bài`,dataIndex:`postCount`,width:90,render:e=>(0,f.jsx)(`span`,{className:`med-feed-categories__count`,children:e})},{title:`Hiển thị`,width:100,render:(e,t)=>(0,f.jsx)(l.Switch,{size:`small`,checked:!t.hidden,onChange:e=>void v(t,!e),"aria-label":`Hiển thị ${t.name}`})},{title:``,fixed:`right`,width:100,render:(e,t)=>(0,f.jsxs)(l.Space,{size:8,children:[(0,f.jsx)(l.Button,{className:`med-feed-categories__action`,icon:(0,f.jsx)(m.EditOutlined,{}),"aria-label":`Sửa`,onClick:()=>h(t)}),(0,f.jsx)(l.Popconfirm,{title:`Xoá chuyên mục này?`,okText:`Xoá`,cancelText:`Huỷ`,okButtonProps:{danger:!0},onConfirm:()=>_(t),children:(0,f.jsx)(l.Button,{className:`med-feed-categories__action med-feed-categories__action--danger`,icon:(0,f.jsx)(m.DeleteOutlined,{}),"aria-label":`Xoá`})})]})}],dataSource:t.data??[],loading:t.loading,pagination:!1,scroll:{x:`max-content`},rowClassName:e=>e.hidden?`med-feed-categories__row--hidden`:``})]}),(0,f.jsx)(l.Modal,{open:n!==null,title:n===`new`?`Thêm chuyên mục`:`Sửa chuyên mục`,okText:`Lưu`,cancelText:`Huỷ`,confirmLoading:i,onOk:()=>void g(),onCancel:()=>r(null),destroyOnClose:!0,children:(0,f.jsxs)(l.Form,{form:o,layout:`vertical`,preserve:!1,children:[(0,f.jsxs)(`div`,{className:`med-feed-category-preview`,children:[`Xem trước`,(0,f.jsx)(Ag,{name:c?.trim()||`Tên chuyên mục`,color:s})]}),(0,f.jsx)(l.Form.Item,{name:`name`,label:`Tên chuyên mục`,rules:[{required:!0,whitespace:!0,message:`Nhập tên chuyên mục`}],children:(0,f.jsx)(l.Input,{maxLength:60})}),(0,f.jsx)(l.Form.Item,{name:`color`,label:`Màu`,rules:[{pattern:/^#[0-9a-fA-F]{6}$/,message:`Màu dạng #rrggbb`}],validateStatus:p?`warning`:void 0,help:p?`Màu này đã dùng cho "${p.name}"`:void 0,children:(0,f.jsx)(jg,{})}),(0,f.jsx)(l.Form.Item,{name:`sortOrder`,label:`Thứ tự hiển thị`,children:(0,f.jsx)(l.InputNumber,{precision:0,style:{width:`100%`}})}),(0,f.jsx)(l.Form.Item,{name:`hidden`,label:`Ẩn khỏi bảng tin`,valuePropName:`checked`,children:(0,f.jsx)(l.Switch,{})})]})})]})}function Ag({name:e,color:t}){return(0,f.jsxs)(`span`,{className:`med-feed-category-chip`,style:t?{"--tone":t}:void 0,children:[(0,f.jsx)(`span`,{className:`med-feed-category-chip__dot`,"aria-hidden":!0}),(0,f.jsx)(`span`,{className:`med-feed-category-chip__name`,children:e})]})}function jg({value:e,onChange:t}){let n=/^#[0-9a-fA-F]{6}$/.test(e??``);return(0,f.jsxs)(`div`,{className:`med-feed-category-color`,children:[(0,f.jsx)(`input`,{type:`color`,"aria-label":`Chọn màu`,value:n?e:Og,onChange:e=>t?.(e.target.value)}),(0,f.jsx)(l.Input,{maxLength:7,placeholder:`#2ea053`,value:e,onChange:e=>t?.(e.target.value)})]})}function Mg(){let{basePath:e}=P(),t=`${e.replace(/\/+$/,``)}/settings`,n=[{to:`${t}/categories`,label:`Thiết lập chuyên mục`},{to:`${t}/banner`,label:`Banner`}];return(0,f.jsxs)(`div`,{className:`med-feed-wide med-feed-settings`,children:[(0,f.jsx)(`nav`,{className:`med-feed-settings__tabs`,"aria-label":`Cấu hình`,children:n.map(e=>(0,f.jsx)(p.NavLink,{to:e.to,className:({isActive:e})=>e?`med-feed-settings__tab med-feed-settings__tab--active`:`med-feed-settings__tab`,children:e.label},e.to))}),(0,f.jsxs)(p.Routes,{children:[(0,f.jsx)(p.Route,{index:!0,element:(0,f.jsx)(p.Navigate,{to:`categories`,replace:!0})}),(0,f.jsx)(p.Route,{path:`categories`,element:(0,f.jsx)(kg,{})}),(0,f.jsx)(p.Route,{path:`banner`,element:(0,f.jsx)(Dg,{})})]})]})}var Ng={ZALO:`Zalo`,FACEBOOK:`Facebook`,CHAT:`Chat`,LINK:`Liên kết`};function Pg({title:e,value:t,icon:n,tone:r,detail:i,loading:a}){return(0,f.jsxs)(`div`,{className:`med-feed-kpi med-feed-kpi--${r}`,children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__icon`,"aria-hidden":!0,children:n}),(0,f.jsxs)(`div`,{className:`med-feed-kpi__body`,children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__title`,children:e}),a?(0,f.jsx)(l.Skeleton.Input,{active:!0,size:`small`,className:`med-feed-kpi__skeleton`}):(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`span`,{className:`med-feed-kpi__value`,children:$(t??0)}),i&&(0,f.jsx)(`span`,{className:`med-feed-kpi__detail`,children:i})]})]})]})}function Fg({overview:e,loading:t}){let n=Se.filter(t=>(e?.reactionsByType[t]??0)>0),r=e?.postsByStatus??{},i=[`ZALO`,`FACEBOOK`,`CHAT`,`LINK`].filter(t=>(e?.sharesByChannel?.[t]??0)>0);return(0,f.jsxs)(`div`,{className:`med-feed-kpis`,children:[(0,f.jsx)(Pg,{title:`Bài viết`,tone:`posts`,value:e?.postCount,icon:(0,f.jsx)(m.FileTextOutlined,{}),loading:t,detail:`${$(r.PUBLISHED??0)} đang phát hành · ${$(r.UNPUBLISHED??0)} đã gỡ · ${$(r.PENDING??0)} chờ duyệt`}),(0,f.jsx)(Pg,{title:`Reaction`,tone:`reactions`,value:e?.reactionTotal,icon:(0,f.jsx)(m.LikeFilled,{}),loading:t,detail:n.length>0?n.map(t=>`${bm[t].label} ${$(e?.reactionsByType[t]??0)}`).join(` · `):`Chưa có cảm xúc nào`}),(0,f.jsx)(Pg,{title:`Bình luận`,tone:`comments`,value:e?.commentCount,icon:(0,f.jsx)(m.CommentOutlined,{}),loading:t,detail:`${$(e?.rootCommentCount??0)} bình luận · ${$(e?.replyCount??0)} trả lời`}),(0,f.jsx)(Pg,{title:`Chia sẻ`,tone:`shares`,value:e?.shareTotal,icon:(0,f.jsx)(m.ShareAltOutlined,{}),loading:t,detail:i.length>0?i.map(t=>`${Ng[t]} ${$(e?.sharesByChannel?.[t]??0)}`).join(` · `):`Chưa có lượt chia sẻ`})]})}var Ig=[{value:`day`,label:`Ngày`},{value:`week`,label:`Tuần`},{value:`month`,label:`Tháng`}];function Lg(e){let t=String(e.getMonth()+1).padStart(2,`0`);return`${e.getFullYear()}-${t}-${String(e.getDate()).padStart(2,`0`)}`}function Rg(e,t=new Date){let n=new Date(t);return e===`week`&&n.setDate(t.getDate()-(t.getDay()+6)%7),e===`month`&&n.setDate(1),{from:Lg(n),to:Lg(t)}}function zg({value:e,onChange:t}){let n=vg(e),r=Ig.find(({value:e})=>{let t=Rg(e);return t.from===n.from&&t.to===n.to})?.value;return(0,f.jsx)(l.Radio.Group,{className:`med-feed-segmented`,optionType:`button`,options:Ig,value:r,onChange:e=>t(Rg(e.target.value))})}var Bg=10,Vg=[{value:`total`,label:`Tổng tương tác`},{value:`reactions`,label:`Reaction`},{value:`comments`,label:`Bình luận`}];function Hg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)(`total`),[i,a]=(0,d.useState)({from:e.from,to:e.to}),[o,s]=(0,d.useState)(``),[c,u]=(0,d.useState)(``),[p,h]=(0,d.useState)(null),g=(0,d.useMemo)(()=>({...e,...vg(i),...c?{q:c}:{}}),[e,i,c]),_=F((0,d.useCallback)(()=>t.getTopPosts({...g,sortBy:n,limit:Bg}),[t,g,n]),`${JSON.stringify(g)}|${n}`);return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`med-feed-report-toolbar med-feed-pill-fields`,children:[(0,f.jsx)(l.Input,{allowClear:!0,value:o,prefix:(0,f.jsx)(m.SearchOutlined,{}),placeholder:`Tìm theo nội dung bài viết… (Enter để tìm)`,className:`med-feed-report-toolbar__search`,onPressEnter:()=>u(o.trim()),onChange:e=>{s(e.target.value),e.target.value||u(``)}}),(0,f.jsx)(zg,{value:i,onChange:a}),(0,f.jsx)(bg,{value:i,onChange:a}),(0,f.jsx)(l.Select,{value:n,onChange:r,options:Vg,style:{minWidth:170},"aria-label":`Xếp theo`})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`id`,pagination:!1,loading:_.loading,dataSource:_.data??[],locale:{emptyText:_.error?`Không tải được danh sách`:c?`Không có bài nào khớp`:`Chưa có bài trong khoảng này`},scroll:{x:900},columns:[{title:`#`,key:`rank`,width:56,render:(e,t,n)=>(0,f.jsx)(`span`,{className:n<3?`med-feed-top-rank med-feed-top-rank--top`:`med-feed-top-rank`,children:n+1})},{title:`Bài viết`,key:`post`,render:(e,t)=>(0,f.jsx)(xg,{post:t,onOpen:h})},{title:`Tương tác`,key:`engagement`,width:280,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-table-engagement`,children:[(0,f.jsxs)(`span`,{title:`Reaction`,children:[(0,f.jsx)(m.LikeOutlined,{}),` `,$(t.reactionCount)]}),(0,f.jsxs)(`span`,{title:`Bình luận`,children:[(0,f.jsx)(m.CommentOutlined,{}),` `,$(t.commentCount)]}),(0,f.jsxs)(`span`,{title:`Chia sẻ`,children:[(0,f.jsx)(m.ShareAltOutlined,{}),` `,$(t.shareCount)]})]})},{title:`Tổng tương tác`,key:`total`,width:130,align:`right`,render:(e,t)=>(0,f.jsx)(`strong`,{children:$(t.reactionCount+t.commentCount+t.shareCount)})},{title:``,key:`actions`,fixed:`right`,width:64,align:`right`,render:(e,t)=>(0,f.jsx)(l.Tooltip,{title:`Xem chi tiết`,children:(0,f.jsx)(l.Button,{size:`small`,icon:(0,f.jsx)(m.EyeOutlined,{}),"aria-label":`Xem chi tiết`,className:`med-feed-manage__action`,onClick:()=>h(t)})})}]}),(0,f.jsx)(Sg,{post:p,onClose:()=>h(null),onChanged:()=>_.reload(),onRemoved:()=>_.reload(),readOnly:!0})]})}var Ug=10;function Wg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)({from:e.from,to:e.to}),[i,a]=(0,d.useState)(),[o,s]=(0,d.useState)(null),c=(0,d.useMemo)(()=>({...e,...vg(n),...i?{userId:i}:{}}),[e,n,i]),u=F((0,d.useCallback)(()=>t.getTopUsers({...c,limit:Ug}),[t,c]),JSON.stringify(c));return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`med-feed-report-toolbar med-feed-pill-fields`,children:[(0,f.jsx)(mg,{value:i,onChange:a,placeholder:`Tất cả nhân viên`}),(0,f.jsx)(zg,{value:n,onChange:r}),(0,f.jsx)(bg,{value:n,onChange:r})]}),(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:e=>e.user.id,pagination:!1,loading:u.loading,dataSource:u.data??[],locale:{emptyText:u.error?`Không tải được số liệu`:`Chưa có hoạt động`},scroll:{x:1200},columns:[{title:`#`,key:`rank`,width:56,render:(e,t,n)=>(0,f.jsx)(`span`,{className:!i&&n<3?`med-feed-top-rank med-feed-top-rank--top`:`med-feed-top-rank`,children:n+1})},{title:`Nhân viên`,key:`user`,width:240,render:(e,t)=>(0,f.jsxs)(`span`,{className:`med-feed-report-person`,children:[(0,f.jsx)(Gf,{user:t.user,size:32}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(`strong`,{children:t.user.fullName}),t.user.departmentName&&(0,f.jsx)(`span`,{children:t.user.departmentName})]})]})},{title:`Bài tương tác nhiều nhất`,key:`topPost`,render:(e,t)=>t.topPost?(0,f.jsx)(xg,{post:t.topPost.post,onOpen:s}):(0,f.jsx)(`span`,{className:`med-feed-report-muted`,children:`—`})},{title:`Reaction`,dataIndex:`reactions`,width:100,align:`right`,render:$},{title:`Bình luận`,dataIndex:`comments`,width:100,align:`right`,render:$},{title:`Chia sẻ`,dataIndex:`shares`,width:90,align:`right`,render:$},{title:`Tổng tương tác`,dataIndex:`total`,width:130,align:`right`,render:e=>(0,f.jsx)(`strong`,{children:$(e)})}]}),(0,f.jsx)(Sg,{post:o,onClose:()=>s(null),onChanged:()=>u.reload(),onRemoved:()=>u.reload(),readOnly:!0})]})}var Gg=[`#7c3aed`,`#2563eb`,`#0d9488`],Kg=[{label:`Ngày`,value:`day`},{label:`Tuần`,value:`week`},{label:`Tháng`,value:`month`}];function qg(e,t){let[n,r,i]=e.slice(0,10).split(`-`);return t===`month`?`${r}/${n}`:t===`week`?`Tuần ${i}/${r}`:`${i}/${r}`}function Jg({range:e}){let{api:t}=P(),[n,r]=(0,d.useState)(`day`),[i,a]=(0,d.useState)({from:e.from,to:e.to}),o=(0,d.useMemo)(()=>({...e,...vg(i)}),[e,i]),[s,c]=(0,d.useState)(!1),u=F((0,d.useCallback)(()=>t.getReportsTimeseries({...o,groupBy:n}),[t,o,n]),`${JSON.stringify(o)}|${n}`),p=u.data??[],m=p.map(e=>qg(e.bucket,n)),h={chart:{type:`line`,toolbar:{show:!1},zoom:{enabled:!1},fontFamily:`inherit`},colors:Gg,stroke:{width:2,curve:`smooth`},markers:{size:0,hover:{size:5},strokeColors:`#ffffff`,strokeWidth:2},dataLabels:{enabled:!1},legend:{position:`top`,horizontalAlign:`right`,fontSize:`13px`},grid:{borderColor:`#eef0f4`,strokeDashArray:4},xaxis:{categories:m,tickAmount:Math.min(m.length,10),labels:{style:{colors:`#65676b`}},axisBorder:{show:!1},crosshairs:{show:!0}},yaxis:{min:0,forceNiceScale:!0,labels:{formatter:e=>$(Math.round(e))}},tooltip:{shared:!0,intersect:!1,y:{formatter:e=>$(e)}}};return(0,f.jsx)(l.Card,{bordered:!1,className:`med-feed-report-panel`,title:`Xu hướng tương tác`,extra:(0,f.jsxs)(l.Space,{wrap:!0,children:[(0,f.jsx)(bg,{value:i,onChange:a}),(0,f.jsx)(l.Radio.Group,{size:`small`,className:`med-feed-segmented`,optionType:`button`,options:Kg,value:n,onChange:e=>r(e.target.value)}),(0,f.jsx)(l.Button,{size:`small`,type:`text`,onClick:()=>c(!s),children:s?`Biểu đồ`:`Bảng số liệu`})]}),children:u.loading?(0,f.jsx)(l.Skeleton,{active:!0,paragraph:{rows:6}}):p.length===0?(0,f.jsx)(l.Empty,{description:u.error?`Không tải được số liệu`:`Chưa có tương tác trong khoảng này`}):s?(0,f.jsx)(l.Table,{className:`med-feed-manage-table`,rowKey:`bucket`,size:`small`,pagination:!1,scroll:{y:320},dataSource:p,columns:[{title:`Thời gian`,key:`bucket`,render:(e,t)=>qg(t.bucket,n)},{title:`Reaction`,dataIndex:`reactions`,align:`right`,render:$},{title:`Bình luận`,dataIndex:`comments`,align:`right`,render:$}]}):(0,f.jsx)(v.default,{type:`line`,height:320,options:h,series:[{name:`Reaction`,data:p.map(e=>e.reactions)},{name:`Bình luận`,data:p.map(e=>e.comments)}]})})}function Yg(){let{api:e}=P(),[t,n]=(0,d.useState)(`30d`),r=(0,d.useMemo)(()=>vg(t),[t]),i=F((0,d.useCallback)(()=>e.getReportsOverview(r),[e,r]),JSON.stringify(r));return(0,f.jsxs)(`div`,{className:`med-feed-wide`,children:[(0,f.jsx)(sg,{title:`Thống kê & báo cáo`,description:`Tương tác trên bảng tin nội bộ theo khoảng thời gian`,extra:(0,f.jsx)(bg,{value:t,onChange:n})}),(0,f.jsxs)(`div`,{className:`med-feed-stack`,children:[(0,f.jsx)(Fg,{overview:i.data,loading:i.loading}),(0,f.jsx)(Jg,{range:r},JSON.stringify(r)),(0,f.jsx)(l.Card,{bordered:!1,className:`med-feed-report-panel med-feed-report-tabs`,children:(0,f.jsx)(l.Tabs,{items:[{key:`posts`,label:`Bài có tương tác cao`,children:(0,f.jsx)(Hg,{range:r},JSON.stringify(r))},{key:`people`,label:`Người tương tác nhiều nhất`,children:(0,f.jsx)(Wg,{range:r},JSON.stringify(r))}]})})]})]})}function Xg(){let{me:e,basePath:t}=P(),n=t.replace(/\/+$/,``),r=[...e.canManage?[{to:n||`/`,label:`Duyệt bài viết`,icon:(0,f.jsx)(m.FileDoneOutlined,{}),end:!0}]:[],...e.canPost?[{to:`${n}/my-posts`,label:`Bài của tôi`,icon:(0,f.jsx)(m.ProfileOutlined,{})}]:[],...e.canManage?[{to:`${n}/reports`,label:`Thống kê & Báo cáo`,icon:(0,f.jsx)(m.BarChartOutlined,{})},{to:`${n}/events`,label:`Sự kiện`,icon:(0,f.jsx)(m.CalendarOutlined,{})},{to:`${n}/settings`,label:`Cấu hình`,icon:(0,f.jsx)(m.SettingOutlined,{})}]:[]];return r.length===0?(0,f.jsx)(`div`,{className:`med-feed-content`,children:(0,f.jsx)(l.Result,{status:`403`,title:`Bạn không có quyền quản lý bảng tin`})}):(0,f.jsxs)(`div`,{className:`med-feed-admin`,children:[(0,f.jsxs)(`aside`,{className:`med-feed-admin__sidebar`,children:[(0,f.jsxs)(`div`,{className:`med-feed-admin__brand`,children:[(0,f.jsx)(`span`,{className:`med-feed-admin__logo`,"aria-hidden":!0,children:`N`}),(0,f.jsxs)(`span`,{className:`med-feed-admin__brand-text`,children:[(0,f.jsx)(`strong`,{children:`Quản trị bảng tin`}),(0,f.jsx)(`span`,{children:`Bảng tin nội bộ`})]})]}),(0,f.jsx)(`div`,{className:`med-feed-admin__section`,children:`Điều hướng`}),(0,f.jsx)(`nav`,{className:`med-feed-admin__nav`,"aria-label":`Quản trị bảng tin`,children:r.map(e=>(0,f.jsxs)(p.NavLink,{to:e.to,end:e.end,className:({isActive:e})=>e?`med-feed-admin__nav-item med-feed-admin__nav-item--active`:`med-feed-admin__nav-item`,children:[(0,f.jsx)(`span`,{className:`med-feed-admin__nav-icon`,children:e.icon}),e.label]},e.to))})]}),(0,f.jsx)(`main`,{className:`med-feed-admin__main`,children:(0,f.jsxs)(p.Routes,{children:[(0,f.jsx)(p.Route,{index:!0,element:e.canManage?(0,f.jsx)(Tg,{}):(0,f.jsx)(p.Navigate,{to:`${n}/my-posts`,replace:!0})}),(0,f.jsx)(p.Route,{path:`my-posts`,element:(0,f.jsx)(Zg,{allowed:e.canPost,page:(0,f.jsx)(lg,{})})}),(0,f.jsx)(p.Route,{path:`reports`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(Yg,{})})}),(0,f.jsx)(p.Route,{path:`events`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(fg,{})})}),(0,f.jsx)(p.Route,{path:`settings/*`,element:(0,f.jsx)(Zg,{allowed:e.canManage,page:(0,f.jsx)(Mg,{})})}),(0,f.jsx)(p.Route,{path:`posts/:postId`,element:(0,f.jsx)(bh,{})}),(0,f.jsx)(p.Route,{path:`*`,element:(0,f.jsx)(l.Result,{status:`404`,title:`Không tìm thấy trang`})})]})})]})}function Zg({allowed:e,page:t}){return e?(0,f.jsx)(f.Fragment,{children:t}):(0,f.jsx)(l.Result,{status:`403`,title:`Bạn không có quyền truy cập trang này`})}function Qg(e){return(0,f.jsx)(Ee,{runtimeProps:{...e,isPostFeed:!0},isAdmin:!0,children:(0,f.jsx)(Xg,{})})}exports.NewsfeedAdminModule=Qg,exports.NewsfeedModule=Sh;
|
package/dist/index.js
CHANGED
|
@@ -10129,7 +10129,7 @@ var vv = ue(function({ categories: e = [], initialPost: t, intent: n = "text", o
|
|
|
10129
10129
|
onKeyUp: be,
|
|
10130
10130
|
onMouseUp: be,
|
|
10131
10131
|
onKeyDown: De,
|
|
10132
|
-
placeholder: "
|
|
10132
|
+
placeholder: "Tạo bài viết mới...",
|
|
10133
10133
|
autoSize: a || o ? {
|
|
10134
10134
|
minRows: 12,
|
|
10135
10135
|
maxRows: 30
|