Files
at-mintel/directus/extensions/people-manager/index.js
Marc Mintel f48d89c368
All checks were successful
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 6s
Monorepo Pipeline / 🧪 Test (push) Successful in 56s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m22s
Monorepo Pipeline / 🏗️ Build (push) Successful in 3m51s
Monorepo Pipeline / 🚀 Release (push) Has been skipped
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been skipped
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been skipped
chore: comprehensive commit of all debugging, infrastructure, and extension fixes
Summary of changes:
- Corrected Directus extensions to use 'vue-router' for 'useRouter' instead of '@directus/extensions-sdk' (Fixed runtime crash).
- Standardized extension folder structure and moved built extensions to the root 'directus/extensions' directory.
- Updated 'scripts/sync-extensions.sh' and 'scripts/validate-extensions.sh' for better extension management.
- Added 'scripts/validate-sdk-imports.sh' as a safeguard against future invalid SDK imports.
- Integrated import validation into the '.husky/pre-push' hook.
- Standardized Docker restart policies and network configurations in 'cms-infra/docker-compose.yml'.
- Updated tracked 'data.db' with the correct 'module_bar' settings to ensure extension visibility.
- Cleaned up legacy files and consolidated extension package source code.

This commit captures the full state of the repository after resolving the 'missing extensions' issue.
2026-02-14 01:44:18 +01:00

2 lines
9.2 KiB
JavaScript

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