From a25e4aa1d4ce566c3da634746c7f88840eddc5f4 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 13 Feb 2026 12:14:14 +0100 Subject: [PATCH] chore: stabilize pipeline, fix extension build scripts, and finalize version sync hook --- .eslintignore | 1 + .../extensions/acquisition-manager/index.js | 1 - .../acquisition-manager/package.json | 30 ------------------- directus/extensions/acquisition/package.json | 27 ----------------- directus/extensions/customer-manager/index.js | 1 - .../extensions/customer-manager/package.json | 30 ------------------- .../extensions/feedback-commander/index.js | 1 - .../feedback-commander/package.json | 30 ------------------- directus/extensions/people-manager/index.js | 1 - .../extensions/people-manager/package.json | 30 ------------------- packages/acquisition-manager/package.json | 2 +- packages/customer-manager/package.json | 2 +- packages/feedback-commander/package.json | 2 +- packages/people-manager/package.json | 2 +- scripts/sync-extensions.sh | 4 ++- 15 files changed, 8 insertions(+), 156 deletions(-) delete mode 100644 directus/extensions/acquisition-manager/index.js delete mode 100644 directus/extensions/acquisition-manager/package.json delete mode 100644 directus/extensions/acquisition/package.json delete mode 100644 directus/extensions/customer-manager/index.js delete mode 100644 directus/extensions/customer-manager/package.json delete mode 100644 directus/extensions/feedback-commander/index.js delete mode 100644 directus/extensions/feedback-commander/package.json delete mode 100644 directus/extensions/people-manager/index.js delete mode 100644 directus/extensions/people-manager/package.json diff --git a/.eslintignore b/.eslintignore index 672aab2..b5857f9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ **/index.js **/dist/** +packages/cms-infra/extensions/** diff --git a/directus/extensions/acquisition-manager/index.js b/directus/extensions/acquisition-manager/index.js deleted file mode 100644 index 1b3967a..0000000 --- a/directus/extensions/acquisition-manager/index.js +++ /dev/null @@ -1 +0,0 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as r,createBlock as u,withCtx as d,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as g,createCommentVNode as b,createElementVNode as y,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const A={class:"content-wrapper"},$={key:0,class:"empty-state"},C={class:"header"},F={class:"header-left"},U={class:"title"},O={class:"subtitle"},j=["href"],P={class:"header-right"},E={class:"sections"},L={class:"main-info"},S={class:"form-grid"},z={class:"field"},B={key:1,class:"value text-subdued"},N={class:"field"},q={class:"value"},D={class:"field full"},M={class:"value text-block"},I={key:0,class:"ai-observations"},T={class:"metrics"},K={class:"page-title"},G={class:"page-url"},R={class:"drawer-content"},W={class:"form-section"},H={class:"field"},Z={class:"field"},J={class:"field"},Q={class:"field"},X={class:"field"},Y={class:"field"},ee={class:"field"},ae={class:"drawer-actions"};var te=t({__name:"module",setup(a){const t=e(),_=l([]),te=l(null),le=l(!1),ne=l(!1),ie=l(!1),se=l(!1),oe=l(!1),re=l(null),ue=l({company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}),de=l([]),ce=l([]),ve=n(()=>de.value.map(e=>({text:e.name,value:e.id}))),pe=n(()=>ce.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function me(e){var a;return e.company?"object"==typeof e.company?e.company.name:(null==(a=de.value.find(a=>a.id===e.company))?void 0:a.name)||e.company_name:e.company_name}function fe(e){if(!e)return"";if("object"==typeof e)return`${e.first_name} ${e.last_name}`;const a=ce.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ge=n(()=>_.value.find(e=>e.id===te.value));async function be(){const[e,a,l]=await Promise.all([t.get("/items/leads",{params:{sort:"-date_created",fields:"*.*"}}),t.get("/items/people",{params:{sort:"last_name"}}),t.get("/items/companies",{params:{sort:"name"}})]);_.value=e.data.data,ce.value=a.data.data,de.value=l.data.data,!te.value&&_.value.length>0&&(te.value=_.value[0].id)}async function ye(){await be()}async function he(){if(te.value){le.value=!0;try{await t.post(`/acquisition/audit/${te.value}`),re.value={type:"success",message:"Audit erfolgreich gestartet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{le.value=!1}}}async function _e(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/audit-email/${te.value}`),re.value={type:"success",message:"Audit E-Mail versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}async function xe(){if(te.value){ne.value=!0;try{await t.post(`/acquisition/estimate/${te.value}`),re.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{ne.value=!1}}}async function we(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/estimate-email/${te.value}`),re.value={type:"success",message:"Angebot erfolgreich versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}function ke(){var e;(null==(e=ge.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ge.value.audit_pdf_path}`,"_blank")}async function Ve(){if(ue.value.company_name||ue.value.company){oe.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&V(e,t,a[t]);return e})({id:crypto.randomUUID()},ue.value);await t.post("/items/leads",e),re.value={type:"success",message:"Lead erfolgreich registriert!"},se.value=!1,await ye(),te.value=e.id,ue.value={company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}}catch(e){re.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{oe.value=!1}}else re.value={type:"danger",message:"Firma oder Firmenname erforderlich."}}function Ae(e){switch(e){case"new":return"fiber_new";case"auditing":return"hourglass_empty";case"audit_ready":return"check_circle";case"contacted":return"mail_outline";default:return"help_outline"}}function $e(e){switch(e){case"new":return"var(--theme--primary)";case"auditing":return"var(--theme--warning)";case"audit_ready":return"var(--theme--success)";case"contacted":return"var(--theme--secondary)";default:return"var(--theme--foreground-subdued)"}}return i(be),(e,a)=>{const t=s("v-icon"),l=s("v-list-item-icon"),n=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),V=s("v-notice"),de=s("v-button"),ce=s("v-info"),be=s("v-table"),ye=s("v-select"),Ce=s("v-input"),Fe=s("v-textarea"),Ue=s("v-drawer"),Oe=s("private-view"),je=o("tooltip");return r(),u(Oe,{title:"Acquisition Manager"},{navigation:d(()=>[c(k,{nav:""},{default:d(()=>[c(x,{onClick:a[0]||(a[0]=e=>se.value=!0),clickable:""},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:d(()=>[c(n,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(r(!0),v(p,null,m(_.value,e=>(r(),u(x,{key:e.id,active:te.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(te.value=t);var t}},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:Ae(e.status),color:$e(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:d(()=>[c(n,{text:me(e)},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":d(()=>[re.value?(r(),u(V,{key:0,type:re.value.type,onClose:a[1]||(a[1]=e=>re.value=null),dismissible:""},{default:d(()=>[f(g(re.value.message),1)]),_:1},8,["type"])):b("v-if",!0)]),default:d(()=>{var e;return[y("div",A,[c(V,{type:"success",style:{"margin-bottom":"16px"}},{default:d(()=>[f(" DEBUG: Module Version 1.1.0 - Native Build - "+g((new Date).toISOString()),1)]),_:1}),ge.value?(r(),v(p,{key:1},[y("header",C,[y("div",F,[y("h1",U,g(me(ge.value)),1),y("p",O,[c(t,{name:"language","x-small":""}),y("a",{href:ge.value.website_url,target:"_blank",class:"url-link"},g(ge.value.website_url.replace(/^https?:\/\//,"")),9,j),f(" · Status: "+g(ge.value.status.toUpperCase()),1)])]),y("div",P,["new"===ge.value.status?(r(),u(de,{key:0,secondary:"",loading:le.value,onClick:he},{default:d(()=>[c(t,{name:"settings_suggest",left:""}),a[16]||(a[16]=f(" Audit starten ",-1))]),_:1},8,["loading"])):b("v-if",!0),"audit_ready"===ge.value.status?(r(),v(p,{key:1},[c(de,{secondary:"",loading:ie.value,onClick:_e},{default:d(()=>[c(t,{name:"mail",left:""}),a[17]||(a[17]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(de,{loading:ne.value,onClick:xe},{default:d(()=>[c(t,{name:"picture_as_pdf",left:""}),a[18]||(a[18]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):b("v-if",!0),ge.value.audit_pdf_path?h((r(),u(de,{key:2,secondary:"",icon:"",onClick:ke},{default:d(()=>[c(t,{name:"open_in_new"})]),_:1})),[[je,"PDF öffnen",void 0,{bottom:!0}]]):b("v-if",!0),ge.value.audit_pdf_path?(r(),u(de,{key:3,primary:"",loading:ie.value,onClick:we},{default:d(()=>[c(t,{name:"send",left:""}),a[19]||(a[19]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):b("v-if",!0)])]),y("div",E,[y("div",L,[y("div",S,[y("div",z,[a[20]||(a[20]=y("span",{class:"label"},"Kontaktperson",-1)),ge.value.contact_person?(r(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ge.value.contact_person,void(re.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},g(fe(ge.value.contact_person)),1)):(r(),v("div",B,"Keine Person verknüpft"))]),y("div",N,[a[21]||(a[21]=y("span",{class:"label"},"E-Mail (Legacy)",-1)),y("div",q,g(ge.value.contact_email||"—"),1)]),y("div",D,[a[22]||(a[22]=y("span",{class:"label"},"Briefing / Fokus",-1)),y("div",M,g(ge.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ge.value.ai_state?(r(),v("div",I,[a[23]||(a[23]=y("h3",{class:"section-title"},"AI Observations & Estimation",-1)),y("div",T,[c(ce,{label:"Projekt-Modus",value:ge.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(ce,{label:"Seitenanzahl",value:(null==(e=ge.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ge.value.ai_state.sitemap?(r(),u(be,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ge.value.ai_state.sitemap,class:"observation-table"},{"item.title":d(({item:e})=>[y("span",K,g(e.title),1)]),"item.url":d(({item:e})=>[y("span",G,g(e.url),1)]),_:2},1032,["items"])):b("v-if",!0)])):b("v-if",!0)])],64)):(r(),v("div",$,[c(ce,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:d(()=>[a[14]||(a[14]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(de,{"x-small":"",onClick:a[2]||(a[2]=e=>se.value=!0)},{default:d(()=>[...a[13]||(a[13]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[15]||(a[15]=f(". ",-1))]),_:1})]))]),c(Ue,{modelValue:se.value,"onUpdate:modelValue":a[11]||(a[11]=e=>se.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[12]||(a[12]=e=>se.value=!1)},{default:d(()=>[y("div",R,[y("div",W,[y("div",H,[a[24]||(a[24]=y("span",{class:"label"},"Organisation / Firma (Zentral)",-1)),c(ye,{modelValue:ue.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>ue.value.company=e),items:ve.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),y("div",Z,[a[25]||(a[25]=y("span",{class:"label"},"Organisation / Firma (Legacy / Neu)",-1)),c(Ce,{modelValue:ue.value.company_name,"onUpdate:modelValue":a[5]||(a[5]=e=>ue.value.company_name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),y("div",J,[a[26]||(a[26]=y("span",{class:"label"},"Website URL",-1)),c(Ce,{modelValue:ue.value.website_url,"onUpdate:modelValue":a[6]||(a[6]=e=>ue.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),y("div",Q,[a[27]||(a[27]=y("span",{class:"label"},"Ansprechpartner",-1)),c(Ce,{modelValue:ue.value.contact_name,"onUpdate:modelValue":a[7]||(a[7]=e=>ue.value.contact_name=e),placeholder:"Vorname Nachname"},null,8,["modelValue"])]),y("div",X,[a[28]||(a[28]=y("span",{class:"label"},"E-Mail Adresse",-1)),c(Ce,{modelValue:ue.value.contact_email,"onUpdate:modelValue":a[8]||(a[8]=e=>ue.value.contact_email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),y("div",Y,[a[29]||(a[29]=y("span",{class:"label"},"Briefing / Fokus",-1)),c(Fe,{modelValue:ue.value.briefing,"onUpdate:modelValue":a[9]||(a[9]=e=>ue.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),y("div",ee,[a[30]||(a[30]=y("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(ye,{modelValue:ue.value.contact_person,"onUpdate:modelValue":a[10]||(a[10]=e=>ue.value.contact_person=e),items:pe.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),y("div",ae,[c(de,{primary:"",block:"",loading:oe.value,onClick:Ve},{default:d(()=>[...a[31]||(a[31]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),le=[],ne=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,l=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=le.indexOf(i);-1===s&&(s=le.push(i)-1,ne[s]={}),t=ne[s]&&ne[s][l]?ne[s][l]:ne[s][l]=o()}else t=o();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function o(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),n=0;n{const t=e.__vccOpts||e;for(const[e,l]of a)t[e]=l;return t})(te,[["__scopeId","data-v-c729ebea"],["__file","module.vue"]]),se=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ie},{path:":id",component:ie,props:!0}]});export{se as default}; diff --git a/directus/extensions/acquisition-manager/package.json b/directus/extensions/acquisition-manager/package.json deleted file mode 100644 index 7ac8793..0000000 --- a/directus/extensions/acquisition-manager/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "acquisition-manager", - "description": "Custom High-Fidelity Acquisition Management for Directus", - "icon": "account_balance_wallet", - "version": "1.8.0", - "type": "module", - "keywords": [ - "directus", - "directus-extension", - "directus-extension-module" - ], - "files": [ - "dist" - ], - "directus:extension": { - "type": "module", - "path": "index.js", - "source": "src/index.ts", - "host": "*", - "name": "Acquisition Manager" - }, - "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", - "dev": "directus-extension build -w" - }, - "devDependencies": { - "@directus/extensions-sdk": "11.0.2", - "vue": "^3.4.0" - } -} diff --git a/directus/extensions/acquisition/package.json b/directus/extensions/acquisition/package.json deleted file mode 100644 index a9cfb5d..0000000 --- a/directus/extensions/acquisition/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "acquisition", - "version": "1.8.0", - "type": "module", - "directus:extension": { - "type": "endpoint", - "path": "dist/index.js", - "source": "src/index.ts", - "host": "^11.0.0" - }, - "scripts": { - "build": "node build.mjs", - "dev": "node build.mjs --watch" - }, - "devDependencies": { - "@directus/extensions-sdk": "11.0.2", - "@mintel/acquisition": "workspace:*", - "@mintel/mail": "workspace:*", - "esbuild": "^0.25.0", - "typescript": "^5.6.3" - }, - "dependencies": { - "jquery": "^3.7.1", - "react": "^19.2.4", - "react-dom": "^19.2.4" - } -} diff --git a/directus/extensions/customer-manager/index.js b/directus/extensions/customer-manager/index.js deleted file mode 100644 index 8ac8e9c..0000000 --- a/directus/extensions/customer-manager/index.js +++ /dev/null @@ -1 +0,0 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,onMounted as n,resolveComponent as i,resolveDirective as s,openBlock as d,createBlock as r,withCtx as u,createVNode as o,createElementBlock as m,Fragment as c,renderList as v,createTextVNode as p,toDisplayString as f,createCommentVNode as g,createElementVNode as y,withDirectives as b,nextTick as _}from"vue";const h={class:"content-wrapper"},x={key:0,class:"empty-state"},w={class:"header"},k={class:"header-left"},V={class:"title"},C={class:"subtitle"},M={class:"header-right"},F={class:"user-cell"},N={class:"user-name"},z={key:0,class:"status-date"},E={key:0,class:"drawer-content"},U={class:"form-section"},S={class:"field"},A={class:"drawer-actions"},T={key:0,class:"drawer-content"},Z={class:"form-section"},j={class:"field"},$={class:"field"},D={class:"field"},O={key:1,class:"field"},W={class:"drawer-actions"};var q=t({__name:"module",setup(a){const t=e(),q=l([]),B=l(null),K=l([]),L=l(!1),P=l(!1),G=l(null),I=l(null),H=l(!1),J=l(!1),Q=l({id:"",name:""}),R=l(!1),X=l(!1),Y=l({id:"",first_name:"",last_name:"",email:"",temporary_password:""}),ee=[{text:"Name",value:"name",sortable:!0},{text:"E-Mail",value:"email",sortable:!0},{text:"Zuletzt eingeladen",value:"last_invited",sortable:!0}];async function ae(){const e=await t.get("/items/companies",{params:{fields:["id","name"],sort:"name"}});q.value=e.data.data}async function te(e){B.value=e,L.value=!0;try{const a=await t.get("/items/client_users",{params:{filter:{company:{_eq:e.id}},fields:["*"],sort:"first_name"}});K.value=a.data.data}finally{L.value=!1}}function le(){J.value=!1,Q.value={id:"",name:""},H.value=!0}async function ne(){B.value&&(Q.value={id:B.value.id,name:B.value.name},J.value=!0,await _(),H.value=!0)}async function ie(){var e;if(Q.value.name){P.value=!0;try{J.value?(await t.patch(`/items/companies/${Q.value.id}`,{name:Q.value.name}),I.value={type:"success",message:"Firma aktualisiert!"}):(await t.post("/items/companies",{name:Q.value.name}),I.value={type:"success",message:"Firma angelegt!"}),H.value=!1,await ae(),(null==(e=B.value)?void 0:e.id)===Q.value.id&&(B.value.name=Q.value.name)}catch(e){I.value={type:"danger",message:e.message}}finally{P.value=!1}}}function se(){X.value=!1,Y.value={id:"",first_name:"",last_name:"",email:"",temporary_password:""},R.value=!0}async function de(){if(Y.value.email&&B.value){P.value=!0;try{X.value?(await t.patch(`/items/client_users/${Y.value.id}`,{first_name:Y.value.first_name,last_name:Y.value.last_name,email:Y.value.email}),I.value={type:"success",message:"Mitarbeiter aktualisiert!"}):(await t.post("/items/client_users",{first_name:Y.value.first_name,last_name:Y.value.last_name,email:Y.value.email,company:B.value.id}),I.value={type:"success",message:"Mitarbeiter angelegt!"}),R.value=!1,await te(B.value)}catch(e){I.value={type:"danger",message:e.message}}finally{P.value=!1}}}function re(e){const a=(null==e?void 0:e.item)||e;a&&a.id&&async function(e){Y.value={id:e.id||"",first_name:e.first_name||"",last_name:e.last_name||"",email:e.email||"",temporary_password:e.temporary_password||""},X.value=!0,await _(),R.value=!0}(a)}return n(()=>{ae()}),(e,a)=>{const l=i("v-icon"),n=i("v-list-item-icon"),_=i("v-text-overflow"),ae=i("v-list-item-content"),ue=i("v-list-item"),oe=i("v-divider"),me=i("v-list"),ce=i("v-notice"),ve=i("v-button"),pe=i("v-info"),fe=i("v-avatar"),ge=i("v-chip"),ye=i("v-table"),be=i("v-input"),_e=i("v-drawer"),he=i("private-view"),xe=s("tooltip");return d(),r(he,{title:"Customer Manager"},{navigation:u(()=>[o(me,{nav:""},{default:u(()=>[o(ue,{onClick:le,clickable:""},{default:u(()=>[o(n,null,{default:u(()=>[o(l,{name:"add",color:"var(--theme--primary)"})]),_:1}),o(ae,null,{default:u(()=>[o(_,{text:"Neue Firma anlegen"})]),_:1})]),_:1}),o(oe),(d(!0),m(c,null,v(q.value,e=>{var a;return d(),r(ue,{key:e.id,active:(null==(a=B.value)?void 0:a.id)===e.id,class:"company-item",clickable:"",onClick:a=>te(e)},{default:u(()=>[o(n,null,{default:u(()=>[o(l,{name:"business"})]),_:1}),o(ae,null,{default:u(()=>[o(_,{text:e.name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),"title-outer:after":u(()=>[I.value?(d(),r(ce,{key:0,type:I.value.type,onClose:a[0]||(a[0]=e=>I.value=null),dismissible:""},{default:u(()=>[p(f(I.value.message),1)]),_:1},8,["type"])):g("v-if",!0)]),default:u(()=>[y("div",h,[B.value?(d(),m(c,{key:1},[y("header",w,[y("div",k,[y("h1",V,f(B.value.name),1),y("p",C,f(K.value.length)+" Kunden-Mitarbeiter",1)]),y("div",M,[b((d(),r(ve,{secondary:"",rounded:"",icon:"",onClick:ne},{default:u(()=>[o(l,{name:"edit"})]),_:1})),[[xe,"Firma bearbeiten",void 0,{bottom:!0}]]),o(ve,{primary:"",onClick:se},{default:u(()=>[...a[14]||(a[14]=[p(" Mitarbeiter hinzufügen ",-1)])]),_:1})])]),o(ye,{headers:ee,items:K.value,loading:L.value,class:"clickable-table","fixed-header":"","onClick:row":re},{"item.name":u(({item:e})=>[y("div",F,[o(fe,{name:e.first_name,"x-small":""},null,8,["name"]),y("span",N,f(e.first_name)+" "+f(e.last_name),1)])]),"item.last_invited":u(({item:e})=>{return[e.last_invited?(d(),m("span",z,f((t=e.last_invited,new Date(t).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}))),1)):(d(),r(ge,{key:1,"x-small":""},{default:u(()=>[...a[15]||(a[15]=[p("Noch nie",-1)])]),_:1}))];var t}),_:2},1032,["items","loading"])],64)):(d(),m("div",x,[o(pe,{title:"Firmen auswählen",icon:"business",center:""},{default:u(()=>[a[12]||(a[12]=p(" Wähle eine Firma in der Navigation aus oder ",-1)),o(ve,{"x-small":"",onClick:le},{default:u(()=>[...a[11]||(a[11]=[p("erstelle eine neue Firma",-1)])]),_:1}),a[13]||(a[13]=p(". ",-1))]),_:1})]))]),o(_e,{modelValue:H.value,"onUpdate:modelValue":a[2]||(a[2]=e=>H.value=e),title:J.value?"Firma bearbeiten":"Neue Firma anlegen",icon:"business",onCancel:a[3]||(a[3]=e=>H.value=!1)},{default:u(()=>[H.value?(d(),m("div",E,[y("div",U,[y("div",S,[a[16]||(a[16]=y("span",{class:"label"},"Firmenname",-1)),o(be,{modelValue:Q.value.name,"onUpdate:modelValue":a[1]||(a[1]=e=>Q.value.name=e),placeholder:"z.B. KLZ Cables",autofocus:""},null,8,["modelValue"])])]),y("div",A,[o(ve,{primary:"",block:"",loading:P.value,onClick:ie},{default:u(()=>[...a[17]||(a[17]=[p("Speichern",-1)])]),_:1},8,["loading"])])])):g("v-if",!0)]),_:1},8,["modelValue","title"]),o(_e,{modelValue:R.value,"onUpdate:modelValue":a[9]||(a[9]=e=>R.value=e),title:X.value?"Mitarbeiter bearbeiten":"Neuen Mitarbeiter anlegen",icon:"person",onCancel:a[10]||(a[10]=e=>R.value=!1)},{default:u(()=>[R.value?(d(),m("div",T,[y("div",Z,[y("div",j,[a[18]||(a[18]=y("span",{class:"label"},"Vorname",-1)),o(be,{modelValue:Y.value.first_name,"onUpdate:modelValue":a[4]||(a[4]=e=>Y.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),y("div",$,[a[19]||(a[19]=y("span",{class:"label"},"Nachname",-1)),o(be,{modelValue:Y.value.last_name,"onUpdate:modelValue":a[5]||(a[5]=e=>Y.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),y("div",D,[a[20]||(a[20]=y("span",{class:"label"},"E-Mail",-1)),o(be,{modelValue:Y.value.email,"onUpdate:modelValue":a[6]||(a[6]=e=>Y.value.email=e),placeholder:"E-Mail Adresse",type:"email"},null,8,["modelValue"])]),X.value?(d(),r(oe,{key:0})):g("v-if",!0),X.value?(d(),m("div",O,[a[21]||(a[21]=y("span",{class:"label"},"Temporäres Passwort",-1)),o(be,{modelValue:Y.value.temporary_password,"onUpdate:modelValue":a[7]||(a[7]=e=>Y.value.temporary_password=e),readonly:"",class:"password-input"},null,8,["modelValue"]),a[22]||(a[22]=y("p",{class:"field-note"},"Wird beim Senden der Zugangsdaten automatisch generiert.",-1))])):g("v-if",!0)]),y("div",W,[o(ve,{primary:"",block:"",loading:P.value,onClick:de},{default:u(()=>[...a[23]||(a[23]=[p("Daten speichern",-1)])]),_:1},8,["loading"]),X.value?(d(),m(c,{key:0},[o(oe),b((d(),r(ve,{secondary:"",block:"",loading:G.value===Y.value.id,onClick:a[8]||(a[8]=e=>async function(e){G.value=e.id;try{if(await t.post("/flows/trigger/33443f6b-cec7-4668-9607-f33ea674d501",[e.id]),I.value={type:"success",message:`Zugangsdaten für ${e.first_name} versendet. 📧`},await te(B.value),R.value&&Y.value.id===e.id){const a=K.value.find(a=>a.id===e.id);a&&(Y.value.temporary_password=a.temporary_password)}}catch(e){I.value={type:"danger",message:`Fehler: ${e.message}`}}finally{G.value=null}}(Y.value))},{default:u(()=>[o(l,{name:"send",left:""}),a[24]||(a[24]=p(" Zugangsdaten senden ",-1))]),_:1},8,["loading"])),[[xe,"Generiert PW, speichert es und sendet E-Mail",void 0,{bottom:!0}]])],64)):g("v-if",!0)])])):g("v-if",!0)]),_:1},8,["modelValue","title"])]),_:1})}}}),B=[],K=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,l=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=B.indexOf(i);-1===s&&(s=B.push(i)-1,K[s]={}),t=K[s]&&K[s][l]?K[s][l]:K[s][l]=d()}else t=d();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function d(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),n=0;n{const t=e.__vccOpts||e;for(const[e,l]of a)t[e]=l;return t})(q,[["__scopeId","data-v-3fd11e72"],["__file","module.vue"]])}]});export{L as default}; diff --git a/directus/extensions/customer-manager/package.json b/directus/extensions/customer-manager/package.json deleted file mode 100644 index 3f78767..0000000 --- a/directus/extensions/customer-manager/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "customer-manager", - "description": "Custom High-Fidelity Customer & Company Management for Directus", - "icon": "supervisor_account", - "version": "1.8.0", - "type": "module", - "keywords": [ - "directus", - "directus-extension", - "directus-extension-module" - ], - "files": [ - "dist" - ], - "directus:extension": { - "type": "module", - "path": "index.js", - "source": "src/index.ts", - "host": "*", - "name": "Customer Manager" - }, - "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", - "dev": "directus-extension build -w" - }, - "devDependencies": { - "@directus/extensions-sdk": "11.0.2", - "vue": "^3.4.0" - } -} diff --git a/directus/extensions/feedback-commander/index.js b/directus/extensions/feedback-commander/index.js deleted file mode 100644 index f28e389..0000000 --- a/directus/extensions/feedback-commander/index.js +++ /dev/null @@ -1 +0,0 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as l,onMounted as r,resolveComponent as o,openBlock as d,createBlock as s,withCtx as i,createVNode as c,createTextVNode as u,toDisplayString as p,createElementVNode as v,createElementBlock as b,Fragment as m,renderList as f,createCommentVNode as x,TransitionGroup as g,normalizeClass as h,normalizeStyle as y,Transition as k}from"vue";const _={class:"sidebar-header"},w={class:"feedback-container"},C={key:0,class:"empty-state"},j={key:1,class:"empty-state"},S={key:2,class:"operational-layout"},z={class:"triage-lane"},F={class:"lane-header"},A={class:"lane-content scrollbar"},E=["onClick"],T={class:"card-body"},V={class:"card-header"},D={class:"card-user"},P={class:"card-date"},L={class:"card-text"},O={class:"card-footer"},I={class:"meta-tags"},R={class:"processing-desk scrollbar"},U={class:"desk-header"},M={class:"headline-group"},Y={class:"status-indicator"},q={class:"status-text"},B={class:"header-actions"},N={class:"desk-grid"},H={class:"main-column"},W={key:0,class:"visual-proof"},X={class:"proof-label"},$=["src"],G={class:"main-text"},J={class:"reply-section"},K={class:"section-divider"},Q={class:"thread"},Z={class:"reply-header"},ee={class:"reply-user"},ae={class:"reply-date"},te={class:"reply-text"},ne={key:0,class:"empty-state-mini"},le={class:"composer"},re={class:"composer-actions"},oe={class:"meta-column"},de={class:"meta-item"},se={class:"meta-item"},ie=["title"],ce={class:"meta-item"},ue={class:"trace-code"},pe={class:"meta-item"},ve={class:"coords"},be={class:"meta-item"},me={class:"id-code"},fe={class:"help-box"},xe={key:1,class:"no-selection-desk"};var ge=t({__name:"module",setup(a){const t=e(),ge=n([]),he=n([]),ye=n(!0),ke=n(null),_e=n(!1),we=n(null),Ce=n("all"),je=n("open"),Se=n(""),ze=[{text:"Open",value:"open",icon:"warning",color:"#E91E63"},{text:"In Progress",value:"in_progress",icon:"play_arrow",color:"#2196F3"},{text:"Resolved",value:"resolved",icon:"check_circle",color:"#4CAF50"}],Fe=[{text:"All Statuses",value:"all"},...ze],Ae=l(()=>{const e=new Set(ge.value.map(e=>e.project).filter(Boolean));return Array.from(e).sort()}),Ee=l(()=>ge.value.filter(e=>{const a="all"===Ce.value||e.project===Ce.value,t=e.status||"open",n="all"===je.value||t===je.value;return a&&n}));async function Te(){ye.value=!0,ke.value=null;try{const e=await t.get("/items/visual_feedback",{params:{sort:"-date_created,-id",limit:300}});ge.value=e.data.data}catch(e){ke.value=e.message}finally{ye.value=!1}}async function Ve(e){if(we.value)try{await t.patch(`/items/visual_feedback/${we.value.id}`,{status:e}),Te()}catch(e){console.error(e)}}async function De(){if(Se.value.trim()&&we.value){_e.value=!0;try{const e=await t.post("/items/visual_feedback_comments",{feedback_id:we.value.id,user_name:"Operator",text:Se.value});he.value.unshift(e.data.data),Se.value=""}catch(e){console.error(e)}finally{_e.value=!1}}}function Pe(e){return e&&"number"!=typeof e?new Date(e).toLocaleDateString()+" "+new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"Legacy"}function Le(e){const a=function(e){if(!e||!e.url)return"";try{const a=new URL(e.url);return a.searchParams.set("fb_id",e.id),a.toString()}catch(a){return e.url+"?fb_id="+e.id}}(e);a&&window.open(a,"_blank")}function Oe(e){const a=ze.find(a=>a.value===e);return a?a.color:"var(--foreground-subdued)"}return r(()=>{Te()}),(e,a)=>{const n=o("v-breadcrumb"),l=o("v-chip"),r=o("v-text-overflow"),Ie=o("v-icon"),Re=o("v-list-item-icon"),Ue=o("v-list-item-content"),Me=o("v-list-item"),Ye=o("v-list"),qe=o("v-info"),Be=o("v-button"),Ne=o("v-select"),He=o("v-card-title"),We=o("v-card-text"),Xe=o("v-card"),$e=o("v-divider"),Ge=o("v-textarea"),Je=o("private-view");return d(),s(Je,{title:"Feedback Commander"},{headline:i(()=>[c(n,{items:[{name:"Feedback",to:"/feedback-commander"}]})]),"title-outer:after":i(()=>[ye.value?(d(),s(l,{key:0,label:"",color:"blue",small:""},{default:i(()=>[...a[6]||(a[6]=[u("Loading...",-1)])]),_:1})):ke.value?(d(),s(l,{key:1,label:"",color:"red",small:""},{default:i(()=>[...a[7]||(a[7]=[u("Fetch Error",-1)])]),_:1})):(d(),s(l,{key:2,label:"",color:"green",small:""},{default:i(()=>[u(p(ge.value.length)+" Items",1)]),_:1}))]),navigation:i(()=>[v("div",_,[c(r,{text:"Websites",class:"header-text"})]),c(Ye,{nav:""},{default:i(()=>[c(Me,{active:"all"===Ce.value,onClick:a[0]||(a[0]=e=>Ce.value="all"),clickable:""},{default:i(()=>[c(Re,null,{default:i(()=>[c(Ie,{name:"language"})]),_:1}),c(Ue,null,{default:i(()=>[c(r,{text:"All Projects"})]),_:1})]),_:1},8,["active"]),(d(!0),b(m,null,f(Ae.value,e=>(d(),s(Me,{key:e,active:Ce.value===e,onClick:a=>Ce.value=e,clickable:""},{default:i(()=>[c(Re,null,{default:i(()=>[c(Ie,{name:"public",color:"var(--primary)"})]),_:1}),c(Ue,null,{default:i(()=>[c(r,{text:e||"Unknown"},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),default:i(()=>[v("div",w,[ge.value.length||ye.value||ke.value?x("v-if",!0):(d(),b("div",C,[c(qe,{icon:"inbox",title:"Clean Inbox",center:""},{default:i(()=>[...a[8]||(a[8]=[u(" All feedback has been processed. Great job! ",-1)])]),_:1})])),ke.value?(d(),b("div",j,[c(qe,{icon:"error",title:"Fetch Failed",description:ke.value,center:""},null,8,["description"]),c(Be,{onClick:Te,secondary:"",small:""},{default:i(()=>[...a[9]||(a[9]=[u("Retry",-1)])]),_:1})])):ge.value.length?(d(),b("div",S,[x(" Detailed Triage Lane "),v("aside",z,[v("div",F,[c(Ne,{modelValue:je.value,"onUpdate:modelValue":a[1]||(a[1]=e=>je.value=e),items:Fe,small:"",placeholder:"Status Filter"},null,8,["modelValue"])]),v("div",A,[c(g,{name:"list"},{default:i(()=>[(d(!0),b(m,null,f(Ee.value,e=>{var a,n;return d(),b("div",{key:e.id,class:h(["feedback-card",{active:(null==(a=we.value)?void 0:a.id)===e.id}]),onClick:a=>async function(e){we.value=null,setTimeout(async()=>{we.value=e,he.value=[];try{const a=await t.get("/items/visual_feedback_comments",{params:{filter:{feedback_id:{_eq:e.id}},sort:"-date_created,-id"}});he.value=a.data.data}catch(e){console.error(e)}},10)}(e)},[v("div",{class:"card-status-bar",style:y({background:Oe(e.status||"open")})},null,4),v("div",T,[v("header",V,[v("span",D,p(e.user_name),1),v("span",P,p(Pe(e.date_created||e.id)),1)]),v("div",L,p(e.text),1),v("footer",O,[v("div",I,[c(l,{"x-small":"",outline:""},{default:i(()=>[u(p(e.project),1)]),_:2},1024),c(Ie,{name:"bug"===e.type?"bug_report":"lightbulb",color:"bug"===e.type?"#E91E63":"#FFC107",small:""},null,8,["name","color"])]),(null==(n=we.value)?void 0:n.id)===e.id?(d(),s(Ie,{key:0,name:"chevron_right",small:""})):x("v-if",!0)])])],10,E)}),128))]),_:1})])]),x(" Elaborated Master-Detail Desk "),v("main",R,[c(k,{name:"fade",mode:"out-in"},{default:i(()=>{return[we.value?(d(),b("div",{key:we.value.id,class:"desk-content"},[v("header",U,[v("div",M,[v("div",Y,[v("div",{class:"status-dot",style:y({background:Oe(we.value.status||"open")})},null,4),v("span",q,p((e=we.value.status||"open",e.charAt(0).toUpperCase()+e.slice(1).replace("_"," "))),1)]),v("h2",null,p(we.value.user_name)+"'s Submission",1)]),v("div",B,[c(Be,{primary:"",onClick:a[2]||(a[2]=e=>Le(we.value))},{default:i(()=>[c(Ie,{name:"open_in_new",left:""}),a[10]||(a[10]=u(" Open & Highlight ",-1))]),_:1}),c(Ne,{modelValue:we.value.status,"onUpdate:modelValue":[a[3]||(a[3]=e=>we.value.status=e),Ve],items:ze,inline:""},null,8,["modelValue"])])]),v("div",N,[x(" Message Container "),v("div",H,[c(Xe,{class:"content-card"},{default:i(()=>[c(He,null,{default:i(()=>[c(Ie,{name:"format_quote",left:""}),a[11]||(a[11]=u(" Feedback Content ",-1))]),_:1}),c(We,{class:"feedback-body"},{default:i(()=>{return[we.value.screenshot?(d(),b("div",W,[v("label",X,[c(Ie,{name:"photo","x-small":""}),a[12]||(a[12]=u(" Element Snapshot",-1))]),v("img",{src:(e=we.value.screenshot,e?`/assets/${e}`:""),class:"screenshot-img"},null,8,$)])):x("v-if",!0),v("div",G,p(we.value.text),1)];var e}),_:1})]),_:1}),v("section",J,[v("div",K,[c($e),a[13]||(a[13]=v("span",{class:"divider-label"},"Internal Communication",-1)),c($e)]),v("div",Q,[c(g,{name:"thread-list"},{default:i(()=>[(d(!0),b(m,null,f(he.value,e=>(d(),b("div",{key:e.id,class:"reply-bubble"},[v("header",Z,[v("span",ee,p(e.user_name),1),v("span",ae,p(Pe(e.date_created||e.id)),1)]),v("div",te,p(e.text),1)]))),128))]),_:1}),he.value.length?x("v-if",!0):(d(),b("div",ne,[c(Ie,{name:"auto_awesome",small:""}),a[14]||(a[14]=u(" No replies yet. Start the thread. ",-1))]))]),v("div",le,[c(Ge,{modelValue:Se.value,"onUpdate:modelValue":a[4]||(a[4]=e=>Se.value=e),placeholder:"Compose internal response...","auto-grow":""},null,8,["modelValue"]),v("div",re,[c(Be,{secondary:"",loading:_e.value,onClick:De},{default:i(()=>[...a[15]||(a[15]=[u("Post Reply",-1)])]),_:1},8,["loading"])])])])]),x(" Technical Sidebar "),v("aside",oe,[c(Xe,{class:"meta-card"},{default:i(()=>[c(He,null,{default:i(()=>[...a[16]||(a[16]=[u("Context",-1)])]),_:1}),c(We,{class:"meta-list"},{default:i(()=>{return[v("div",de,[v("label",null,[c(Ie,{name:"public","x-small":""}),a[17]||(a[17]=u(" Website",-1))]),v("strong",null,p(we.value.project),1)]),v("div",se,[v("label",null,[c(Ie,{name:"link","x-small":""}),a[18]||(a[18]=u(" Source Path",-1))]),v("span",{class:"truncate-path",title:we.value.url},p((e=we.value.url,e?e.replace(/^https?:\/\//,""):"")),9,ie),c(Be,{icon:"",small:"",onClick:a[5]||(a[5]=e=>function(e){e&&window.open(e,"_blank")}(we.value.url))},{default:i(()=>[c(Ie,{name:"launch"})]),_:1})]),c($e),v("div",ce,[v("label",null,[c(Ie,{name:"layers","x-small":""}),a[19]||(a[19]=u(" Element Trace",-1))]),v("code",ue,p(we.value.selector||"Body"),1)]),v("div",pe,[v("label",null,[c(Ie,{name:"location_searching","x-small":""}),a[20]||(a[20]=u(" Precise Mark",-1))]),v("span",ve,"X: "+p(Math.round(we.value.x))+"px / Y: "+p(Math.round(we.value.y))+"px",1)]),v("div",be,[v("label",null,[c(Ie,{name:"fingerprint","x-small":""}),a[21]||(a[21]=u(" Reference ID",-1))]),v("code",me,p(we.value.id),1)])];var e}),_:1})]),_:1}),v("div",fe,[c(Ie,{name:"help_outline","x-small":""}),a[22]||(a[22]=v("span",null,'Click "Open & Highlight" to jump directly to this element on the live site.',-1))])])])])):(d(),b("div",xe,[c(qe,{icon:"touch_app",title:"Select Feedback",center:""},{default:i(()=>[...a[23]||(a[23]=[u(" Choose an entry from the triage list to view details and process. ",-1)])]),_:1})]))];var e}),_:1})])])):x("v-if",!0)])]),_:1})}}}),he=[],ye=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,n=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,r="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var o=he.indexOf(r);-1===o&&(o=he.push(r)-1,ye[o]={}),t=ye[o]&&ye[o][n]?ye[o][n]:ye[o][n]=d()}else t=d();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function d(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(ge,[["__scopeId","data-v-409b935e"],["__file","module.vue"]])}]});export{ke as default}; diff --git a/directus/extensions/feedback-commander/package.json b/directus/extensions/feedback-commander/package.json deleted file mode 100644 index b382b0e..0000000 --- a/directus/extensions/feedback-commander/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "feedback-commander", - "description": "Custom High-Fidelity Feedback Management Extension for Directus", - "icon": "view_kanban", - "version": "1.8.0", - "type": "module", - "keywords": [ - "directus", - "directus-extension", - "directus-extension-module" - ], - "files": [ - "dist" - ], - "directus:extension": { - "type": "module", - "path": "index.js", - "source": "src/index.ts", - "host": "*", - "name": "Feedback Commander" - }, - "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", - "dev": "directus-extension build -w" - }, - "devDependencies": { - "@directus/extensions-sdk": "11.0.2", - "vue": "^3.4.0" - } -} diff --git a/directus/extensions/people-manager/index.js b/directus/extensions/people-manager/index.js deleted file mode 100644 index ecff1c0..0000000 --- a/directus/extensions/people-manager/index.js +++ /dev/null @@ -1 +0,0 @@ -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{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}; diff --git a/directus/extensions/people-manager/package.json b/directus/extensions/people-manager/package.json deleted file mode 100644 index a2f9220..0000000 --- a/directus/extensions/people-manager/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "people-manager", - "description": "Custom High-Fidelity People Management for Directus", - "icon": "person", - "version": "1.8.0", - "type": "module", - "keywords": [ - "directus", - "directus-extension", - "directus-extension-module" - ], - "files": [ - "dist" - ], - "directus:extension": { - "type": "module", - "path": "index.js", - "source": "src/index.ts", - "host": "*", - "name": "People Manager" - }, - "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", - "dev": "directus-extension build -w" - }, - "devDependencies": { - "@directus/extensions-sdk": "11.0.2", - "vue": "^3.4.0" - } -} diff --git a/packages/acquisition-manager/package.json b/packages/acquisition-manager/package.json index 080d408..7c35f7d 100644 --- a/packages/acquisition-manager/package.json +++ b/packages/acquisition-manager/package.json @@ -17,7 +17,7 @@ "name": "Acquisition Manager" }, "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", + "build": "directus-extension build && cp -f dist/index.js index.js 2>/dev/null || true", "dev": "directus-extension build -w" }, "devDependencies": { diff --git a/packages/customer-manager/package.json b/packages/customer-manager/package.json index d67b680..4739318 100644 --- a/packages/customer-manager/package.json +++ b/packages/customer-manager/package.json @@ -17,7 +17,7 @@ "name": "Customer Manager" }, "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", + "build": "directus-extension build && cp -f dist/index.js index.js 2>/dev/null || true", "dev": "directus-extension build -w" }, "devDependencies": { diff --git a/packages/feedback-commander/package.json b/packages/feedback-commander/package.json index 7accbbe..3a7bc87 100644 --- a/packages/feedback-commander/package.json +++ b/packages/feedback-commander/package.json @@ -17,7 +17,7 @@ "name": "Feedback Commander" }, "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", + "build": "directus-extension build && cp -f dist/index.js index.js 2>/dev/null || true", "dev": "directus-extension build -w" }, "devDependencies": { diff --git a/packages/people-manager/package.json b/packages/people-manager/package.json index 09d9630..1f0563d 100644 --- a/packages/people-manager/package.json +++ b/packages/people-manager/package.json @@ -19,7 +19,7 @@ "name": "People Manager" }, "scripts": { - "build": "directus-extension build && (cp -f dist/index.js index.js 2>/dev/null || true)", + "build": "directus-extension build && cp -f dist/index.js index.js 2>/dev/null || true", "dev": "directus-extension build -w" }, "devDependencies": { diff --git a/scripts/sync-extensions.sh b/scripts/sync-extensions.sh index 38b3ed2..3f7105d 100755 --- a/scripts/sync-extensions.sh +++ b/scripts/sync-extensions.sh @@ -4,15 +4,17 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" EXTENSIONS_ROOT="$REPO_ROOT/packages" -TARGET_DIR="$REPO_ROOT/directus/extensions" +TARGET_DIR="$REPO_ROOT/packages/cms-infra/extensions" # List of extensions to sync - including modules and endpoints EXTENSIONS=( "acquisition" "acquisition-manager" + "company-manager" "customer-manager" "feedback-commander" "people-manager" + "unified-dashboard" ) echo "🚀 Starting extension sync..."