1import{i as F,j as I,e as k,w as S,a as e,b as r,u as o,l as L,s as p,t as c,o as d,g as U,c as v,F as V,v as z,z as $,n as u,B as N,A as g}from"./app-CiZjbkE0.js";import{u as M}from"./debounce-DtSLDvQw.js";import{_ as m}from"./Button.vue_vue_type_script_setup_true_lang-BdjNNw_2.js";import{_ as h}from"./FormInput.vue_vue_type_script_setup_true_lang-IVyRMuFo.js";import{_ as B}from"./FormSelect.vue_vue_type_script_setup_true_lang-BXfbQQ0n.js";import{_ as O}from"./Heading.vue_vue_type_script_setup_true_lang-lhSE-GdR.js";import{_ as q}from"./AppLayout.vue_vue_type_script_setup_true_lang-CpwI4SYQ.js";/* empty css */import"./Spinner.vue_vue_type_script_setup_true_lang-B5H8bArf.js";import"./FormLabel.vue_vue_type_script_setup_true_lang-Cqo4t6HB.js";import"./FormatNumber-DtJYAcXm.js";import"./keyboard-Dbbjjs3d.js";import"./use-resolve-button-type-BPOKJMc-.js";import"./use-text-value-CLe85DaK.js";import"./csrfMeta-BHErKF-U.js";import"./Notification.vue_vue_type_script_setup_true_lang-DxY7CsPW.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./AppMenu.vue_vue_type_script_setup_true_lang-IRBNjN1d.js";import"./HuttonsLogo-k4KVz4P7.js";import"./AppLogout.vue_vue_type_script_setup_true_lang-BJLbFOFr.js";import"./Skeleton.vue_vue_type_script_setup_true_lang-CQmIhAif.js";import"./portal-Dnh6LYRc.js";import"./menuAdapter-Cz4JrNt_.js";const G={class:"space-y-6"},H={class:"flex items-center justify-between"},J={class:"rounded-lg border border-gray-200 bg-white p-5"},K={class:"mb-4 text-sm font-semibold text-gray-800"},Q={class:"grid grid-cols-1 gap-4 md:grid-cols-2"},R={class:"mt-4"},T={class:"mt-4 flex gap-2"},W={class:"overflow-hidden rounded-lg border border-gray-200 bg-white"},X={class:"min-w-full divide-y divide-gray-200 text-sm"},Y={class:"divide-y divide-gray-100"},Z={key:0},ee={key:1},te={class:"px-4 py-4 text-gray-800"},ae={class:"px-4 py-4 text-gray-600"},se={class:"px-4 py-4 text-gray-600"},le={class:"px-4 py-4"},re={class:"px-4 py-4"},oe={class:"flex justify-end gap-2"},Pe=F({__name:"index",setup(ie){const{show:n}=M(),b=u([]),y=u(!1),_=u(!1),f=u(null),i=u(null),s=u({name:"",slug:"",parent_id:null,description:"",is_active:!0}),C=N(()=>{const t=[];for(const l of b.value){t.push({...l,level:0,parent_name:null});for(const a of l.children??[])t.push({...a,level:1,parent_name:l.name})}return t}),E=N(()=>b.value.map(t=>({value:t.id,label:t.name}))),w=()=>{s.value={name:"",slug:"",parent_id:null,description:"",is_active:!0},i.value=null},x=async()=>{y.value=!0;try{const t=await g.get(p("api.admin.v1.posts.categories.index"));b.value=t.data?.data??[]}catch(t){n({status:"error",title:"Error",message:t?.response?.data?.message??"Unable to load categories."})}finally{y.value=!1}},P=t=>{s.value.name=t.name,s.value.slug=t.slug,s.value.parent_id=t.parent_id,s.value.description=t.description??"",s.value.is_active=!!t.is_active,i.value=t.id},A=async()=>{if(s.value.name.trim()){_.value=!0;try{const t={name:s.value.name,slug:s.value.slug||null,parent_id:s.value.parent_id||null,description:s.value.description||null,is_active:s.value.is_active};i.value?(await g.put(p("api.admin.v1.posts.categories.update",{categoryId:i.value}),t),n({status:"success",title:"Success",message:"Category updated successfully."})):(await g.post(p("api.admin.v1.posts.categories.store"),t),n({status:"success",title:"Success",message:"Category created successfully."})),w(),await x()}catch(t){n({status:"error",title:"Error",message:t?.response?.data?.message??"Unable to save category."})}finally{_.value=!1}}},D=async t=>{f.value=t;try{await g.delete(p("api.admin.v1.posts.categories.destroy",{categoryId:t})),n({status:"success",title:"Success",message:"Category deleted successfully."}),await x()}catch(l){n({status:"error",title:"Error",message:l?.response?.data?.message??"Unable to delete category."})}finally{f.value=null}};return I(()=>{x()}),(t,l)=>(d(),k(o(q),{title:"Post Categories"},{default:S(()=>[e("div",G,[e("div",H,[r(o(O),{as:"h1",text:"Post Categories"}),r(o(L),{href:o(p)("admin.posts.index")},{default:S(()=>[r(o(m),{label:"Back to Posts","bg-color":"bg-white hover:bg-brand-primary-100",border:"border border-brand-primary-200",color:"text-brand-primary-500 hover:text-brand-primary-600"})]),_:1},8,["href"])]),e("div",J,[e("div",K,c(i.value?"Edit Category":"Create Category"),1),e("div",Q,[r(h,{id:"category-name",value:s.value.name,"onUpdate:value":l[0]||(l[0]=a=>s.value.name=a),label:"Name"},null,8,["value"]),r(h,{id:"category-slug",value:s.value.slug,"onUpdate:value":l[1]||(l[1]=a=>s.value.slug=a),label:"Slug (optional)"},null,8,["value"]),r(B,{id:"category-parent",value:s.value.parent_id,"onUpdate:value":l[2]||(l[2]=a=>s.value.parent_id=a),option:E.value,"show-placeholder":!0,label:"Parent Category"}
1,null,8,["value","option"]),r(B,{id:"category-status",value:s.value.is_active?"1":"0",option:[{value:"1",label:"Active"},{value:"0",label:"Inactive"}],label:"Status","onUpdate:value":l[3]||(l[3]=a=>s.value.is_active=String(a)==="1")},null,8,["value"])]),e("div",R,[r(h,{id:"category-description",value:s.value.description,"onUpdate:value":l[4]||(l[4]=a=>s.value.description=a),label:"Description"},null,8,["value"])]),e("div",T,[r(o(m),{"is-loading":_.value,label:i.value?"Update Category":"Create Category",onClick:A},null,8,["is-loading","label"]),i.value?(d(),k(o(m),{key:0,label:"Cancel","bg-color":"bg-white hover:bg-brand-primary-100",border:"border border-brand-primary-200",color:"text-brand-primary-500 hover:text-brand-primary-600",onClick:w})):U("",!0)])]),e("div",W,[e("table",X,[l[7]||(l[7]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left font-semibold text-gray-700"},"Name"),e("th",{class:"px-4 py-3 text-left font-semibold text-gray-700"},"Slug"),e("th",{class:"px-4 py-3 text-left font-semibold text-gray-700"},"Parent"),e("th",{class:"px-4 py-3 text-left font-semibold text-gray-700"},"Status"),e("th",{class:"px-4 py-3 text-right font-semibold text-gray-700"},"Action")])],-1)),e("tbody",Y,[y.value?(d(),v("tr",Z,[...l[5]||(l[5]=[e("td",{class:"px-4 py-4 text-gray-500",colspan:"5"},"Loading categories...",-1)])])):C.value.length===0?(d(),v("tr",ee,[...l[6]||(l[6]=[e("td",{class:"px-4 py-4 text-gray-500",colspan:"5"},"No categories found.",-1)])])):U("",!0),(d(!0),v(V,null,z(C.value,a=>(d(),v("tr",{key:a.id},[e("td",te,[e("span",{class:$(a.level===1?"pl-5 text-gray-700":"font-medium")},c(a.level===1?`â³ ${a.name}`:a.name),3)]),e("td",ae,c(a.slug),1),e("td",se,c(a.parent_name||"-"),1),e("td",le,[e("span",{class:$([a.is_active?"bg-green-100 text-green-700":"bg-gray-100 text-gray-600","rounded-full px-2 py-1 text-xs"])},c(a.is_active?"Active":"Inactive"),3)]),e("td",re,[e("div",oe,[r(o(m),{label:"Edit","bg-color":"bg-white hover:bg-brand-primary-100",border:"border border-brand-primary-200",color:"text-brand-primary-500 hover:text-brand-primary-600",onClick:j=>P(a)},null,8,["onClick"]),r(o(m),{"is-loading":f.value===a.id,label:"Delete","bg-color":"bg-red-500 hover:bg-red-400",color:"text-white",onClick:j=>D(a.id)},null,8,["is-loading","onClick"])])])]))),128))])])])])]),_:1}))}});export{Pe as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.