Initial commit - ERP System
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[next]/entry/page-loader.ts { PAGE => \"[project]/node_modules/next/app.js [client] (ecmascript)\" } [client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const PAGE_PATH = "/_app";
|
||||
(window.__NEXT_P = window.__NEXT_P || []).push([
|
||||
PAGE_PATH,
|
||||
()=>{
|
||||
return __turbopack_context__.r("[project]/node_modules/next/app.js [client] (ecmascript)");
|
||||
}
|
||||
]);
|
||||
// @ts-expect-error module.hot exists
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
// @ts-expect-error module.hot exists
|
||||
module.hot.dispose(function() {
|
||||
window.__NEXT_P.push([
|
||||
PAGE_PATH
|
||||
]);
|
||||
});
|
||||
}
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=%5Bnext%5D_entry_page-loader_ts_0j~flwh._.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/entry/page-loader.ts"],"sourcesContent":["const PAGE_PATH = \"/_app\";\n\n/// <reference types=\"next/client\" />\n\n// inserted by rust code\ndeclare const PAGE_PATH: string\n\n // Adapted from https://github.com/vercel/next.js/blob/b7f9f1f98fc8ab602e84825105b5727272b72e7d/packages/next/src/build/webpack/loaders/next-client-pages-loader.ts\n;(window.__NEXT_P = window.__NEXT_P || []).push([\n PAGE_PATH,\n () => {\n return require('PAGE')\n },\n])\n// @ts-expect-error module.hot exists\nif (module.hot) {\n // @ts-expect-error module.hot exists\n module.hot.dispose(function () {\n window.__NEXT_P.push([PAGE_PATH])\n })\n}\n"],"names":["PAGE_PATH","window","__NEXT_P","push","module","hot","dispose"],"mappings":"AAAA,MAAMA,YAAY;AAQjB,CAACC,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,EAAEC,IAAI,CAAC;IAC9CH;IACA;QACE;IACF;CACD;AACD,qCAAqC;AACrC,wCAAgB;IACd,qCAAqC;IACrCI,OAAOC,GAAG,CAACC,OAAO,CAAC;QACjBL,OAAOC,QAAQ,CAACC,IAAI,CAAC;YAACH;SAAU;IAClC;AACF","ignoreList":[0]}}]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[next]/entry/page-loader.ts { PAGE => \"[project]/node_modules/next/dist/pages/_error.js [client] (ecmascript)\" } [client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const PAGE_PATH = "/_error";
|
||||
(window.__NEXT_P = window.__NEXT_P || []).push([
|
||||
PAGE_PATH,
|
||||
()=>{
|
||||
return __turbopack_context__.r("[project]/node_modules/next/dist/pages/_error.js [client] (ecmascript)");
|
||||
}
|
||||
]);
|
||||
// @ts-expect-error module.hot exists
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
// @ts-expect-error module.hot exists
|
||||
module.hot.dispose(function() {
|
||||
window.__NEXT_P.push([
|
||||
PAGE_PATH
|
||||
]);
|
||||
});
|
||||
}
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=%5Bnext%5D_entry_page-loader_ts_0rqw6yo._.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/entry/page-loader.ts"],"sourcesContent":["const PAGE_PATH = \"/_error\";\n\n/// <reference types=\"next/client\" />\n\n// inserted by rust code\ndeclare const PAGE_PATH: string\n\n // Adapted from https://github.com/vercel/next.js/blob/b7f9f1f98fc8ab602e84825105b5727272b72e7d/packages/next/src/build/webpack/loaders/next-client-pages-loader.ts\n;(window.__NEXT_P = window.__NEXT_P || []).push([\n PAGE_PATH,\n () => {\n return require('PAGE')\n },\n])\n// @ts-expect-error module.hot exists\nif (module.hot) {\n // @ts-expect-error module.hot exists\n module.hot.dispose(function () {\n window.__NEXT_P.push([PAGE_PATH])\n })\n}\n"],"names":["PAGE_PATH","window","__NEXT_P","push","module","hot","dispose"],"mappings":"AAAA,MAAMA,YAAY;AAQjB,CAACC,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,EAAEC,IAAI,CAAC;IAC9CH;IACA;QACE;IACF;CACD;AACD,qCAAqC;AACrC,wCAAgB;IACd,qCAAqC;IACrCI,OAAOC,GAAG,CAACC,OAAO,CAAC;QACjBL,OAAOC,QAAQ,CAACC,IAAI,CAAC;YAACH;SAAU;IAClC;AACF","ignoreList":[0]}}]
|
||||
}
|
||||
@@ -0,0 +1,476 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[turbopack]/browser/dev/hmr-client/hmr-client.ts [client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
/// <reference path="../../../shared/runtime/runtime-types.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-globals.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-protocol.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-extensions.ts" />
|
||||
__turbopack_context__.s([
|
||||
"connect",
|
||||
()=>connect,
|
||||
"setHooks",
|
||||
()=>setHooks,
|
||||
"subscribeToUpdate",
|
||||
()=>subscribeToUpdate
|
||||
]);
|
||||
function connect({ addMessageListener, sendMessage, onUpdateError = console.error }) {
|
||||
addMessageListener((msg)=>{
|
||||
switch(msg.type){
|
||||
case 'turbopack-connected':
|
||||
handleSocketConnected(sendMessage);
|
||||
break;
|
||||
default:
|
||||
try {
|
||||
if (Array.isArray(msg.data)) {
|
||||
for(let i = 0; i < msg.data.length; i++){
|
||||
handleSocketMessage(msg.data[i]);
|
||||
}
|
||||
} else {
|
||||
handleSocketMessage(msg.data);
|
||||
}
|
||||
applyAggregatedUpdates();
|
||||
} catch (e) {
|
||||
console.warn('[Fast Refresh] performing full reload\n\n' + "Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\n" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\n\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\n' + 'Fast Refresh requires at least one parent function component in your React tree.');
|
||||
onUpdateError(e);
|
||||
location.reload();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS;
|
||||
if (queued != null && !Array.isArray(queued)) {
|
||||
throw new Error('A separate HMR handler was already registered');
|
||||
}
|
||||
globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {
|
||||
push: ([chunkPath, callback])=>{
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
};
|
||||
if (Array.isArray(queued)) {
|
||||
for (const [chunkPath, callback] of queued){
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
const updateCallbackSets = new Map();
|
||||
function sendJSON(sendMessage, message) {
|
||||
sendMessage(JSON.stringify(message));
|
||||
}
|
||||
function resourceKey(resource) {
|
||||
return JSON.stringify({
|
||||
path: resource.path,
|
||||
headers: resource.headers || null
|
||||
});
|
||||
}
|
||||
function subscribeToUpdates(sendMessage, resource) {
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-subscribe',
|
||||
...resource
|
||||
});
|
||||
return ()=>{
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-unsubscribe',
|
||||
...resource
|
||||
});
|
||||
};
|
||||
}
|
||||
function handleSocketConnected(sendMessage) {
|
||||
for (const key of updateCallbackSets.keys()){
|
||||
subscribeToUpdates(sendMessage, JSON.parse(key));
|
||||
}
|
||||
}
|
||||
// we aggregate all pending updates until the issues are resolved
|
||||
const chunkListsWithPendingUpdates = new Map();
|
||||
function aggregateUpdates(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let aggregated = chunkListsWithPendingUpdates.get(key);
|
||||
if (aggregated) {
|
||||
aggregated.instruction = mergeChunkListUpdates(aggregated.instruction, msg.instruction);
|
||||
} else {
|
||||
chunkListsWithPendingUpdates.set(key, msg);
|
||||
}
|
||||
}
|
||||
function applyAggregatedUpdates() {
|
||||
if (chunkListsWithPendingUpdates.size === 0) return;
|
||||
hooks.beforeRefresh();
|
||||
for (const msg of chunkListsWithPendingUpdates.values()){
|
||||
triggerUpdate(msg);
|
||||
}
|
||||
chunkListsWithPendingUpdates.clear();
|
||||
finalizeUpdate();
|
||||
}
|
||||
function mergeChunkListUpdates(updateA, updateB) {
|
||||
let chunks;
|
||||
if (updateA.chunks != null) {
|
||||
if (updateB.chunks == null) {
|
||||
chunks = updateA.chunks;
|
||||
} else {
|
||||
chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks);
|
||||
}
|
||||
} else if (updateB.chunks != null) {
|
||||
chunks = updateB.chunks;
|
||||
}
|
||||
let merged;
|
||||
if (updateA.merged != null) {
|
||||
if (updateB.merged == null) {
|
||||
merged = updateA.merged;
|
||||
} else {
|
||||
// Since `merged` is an array of updates, we need to merge them all into
|
||||
// one, consistent update.
|
||||
// Since there can only be `EcmascriptMergeUpdates` in the array, there is
|
||||
// no need to key on the `type` field.
|
||||
let update = updateA.merged[0];
|
||||
for(let i = 1; i < updateA.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateA.merged[i]);
|
||||
}
|
||||
for(let i = 0; i < updateB.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateB.merged[i]);
|
||||
}
|
||||
merged = [
|
||||
update
|
||||
];
|
||||
}
|
||||
} else if (updateB.merged != null) {
|
||||
merged = updateB.merged;
|
||||
}
|
||||
return {
|
||||
type: 'ChunkListUpdate',
|
||||
chunks,
|
||||
merged
|
||||
};
|
||||
}
|
||||
function mergeChunkListChunks(chunksA, chunksB) {
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted' || updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
return undefined;
|
||||
}
|
||||
if (updateB.type === 'total') {
|
||||
// A total update replaces the entire chunk, so it supersedes any prior update.
|
||||
return updateB;
|
||||
}
|
||||
if (updateA.type === 'partial') {
|
||||
invariant(updateA.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
if (updateB.type === 'partial') {
|
||||
invariant(updateB.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function mergeChunkListEcmascriptMergedUpdates(mergedA, mergedB) {
|
||||
const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries);
|
||||
const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks);
|
||||
return {
|
||||
type: 'EcmascriptMergedUpdate',
|
||||
entries,
|
||||
chunks
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunkEntries(entriesA, entriesB) {
|
||||
return {
|
||||
...entriesA,
|
||||
...entriesB
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunksUpdates(chunksA, chunksB) {
|
||||
if (chunksA == null) {
|
||||
return chunksB;
|
||||
}
|
||||
if (chunksB == null) {
|
||||
return chunksA;
|
||||
}
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeEcmascriptChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
if (Object.keys(chunks).length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeEcmascriptChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted') {
|
||||
// These two completely cancel each other out.
|
||||
return undefined;
|
||||
}
|
||||
if (updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
const added = [];
|
||||
const deleted = [];
|
||||
const deletedModules = new Set(updateA.modules ?? []);
|
||||
const addedModules = new Set(updateB.modules ?? []);
|
||||
for (const moduleId of addedModules){
|
||||
if (!deletedModules.has(moduleId)) {
|
||||
added.push(moduleId);
|
||||
}
|
||||
}
|
||||
for (const moduleId of deletedModules){
|
||||
if (!addedModules.has(moduleId)) {
|
||||
deleted.push(moduleId);
|
||||
}
|
||||
}
|
||||
if (added.length === 0 && deleted.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added,
|
||||
deleted
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'partial') {
|
||||
const added = new Set([
|
||||
...updateA.added ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
const deleted = new Set([
|
||||
...updateA.deleted ?? [],
|
||||
...updateB.deleted ?? []
|
||||
]);
|
||||
if (updateB.added != null) {
|
||||
for (const moduleId of updateB.added){
|
||||
deleted.delete(moduleId);
|
||||
}
|
||||
}
|
||||
if (updateB.deleted != null) {
|
||||
for (const moduleId of updateB.deleted){
|
||||
added.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added: [
|
||||
...added
|
||||
],
|
||||
deleted: [
|
||||
...deleted
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'added' && updateB.type === 'partial') {
|
||||
const modules = new Set([
|
||||
...updateA.modules ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
for (const moduleId of updateB.deleted ?? []){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
return {
|
||||
type: 'added',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'deleted') {
|
||||
// We could eagerly return `updateB` here, but this would potentially be
|
||||
// incorrect if `updateA` has added modules.
|
||||
const modules = new Set(updateB.modules ?? []);
|
||||
if (updateA.added != null) {
|
||||
for (const moduleId of updateA.added){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'deleted',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
// Any other update combination is invalid.
|
||||
return undefined;
|
||||
}
|
||||
function invariant(_, message) {
|
||||
throw new Error(`Invariant: ${message}`);
|
||||
}
|
||||
const CRITICAL = [
|
||||
'bug',
|
||||
'error',
|
||||
'fatal'
|
||||
];
|
||||
function compareByList(list, a, b) {
|
||||
const aI = list.indexOf(a) + 1 || list.length;
|
||||
const bI = list.indexOf(b) + 1 || list.length;
|
||||
return aI - bI;
|
||||
}
|
||||
const chunksWithIssues = new Map();
|
||||
function emitIssues() {
|
||||
const issues = [];
|
||||
const deduplicationSet = new Set();
|
||||
for (const [_, chunkIssues] of chunksWithIssues){
|
||||
for (const chunkIssue of chunkIssues){
|
||||
if (deduplicationSet.has(chunkIssue.formatted)) continue;
|
||||
issues.push(chunkIssue);
|
||||
deduplicationSet.add(chunkIssue.formatted);
|
||||
}
|
||||
}
|
||||
sortIssues(issues);
|
||||
hooks.issues(issues);
|
||||
}
|
||||
function handleIssues(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let hasCriticalIssues = false;
|
||||
for (const issue of msg.issues){
|
||||
if (CRITICAL.includes(issue.severity)) {
|
||||
hasCriticalIssues = true;
|
||||
}
|
||||
}
|
||||
if (msg.issues.length > 0) {
|
||||
chunksWithIssues.set(key, msg.issues);
|
||||
} else if (chunksWithIssues.has(key)) {
|
||||
chunksWithIssues.delete(key);
|
||||
}
|
||||
emitIssues();
|
||||
return hasCriticalIssues;
|
||||
}
|
||||
const SEVERITY_ORDER = [
|
||||
'bug',
|
||||
'fatal',
|
||||
'error',
|
||||
'warning',
|
||||
'info',
|
||||
'log'
|
||||
];
|
||||
const CATEGORY_ORDER = [
|
||||
'parse',
|
||||
'resolve',
|
||||
'code generation',
|
||||
'rendering',
|
||||
'typescript',
|
||||
'other'
|
||||
];
|
||||
function sortIssues(issues) {
|
||||
issues.sort((a, b)=>{
|
||||
const first = compareByList(SEVERITY_ORDER, a.severity, b.severity);
|
||||
if (first !== 0) return first;
|
||||
return compareByList(CATEGORY_ORDER, a.category, b.category);
|
||||
});
|
||||
}
|
||||
const hooks = {
|
||||
beforeRefresh: ()=>{},
|
||||
refresh: ()=>{},
|
||||
buildOk: ()=>{},
|
||||
issues: (_issues)=>{}
|
||||
};
|
||||
function setHooks(newHooks) {
|
||||
Object.assign(hooks, newHooks);
|
||||
}
|
||||
function handleSocketMessage(msg) {
|
||||
sortIssues(msg.issues);
|
||||
handleIssues(msg);
|
||||
switch(msg.type){
|
||||
case 'issues':
|
||||
break;
|
||||
case 'partial':
|
||||
// aggregate updates
|
||||
aggregateUpdates(msg);
|
||||
break;
|
||||
default:
|
||||
// run single update
|
||||
const runHooks = chunkListsWithPendingUpdates.size === 0;
|
||||
if (runHooks) hooks.beforeRefresh();
|
||||
triggerUpdate(msg);
|
||||
if (runHooks) finalizeUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
function finalizeUpdate() {
|
||||
hooks.refresh();
|
||||
hooks.buildOk();
|
||||
// This is used by the Next.js integration test suite to notify it when HMR
|
||||
// updates have been completed.
|
||||
// TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)
|
||||
if (globalThis.__NEXT_HMR_CB) {
|
||||
globalThis.__NEXT_HMR_CB();
|
||||
globalThis.__NEXT_HMR_CB = null;
|
||||
}
|
||||
}
|
||||
function subscribeToChunkUpdate(chunkListPath, sendMessage, callback) {
|
||||
return subscribeToUpdate({
|
||||
path: chunkListPath
|
||||
}, sendMessage, callback);
|
||||
}
|
||||
function subscribeToUpdate(resource, sendMessage, callback) {
|
||||
const key = resourceKey(resource);
|
||||
let callbackSet;
|
||||
const existingCallbackSet = updateCallbackSets.get(key);
|
||||
if (!existingCallbackSet) {
|
||||
callbackSet = {
|
||||
callbacks: new Set([
|
||||
callback
|
||||
]),
|
||||
unsubscribe: subscribeToUpdates(sendMessage, resource)
|
||||
};
|
||||
updateCallbackSets.set(key, callbackSet);
|
||||
} else {
|
||||
existingCallbackSet.callbacks.add(callback);
|
||||
callbackSet = existingCallbackSet;
|
||||
}
|
||||
return ()=>{
|
||||
callbackSet.callbacks.delete(callback);
|
||||
if (callbackSet.callbacks.size === 0) {
|
||||
callbackSet.unsubscribe();
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
};
|
||||
}
|
||||
function triggerUpdate(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
const callbackSet = updateCallbackSets.get(key);
|
||||
if (!callbackSet) {
|
||||
return;
|
||||
}
|
||||
for (const callback of callbackSet.callbacks){
|
||||
callback(msg);
|
||||
}
|
||||
if (msg.type === 'notFound') {
|
||||
// This indicates that the resource which we subscribed to either does not exist or
|
||||
// has been deleted. In either case, we should clear all update callbacks, so if a
|
||||
// new subscription is created for the same resource, it will send a new "subscribe"
|
||||
// message to the server.
|
||||
// No need to send an "unsubscribe" message to the server, it will have already
|
||||
// dropped the update stream before sending the "notFound" message.
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
}
|
||||
}),
|
||||
"[hmr-entry]/hmr-entry.js { ENTRY => \"[project]/pages/_error\" }", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.r("[next]/entry/page-loader.ts { PAGE => \"[project]/node_modules/next/dist/pages/_error.js [client] (ecmascript)\" } [client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__01mw43t._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,476 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[turbopack]/browser/dev/hmr-client/hmr-client.ts [client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
/// <reference path="../../../shared/runtime/runtime-types.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-globals.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-protocol.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-extensions.ts" />
|
||||
__turbopack_context__.s([
|
||||
"connect",
|
||||
()=>connect,
|
||||
"setHooks",
|
||||
()=>setHooks,
|
||||
"subscribeToUpdate",
|
||||
()=>subscribeToUpdate
|
||||
]);
|
||||
function connect({ addMessageListener, sendMessage, onUpdateError = console.error }) {
|
||||
addMessageListener((msg)=>{
|
||||
switch(msg.type){
|
||||
case 'turbopack-connected':
|
||||
handleSocketConnected(sendMessage);
|
||||
break;
|
||||
default:
|
||||
try {
|
||||
if (Array.isArray(msg.data)) {
|
||||
for(let i = 0; i < msg.data.length; i++){
|
||||
handleSocketMessage(msg.data[i]);
|
||||
}
|
||||
} else {
|
||||
handleSocketMessage(msg.data);
|
||||
}
|
||||
applyAggregatedUpdates();
|
||||
} catch (e) {
|
||||
console.warn('[Fast Refresh] performing full reload\n\n' + "Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\n" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\n\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\n' + 'Fast Refresh requires at least one parent function component in your React tree.');
|
||||
onUpdateError(e);
|
||||
location.reload();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS;
|
||||
if (queued != null && !Array.isArray(queued)) {
|
||||
throw new Error('A separate HMR handler was already registered');
|
||||
}
|
||||
globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {
|
||||
push: ([chunkPath, callback])=>{
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
};
|
||||
if (Array.isArray(queued)) {
|
||||
for (const [chunkPath, callback] of queued){
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
const updateCallbackSets = new Map();
|
||||
function sendJSON(sendMessage, message) {
|
||||
sendMessage(JSON.stringify(message));
|
||||
}
|
||||
function resourceKey(resource) {
|
||||
return JSON.stringify({
|
||||
path: resource.path,
|
||||
headers: resource.headers || null
|
||||
});
|
||||
}
|
||||
function subscribeToUpdates(sendMessage, resource) {
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-subscribe',
|
||||
...resource
|
||||
});
|
||||
return ()=>{
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-unsubscribe',
|
||||
...resource
|
||||
});
|
||||
};
|
||||
}
|
||||
function handleSocketConnected(sendMessage) {
|
||||
for (const key of updateCallbackSets.keys()){
|
||||
subscribeToUpdates(sendMessage, JSON.parse(key));
|
||||
}
|
||||
}
|
||||
// we aggregate all pending updates until the issues are resolved
|
||||
const chunkListsWithPendingUpdates = new Map();
|
||||
function aggregateUpdates(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let aggregated = chunkListsWithPendingUpdates.get(key);
|
||||
if (aggregated) {
|
||||
aggregated.instruction = mergeChunkListUpdates(aggregated.instruction, msg.instruction);
|
||||
} else {
|
||||
chunkListsWithPendingUpdates.set(key, msg);
|
||||
}
|
||||
}
|
||||
function applyAggregatedUpdates() {
|
||||
if (chunkListsWithPendingUpdates.size === 0) return;
|
||||
hooks.beforeRefresh();
|
||||
for (const msg of chunkListsWithPendingUpdates.values()){
|
||||
triggerUpdate(msg);
|
||||
}
|
||||
chunkListsWithPendingUpdates.clear();
|
||||
finalizeUpdate();
|
||||
}
|
||||
function mergeChunkListUpdates(updateA, updateB) {
|
||||
let chunks;
|
||||
if (updateA.chunks != null) {
|
||||
if (updateB.chunks == null) {
|
||||
chunks = updateA.chunks;
|
||||
} else {
|
||||
chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks);
|
||||
}
|
||||
} else if (updateB.chunks != null) {
|
||||
chunks = updateB.chunks;
|
||||
}
|
||||
let merged;
|
||||
if (updateA.merged != null) {
|
||||
if (updateB.merged == null) {
|
||||
merged = updateA.merged;
|
||||
} else {
|
||||
// Since `merged` is an array of updates, we need to merge them all into
|
||||
// one, consistent update.
|
||||
// Since there can only be `EcmascriptMergeUpdates` in the array, there is
|
||||
// no need to key on the `type` field.
|
||||
let update = updateA.merged[0];
|
||||
for(let i = 1; i < updateA.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateA.merged[i]);
|
||||
}
|
||||
for(let i = 0; i < updateB.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateB.merged[i]);
|
||||
}
|
||||
merged = [
|
||||
update
|
||||
];
|
||||
}
|
||||
} else if (updateB.merged != null) {
|
||||
merged = updateB.merged;
|
||||
}
|
||||
return {
|
||||
type: 'ChunkListUpdate',
|
||||
chunks,
|
||||
merged
|
||||
};
|
||||
}
|
||||
function mergeChunkListChunks(chunksA, chunksB) {
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted' || updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
return undefined;
|
||||
}
|
||||
if (updateB.type === 'total') {
|
||||
// A total update replaces the entire chunk, so it supersedes any prior update.
|
||||
return updateB;
|
||||
}
|
||||
if (updateA.type === 'partial') {
|
||||
invariant(updateA.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
if (updateB.type === 'partial') {
|
||||
invariant(updateB.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function mergeChunkListEcmascriptMergedUpdates(mergedA, mergedB) {
|
||||
const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries);
|
||||
const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks);
|
||||
return {
|
||||
type: 'EcmascriptMergedUpdate',
|
||||
entries,
|
||||
chunks
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunkEntries(entriesA, entriesB) {
|
||||
return {
|
||||
...entriesA,
|
||||
...entriesB
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunksUpdates(chunksA, chunksB) {
|
||||
if (chunksA == null) {
|
||||
return chunksB;
|
||||
}
|
||||
if (chunksB == null) {
|
||||
return chunksA;
|
||||
}
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeEcmascriptChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
if (Object.keys(chunks).length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeEcmascriptChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted') {
|
||||
// These two completely cancel each other out.
|
||||
return undefined;
|
||||
}
|
||||
if (updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
const added = [];
|
||||
const deleted = [];
|
||||
const deletedModules = new Set(updateA.modules ?? []);
|
||||
const addedModules = new Set(updateB.modules ?? []);
|
||||
for (const moduleId of addedModules){
|
||||
if (!deletedModules.has(moduleId)) {
|
||||
added.push(moduleId);
|
||||
}
|
||||
}
|
||||
for (const moduleId of deletedModules){
|
||||
if (!addedModules.has(moduleId)) {
|
||||
deleted.push(moduleId);
|
||||
}
|
||||
}
|
||||
if (added.length === 0 && deleted.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added,
|
||||
deleted
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'partial') {
|
||||
const added = new Set([
|
||||
...updateA.added ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
const deleted = new Set([
|
||||
...updateA.deleted ?? [],
|
||||
...updateB.deleted ?? []
|
||||
]);
|
||||
if (updateB.added != null) {
|
||||
for (const moduleId of updateB.added){
|
||||
deleted.delete(moduleId);
|
||||
}
|
||||
}
|
||||
if (updateB.deleted != null) {
|
||||
for (const moduleId of updateB.deleted){
|
||||
added.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added: [
|
||||
...added
|
||||
],
|
||||
deleted: [
|
||||
...deleted
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'added' && updateB.type === 'partial') {
|
||||
const modules = new Set([
|
||||
...updateA.modules ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
for (const moduleId of updateB.deleted ?? []){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
return {
|
||||
type: 'added',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'deleted') {
|
||||
// We could eagerly return `updateB` here, but this would potentially be
|
||||
// incorrect if `updateA` has added modules.
|
||||
const modules = new Set(updateB.modules ?? []);
|
||||
if (updateA.added != null) {
|
||||
for (const moduleId of updateA.added){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'deleted',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
// Any other update combination is invalid.
|
||||
return undefined;
|
||||
}
|
||||
function invariant(_, message) {
|
||||
throw new Error(`Invariant: ${message}`);
|
||||
}
|
||||
const CRITICAL = [
|
||||
'bug',
|
||||
'error',
|
||||
'fatal'
|
||||
];
|
||||
function compareByList(list, a, b) {
|
||||
const aI = list.indexOf(a) + 1 || list.length;
|
||||
const bI = list.indexOf(b) + 1 || list.length;
|
||||
return aI - bI;
|
||||
}
|
||||
const chunksWithIssues = new Map();
|
||||
function emitIssues() {
|
||||
const issues = [];
|
||||
const deduplicationSet = new Set();
|
||||
for (const [_, chunkIssues] of chunksWithIssues){
|
||||
for (const chunkIssue of chunkIssues){
|
||||
if (deduplicationSet.has(chunkIssue.formatted)) continue;
|
||||
issues.push(chunkIssue);
|
||||
deduplicationSet.add(chunkIssue.formatted);
|
||||
}
|
||||
}
|
||||
sortIssues(issues);
|
||||
hooks.issues(issues);
|
||||
}
|
||||
function handleIssues(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let hasCriticalIssues = false;
|
||||
for (const issue of msg.issues){
|
||||
if (CRITICAL.includes(issue.severity)) {
|
||||
hasCriticalIssues = true;
|
||||
}
|
||||
}
|
||||
if (msg.issues.length > 0) {
|
||||
chunksWithIssues.set(key, msg.issues);
|
||||
} else if (chunksWithIssues.has(key)) {
|
||||
chunksWithIssues.delete(key);
|
||||
}
|
||||
emitIssues();
|
||||
return hasCriticalIssues;
|
||||
}
|
||||
const SEVERITY_ORDER = [
|
||||
'bug',
|
||||
'fatal',
|
||||
'error',
|
||||
'warning',
|
||||
'info',
|
||||
'log'
|
||||
];
|
||||
const CATEGORY_ORDER = [
|
||||
'parse',
|
||||
'resolve',
|
||||
'code generation',
|
||||
'rendering',
|
||||
'typescript',
|
||||
'other'
|
||||
];
|
||||
function sortIssues(issues) {
|
||||
issues.sort((a, b)=>{
|
||||
const first = compareByList(SEVERITY_ORDER, a.severity, b.severity);
|
||||
if (first !== 0) return first;
|
||||
return compareByList(CATEGORY_ORDER, a.category, b.category);
|
||||
});
|
||||
}
|
||||
const hooks = {
|
||||
beforeRefresh: ()=>{},
|
||||
refresh: ()=>{},
|
||||
buildOk: ()=>{},
|
||||
issues: (_issues)=>{}
|
||||
};
|
||||
function setHooks(newHooks) {
|
||||
Object.assign(hooks, newHooks);
|
||||
}
|
||||
function handleSocketMessage(msg) {
|
||||
sortIssues(msg.issues);
|
||||
handleIssues(msg);
|
||||
switch(msg.type){
|
||||
case 'issues':
|
||||
break;
|
||||
case 'partial':
|
||||
// aggregate updates
|
||||
aggregateUpdates(msg);
|
||||
break;
|
||||
default:
|
||||
// run single update
|
||||
const runHooks = chunkListsWithPendingUpdates.size === 0;
|
||||
if (runHooks) hooks.beforeRefresh();
|
||||
triggerUpdate(msg);
|
||||
if (runHooks) finalizeUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
function finalizeUpdate() {
|
||||
hooks.refresh();
|
||||
hooks.buildOk();
|
||||
// This is used by the Next.js integration test suite to notify it when HMR
|
||||
// updates have been completed.
|
||||
// TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)
|
||||
if (globalThis.__NEXT_HMR_CB) {
|
||||
globalThis.__NEXT_HMR_CB();
|
||||
globalThis.__NEXT_HMR_CB = null;
|
||||
}
|
||||
}
|
||||
function subscribeToChunkUpdate(chunkListPath, sendMessage, callback) {
|
||||
return subscribeToUpdate({
|
||||
path: chunkListPath
|
||||
}, sendMessage, callback);
|
||||
}
|
||||
function subscribeToUpdate(resource, sendMessage, callback) {
|
||||
const key = resourceKey(resource);
|
||||
let callbackSet;
|
||||
const existingCallbackSet = updateCallbackSets.get(key);
|
||||
if (!existingCallbackSet) {
|
||||
callbackSet = {
|
||||
callbacks: new Set([
|
||||
callback
|
||||
]),
|
||||
unsubscribe: subscribeToUpdates(sendMessage, resource)
|
||||
};
|
||||
updateCallbackSets.set(key, callbackSet);
|
||||
} else {
|
||||
existingCallbackSet.callbacks.add(callback);
|
||||
callbackSet = existingCallbackSet;
|
||||
}
|
||||
return ()=>{
|
||||
callbackSet.callbacks.delete(callback);
|
||||
if (callbackSet.callbacks.size === 0) {
|
||||
callbackSet.unsubscribe();
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
};
|
||||
}
|
||||
function triggerUpdate(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
const callbackSet = updateCallbackSets.get(key);
|
||||
if (!callbackSet) {
|
||||
return;
|
||||
}
|
||||
for (const callback of callbackSet.callbacks){
|
||||
callback(msg);
|
||||
}
|
||||
if (msg.type === 'notFound') {
|
||||
// This indicates that the resource which we subscribed to either does not exist or
|
||||
// has been deleted. In either case, we should clear all update callbacks, so if a
|
||||
// new subscription is created for the same resource, it will send a new "subscribe"
|
||||
// message to the server.
|
||||
// No need to send an "unsubscribe" message to the server, it will have already
|
||||
// dropped the update stream before sending the "notFound" message.
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
}
|
||||
}),
|
||||
"[hmr-entry]/hmr-entry.js { ENTRY => \"[project]/pages/_app\" }", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.r("[next]/entry/page-loader.ts { PAGE => \"[project]/node_modules/next/app.js [client] (ecmascript)\" } [client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__0c0okpg._.js.map
|
||||
File diff suppressed because one or more lines are too long
+471
@@ -0,0 +1,471 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
/// <reference path="../../../shared/runtime/runtime-types.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-globals.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-protocol.d.ts" />
|
||||
/// <reference path="../../../shared/runtime/dev-extensions.ts" />
|
||||
__turbopack_context__.s([
|
||||
"connect",
|
||||
()=>connect,
|
||||
"setHooks",
|
||||
()=>setHooks,
|
||||
"subscribeToUpdate",
|
||||
()=>subscribeToUpdate
|
||||
]);
|
||||
function connect({ addMessageListener, sendMessage, onUpdateError = console.error }) {
|
||||
addMessageListener((msg)=>{
|
||||
switch(msg.type){
|
||||
case 'turbopack-connected':
|
||||
handleSocketConnected(sendMessage);
|
||||
break;
|
||||
default:
|
||||
try {
|
||||
if (Array.isArray(msg.data)) {
|
||||
for(let i = 0; i < msg.data.length; i++){
|
||||
handleSocketMessage(msg.data[i]);
|
||||
}
|
||||
} else {
|
||||
handleSocketMessage(msg.data);
|
||||
}
|
||||
applyAggregatedUpdates();
|
||||
} catch (e) {
|
||||
console.warn('[Fast Refresh] performing full reload\n\n' + "Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\n" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\n\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\n' + 'Fast Refresh requires at least one parent function component in your React tree.');
|
||||
onUpdateError(e);
|
||||
location.reload();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS;
|
||||
if (queued != null && !Array.isArray(queued)) {
|
||||
throw new Error('A separate HMR handler was already registered');
|
||||
}
|
||||
globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {
|
||||
push: ([chunkPath, callback])=>{
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
};
|
||||
if (Array.isArray(queued)) {
|
||||
for (const [chunkPath, callback] of queued){
|
||||
subscribeToChunkUpdate(chunkPath, sendMessage, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
const updateCallbackSets = new Map();
|
||||
function sendJSON(sendMessage, message) {
|
||||
sendMessage(JSON.stringify(message));
|
||||
}
|
||||
function resourceKey(resource) {
|
||||
return JSON.stringify({
|
||||
path: resource.path,
|
||||
headers: resource.headers || null
|
||||
});
|
||||
}
|
||||
function subscribeToUpdates(sendMessage, resource) {
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-subscribe',
|
||||
...resource
|
||||
});
|
||||
return ()=>{
|
||||
sendJSON(sendMessage, {
|
||||
type: 'turbopack-unsubscribe',
|
||||
...resource
|
||||
});
|
||||
};
|
||||
}
|
||||
function handleSocketConnected(sendMessage) {
|
||||
for (const key of updateCallbackSets.keys()){
|
||||
subscribeToUpdates(sendMessage, JSON.parse(key));
|
||||
}
|
||||
}
|
||||
// we aggregate all pending updates until the issues are resolved
|
||||
const chunkListsWithPendingUpdates = new Map();
|
||||
function aggregateUpdates(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let aggregated = chunkListsWithPendingUpdates.get(key);
|
||||
if (aggregated) {
|
||||
aggregated.instruction = mergeChunkListUpdates(aggregated.instruction, msg.instruction);
|
||||
} else {
|
||||
chunkListsWithPendingUpdates.set(key, msg);
|
||||
}
|
||||
}
|
||||
function applyAggregatedUpdates() {
|
||||
if (chunkListsWithPendingUpdates.size === 0) return;
|
||||
hooks.beforeRefresh();
|
||||
for (const msg of chunkListsWithPendingUpdates.values()){
|
||||
triggerUpdate(msg);
|
||||
}
|
||||
chunkListsWithPendingUpdates.clear();
|
||||
finalizeUpdate();
|
||||
}
|
||||
function mergeChunkListUpdates(updateA, updateB) {
|
||||
let chunks;
|
||||
if (updateA.chunks != null) {
|
||||
if (updateB.chunks == null) {
|
||||
chunks = updateA.chunks;
|
||||
} else {
|
||||
chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks);
|
||||
}
|
||||
} else if (updateB.chunks != null) {
|
||||
chunks = updateB.chunks;
|
||||
}
|
||||
let merged;
|
||||
if (updateA.merged != null) {
|
||||
if (updateB.merged == null) {
|
||||
merged = updateA.merged;
|
||||
} else {
|
||||
// Since `merged` is an array of updates, we need to merge them all into
|
||||
// one, consistent update.
|
||||
// Since there can only be `EcmascriptMergeUpdates` in the array, there is
|
||||
// no need to key on the `type` field.
|
||||
let update = updateA.merged[0];
|
||||
for(let i = 1; i < updateA.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateA.merged[i]);
|
||||
}
|
||||
for(let i = 0; i < updateB.merged.length; i++){
|
||||
update = mergeChunkListEcmascriptMergedUpdates(update, updateB.merged[i]);
|
||||
}
|
||||
merged = [
|
||||
update
|
||||
];
|
||||
}
|
||||
} else if (updateB.merged != null) {
|
||||
merged = updateB.merged;
|
||||
}
|
||||
return {
|
||||
type: 'ChunkListUpdate',
|
||||
chunks,
|
||||
merged
|
||||
};
|
||||
}
|
||||
function mergeChunkListChunks(chunksA, chunksB) {
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted' || updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
return undefined;
|
||||
}
|
||||
if (updateB.type === 'total') {
|
||||
// A total update replaces the entire chunk, so it supersedes any prior update.
|
||||
return updateB;
|
||||
}
|
||||
if (updateA.type === 'partial') {
|
||||
invariant(updateA.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
if (updateB.type === 'partial') {
|
||||
invariant(updateB.instruction, 'Partial updates are unsupported');
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function mergeChunkListEcmascriptMergedUpdates(mergedA, mergedB) {
|
||||
const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries);
|
||||
const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks);
|
||||
return {
|
||||
type: 'EcmascriptMergedUpdate',
|
||||
entries,
|
||||
chunks
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunkEntries(entriesA, entriesB) {
|
||||
return {
|
||||
...entriesA,
|
||||
...entriesB
|
||||
};
|
||||
}
|
||||
function mergeEcmascriptChunksUpdates(chunksA, chunksB) {
|
||||
if (chunksA == null) {
|
||||
return chunksB;
|
||||
}
|
||||
if (chunksB == null) {
|
||||
return chunksA;
|
||||
}
|
||||
const chunks = {};
|
||||
for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
|
||||
const chunkUpdateB = chunksB[chunkPath];
|
||||
if (chunkUpdateB != null) {
|
||||
const mergedUpdate = mergeEcmascriptChunkUpdates(chunkUpdateA, chunkUpdateB);
|
||||
if (mergedUpdate != null) {
|
||||
chunks[chunkPath] = mergedUpdate;
|
||||
}
|
||||
} else {
|
||||
chunks[chunkPath] = chunkUpdateA;
|
||||
}
|
||||
}
|
||||
for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
|
||||
if (chunks[chunkPath] == null) {
|
||||
chunks[chunkPath] = chunkUpdateB;
|
||||
}
|
||||
}
|
||||
if (Object.keys(chunks).length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
function mergeEcmascriptChunkUpdates(updateA, updateB) {
|
||||
if (updateA.type === 'added' && updateB.type === 'deleted') {
|
||||
// These two completely cancel each other out.
|
||||
return undefined;
|
||||
}
|
||||
if (updateA.type === 'deleted' && updateB.type === 'added') {
|
||||
const added = [];
|
||||
const deleted = [];
|
||||
const deletedModules = new Set(updateA.modules ?? []);
|
||||
const addedModules = new Set(updateB.modules ?? []);
|
||||
for (const moduleId of addedModules){
|
||||
if (!deletedModules.has(moduleId)) {
|
||||
added.push(moduleId);
|
||||
}
|
||||
}
|
||||
for (const moduleId of deletedModules){
|
||||
if (!addedModules.has(moduleId)) {
|
||||
deleted.push(moduleId);
|
||||
}
|
||||
}
|
||||
if (added.length === 0 && deleted.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added,
|
||||
deleted
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'partial') {
|
||||
const added = new Set([
|
||||
...updateA.added ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
const deleted = new Set([
|
||||
...updateA.deleted ?? [],
|
||||
...updateB.deleted ?? []
|
||||
]);
|
||||
if (updateB.added != null) {
|
||||
for (const moduleId of updateB.added){
|
||||
deleted.delete(moduleId);
|
||||
}
|
||||
}
|
||||
if (updateB.deleted != null) {
|
||||
for (const moduleId of updateB.deleted){
|
||||
added.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'partial',
|
||||
added: [
|
||||
...added
|
||||
],
|
||||
deleted: [
|
||||
...deleted
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'added' && updateB.type === 'partial') {
|
||||
const modules = new Set([
|
||||
...updateA.modules ?? [],
|
||||
...updateB.added ?? []
|
||||
]);
|
||||
for (const moduleId of updateB.deleted ?? []){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
return {
|
||||
type: 'added',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
if (updateA.type === 'partial' && updateB.type === 'deleted') {
|
||||
// We could eagerly return `updateB` here, but this would potentially be
|
||||
// incorrect if `updateA` has added modules.
|
||||
const modules = new Set(updateB.modules ?? []);
|
||||
if (updateA.added != null) {
|
||||
for (const moduleId of updateA.added){
|
||||
modules.delete(moduleId);
|
||||
}
|
||||
}
|
||||
return {
|
||||
type: 'deleted',
|
||||
modules: [
|
||||
...modules
|
||||
]
|
||||
};
|
||||
}
|
||||
// Any other update combination is invalid.
|
||||
return undefined;
|
||||
}
|
||||
function invariant(_, message) {
|
||||
throw new Error(`Invariant: ${message}`);
|
||||
}
|
||||
const CRITICAL = [
|
||||
'bug',
|
||||
'error',
|
||||
'fatal'
|
||||
];
|
||||
function compareByList(list, a, b) {
|
||||
const aI = list.indexOf(a) + 1 || list.length;
|
||||
const bI = list.indexOf(b) + 1 || list.length;
|
||||
return aI - bI;
|
||||
}
|
||||
const chunksWithIssues = new Map();
|
||||
function emitIssues() {
|
||||
const issues = [];
|
||||
const deduplicationSet = new Set();
|
||||
for (const [_, chunkIssues] of chunksWithIssues){
|
||||
for (const chunkIssue of chunkIssues){
|
||||
if (deduplicationSet.has(chunkIssue.formatted)) continue;
|
||||
issues.push(chunkIssue);
|
||||
deduplicationSet.add(chunkIssue.formatted);
|
||||
}
|
||||
}
|
||||
sortIssues(issues);
|
||||
hooks.issues(issues);
|
||||
}
|
||||
function handleIssues(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
let hasCriticalIssues = false;
|
||||
for (const issue of msg.issues){
|
||||
if (CRITICAL.includes(issue.severity)) {
|
||||
hasCriticalIssues = true;
|
||||
}
|
||||
}
|
||||
if (msg.issues.length > 0) {
|
||||
chunksWithIssues.set(key, msg.issues);
|
||||
} else if (chunksWithIssues.has(key)) {
|
||||
chunksWithIssues.delete(key);
|
||||
}
|
||||
emitIssues();
|
||||
return hasCriticalIssues;
|
||||
}
|
||||
const SEVERITY_ORDER = [
|
||||
'bug',
|
||||
'fatal',
|
||||
'error',
|
||||
'warning',
|
||||
'info',
|
||||
'log'
|
||||
];
|
||||
const CATEGORY_ORDER = [
|
||||
'parse',
|
||||
'resolve',
|
||||
'code generation',
|
||||
'rendering',
|
||||
'typescript',
|
||||
'other'
|
||||
];
|
||||
function sortIssues(issues) {
|
||||
issues.sort((a, b)=>{
|
||||
const first = compareByList(SEVERITY_ORDER, a.severity, b.severity);
|
||||
if (first !== 0) return first;
|
||||
return compareByList(CATEGORY_ORDER, a.category, b.category);
|
||||
});
|
||||
}
|
||||
const hooks = {
|
||||
beforeRefresh: ()=>{},
|
||||
refresh: ()=>{},
|
||||
buildOk: ()=>{},
|
||||
issues: (_issues)=>{}
|
||||
};
|
||||
function setHooks(newHooks) {
|
||||
Object.assign(hooks, newHooks);
|
||||
}
|
||||
function handleSocketMessage(msg) {
|
||||
sortIssues(msg.issues);
|
||||
handleIssues(msg);
|
||||
switch(msg.type){
|
||||
case 'issues':
|
||||
break;
|
||||
case 'partial':
|
||||
// aggregate updates
|
||||
aggregateUpdates(msg);
|
||||
break;
|
||||
default:
|
||||
// run single update
|
||||
const runHooks = chunkListsWithPendingUpdates.size === 0;
|
||||
if (runHooks) hooks.beforeRefresh();
|
||||
triggerUpdate(msg);
|
||||
if (runHooks) finalizeUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
function finalizeUpdate() {
|
||||
hooks.refresh();
|
||||
hooks.buildOk();
|
||||
// This is used by the Next.js integration test suite to notify it when HMR
|
||||
// updates have been completed.
|
||||
// TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)
|
||||
if (globalThis.__NEXT_HMR_CB) {
|
||||
globalThis.__NEXT_HMR_CB();
|
||||
globalThis.__NEXT_HMR_CB = null;
|
||||
}
|
||||
}
|
||||
function subscribeToChunkUpdate(chunkListPath, sendMessage, callback) {
|
||||
return subscribeToUpdate({
|
||||
path: chunkListPath
|
||||
}, sendMessage, callback);
|
||||
}
|
||||
function subscribeToUpdate(resource, sendMessage, callback) {
|
||||
const key = resourceKey(resource);
|
||||
let callbackSet;
|
||||
const existingCallbackSet = updateCallbackSets.get(key);
|
||||
if (!existingCallbackSet) {
|
||||
callbackSet = {
|
||||
callbacks: new Set([
|
||||
callback
|
||||
]),
|
||||
unsubscribe: subscribeToUpdates(sendMessage, resource)
|
||||
};
|
||||
updateCallbackSets.set(key, callbackSet);
|
||||
} else {
|
||||
existingCallbackSet.callbacks.add(callback);
|
||||
callbackSet = existingCallbackSet;
|
||||
}
|
||||
return ()=>{
|
||||
callbackSet.callbacks.delete(callback);
|
||||
if (callbackSet.callbacks.size === 0) {
|
||||
callbackSet.unsubscribe();
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
};
|
||||
}
|
||||
function triggerUpdate(msg) {
|
||||
const key = resourceKey(msg.resource);
|
||||
const callbackSet = updateCallbackSets.get(key);
|
||||
if (!callbackSet) {
|
||||
return;
|
||||
}
|
||||
for (const callback of callbackSet.callbacks){
|
||||
callback(msg);
|
||||
}
|
||||
if (msg.type === 'notFound') {
|
||||
// This indicates that the resource which we subscribed to either does not exist or
|
||||
// has been deleted. In either case, we should clear all update callbacks, so if a
|
||||
// new subscription is created for the same resource, it will send a new "subscribe"
|
||||
// message to the server.
|
||||
// No need to send an "unsubscribe" message to the server, it will have already
|
||||
// dropped the update stream before sending the "notFound" message.
|
||||
updateCallbackSets.delete(key);
|
||||
}
|
||||
}
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=%5Bturbopack%5D_browser_dev_hmr-client_hmr-client_ts_0yjw1oe._.js.map
|
||||
+6
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
|
||||
(globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({
|
||||
script: typeof document === "object" ? document.currentScript : undefined,
|
||||
chunks: ["static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_0yjw1oe._.js"],
|
||||
source: "dynamic"
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-client] (ecmascript, async loader)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.v((parentImport) => {
|
||||
return Promise.all([
|
||||
"static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_0yjw1oe._.js",
|
||||
"static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_10mygs7._.js"
|
||||
].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
|
||||
return parentImport("[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-client] (ecmascript)");
|
||||
});
|
||||
});
|
||||
}),
|
||||
]);
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,591 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/billing/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>BillingPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/file-text.mjs [app-client] (ecmascript) <export default as FileText>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$download$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Download$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/download.mjs [app-client] (ecmascript) <export default as Download>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check-big.mjs [app-client] (ecmascript) <export default as CheckCircle>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript) <export default as Clock>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/billing/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function BillingPage() {
|
||||
_s();
|
||||
const [entries, setEntries] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true);
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"BillingPage.useEffect": ()=>{
|
||||
fetchEntries();
|
||||
}
|
||||
}["BillingPage.useEffect"], []);
|
||||
const fetchEntries = async ()=>{
|
||||
setLoading(true);
|
||||
const res = await fetch('/api/billing');
|
||||
if (res.ok) setEntries(await res.json());
|
||||
setLoading(false);
|
||||
};
|
||||
const markAsBilled = async (entryIds)=>{
|
||||
if (!confirm(`Möchtest du diese ${entryIds.length} Einträge wirklich als 'Abgerechnet' markieren? Sie verschwinden danach aus dieser Liste.`)) return;
|
||||
const res = await fetch('/api/billing', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
entryIds
|
||||
})
|
||||
});
|
||||
if (res.ok) fetchEntries();
|
||||
else alert('Fehler beim Aktualisieren der Einträge.');
|
||||
};
|
||||
const exportCSV = (group)=>{
|
||||
const headers = [
|
||||
'Datum',
|
||||
'Ticket ID',
|
||||
'Ticket Titel',
|
||||
'Bearbeiter',
|
||||
'Beschreibung',
|
||||
'Dauer (Min)',
|
||||
'Dauer (Std)'
|
||||
];
|
||||
const rows = group.entries.map((e)=>[
|
||||
new Date(e.createdAt).toLocaleDateString('de-DE'),
|
||||
e.ticketId,
|
||||
`"${e.ticket.title.replace(/"/g, '""')}"`,
|
||||
`"${e.user.firstName} ${e.user.lastName}"`,
|
||||
`"${e.description.replace(/"/g, '""')}"`,
|
||||
e.durationMins,
|
||||
(e.durationMins / 60).toFixed(2)
|
||||
]);
|
||||
const csvContent = [
|
||||
headers.join(';'),
|
||||
...rows.map((r)=>r.join(';'))
|
||||
].join('\n'); // Semikolon für Excel-Kompatibilität
|
||||
const blob = new Blob([
|
||||
'\uFEFF' + csvContent
|
||||
], {
|
||||
type: 'text/csv;charset=utf-8;'
|
||||
}); // BOM für Umlaute
|
||||
const url = URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
const customerName = group.customer.companyName || group.customer.lastName;
|
||||
link.setAttribute('download', `Abrechnung_${customerName.replace(/\s+/g, '_')}_${new Date().toISOString().split('T')[0]}.csv`);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
};
|
||||
// Gruppierungs-Logik
|
||||
const groupedData = entries.reduce((acc, entry)=>{
|
||||
const cid = entry.ticket.customerId;
|
||||
if (!acc[cid]) {
|
||||
acc[cid] = {
|
||||
customer: entry.ticket.customer,
|
||||
entries: [],
|
||||
totalMins: 0
|
||||
};
|
||||
}
|
||||
acc[cid].entries.push(entry);
|
||||
acc[cid].totalMins += entry.durationMins;
|
||||
return acc;
|
||||
}, {});
|
||||
const groups = Object.values(groupedData);
|
||||
if (loading) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-8 text-slate-500 font-medium animate-pulse",
|
||||
children: "Lade Abrechnungsdaten..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__["FileText"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Abrechnung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Offene, noch nicht berechnete Zeiten gebündelt nach Kunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
groups.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-12 rounded-xl shadow-sm border border-slate-200 text-center",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
|
||||
className: "w-12 h-12 text-slate-300 mx-auto mb-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
|
||||
className: "text-lg font-medium text-slate-900",
|
||||
children: "Alles erledigt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Es liegen aktuell keine unberechneten Zeiteinträge vor."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 9
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "space-y-8",
|
||||
children: groups.map((group, idx)=>{
|
||||
const customerName = group.customer.companyName || `${group.customer.firstName} ${group.customer.lastName}`;
|
||||
const totalHours = (group.totalMins / 60).toFixed(2);
|
||||
const allEntryIds = group.entries.map((e)=>e.id);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-slate-50 p-6 border-b border-slate-200 flex flex-col md:flex-row md:items-center justify-between gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-xl font-bold text-slate-900",
|
||||
children: customerName
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 text-sm mt-1",
|
||||
children: [
|
||||
"Insgesamt ",
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", {
|
||||
className: "text-slate-800",
|
||||
children: [
|
||||
group.totalMins,
|
||||
" Minuten"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 74
|
||||
}, this),
|
||||
" (",
|
||||
totalHours,
|
||||
" Stunden) abzurechnen."
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>exportCSV(group),
|
||||
className: "bg-white text-slate-700 border border-slate-300 px-4 py-2 rounded-lg hover:bg-slate-50 transition flex items-center gap-2 font-medium shadow-sm text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$download$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Download$3e$__["Download"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" CSV Export"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>markAsBilled(allEntryIds),
|
||||
className: "bg-emerald-600 text-white px-4 py-2 rounded-lg hover:bg-emerald-700 transition flex items-center gap-2 font-medium shadow-sm text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle$3e$__["CheckCircle"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" Als abgerechnet markieren"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "text-slate-500 font-medium border-b border-slate-100",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-3 px-6",
|
||||
children: "Datum"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-3 px-6",
|
||||
children: "Ticket"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-3 px-6 w-1/2",
|
||||
children: "Leistungsbeschreibung"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-3 px-6 text-right",
|
||||
children: "Dauer"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-50",
|
||||
children: group.entries.map((entry)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-3 px-6 text-slate-500",
|
||||
children: new Date(entry.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-3 px-6 font-medium text-indigo-600 hover:text-indigo-800",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/tickets/${entry.ticketId}`,
|
||||
children: [
|
||||
"#",
|
||||
entry.ticketId
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 27
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-3 px-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-900 font-medium mb-0.5",
|
||||
children: entry.ticket.title
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 27
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-600 text-xs",
|
||||
children: entry.description
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 27
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-3 px-6 text-right font-semibold text-slate-800",
|
||||
children: [
|
||||
entry.durationMins,
|
||||
" Min."
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 25
|
||||
}, this)
|
||||
]
|
||||
}, entry.id, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 23
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, idx, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this);
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/billing/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(BillingPage, "SYm0Akn46qVA7WdG5Z+f7xq5O+g=");
|
||||
_c = BillingPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "BillingPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/download.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Download
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 15V3",
|
||||
key: "m9g1x1"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",
|
||||
key: "ih7n3h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m7 10 5 5 5-5",
|
||||
key: "brsn70"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Download = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("download", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/download.mjs [app-client] (ecmascript) <export default as Download>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Download",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$download$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$download$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/download.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-check-big.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>CircleCheckBig
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.801 10A10 10 0 1 1 17 3.335",
|
||||
key: "yps3ct"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m9 11 3 3L22 4",
|
||||
key: "1pflzl"
|
||||
}
|
||||
]
|
||||
];
|
||||
const CircleCheckBig = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("circle-check-big", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-check-big.mjs [app-client] (ecmascript) <export default as CheckCircle>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"CheckCircle",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2d$big$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check-big.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Clock
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "12",
|
||||
cy: "12",
|
||||
r: "10",
|
||||
key: "1mglay"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 6v6l4 2",
|
||||
key: "mmk7yg"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Clock = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("clock", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript) <export default as Clock>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Clock",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_01a_qqj._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,160 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/error.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>ErrorBoundary
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript) <export default as AlertTriangle>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCcw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript) <export default as RefreshCcw>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function ErrorBoundary({ error, reset }) {
|
||||
_s();
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"ErrorBoundary.useEffect": ()=>{
|
||||
console.error(error);
|
||||
}
|
||||
}["ErrorBoundary.useEffect"], [
|
||||
error
|
||||
]);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "min-h-[400px] flex items-center justify-center p-8",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-8 rounded-2xl shadow-xl max-w-md w-full border border-red-100 text-center",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-16 h-16 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto mb-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], {
|
||||
className: "w-8 h-8"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 21,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 20,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-xl font-bold text-slate-900 mb-2",
|
||||
children: "Ein Fehler ist aufgetreten"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 23,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500 mb-8",
|
||||
children: "Das System konnte diese Ansicht nicht laden. Bitte versuche es erneut oder kontaktiere den Support."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 24,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>reset(),
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium inline-flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCcw$3e$__["RefreshCcw"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 31,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
" Erneut versuchen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 27,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 19,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 18,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(ErrorBoundary, "OD7bBpZva5O2jO+Puf00hKivP7c=");
|
||||
_c = ErrorBoundary;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "ErrorBoundary");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>RefreshCcw
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
|
||||
key: "14sxne"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 3v5h5",
|
||||
key: "1xhq8a"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",
|
||||
key: "1hlbsb"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M16 16h5v5",
|
||||
key: "ccwih5"
|
||||
}
|
||||
]
|
||||
];
|
||||
const RefreshCcw = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("refresh-ccw", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript) <export default as RefreshCcw>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"RefreshCcw",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_01vwkyd._.js.map
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///opt/erp-system/app/error.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport { AlertTriangle, RefreshCcw } from 'lucide-react';\n\nexport default function ErrorBoundary({\n error,\n reset,\n}: {\n error: Error & { digest?: string };\n reset: () => void;\n}) {\n useEffect(() => {\n console.error(error);\n }, [error]);\n\n return (\n <div className=\"min-h-[400px] flex items-center justify-center p-8\">\n <div className=\"bg-white p-8 rounded-2xl shadow-xl max-w-md w-full border border-red-100 text-center\">\n <div className=\"w-16 h-16 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto mb-6\">\n <AlertTriangle className=\"w-8 h-8\" />\n </div>\n <h2 className=\"text-xl font-bold text-slate-900 mb-2\">Ein Fehler ist aufgetreten</h2>\n <p className=\"text-sm text-slate-500 mb-8\">\n Das System konnte diese Ansicht nicht laden. Bitte versuche es erneut oder kontaktiere den Support.\n </p>\n <button\n onClick={() => reset()}\n className=\"bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium inline-flex items-center gap-2\"\n >\n <RefreshCcw className=\"w-4 h-4\" /> Erneut versuchen\n </button>\n </div>\n </div>\n );\n}\n"],"names":["ErrorBoundary","error","reset","console","className","onClick"],"mappings":";;;;;AAEA;AACA;AAAA;;;AAHA;;;AAKe,SAASA,cAAc,EACpCC,KAAK,EACLC,KAAK,EAIN;;IACC,IAAA,0KAAS;mCAAC;YACRC,QAAQF,KAAK,CAACA;QAChB;kCAAG;QAACA;KAAM;IAEV,qBACE,6LAAC;QAAIG,WAAU;kBACb,cAAA,6LAAC;YAAIA,WAAU;;8BACb,6LAAC;oBAAIA,WAAU;8BACb,cAAA,6LAAC,6OAAa;wBAACA,WAAU;;;;;;;;;;;8BAE3B,6LAAC;oBAAGA,WAAU;8BAAwC;;;;;;8BACtD,6LAAC;oBAAEA,WAAU;8BAA8B;;;;;;8BAG3C,6LAAC;oBACCC,SAAS,IAAMH;oBACfE,WAAU;;sCAEV,6LAAC,oOAAU;4BAACA,WAAU;;;;;;wBAAY;;;;;;;;;;;;;;;;;;AAK5C;GA9BwBJ;KAAAA"}},
|
||||
{"offset": {"line": 102, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs","sources":["file:///opt/erp-system/node_modules/lucide-react/src/icons/refresh-ccw.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '14sxne' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n ['path', { d: 'M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16', key: '1hlbsb' }],\n ['path', { d: 'M16 16h5v5', key: 'ccwih5' }],\n];\n\n/**\n * @component @name RefreshCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/refresh-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCcw = createLucideIcon('refresh-ccw', __iconNode);\n\nexport default RefreshCcw;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAsD,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACnF;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACzC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAuD,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACpF;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAc,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC7C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,KAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,kKAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}]
|
||||
}
|
||||
@@ -0,0 +1,692 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/customers/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>CustomersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/customers/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function CustomersPage() {
|
||||
_s();
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"CustomersPage.useEffect": ()=>{
|
||||
fetchCustomers();
|
||||
}
|
||||
}["CustomersPage.useEffect"], []);
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) setCustomers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/customers', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchCustomers();
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 51,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Kundenverwaltung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte deinen Kundenstamm und Ansprechpartner."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Kunde'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 48,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Kundendaten erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Telefon"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "tel",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.phone,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
phone: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firma (Optional)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.companyName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Kunde speichern"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kontakt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors group border-b border-slate-50 last:border-0",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
c.id.toString().padStart(4, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: [
|
||||
c.firstName,
|
||||
" ",
|
||||
c.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.companyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs flex items-center gap-1 mt-0.5",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__["Building2"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
" ",
|
||||
c.companyName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col gap-1 text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 63
|
||||
}, this),
|
||||
" ",
|
||||
c.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2 text-xs",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__["Phone"], {
|
||||
className: "w-3 h-3 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 83
|
||||
}, this),
|
||||
" ",
|
||||
c.phone
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 33
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/customers/${c.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800 transition-opacity inline-block p-2",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
customers.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Kunden vorhanden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(CustomersPage, "vnHPr/IKUav/ewwkFv8FFvqdDhA=");
|
||||
_c = CustomersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "CustomersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Phone
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
||||
key: "9njp5v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Phone = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("phone", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Phone",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_020vusv._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,814 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/customers/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>CustomersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/customers/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
function CustomersPage() {
|
||||
_s();
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
const { toast, confirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const permissions = session?.user?.permissions || [];
|
||||
const canDelete = permissions.includes('DATA_DELETE');
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"CustomersPage.useEffect": ()=>{
|
||||
fetchCustomers();
|
||||
}
|
||||
}["CustomersPage.useEffect"], []);
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) setCustomers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/customers', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchCustomers();
|
||||
}
|
||||
};
|
||||
const handleDelete = async (customer)=>{
|
||||
const isConfirmed = await confirm({
|
||||
title: 'Kunde löschen',
|
||||
message: `"${customer.companyName || customer.firstName + ' ' + customer.lastName}" und alle verknüpften Daten (Tickets, Verträge, Dokumente) unwiderruflich löschen?`,
|
||||
danger: true
|
||||
});
|
||||
if (!isConfirmed) return;
|
||||
const res = await fetch(`/api/customers?id=${customer.id}`, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
if (res.ok) {
|
||||
toast('Kunde gelöscht', 'success');
|
||||
fetchCustomers();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
toast(data.error || 'Fehler beim Löschen', 'error');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Kundenverwaltung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte deinen Kundenstamm und Ansprechpartner."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Kunde'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Kundendaten erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 95,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Telefon"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "tel",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.phone,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
phone: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firma (Optional)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.companyName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Kunde speichern"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kontakt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors group border-b border-slate-50 last:border-0",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
c.id.toString().padStart(4, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: [
|
||||
c.firstName,
|
||||
" ",
|
||||
c.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.companyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs flex items-center gap-1 mt-0.5",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__["Building2"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
" ",
|
||||
c.companyName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col gap-1 text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 63
|
||||
}, this),
|
||||
" ",
|
||||
c.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2 text-xs",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__["Phone"], {
|
||||
className: "w-3 h-3 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 83
|
||||
}, this),
|
||||
" ",
|
||||
c.phone
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 33
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 148,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-end gap-1",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/customers/${c.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800 transition-opacity inline-block p-2",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 155,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
canDelete && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleDelete(c),
|
||||
className: "p-2 text-slate-400 hover:text-red-600 hover:bg-red-50 rounded-lg transition-all",
|
||||
title: "Kunde löschen",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 25
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 154,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
customers.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Kunden vorhanden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(CustomersPage, "HZMDeNbRzVB6IT+eZkoic1wpSLg=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"]
|
||||
];
|
||||
});
|
||||
_c = CustomersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "CustomersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Phone
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
||||
key: "9njp5v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Phone = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("phone", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Phone",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Trash2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 11v6",
|
||||
key: "nco0om"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 11v6",
|
||||
key: "outv1u"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
|
||||
key: "miytrc"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 6h18",
|
||||
key: "d0wm0j"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",
|
||||
key: "e791ji"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("trash-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Trash2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_02i2h.u._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,484 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/settings/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>SettingsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/settings.mjs [app-client] (ecmascript) <export default as Settings>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/settings/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function SettingsPage() {
|
||||
_s();
|
||||
const [data, setData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
hourlyRate: 0,
|
||||
taxRate: 0,
|
||||
companyName: '',
|
||||
companyInfo: ''
|
||||
});
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true);
|
||||
const [msg, setMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"SettingsPage.useEffect": ()=>{
|
||||
fetch('/api/settings').then({
|
||||
"SettingsPage.useEffect": (res)=>res.json()
|
||||
}["SettingsPage.useEffect"]).then({
|
||||
"SettingsPage.useEffect": (d)=>{
|
||||
setData(d);
|
||||
setLoading(false);
|
||||
}
|
||||
}["SettingsPage.useEffect"]);
|
||||
}
|
||||
}["SettingsPage.useEffect"], []);
|
||||
const handleSave = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/settings', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
if (res.ok) {
|
||||
setMsg('Einstellungen erfolgreich gespeichert.');
|
||||
setTimeout(()=>setMsg(''), 3000);
|
||||
}
|
||||
};
|
||||
if (loading) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-8",
|
||||
children: "Lade Konfiguration..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 32,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-3xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 37,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
" Systemeinstellungen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 36,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
msg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 bg-emerald-50 text-emerald-700 border border-emerald-200 rounded-lg",
|
||||
children: msg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 40,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSave,
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 divide-y divide-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Abrechnungsparameter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 44,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__["Euro"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 48,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Standard-Stundensatz"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 47,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.01",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.hourlyRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
hourlyRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__["Percent"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Mehrwertsteuer (%)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.1",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.taxRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
taxRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 56,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 52,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 45,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 43,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Rechnungskopf"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firmenname"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.companyName || '',
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 65,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 63,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Briefkopf Informationen (Anschrift, Bank, Steuer)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none h-32",
|
||||
value: data.companyInfo || '',
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
companyInfo: e.target.value
|
||||
}),
|
||||
placeholder: "Muster GmbH, Musterstraße 1..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 61,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 bg-slate-50 flex justify-end",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-indigo-600 text-white px-6 py-2.5 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-bold shadow-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__["Save"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Speichern"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 42,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 35,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(SettingsPage, "yI/CKmbnF8Q2RJjWOwkHrK8kojU=");
|
||||
_c = SettingsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "SettingsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Save
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
|
||||
key: "1c8476"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",
|
||||
key: "1ydtos"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M7 3v4a1 1 0 0 0 1 1h7",
|
||||
key: "t51u73"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Save = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("save", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Save",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Percent
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"line",
|
||||
{
|
||||
x1: "19",
|
||||
x2: "5",
|
||||
y1: "5",
|
||||
y2: "19",
|
||||
key: "1x9vlm"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "6.5",
|
||||
cy: "6.5",
|
||||
r: "2.5",
|
||||
key: "4mh3h7"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "17.5",
|
||||
cy: "17.5",
|
||||
r: "2.5",
|
||||
key: "1mdrzq"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Percent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("percent", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Percent",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Euro
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 10h12",
|
||||
key: "1y6xl8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 14h9",
|
||||
key: "1loblj"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",
|
||||
key: "1j6lzo"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Euro = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("euro", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Euro",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_02kl_lt._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,702 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/tickets/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>TicketsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/ticket.mjs [app-client] (ecmascript) <export default as Ticket>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/tickets/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
function TicketsPage() {
|
||||
_s();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const [tickets, setTickets] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [filter, setFilter] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('ALL');
|
||||
// States für das Formular
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"TicketsPage.useEffect": ()=>{
|
||||
fetchTickets();
|
||||
fetchCustomers();
|
||||
}
|
||||
}["TicketsPage.useEffect"], []);
|
||||
const fetchTickets = async ()=>{
|
||||
const res = await fetch('/api/tickets');
|
||||
if (res.ok) setTickets(await res.json());
|
||||
};
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setCustomers(data);
|
||||
if (data.length > 0) {
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
customerId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/tickets', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setShowForm(false);
|
||||
setFormData({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: customers[0]?.id.toString() || ''
|
||||
});
|
||||
fetchTickets();
|
||||
} else {
|
||||
alert('Fehler beim Erstellen des Tickets');
|
||||
}
|
||||
};
|
||||
const getStatusBadge = (status)=>{
|
||||
switch(status){
|
||||
case 'OPEN':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-red-600 bg-red-50 px-2.5 py-1 rounded-md text-xs font-semibold border border-red-100",
|
||||
children: "Offen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 58,
|
||||
columnNumber: 27
|
||||
}, this);
|
||||
case 'IN_PROGRESS':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-amber-600 bg-amber-50 px-2.5 py-1 rounded-md text-xs font-semibold border border-amber-100",
|
||||
children: "In Bearbeitung"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 34
|
||||
}, this);
|
||||
case 'WAITING_FOR_CUSTOMER':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-blue-600 bg-blue-50 px-2.5 py-1 rounded-md text-xs font-semibold border border-blue-100",
|
||||
children: "Wartet auf Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 43
|
||||
}, this);
|
||||
case 'RESOLVED':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-emerald-600 bg-emerald-50 px-2.5 py-1 rounded-md text-xs font-semibold border border-emerald-100",
|
||||
children: "Gelöst"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 61,
|
||||
columnNumber: 31
|
||||
}, this);
|
||||
case 'CLOSED':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-600 bg-slate-100 px-2.5 py-1 rounded-md text-xs font-semibold border border-slate-200",
|
||||
children: "Geschlossen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 29
|
||||
}, this);
|
||||
default:
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-600 bg-slate-100 px-2.5 py-1 rounded-md text-xs font-semibold border border-slate-200",
|
||||
children: status
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 63,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
}
|
||||
};
|
||||
// Filter-Logik
|
||||
const filteredTickets = tickets.filter((t)=>{
|
||||
if (filter === 'OPEN') return t.status === 'OPEN' || t.status === 'IN_PROGRESS';
|
||||
if (filter === 'MINE') return t.assignedToId === parseInt(session?.user?.id);
|
||||
return true;
|
||||
});
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__["Ticket"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
" Ticketsystem"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg font-medium shadow-sm flex items-center gap-2 hover:bg-indigo-700 transition",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
" ",
|
||||
showForm ? 'Abbrechen' : 'Neues Ticket'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Neues Ticket erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Betreff *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.title,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
title: e.target.value
|
||||
}),
|
||||
placeholder: "Kurze Beschreibung des Problems..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Kunde *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none bg-white",
|
||||
value: formData.customerId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
customerId: e.target.value
|
||||
}),
|
||||
children: customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: c.id,
|
||||
children: c.companyName || `${c.firstName} ${c.lastName}`
|
||||
}, c.id, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 21
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Details *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none h-32 resize-none",
|
||||
value: formData.description,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
description: e.target.value
|
||||
}),
|
||||
placeholder: "Ausführliche Problembeschreibung..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Ticket erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex border-b border-slate-200 gap-6",
|
||||
children: [
|
||||
{
|
||||
id: 'ALL',
|
||||
label: 'Alle Tickets'
|
||||
},
|
||||
{
|
||||
id: 'MINE',
|
||||
label: 'Meine Tickets'
|
||||
},
|
||||
{
|
||||
id: 'OPEN',
|
||||
label: 'Nur Offene'
|
||||
}
|
||||
].map((tab)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setFilter(tab.id),
|
||||
className: `pb-3 text-sm font-medium transition-colors relative ${filter === tab.id ? 'text-indigo-600' : 'text-slate-500 hover:text-slate-700'}`,
|
||||
children: [
|
||||
tab.label,
|
||||
filter === tab.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bottom-0 left-0 right-0 h-0.5 bg-indigo-600 animate-in fade-in duration-300"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 35
|
||||
}, this)
|
||||
]
|
||||
}, tab.id, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Titel & Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 140,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Bearbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Status"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
filteredTickets.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
t.id.toString().padStart(5, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: t.title
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 152,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs",
|
||||
children: t.customer.companyName || `${t.customer.firstName} ${t.customer.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 151,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: t.assignedTo ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-1.5 text-slate-700",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-6 h-6 rounded-full bg-indigo-100 flex items-center justify-center text-[10px] font-bold text-indigo-700 border border-indigo-200",
|
||||
children: t.assignedTo.firstName[0]
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
t.assignedTo.firstName,
|
||||
" ",
|
||||
t.assignedTo.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 158,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-400 italic text-xs",
|
||||
children: "Unzugewiesen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 164,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: getStatusBadge(t.status)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/tickets/${t.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 167,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, t.id, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 148,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
filteredTickets.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Tickets in dieser Ansicht gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 174,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 173,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(TicketsPage, "55K8nWtBk7sp4Xtkw6zy57JOk9M=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"]
|
||||
];
|
||||
});
|
||||
_c = TicketsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "TicketsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_036d1k0._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,955 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/search/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>SearchPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/search.mjs [app-client] (ecmascript) <export default as Search>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/ticket.mjs [app-client] (ecmascript) <export default as Ticket>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$AppShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/AppShell.tsx [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/search/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
function SearchResults() {
|
||||
_s();
|
||||
const searchParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"])();
|
||||
const q = searchParams.get('q');
|
||||
const [results, setResults] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
tickets: [],
|
||||
customers: []
|
||||
});
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"SearchResults.useEffect": ()=>{
|
||||
if (q) {
|
||||
setLoading(true);
|
||||
fetch(`/api/search?q=${encodeURIComponent(q)}`).then({
|
||||
"SearchResults.useEffect": (res)=>res.json()
|
||||
}["SearchResults.useEffect"]).then({
|
||||
"SearchResults.useEffect": (data)=>{
|
||||
setResults(data);
|
||||
setLoading(false);
|
||||
}
|
||||
}["SearchResults.useEffect"]);
|
||||
}
|
||||
}
|
||||
}["SearchResults.useEffect"], [
|
||||
q
|
||||
]);
|
||||
if (!q) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-slate-500 font-medium",
|
||||
children: "Bitte gib einen Suchbegriff ein."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 29,
|
||||
columnNumber: 18
|
||||
}, this);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-5xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__["Search"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 34,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
' Suchergebnisse für "',
|
||||
q,
|
||||
'"'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 33,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
loading ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-slate-500 font-medium animate-pulse",
|
||||
children: "Suche läuft..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 38,
|
||||
columnNumber: 9
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "space-y-8",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 border-b border-slate-200 bg-slate-50 flex items-center gap-2 font-semibold text-slate-800",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-5 h-5 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 44,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
" Kunden (",
|
||||
results.customers?.length || 0,
|
||||
")"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 43,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: results.customers?.length > 0 ? results.customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
|
||||
href: `/customers/${c.id}`,
|
||||
className: "block p-4 hover:bg-slate-50 transition",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "font-semibold text-indigo-600",
|
||||
children: c.companyName || `${c.firstName} ${c.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500",
|
||||
children: c.email
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 48,
|
||||
columnNumber: 17
|
||||
}, this)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 text-sm text-slate-500",
|
||||
children: "Keine Kunden gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 42,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 border-b border-slate-200 bg-slate-50 flex items-center gap-2 font-semibold text-slate-800",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__["Ticket"], {
|
||||
className: "w-5 h-5 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
" Tickets (",
|
||||
results.tickets?.length || 0,
|
||||
")"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: results.tickets?.length > 0 ? results.tickets.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
|
||||
href: `/tickets/${t.id}`,
|
||||
className: "block p-4 hover:bg-slate-50 transition flex justify-between items-start",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "font-semibold text-indigo-600",
|
||||
children: [
|
||||
"#",
|
||||
t.id,
|
||||
" - ",
|
||||
t.title
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500 mt-1 line-clamp-1",
|
||||
children: t.description
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-xs text-slate-400 mt-1",
|
||||
children: [
|
||||
"Kunde: ",
|
||||
t.customer.companyName || `${t.customer.firstName} ${t.customer.lastName}`
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 65,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "ml-4 shrink-0",
|
||||
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$AppShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getStatusBadge"])(t.status)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, t.id, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 17
|
||||
}, this)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 text-sm text-slate-500",
|
||||
children: "Keine Tickets gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 58,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 40,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 32,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(SearchResults, "vUeY/rGg5egL710t8+ro2v63ceE=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"]
|
||||
];
|
||||
});
|
||||
_c = SearchResults;
|
||||
function SearchPage() {
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Suspense"], {
|
||||
fallback: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-slate-500",
|
||||
children: "Lade Suche..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(SearchResults, {}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/search/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_c1 = SearchPage;
|
||||
var _c, _c1;
|
||||
__turbopack_context__.k.register(_c, "SearchResults");
|
||||
__turbopack_context__.k.register(_c1, "SearchPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
"use strict";
|
||||
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||||
// Format function modified from nodejs
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
formatUrl: null,
|
||||
formatWithValidation: null,
|
||||
urlObjectKeys: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
formatUrl: function() {
|
||||
return formatUrl;
|
||||
},
|
||||
formatWithValidation: function() {
|
||||
return formatWithValidation;
|
||||
},
|
||||
urlObjectKeys: function() {
|
||||
return urlObjectKeys;
|
||||
}
|
||||
});
|
||||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||||
const _querystring = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/querystring.js [app-client] (ecmascript)"));
|
||||
const slashedProtocols = /https?|ftp|gopher|file/;
|
||||
function formatUrl(urlObj) {
|
||||
let { auth, hostname } = urlObj;
|
||||
let protocol = urlObj.protocol || '';
|
||||
let pathname = urlObj.pathname || '';
|
||||
let hash = urlObj.hash || '';
|
||||
let query = urlObj.query || '';
|
||||
let host = false;
|
||||
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
||||
if (urlObj.host) {
|
||||
host = auth + urlObj.host;
|
||||
} else if (hostname) {
|
||||
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
||||
if (urlObj.port) {
|
||||
host += ':' + urlObj.port;
|
||||
}
|
||||
}
|
||||
if (query && typeof query === 'object') {
|
||||
query = String(_querystring.urlQueryToSearchParams(query));
|
||||
}
|
||||
let search = urlObj.search || query && `?${query}` || '';
|
||||
if (protocol && !protocol.endsWith(':')) protocol += ':';
|
||||
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
||||
host = '//' + (host || '');
|
||||
if (pathname && pathname[0] !== '/') pathname = '/' + pathname;
|
||||
} else if (!host) {
|
||||
host = '';
|
||||
}
|
||||
if (hash && hash[0] !== '#') hash = '#' + hash;
|
||||
if (search && search[0] !== '?') search = '?' + search;
|
||||
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
||||
search = search.replace('#', '%23');
|
||||
return `${protocol}${host}${pathname}${search}${hash}`;
|
||||
}
|
||||
const urlObjectKeys = [
|
||||
'auth',
|
||||
'hash',
|
||||
'host',
|
||||
'hostname',
|
||||
'href',
|
||||
'path',
|
||||
'pathname',
|
||||
'port',
|
||||
'protocol',
|
||||
'query',
|
||||
'search',
|
||||
'slashes'
|
||||
];
|
||||
function formatWithValidation(url) {
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
if (url !== null && typeof url === 'object') {
|
||||
Object.keys(url).forEach((key)=>{
|
||||
if (!urlObjectKeys.includes(key)) {
|
||||
console.warn(`Unknown key passed via urlObject into url.format: ${key}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return formatUrl(url);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/next/dist/client/use-merged-ref.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "useMergedRef", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return useMergedRef;
|
||||
}
|
||||
});
|
||||
const _react = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
function useMergedRef(refA, refB) {
|
||||
const cleanupA = (0, _react.useRef)(null);
|
||||
const cleanupB = (0, _react.useRef)(null);
|
||||
// NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
|
||||
// (this happens often if the user doesn't pass a ref to Link/Form/Image)
|
||||
// But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
|
||||
// and the user might pass that ref into ref-merging library that doesn't support cleanup refs
|
||||
// (because it hasn't been updated for React 19)
|
||||
// which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
|
||||
// So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
|
||||
return (0, _react.useCallback)((current)=>{
|
||||
if (current === null) {
|
||||
const cleanupFnA = cleanupA.current;
|
||||
if (cleanupFnA) {
|
||||
cleanupA.current = null;
|
||||
cleanupFnA();
|
||||
}
|
||||
const cleanupFnB = cleanupB.current;
|
||||
if (cleanupFnB) {
|
||||
cleanupB.current = null;
|
||||
cleanupFnB();
|
||||
}
|
||||
} else {
|
||||
if (refA) {
|
||||
cleanupA.current = applyRef(refA, current);
|
||||
}
|
||||
if (refB) {
|
||||
cleanupB.current = applyRef(refB, current);
|
||||
}
|
||||
}
|
||||
}, [
|
||||
refA,
|
||||
refB
|
||||
]);
|
||||
}
|
||||
function applyRef(refA, current) {
|
||||
if (typeof refA === 'function') {
|
||||
const cleanup = refA(current);
|
||||
if (typeof cleanup === 'function') {
|
||||
return cleanup;
|
||||
} else {
|
||||
return ()=>refA(null);
|
||||
}
|
||||
} else {
|
||||
refA.current = current;
|
||||
return ()=>{
|
||||
refA.current = null;
|
||||
};
|
||||
}
|
||||
}
|
||||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||||
Object.defineProperty(exports.default, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
Object.assign(exports.default, exports);
|
||||
module.exports = exports.default;
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "isLocalURL", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return isLocalURL;
|
||||
}
|
||||
});
|
||||
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils.js [app-client] (ecmascript)");
|
||||
const _hasbasepath = __turbopack_context__.r("[project]/node_modules/next/dist/client/has-base-path.js [app-client] (ecmascript)");
|
||||
function isLocalURL(url) {
|
||||
// prevent a hydration mismatch on href for url with anchor refs
|
||||
if (!(0, _utils.isAbsoluteUrl)(url)) return true;
|
||||
try {
|
||||
// absolute urls can be local if they are on the same origin
|
||||
const locationOrigin = (0, _utils.getLocationOrigin)();
|
||||
const resolved = new URL(url, locationOrigin);
|
||||
return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/next/dist/shared/lib/utils/error-once.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
"use strict";
|
||||
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "errorOnce", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return errorOnce;
|
||||
}
|
||||
});
|
||||
let errorOnce = (_)=>{};
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
const errors = new Set();
|
||||
errorOnce = (msg)=>{
|
||||
if (!errors.has(msg)) {
|
||||
console.error(msg);
|
||||
}
|
||||
errors.add(msg);
|
||||
};
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
"use strict";
|
||||
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||||
'use client';
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
default: null,
|
||||
useLinkStatus: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
/**
|
||||
* A React component that extends the HTML `<a>` element to provide
|
||||
* [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)
|
||||
* and client-side navigation. This is the primary way to navigate between routes in Next.js.
|
||||
*
|
||||
* @remarks
|
||||
* - Prefetching is only enabled in production.
|
||||
*
|
||||
* @see https://nextjs.org/docs/app/api-reference/components/link
|
||||
*/ default: function() {
|
||||
return LinkComponent;
|
||||
},
|
||||
useLinkStatus: function() {
|
||||
return useLinkStatus;
|
||||
}
|
||||
});
|
||||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||||
const _jsxruntime = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)");
|
||||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||||
const _formaturl = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-client] (ecmascript)");
|
||||
const _approutercontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js [app-client] (ecmascript)");
|
||||
const _usemergedref = __turbopack_context__.r("[project]/node_modules/next/dist/client/use-merged-ref.js [app-client] (ecmascript)");
|
||||
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils.js [app-client] (ecmascript)");
|
||||
const _addbasepath = __turbopack_context__.r("[project]/node_modules/next/dist/client/add-base-path.js [app-client] (ecmascript)");
|
||||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [app-client] (ecmascript)");
|
||||
const _routerreducertypes = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js [app-client] (ecmascript)");
|
||||
const _links = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/links.js [app-client] (ecmascript)");
|
||||
const _islocalurl = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-client] (ecmascript)");
|
||||
const _types = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/segment-cache/types.js [app-client] (ecmascript)");
|
||||
const _erroronce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/error-once.js [app-client] (ecmascript)");
|
||||
function isModifiedEvent(event) {
|
||||
const eventTarget = event.currentTarget;
|
||||
const target = eventTarget.getAttribute('target');
|
||||
return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download
|
||||
event.nativeEvent && event.nativeEvent.which === 2;
|
||||
}
|
||||
function linkClicked(e, href, linkInstanceRef, replace, scroll, onNavigate, transitionTypes) {
|
||||
if (typeof window !== 'undefined') {
|
||||
const { nodeName } = e.currentTarget;
|
||||
// anchors inside an svg have a lowercase nodeName
|
||||
const isAnchorNodeName = nodeName.toUpperCase() === 'A';
|
||||
if (isAnchorNodeName && isModifiedEvent(e) || e.currentTarget.hasAttribute('download')) {
|
||||
// ignore click for browser’s default behavior
|
||||
return;
|
||||
}
|
||||
if (!(0, _islocalurl.isLocalURL)(href)) {
|
||||
if (replace) {
|
||||
// browser default behavior does not replace the history state
|
||||
// so we need to do it manually
|
||||
e.preventDefault();
|
||||
location.replace(href);
|
||||
}
|
||||
// ignore click for browser’s default behavior
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
if (onNavigate) {
|
||||
let isDefaultPrevented = false;
|
||||
onNavigate({
|
||||
preventDefault: ()=>{
|
||||
isDefaultPrevented = true;
|
||||
}
|
||||
});
|
||||
if (isDefaultPrevented) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const { dispatchNavigateAction } = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/app-router-instance.js [app-client] (ecmascript)");
|
||||
_react.default.startTransition(()=>{
|
||||
dispatchNavigateAction(href, replace ? 'replace' : 'push', scroll === false ? _routerreducertypes.ScrollBehavior.NoScroll : _routerreducertypes.ScrollBehavior.Default, linkInstanceRef.current, transitionTypes);
|
||||
});
|
||||
}
|
||||
}
|
||||
function formatStringOrUrl(urlObjOrString) {
|
||||
if (typeof urlObjOrString === 'string') {
|
||||
return urlObjOrString;
|
||||
}
|
||||
return (0, _formaturl.formatUrl)(urlObjOrString);
|
||||
}
|
||||
function LinkComponent(props) {
|
||||
const [linkStatus, setOptimisticLinkStatus] = (0, _react.useOptimistic)(_links.IDLE_LINK_STATUS);
|
||||
let children;
|
||||
const linkInstanceRef = (0, _react.useRef)(null);
|
||||
const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, onNavigate, transitionTypes, ref: forwardedRef, unstable_dynamicOnHover, ...restProps } = props;
|
||||
children = childrenProp;
|
||||
if (legacyBehavior && (typeof children === 'string' || typeof children === 'number')) {
|
||||
children = /*#__PURE__*/ (0, _jsxruntime.jsx)("a", {
|
||||
children: children
|
||||
});
|
||||
}
|
||||
const router = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);
|
||||
const prefetchEnabled = prefetchProp !== false;
|
||||
const fetchStrategy = prefetchProp !== false ? getFetchStrategyFromPrefetchProp(prefetchProp) : _types.FetchStrategy.PPR;
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
function createPropError(args) {
|
||||
return Object.defineProperty(new Error(`Failed prop type: The prop \`${args.key}\` expects a ${args.expected} in \`<Link>\`, but got \`${args.actual}\` instead.` + (typeof window !== 'undefined' ? "\nOpen your browser's console to view the Component stack trace." : '')), "__NEXT_ERROR_CODE", {
|
||||
value: "E319",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
// TypeScript trick for type-guarding:
|
||||
const requiredPropsGuard = {
|
||||
href: true
|
||||
};
|
||||
const requiredProps = Object.keys(requiredPropsGuard);
|
||||
requiredProps.forEach((key)=>{
|
||||
if (key === 'href') {
|
||||
if (props[key] == null || typeof props[key] !== 'string' && typeof props[key] !== 'object') {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`string` or `object`',
|
||||
actual: props[key] === null ? 'null' : typeof props[key]
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// TypeScript trick for type-guarding:
|
||||
const _ = key;
|
||||
}
|
||||
});
|
||||
// TypeScript trick for type-guarding:
|
||||
const optionalPropsGuard = {
|
||||
as: true,
|
||||
replace: true,
|
||||
scroll: true,
|
||||
shallow: true,
|
||||
passHref: true,
|
||||
prefetch: true,
|
||||
unstable_dynamicOnHover: true,
|
||||
onClick: true,
|
||||
onMouseEnter: true,
|
||||
onTouchStart: true,
|
||||
legacyBehavior: true,
|
||||
onNavigate: true,
|
||||
transitionTypes: true
|
||||
};
|
||||
const optionalProps = Object.keys(optionalPropsGuard);
|
||||
optionalProps.forEach((key)=>{
|
||||
const valType = typeof props[key];
|
||||
if (key === 'as') {
|
||||
if (props[key] && valType !== 'string' && valType !== 'object') {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`string` or `object`',
|
||||
actual: valType
|
||||
});
|
||||
}
|
||||
} else if (key === 'onClick' || key === 'onMouseEnter' || key === 'onTouchStart' || key === 'onNavigate') {
|
||||
if (props[key] && valType !== 'function') {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`function`',
|
||||
actual: valType
|
||||
});
|
||||
}
|
||||
} else if (key === 'replace' || key === 'scroll' || key === 'shallow' || key === 'passHref' || key === 'legacyBehavior' || key === 'unstable_dynamicOnHover') {
|
||||
if (props[key] != null && valType !== 'boolean') {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`boolean`',
|
||||
actual: valType
|
||||
});
|
||||
}
|
||||
} else if (key === 'prefetch') {
|
||||
if (props[key] != null && valType !== 'boolean' && props[key] !== 'auto') {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`boolean | "auto"`',
|
||||
actual: valType
|
||||
});
|
||||
}
|
||||
} else if (key === 'transitionTypes') {
|
||||
if (props[key] != null && !Array.isArray(props[key])) {
|
||||
throw createPropError({
|
||||
key,
|
||||
expected: '`string[]`',
|
||||
actual: valType
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// TypeScript trick for type-guarding:
|
||||
const _ = key;
|
||||
}
|
||||
});
|
||||
}
|
||||
const resolvedHref = asProp || hrefProp;
|
||||
const formattedHref = formatStringOrUrl(resolvedHref);
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
if (props.locale) {
|
||||
(0, _warnonce.warnOnce)('The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization');
|
||||
}
|
||||
if (!asProp) {
|
||||
let href;
|
||||
if (typeof resolvedHref === 'string') {
|
||||
href = resolvedHref;
|
||||
} else if (typeof resolvedHref === 'object' && typeof resolvedHref.pathname === 'string') {
|
||||
href = resolvedHref.pathname;
|
||||
}
|
||||
if (href) {
|
||||
const hasDynamicSegment = href.split('/').some((segment)=>segment.startsWith('[') && segment.endsWith(']'));
|
||||
if (hasDynamicSegment) {
|
||||
throw Object.defineProperty(new Error(`Dynamic href \`${href}\` found in <Link> while using the \`/app\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`), "__NEXT_ERROR_CODE", {
|
||||
value: "E267",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// This will return the first child, if multiple are provided it will throw an error
|
||||
let child;
|
||||
if (legacyBehavior) {
|
||||
if (children?.$$typeof === Symbol.for('react.lazy')) {
|
||||
throw Object.defineProperty(new Error(`\`<Link legacyBehavior>\` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's \`<a>\` tag.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E863",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
if (onClick) {
|
||||
console.warn(`"onClick" was passed to <Link> with \`href\` of \`${formattedHref}\` but "legacyBehavior" was set. The legacy behavior requires onClick be set on the child of next/link`);
|
||||
}
|
||||
if (onMouseEnterProp) {
|
||||
console.warn(`"onMouseEnter" was passed to <Link> with \`href\` of \`${formattedHref}\` but "legacyBehavior" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`);
|
||||
}
|
||||
try {
|
||||
child = _react.default.Children.only(children);
|
||||
} catch (err) {
|
||||
if (!children) {
|
||||
throw Object.defineProperty(new Error(`No children were passed to <Link> with \`href\` of \`${formattedHref}\` but one child is required https://nextjs.org/docs/messages/link-no-children`), "__NEXT_ERROR_CODE", {
|
||||
value: "E320",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
throw Object.defineProperty(new Error(`Multiple children were passed to <Link> with \`href\` of \`${formattedHref}\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` + (typeof window !== 'undefined' ? " \nOpen your browser's console to view the Component stack trace." : '')), "__NEXT_ERROR_CODE", {
|
||||
value: "E266",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
} else //TURBOPACK unreachable
|
||||
;
|
||||
} else {
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
if (children?.type === 'a') {
|
||||
throw Object.defineProperty(new Error('Invalid <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'), "__NEXT_ERROR_CODE", {
|
||||
value: "E209",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
const childRef = legacyBehavior ? child && typeof child === 'object' && child.ref : forwardedRef;
|
||||
// Use a callback ref to attach an IntersectionObserver to the anchor tag on
|
||||
// mount. In the future we will also use this to keep track of all the
|
||||
// currently mounted <Link> instances, e.g. so we can re-prefetch them after
|
||||
// a revalidation or refresh.
|
||||
const observeLinkVisibilityOnMount = _react.default.useCallback({
|
||||
"LinkComponent.useCallback[observeLinkVisibilityOnMount]": (element)=>{
|
||||
if (router !== null) {
|
||||
linkInstanceRef.current = (0, _links.mountLinkInstance)(element, formattedHref, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus);
|
||||
}
|
||||
return ({
|
||||
"LinkComponent.useCallback[observeLinkVisibilityOnMount]": ()=>{
|
||||
if (linkInstanceRef.current) {
|
||||
(0, _links.unmountLinkForCurrentNavigation)(linkInstanceRef.current);
|
||||
linkInstanceRef.current = null;
|
||||
}
|
||||
(0, _links.unmountPrefetchableInstance)(element);
|
||||
}
|
||||
})["LinkComponent.useCallback[observeLinkVisibilityOnMount]"];
|
||||
}
|
||||
}["LinkComponent.useCallback[observeLinkVisibilityOnMount]"], [
|
||||
prefetchEnabled,
|
||||
formattedHref,
|
||||
router,
|
||||
fetchStrategy,
|
||||
setOptimisticLinkStatus
|
||||
]);
|
||||
const mergedRef = (0, _usemergedref.useMergedRef)(observeLinkVisibilityOnMount, childRef);
|
||||
const childProps = {
|
||||
ref: mergedRef,
|
||||
onClick (e) {
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
if (!e) {
|
||||
throw Object.defineProperty(new Error(`Component rendered inside next/link has to pass click event to "onClick" prop.`), "__NEXT_ERROR_CODE", {
|
||||
value: "E312",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!legacyBehavior && typeof onClick === 'function') {
|
||||
onClick(e);
|
||||
}
|
||||
if (legacyBehavior && child.props && typeof child.props.onClick === 'function') {
|
||||
child.props.onClick(e);
|
||||
}
|
||||
if (!router) {
|
||||
return;
|
||||
}
|
||||
if (e.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
linkClicked(e, formattedHref, linkInstanceRef, replace, scroll, onNavigate, transitionTypes);
|
||||
},
|
||||
onMouseEnter (e) {
|
||||
if (!legacyBehavior && typeof onMouseEnterProp === 'function') {
|
||||
onMouseEnterProp(e);
|
||||
}
|
||||
if (legacyBehavior && child.props && typeof child.props.onMouseEnter === 'function') {
|
||||
child.props.onMouseEnter(e);
|
||||
}
|
||||
if (!router) {
|
||||
return;
|
||||
}
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
return;
|
||||
}
|
||||
//TURBOPACK unreachable
|
||||
;
|
||||
const upgradeToDynamicPrefetch = undefined;
|
||||
},
|
||||
onTouchStart: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : function onTouchStart(e) {
|
||||
if (!legacyBehavior && typeof onTouchStartProp === 'function') {
|
||||
onTouchStartProp(e);
|
||||
}
|
||||
if (legacyBehavior && child.props && typeof child.props.onTouchStart === 'function') {
|
||||
child.props.onTouchStart(e);
|
||||
}
|
||||
if (!router) {
|
||||
return;
|
||||
}
|
||||
if (!prefetchEnabled) {
|
||||
return;
|
||||
}
|
||||
const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;
|
||||
(0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);
|
||||
}
|
||||
};
|
||||
// If the url is absolute, we can bypass the logic to prepend the basePath.
|
||||
if ((0, _utils.isAbsoluteUrl)(formattedHref)) {
|
||||
childProps.href = formattedHref;
|
||||
} else if (!legacyBehavior || passHref || child.type === 'a' && !('href' in child.props)) {
|
||||
childProps.href = (0, _addbasepath.addBasePath)(formattedHref);
|
||||
}
|
||||
let link;
|
||||
if (legacyBehavior) {
|
||||
if ("TURBOPACK compile-time truthy", 1) {
|
||||
(0, _erroronce.errorOnce)('`legacyBehavior` is deprecated and will be removed in a future ' + 'release. A codemod is available to upgrade your components:\n\n' + 'npx @next/codemod@latest new-link .\n\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components');
|
||||
}
|
||||
link = /*#__PURE__*/ _react.default.cloneElement(child, childProps);
|
||||
} else {
|
||||
link = /*#__PURE__*/ (0, _jsxruntime.jsx)("a", {
|
||||
...restProps,
|
||||
...childProps,
|
||||
children: children
|
||||
});
|
||||
}
|
||||
return /*#__PURE__*/ (0, _jsxruntime.jsx)(LinkStatusContext.Provider, {
|
||||
value: linkStatus,
|
||||
children: link
|
||||
});
|
||||
}
|
||||
const LinkStatusContext = /*#__PURE__*/ (0, _react.createContext)(_links.IDLE_LINK_STATUS);
|
||||
const useLinkStatus = ()=>{
|
||||
return (0, _react.useContext)(LinkStatusContext);
|
||||
};
|
||||
function getFetchStrategyFromPrefetchProp(prefetchProp) {
|
||||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||||
;
|
||||
else {
|
||||
return prefetchProp === null || prefetchProp === 'auto' ? _types.FetchStrategy.PPR : // (although invalid values should've been filtered out by prop validation in dev)
|
||||
_types.FetchStrategy.Full;
|
||||
}
|
||||
}
|
||||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||||
Object.defineProperty(exports.default, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
Object.assign(exports.default, exports);
|
||||
module.exports = exports.default;
|
||||
}
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_060w1qh._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,558 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/login/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>LoginPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$key$2d$round$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__KeyRound$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/key-round.mjs [app-client] (ecmascript) <export default as KeyRound>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/arrow-right.mjs [app-client] (ecmascript) <export default as ArrowRight>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/loader-circle.mjs [app-client] (ecmascript) <export default as Loader2>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
function LoginPage() {
|
||||
_s();
|
||||
const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])();
|
||||
const [email, setEmail] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("");
|
||||
const [password, setPassword] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("");
|
||||
const [error, setError] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("");
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
setError("");
|
||||
setLoading(true);
|
||||
const res = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["signIn"])("credentials", {
|
||||
email,
|
||||
password,
|
||||
redirect: false
|
||||
});
|
||||
if (res?.error) {
|
||||
setError("Zugangsdaten nicht korrekt. Bitte erneut versuchen.");
|
||||
setLoading(false);
|
||||
} else {
|
||||
router.push("/");
|
||||
router.refresh();
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "min-h-screen flex relative overflow-hidden bg-slate-50 absolute inset-0 z-50",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute top-[-10%] left-[-10%] w-[50%] h-[50%] bg-indigo-200/50 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-blob"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 39,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute top-[20%] right-[-10%] w-[40%] h-[50%] bg-purple-200/50 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-blob animation-delay-2000"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 40,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bottom-[-20%] left-[20%] w-[60%] h-[60%] bg-emerald-100/50 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-blob animation-delay-4000"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 41,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex-1 flex flex-col justify-center px-4 sm:px-6 lg:flex-none lg:px-20 xl:px-32 relative z-10 w-full lg:w-1/2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mx-auto w-full max-w-sm lg:w-96 animate-slide-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-3 mb-8",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-12 h-12 bg-indigo-600 rounded-xl flex items-center justify-center shadow-lg shadow-indigo-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__["ShieldCheck"], {
|
||||
className: "w-7 h-7 text-white"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 47,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-3xl font-extrabold text-slate-900 tracking-tight",
|
||||
children: "ERP Pro"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 45,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white/80 backdrop-blur-xl py-8 px-6 shadow-xl rounded-2xl border border-white",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-xl font-bold text-slate-900",
|
||||
children: "Willkommen zurück"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500 mt-1",
|
||||
children: "Bitte logge dich ein, um fortzufahren."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
error && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-6 bg-red-50 text-red-600 p-4 rounded-xl text-sm font-medium border border-red-100 animate-shake",
|
||||
children: error
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-5",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail Adresse"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "h-5 w-5 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "block w-full pl-10 pr-3 py-2.5 border border-slate-200 rounded-xl focus:ring-2 focus:ring-indigo-600 focus:border-transparent outline-none bg-slate-50 focus:bg-white transition-all text-sm font-medium",
|
||||
placeholder: "name@firma.de",
|
||||
value: email,
|
||||
onChange: (e)=>setEmail(e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 65,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Passwort"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$key$2d$round$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__KeyRound$3e$__["KeyRound"], {
|
||||
className: "h-5 w-5 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: true,
|
||||
className: "block w-full pl-10 pr-3 py-2.5 border border-slate-200 rounded-xl focus:ring-2 focus:ring-indigo-600 focus:border-transparent outline-none bg-slate-50 focus:bg-white transition-all text-sm font-medium",
|
||||
placeholder: "••••••••",
|
||||
value: password,
|
||||
onChange: (e)=>setPassword(e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
disabled: loading,
|
||||
className: "w-full flex justify-center items-center gap-2 py-3 px-4 border border-transparent rounded-xl shadow-sm text-sm font-bold text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 transition-all disabled:opacity-70 disabled:cursor-not-allowed group",
|
||||
children: loading ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__["Loader2"], {
|
||||
className: "w-5 h-5 animate-spin"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
"Anmeldung läuft..."
|
||||
]
|
||||
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
|
||||
children: [
|
||||
"Anmelden",
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__["ArrowRight"], {
|
||||
className: "w-4 h-4 group-hover:translate-x-1 transition-transform"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 52,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 44,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 43,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "hidden lg:block relative w-0 flex-1",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute inset-0 h-full w-full bg-slate-900 object-cover overflow-hidden",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute inset-0 bg-[url('https://images.unsplash.com/photo-1550439062-609e1531270e?ixlib=rb-1.2.1&auto=format&fit=crop&w=2000&q=80')] bg-cover bg-center opacity-30 mix-blend-luminosity"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute inset-0 bg-gradient-to-t from-slate-900/80 to-transparent"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bottom-12 left-12 right-12 text-white",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-3xl font-bold mb-4",
|
||||
children: "Effizientes Management für dein Business."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-300 text-lg max-w-xl",
|
||||
children: "Alles an einem Ort: Ticket-Support, Kundenverwaltung und Abrechnungsprozesse nahtlos integriert."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/login/page.tsx",
|
||||
lineNumber: 36,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(LoginPage, "ERXCO/WGzQRGoxQKVRn54p92PMY=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"]
|
||||
];
|
||||
});
|
||||
_c = LoginPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "LoginPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/key-round.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>KeyRound
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",
|
||||
key: "1s6t7t"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "16.5",
|
||||
cy: "7.5",
|
||||
r: ".5",
|
||||
fill: "currentColor",
|
||||
key: "w0ekpg"
|
||||
}
|
||||
]
|
||||
];
|
||||
const KeyRound = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("key-round", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/key-round.mjs [app-client] (ecmascript) <export default as KeyRound>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"KeyRound",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$key$2d$round$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$key$2d$round$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/key-round.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/arrow-right.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ArrowRight
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m12 5 7 7-7 7",
|
||||
key: "xquz4c"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ArrowRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("arrow-right", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/arrow-right.mjs [app-client] (ecmascript) <export default as ArrowRight>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ArrowRight",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/arrow-right.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/loader-circle.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>LoaderCircle
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21 12a9 9 0 1 1-6.219-8.56",
|
||||
key: "13zald"
|
||||
}
|
||||
]
|
||||
];
|
||||
const LoaderCircle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("loader-circle", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/loader-circle.mjs [app-client] (ecmascript) <export default as Loader2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Loader2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/loader-circle.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_06y2vba._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,513 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/sales/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>SalesPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/file-text.mjs [app-client] (ecmascript) <export default as FileText>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/search.mjs [app-client] (ecmascript) <export default as Search>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
const typeLabels = {
|
||||
QUOTE: 'Angebot',
|
||||
ORDER_CONFIRMATION: 'Auftragsbestätigung',
|
||||
DELIVERY_NOTE: 'Lieferschein',
|
||||
INVOICE: 'Rechnung',
|
||||
CREDIT_NOTE: 'Rechnungskorrektur'
|
||||
};
|
||||
const typeColors = {
|
||||
QUOTE: 'bg-blue-50 text-blue-700 border-blue-200',
|
||||
ORDER_CONFIRMATION: 'bg-indigo-50 text-indigo-700 border-indigo-200',
|
||||
DELIVERY_NOTE: 'bg-amber-50 text-amber-700 border-amber-200',
|
||||
INVOICE: 'bg-emerald-50 text-emerald-700 border-emerald-200',
|
||||
CREDIT_NOTE: 'bg-red-50 text-red-700 border-red-200'
|
||||
};
|
||||
const statusLabels = {
|
||||
DRAFT: 'Entwurf',
|
||||
SENT: 'Gesendet',
|
||||
ACCEPTED: 'Angenommen',
|
||||
REJECTED: 'Abgelehnt',
|
||||
DELIVERED: 'Geliefert',
|
||||
PAID: 'Bezahlt',
|
||||
CANCELLED: 'Storniert',
|
||||
ARCHIVED: 'Archiviert'
|
||||
};
|
||||
const statusColors = {
|
||||
DRAFT: 'bg-slate-100 text-slate-600',
|
||||
SENT: 'bg-blue-100 text-blue-700',
|
||||
ACCEPTED: 'bg-emerald-100 text-emerald-700',
|
||||
REJECTED: 'bg-red-100 text-red-700',
|
||||
DELIVERED: 'bg-amber-100 text-amber-700',
|
||||
PAID: 'bg-emerald-100 text-emerald-700',
|
||||
CANCELLED: 'bg-slate-200 text-slate-500',
|
||||
ARCHIVED: 'bg-slate-100 text-slate-400'
|
||||
};
|
||||
function SalesPage() {
|
||||
_s();
|
||||
const [docs, setDocs] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [filter, setFilter] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('ACTIVE');
|
||||
const [search, setSearch] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const perms = session?.user?.permissions || [];
|
||||
const canCreate = perms.includes('SALES_MANAGE');
|
||||
const debounceRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"SalesPage.useEffect": ()=>{
|
||||
fetchDocs();
|
||||
}
|
||||
}["SalesPage.useEffect"], []);
|
||||
const fetchDocs = async ()=>{
|
||||
const res = await fetch('/api/sales');
|
||||
if (res.ok) setDocs(await res.json());
|
||||
};
|
||||
// Filter + Search logic
|
||||
const filtered = docs.filter((d)=>{
|
||||
// Type filter
|
||||
if (filter === 'ACTIVE' && (d.status === 'ARCHIVED' || d.status === 'CANCELLED')) return false;
|
||||
if (filter === 'ARCHIVED' && d.status !== 'ARCHIVED') return false;
|
||||
if (filter !== 'ALL' && filter !== 'ACTIVE' && filter !== 'ARCHIVED' && d.type !== filter) return false;
|
||||
// Search
|
||||
if (search.trim()) {
|
||||
const q = search.toLowerCase();
|
||||
const customerName = d.customer?.companyName || `${d.customer?.firstName} ${d.customer?.lastName}`;
|
||||
return d.number.toLowerCase().includes(q) || customerName.toLowerCase().includes(q) || (typeLabels[d.type] || '').toLowerCase().includes(q) || (statusLabels[d.status] || '').toLowerCase().includes(q);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$file$2d$text$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__FileText$3e$__["FileText"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Verkauf"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Angebote, Auftragsbestätigungen, Lieferscheine & Rechnungen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__["Search"], {
|
||||
className: "w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "Nr., Kunde, Typ suchen...",
|
||||
value: search,
|
||||
onChange: (e)=>setSearch(e.target.value),
|
||||
className: "pl-9 pr-8 py-2 border border-slate-300 rounded-xl text-sm outline-none focus-ring w-64"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
search && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setSearch(''),
|
||||
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 80,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
canCreate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>router.push('/sales/new'),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
" Neuer Beleg"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex gap-2 flex-wrap",
|
||||
children: [
|
||||
{
|
||||
key: 'ACTIVE',
|
||||
label: 'Aktiv'
|
||||
},
|
||||
{
|
||||
key: 'ALL',
|
||||
label: 'Alle'
|
||||
},
|
||||
{
|
||||
key: 'QUOTE',
|
||||
label: 'Angebote'
|
||||
},
|
||||
{
|
||||
key: 'ORDER_CONFIRMATION',
|
||||
label: 'ABs'
|
||||
},
|
||||
{
|
||||
key: 'DELIVERY_NOTE',
|
||||
label: 'Lieferscheine'
|
||||
},
|
||||
{
|
||||
key: 'INVOICE',
|
||||
label: 'Rechnungen'
|
||||
},
|
||||
{
|
||||
key: 'CREDIT_NOTE',
|
||||
label: 'Korrekturen'
|
||||
},
|
||||
{
|
||||
key: 'ARCHIVED',
|
||||
label: 'Archiv'
|
||||
}
|
||||
].map((f)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setFilter(f.key),
|
||||
className: `px-3 py-1.5 rounded-lg text-sm font-medium transition ${filter === f.key ? 'bg-indigo-600 text-white' : 'bg-white text-slate-600 border border-slate-200 hover:bg-slate-50'}`,
|
||||
children: f.label
|
||||
}, f.key, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-sm text-left",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Nummer"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Typ"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Status"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Betrag"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Datum"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
filtered.map((d)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
onClick: ()=>router.push(`/sales/${d.id}`),
|
||||
className: `hover:bg-indigo-50/40 transition-colors cursor-pointer ${d.status === 'ARCHIVED' ? 'opacity-60' : ''}`,
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono font-semibold text-slate-900",
|
||||
children: d.number
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: `px-2.5 py-1 rounded-md text-xs font-semibold border ${typeColors[d.type]}`,
|
||||
children: typeLabels[d.type]
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-700",
|
||||
children: d.customer?.companyName || `${d.customer?.firstName} ${d.customer?.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: `px-2.5 py-1 rounded-full text-xs font-bold ${statusColors[d.status]}`,
|
||||
children: statusLabels[d.status]
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right font-semibold text-slate-900",
|
||||
children: [
|
||||
d.total.toFixed(2),
|
||||
" €"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(d.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, d.id, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
filtered.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 6,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: search ? `Keine Ergebnisse für "${search}"` : 'Keine Belege vorhanden.'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
filtered.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "px-6 py-3 bg-slate-50 border-t border-slate-100 text-xs text-slate-500",
|
||||
children: [
|
||||
filtered.length,
|
||||
" Beleg",
|
||||
filtered.length !== 1 ? 'e' : '',
|
||||
" angezeigt"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(SalesPage, "5OLNfMA0j1dQXgpQjEUf1nbESEY=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"]
|
||||
];
|
||||
});
|
||||
_c = SalesPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "SalesPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_090w0dr._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,800 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/tickets/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>TicketsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/ticket.mjs [app-client] (ecmascript) <export default as Ticket>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript) <export default as Clock>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check.mjs [app-client] (ecmascript) <export default as CheckCircle2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs [app-client] (ecmascript) <export default as AlertCircle>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/tickets/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function TicketsPage() {
|
||||
_s();
|
||||
const [tickets, setTickets] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"TicketsPage.useEffect": ()=>{
|
||||
fetchTickets();
|
||||
fetchCustomers();
|
||||
}
|
||||
}["TicketsPage.useEffect"], []);
|
||||
const fetchTickets = async ()=>{
|
||||
const res = await fetch('/api/tickets');
|
||||
if (res.ok) setTickets(await res.json());
|
||||
};
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) setCustomers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/tickets', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchTickets();
|
||||
}
|
||||
};
|
||||
const getStatusBadge = (status)=>{
|
||||
switch(status){
|
||||
case 'OPEN':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-red-50 text-red-700 border border-red-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertCircle$3e$__["AlertCircle"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 166
|
||||
}, this),
|
||||
" Offen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 27
|
||||
}, this);
|
||||
case 'IN_PROGRESS':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-amber-50 text-amber-700 border border-amber-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 56,
|
||||
columnNumber: 179
|
||||
}, this),
|
||||
" In Bearbeitung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 56,
|
||||
columnNumber: 34
|
||||
}, this);
|
||||
case 'WAITING_FOR_CUSTOMER':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-blue-50 text-blue-700 border border-blue-200",
|
||||
children: "Wartet auf Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 57,
|
||||
columnNumber: 43
|
||||
}, this);
|
||||
case 'RESOLVED':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-emerald-50 text-emerald-700 border border-emerald-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__["CheckCircle2"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 58,
|
||||
columnNumber: 182
|
||||
}, this),
|
||||
" Gelöst"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 58,
|
||||
columnNumber: 31
|
||||
}, this);
|
||||
default:
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: "Geschlossen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__["Ticket"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Ticketsystem"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Support-Anfragen und Aufgaben."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neues Ticket'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 65,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Ticket erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Zugehöriger Kunde *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none bg-white",
|
||||
value: formData.customerId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
customerId: e.target.value
|
||||
}),
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "",
|
||||
disabled: true,
|
||||
children: "Bitte wählen..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: c.id,
|
||||
children: c.companyName ? `${c.companyName} (${c.firstName} ${c.lastName})` : `${c.firstName} ${c.lastName}`
|
||||
}, c.id, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Betreff / Titel *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.title,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
title: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Problembeschreibung *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none h-32 resize-none",
|
||||
value: formData.description,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
description: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Ticket anlegen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Ticket-ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Titel & Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Status"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Erstellt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
tickets.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
t.id.toString().padStart(5, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: t.title
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs mt-0.5",
|
||||
children: t.customer.companyName || `${t.customer.firstName} ${t.customer.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: getStatusBadge(t.status)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(t.createdAt).toLocaleDateString('de-DE', {
|
||||
day: '2-digit',
|
||||
month: '2-digit',
|
||||
year: 'numeric'
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/tickets/${t.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, t.id, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
tickets.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Tickets vorhanden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(TicketsPage, "/VJxCR/+WfbVh316wIw7jGfgiRk=");
|
||||
_c = TicketsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "TicketsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Clock
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "12",
|
||||
cy: "12",
|
||||
r: "10",
|
||||
key: "1mglay"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 6v6l4 2",
|
||||
key: "mmk7yg"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Clock = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("clock", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript) <export default as Clock>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Clock",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>CircleCheck
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "12",
|
||||
cy: "12",
|
||||
r: "10",
|
||||
key: "1mglay"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m9 12 2 2 4-4",
|
||||
key: "dzmm74"
|
||||
}
|
||||
]
|
||||
];
|
||||
const CircleCheck = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("circle-check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-check.mjs [app-client] (ecmascript) <export default as CheckCircle2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"CheckCircle2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>CircleAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "12",
|
||||
cy: "12",
|
||||
r: "10",
|
||||
key: "1mglay"
|
||||
}
|
||||
],
|
||||
[
|
||||
"line",
|
||||
{
|
||||
x1: "12",
|
||||
x2: "12",
|
||||
y1: "8",
|
||||
y2: "12",
|
||||
key: "1pkeuh"
|
||||
}
|
||||
],
|
||||
[
|
||||
"line",
|
||||
{
|
||||
x1: "12",
|
||||
x2: "12.01",
|
||||
y1: "16",
|
||||
y2: "16",
|
||||
key: "4dfq90"
|
||||
}
|
||||
]
|
||||
];
|
||||
const CircleAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("circle-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs [app-client] (ecmascript) <export default as AlertCircle>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"AlertCircle",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_09s-e8j._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,589 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/roles/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>RolesPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/roles/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
const AVAILABLE_PERMISSIONS = [
|
||||
{
|
||||
id: 'TICKETS_VIEW',
|
||||
label: 'Tickets ansehen'
|
||||
},
|
||||
{
|
||||
id: 'TICKETS_EDIT',
|
||||
label: 'Tickets bearbeiten / Zeit buchen'
|
||||
},
|
||||
{
|
||||
id: 'CUSTOMERS_MANAGE',
|
||||
label: 'Kundenstamm verwalten'
|
||||
},
|
||||
{
|
||||
id: 'TEAM_MANAGE',
|
||||
label: 'Mitarbeiter & Rollen verwalten'
|
||||
},
|
||||
{
|
||||
id: 'SYSTEM_SETTINGS',
|
||||
label: 'Globale Einstellungen'
|
||||
}
|
||||
];
|
||||
function RolesPage() {
|
||||
_s();
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"RolesPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
}
|
||||
}["RolesPage.useEffect"], []);
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) setRoles(await res.json());
|
||||
};
|
||||
const handleEdit = (role)=>{
|
||||
setEditingId(role.id);
|
||||
setFormData({
|
||||
name: role.name,
|
||||
permissions: role.permissions || []
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const togglePermission = (permId)=>{
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
permissions: prev.permissions.includes(permId) ? prev.permissions.filter((p)=>p !== permId) : [
|
||||
...prev.permissions,
|
||||
permId
|
||||
]
|
||||
}));
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/roles', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setEditingId(null);
|
||||
setShowForm(false);
|
||||
fetchRoles();
|
||||
// Hinweis für den Nutzer, falls er seine eigenen Rechte ändert
|
||||
toast('Erfolgreich gespeichert. Hinweis: Änderungen an den eigenen Rechten werden erst nach einem Neu-Login aktiv.', 'success', 8000);
|
||||
} else {
|
||||
toast('Fehler beim Speichern.', 'error');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__["ShieldCheck"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 80,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Berechtigungsgruppen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Definiere Rollen und weise granulare Rechte zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neue Gruppe'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-center mb-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800",
|
||||
children: editingId ? 'Berechtigungsgruppe bearbeiten' : 'Neue Gruppe anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Name der Gruppe (z.B. Supporter, Buchhaltung) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full md:w-1/2 border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.name,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
name: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-3",
|
||||
children: "Zugeordnete Berechtigungen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",
|
||||
children: AVAILABLE_PERMISSIONS.map((perm)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: `flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-50 border-indigo-200 text-indigo-900' : 'bg-white border-slate-200 hover:bg-slate-50'}`,
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "checkbox",
|
||||
className: "hidden",
|
||||
checked: formData.permissions.includes(perm.id),
|
||||
onChange: ()=>togglePermission(perm.id)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `w-5 h-5 rounded flex items-center justify-center border transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-600 border-indigo-600 text-white' : 'border-slate-300 bg-white'}`,
|
||||
children: formData.permissions.includes(perm.id) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 66
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-medium text-sm",
|
||||
children: perm.label
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, perm.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Gruppe speichern'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
||||
children: roles.map((role)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 p-6 flex flex-col h-full group relative hover-lift",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(role),
|
||||
className: "absolute top-4 right-4 p-2 bg-slate-100 text-slate-600 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg transition-all",
|
||||
title: "Bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-start mb-4 pr-8",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
|
||||
className: "font-bold text-lg text-slate-900",
|
||||
children: role.name
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 148,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "bg-slate-100 text-slate-600 px-2.5 py-1 rounded-md text-xs font-semibold",
|
||||
children: [
|
||||
role._count.users,
|
||||
" Nutzer zugeordnet"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 152,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 151,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex-1 space-y-2 mt-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-xs font-semibold text-slate-400 uppercase tracking-wider mb-2",
|
||||
children: "Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
role.permissions.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-sm text-slate-600 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-1.5 h-1.5 rounded-full bg-indigo-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
AVAILABLE_PERMISSIONS.find((ap)=>ap.id === p)?.label || p
|
||||
]
|
||||
}, p, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 158,
|
||||
columnNumber: 17
|
||||
}, this)),
|
||||
(!role.permissions || role.permissions.length === 0) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-sm text-slate-400 italic",
|
||||
children: "Keine Rechte zugewiesen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 163,
|
||||
columnNumber: 72
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 155,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, role.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(RolesPage, "lhBmaFc44p4FRZ1StwaagK2Qk3w=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
|
||||
];
|
||||
});
|
||||
_c = RolesPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "RolesPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Check
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 6 9 17l-5-5",
|
||||
key: "1gmf2c"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Check",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0_s.pum._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,684 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/tickets/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>TicketsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/ticket.mjs [app-client] (ecmascript) <export default as Ticket>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$AppShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/AppShell.tsx [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/tickets/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
function TicketsPage() {
|
||||
_s();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const [tickets, setTickets] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [filter, setFilter] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('ALL');
|
||||
// States für das Formular
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: '',
|
||||
priority: 'MEDIUM'
|
||||
});
|
||||
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"TicketsPage.useEffect": ()=>{
|
||||
fetchTickets();
|
||||
fetchCustomers();
|
||||
}
|
||||
}["TicketsPage.useEffect"], []);
|
||||
const fetchTickets = async ()=>{
|
||||
const res = await fetch('/api/tickets');
|
||||
if (res.ok) setTickets(await res.json());
|
||||
};
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setCustomers(data);
|
||||
if (data.length > 0) {
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
customerId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/tickets', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setShowForm(false);
|
||||
setFormData({
|
||||
title: '',
|
||||
description: '',
|
||||
customerId: customers[0]?.id.toString() || '',
|
||||
priority: 'MEDIUM'
|
||||
});
|
||||
fetchTickets();
|
||||
toast('Ticket erfolgreich erstellt', 'success');
|
||||
} else {
|
||||
toast('Fehler beim Erstellen des Tickets', 'error');
|
||||
}
|
||||
};
|
||||
// getStatusBadge is imported from AppShell
|
||||
// Filter-Logik
|
||||
const filteredTickets = tickets.filter((t)=>{
|
||||
if (filter === 'OPEN') return t.status === 'OPEN' || t.status === 'IN_PROGRESS';
|
||||
if (filter === 'MINE') return t.assignedToId === parseInt(session?.user?.id);
|
||||
return true;
|
||||
});
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$ticket$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Ticket$3e$__["Ticket"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
" Ticketsystem"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg font-medium shadow-sm flex items-center gap-2 hover:bg-indigo-700 transition",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
" ",
|
||||
showForm ? 'Abbrechen' : 'Neues Ticket'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Neues Ticket erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Betreff *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.title,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
title: e.target.value
|
||||
}),
|
||||
placeholder: "Kurze Beschreibung des Problems..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Kunde *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none bg-white transition-all",
|
||||
value: formData.customerId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
customerId: e.target.value
|
||||
}),
|
||||
children: customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: c.id,
|
||||
children: c.companyName || `${c.firstName} ${c.lastName}`
|
||||
}, c.id, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 95,
|
||||
columnNumber: 21
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Priorität *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none bg-white transition-all",
|
||||
value: formData.priority,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
priority: e.target.value
|
||||
}),
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "LOW",
|
||||
children: "Niedrig"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "MEDIUM",
|
||||
children: "Mittel"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "HIGH",
|
||||
children: "Hoch"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "CRITICAL",
|
||||
children: "Kritisch"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Details *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none h-32 resize-none transition-all",
|
||||
value: formData.description,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
description: e.target.value
|
||||
}),
|
||||
placeholder: "Ausführliche Problembeschreibung..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Ticket erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex border-b border-slate-200 gap-6",
|
||||
children: [
|
||||
{
|
||||
id: 'ALL',
|
||||
label: 'Alle Tickets'
|
||||
},
|
||||
{
|
||||
id: 'MINE',
|
||||
label: 'Meine Tickets'
|
||||
},
|
||||
{
|
||||
id: 'OPEN',
|
||||
label: 'Nur Offene'
|
||||
}
|
||||
].map((tab)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setFilter(tab.id),
|
||||
className: `pb-3 text-sm font-medium transition-colors relative ${filter === tab.id ? 'text-indigo-600' : 'text-slate-500 hover:text-slate-700'}`,
|
||||
children: [
|
||||
tab.label,
|
||||
filter === tab.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bottom-0 left-0 right-0 h-0.5 bg-indigo-600 animate-in fade-in duration-300"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 35
|
||||
}, this)
|
||||
]
|
||||
}, tab.id, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Titel & Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Bearbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 145,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Status & Prio"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
filteredTickets.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors border-b border-slate-50 last:border-0 group",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
t.id.toString().padStart(5, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: t.title
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs",
|
||||
children: t.customer.companyName || `${t.customer.firstName} ${t.customer.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 157,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 155,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 154,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: t.assignedTo ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-1.5 text-slate-700",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-6 h-6 rounded-full bg-indigo-100 flex items-center justify-center text-[10px] font-bold text-indigo-700 border border-indigo-200",
|
||||
children: t.assignedTo.firstName[0]
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 163,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
t.assignedTo.firstName,
|
||||
" ",
|
||||
t.assignedTo.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 162,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-400 italic text-xs",
|
||||
children: "Unzugewiesen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col gap-2 items-start",
|
||||
children: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$AppShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getStatusBadge"])(t.status),
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$AppShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getPriorityBadge"])(t.priority)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 171,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 170,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/tickets/${t.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 177,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 176,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, t.id, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 152,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
filteredTickets.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Tickets in dieser Ansicht gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 183,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 182,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 140,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/tickets/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(TicketsPage, "w8wAc6dCfCT5Vo74ESnP62+fRUg=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
|
||||
];
|
||||
});
|
||||
_c = TicketsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "TicketsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0dbvhsz._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,211 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/error.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>ErrorBoundary
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript) <export default as AlertTriangle>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCcw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript) <export default as RefreshCcw>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function ErrorBoundary({ error, reset }) {
|
||||
_s();
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"ErrorBoundary.useEffect": ()=>{
|
||||
console.error(error);
|
||||
}
|
||||
}["ErrorBoundary.useEffect"], [
|
||||
error
|
||||
]);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "min-h-[400px] flex items-center justify-center p-8",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-8 rounded-2xl shadow-xl max-w-md w-full border border-red-100 text-center",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-16 h-16 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto mb-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], {
|
||||
className: "w-8 h-8"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 21,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 20,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-xl font-bold text-slate-900 mb-2",
|
||||
children: "Ein Fehler ist aufgetreten"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 23,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500 mb-8",
|
||||
children: "Das System konnte diese Ansicht nicht laden. Bitte versuche es erneut oder kontaktiere den Support."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 24,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>reset(),
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium inline-flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCcw$3e$__["RefreshCcw"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 31,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
" Erneut versuchen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 27,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 19,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/error.tsx",
|
||||
lineNumber: 18,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(ErrorBoundary, "OD7bBpZva5O2jO+Puf00hKivP7c=");
|
||||
_c = ErrorBoundary;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "ErrorBoundary");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>TriangleAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
|
||||
key: "wmoenq"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 9v4",
|
||||
key: "juzpu7"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 17h.01",
|
||||
key: "p32p05"
|
||||
}
|
||||
]
|
||||
];
|
||||
const TriangleAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("triangle-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript) <export default as AlertTriangle>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"AlertTriangle",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>RefreshCcw
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
|
||||
key: "14sxne"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 3v5h5",
|
||||
key: "1xhq8a"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",
|
||||
key: "1hlbsb"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M16 16h5v5",
|
||||
key: "ccwih5"
|
||||
}
|
||||
]
|
||||
];
|
||||
const RefreshCcw = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("refresh-ccw", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript) <export default as RefreshCcw>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"RefreshCcw",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$ccw$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0fyuaur._.js.map
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///opt/erp-system/app/error.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport { AlertTriangle, RefreshCcw } from 'lucide-react';\n\nexport default function ErrorBoundary({\n error,\n reset,\n}: {\n error: Error & { digest?: string };\n reset: () => void;\n}) {\n useEffect(() => {\n console.error(error);\n }, [error]);\n\n return (\n <div className=\"min-h-[400px] flex items-center justify-center p-8\">\n <div className=\"bg-white p-8 rounded-2xl shadow-xl max-w-md w-full border border-red-100 text-center\">\n <div className=\"w-16 h-16 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto mb-6\">\n <AlertTriangle className=\"w-8 h-8\" />\n </div>\n <h2 className=\"text-xl font-bold text-slate-900 mb-2\">Ein Fehler ist aufgetreten</h2>\n <p className=\"text-sm text-slate-500 mb-8\">\n Das System konnte diese Ansicht nicht laden. Bitte versuche es erneut oder kontaktiere den Support.\n </p>\n <button\n onClick={() => reset()}\n className=\"bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium inline-flex items-center gap-2\"\n >\n <RefreshCcw className=\"w-4 h-4\" /> Erneut versuchen\n </button>\n </div>\n </div>\n );\n}\n"],"names":["ErrorBoundary","error","reset","console","className","onClick"],"mappings":";;;;;AAEA;AACA;AAAA;;;AAHA;;;AAKe,SAASA,cAAc,EACpCC,KAAK,EACLC,KAAK,EAIN;;IACC,IAAA,0KAAS;mCAAC;YACRC,QAAQF,KAAK,CAACA;QAChB;kCAAG;QAACA;KAAM;IAEV,qBACE,6LAAC;QAAIG,WAAU;kBACb,cAAA,6LAAC;YAAIA,WAAU;;8BACb,6LAAC;oBAAIA,WAAU;8BACb,cAAA,6LAAC,6OAAa;wBAACA,WAAU;;;;;;;;;;;8BAE3B,6LAAC;oBAAGA,WAAU;8BAAwC;;;;;;8BACtD,6LAAC;oBAAEA,WAAU;8BAA8B;;;;;;8BAG3C,6LAAC;oBACCC,SAAS,IAAMH;oBACfE,WAAU;;sCAEV,6LAAC,oOAAU;4BAACA,WAAU;;;;;;wBAAY;;;;;;;;;;;;;;;;;;AAK5C;GA9BwBJ;KAAAA"}},
|
||||
{"offset": {"line": 102, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.mjs","sources":["file:///opt/erp-system/node_modules/lucide-react/src/icons/triangle-alert.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/triangle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TriangleAlert = createLucideIcon('triangle-alert', __iconNode);\n\nexport default TriangleAlert;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACA;YACE,CAAA,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACH,GAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA;KAET;IACA;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAW,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACxC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAc,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC7C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAA,CAAA,KAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,kKAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}},
|
||||
{"offset": {"line": 153, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs","sources":["file:///opt/erp-system/node_modules/lucide-react/src/icons/refresh-ccw.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '14sxne' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n ['path', { d: 'M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16', key: '1hlbsb' }],\n ['path', { d: 'M16 16h5v5', key: 'ccwih5' }],\n];\n\n/**\n * @component @name RefreshCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/refresh-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCcw = createLucideIcon('refresh-ccw', __iconNode);\n\nexport default RefreshCcw;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAsD,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACnF;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACzC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAuD,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IACpF;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAc,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC7C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,KAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,kKAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}]
|
||||
}
|
||||
@@ -0,0 +1,930 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/sales/new/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>NewSalesDocPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/arrow-left.mjs [app-client] (ecmascript) <export default as ArrowLeft>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/search.mjs [app-client] (ecmascript) <export default as Search>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
const docTypes = [
|
||||
{
|
||||
value: 'QUOTE',
|
||||
label: 'Angebot'
|
||||
},
|
||||
{
|
||||
value: 'ORDER_CONFIRMATION',
|
||||
label: 'Auftragsbestätigung'
|
||||
},
|
||||
{
|
||||
value: 'DELIVERY_NOTE',
|
||||
label: 'Lieferschein'
|
||||
},
|
||||
{
|
||||
value: 'INVOICE',
|
||||
label: 'Rechnung'
|
||||
}
|
||||
];
|
||||
function NewSalesDocPage() {
|
||||
_s();
|
||||
const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])();
|
||||
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
const [type, setType] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('QUOTE');
|
||||
const [customerId, setCustomerId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [customerSearch, setCustomerSearch] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [customerResults, setCustomerResults] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [selectedCustomer, setSelectedCustomer] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [notes, setNotes] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [validUntil, setValidUntil] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [items, setItems] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([
|
||||
{
|
||||
description: '',
|
||||
quantity: 1,
|
||||
unitPrice: 0,
|
||||
productId: null
|
||||
}
|
||||
]);
|
||||
const [products, setProducts] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [saving, setSaving] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"NewSalesDocPage.useEffect": ()=>{
|
||||
fetch('/api/products').then({
|
||||
"NewSalesDocPage.useEffect": (r)=>r.json()
|
||||
}["NewSalesDocPage.useEffect"]).then(setProducts).catch({
|
||||
"NewSalesDocPage.useEffect": ()=>{}
|
||||
}["NewSalesDocPage.useEffect"]);
|
||||
}
|
||||
}["NewSalesDocPage.useEffect"], []);
|
||||
const searchCustomers = async (q)=>{
|
||||
setCustomerSearch(q);
|
||||
if (q.length < 2) {
|
||||
setCustomerResults([]);
|
||||
return;
|
||||
}
|
||||
const res = await fetch(`/api/customers/search?q=${encodeURIComponent(q)}`);
|
||||
if (res.ok) setCustomerResults(await res.json());
|
||||
};
|
||||
const selectCustomer = (c)=>{
|
||||
setSelectedCustomer(c);
|
||||
setCustomerId(c.id);
|
||||
setCustomerSearch(c.companyName || `${c.firstName} ${c.lastName}`);
|
||||
setCustomerResults([]);
|
||||
};
|
||||
const updateItem = (idx, field, value)=>{
|
||||
const newItems = [
|
||||
...items
|
||||
];
|
||||
newItems[idx] = {
|
||||
...newItems[idx],
|
||||
[field]: value
|
||||
};
|
||||
// Auto-fill price from product
|
||||
if (field === 'productId' && value) {
|
||||
const prod = products.find((p)=>p.id === parseInt(value));
|
||||
if (prod) {
|
||||
newItems[idx].unitPrice = prod.salePrice;
|
||||
newItems[idx].description = prod.name;
|
||||
}
|
||||
}
|
||||
setItems(newItems);
|
||||
};
|
||||
const addItem = ()=>setItems([
|
||||
...items,
|
||||
{
|
||||
description: '',
|
||||
quantity: 1,
|
||||
unitPrice: 0,
|
||||
productId: null
|
||||
}
|
||||
]);
|
||||
const removeItem = (idx)=>setItems(items.filter((_, i)=>i !== idx));
|
||||
const subtotal = items.reduce((sum, i)=>sum + i.quantity * i.unitPrice, 0);
|
||||
const tax = subtotal * 0.19;
|
||||
const total = subtotal + tax;
|
||||
const handleSubmit = async ()=>{
|
||||
if (!customerId) {
|
||||
toast('Bitte Kunde auswählen', 'error');
|
||||
return;
|
||||
}
|
||||
if (items.length === 0 || !items[0].description) {
|
||||
toast('Bitte mindestens eine Position', 'error');
|
||||
return;
|
||||
}
|
||||
setSaving(true);
|
||||
const res = await fetch('/api/sales', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
type,
|
||||
customerId,
|
||||
notes,
|
||||
validUntil: validUntil || null,
|
||||
items: items.map((i)=>({
|
||||
description: i.description,
|
||||
quantity: parseFloat(i.quantity) || 1,
|
||||
unitPrice: parseFloat(i.unitPrice) || 0,
|
||||
productId: i.productId ? parseInt(i.productId) : null
|
||||
}))
|
||||
})
|
||||
});
|
||||
if (res.ok) {
|
||||
const doc = await res.json();
|
||||
toast('Beleg erstellt', 'success');
|
||||
router.push(`/sales/${doc.id}`);
|
||||
} else {
|
||||
toast('Fehler beim Erstellen', 'error');
|
||||
}
|
||||
setSaving(false);
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-5xl mx-auto space-y-6 pb-12 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>router.push('/sales'),
|
||||
className: "p-2 hover:bg-slate-200 rounded-lg text-slate-600 transition",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__["ArrowLeft"], {
|
||||
className: "w-5 h-5"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900",
|
||||
children: "Neuen Beleg erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "lg:col-span-2 space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800 mb-4",
|
||||
children: "Belegdaten"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Belegart *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none bg-white",
|
||||
value: type,
|
||||
onChange: (e)=>setType(e.target.value),
|
||||
children: docTypes.map((t)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: t.value,
|
||||
children: t.label
|
||||
}, t.value, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 38
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Gültig bis"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "date",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none",
|
||||
value: validUntil,
|
||||
onChange: (e)=>setValidUntil(e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-2 relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Kunde *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__["Search"], {
|
||||
className: "w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "Kunde suchen...",
|
||||
className: "w-full pl-9 border border-slate-300 p-2.5 rounded-xl focus-ring outline-none",
|
||||
value: customerSearch,
|
||||
onChange: (e)=>searchCustomers(e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
customerResults.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute z-20 left-0 right-0 mt-1 bg-white border border-slate-200 rounded-xl shadow-xl max-h-48 overflow-y-auto",
|
||||
children: customerResults.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>selectCustomer(c),
|
||||
className: "w-full text-left px-4 py-3 hover:bg-indigo-50 transition text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold",
|
||||
children: c.companyName || `${c.firstName} ${c.lastName}`
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-400 ml-2",
|
||||
children: c.email
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 25
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 23
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
selectedCustomer && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-xs text-emerald-600 mt-1 font-medium",
|
||||
children: [
|
||||
"✓ ",
|
||||
selectedCustomer.companyName || `${selectedCustomer.firstName} ${selectedCustomer.lastName}`
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 38
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Notizen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 140,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
rows: 2,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none resize-none",
|
||||
value: notes,
|
||||
onChange: (e)=>setNotes(e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between mb-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Positionen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: addItem,
|
||||
className: "text-indigo-600 hover:text-indigo-800 transition flex items-center gap-1 text-sm font-medium",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 151,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Position"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 148,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "space-y-3",
|
||||
children: items.map((item, idx)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-12 gap-2 items-end p-3 bg-slate-50 rounded-xl border border-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-[10px] font-medium text-slate-500 mb-0.5",
|
||||
children: "Produkt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 158,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
className: "w-full border border-slate-300 p-2 rounded-lg text-sm bg-white",
|
||||
value: item.productId || '',
|
||||
onChange: (e)=>updateItem(idx, 'productId', e.target.value || null),
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "",
|
||||
children: "Freitext"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
products.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: p.id,
|
||||
children: p.name
|
||||
}, p.id, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 161,
|
||||
columnNumber: 42
|
||||
}, this))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 157,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-[10px] font-medium text-slate-500 mb-0.5",
|
||||
children: "Beschreibung *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 165,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2 rounded-lg text-sm",
|
||||
value: item.description,
|
||||
onChange: (e)=>updateItem(idx, 'description', e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 164,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-[10px] font-medium text-slate-500 mb-0.5",
|
||||
children: "Menge"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 169,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.01",
|
||||
min: "0.01",
|
||||
className: "w-full border border-slate-300 p-2 rounded-lg text-sm",
|
||||
value: item.quantity,
|
||||
onChange: (e)=>updateItem(idx, 'quantity', e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 170,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-[10px] font-medium text-slate-500 mb-0.5",
|
||||
children: "Einzelpreis €"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 173,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.01",
|
||||
className: "w-full border border-slate-300 p-2 rounded-lg text-sm",
|
||||
value: item.unitPrice,
|
||||
onChange: (e)=>updateItem(idx, 'unitPrice', e.target.value)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 174,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 172,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "col-span-1 flex justify-center",
|
||||
children: items.length > 1 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>removeItem(idx),
|
||||
className: "p-2 text-slate-400 hover:text-red-600 rounded-lg transition",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 179,
|
||||
columnNumber: 25
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 178,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 176,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
]
|
||||
}, idx, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 17
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 154,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "space-y-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 sticky top-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800 mb-4",
|
||||
children: "Zusammenfassung"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 192,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "space-y-3 text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
children: "Netto"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 195,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold",
|
||||
children: [
|
||||
subtotal.toFixed(2),
|
||||
" €"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 195,
|
||||
columnNumber: 35
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 194,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
children: "MwSt (19%)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 198,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold",
|
||||
children: [
|
||||
tax.toFixed(2),
|
||||
" €"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 198,
|
||||
columnNumber: 40
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 197,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between text-lg font-bold text-slate-900 pt-3 border-t border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
children: "Gesamt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 201,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
children: [
|
||||
total.toFixed(2),
|
||||
" €"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 201,
|
||||
columnNumber: 36
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 200,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-xs text-slate-400",
|
||||
children: [
|
||||
items.filter((i)=>i.description).length,
|
||||
" Position(en)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 203,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 193,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleSubmit,
|
||||
disabled: saving,
|
||||
className: "w-full mt-6 bg-indigo-600 text-white py-3 rounded-xl font-bold hover:bg-indigo-700 transition disabled:opacity-50",
|
||||
children: saving ? 'Erstelle...' : 'Beleg erstellen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 205,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 191,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 190,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/sales/new/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(NewSalesDocPage, "xefbrXs/3OIsYdCqnyw/bdkOFGc=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
|
||||
];
|
||||
});
|
||||
_c = NewSalesDocPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "NewSalesDocPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/arrow-left.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ArrowLeft
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m12 19-7-7 7-7",
|
||||
key: "1l729n"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 12H5",
|
||||
key: "x3x0zl"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ArrowLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("arrow-left", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/arrow-left.mjs [app-client] (ecmascript) <export default as ArrowLeft>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ArrowLeft",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/arrow-left.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Trash2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 11v6",
|
||||
key: "nco0om"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 11v6",
|
||||
key: "outv1u"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
|
||||
key: "miytrc"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 6h18",
|
||||
key: "d0wm0j"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",
|
||||
key: "e791ji"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("trash-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Trash2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0g1neur._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,763 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/settings/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>SettingsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/settings.mjs [app-client] (ecmascript) <export default as Settings>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/settings/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function SettingsPage() {
|
||||
_s();
|
||||
const [data, setData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
hourlyRate: 0,
|
||||
taxRate: 0,
|
||||
companyName: '',
|
||||
companyInfo: '',
|
||||
smtpHost: '',
|
||||
smtpPort: 587,
|
||||
smtpUser: '',
|
||||
smtpPass: '',
|
||||
smtpFrom: '',
|
||||
hasSmtpPass: false
|
||||
});
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true);
|
||||
const [msg, setMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"SettingsPage.useEffect": ()=>{
|
||||
fetch('/api/settings').then({
|
||||
"SettingsPage.useEffect": (res)=>res.json()
|
||||
}["SettingsPage.useEffect"]).then({
|
||||
"SettingsPage.useEffect": (d)=>{
|
||||
// Wenn Werte null aus der DB kommen, setzen wir sie auf leere Strings für das Formular
|
||||
setData({
|
||||
hourlyRate: d.hourlyRate || 0,
|
||||
taxRate: d.taxRate || 0,
|
||||
companyName: d.companyName || '',
|
||||
companyInfo: d.companyInfo || '',
|
||||
smtpHost: d.smtpHost || '',
|
||||
smtpPort: d.smtpPort || 587,
|
||||
smtpUser: d.smtpUser || '',
|
||||
smtpPass: '',
|
||||
smtpFrom: d.smtpFrom || '',
|
||||
hasSmtpPass: d.hasSmtpPass
|
||||
});
|
||||
setLoading(false);
|
||||
}
|
||||
}["SettingsPage.useEffect"]);
|
||||
}
|
||||
}["SettingsPage.useEffect"], []);
|
||||
const handleSave = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/settings', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
if (res.ok) {
|
||||
setMsg('Einstellungen erfolgreich gespeichert.');
|
||||
setTimeout(()=>setMsg(''), 3000);
|
||||
// Update State, falls ein Passwort gesetzt wurde
|
||||
if (data.smtpPass) {
|
||||
setData((prev)=>({
|
||||
...prev,
|
||||
smtpPass: '',
|
||||
hasSmtpPass: true
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
if (loading) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-8",
|
||||
children: "Lade Konfiguration..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 61,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-4xl mx-auto space-y-6 pb-12",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
" Systemeinstellungen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 65,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
msg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 bg-emerald-50 text-emerald-700 border border-emerald-200 rounded-lg font-medium",
|
||||
children: msg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSave,
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 divide-y divide-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Abrechnungsparameter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__["Euro"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Standard-Stundensatz"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.01",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.hourlyRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
hourlyRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__["Percent"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Mehrwertsteuer (%)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.1",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.taxRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
taxRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Rechnungskopf"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firmenname"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.companyName,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 95,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Briefkopf Informationen (Anschrift, Bank, Steuer)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", {
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none h-32 resize-none",
|
||||
value: data.companyInfo,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
companyInfo: e.target.value
|
||||
}),
|
||||
placeholder: "Muster GmbH, Musterstraße 1..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-5 h-5"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Ausgehende E-Mails (SMTP)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500",
|
||||
children: "Diese Daten werden genutzt, um Benachrichtigungen aus dem Ticketsystem an deine Kunden zu senden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-4 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Server (Host)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "z.B. smtp.strato.de",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpHost,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpHost: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Port"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
placeholder: "465 oder 587",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpPort,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpPort: parseInt(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Benutzername"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "z.B. support@deine-firma.de",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpUser,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpUser: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Passwort"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
placeholder: data.hasSmtpPass ? "****** (Gespeichert - nur tippen zum Ändern)" : "Passwort eingeben",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpPass,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpPass: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Absender-Name & Adresse (Optional)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: 'z.B. "ERP Support" <support@deine-firma.de>',
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpFrom,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpFrom: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 140,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 bg-slate-50 flex justify-end",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-indigo-600 text-white px-6 py-2.5 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-bold shadow-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__["Save"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Alle Einstellungen speichern"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 145,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(SettingsPage, "MKt4KVXxuL50O3QYWKLUqQsjLCI=");
|
||||
_c = SettingsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "SettingsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Save
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
|
||||
key: "1c8476"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",
|
||||
key: "1ydtos"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M7 3v4a1 1 0 0 0 1 1h7",
|
||||
key: "t51u73"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Save = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("save", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Save",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Percent
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"line",
|
||||
{
|
||||
x1: "19",
|
||||
x2: "5",
|
||||
y1: "5",
|
||||
y2: "19",
|
||||
key: "1x9vlm"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "6.5",
|
||||
cy: "6.5",
|
||||
r: "2.5",
|
||||
key: "4mh3h7"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "17.5",
|
||||
cy: "17.5",
|
||||
r: "2.5",
|
||||
key: "1mdrzq"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Percent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("percent", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Percent",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Euro
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 10h12",
|
||||
key: "1y6xl8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 14h9",
|
||||
key: "1loblj"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",
|
||||
key: "1j6lzo"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Euro = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("euro", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Euro",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0ja4oje._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,800 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/customers/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>CustomersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/customers/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function CustomersPage() {
|
||||
_s();
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"CustomersPage.useEffect": ()=>{
|
||||
fetchCustomers();
|
||||
}
|
||||
}["CustomersPage.useEffect"], []);
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) setCustomers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/customers', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchCustomers();
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 51,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Kundenverwaltung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte deinen Kundenstamm und Ansprechpartner."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Kunde'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 48,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Kundendaten erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Telefon"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "tel",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.phone,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
phone: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firma (Optional)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.companyName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Kunde speichern"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kontakt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors group",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
c.id.toString().padStart(4, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: [
|
||||
c.firstName,
|
||||
" ",
|
||||
c.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.companyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs flex items-center gap-1 mt-0.5",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__["Building2"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
" ",
|
||||
c.companyName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col gap-1 text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 63
|
||||
}, this),
|
||||
" ",
|
||||
c.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2 text-xs",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__["Phone"], {
|
||||
className: "w-3 h-3 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 83
|
||||
}, this),
|
||||
" ",
|
||||
c.phone
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 33
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800 opacity-0 group-hover:opacity-100 transition-opacity",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
customers.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Kunden vorhanden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(CustomersPage, "vnHPr/IKUav/ewwkFv8FFvqdDhA=");
|
||||
_c = CustomersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "CustomersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Building2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 12h4",
|
||||
key: "a56b0p"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 8h4",
|
||||
key: "1sr2af"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 21v-3a2 2 0 0 0-4 0v3",
|
||||
key: "1rgiei"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",
|
||||
key: "secmi2"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",
|
||||
key: "16ra0t"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Building2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("building-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Building2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Phone
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
||||
key: "9njp5v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Phone = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("phone", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Phone",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0jo5h5l._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,737 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/users/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>UsersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/users/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function UsersPage() {
|
||||
_s();
|
||||
const [users, setUsers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [errorMsg, setErrorMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"UsersPage.useEffect": ()=>{
|
||||
fetchUsers();
|
||||
fetchRoles();
|
||||
}
|
||||
}["UsersPage.useEffect"], []);
|
||||
const fetchUsers = async ()=>{
|
||||
const res = await fetch('/api/users');
|
||||
if (res.ok) setUsers(await res.json());
|
||||
};
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setRoles(data);
|
||||
if (data.length > 0) setFormData((prev)=>({
|
||||
...prev,
|
||||
roleId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
setErrorMsg('');
|
||||
const res = await fetch('/api/users', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: roles[0]?.id.toString() || ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchUsers();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
setErrorMsg(data.error || 'Fehler beim Speichern');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 58,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Team"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 57,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Systemzugänge und weise Berechtigungsgruppen zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 56,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Mitarbeiter'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Zugang anlegen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
errorMsg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4 p-3 bg-red-50 text-red-700 border border-red-200 rounded-lg text-sm font-medium",
|
||||
children: errorMsg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail (Login) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Initiales Passwort *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 95,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: true,
|
||||
minLength: 6,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.password,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
password: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Berechtigungsgruppe *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none bg-white",
|
||||
value: formData.roleId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
roleId: e.target.value
|
||||
}),
|
||||
children: roles.map((r)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: r.id,
|
||||
children: r.name
|
||||
}, r.id, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Zugang erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Mitarbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "E-Mail"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Gruppe"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Angelegt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
users.map((u)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-semibold text-slate-900",
|
||||
children: [
|
||||
u.firstName,
|
||||
" ",
|
||||
u.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-600",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 61
|
||||
}, this),
|
||||
" ",
|
||||
u.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: u.role ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__["ShieldAlert"], {
|
||||
className: "w-3 h-3 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" ",
|
||||
u.role.name
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-red-500 text-xs font-medium",
|
||||
children: "Ohne Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(u.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, u.id, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
users.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Mitarbeiter gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(UsersPage, "jtxl2fVs7+LnQmKwf9pN+Xvx7d4=");
|
||||
_c = UsersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "UsersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 8v4",
|
||||
key: "1got3b"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 16h.01",
|
||||
key: "1drbdi"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldAlert",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0k_f25e._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,844 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/users/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>UsersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/users/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function UsersPage() {
|
||||
_s();
|
||||
const [users, setUsers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [errorMsg, setErrorMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"UsersPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
fetchUsers();
|
||||
}
|
||||
}["UsersPage.useEffect"], []);
|
||||
const fetchUsers = async ()=>{
|
||||
const res = await fetch('/api/users');
|
||||
if (res.ok) setUsers(await res.json());
|
||||
};
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setRoles(data);
|
||||
if (data.length > 0 && !editingId) {
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
roleId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setErrorMsg('');
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: roles.length > 0 ? roles[0].id.toString() : ''
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const handleEdit = (user)=>{
|
||||
setEditingId(user.id);
|
||||
setErrorMsg('');
|
||||
setFormData({
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
email: user.email,
|
||||
password: '',
|
||||
roleId: user.roleId ? user.roleId.toString() : roles[0]?.id.toString() || ''
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
setErrorMsg('');
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/users', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setShowForm(false);
|
||||
fetchUsers();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
setErrorMsg(data.error || 'Fehler beim Speichern');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Team"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Systemzugänge und weise Berechtigungsgruppen zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Mitarbeiter'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: editingId ? 'Mitarbeiter bearbeiten' : 'Zugang anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
errorMsg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4 p-3 bg-red-50 text-red-700 border border-red-200 rounded-lg text-sm font-medium",
|
||||
children: errorMsg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail (Login) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: editingId ? 'Neues Passwort (optional)' : 'Initiales Passwort *'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: !editingId,
|
||||
minLength: 6,
|
||||
placeholder: editingId ? 'Leer lassen, um es nicht zu ändern' : '',
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.password,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
password: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Berechtigungsgruppe *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none bg-white",
|
||||
value: formData.roleId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
roleId: e.target.value
|
||||
}),
|
||||
children: roles.map((r)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: r.id,
|
||||
children: r.name
|
||||
}, r.id, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 145,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Zugang erstellen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 151,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Mitarbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 163,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "E-Mail"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 164,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Gruppe"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 165,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Angelegt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktionen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 167,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 162,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 161,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
users.map((u)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors group",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-semibold text-slate-900",
|
||||
children: [
|
||||
u.firstName,
|
||||
" ",
|
||||
u.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 173,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-600",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 175,
|
||||
columnNumber: 61
|
||||
}, this),
|
||||
" ",
|
||||
u.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 175,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 174,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: u.role ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__["ShieldAlert"], {
|
||||
className: "w-3 h-3 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 180,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" ",
|
||||
u.role.name
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 179,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-red-500 text-xs font-medium",
|
||||
children: "Ohne Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 183,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 177,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(u.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 186,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(u),
|
||||
className: "p-2 text-slate-400 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg opacity-0 group-hover:opacity-100 transition-all inline-flex items-center",
|
||||
title: "Mitarbeiter bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 195,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 190,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 189,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, u.id, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 172,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
users.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Mitarbeiter gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 201,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 201,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 170,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(UsersPage, "qzQjPoN/7KdVfSeJ6ejFo3f8iUo=");
|
||||
_c = UsersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "UsersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 8v4",
|
||||
key: "1got3b"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 16h.01",
|
||||
key: "1drbdi"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldAlert",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0mdl1t2._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,720 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/roles/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>RolesPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/roles/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
const AVAILABLE_PERMISSIONS = [
|
||||
{
|
||||
id: 'TICKETS_VIEW',
|
||||
label: 'Tickets ansehen'
|
||||
},
|
||||
{
|
||||
id: 'TICKETS_EDIT',
|
||||
label: 'Tickets bearbeiten / Zeit buchen'
|
||||
},
|
||||
{
|
||||
id: 'CUSTOMERS_MANAGE',
|
||||
label: 'Kundenstamm verwalten'
|
||||
},
|
||||
{
|
||||
id: 'CUSTOMERS_EDIT',
|
||||
label: 'Kundendaten bearbeiten (Stammdaten, Zugangsdaten)'
|
||||
},
|
||||
{
|
||||
id: 'PURCHASING_MANAGE',
|
||||
label: 'Einkauf: Produkte & Bestand verwalten'
|
||||
},
|
||||
{
|
||||
id: 'SALES_MANAGE',
|
||||
label: 'Verkauf: Angebote, Rechnungen & Belege'
|
||||
},
|
||||
{
|
||||
id: 'DATA_DELETE',
|
||||
label: 'Daten löschen (Kunden, Mitarbeiter, Gruppen)'
|
||||
},
|
||||
{
|
||||
id: 'TEAM_MANAGE',
|
||||
label: 'Mitarbeiter & Rollen verwalten'
|
||||
},
|
||||
{
|
||||
id: 'SYSTEM_SETTINGS',
|
||||
label: 'Globale Einstellungen'
|
||||
}
|
||||
];
|
||||
function RolesPage() {
|
||||
_s();
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
const { toast, confirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const permissions = session?.user?.permissions || [];
|
||||
const canDelete = permissions.includes('DATA_DELETE');
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"RolesPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
}
|
||||
}["RolesPage.useEffect"], []);
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) setRoles(await res.json());
|
||||
};
|
||||
const handleEdit = (role)=>{
|
||||
setEditingId(role.id);
|
||||
setFormData({
|
||||
name: role.name,
|
||||
permissions: role.permissions || []
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const togglePermission = (permId)=>{
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
permissions: prev.permissions.includes(permId) ? prev.permissions.filter((p)=>p !== permId) : [
|
||||
...prev.permissions,
|
||||
permId
|
||||
]
|
||||
}));
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/roles', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setEditingId(null);
|
||||
setShowForm(false);
|
||||
fetchRoles();
|
||||
// Hinweis für den Nutzer, falls er seine eigenen Rechte ändert
|
||||
toast('Erfolgreich gespeichert. Hinweis: Änderungen an den eigenen Rechten werden erst nach einem Neu-Login aktiv.', 'success', 8000);
|
||||
} else {
|
||||
toast('Fehler beim Speichern.', 'error');
|
||||
}
|
||||
};
|
||||
const handleDelete = async (role)=>{
|
||||
const isConfirmed = await confirm({
|
||||
title: 'Berechtigungsgruppe löschen',
|
||||
message: `"${role.name}" wirklich löschen?`,
|
||||
danger: true
|
||||
});
|
||||
if (!isConfirmed) return;
|
||||
const res = await fetch(`/api/roles?id=${role.id}`, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
if (res.ok) {
|
||||
toast('Gruppe gelöscht', 'success');
|
||||
fetchRoles();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
toast(data.error || 'Fehler beim Löschen', 'error');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__["ShieldCheck"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Berechtigungsgruppen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Definiere Rollen und weise granulare Rechte zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neue Gruppe'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-center mb-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800",
|
||||
children: editingId ? 'Berechtigungsgruppe bearbeiten' : 'Neue Gruppe anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 119,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Name der Gruppe (z.B. Supporter, Buchhaltung) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full md:w-1/2 border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.name,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
name: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-3",
|
||||
children: "Zugeordnete Berechtigungen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",
|
||||
children: AVAILABLE_PERMISSIONS.map((perm)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: `flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-50 border-indigo-200 text-indigo-900' : 'bg-white border-slate-200 hover:bg-slate-50'}`,
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "checkbox",
|
||||
className: "hidden",
|
||||
checked: formData.permissions.includes(perm.id),
|
||||
onChange: ()=>togglePermission(perm.id)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `w-5 h-5 rounded flex items-center justify-center border transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-600 border-indigo-600 text-white' : 'border-slate-300 bg-white'}`,
|
||||
children: formData.permissions.includes(perm.id) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 66
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-medium text-sm",
|
||||
children: perm.label
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, perm.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 151,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Gruppe speichern'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 152,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
||||
children: roles.map((role)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 p-6 flex flex-col h-full group relative hover-lift",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute top-4 right-4 flex items-center gap-1",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(role),
|
||||
className: "p-2 bg-slate-100 text-slate-600 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg transition-all",
|
||||
title: "Bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 171,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
canDelete && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleDelete(role),
|
||||
className: "p-2 bg-slate-100 text-slate-600 hover:text-red-600 hover:bg-red-50 rounded-lg transition-all",
|
||||
title: "Löschen",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 179,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 174,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 165,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-start mb-4 pr-8",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
|
||||
className: "font-bold text-lg text-slate-900",
|
||||
children: role.name
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 185,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 184,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "bg-slate-100 text-slate-600 px-2.5 py-1 rounded-md text-xs font-semibold",
|
||||
children: [
|
||||
role._count.users,
|
||||
" Nutzer zugeordnet"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 189,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 188,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex-1 space-y-2 mt-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-xs font-semibold text-slate-400 uppercase tracking-wider mb-2",
|
||||
children: "Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 193,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
role.permissions.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-sm text-slate-600 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-1.5 h-1.5 rounded-full bg-indigo-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 196,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
AVAILABLE_PERMISSIONS.find((ap)=>ap.id === p)?.label || p
|
||||
]
|
||||
}, p, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 195,
|
||||
columnNumber: 17
|
||||
}, this)),
|
||||
(!role.permissions || role.permissions.length === 0) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-sm text-slate-400 italic",
|
||||
children: "Keine Rechte zugewiesen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 200,
|
||||
columnNumber: 72
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 192,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, role.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 162,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(RolesPage, "ktiDJlOMzJJjZ+CijT4wvooTeDk=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"]
|
||||
];
|
||||
});
|
||||
_c = RolesPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "RolesPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Check
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 6 9 17l-5-5",
|
||||
key: "1gmf2c"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Check",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Trash2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 11v6",
|
||||
key: "nco0om"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 11v6",
|
||||
key: "outv1u"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
|
||||
key: "miytrc"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 6h18",
|
||||
key: "d0wm0j"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",
|
||||
key: "e791ji"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("trash-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Trash2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0pmr413._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,626 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/roles/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>RolesPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/roles/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
const AVAILABLE_PERMISSIONS = [
|
||||
{
|
||||
id: 'TICKETS_VIEW',
|
||||
label: 'Tickets ansehen'
|
||||
},
|
||||
{
|
||||
id: 'TICKETS_EDIT',
|
||||
label: 'Tickets bearbeiten / Zeit buchen'
|
||||
},
|
||||
{
|
||||
id: 'CUSTOMERS_MANAGE',
|
||||
label: 'Kundenstamm verwalten'
|
||||
},
|
||||
{
|
||||
id: 'TEAM_MANAGE',
|
||||
label: 'Mitarbeiter & Rollen verwalten'
|
||||
},
|
||||
{
|
||||
id: 'SYSTEM_SETTINGS',
|
||||
label: 'Globale Einstellungen'
|
||||
}
|
||||
];
|
||||
function RolesPage() {
|
||||
_s();
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"RolesPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
}
|
||||
}["RolesPage.useEffect"], []);
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) setRoles(await res.json());
|
||||
};
|
||||
const handleEdit = (role)=>{
|
||||
setEditingId(role.id);
|
||||
setFormData({
|
||||
name: role.name,
|
||||
permissions: role.permissions || []
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const togglePermission = (permId)=>{
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
permissions: prev.permissions.includes(permId) ? prev.permissions.filter((p)=>p !== permId) : [
|
||||
...prev.permissions,
|
||||
permId
|
||||
]
|
||||
}));
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/roles', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setEditingId(null);
|
||||
setShowForm(false);
|
||||
fetchRoles();
|
||||
// Hinweis für den Nutzer, falls er seine eigenen Rechte ändert
|
||||
alert('Erfolgreich gespeichert. Hinweis: Änderungen an den eigenen Rechten werden erst nach einem Neu-Login aktiv.');
|
||||
} else {
|
||||
alert('Fehler beim Speichern.');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__["ShieldCheck"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Berechtigungsgruppen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Definiere Rollen und weise granulare Rechte zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 80,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 76,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neue Gruppe'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-center mb-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800",
|
||||
children: editingId ? 'Berechtigungsgruppe bearbeiten' : 'Neue Gruppe anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 91,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Name der Gruppe (z.B. Supporter, Buchhaltung) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full md:w-1/2 border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.name,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
name: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-3",
|
||||
children: "Zugeordnete Berechtigungen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",
|
||||
children: AVAILABLE_PERMISSIONS.map((perm)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: `flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-50 border-indigo-200 text-indigo-900' : 'bg-white border-slate-200 hover:bg-slate-50'}`,
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "checkbox",
|
||||
className: "hidden",
|
||||
checked: formData.permissions.includes(perm.id),
|
||||
onChange: ()=>togglePermission(perm.id)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `w-5 h-5 rounded flex items-center justify-center border transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-600 border-indigo-600 text-white' : 'border-slate-300 bg-white'}`,
|
||||
children: formData.permissions.includes(perm.id) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 66
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-medium text-sm",
|
||||
children: perm.label
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, perm.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Gruppe speichern'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
||||
children: roles.map((role)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 p-6 flex flex-col h-full group relative",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(role),
|
||||
className: "absolute top-4 right-4 p-2 bg-slate-100 text-slate-600 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg opacity-0 group-hover:opacity-100 transition-all",
|
||||
title: "Bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-start mb-4 pr-8",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
|
||||
className: "font-bold text-lg text-slate-900",
|
||||
children: role.name
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 145,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "bg-slate-100 text-slate-600 px-2.5 py-1 rounded-md text-xs font-semibold",
|
||||
children: [
|
||||
role._count.users,
|
||||
" Nutzer zugeordnet"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 150,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 149,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex-1 space-y-2 mt-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-xs font-semibold text-slate-400 uppercase tracking-wider mb-2",
|
||||
children: "Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 154,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
role.permissions.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-sm text-slate-600 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-1.5 h-1.5 rounded-full bg-indigo-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 157,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
AVAILABLE_PERMISSIONS.find((ap)=>ap.id === p)?.label || p
|
||||
]
|
||||
}, p, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 17
|
||||
}, this)),
|
||||
(!role.permissions || role.permissions.length === 0) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-sm text-slate-400 italic",
|
||||
children: "Keine Rechte zugewiesen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 161,
|
||||
columnNumber: 72
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, role.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(RolesPage, "oN/Pj/a5UCkNLsHxV8zyK8wEJTs=");
|
||||
_c = RolesPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "RolesPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Check
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 6 9 17l-5-5",
|
||||
key: "1gmf2c"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Check",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0qd5jra._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,861 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/users/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>UsersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Shield$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield.mjs [app-client] (ecmascript) <export default as Shield>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wrench$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Wrench$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/wrench.mjs [app-client] (ecmascript) <export default as Wrench>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/user.mjs [app-client] (ecmascript) <export default as User>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/users/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function UsersPage() {
|
||||
_s();
|
||||
const [users, setUsers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [errorMsg, setErrorMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
role: 'TECHNICIAN'
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"UsersPage.useEffect": ()=>{
|
||||
fetchUsers();
|
||||
}
|
||||
}["UsersPage.useEffect"], []);
|
||||
const fetchUsers = async ()=>{
|
||||
const res = await fetch('/api/users');
|
||||
if (res.ok) setUsers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
setErrorMsg('');
|
||||
const res = await fetch('/api/users', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
role: 'TECHNICIAN'
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchUsers();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
setErrorMsg(data.error || 'Fehler beim Speichern');
|
||||
}
|
||||
};
|
||||
const getRoleBadge = (role)=>{
|
||||
switch(role){
|
||||
case 'ADMIN':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-red-50 text-red-700 border border-red-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__["ShieldAlert"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 167
|
||||
}, this),
|
||||
" Administrator"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 28
|
||||
}, this);
|
||||
case 'TECHNICIAN':
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-indigo-50 text-indigo-700 border border-indigo-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wrench$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Wrench$3e$__["Wrench"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 181
|
||||
}, this),
|
||||
" Techniker"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 33
|
||||
}, this);
|
||||
default:
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__["User"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 169
|
||||
}, this),
|
||||
" Benutzer"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Shield$3e$__["Shield"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Team & Rechte"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 63,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Systemzugänge und Mitarbeiterrollen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Mitarbeiter'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 61,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Zugang anlegen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
errorMsg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "mb-4 p-3 bg-red-50 text-red-700 border border-red-200 rounded-lg text-sm font-medium",
|
||||
children: errorMsg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail (Login) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Initiales Passwort *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: true,
|
||||
minLength: 6,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.password,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
password: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Systemrolle *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none bg-white",
|
||||
value: formData.role,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
role: e.target.value
|
||||
}),
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "TECHNICIAN",
|
||||
children: "Techniker (Bearbeitet zugewiesene Tickets)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "ADMIN",
|
||||
children: "Administrator (Vollzugriff)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: "USER",
|
||||
children: "Standard-Benutzer"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Zugang erstellen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Mitarbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "E-Mail"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Systemrolle"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Angelegt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 128,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
users.map((u)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/50 transition-colors",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-semibold text-slate-900",
|
||||
children: [
|
||||
u.firstName,
|
||||
" ",
|
||||
u.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2 text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 76
|
||||
}, this),
|
||||
" ",
|
||||
u.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: getRoleBadge(u.role)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(u.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 141,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, u.id, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
users.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Mitarbeiter gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 147,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(UsersPage, "F4KK6Lofo5fLDQ1GLjrLMiznfHA=");
|
||||
_c = UsersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "UsersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 8v4",
|
||||
key: "1got3b"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 16h.01",
|
||||
key: "1drbdi"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldAlert",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/wrench.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Wrench
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
|
||||
key: "1ngwbx"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Wrench = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("wrench", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/wrench.mjs [app-client] (ecmascript) <export default as Wrench>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Wrench",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wrench$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wrench$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/wrench.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/user.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>User
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",
|
||||
key: "975kel"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "12",
|
||||
cy: "7",
|
||||
r: "4",
|
||||
key: "17ys0d"
|
||||
}
|
||||
]
|
||||
];
|
||||
const User = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("user", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/user.mjs [app-client] (ecmascript) <export default as User>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"User",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/user.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0rm3t1e._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
|
||||
(globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({
|
||||
script: typeof document === "object" ? document.currentScript : undefined,
|
||||
chunks: ["static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_10z625~._.js","static/chunks/node_modules_next_dist_compiled_next-devtools_index_0553esy.js","static/chunks/node_modules_next_dist_compiled_react-dom_058-ah~._.js","static/chunks/node_modules_next_dist_compiled_react-server-dom-turbopack_0p3wegg._.js","static/chunks/node_modules_next_dist_compiled_0rpq4pf._.js","static/chunks/node_modules_next_dist_client_0fhqo1d._.js","static/chunks/node_modules_next_dist_115brz8._.js","static/chunks/node_modules_@swc_helpers_cjs_0-4ujiy._.js"],
|
||||
source: "entry"
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,537 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/roles/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>RolesPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/roles/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
const AVAILABLE_PERMISSIONS = [
|
||||
{
|
||||
id: 'TICKETS_VIEW',
|
||||
label: 'Tickets ansehen'
|
||||
},
|
||||
{
|
||||
id: 'TICKETS_EDIT',
|
||||
label: 'Tickets bearbeiten / Zeit buchen'
|
||||
},
|
||||
{
|
||||
id: 'CUSTOMERS_MANAGE',
|
||||
label: 'Kundenstamm verwalten'
|
||||
},
|
||||
{
|
||||
id: 'TEAM_MANAGE',
|
||||
label: 'Mitarbeiter & Rollen verwalten'
|
||||
},
|
||||
{
|
||||
id: 'SYSTEM_SETTINGS',
|
||||
label: 'Globale Einstellungen'
|
||||
}
|
||||
];
|
||||
function RolesPage() {
|
||||
_s();
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"RolesPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
}
|
||||
}["RolesPage.useEffect"], []);
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) setRoles(await res.json());
|
||||
};
|
||||
const togglePermission = (permId)=>{
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
permissions: prev.permissions.includes(permId) ? prev.permissions.filter((p)=>p !== permId) : [
|
||||
...prev.permissions,
|
||||
permId
|
||||
]
|
||||
}));
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/roles', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
name: '',
|
||||
permissions: []
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchRoles();
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldCheck$3e$__["ShieldCheck"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Berechtigungsgruppen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Definiere Rollen und weise granulare Rechte zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 57,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neue Gruppe'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 52,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-xl shadow-sm border border-slate-200 animate-in fade-in slide-in-from-top-4",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "space-y-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Name der Gruppe (z.B. Supporter, Buchhaltung) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full md:w-1/2 border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: formData.name,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
name: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-3",
|
||||
children: "Zugeordnete Berechtigungen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3",
|
||||
children: AVAILABLE_PERMISSIONS.map((perm)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: `flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors ${formData.permissions.includes(perm.id) ? 'bg-indigo-50 border-indigo-200 text-indigo-900' : 'bg-white border-slate-200 hover:bg-slate-50'}`,
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `w-5 h-5 rounded flex items-center justify-center border ${formData.permissions.includes(perm.id) ? 'bg-indigo-600 border-indigo-600 text-white' : 'border-slate-300'}`,
|
||||
children: formData.permissions.includes(perm.id) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 66
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-medium text-sm",
|
||||
children: perm.label
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
]
|
||||
}, perm.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-end pt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Gruppe speichern"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-3 gap-6",
|
||||
children: roles.map((role)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 p-6 flex flex-col h-full",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex justify-between items-start mb-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
|
||||
className: "font-bold text-lg text-slate-900",
|
||||
children: role.name
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "bg-slate-100 text-slate-600 px-2.5 py-1 rounded-full text-xs font-semibold",
|
||||
children: [
|
||||
role._count.users,
|
||||
" Nutzer"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex-1 space-y-2",
|
||||
children: [
|
||||
role.permissions.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-sm text-slate-600 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-1.5 h-1.5 rounded-full bg-indigo-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 19
|
||||
}, this),
|
||||
AVAILABLE_PERMISSIONS.find((ap)=>ap.id === p)?.label || p
|
||||
]
|
||||
}, p, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 17
|
||||
}, this)),
|
||||
role.permissions.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-sm text-slate-400 italic",
|
||||
children: "Keine Rechte zugewiesen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 49
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, role.id, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 11
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/roles/page.tsx",
|
||||
lineNumber: 51,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(RolesPage, "SbedxIFPL3yP0P5DTQEh0WcJTdE=");
|
||||
_c = RolesPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "RolesPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldCheck
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m9 12 2 2 4-4",
|
||||
key: "dzmm74"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldCheck = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript) <export default as ShieldCheck>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldCheck",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>X
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M18 6 6 18",
|
||||
key: "1bl5f8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m6 6 12 12",
|
||||
key: "d8bk6v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("x", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"X",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Check
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 6 9 17l-5-5",
|
||||
key: "1gmf2c"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("check", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript) <export default as Check>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Check",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0sq50zl._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,757 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/customers/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>CustomersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/customers/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function CustomersPage() {
|
||||
_s();
|
||||
const [customers, setCustomers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"CustomersPage.useEffect": ()=>{
|
||||
fetchCustomers();
|
||||
}
|
||||
}["CustomersPage.useEffect"], []);
|
||||
const fetchCustomers = async ()=>{
|
||||
const res = await fetch('/api/customers');
|
||||
if (res.ok) setCustomers(await res.json());
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/customers', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(formData)
|
||||
});
|
||||
if (res.ok) {
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
companyName: '',
|
||||
phone: ''
|
||||
});
|
||||
setShowForm(false);
|
||||
fetchCustomers();
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 51,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Kundenverwaltung"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte deinen Kundenstamm und Ansprechpartner."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 53,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>setShowForm(!showForm),
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Kunde'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 55,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 48,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: "Kundendaten erfassen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 67,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 71,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 74,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 75,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 73,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 77,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Telefon"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "tel",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.phone,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
phone: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 81,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Firma (Optional)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.companyName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
companyName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: "Kunde speichern"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "ID"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kunde"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 104,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Kontakt"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktion"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 101,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
customers.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors group border-b border-slate-50 last:border-0",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-mono text-slate-400",
|
||||
children: [
|
||||
"#",
|
||||
c.id.toString().padStart(4, '0')
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "font-semibold text-slate-900",
|
||||
children: [
|
||||
c.firstName,
|
||||
" ",
|
||||
c.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.companyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-slate-500 text-xs flex items-center gap-1 mt-0.5",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Building2$3e$__["Building2"], {
|
||||
className: "w-3 h-3"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 25
|
||||
}, this),
|
||||
" ",
|
||||
c.companyName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col gap-1 text-slate-600",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 63
|
||||
}, this),
|
||||
" ",
|
||||
c.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
c.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2 text-xs",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Phone$3e$__["Phone"], {
|
||||
className: "w-3 h-3 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 83
|
||||
}, this),
|
||||
" ",
|
||||
c.phone
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 33
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
|
||||
href: `/customers/${c.id}`,
|
||||
className: "text-indigo-600 font-medium hover:text-indigo-800 transition-opacity inline-block p-2",
|
||||
children: "Akte öffnen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, c.id, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
customers.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 4,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Kunden vorhanden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 100,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/customers/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(CustomersPage, "vnHPr/IKUav/ewwkFv8FFvqdDhA=");
|
||||
_c = CustomersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "CustomersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Building2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 12h4",
|
||||
key: "a56b0p"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 8h4",
|
||||
key: "1sr2af"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 21v-3a2 2 0 0 0-4 0v3",
|
||||
key: "1rgiei"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",
|
||||
key: "secmi2"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",
|
||||
key: "16ra0t"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Building2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("building-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript) <export default as Building2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Building2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$building$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/building-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Phone
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
||||
key: "9njp5v"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Phone = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("phone", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript) <export default as Phone>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Phone",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$phone$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/phone.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0w.lhiv._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,911 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/users/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>UsersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/react/index.js [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/users/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
function UsersPage() {
|
||||
_s();
|
||||
const [users, setUsers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const { toast, confirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const permissions = session?.user?.permissions || [];
|
||||
const canDelete = permissions.includes('DATA_DELETE');
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"UsersPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
fetchUsers();
|
||||
}
|
||||
}["UsersPage.useEffect"], []);
|
||||
const fetchUsers = async ()=>{
|
||||
const res = await fetch('/api/users');
|
||||
if (res.ok) setUsers(await res.json());
|
||||
};
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setRoles(data);
|
||||
if (data.length > 0 && !editingId) {
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
roleId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: roles.length > 0 ? roles[0].id.toString() : ''
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const handleEdit = (user)=>{
|
||||
setEditingId(user.id);
|
||||
setFormData({
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
email: user.email,
|
||||
password: '',
|
||||
roleId: user.roleId ? user.roleId.toString() : roles[0]?.id.toString() || ''
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/users', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setShowForm(false);
|
||||
fetchUsers();
|
||||
toast(editingId ? 'Mitarbeiter erfolgreich aktualisiert' : 'Mitarbeiter erfolgreich angelegt', 'success');
|
||||
} else {
|
||||
const data = await res.json();
|
||||
toast(data.error || 'Fehler beim Speichern', 'error');
|
||||
}
|
||||
};
|
||||
const handleDelete = async (user)=>{
|
||||
const isConfirmed = await confirm({
|
||||
title: 'Mitarbeiter löschen',
|
||||
message: `"${user.firstName} ${user.lastName}" wirklich löschen? Zugewiesene Tickets werden freigestellt.`,
|
||||
danger: true
|
||||
});
|
||||
if (!isConfirmed) return;
|
||||
const res = await fetch(`/api/users?id=${user.id}`, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
if (res.ok) {
|
||||
toast('Mitarbeiter gelöscht', 'success');
|
||||
fetchUsers();
|
||||
} else {
|
||||
const data = await res.json();
|
||||
toast(data.error || 'Fehler beim Löschen', 'error');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Team"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Systemzugänge und weise Berechtigungsgruppen zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Mitarbeiter'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: editingId ? 'Mitarbeiter bearbeiten' : 'Zugang anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 131,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 130,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail (Login) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 139,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 140,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: editingId ? 'Neues Passwort (optional)' : 'Initiales Passwort *'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: !editingId,
|
||||
minLength: 6,
|
||||
placeholder: editingId ? 'Leer lassen, um es nicht zu ändern' : '',
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.password,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
password: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 146,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Berechtigungsgruppe *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 157,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none bg-white transition-all",
|
||||
value: formData.roleId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
roleId: e.target.value
|
||||
}),
|
||||
children: roles.map((r)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: r.id,
|
||||
children: r.name
|
||||
}, r.id, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 158,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 165,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Zugang erstellen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 164,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 129,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Mitarbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 178,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "E-Mail"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 179,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Gruppe"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 180,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Angelegt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 181,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktionen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 182,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 177,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 176,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
users.map((u)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors border-b border-slate-50 last:border-0 group",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-semibold text-slate-900",
|
||||
children: [
|
||||
u.firstName,
|
||||
" ",
|
||||
u.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 188,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-600",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 190,
|
||||
columnNumber: 61
|
||||
}, this),
|
||||
" ",
|
||||
u.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 190,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 189,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: u.role ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__["ShieldAlert"], {
|
||||
className: "w-3 h-3 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 195,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" ",
|
||||
u.role.name
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 194,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-red-500 text-xs font-medium",
|
||||
children: "Ohne Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 198,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 192,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(u.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 201,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-end gap-1",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(u),
|
||||
className: "p-2 text-slate-400 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg transition-all inline-flex items-center",
|
||||
title: "Mitarbeiter bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 211,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 206,
|
||||
columnNumber: 21
|
||||
}, this),
|
||||
canDelete && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleDelete(u),
|
||||
className: "p-2 text-slate-400 hover:text-red-600 hover:bg-red-50 rounded-lg transition-all inline-flex items-center",
|
||||
title: "Mitarbeiter löschen",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 219,
|
||||
columnNumber: 25
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 214,
|
||||
columnNumber: 23
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 205,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 204,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, u.id, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 187,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
users.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Mitarbeiter gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 227,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 227,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 185,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 175,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 174,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(UsersPage, "U+VmDd9a98pv26puzttnJK42qsY=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"]
|
||||
];
|
||||
});
|
||||
_c = UsersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "UsersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 8v4",
|
||||
key: "1got3b"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 16h.01",
|
||||
key: "1drbdi"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldAlert",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Trash2
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M10 11v6",
|
||||
key: "nco0om"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M14 11v6",
|
||||
key: "outv1u"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
|
||||
key: "miytrc"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M3 6h18",
|
||||
key: "d0wm0j"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",
|
||||
key: "e791ji"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("trash-2", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript) <export default as Trash2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Trash2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0xenng5._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,872 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/settings/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>SettingsPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/settings.mjs [app-client] (ecmascript) <export default as Settings>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$inbox$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Inbox$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/inbox.mjs [app-client] (ecmascript) <export default as Inbox>");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/settings/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
function SettingsPage() {
|
||||
_s();
|
||||
const [data, setData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
hourlyRate: 0,
|
||||
taxRate: 0,
|
||||
companyName: '',
|
||||
companyInfo: '',
|
||||
smtpHost: '',
|
||||
smtpPort: 587,
|
||||
smtpUser: '',
|
||||
smtpPass: '',
|
||||
smtpFrom: '',
|
||||
hasSmtpPass: false,
|
||||
imapHost: '',
|
||||
imapPort: 993,
|
||||
imapUser: '',
|
||||
imapPass: '',
|
||||
hasImapPass: false
|
||||
});
|
||||
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true);
|
||||
const [msg, setMsg] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])('');
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"SettingsPage.useEffect": ()=>{
|
||||
fetch('/api/settings').then({
|
||||
"SettingsPage.useEffect": (res)=>res.json()
|
||||
}["SettingsPage.useEffect"]).then({
|
||||
"SettingsPage.useEffect": (d)=>{
|
||||
setData({
|
||||
hourlyRate: d.hourlyRate || 0,
|
||||
taxRate: d.taxRate || 0,
|
||||
companyName: d.companyName || '',
|
||||
companyInfo: d.companyInfo || '',
|
||||
smtpHost: d.smtpHost || '',
|
||||
smtpPort: d.smtpPort || 587,
|
||||
smtpUser: d.smtpUser || '',
|
||||
smtpPass: '',
|
||||
smtpFrom: d.smtpFrom || '',
|
||||
hasSmtpPass: d.hasSmtpPass,
|
||||
imapHost: d.imapHost || '',
|
||||
imapPort: d.imapPort || 993,
|
||||
imapUser: d.imapUser || '',
|
||||
imapPass: '',
|
||||
hasImapPass: d.hasImapPass
|
||||
});
|
||||
setLoading(false);
|
||||
}
|
||||
}["SettingsPage.useEffect"]);
|
||||
}
|
||||
}["SettingsPage.useEffect"], []);
|
||||
const handleSave = async (e)=>{
|
||||
e.preventDefault();
|
||||
const res = await fetch('/api/settings', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
if (res.ok) {
|
||||
setMsg('Einstellungen erfolgreich gespeichert.');
|
||||
setTimeout(()=>setMsg(''), 3000);
|
||||
setData((prev)=>({
|
||||
...prev,
|
||||
smtpPass: '',
|
||||
hasSmtpPass: prev.smtpPass ? true : prev.hasSmtpPass,
|
||||
imapPass: '',
|
||||
hasImapPass: prev.imapPass ? true : prev.hasImapPass
|
||||
}));
|
||||
}
|
||||
};
|
||||
if (loading) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-8",
|
||||
children: "Lade Konfiguration..."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 46,
|
||||
columnNumber: 23
|
||||
}, this);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-4xl mx-auto space-y-6 pb-12",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 51,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
" Systemeinstellungen"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 50,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
msg && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 bg-emerald-50 text-emerald-700 border border-emerald-200 rounded-lg font-medium",
|
||||
children: msg
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 54,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSave,
|
||||
className: "bg-white rounded-xl shadow-sm border border-slate-200 divide-y divide-slate-100",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800",
|
||||
children: "Abrechnungsparameter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 60,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Euro$3e$__["Euro"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 64,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Standard-Stundensatz"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 63,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.01",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.hourlyRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
hourlyRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 66,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 62,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Percent$3e$__["Percent"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 70,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
" Mehrwertsteuer (%)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 69,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
step: "0.1",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.taxRate,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
taxRate: parseFloat(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 72,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 68,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 61,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 59,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-5 h-5"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 80,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Ausgehende E-Mails (SMTP)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 79,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-4 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Server (Host)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpHost,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpHost: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 83,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Port"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpPort,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpPort: parseInt(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 89,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 82,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Benutzername"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 94,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpUser,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpUser: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 95,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 93,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "SMTP Passwort"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 98,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
placeholder: data.hasSmtpPass ? "****** (Gespeichert)" : "Passwort eingeben",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.smtpPass,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
smtpPass: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 99,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 97,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 78,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 space-y-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "font-semibold text-slate-800 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$inbox$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Inbox$3e$__["Inbox"], {
|
||||
className: "w-5 h-5"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Eingehende E-Mails (IMAP)"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 106,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-sm text-slate-500",
|
||||
children: "Diese E-Mail-Adresse wird überwacht, um automatisch Tickets aus eingehenden E-Mails zu erstellen."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-4 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "IMAP Server (Host)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "z.B. imap.strato.de",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.imapHost,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
imapHost: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 111,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Port"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "number",
|
||||
placeholder: "993",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.imapPort,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
imapPort: parseInt(e.target.value)
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 115,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "IMAP Benutzername"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 122,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
placeholder: "z.B. support@deine-firma.de",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.imapUser,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
imapUser: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 123,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "IMAP Passwort"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 126,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
placeholder: data.hasImapPass ? "****** (Gespeichert)" : "Passwort eingeben",
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-indigo-500 outline-none",
|
||||
value: data.imapPass,
|
||||
onChange: (e)=>setData({
|
||||
...data,
|
||||
imapPass: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 127,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 125,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 105,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-6 bg-slate-50 flex justify-end",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-indigo-600 text-white px-6 py-2.5 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-bold shadow-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Save$3e$__["Save"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Alle Einstellungen speichern"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 133,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 132,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 56,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/settings/page.tsx",
|
||||
lineNumber: 49,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(SettingsPage, "TuN6EtDZOx2dMIP8zEeeKmM9wfU=");
|
||||
_c = SettingsPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "SettingsPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Save
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
|
||||
key: "1c8476"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",
|
||||
key: "1ydtos"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M7 3v4a1 1 0 0 0 1 1h7",
|
||||
key: "t51u73"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Save = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("save", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript) <export default as Save>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Save",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$save$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/save.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Percent
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"line",
|
||||
{
|
||||
x1: "19",
|
||||
x2: "5",
|
||||
y1: "5",
|
||||
y2: "19",
|
||||
key: "1x9vlm"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "6.5",
|
||||
cy: "6.5",
|
||||
r: "2.5",
|
||||
key: "4mh3h7"
|
||||
}
|
||||
],
|
||||
[
|
||||
"circle",
|
||||
{
|
||||
cx: "17.5",
|
||||
cy: "17.5",
|
||||
r: "2.5",
|
||||
key: "1mdrzq"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Percent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("percent", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript) <export default as Percent>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Percent",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$percent$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/percent.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Euro
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 10h12",
|
||||
key: "1y6xl8"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M4 14h9",
|
||||
key: "1loblj"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",
|
||||
key: "1j6lzo"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Euro = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("euro", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript) <export default as Euro>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Euro",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$euro$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/euro.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/inbox.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Inbox
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"polyline",
|
||||
{
|
||||
points: "22 12 16 12 14 15 10 15 8 12 2 12",
|
||||
key: "o97t9d"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",
|
||||
key: "oot6mr"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Inbox = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("inbox", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/inbox.mjs [app-client] (ecmascript) <export default as Inbox>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Inbox",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$inbox$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$inbox$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/inbox.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_0z2yh.x._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,796 @@
|
||||
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||||
"[project]/app/users/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>UsersPage
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.mjs [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.mjs [app-client] (ecmascript) <export default as X>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/components/ToastProvider.tsx [app-client] (ecmascript)");
|
||||
;
|
||||
var _s = __turbopack_context__.k.signature();
|
||||
// /opt/erp-system/app/users/page.tsx
|
||||
'use client';
|
||||
;
|
||||
;
|
||||
;
|
||||
function UsersPage() {
|
||||
_s();
|
||||
const [users, setUsers] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [roles, setRoles] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [showForm, setShowForm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const [editingId, setEditingId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
|
||||
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
|
||||
const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: ''
|
||||
});
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"UsersPage.useEffect": ()=>{
|
||||
fetchRoles();
|
||||
fetchUsers();
|
||||
}
|
||||
}["UsersPage.useEffect"], []);
|
||||
const fetchUsers = async ()=>{
|
||||
const res = await fetch('/api/users');
|
||||
if (res.ok) setUsers(await res.json());
|
||||
};
|
||||
const fetchRoles = async ()=>{
|
||||
const res = await fetch('/api/roles');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setRoles(data);
|
||||
if (data.length > 0 && !editingId) {
|
||||
setFormData((prev)=>({
|
||||
...prev,
|
||||
roleId: data[0].id.toString()
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleCreateNew = ()=>{
|
||||
setEditingId(null);
|
||||
setFormData({
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
password: '',
|
||||
roleId: roles.length > 0 ? roles[0].id.toString() : ''
|
||||
});
|
||||
setShowForm(!showForm);
|
||||
};
|
||||
const handleEdit = (user)=>{
|
||||
setEditingId(user.id);
|
||||
setFormData({
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
email: user.email,
|
||||
password: '',
|
||||
roleId: user.roleId ? user.roleId.toString() : roles[0]?.id.toString() || ''
|
||||
});
|
||||
setShowForm(true);
|
||||
};
|
||||
const handleSubmit = async (e)=>{
|
||||
e.preventDefault();
|
||||
const method = editingId ? 'PUT' : 'POST';
|
||||
const payload = editingId ? {
|
||||
id: editingId,
|
||||
...formData
|
||||
} : formData;
|
||||
const res = await fetch('/api/users', {
|
||||
method: method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (res.ok) {
|
||||
setShowForm(false);
|
||||
fetchUsers();
|
||||
toast(editingId ? 'Mitarbeiter erfolgreich aktualisiert' : 'Mitarbeiter erfolgreich angelegt', 'success');
|
||||
} else {
|
||||
const data = await res.json();
|
||||
toast(data.error || 'Fehler beim Speichern', 'error');
|
||||
}
|
||||
};
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "max-w-7xl mx-auto space-y-6 animate-fade-in-up",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center justify-between",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", {
|
||||
className: "text-2xl font-bold text-slate-900 flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
|
||||
className: "w-6 h-6 text-indigo-600"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 88,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
" Team"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 87,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
|
||||
className: "text-slate-500 mt-1",
|
||||
children: "Verwalte Systemzugänge und weise Berechtigungsgruppen zu."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 90,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 86,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: handleCreateNew,
|
||||
className: "bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center gap-2 font-medium shadow-sm",
|
||||
children: [
|
||||
showForm ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 23
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 96,
|
||||
columnNumber: 51
|
||||
}, this),
|
||||
showForm ? 'Abbrechen' : 'Neuer Mitarbeiter'
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 92,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 85,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
showForm && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white p-6 rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 animate-in fade-in slide-in-from-top-4 duration-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", {
|
||||
className: "text-lg font-semibold text-slate-800 mb-4",
|
||||
children: editingId ? 'Mitarbeiter bearbeiten' : 'Zugang anlegen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 103,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", {
|
||||
onSubmit: handleSubmit,
|
||||
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Vorname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 109,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.firstName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
firstName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 110,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 108,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Nachname *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 113,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "text",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.lastName,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
lastName: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 114,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 112,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "E-Mail (Login) *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 117,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "email",
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.email,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
email: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 118,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 116,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: editingId ? 'Neues Passwort (optional)' : 'Initiales Passwort *'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 121,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", {
|
||||
type: "password",
|
||||
required: !editingId,
|
||||
minLength: 6,
|
||||
placeholder: editingId ? 'Leer lassen, um es nicht zu ändern' : '',
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none transition-all",
|
||||
value: formData.password,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
password: e.target.value
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 124,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 120,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("label", {
|
||||
className: "block text-sm font-medium text-slate-700 mb-1",
|
||||
children: "Berechtigungsgruppe *"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 135,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("select", {
|
||||
required: true,
|
||||
className: "w-full border border-slate-300 p-2.5 rounded-xl focus-ring outline-none bg-white transition-all",
|
||||
value: formData.roleId,
|
||||
onChange: (e)=>setFormData({
|
||||
...formData,
|
||||
roleId: e.target.value
|
||||
}),
|
||||
children: roles.map((r)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("option", {
|
||||
value: r.id,
|
||||
children: r.name
|
||||
}, r.id, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 19
|
||||
}, this))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 136,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 134,
|
||||
columnNumber: 13
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "md:col-span-2 flex justify-end mt-2 gap-3",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "button",
|
||||
onClick: ()=>setShowForm(false),
|
||||
className: "px-6 py-2.5 rounded-lg text-slate-600 hover:bg-slate-100 font-medium",
|
||||
children: "Abbrechen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
type: "submit",
|
||||
className: "bg-slate-900 text-white px-6 py-2.5 rounded-lg hover:bg-slate-800 transition font-medium",
|
||||
children: editingId ? 'Änderungen speichern' : 'Zugang erstellen'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 107,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 102,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "bg-white rounded-2xl shadow-lg shadow-slate-200/50 border border-slate-100 overflow-hidden",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("table", {
|
||||
className: "w-full text-left text-sm",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", {
|
||||
className: "bg-slate-50 text-slate-600 font-medium border-b border-slate-200",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Mitarbeiter"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 156,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "E-Mail"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 157,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Gruppe"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 158,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6",
|
||||
children: "Angelegt am"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 159,
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("th", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: "Aktionen"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 160,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 155,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 154,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", {
|
||||
className: "divide-y divide-slate-100",
|
||||
children: [
|
||||
users.map((u)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
className: "hover:bg-slate-50/80 transition-colors border-b border-slate-50 last:border-0 group",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 font-semibold text-slate-900",
|
||||
children: [
|
||||
u.firstName,
|
||||
" ",
|
||||
u.lastName
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 166,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-600",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Mail$3e$__["Mail"], {
|
||||
className: "w-4 h-4 text-slate-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 61
|
||||
}, this),
|
||||
" ",
|
||||
u.email
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 168,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 167,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6",
|
||||
children: u.role ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium bg-slate-100 text-slate-700 border border-slate-200",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ShieldAlert$3e$__["ShieldAlert"], {
|
||||
className: "w-3 h-3 text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 173,
|
||||
columnNumber: 23
|
||||
}, this),
|
||||
" ",
|
||||
u.role.name
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 172,
|
||||
columnNumber: 21
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
|
||||
className: "text-red-500 text-xs font-medium",
|
||||
children: "Ohne Rechte"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 176,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 170,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-slate-500",
|
||||
children: new Date(u.createdAt).toLocaleDateString('de-DE')
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 179,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
className: "py-4 px-6 text-right",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
onClick: ()=>handleEdit(u),
|
||||
className: "p-2 text-slate-400 hover:text-indigo-600 hover:bg-indigo-50 rounded-lg transition-all inline-flex items-center",
|
||||
title: "Mitarbeiter bearbeiten",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit2$3e$__["Edit2"], {
|
||||
className: "w-4 h-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 188,
|
||||
columnNumber: 21
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 183,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 182,
|
||||
columnNumber: 17
|
||||
}, this)
|
||||
]
|
||||
}, u.id, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 165,
|
||||
columnNumber: 15
|
||||
}, this)),
|
||||
users.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", {
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("td", {
|
||||
colSpan: 5,
|
||||
className: "py-8 text-center text-slate-500",
|
||||
children: "Keine Mitarbeiter gefunden."
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 194,
|
||||
columnNumber: 19
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 194,
|
||||
columnNumber: 15
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 163,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 153,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 152,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/app/users/page.tsx",
|
||||
lineNumber: 84,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(UsersPage, "nSBMDsg8uXD8pSIIwMMyhhVQSPU=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$components$2f$ToastProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
|
||||
];
|
||||
});
|
||||
_c = UsersPage;
|
||||
var _c;
|
||||
__turbopack_context__.k.register(_c, "UsersPage");
|
||||
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
|
||||
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
|
||||
}
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Plus
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M5 12h14",
|
||||
key: "1ays0h"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 5v14",
|
||||
key: "s699le"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("plus", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Plus",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Mail
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",
|
||||
key: "132q7q"
|
||||
}
|
||||
],
|
||||
[
|
||||
"rect",
|
||||
{
|
||||
x: "2",
|
||||
y: "4",
|
||||
width: "20",
|
||||
height: "16",
|
||||
rx: "2",
|
||||
key: "izxlao"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Mail = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("mail", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript) <export default as Mail>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Mail",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$mail$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/mail.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>ShieldAlert
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
||||
key: "oel41y"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 8v4",
|
||||
key: "1got3b"
|
||||
}
|
||||
],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M12 16h.01",
|
||||
key: "1drbdi"
|
||||
}
|
||||
]
|
||||
];
|
||||
const ShieldAlert = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("shield-alert", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript) <export default as ShieldAlert>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"ShieldAlert",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$shield$2d$alert$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/shield-alert.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"__iconNode",
|
||||
()=>__iconNode,
|
||||
"default",
|
||||
()=>Pen
|
||||
]);
|
||||
/**
|
||||
* @license lucide-react v1.14.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.mjs [app-client] (ecmascript)");
|
||||
;
|
||||
const __iconNode = [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
|
||||
key: "1a8usu"
|
||||
}
|
||||
]
|
||||
];
|
||||
const Pen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("pen", __iconNode);
|
||||
;
|
||||
}),
|
||||
"[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript) <export default as Edit2>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"Edit2",
|
||||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pen$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pen.mjs [app-client] (ecmascript)");
|
||||
}),
|
||||
]);
|
||||
|
||||
//# sourceMappingURL=_11_u0t2._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user