Files
at-mintel/directus/extensions/people-manager/index.js
Marc Mintel 9b1f3fb7e8
Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 2s
Monorepo Pipeline / 🧹 Lint (push) Successful in 1m1s
Monorepo Pipeline / 🚀 Release (push) Has been cancelled
Monorepo Pipeline / 🧪 Test (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been cancelled
Monorepo Pipeline / 🏗️ Build (push) Has been cancelled
feat(next-feedback): add onActiveChange prop for controlled activation
2026-02-14 02:03:13 +01:00

2 lines
8.6 KiB
JavaScript

import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as l,onMounted as o,resolveComponent as s,resolveDirective as i,openBlock as r,createBlock as c,withCtx as d,createVNode as u,createElementBlock as p,Fragment as m,renderList as v,createElementVNode as f,createTextVNode as y,toDisplayString as g,createCommentVNode as h,withDirectives as _}from"vue";var b=Object.defineProperty,x=Object.defineProperties,w=Object.getOwnPropertyDescriptors,P=Object.getOwnPropertySymbols,k=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,j=(e,a,t)=>a in e?b(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const O={class:"content-wrapper"},C={key:1,class:"empty-state"},N={key:2},z={class:"header"},S={class:"header-left"},U={class:"title"},A={class:"subtitle"},E={class:"header-right"},F={class:"details-grid"},T={class:"detail-item"},$={class:"value"},B={class:"drawer-content"},M={class:"form-section"},I={class:"field"},q={class:"field"},D={class:"field"},L={class:"field"},W={class:"drawer-actions"};var Z=t({__name:"module",setup(a){const t=e(),b=n([]),Z=n([]),G=n(null),H=n(null),J=n(!1),K=n(!1),Q=n(!1),R=n({id:null,first_name:"",last_name:"",company:null,company_name:""}),X=l(()=>Z.value.map(e=>({text:e.name,value:e.id})));async function Y(){try{const[e,a]=await Promise.all([t.get("/items/people",{params:{sort:"last_name",fields:"*.*"}}),t.get("/items/companies",{params:{sort:"name"}})]);b.value=e.data.data,Z.value=a.data.data}catch(e){console.error("Failed to fetch data:",e)}}function ee(){Q.value=!1,R.value={id:null,first_name:"",last_name:"",company:null,company_name:""},K.value=!0}function ae(){Q.value=!0;const e=G.value;let a=null,t=e.company_name||"";var n;e.company&&("object"==typeof e.company?a=e.company.id:36===e.company.length?a=e.company:t=e.company),R.value=(n=((e,a)=>{for(var t in a||(a={}))k.call(a,t)&&j(e,t,a[t]);if(P)for(var t of P(a))V.call(a,t)&&j(e,t,a[t]);return e})({},e),x(n,w({company:a,company_name:t}))),K.value=!0}async function te(){if(R.value.first_name&&R.value.last_name){J.value=!0;try{Q.value?(await t.patch(`/items/people/${R.value.id}`,R.value),H.value={type:"success",message:"Person aktualisiert!"}):(await t.post("/items/people",R.value),H.value={type:"success",message:"Person angelegt!"}),K.value=!1,await Y(),Q.value&&(G.value=b.value.find(e=>e.id===R.value.id))}catch(e){H.value={type:"danger",message:e.message}}finally{J.value=!1}}else H.value={type:"danger",message:"Vor- und Nachname sind erforderlich."}}async function ne(){if(confirm("Soll diese Person wirklich gelöscht werden?"))try{await t.delete(`/items/people/${G.value.id}`),H.value={type:"success",message:"Person gelöscht."},G.value=null,await Y()}catch(e){H.value={type:"danger",message:e.message}}}return o(Y),(e,a)=>{const t=s("v-icon"),n=s("v-list-item-icon"),l=s("v-text-overflow"),o=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),P=s("v-list"),k=s("v-notice"),V=s("v-button"),j=s("v-info"),Y=s("v-input"),le=s("v-select"),oe=s("v-drawer"),se=s("private-view"),ie=i("tooltip");return r(),c(se,{title:"People Manager"},{navigation:d(()=>[u(P,{nav:""},{default:d(()=>[u(x,{onClick:ee,clickable:""},{default:d(()=>[u(n,null,{default:d(()=>[u(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),u(o,null,{default:d(()=>[u(l,{text:"Neue Person anlegen"})]),_:1})]),_:1}),u(w),(r(!0),p(m,null,v(b.value,e=>{var a;return r(),c(x,{key:e.id,active:(null==(a=G.value)?void 0:a.id)===e.id,class:"person-item",clickable:"",onClick:a=>function(e){G.value=e}(e)},{default:d(()=>[u(n,null,{default:d(()=>[u(t,{name:"person"})]),_:1}),u(o,null,{default:d(()=>[u(l,{text:`${e.first_name} ${e.last_name}`},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),default:d(()=>{return[f("div",O,[H.value?(r(),c(k,{key:0,type:H.value.type,onClose:a[0]||(a[0]=e=>H.value=null),dismissible:""},{default:d(()=>[y(g(H.value.message),1)]),_:1},8,["type"])):h("v-if",!0),G.value?(r(),p("div",N,[f("header",z,[f("div",S,[f("h1",U,g(G.value.first_name)+" "+g(G.value.last_name),1),f("p",A,g((e=G.value,e?e.company?"object"==typeof e.company?e.company.name:(null==(n=Z.value.find(a=>a.id===e.company))?void 0:n.name)||e.company_name:e.company_name||"---":"---")),1)]),f("div",E,[_((r(),c(V,{secondary:"",rounded:"",icon:"",onClick:ae},{default:d(()=>[u(t,{name:"edit"})]),_:1})),[[ie,"Person bearbeiten"]]),_((r(),c(V,{danger:"",rounded:"",icon:"",onClick:ne},{default:d(()=>[u(t,{name:"delete"})]),_:1})),[[ie,"Person löschen"]])])]),u(w),f("div",F,[f("div",T,[a[10]||(a[10]=f("span",{class:"label"},"Name",-1)),f("p",$,g(G.value.first_name)+" "+g(G.value.last_name),1)])])])):(r(),p("div",C,[u(j,{title:"Person auswählen",icon:"person",center:""},{default:d(()=>[a[8]||(a[8]=y(" Wähle eine Person in der Navigation aus oder ",-1)),u(V,{"x-small":"",onClick:ee},{default:d(()=>[...a[7]||(a[7]=[y("erstelle eine neue Person",-1)])]),_:1}),a[9]||(a[9]=y(". ",-1))]),_:1})]))]),u(oe,{modelValue:K.value,"onUpdate:modelValue":a[5]||(a[5]=e=>K.value=e),title:Q.value?"Person bearbeiten":"Neue Person anlegen",icon:"person",onCancel:a[6]||(a[6]=e=>K.value=!1)},{default:d(()=>[f("div",B,[f("div",M,[f("div",I,[a[11]||(a[11]=f("span",{class:"label"},"Vorname",-1)),u(Y,{modelValue:R.value.first_name,"onUpdate:modelValue":a[1]||(a[1]=e=>R.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),f("div",q,[a[12]||(a[12]=f("span",{class:"label"},"Nachname",-1)),u(Y,{modelValue:R.value.last_name,"onUpdate:modelValue":a[2]||(a[2]=e=>R.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),f("div",D,[a[13]||(a[13]=f("span",{class:"label"},"Zentrale Firma",-1)),u(le,{modelValue:R.value.company,"onUpdate:modelValue":a[3]||(a[3]=e=>R.value.company=e),items:X.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),f("div",L,[a[14]||(a[14]=f("span",{class:"label"},"Firma (Legacy / Neu)",-1)),u(Y,{modelValue:R.value.company_name,"onUpdate:modelValue":a[4]||(a[4]=e=>R.value.company_name=e),placeholder:"z.B. Mintel"},null,8,["modelValue"])])]),f("div",W,[u(V,{primary:"",block:"",loading:J.value,onClick:te},{default:d(()=>[...a[15]||(a[15]=[y(" Person speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])];var e,n}),_:1})}}}),G=[],H=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,n=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,o="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var s=G.indexOf(o);-1===s&&(s=G.push(o)-1,H[s]={}),t=H[s]&&H[s][n]?H[s][n]:H[s][n]=i()}else t=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l<t.length;l++)e.setAttribute(t[l],a.attributes[t[l]]);var s="prepend"===n?"afterbegin":"beforeend";return o.insertAdjacentElement(s,e),e}}("\n.content-wrapper[data-v-5f235c38] {\n\tpadding: 32px;\n\theight: 100%;\n}\n.header[data-v-5f235c38] {\n\tmargin-bottom: 24px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-end;\n}\n.title[data-v-5f235c38] {\n\tfont-size: 24px;\n\tfont-weight: 800;\n\tmargin-bottom: 4px;\n}\n.subtitle[data-v-5f235c38] {\n\tcolor: var(--theme--foreground-subdued);\n\tfont-size: 14px;\n}\n.header-right[data-v-5f235c38] {\n\tdisplay: flex;\n\tgap: 12px;\n}\n.empty-state[data-v-5f235c38] {\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n.details-grid[data-v-5f235c38] {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(2, 1fr);\n\tgap: 32px;\n\tmargin-top: 32px;\n}\n.detail-item[data-v-5f235c38] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n.label[data-v-5f235c38] {\n\tfont-size: 12px;\n\tfont-weight: 700;\n\ttext-transform: uppercase;\n\tcolor: var(--theme--foreground-subdued);\n\tletter-spacing: 0.5px;\n}\n.value[data-v-5f235c38] {\n\tfont-size: 16px;\n\tfont-weight: 500;\n}\n.drawer-content[data-v-5f235c38] {\n\tpadding: 24px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 32px;\n}\n.form-section[data-v-5f235c38] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 20px;\n}\n.field[data-v-5f235c38] {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n.drawer-actions[data-v-5f235c38] {\n\tmargin-top: 24px;\n}\n",{});var J=a({id:"people-manager",name:"People Manager",icon:"person",routes:[{path:"",component:((e,a)=>{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(Z,[["__scopeId","data-v-5f235c38"],["__file","module.vue"]])}]});export{J as default};