correction de l'update du
workflow
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/00 - projet/plumeia/.next-internal/server/app/api/projects/[id]/workflow/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=13a27__next-internal_server_app_api_projects_%5Bid%5D_workflow_route_actions_04e92945.js.map
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
17306
.next/dev/server/chunks/549ce_next_f33af993._.js
Normal file
17306
.next/dev/server/chunks/549ce_next_f33af993._.js
Normal file
File diff suppressed because it is too large
Load Diff
144
.next/dev/server/chunks/549ce_next_f33af993._.js.map
Normal file
144
.next/dev/server/chunks/549ce_next_f33af993._.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.v((parentImport) => {
|
||||
return Promise.resolve().then(() => {
|
||||
return parentImport("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
|
||||
});
|
||||
});
|
||||
}),
|
||||
];
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
268
.next/dev/server/chunks/[root-of-the-server]__3e7d68f1._.js
Normal file
268
.next/dev/server/chunks/[root-of-the-server]__3e7d68f1._.js
Normal file
@@ -0,0 +1,268 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("crypto", () => require("crypto"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/action-async-storage.external.js", () => require("next/dist/server/app-render/action-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"auth",
|
||||
()=>auth,
|
||||
"handlers",
|
||||
()=>handlers,
|
||||
"signIn",
|
||||
()=>signIn,
|
||||
"signOut",
|
||||
()=>signOut
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/index.js [app-route] (ecmascript) <locals>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript) <locals>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__["default"])({
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: 'credentials',
|
||||
credentials: {
|
||||
email: {
|
||||
label: 'Email',
|
||||
type: 'email'
|
||||
},
|
||||
password: {
|
||||
label: 'Password',
|
||||
type: 'password'
|
||||
}
|
||||
},
|
||||
async authorize (credentials) {
|
||||
if (!credentials?.email || !credentials?.password) return null;
|
||||
// Lazy import to avoid PrismaClient initialization during build
|
||||
const { default: getDB } = await __turbopack_context__.A("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)");
|
||||
const prisma = getDB();
|
||||
const user = await prisma.user.findUnique({
|
||||
where: {
|
||||
email: credentials.email
|
||||
}
|
||||
});
|
||||
if (!user) return null;
|
||||
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.hashedPassword);
|
||||
if (!isValid) return null;
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name
|
||||
};
|
||||
}
|
||||
})
|
||||
],
|
||||
session: {
|
||||
strategy: 'jwt'
|
||||
},
|
||||
callbacks: {
|
||||
async jwt ({ token, user }) {
|
||||
if (user) {
|
||||
token.id = user.id;
|
||||
}
|
||||
return token;
|
||||
},
|
||||
async session ({ session, token }) {
|
||||
if (session.user && token.id) {
|
||||
session.user.id = token.id;
|
||||
}
|
||||
return session;
|
||||
}
|
||||
},
|
||||
pages: {
|
||||
signIn: '/'
|
||||
}
|
||||
});
|
||||
}),
|
||||
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
|
||||
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>__TURBOPACK__default__export__,
|
||||
"getDB",
|
||||
()=>getDB
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs, [project]/Documents/00 - projet/plumeia/node_modules/@prisma/client)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@prisma/adapter-pg/dist/index.mjs [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__ = __turbopack_context__.i("[externals]/pg [external] (pg, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/pg)");
|
||||
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__,
|
||||
__TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__
|
||||
]);
|
||||
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
|
||||
;
|
||||
;
|
||||
;
|
||||
const globalForPrisma = globalThis;
|
||||
function getDB() {
|
||||
if (!globalForPrisma.prisma) {
|
||||
const connectionString = process.env.DATABASE_URL;
|
||||
const pool = new __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__["Pool"]({
|
||||
connectionString
|
||||
});
|
||||
const adapter = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PrismaPg"](pool);
|
||||
globalForPrisma.prisma = new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__["PrismaClient"]({
|
||||
adapter
|
||||
});
|
||||
}
|
||||
return globalForPrisma.prisma;
|
||||
}
|
||||
const __TURBOPACK__default__export__ = getDB;
|
||||
__turbopack_async_result__();
|
||||
} catch(e) { __turbopack_async_result__(e); } }, false);}),
|
||||
"[project]/Documents/00 - projet/plumeia/src/app/api/projects/[id]/workflow/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
|
||||
|
||||
__turbopack_context__.s([
|
||||
"PUT",
|
||||
()=>PUT,
|
||||
"dynamic",
|
||||
()=>dynamic
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
|
||||
]);
|
||||
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
|
||||
const dynamic = 'force-dynamic';
|
||||
;
|
||||
;
|
||||
;
|
||||
async function PUT(request, { params }) {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["auth"])();
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: 'Non autorisé'
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { id } = await params;
|
||||
const prisma = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])();
|
||||
// Verify ownership
|
||||
const project = await prisma.project.findFirst({
|
||||
where: {
|
||||
id,
|
||||
userId: session.user.id
|
||||
}
|
||||
});
|
||||
if (!project) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: 'Projet non trouvé'
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
const { nodes, connections } = await request.json();
|
||||
// Replace all nodes and connections in a transaction
|
||||
await prisma.$transaction(async (tx)=>{
|
||||
// Delete existing
|
||||
await tx.plotConnection.deleteMany({
|
||||
where: {
|
||||
projectId: id
|
||||
}
|
||||
});
|
||||
await tx.plotNode.deleteMany({
|
||||
where: {
|
||||
projectId: id
|
||||
}
|
||||
});
|
||||
// Create new nodes
|
||||
if (nodes && nodes.length > 0) {
|
||||
await tx.plotNode.createMany({
|
||||
data: nodes.map((n)=>({
|
||||
id: n.id,
|
||||
projectId: id,
|
||||
x: n.x,
|
||||
y: n.y,
|
||||
title: n.title || '',
|
||||
description: n.description || '',
|
||||
color: n.color || '#ffffff',
|
||||
type: n.type || 'story'
|
||||
}))
|
||||
});
|
||||
}
|
||||
// Create new connections
|
||||
if (connections && connections.length > 0) {
|
||||
await tx.plotConnection.createMany({
|
||||
data: connections.map((c)=>({
|
||||
id: c.id,
|
||||
projectId: id,
|
||||
source: c.source,
|
||||
target: c.target
|
||||
}))
|
||||
});
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
success: true
|
||||
});
|
||||
}
|
||||
__turbopack_async_result__();
|
||||
} catch(e) { __turbopack_async_result__(e); } }, false);}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__3e7d68f1._.js.map
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}},
|
||||
{"offset": {"line": 137, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}},
|
||||
{"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/projects/%5Bid%5D/workflow/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// PUT /api/projects/[id]/workflow — Sync workflow (nodes + connections)\r\nexport async function PUT(\r\n request: NextRequest,\r\n { params }: { params: Promise<{ id: string }> }\r\n) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const { id } = await params;\r\n const prisma = getDB();\r\n\r\n // Verify ownership\r\n const project = await prisma.project.findFirst({\r\n where: { id, userId: session.user.id },\r\n });\r\n if (!project) {\r\n return NextResponse.json({ error: 'Projet non trouvé' }, { status: 404 });\r\n }\r\n\r\n const { nodes, connections } = await request.json();\r\n\r\n // Replace all nodes and connections in a transaction\r\n await prisma.$transaction(async (tx) => {\r\n // Delete existing\r\n await tx.plotConnection.deleteMany({ where: { projectId: id } });\r\n await tx.plotNode.deleteMany({ where: { projectId: id } });\r\n\r\n // Create new nodes\r\n if (nodes && nodes.length > 0) {\r\n await tx.plotNode.createMany({\r\n data: nodes.map((n: any) => ({\r\n id: n.id,\r\n projectId: id,\r\n x: n.x,\r\n y: n.y,\r\n title: n.title || '',\r\n description: n.description || '',\r\n color: n.color || '#ffffff',\r\n type: n.type || 'story',\r\n })),\r\n });\r\n }\r\n\r\n // Create new connections\r\n if (connections && connections.length > 0) {\r\n await tx.plotConnection.createMany({\r\n data: connections.map((c: any) => ({\r\n id: c.id,\r\n projectId: id,\r\n source: c.source,\r\n target: c.target,\r\n })),\r\n });\r\n }\r\n });\r\n\r\n return NextResponse.json({ success: true });\r\n}\r\n"],"names":[],"mappings":";;;;;;AAEA;AACA;AACA;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe,IAClB,OAAoB,EACpB,EAAE,MAAM,EAAuC;IAE/C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM;IACrB,MAAM,SAAS,IAAA,6KAAK;IAEpB,mBAAmB;IACnB,MAAM,UAAU,MAAM,OAAO,OAAO,CAAC,SAAS,CAAC;QAC3C,OAAO;YAAE;YAAI,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;IACzC;IACA,IAAI,CAAC,SAAS;QACV,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAoB,GAAG;YAAE,QAAQ;QAAI;IAC3E;IAEA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,IAAI;IAEjD,qDAAqD;IACrD,MAAM,OAAO,YAAY,CAAC,OAAO;QAC7B,kBAAkB;QAClB,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;YAAE,OAAO;gBAAE,WAAW;YAAG;QAAE;QAC9D,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO;gBAAE,WAAW;YAAG;QAAE;QAExD,mBAAmB;QACnB,IAAI,SAAS,MAAM,MAAM,GAAG,GAAG;YAC3B,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACzB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAW,CAAC;wBACzB,IAAI,EAAE,EAAE;wBACR,WAAW;wBACX,GAAG,EAAE,CAAC;wBACN,GAAG,EAAE,CAAC;wBACN,OAAO,EAAE,KAAK,IAAI;wBAClB,aAAa,EAAE,WAAW,IAAI;wBAC9B,OAAO,EAAE,KAAK,IAAI;wBAClB,MAAM,EAAE,IAAI,IAAI;oBACpB,CAAC;YACL;QACJ;QAEA,yBAAyB;QACzB,IAAI,eAAe,YAAY,MAAM,GAAG,GAAG;YACvC,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;gBAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,IAAW,CAAC;wBAC/B,IAAI,EAAE,EAAE;wBACR,WAAW;wBACX,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,MAAM;oBACpB,CAAC;YACL;QACJ;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;QAAE,SAAS;IAAK;AAC7C"}}]
|
||||
}
|
||||
@@ -79,7 +79,7 @@ const renderTextWithLinks = (text, entities, onNavigate)=>{
|
||||
children: parts
|
||||
}, void 0, false);
|
||||
};
|
||||
const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].memo(({ node, isSelected, isEditing, activeColorPickerId, entities, savedColors, onMouseDown, onMouseUp, onStartConnection, onUpdate, onSetEditing, onToggleColorPicker, onSaveColor, onNavigateToEntity, onInputFocus, onInputCheckAutocomplete, onKeyDownInInput })=>{
|
||||
const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].memo(({ node, isSelected, isEditing, isDragging, activeColorPickerId, entities, savedColors, onMouseDown, onMouseUp, onStartConnection, onUpdate, onSetEditing, onToggleColorPicker, onSaveColor, onNavigateToEntity, onInputFocus, onInputCheckAutocomplete, onKeyDownInInput })=>{
|
||||
const [showTypePicker, setShowTypePicker] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false);
|
||||
const richDescription = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"])(()=>{
|
||||
return renderTextWithLinks(node.description, entities, onNavigateToEntity);
|
||||
@@ -89,7 +89,8 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
onNavigateToEntity
|
||||
]);
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `absolute flex flex-col rounded-xl shadow-sm border transition-all z-10 group
|
||||
className: `absolute flex flex-col rounded-xl shadow-sm border z-10 group
|
||||
${isDragging ? '' : 'transition-all'}
|
||||
${isSelected ? 'ring-2 ring-indigo-500 shadow-lg scale-[1.01]' : 'border-slate-200 hover:shadow-md'}
|
||||
`,
|
||||
style: {
|
||||
@@ -101,13 +102,14 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
},
|
||||
onMouseDown: (e)=>onMouseDown(e, node.id),
|
||||
onMouseUp: (e)=>onMouseUp(e, node.id),
|
||||
onDoubleClick: (e)=>e.stopPropagation(),
|
||||
onMouseLeave: ()=>setShowTypePicker(false),
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "h-1.5 rounded-t-xl bg-black/5 w-full cursor-grab active:cursor-grabbing"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 117,
|
||||
lineNumber: 120,
|
||||
columnNumber: 13
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -126,7 +128,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
autoFocus: true
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 122,
|
||||
lineNumber: 125,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "font-bold text-slate-800 cursor-text truncate mr-6 text-sm",
|
||||
@@ -134,7 +136,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
children: node.title
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 130,
|
||||
lineNumber: 133,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -147,12 +149,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
size: 14
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 142,
|
||||
lineNumber: 145,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 138,
|
||||
lineNumber: 141,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
activeColorPickerId === node.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -171,12 +173,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
}
|
||||
}, color, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 149,
|
||||
lineNumber: 152,
|
||||
columnNumber: 37
|
||||
}, ("TURBOPACK compile-time value", void 0)))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 147,
|
||||
lineNumber: 150,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -193,12 +195,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 159,
|
||||
lineNumber: 162,
|
||||
columnNumber: 37
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 158,
|
||||
lineNumber: 161,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -207,25 +209,25 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
children: "+ SAUVER"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 166,
|
||||
lineNumber: 169,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 157,
|
||||
lineNumber: 160,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 146,
|
||||
lineNumber: 149,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 120,
|
||||
lineNumber: 123,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -240,7 +242,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
onBlur: ()=>onSetEditing(null)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 179,
|
||||
lineNumber: 182,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: `w-full h-full text-xs text-slate-600 leading-relaxed p-1 cursor-text whitespace-pre-wrap ${node.type === 'dialogue' ? 'font-mono bg-indigo-50/30 rounded pl-2 border-l-2 border-indigo-200' : ''}`,
|
||||
@@ -248,12 +250,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
children: richDescription
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 189,
|
||||
lineNumber: 192,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 177,
|
||||
lineNumber: 180,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -278,12 +280,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 206,
|
||||
lineNumber: 209,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 201,
|
||||
lineNumber: 204,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -301,12 +303,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-amber-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 213,
|
||||
lineNumber: 216,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 208,
|
||||
lineNumber: 211,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -324,18 +326,18 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-blue-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 220,
|
||||
lineNumber: 223,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 215,
|
||||
lineNumber: 218,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 200,
|
||||
lineNumber: 203,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -350,7 +352,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-slate-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 229,
|
||||
lineNumber: 232,
|
||||
columnNumber: 51
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
node.type === 'action' && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], {
|
||||
@@ -358,7 +360,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-amber-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 230,
|
||||
lineNumber: 233,
|
||||
columnNumber: 52
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
node.type === 'dialogue' && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], {
|
||||
@@ -366,25 +368,25 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
className: "text-blue-500"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 231,
|
||||
lineNumber: 234,
|
||||
columnNumber: 54
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 225,
|
||||
lineNumber: 228,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 198,
|
||||
lineNumber: 201,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 119,
|
||||
lineNumber: 122,
|
||||
columnNumber: 13
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
|
||||
@@ -394,22 +396,22 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
|
||||
size: 12
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 240,
|
||||
lineNumber: 243,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 236,
|
||||
lineNumber: 239,
|
||||
columnNumber: 13
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 102,
|
||||
lineNumber: 103,
|
||||
columnNumber: 9
|
||||
}, ("TURBOPACK compile-time value", void 0));
|
||||
}, (prev, next)=>{
|
||||
return prev.node === next.node && prev.isSelected === next.isSelected && prev.isEditing === next.isEditing && prev.activeColorPickerId === next.activeColorPickerId && prev.entities === next.entities;
|
||||
return prev.node === next.node && prev.isSelected === next.isSelected && prev.isEditing === next.isEditing && prev.isDragging === next.isDragging && prev.activeColorPickerId === next.activeColorPickerId && prev.entities === next.entities;
|
||||
});
|
||||
const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
const containerRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"])(null);
|
||||
@@ -659,12 +661,15 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
containerRef.current.scrollTop = scrollStart.y - dy;
|
||||
return;
|
||||
}
|
||||
const scrollLeft = containerRef.current?.scrollLeft || 0;
|
||||
const scrollTop = containerRef.current?.scrollTop || 0;
|
||||
setMousePos({
|
||||
x: clientX - rect.left + scrollLeft,
|
||||
y: clientY - rect.top + scrollTop
|
||||
});
|
||||
// Only update mousePos when connecting (drawing a line), not during node drag
|
||||
if (connectingNodeId) {
|
||||
const scrollLeft = containerRef.current?.scrollLeft || 0;
|
||||
const scrollTop = containerRef.current?.scrollTop || 0;
|
||||
setMousePos({
|
||||
x: clientX - rect.left + scrollLeft,
|
||||
y: clientY - rect.top + scrollTop
|
||||
});
|
||||
}
|
||||
if (isDragging) {
|
||||
if (rafRef.current) return;
|
||||
rafRef.current = requestAnimationFrame(()=>{
|
||||
@@ -683,7 +688,7 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
});
|
||||
}
|
||||
};
|
||||
const handleMouseUp = ()=>{
|
||||
const handleMouseUp = (e)=>{
|
||||
if (rafRef.current) {
|
||||
cancelAnimationFrame(rafRef.current);
|
||||
rafRef.current = null;
|
||||
@@ -692,6 +697,33 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
...data,
|
||||
nodes: internalNodesRef.current
|
||||
});
|
||||
// Hit-test: if connecting, check if mouse is over any node
|
||||
if (connectingNodeId && containerRef.current) {
|
||||
const rect = containerRef.current.getBoundingClientRect();
|
||||
const scrollLeft = containerRef.current.scrollLeft;
|
||||
const scrollTop = containerRef.current.scrollTop;
|
||||
const mx = e.clientX - rect.left + scrollLeft;
|
||||
const my = e.clientY - rect.top + scrollTop;
|
||||
const targetNode = internalNodesRef.current.find((n)=>n.id !== connectingNodeId && mx >= n.x && mx <= n.x + CARD_WIDTH && my >= n.y && my <= n.y + CARD_HEIGHT);
|
||||
if (targetNode) {
|
||||
const exists = data.connections.some((c)=>c.source === connectingNodeId && c.target === targetNode.id);
|
||||
if (!exists) {
|
||||
const newConn = {
|
||||
id: `conn-${Date.now()}`,
|
||||
source: connectingNodeId,
|
||||
target: targetNode.id
|
||||
};
|
||||
onUpdate({
|
||||
...data,
|
||||
nodes: internalNodesRef.current,
|
||||
connections: [
|
||||
...data.connections,
|
||||
newConn
|
||||
]
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
setIsDragging(false);
|
||||
setIsPanning(false);
|
||||
setConnectingNodeId(null);
|
||||
@@ -796,36 +828,36 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
size: 14
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 575,
|
||||
columnNumber: 17
|
||||
lineNumber: 616,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
" AJOUTER NŒUD"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 574,
|
||||
columnNumber: 13
|
||||
lineNumber: 615,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "w-px h-6 bg-slate-100 mx-2"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 577,
|
||||
columnNumber: 13
|
||||
lineNumber: 618,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "text-[10px] uppercase font-bold text-slate-400 tracking-wider",
|
||||
children: selectedNodeIds.size > 0 ? `${selectedNodeIds.size} SÉLECTIONNÉ(S)` : 'Double-cliquez sur le canvas pour créer'
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 578,
|
||||
columnNumber: 13
|
||||
lineNumber: 619,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 573,
|
||||
columnNumber: 9
|
||||
lineNumber: 614,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-2",
|
||||
@@ -838,24 +870,24 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
size: 16
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 584,
|
||||
columnNumber: 17
|
||||
lineNumber: 625,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 583,
|
||||
columnNumber: 13
|
||||
lineNumber: 624,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 582,
|
||||
columnNumber: 9
|
||||
lineNumber: 623,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 572,
|
||||
columnNumber: 7
|
||||
lineNumber: 613,
|
||||
columnNumber: 13
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
ref: containerRef,
|
||||
@@ -890,8 +922,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
markerEnd: "url(#arrowhead)"
|
||||
}, conn.id, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 611,
|
||||
columnNumber: 21
|
||||
lineNumber: 652,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0));
|
||||
}),
|
||||
connectingNodeId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("line", {
|
||||
@@ -905,8 +937,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
markerEnd: "url(#arrowhead-blue)"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 615,
|
||||
columnNumber: 17
|
||||
lineNumber: 656,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("defs", {
|
||||
children: [
|
||||
@@ -922,13 +954,13 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
fill: "#cbd5e1"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 624,
|
||||
columnNumber: 21
|
||||
lineNumber: 665,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 623,
|
||||
columnNumber: 17
|
||||
lineNumber: 664,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("marker", {
|
||||
id: "arrowhead-blue",
|
||||
@@ -942,30 +974,31 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
fill: "#6366f1"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 627,
|
||||
columnNumber: 21
|
||||
lineNumber: 668,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 626,
|
||||
columnNumber: 17
|
||||
lineNumber: 667,
|
||||
columnNumber: 25
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 622,
|
||||
columnNumber: 13
|
||||
lineNumber: 663,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 601,
|
||||
columnNumber: 9
|
||||
lineNumber: 642,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
internalNodes.map((node)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(StoryNode, {
|
||||
node: node,
|
||||
isSelected: selectedNodeIds.has(node.id),
|
||||
isEditing: editingNodeId === node.id,
|
||||
isDragging: isDragging,
|
||||
activeColorPickerId: activeColorPickerId,
|
||||
entities: entities,
|
||||
savedColors: savedColors,
|
||||
@@ -982,14 +1015,14 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
onKeyDownInInput: handleKeyDownInInput
|
||||
}, node.id, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 633,
|
||||
columnNumber: 13
|
||||
lineNumber: 674,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0)))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 589,
|
||||
columnNumber: 7
|
||||
lineNumber: 630,
|
||||
columnNumber: 13
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
activeSuggestion && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "fixed z-50 bg-white rounded-xl shadow-2xl border border-indigo-100 w-64 max-h-48 overflow-y-auto",
|
||||
@@ -1007,8 +1040,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 658,
|
||||
columnNumber: 15
|
||||
lineNumber: 700,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0)),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "divide-y divide-slate-50",
|
||||
@@ -1018,32 +1051,32 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
|
||||
children: ent.name
|
||||
}, ent.id, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 664,
|
||||
columnNumber: 27
|
||||
lineNumber: 706,
|
||||
columnNumber: 33
|
||||
}, ("TURBOPACK compile-time value", void 0))) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "p-4 text-xs text-slate-400 italic text-center",
|
||||
children: "Aucun résultat"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 673,
|
||||
columnNumber: 23
|
||||
lineNumber: 715,
|
||||
columnNumber: 29
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 661,
|
||||
columnNumber: 15
|
||||
lineNumber: 703,
|
||||
columnNumber: 21
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 657,
|
||||
columnNumber: 11
|
||||
lineNumber: 699,
|
||||
columnNumber: 17
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
|
||||
lineNumber: 571,
|
||||
columnNumber: 5
|
||||
lineNumber: 612,
|
||||
columnNumber: 9
|
||||
}, ("TURBOPACK compile-time value", void 0));
|
||||
};
|
||||
const __TURBOPACK__default__export__ = StoryWorkflow;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -303,12 +303,22 @@ const useProjects = (user)=>{
|
||||
...data
|
||||
} : p));
|
||||
try {
|
||||
// Persist project fields
|
||||
const payload = {};
|
||||
if (data.title !== undefined) payload.title = data.title;
|
||||
if (data.author !== undefined) payload.author = data.author;
|
||||
if (data.settings !== undefined) payload.settings = data.settings;
|
||||
if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
|
||||
if (Object.keys(payload).length > 0) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
|
||||
}
|
||||
// Persist workflow (nodes + connections) separately
|
||||
if (data.workflow) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.syncWorkflow(id, {
|
||||
nodes: data.workflow.nodes || [],
|
||||
connections: data.workflow.connections || []
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Failed to update project", err);
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -334,12 +334,22 @@ const useProjects = (user)=>{
|
||||
...data
|
||||
} : p));
|
||||
try {
|
||||
// Persist project fields
|
||||
const payload = {};
|
||||
if (data.title !== undefined) payload.title = data.title;
|
||||
if (data.author !== undefined) payload.author = data.author;
|
||||
if (data.settings !== undefined) payload.settings = data.settings;
|
||||
if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
|
||||
if (Object.keys(payload).length > 0) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
|
||||
}
|
||||
// Persist workflow (nodes + connections) separately
|
||||
if (data.workflow) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.syncWorkflow(id, {
|
||||
nodes: data.workflow.nodes || [],
|
||||
connections: data.workflow.connections || []
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Failed to update project", err);
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -76,6 +76,12 @@ const api = {
|
||||
return api.request(`/projects/${id}`, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
async syncWorkflow (id, data) {
|
||||
return api.request(`/projects/${id}/workflow`, {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
}
|
||||
},
|
||||
// --- CHAPTERS ---
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user