PageSourceSearch

https://zamala.ai/_next/static/chunks/pages/admin/blog-5da74871be572ebf.js

js zamala.ai collected 2026-10-05 13:23:51 UTC 33,108 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7394],{36948:function(e,t,n){"use strict";n.d(t,{qk:function(){return i},vh:function(){return r},yJ:function(){return a}});var a=6e4,r=36e5,i=1e3},23855:function(e,t,n){"use strict";n.d(t,{Z:function(){return parseISO}});var a=n(36948),r=n(13882),i=n(83946);function parseISO(e,t){(0,r.Z)(1,arguments);var n,u,m,g=(0,i.Z)(null!==(n=null==t?void 0:t.additionalDigits)&&void 0!==n?n:2);if(2!==g&&1!==g&&0!==g)throw RangeError("additionalDigits must be 0, 1 or 2");if(!("string"==typeof e||"[object String]"===Object.prototype.toString.call(e)))return new Date(NaN);var x=function(e){var t,n={},a=e.split(l.dateTimeDelimiter);if(a.length>2)return n;if(/:/.test(a[0])?t=a[0]:(n.date=a[0],t=a[1],l.timeZoneDelimiter.test(n.date)&&(n.date=e.split(l.timeZoneDelimiter)[0],t=e.substr(n.date.length,e.length))),t){var r=l.timezone.exec(t);r?(n.time=t.replace(r[1],""),n.timezone=r[1]):n.time=t}return n}(e);if(x.date){var p=function(e,t){var n=RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),a=e.match(n);if(!a)return{year:NaN,restDateString:""};var r=a[1]?parseInt(a[1]):null,i=a[2]?parseInt(a[2]):null;return{year:null===i?r:100*i,restDateString:e.slice((a[1]||a[2]).length)}}(x.date,g);u=function(e,t){if(null===t)return new Date(NaN);var n,a,r=e.match(s);if(!r)return new Date(NaN);var i=!!r[4],l=parseDateUnit(r[1]),o=parseDateUnit(r[2])-1,d=parseDateUnit(r[3]),u=parseDateUnit(r[4]),m=parseDateUnit(r[5])-1;if(i)return u>=1&&u<=53&&m>=0&&m<=6?((n=new Date(0)).setUTCFullYear(t,0,4),a=n.getUTCDay()||7,n.setUTCDate(n.getUTCDate()+((u-1)*7+m+1-a)),n):new Date(NaN);var g=new Date(0);return o>=0&&o<=11&&d>=1&&d<=(c[o]||(isLeapYearIndex(t)?29:28))&&l>=1&&l<=(isLeapYearIndex(t)?366:365)?(g.setUTCFullYear(t,o,Math.max(l,d)),g):new Date(NaN)}(p.restDateString,p.year)}if(!u||isNaN(u.getTime()))return new Date(NaN);var b=u.getTime(),h=0;if(x.time&&isNaN(h=function(e){var t=e.match(o);if(!t)return NaN;var n=parseTimeUnit(t[1]),r=parseTimeUnit(t[2]),i=parseTimeUnit(t[3]);return(24===n?0===r&&0===i:i>=0&&i<60&&r>=0&&r<60&&n>=0&&n<25)?n*a.vh+r*a.yJ+1e3*i:NaN}(x.time)))return new Date(NaN);if(x.timezone){if(isNaN(m=function(e){if("Z"===e)return 0;var t=e.match(d);if(!t)return 0;var n="+"===t[1]?-1:1,r=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return i>=0&&i<=59?n*(r*a.vh+i*a.yJ):NaN}(x.timezone)))return new Date(NaN)}else{var v=new Date(b+h),f=new Date(0);return f.setFullYear(v.getUTCFullYear(),v.getUTCMonth(),v.getUTCDate()),f.setHours(v.getUTCHours(),v.getUTCMinutes(),v.getUTCSeconds(),v.getUTCMilliseconds()),f}return new Date(b+h+m)}var l={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},s=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,o=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,d=/^([+-])(\d{2})(?::?(\d{2}))?$/;function parseDateUnit(e){return e?parseInt(e):1}function parseTimeUnit(e){return e&&parseFloat(e.replace(",","."))||0}var c=[31,null,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex(e){return e%400==0||e%4==0&&e%100!=0}},33200:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/admin/blog",function(){return n(69001)}])},33631:function(e,t,n){"use strict";n.d(t,{N:function(){return l},z:function(){return i}});var a=n(82729),r=n(68806);function _templateObject(){let e=(0,a._)(["\n  fragment BlogPostCardFields on BlogPost {\n    id\n    title\n    subtitle\n    slug\n    status\n    category\n    categoryName\n    heroImage\n    heroImageAlt\n    authorName\n    readingMinutes\n    publishedAt\n    updatedAt\n    viewCount\n  }\n"]);return _templateObject=function(){return e},e}function _templateObject1(){let e=(0,a._)(["\n  ","\n  fragment BlogPostFullFields on BlogPost {\n    ...BlogPostCardFields\n    contentBlocks\n    metaTitle\n    metaDescription\n    ogImage\n    featuredProId\n    createdAt\n    likeCount\n    viewCount\n    commentCount\n    facets {\n      id\n      dimension\n      name\n      slug\n    }\n    featuredPro {\n      id\n      name\n      slug\n      about\n      logo {\n        id\n        url\n      }\n      vendors_category {\n        name\n      }\n      averageRating\n      reviewCount\n    }\n    creditedPros {\n      id\n      name\n      slug\n      about\n      logo {\n        id\n        url\n      }\n      vendors_category {\n        name\n      }\n      averageRating\n      reviewCount\n    }\n  }\n"]);
1return _templateObject1=function(){return e},e}let i=(0,r.Ps)(_templateObject()),l=(0,r.Ps)(_templateObject1(),i)},81562:function(e,t,n){"use strict";n.d(t,{L:function(){return i},g:function(){return l}});var a=n(82729),r=n(68806);function _templateObject(){let e=(0,a._)(["\n  mutation CreateBlogCategory($name: String!) {\n    createBlogCategory(name: $name) {\n      id\n      name\n      slug\n    }\n  }\n"]);return _templateObject=function(){return e},e}function _templateObject1(){let e=(0,a._)(["\n  mutation DeleteBlogCategory($id: ID!) {\n    deleteBlogCategory(id: $id)\n  }\n"]);return _templateObject1=function(){return e},e}let i=(0,r.Ps)(_templateObject()),l=(0,r.Ps)(_templateObject1())},5285:function(e,t,n){"use strict";n.d(t,{AW:function(){return l},IY:function(){return s},Xd:function(){return i}});var a=n(82729),r=n(68806);function _templateObject(){let e=(0,a._)(["\n  mutation PublishBlogPost($id: ID!) {\n    publishBlogPost(id: $id) {\n      id\n      status\n      slug\n      publishedAt\n    }\n  }\n"]);return _templateObject=function(){return e},e}function _templateObject1(){let e=(0,a._)(["\n  mutation UnpublishBlogPost($id: ID!) {\n    unpublishBlogPost(id: $id) {\n      id\n      status\n    }\n  }\n"]);return _templateObject1=function(){return e},e}function _templateObject2(){let e=(0,a._)(["\n  mutation ArchiveBlogPost($id: ID!) {\n    archiveBlogPost(id: $id) {\n      id\n      status\n    }\n  }\n"]);return _templateObject2=function(){return e},e}let i=(0,r.Ps)(_templateObject()),l=(0,r.Ps)(_templateObject1()),s=(0,r.Ps)(_templateObject2())},29375:function(e,t,n){"use strict";n.d(t,{$5:function(){return l},bC:function(){return s},je:function(){return o}});var a=n(82729),r=n(68806),i=n(33631);function _templateObject(){let e=(0,a._)(["\n  query AdminBlogPosts(\n    $limit: Int\n    $offset: Int\n    $status: BlogPostStatus\n    $category: String\n    $search: String\n  ) {\n    adminBlogPosts(\n      limit: $limit\n      offset: $offset\n      status: $status\n      category: $category\n      search: $search\n    ) {\n      rows {\n        id\n        title\n        slug\n        status\n        category\n        categoryName\n        heroImage\n        authorName\n        publishedAt\n        updatedAt\n        previewToken\n      }\n      totalCount\n    }\n  }\n"]);return _templateObject=function(){return e},e}function _templateObject1(){let e=(0,a._)(["\n  ","\n  query AdminBlogPost($id: ID!) {\n    adminBlogPost(id: $id) {\n      ...BlogPostFullFields\n      previewToken\n      scheduledAt\n    }\n  }\n"]);return _templateObject1=function(){return e},e}function _templateObject2(){let e=(0,a._)(["\n  query MyBlogRole {\n    myBlogRole\n  }\n"]);return _templateObject2=function(){return e},e}let l=(0,r.Ps)(_templateObject()),s=(0,r.Ps)(_templateObject1(),i.N),o=(0,r.Ps)(_templateObject2())},19094:function(e,t,n){"use strict";n.d(t,{o:function(){return i}});var a=n(82729),r=n(68806);function _templateObject(){let e=(0,a._)(["\n  query GetBlogCategories {\n    blogCategories {\n      id\n      name\n      slug\n      postCount\n    }\n  }\n"]);return _templateObject=function(){return e},e}let i=(0,r.Ps)(_templateObject())},91690:function(e,t,n){"use strict";n.d(t,{B:function(){return i}});var a=n(82729),r=n(68806);function _templateObject(){let e=(0,a._)(["\n  query GetBlogFacets($dimension: FacetDimension) {\n    blogFacets(dimension: $dimension) {\n      id\n      dimension\n      name\n      slug\n      postCount\n    }\n  }\n"]);return _templateObject=function(){return e},e}let i=(0,r.Ps)(_templateObject())},69001:function(e,t,n){"use strict";n.r(t),n.d(t,{__N_SSP:function(){return P},default:function(){return AdminBlogPage}});var a=n(85893),r=n(67294),i=n(11163),l=n(37887),s=n(50319),o=n(82440),d=n(7003),c=n(44),u=n(29375),m=n(82729),g=n(68806);function _templateObject(){let e=(0,m._)(["\n  mutation CreateBlogPost($input: CreateBlogPostInput!) {\n    createBlogPost(input: $input) {\n      id\n      title\n      slug\n      status\n      category\n    }\n  }\n"]);return _templateObject=function(){return e},e}
1let x=(0,g.Ps)(_templateObject());function delete_blog_post_templateObject(){let e=(0,m._)(["\n  mutation DeleteBlogPost($id: ID!) {\n    deleteBlogPost(id: $id)\n  }\n"]);return delete_blog_post_templateObject=function(){return e},e}let p=(0,g.Ps)(delete_blog_post_templateObject());var b=n(5285),h=n(19094),v=n(81562),f=n(97695);function blog_team_templateObject(){let e=(0,m._)(["\n  query BlogTeam {\n    blogTeam {\n      userId\n      name\n      email\n      role\n    }\n  }\n"]);return blog_team_templateObject=function(){return e},e}let y=(0,g.Ps)(blog_team_templateObject());function mutation_blog_team_templateObject(){let e=(0,m._)(["\n  mutation GrantBlogRole($email: String!, $role: BlogRole!) {\n    grantBlogRole(email: $email, role: $role) {\n      userId\n      name\n      email\n      role\n    }\n  }\n"]);return mutation_blog_team_templateObject=function(){return e},e}function _templateObject1(){let e=(0,m._)(["\n  mutation RevokeBlogRole($userId: ID!) {\n    revokeBlogRole(userId: $userId)\n  }\n"]);return _templateObject1=function(){return e},e}let j=(0,g.Ps)(mutation_blog_team_templateObject()),k=(0,g.Ps)(_templateObject1());function BlogTeamModal(e){var t;let{open:n,onClose:i}=e,{showToast:u}=(0,r.useContext)(c.u),{data:m,refetch:g}=(0,l.a)(y,{skip:!n}),[x,p]=(0,r.useState)(""),[b,h]=(0,r.useState)("EDITOR"),[v,{loading:f}]=(0,s.D)(j),[N]=(0,s.D)(k),w=null!==(t=null==m?void 0:m.blogTeam)&&void 0!==t?t:[],err=e=>{var t,n;return(null==e?void 0:null===(n=e.graphQLErrors)||void 0===n?void 0:null===(t=n[0])||void 0===t?void 0:t.message)||(null==e?void 0:e.message)||"Something went wrong"},onGrant=async()=>{if(""!==x.trim())try{await v({variables:{email:x.trim(),role:b}}),p(""),await g(),u("Access granted","success")}catch(e){u(err(e),"error")}},onRevoke=async e=>{try{await N({variables:{userId:e.userId}}),await g(),u("Removed ".concat(e.name),"success")}catch(e){u(err(e),"error")}};return(0,a.jsx)(o.u,{isOpen:n,onClose:i,title:"Blog team",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("p",{className:"text-sm text-ink-55 dark:text-gray-400",children:"Owners publish, unpublish, delete and manage the blog. Editors can write and save drafts, but only an owner can publish. Grant access by the person’s account email."}),(0,a.jsxs)("ul",{className:"divide-y divide-ink-6 dark:divide-dark-edge rounded-xl border border-ink-12 dark:border-dark-edge overflow-hidden",children:[w.map(e=>(0,a.jsxs)("li",{className:"flex items-center justify-between gap-3 px-4 py-2.5 bg-white dark:bg-dark-card",children:[(0,a.jsxs)("span",{className:"min-w-0",children:[(0,a.jsx)("span",{className:"block text-sm font-semibold text-ink dark:text-white truncate",children:e.name}),(0,a.jsx)("span",{className:"block text-xs text-ink-30 dark:text-gray-500 truncate",children:e.email})]}),(0,a.jsxs)("span",{className:"flex items-center gap-2 shrink-0",children:[(0,a.jsx)("span",{className:"text-[11px] font-semibold px-2 py-0.5 rounded-full ".concat("OWNER"===e.role?"bg-zamala-violet text-white":"bg-zamala-tint text-zamala-violet dark:bg-dark-edge dark:text-zamala-violet-30"),children:e.role}),(0,a.jsx)("button",{type:"button","aria-label":"Remove ".concat(e.name),onClick:()=>onRevoke(e),className:"text-gray-400 hover:text-red-600 transition",children:(0,a.jsx)(d.JO,{name:"delete",size:15})})]})]},e.userId)),0===w.length&&(0,a.jsx)("li",{className:"px-4 py-3 text-sm text-gray-500 dark:text-gray-400 bg-white dark:bg-dark-card",children:"No one has blog access yet."})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"email",value:x,onChange:e=>p(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),onGrant())},placeholder:"[email protected]","aria-label":"Account email",className:"flex-1 rounded-lg border border-ink-12 dark:border-dark-edge bg-white dark:bg-dark-card px-3 py-2 text-sm text-ink dark:text-white focus:outline-none focus:border-zamala-violet transition"}),(0,a.jsxs)("select",{value:b,onChange:e=>h(e.target.value),"aria-label":"Role",className:"rounded-lg border border-ink-12 dark:border-dark-edge bg-white dark:bg-dark-card px-2 py-2 text-sm text-ink dark:text-white focus:outline-none focus:border-zamala-violet",children:[(0,a.jsx)("option",{value:"EDITOR",children:"Editor"}),(0,a.jsx)("option",{value:"OWNER",children:"Owner"})]}),(0,a.jsx)("button",{type:"button",onClick:onGrant,disabled:f||""===x.trim(),className:"inline-flex items-center h-9 px-4 roun
1ded-full bg-zamala-violet hover:bg-zamala-violet-60 text-white text-sm font-semibold transition disabled:opacity-50",children:"Grant"})]})]})})}var N=n(91690);function blog_facets_templateObject(){let e=(0,m._)(["\n  mutation CreateBlogFacet($dimension: FacetDimension!, $name: String!) {\n    createBlogFacet(dimension: $dimension, name: $name) {\n      ","\n    }\n  }\n"]);return blog_facets_templateObject=function(){return e},e}function blog_facets_templateObject1(){let e=(0,m._)(["\n  mutation UpdateBlogFacet($id: ID!, $name: String, $position: Int) {\n    updateBlogFacet(id: $id, name: $name, position: $position) {\n      ","\n    }\n  }\n"]);return blog_facets_templateObject1=function(){return e},e}function _templateObject2(){let e=(0,m._)(["\n  mutation DeleteBlogFacet($id: ID!) {\n    deleteBlogFacet(id: $id)\n  }\n"]);return _templateObject2=function(){return e},e}let w="\n  id\n  dimension\n  name\n  slug\n  postCount\n",_=(0,g.Ps)(blog_facets_templateObject(),w);(0,g.Ps)(blog_facets_templateObject1(),w);let C=(0,g.Ps)(_templateObject2());var D=n(59802);function BlogFacetsModal(e){let{open:t,onClose:n}=e,{showToast:i}=(0,r.useContext)(c.u),{data:u,refetch:m}=(0,l.a)(N.B,{fetchPolicy:"cache-and-network"}),[g,{loading:x}]=(0,s.D)(_),[p]=(0,s.D)(C),[b,h]=(0,r.useState)({}),v=(0,r.useMemo)(()=>{var e,t,n;let a={};for(let e of D.eN)a[e]=[];for(let r of null!==(e=null==u?void 0:u.blogFacets)&&void 0!==e?e:[])(null!==(n=a[t=r.dimension])&&void 0!==n?n:a[t]=[]).push(r);return a},[u]),gqlError=e=>{var t,n;return(null==e?void 0:null===(n=e.graphQLErrors)||void 0===n?void 0:null===(t=n[0])||void 0===t?void 0:t.message)||(null==e?void 0:e.message)||"Something went wrong"},add=async e=>{var t;let n=(null!==(t=b[e])&&void 0!==t?t:"").trim();if(""!==n)try{await g({variables:{dimension:e,name:n}}),h(t=>({...t,[e]:""})),await m(),i("Added “".concat(n,"”"),"success")}catch(e){i(gqlError(e),"error")}},remove=async e=>{try{await p({variables:{id:e.id}}),await m(),i("Removed “".concat(e.name,"”"),"success")}catch(e){i(gqlError(e),"error")}};return(0,a.jsx)(o.u,{isOpen:t,onClose:n,title:"Filters (facets)",children:(0,a.jsxs)("div",{className:"space-y-5 max-h-[70vh] overflow-y-auto pr-1",children:[(0,a.jsx)("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Tag posts with a city, culture, event type or diversity so readers can filter the Journal. Add or remove values here; a value can be removed anytime (it’s simply untagged from posts)."}),D.eN.map(e=>{var t,n;return(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide text-ink-55 dark:text-gray-400 mb-2",children:D.cE[e]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[0===v[e].length&&(0,a.jsx)("span",{className:"text-xs text-ink-30 dark:text-gray-500",children:"No values yet."}),v[e].map(e=>(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-zamala-tint dark:bg-dark-edge text-ink-80 dark:text-gray-200 text-[13px] font-medium pl-3 pr-1.5 py-1",children:[e.name,"number"==typeof e.postCount&&e.postCount>0&&(0,a.jsx)("span",{className:"text-ink-30 dark:text-gray-500",children:e.postCount}),(0,a.jsx)("button",{type:"button","aria-label":"Remove ".concat(e.name),onClick:()=>remove(e),className:"w-5 h-5 flex items-center justify-center rounded-full text-ink-30 hover:text-white hover:bg-red-500 transition",children:(0,a.jsx)(d.JO,{name:"close",size:11})})]},e.id))]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"text",value:null!==(t=b[e])&&void 0!==t?t:"",onChange:t=>h(n=>({...n,[e]:t.target.value})),onKeyDown:t=>{"Enter"===t.key&&(t.preventDefault(),add(e))},placeholder:"Add a ".concat(D.cE[e].toLowerCase(),"…"),maxLength:60,className:"blog-editor-input flex-1"}),(0,a.jsxs)("button",{type:"button",onClick:()=>add(e),disabled:x||""===(null!==(n=b[e])&&void 0!==n?n:"").trim(),className:"inline-flex items-center gap-1.5 h-9 px-4 rounded-full bg-zamala-violet hover:bg-zamala-violet-60 text-white text-sm font-semibold transition disabled:opacity-50",children:[(0,a.jsx)(d.JO,{name:"plus",size:13}),"Add"]})]})]},e)})]})})}let O={DRAFT:"bg-amber-100 text-amber-800 dark:bg-amber-900/40 dark:text-amber-300",SCHEDULED:"bg-zamala-tint text-zamala-violet dark:bg-dark-edge dark:text-zamala-violet-30",PUBLISHED:"bg-green-100 text-green-800 dark:bg-green-900/40 dark:text-green-300",ARCHIVED:"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300"};function AdminBlog(){var e,t,n,m;let g=(0,i.useRouter)(),{showToast:y}=(0,r.useContext)(c.u),[j,k]=(0,r.useState)(""),[N,w]=(0,r.useState)(""),[_,C]=(0,r.useState)(""),[D,P]=(0,r.useState)(0),[B,z]=(0,r.useState)(null),{data:E}=(0,l.a)(u.je,{fetchPolicy:"no-cache"}),I=(null==E?void 0:E.myBlogRole)==="OWNER",{data:$,refetch:T}=(0,l.a)(h.o),S=(0,r.useMemo)(()=>{var e;return null!==(e=null==$?void 0:$.blogCategories)&&void 0!==e?e:[]},[$]),[A,R]=(0,r.useState)(!1),[U,F]=(0,r.useState)(!1),[M,L]=(0,r.useState)(!1),[J,q]=(0,r.useState)(""),[Y,{loading:Z}]=(0,s.D)(v.L),[H]=(0,s.D)(v.g),{data:V,loading:G,refetch:W}=(0,l.a)(u.$5,{fetchPolicy:"no-cache",variables:{limit:25,offset:25*D,status:j||void 0,category:N||void 0,search:_||void 0},onError:e=>console.error("[AdminBlog] onError:",e)}),[X,{loading:K}]=(0,s.D)(x),[Q]=(0,s.D)(b.Xd),[ee]=(0,s.D)(b.AW),[et]=(0,s.D)(b.IY),[en]=(0,s.D)(p),ea=null!==(n=null==V?void 0:null===(e=V.adminBlogPosts)||void 0===e?void 0:e.rows)&&void 0!==n?n:[],er
1=null!==(m=null==V?void 0:null===(t=V.adminBlogPosts)||void 0===t?void 0:t.totalCount)&&void 0!==m?m:0,ei=Math.max(1,Math.ceil(er/25)),gqlErrorMessage=e=>{var t,n;return(null==e?void 0:null===(n=e.graphQLErrors)||void 0===n?void 0:null===(t=n[0])||void 0===t?void 0:t.message)||(null==e?void 0:e.message)||"Something went wrong"},onNewPost=async()=>{try{var e,t;let n=await X({variables:{input:{title:"Untitled story"}}}),a=null===(t=n.data)||void 0===t?void 0:null===(e=t.createBlogPost)||void 0===e?void 0:e.id;a&&g.push("/admin/blog/".concat(a))}catch(e){y(gqlErrorMessage(e),"error")}},runLifecycle=async(e,t)=>{let n="publish"===e?Q:"unpublish"===e?ee:et;try{await n({variables:{id:t.id}}),y("publish"===e?"“".concat(t.title,"” is live \uD83C\uDF89 — and shared with the Community"):"unpublish"===e?"“".concat(t.title,"” moved back to drafts — hidden in the Community too"):"“".concat(t.title,"” archived — hidden in the Community too"),"success"),await W()}catch(e){y(gqlErrorMessage(e),"error")}},onDelete=async()=>{if(B)try{await en({variables:{id:B.id}}),y("“".concat(B.title,"” deleted"),"success"),z(null),await W()}catch(e){y(gqlErrorMessage(e),"error")}},onCreateCategory=async()=>{let e=J.trim();if(""!==e)try{await Y({variables:{name:e}}),q(""),await T(),y("Category “".concat(e,"” added"),"success")}catch(e){y(gqlErrorMessage(e),"error")}},onDeleteCategory=async e=>{try{await H({variables:{id:e.id}}),await T(),y("Category “".concat(e.name,"” removed"),"success")}catch(e){y(gqlErrorMessage(e),"error")}},el="h-9 rounded-lg border border-ink-12 dark:border-dark-edge bg-white dark:bg-dark-card px-3 text-sm text-ink-80 dark:text-gray-200 focus:outline-none focus:border-zamala-violet transition",es=(0,r.useMemo)(()=>(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("select",{value:j,onChange:e=>{P(0),k(e.target.value)},"aria-label":"Filter by status",className:"".concat(el," pr-8"),style:{width:"10rem"},children:[(0,a.jsx)("option",{value:"",children:"All statuses"}),(0,a.jsx)("option",{value:"DRAFT",children:"Draft"}),(0,a.jsx)("option",{value:"SCHEDULED",children:"Scheduled"}),(0,a.jsx)("option",{value:"PUBLISHED",children:"Published"}),(0,a.jsx)("option",{value:"ARCHIVED",children:"Archived"})]}),(0,a.jsxs)("select",{value:N,onChange:e=>{P(0),w(e.target.value)},"aria-label":"Filter by category",className:"".concat(el," pr-8"),style:{width:"10rem"},children:[(0,a.jsx)("option",{value:"",children:"All categories"}),S.map(e=>(0,a.jsx)("option",{value:e.slug,children:e.name},e.slug))]}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(d.JO,{name:"search",size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-ink-30 pointer-events-none"}),(0,a.jsx)("input",{type:"text",value:_,onChange:e=>{P(0),C(e.target.value)},placeholder:"Search titles…","aria-label":"Search posts",className:"".concat(el," pl-9"),style:{width:"16rem"}})]})]}),[j,N,_,el,S]);return(0,a.jsxs)("div",{className:"flex flex-col h-full",children:[(0,a.jsxs)("div",{className:"px-6 pt-6 pb-4 bg-white dark:bg-dark-bg border-b border-ink-12 dark:border-dark-edge",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"font-display text-2xl font-extrabold tracking-tight text-ink dark:text-white",children:"Blog"}),(0,a.jsxs)("p",{className:"text-sm text-ink-55 dark:text-gray-400 mt-0.5",children:["Editorial stories — the spotlight machine."," ",(0,a.jsxs)("span",{className:"text-ink-30 dark:text-gray-500",children:[er," post",1===er?"":"s"]})]}),(0,a.jsxs)("p",{className:"text-[13px] text-ink-55 dark:text-gray-400 mt-2 max-w-2xl",children:[(0,a.jsx)(d.JO,{name:"circles",size:13,className:"inline align-[-2px] mr-1.5 text-zamala-violet"}),"Publishing also shares the story in the Community, in the room that matches its category, and asks every credited Pro to accept the mention. Moving it back to drafts or archiving it hides that copy; deleting the post removes it."]})]}),(0,a.jsxs)("div",{className:"shrink-0 flex items-center gap-2",children:[I&&(0,a.jsxs)("button",{type:"button",onClick:()=>g.push("/admin/blog/submissions"),className:"inline-flex items-center gap-1.5 h-10 px-4 roun
1ded-full border border-ink-12 dark:border-dark-edge text-sm font-medium text-ink-80 dark:text-gray-300 hover:border-zamala-violet hover:text-zamala-violet transition",children:[(0,a.jsx)(d.JO,{name:"hand-raised",size:14}),"Submissions"]}),I&&(0,a.jsxs)("button",{type:"button",onClick:()=>g.push("/admin/blog/ads"),className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-full border border-ink-12 dark:border-dark-edge text-sm font-medium text-ink-80 dark:text-gray-300 hover:border-zamala-violet hover:text-zamala-violet transition",children:[(0,a.jsx)(d.JO,{name:"megaphone",size:14}),"Ads"]}),I&&(0,a.jsxs)("button",{type:"button",onClick:()=>L(!0),className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-full border border-ink-12 dark:border-dark-edge text-sm font-medium text-ink-80 dark:text-gray-300 hover:border-zamala-violet hover:text-zamala-violet transition",children:[(0,a.jsx)(d.JO,{name:"guests",size:14}),"Team"]}),I&&(0,a.jsxs)("button",{type:"button",onClick:()=>R(!0),className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-full border border-ink-12 dark:border-dark-edge text-sm font-medium text-ink-80 dark:text-gray-300 hover:border-zamala-violet hover:text-zamala-violet transition",children:[(0,a.jsx)(d.JO,{name:"tag",size:14}),"Categories"]}),I&&(0,a.jsxs)("button",{type:"button",onClick:()=>F(!0),className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-full border border-ink-12 dark:border-dark-edge text-sm font-medium text-ink-80 dark:text-gray-300 hover:border-zamala-violet hover:text-zamala-violet transition",children:[(0,a.jsx)(d.JO,{name:"adjustments-horizontal",size:14}),"Filters"]}),(0,a.jsxs)("button",{type:"button",onClick:onNewPost,disabled:K,className:"inline-flex items-center gap-1.5 h-10 px-5 rounded-full bg-zamala-violet hover:bg-zamala-violet-60 text-white text-sm font-semibold transition disabled:opacity-50",children:[(0,a.jsx)(d.JO,{name:"plus",size:14}),"New post"]})]})]}),(0,a.jsx)("div",{className:"mt-4",children:es})]}),(0,a.jsxs)("div",{className:"flex-grow overflow-auto p-4",children:[(0,a.jsx)("div",{className:"inline-block min-w-full align-middle",children:(0,a.jsx)("div",{className:"overflow-hidden shadow rounded-lg",children:(0,a.jsxs)("table",{className:"min-w-full divide-y divide-gray-200 dark:divide-gray-600",children:[(0,a.jsx)("thead",{className:"bg-gray-100 dark:bg-gray-700",children:(0,a.jsx)("tr",{children:["Title","Status","Category","Author","Published","Updated",""].map((e,t)=>(0,a.jsx)("th",{className:"p-4 text-xs font-medium text-gray-500 uppercase dark:text-gray-400 ".concat(""===e?"text-right":"text-left"),children:e},t))})}),(0,a.jsx)("tbody",{children:G?(0,a.jsx)("tr",{children:(0,a.jsx)("td",{colSpan:7,className:"p-4 text-center text-gray-500 dark:text-gray-400",children:"Loading…"})}):0===ea.length?(0,a.jsx)("tr",{children:(0,a.jsx)("td",{colSpan:7,className:"p-10 text-center text-gray-500 dark:text-gray-400",children:"No posts yet. Start the first story — someone deserves a spotlight. ✨"})}):ea.map(e=>{var t,n;return(0,a.jsxs)("tr",{className:"bg-white border-b dark:bg-dark-bg dark:border-dark-edge hover:bg-gray-100 dark:hover:bg-epic-gray-800 transition cursor-pointer",onClick:()=>g.push("/admin/blog/".concat(e.id)),children:[(0,a.jsx)("td",{className:"p-4 text-sm font-medium text-gray-900 dark:text-white max-w-md",children:(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("span",{className:"relative w-14 h-10 shrink-0 rounded-md overflow-hidden bg-zamala-tint dark:bg-dark-edge",children:e.heroImage?(0,a.jsx)("img",{src:e.heroImage,alt:"",className:"w-full h-full object-cover"}):(0,a.jsx)("span",{className:"flex items-center justify-center w-full h-full text-zamala-violet/40",children:(0,a.jsx)(d.JO,{name:"photo",size:16})})}),(0,a.jsxs)("span",{className:"min-w-0",children:[(0,a.jsx)("span",{className:"block truncate font-semibold",children:e.title}),(0,a.jsxs)("span",{className:"block text-xs text-ink-30 dark:text-gray-500 font-normal truncate",children:["/blog/",e.slug]})]})]})}),(0,a.jsx)("td",{className:"p-4",children:(0,a.jsx)("span",{className:"inline-block text-[11px] font-semibold px-2 py-0.5 rounded-full ".concat(O[e.status]),children:e.status})}),(0,a.jsx)("td",{className:"p-4 text-sm text-gray-500 dark:text-gray-400",children:null!==(t=e.categoryName)&&void 0!==t?t:e.category}),(0,a.jsx)("td",{className:"p-4 text-sm text-gray-500 dark:text-gray-400",children:null!==(n=e.authorName)&&void 0!==n?n:"—"}),(0,a.jsx)("td",{className:"p-4 text-sm text-gray-500 dark:text-gray-400 whitespace-nowrap",children:e.publishedAt?(0,f.p)(e.publishedAt):"—"}),(0,a.jsx)("td",{className:"p-4 text-sm text-gray-500 dark:text-gray-400 whitespace-nowrap",children:e.updatedAt?(0,f.p)(e.updatedAt):"—"}),(0,a.jsx)("td",{className:"p-4 text-right whitespace-nowrap",onClick:e=>e.stopPropagation(),children:(0,a.jsxs)("div",{className:"inline-flex items-center gap-2",children:[e.previewToken&&(0,a.jsx)("a",{href:"/blog/preview/".concat(e.previewToken),target:"_blank",rel:"noreferrer",title:"Preview","aria-label":"Preview ".concat(e.title),className:"text-gray-400 hover:text-zamala-violet transition",children:(0,a.jsx)(d.JO,{name:"eye",size:16})}),I&&"PUBLISHED"!==e.status&&(0,a.jsx)("button",{type:"button",onClick:()=>runLifecycle("publish",e),className:"text-xs font-semibold text-zamala-violet hover:text-zamala-neon transition",children:"Publish"}),I&&"PUBLISHED"===e.status&&(0,a.jsx)("button",{type:"button",onClick:()=>runLifecycle("unpublish",e),className:"text-xs font-semibold text-amber-600 hover:text-amber-500 transition",children:"Unpublish"}),I&&"ARCHIVED"!==e.status&&(0,a.jsx)("button",{type:"button",onClick:()=>runLifecycle("archive",e),className:"text-xs font-medium text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition",children:"Archive"}),I&&(0,a.jsx)("button",{type:"button",onClick:()=>z(e),"aria-label":"Delete ".concat(e.title),className:"text-gray-400 hover:text-red-600 transition",children:(0,a.jsx)(d.JO,{name:"delete",size:16})})]})})]},e.id)})})]})})}),ei>1&&(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2 mt-4 text-sm",children:[(0,a.jsx)("button",{type:"button",disabled:0===D,onClick:()=>P(e=>e-1),className:"px-3 py-1.5 rounded border border-gray-200 dark:border-dark-edge disabled:opacity-40",children:"Previous"}),(0,a.jsxs)("span",{className:"text-gray-500 dark:text-gray-400",children:["Page ",D+1," of ",ei]}),(0,a.jsx)("button",{type:"button",disabled:D>=ei-1,onClick:()=>P(e=>e+1),className:"px-3 py-1.5 rounded border border-gray-200 dark:border-dark-edge disabled:opacity-40",children:"Next"})]})]}),(0,a.jsx)(BlogTeamModal,{open:M,onClose:()=>L(!1)}),(0,a.jsx)(BlogFacetsModal,{open:U,onClose:()=>F(!1)}),(0,a.jsx)(o.u,{isOpen:A,onClose:()=>R(!1),title:"Blog categories",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Categories power the filter chips on the public blog and the dropdown in the editor. A category can only be removed while no post is using it."}),(0,a.jsxs)("ul",{className:"divide-y divide-ink-6 dark:divide-dark-edge rounded-xl border border-ink-12 dark:border-dark-edge overflow-hidden",children:[S.map(e=>(0,a.jsxs)("li",{className:"flex items-center justify-between gap-3 px-4 py-2.5 bg-white dark:bg-dark-card",children:[(0,a.jsxs)("span",{className:"min-w-0",children:[(0,a.jsx)("span",{className:"block text-sm font-semibold text-ink dark:text-white truncate",children:e.name}),(0,a.jsxs)("span",{className:"block text-xs text-ink-30 dark:text-gray-500 font-mono truncate",children:["/blog?category=",e.slug]})]}),(0,a.jsx)("button",{type:"button","aria-label":"Delete category ".concat(e.name),title:"Delete category (only when unused)",onClick:()=>onDeleteCategory(e),className:"shrink-0 text-gray-400 hover:text-red-600 transition",children:(0,a.jsx)(d.JO,{name:"delete",size:15})})]},e.id)),0===S.length&&(0,a.jsx)("li",{className:"px-4 py-3 text-sm text-gray-500 dark:text-gray-400 bg-white dark:bg-dark-card",children:"No categories yet."})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"text",value:J,onChange:e=>q(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),onCreateCategory())},placeholder:"New category name (e.g. Real Weddings)","aria-label":"New category name",maxLength:60,className:"blog-editor-input flex-1"}),(0,a.jsxs)("button",{type:"button",onClick:onCreateCategory,disabled:Z||""===J.trim(),className:"inline-flex items-center gap-1.5 h-9 px-4 roun
1ded-full bg-zamala-violet hover:bg-zamala-violet-60 text-white text-sm font-semibold transition disabled:opacity-50",children:[(0,a.jsx)(d.JO,{name:"plus",size:13}),"Add"]})]})]})}),(0,a.jsx)(o.u,{isOpen:!!B,onClose:()=>z(null),title:"Delete post?",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["“",null==B?void 0:B.title,"” will be permanently deleted. Published links will stop working. This cannot be undone."]}),(0,a.jsxs)("div",{className:"flex justify-end gap-3",children:[(0,a.jsx)("button",{type:"button",onClick:()=>z(null),className:"px-4 py-2 text-sm rounded-lg border border-gray-200 dark:border-dark-edge",children:"Cancel"}),(0,a.jsx)("button",{type:"button",onClick:onDelete,className:"px-4 py-2 text-sm rounded-lg bg-red-600 text-white hover:bg-red-700 transition",children:"Delete forever"})]})]})})]})}var P=!0;function AdminBlogPage(){return(0,a.jsx)(AdminBlog,{})}},59802:function(e,t,n){"use strict";n.d(t,{TO:function(){return i},cE:function(){return r},eN:function(){return a}});let a=["CITY","CULTURE","EVENT_TYPE","DIVERSITY"],r={CITY:"City",CULTURE:"Culture",EVENT_TYPE:"Event type",DIVERSITY:"Diversity"},i=["Photography","Videography","Catering","Floral","Music","Venue","Decor","Planning","Cake","Beauty","Rentals","Other"]},97695:function(e,t,n){"use strict";n.d(t,{p:function(){return formatDate}});var a=n(42298),r=n(12274),i=n(23855);let formatDate=e=>{let t=(0,i.Z)(e);return(0,r.Z)(t)?(0,a.Z)(t,"MMMM d, yyyy"):""}}},function(e){e.O(0,[2298,9774,2888,179],function(){return e(e.s=33200)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.