diff --git a/frontend-web-free/src/api/krowSDK.js b/frontend-web-free/src/api/krowSDK.js index 454db78a..5ba707ef 100644 --- a/frontend-web-free/src/api/krowSDK.js +++ b/frontend-web-free/src/api/krowSDK.js @@ -312,19 +312,39 @@ const dataconnectEntityConfig = { }, Sector:{ - + list: 'listSector', + get: 'getSectorById', + create: 'createSector', + update: 'updateSector', + delete: 'deleteSector', + filter: 'filterSector' }, Partner:{ - + list: 'listPartner', + get: 'getPartnerById', + create: 'createPartner', + update: 'updatePartner', + delete: 'deletePartner', + filter: 'filterPartner' }, Order:{ - + list: 'listOrder', + get: 'getOrderById', + create: 'createOrder', + update: 'updateOrder', + delete: 'deleteOrder', + filter: 'filterOrder' }, Shift:{ - + list: 'listShift', + get: 'getShiftById', + create: 'createShift', + update: 'updateShift', + delete: 'deleteShift', + filter: 'filterShift' } }; @@ -404,7 +424,7 @@ Object.entries(dataconnectEntityConfig).forEach(([entityName, ops]) => { // list ...(ops.list && { list: async (...args) => { - const fn = dcSdk[ops.list]; + /*const fn = dcSdk[ops.list]; if (typeof fn !== 'function') { throw new Error( `Data Connect operation "${ops.list}" not found for entity "${entityName}".` @@ -445,10 +465,8 @@ Object.entries(dataconnectEntityConfig).forEach(([entityName, ops]) => { } } - // COMMENT FIX: variables que realmente se mandan a DataConnect let variables = baseVariables; - // COMMENT FIX: caso especial para Team, que SÍ tiene orderBy/limit en el query if (entityName === "Team") { variables = variables || {}; if (sort) { @@ -463,7 +481,7 @@ Object.entries(dataconnectEntityConfig).forEach(([entityName, ops]) => { const res = await fn(dataConnect, variables); let items = normalizeResultToArray(res); - // COMMENT FIX: para entidades que NO tienen orderBy/limit en el query, + // para entidades que NO tienen orderBy/limit en el query, // aplicamos sort/limit en el front como fallback. if (entityName !== "Team" && sort) { const desc = sort.startsWith("-"); @@ -494,7 +512,85 @@ Object.entries(dataconnectEntityConfig).forEach(([entityName, ops]) => { } //console.log(items) //return items; + */ + const fn = dcSdk[ops.list]; + if (typeof fn !== 'function') { + throw new Error( + `Data Connect operation "${ops.list}" not found for entity "${entityName}".` + ); + } + try { + // --- Lógica de parseo de argumentos (se mantiene para compatibilidad) --- + let sort; + let limit; + let baseVariables; + + if (args.length === 1) { + const [a0] = args; + if (typeof a0 === "string") sort = a0; + else if (a0 && typeof a0 === "object") baseVariables = a0; + } else if (args.length === 2) { + const [a0, a1] = args; + if (typeof a0 === "string" && typeof a1 === "number") { + sort = a0; + limit = a1; + } else if (a0 && typeof a0 === "object") { + baseVariables = a0; + if (typeof a1 === "string") sort = a1; + } + } else if (args.length >= 3) { + const [a0, a1, a2] = args; + if (a0 && typeof a0 === "object") { + baseVariables = a0; + if (typeof a1 === "string") sort = a1; + if (typeof a2 === "number") limit = a2; + } + } + + // --- FIX: Se llama al backend SIN parámetros de orden/límite --- + // Se asume que la mayoría de queries 'list' no aceptan variables, solo se pasan si existen. + + //const res = await fn(dataConnect, baseVariables); + console.log(`Calling ${ops.list} for ${entityName}`, { variables: baseVariables }); + const res = await fn(dataConnect, baseVariables); + console.log(`Finished ${ops.list} for ${entityName}`, res); + + let items = normalizeResultToArray(res); + + // --- FIX: SE RESTAURA el ordenamiento y límite en el CLIENTE --- + // Esto es necesario hasta que el backend pueda manejar estos parámetros. + if (sort) { + const isDesc = sort.startsWith("-"); + const field = isDesc ? sort.slice(1) : sort; + + items = items.slice().sort((a, b) => { + const av = a?.[field]; + const bv = b?.[field]; + + if (av == null && bv == null) return 0; + if (av == null) return 1; + if (bv == null) return -1; + + const da = new Date(av); + const db = new Date(bv); + if (!isNaN(da) && !isNaN(db)) { + return isDesc ? db - da : da - db; + } + + if (av < bv) return isDesc ? 1 : -1; + if (av > bv) return isDesc ? -1 : 1; + return 0; + }); + } + + if (typeof limit === "number") { + items = items.slice(0, limit); + } return items.map(toSnake); + } catch (err) { + console.error('list staff failed', err); + throw err; + } }, }),