PageSourceSearch

https://evotrademaster.com/assets/projects-LlJ0ABOc.js

js evotrademaster.com collected 2026-10-07 05:23:16 UTC 11,749 bytes, 6 lines download raw bytes

1import{c as J,h as Y,a as G,l as X,r as j,b as ee,d as x,j as e,D as te,n as ne,o as se,p as ie,q as ae,I as re,T as oe,B as F,f as g}from"./index-DXTtJwss.js";import{S as le}from"./topbar-streak-RTyeuXFh.js";import{F as de,a as c,b as u,c as h,d as b,e as k}from"./form-ceGa0r7E.js";import{A as L,b as D,c as M,d as E,e as T,f as B,g as z,h as $}from"./alert-dialog-BNbg8O25.js";import{u as ce,o as ue,s as w,b as he,a as me,e as pe,t as je}from"./types-CmWfF1Ds.js";import{A as xe,a as q}from"./admin-layout-CLmJ6RS5.js";import{V as d}from"./schema-oH9lt7Uk.js";import{C as ge}from"./checkbox-D6DRe390.js";import{P as be}from"./plus-DRgfo6TN.js";import{S as ke}from"./square-pen-B7qQ5V1b.js";import{T as ve}from"./trash-2-BG7269za.js";import"./sparkles-Ca2PVW2C.js";import"./index-B5TGNwOS.js";import"./newspaper-CMwKBSJ9.js";import"./user-plus-DXjjIoMF.js";import"./check-BlWbiilJ.js";import"./arrow-right-FoVPTiQJ.js";import"./impersonation-banner-CyivO7RV.js";import"./chart-column-CFTCrWQb.js";import"./users-6RemsLhk.js";import"./shield-check-3VI9NYEX.js";import"./building-2-CmQ96q9k.js";import"./network-BU2mxkwZ.js";import"./activity-Cxh2_r5x.js";import"./rocket-22MMBxQp.js";import"./shopping-cart-L5Ufj3SD.js";import"./graduation-cap-CpRLqcqW.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const ye=J("FolderInput",[["path",{d:"M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1",key:"fm4g5t"}],["path",{d:"M2 13h10",key:"pgb2dq"}],["path",{d:"m9 16 3-3-3-3",key:"6m91ic"}]]),Pe={news:"News",wirtschaftskalender:"Wirtschaftskalender",signals:"Trading-Signale",copytrading:"CopyTrading",academy:"Academy"},fe=ue({name:w().min(1,"Name ist erforderlich").max(100),description:w().optional(),color:w().min(1),isActive:he(),viewerMenuItems:me(pe(d))}),Ne=["#3b82f6","#10b981","#f59e0b","#ef4444","#8b5cf6","#ec4899","#06b6d4","#84cc16","#f97316","#6366f1"];function Ge(){const{hasPermission:v}=Y(),{toast:i}=G(),a=X(),K=v("projects","create"),C=v("projects","edit"),O=v("projects","delete"),[Q,r]=j.useState(!1),[m,S]=j.useState(null),[o,y]=j.useState(null),[l,P]=j.useState(null),{data:f=[],isLoading:V}=ee({queryKey:["/api/projects"]}),s=ce({resolver:je(fe),defaultValues:{name:"",description:"",color:"#3b82f6",isActive:!0,viewerMenuItems:[...d]}}),H=()=>{S(null),s.reset({name:"",description:"",color:"#3b82f6",isActive:!0,viewerMenuItems:[...d]}),r(!0)},R=t=>{S(t),s.reset({name:t.name,description:t.description??"",color:t.color??"#3b82f6",isActive:t.isActive,viewerMenuItems:Array.isArray(t.viewerMenuItems)?t.viewerMenuItems.filter(n=>d.includes(n)):[...d]}),r(!0)},p=()=>{a.invalidateQueries({queryKey:["/api/projects"]})},N=x({mutationFn:async t=>g("/api/projects",{method:"POST",body:{...t,description:t.description||null}}),onSuccess:()=>{p(),r(!1),i({title:"Projekt erstellt",description:"Das Projekt wurde erfolgreich angelegt."})},onError:t=>{i({title:"Fehler",description:(t==null?void 0:t.message)||"Projekt konnte nicht erstellt werden.",variant:"destructive"})}}),A=x({mutationFn:async({id:t,data:n})=>g(`/api/projects/${t}`,{method:"PATCH",body:{...n,description:n.description||null}}),onSuccess:()=>{p(),r(!1),i({title:"Projekt aktualisiert",description:"Die Änderungen wurden gespeichert."})},onError:t=>{i({title:"Fehler",description:(t==null?void 0:t.message)||"Projekt konnte nicht aktualisiert werden.",variant:"destructive"})}}),Z=x({mutationFn:async t=>g(`/api/projects/${t}`,{method:"DELETE"}),onSuccess:()=>{p(),a.invalidateQueries({queryKey:["/api/ib-partners"]}),a.invalidateQueries({queryKey:["/api/customers"]}),a.invalidateQueries({queryKey:["/api/ib-interessenten"]}),y(null),i({title:"Projekt gelöscht",description:"Das Projekt und alle Zuordnungen wurden entfernt."})},onError:t=>{i({title:"Fehler",description:(t==null?void 0:t.message)||"Projekt konnte nicht gelöscht werden.",variant:"destructive"})}}),I=x({mutationFn:async t=>g(`/api/projects/${t}/assign-all`,{method:"POST"}),onSuccess:async t=>{const n=typeof(t==null?void 0:t.json)=="function"?await t.json():t;p(),a.invalidateQueries({queryKey:["/api/ib-partners"]}),a.invalidateQueries({queryKey:["/api/customers"]}),a.invalidateQueries({queryKey:["/api/ib-interessenten"]}),P(null),i({title:"Alle zugeordnet",description:`${(n==null?void 0:n.ibPartners)??0} IB-Partner, ${(n==null?void 0:n.customers)??0} Leads und ${(n==null?void 0:n.ibInteressenten)??0} IB-Interessenten wurden dem Projekt zugeordnet.`})},onError:t=>{i({title:"Fehler",description:(t==null?void 0:t.message)||"Zuordnung fehlgeschlagen.",variant:"destructive"})}}),_=t=>{m?A.mutate({id:m.id,data:t}):N.mutate(t)};return e.jsxs(xe,{children:[e.jsxs("main",{className:"main",children:[e.jsxs("section",{className:"page-header",children:[e.jsxs("div",{children:[e.jsx("div",{className:"eyebrow",children:"Verwaltung & Zuordnung"}),e.jsx("h1",{"data-testid":"text-projects-title",children:"Projekte"})]}),K&&e.jsx("div",{className:"page-actions",children:e.jsxs("button",{className:"button button-primary",type:"button",onClick:H,"data-testid":"button-create-project",children:[e.jsx(be,{className:"icon"}),"Neues Projekt"]})})]}),e.jsxs("section",{className:"card table-card",children:[e.jsx("div",{className:"card-head",children:e.jsxs("div",{children:[e.jsx("span",{className:"eyebrow",children:"Übersicht"}),e.jsxs("h2",{children:["Alle Projekte ",e.jsx("span",{className:"count-badge",children:f.length})]}),e.jsx("p",{children:"Jedes Projekt kann IB-Partnern, Landingpages und Leads zugeordnet werden (z.B. Vantage, Tegas)."})]})}),V?e.jsxs("div",{className:"empty-hint",children:[e.jsx(q,{className:"icon"})," ",e.jsx("span",{children:"Projekte werden geladen..."})]}):f.length===0?e.jsxs("div",{className:"empty-hint","data-testid":"text-no-projects",children:[e.jsx(q,{className:"icon"})," ",e.jsx("span",{children:'Noch keine Projekte vorhanden. Legen Sie das erste Projekt an (z.B. „Vantage").'})]}):e.jsx("div",{className:"table-wrap",children:e.jsxs("table",{className:"data-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Projekt"}),e.jsx("th",{children:"Beschreibung"}),e.jsx("th",{children:"Status"}),e.jsx("th",{children:"Aktionen"})]})}),e.jsx("tbody",{children:f.map(t=>e.jsxs("tr",{"data-testid":`row-project-${t.id}`,children:[e.jsx("td",{"data-label":"Projekt",children:e.jsxs("div",{className:"table-person",children:[e.jsx("span",{className:"inline-block rounded-full shrink-0",style:{width:12,height:12,backgroundColor:t.color??"#3b82f6"}}),e.jsx("strong",{"data-testid":`text-project-name-${t.id}`,children:t.name})]})}),e.jsx("td",{"data-label":"Beschreibung",style:{color:"var(--tpl-muted)",maxWidth:300},children:t.description||"—"}),e.jsx("td",{"data-label":"Status",children:t.isActive?e.jsx("span",{className:"chip chip-green",children:"Aktiv"}):e.jsx("span",{className:"chip",children:"Inaktiv"})}),e.jsx("td",{"data-label":"Aktionen",children:e.jsxs("div",{className:"flex gap-2",children:[C&&e.jsx("button",{className:"icon-button",type:"button",title:"Alle IB-Partner, Leads & Landingpages diesem Projekt zuordnen",onClick:()=>P(t),"data-testid":`button-assign-all-project-${t.id}`,children:e.jsx(ye,{className:"icon"})}),C&&e.jsx("button",{className:"icon-button",type:"button",onClick:()=>R(t),"data-testid":`button-edit-project-${t.id}`,children:e.jsx(ke,{className:"icon"})}),O&&e.jsx("button",{className:"icon-button",type:"button",style:{color:"var(--tpl-red)"},onClick:()=>y(t),"data-testid":`button-delete-project-${t.id}`,children:e.jsx(ve,{className:"icon"})})]})})]},t.id))})]})})]})]}),e.jsx(te,{open:Q,onOpenChange:r,children:e.jsxs(ne,{children:[e.jsxs(se,{children:[e.jsx(ie,{children:m?"Projekt bearbeiten":"Neues Projekt"}),e.jsx(ae,{children:m?"Ändern Sie die Projektdaten.":"Legen Sie ein neues Projekt an, das Sie anschließend zuordnen können."})]}),e.jsx(de,{...s,children:e.jsxs("form",{onSubmit:s.handleSubmit(_),className:"space-y-4",children:[e.jsx(c,{control:s.control,name:"name",render:({field:t})=>e.jsxs(u,{children:[e.jsx(h,{children:"Name *"}),e.jsx(b,{children:e.jsx(re,{placeholder:"z.B. Vantage",...t,"data-testid":"input-project-name"})}),e.jsx(k,{})]})}),e.jsx(c,{control:s.control,name:"description",render:({field:t})=>e.jsxs(u,{children:[e.jsx(h,{children:"Beschreibung"}),e.jsx(b,{children:e.jsx(oe,{placeholder:"Optionale Beschreibung des Projekts",rows:3,...t,"data-testid":"input-project-description"})}),e.jsx(k,{})]})}),e.jsx(c,{control:s.control,name:"color",render:({field:t})=>e.jsxs(u,{children:[e.jsx(h,{children:"Farbe"}),e.jsx(b,{children:e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:Ne.map(n=>e.jsx("button",{type:"button",onClick:()=>t.onChange(n),className:`w-7 h-7 rounded-full border-2 ${t.value===n?"border-foreground scale-110":"border-transparent"}`,style:{backgroundColor:n},"data-testid":`button-color-${n.replace("#","")}`},n))})}),e.jsx(k,{})]})}),e.jsx(c,{control:s.control,name:"viewerMenuItems",render:({field:t})=>e.jsxs(u,{className:"rounded-lg border p-3",children:[e.jsx(h,{children:"Sichtbare Mitglieder-Menüpunkte"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Freigeschaltete Leads dieses Projekts sehen im Mitgliederbereich nur die angehakten Bereiche."}),e.jsx("div",{className:"grid grid-cols-2 gap-2 pt-2",children:d.map(n=>e.jsxs("label",{className:"flex items-center gap-2 text-sm cursor-pointer",children:[e.jsx(ge,{checked:t.value.includes(n),onCheckedChange:W=>
6{t.onChange(W?[...t.value,n]:t.value.filter(U=>U!==n))},"data-testid":`checkbox-menu-${n}`}),Pe[n]??n]},n))}),e.jsx(k,{})]})}),e.jsx(c,{control:s.control,name:"isActive",render:({field:t})=>e.jsxs(u,{className:"flex items-center justify-between rounded-lg border p-3",children:[e.jsxs("div",{children:[e.jsx(h,{children:"Aktiv"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Inaktive Projekte bleiben zugeordnet, werden aber als inaktiv markiert."})]}),e.jsx(b,{children:e.jsx(le,{checked:t.value,onCheckedChange:t.onChange,"data-testid":"switch-project-active"})})]})}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(F,{type:"button",variant:"outline",onClick:()=>r(!1),children:"Abbrechen"}),e.jsx(F,{type:"submit",disabled:N.isPending||A.isPending,"data-testid":"button-save-project",children:N.isPending||A.isPending?"Speichern...":"Speichern"})]})]})})]})}),e.jsx(L,{open:!!l,onOpenChange:t=>!t&&P(null),children:e.jsxs(D,{children:[e.jsxs(M,{children:[e.jsxs(E,{children:["Alle dem Projekt „",l==null?void 0:l.name,'" zuordnen?']}),e.jsx(T,{children:"Alle vorhandenen IB-Partner (inkl. deren Landingpages), Leads, IB-Interessenten und freigeschalteten Lead-Benutzer werden diesem Projekt zugeordnet. Bestehende Projekt-Zuordnungen werden dabei überschrieben."})]}),e.jsxs(B,{children:[e.jsx(z,{children:"Abbrechen"}),e.jsx($,{onClick:()=>l&&I.mutate(l.id),"data-testid":"button-confirm-assign-all",children:I.isPending?"Wird zugeordnet...":"Alle zuordnen"})]})]})}),e.jsx(L,{open:!!o,onOpenChange:t=>!t&&y(null),children:e.jsxs(D,{children:[e.jsxs(M,{children:[e.jsx(E,{children:"Projekt löschen?"}),e.jsxs(T,{children:["Möchten Sie das Projekt „",o==null?void 0:o.name,'" wirklich löschen? Alle Zuordnungen zu IB-Partnern, Landingpages und Leads werden dabei entfernt (die Partner und Leads selbst bleiben erhalten).']})]}),e.jsxs(B,{children:[e.jsx(z,{children:"Abbrechen"}),e.jsx($,{className:"bg-red-600 hover:bg-red-700",onClick:()=>o&&Z.mutate(o.id),"data-testid":"button-confirm-delete-project",children:"Löschen"})]})]})})]})}export{Ge 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.