UNPKG

@premieroctet/next-admin

Version:

Next-Admin provides a customizable and turnkey admin dashboard for applications built with Next.js and powered by the Prisma ORM. It aims to simplify the development process by providing a turnkey admin system that can be easily integrated into your proje

160 lines (159 loc) 7.13 kB
"use strict"; var __webpack_require__ = {}; (()=>{ __webpack_require__.d = (exports1, definition)=>{ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, get: definition[key] }); }; })(); (()=>{ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); })(); (()=>{ __webpack_require__.r = (exports1)=>{ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); Object.defineProperty(exports1, '__esModule', { value: true }); }; })(); var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); __webpack_require__.d(__webpack_exports__, { submitResource: ()=>submitResource, deleteResource: ()=>deleteResource }); const library_namespaceObject = require("@prisma/client/runtime/library"); const external_types_js_namespaceObject = require("../types.js"); const permissions_js_namespaceObject = require("../utils/permissions.js"); const prisma_js_namespaceObject = require("../utils/prisma.js"); const server_js_namespaceObject = require("../utils/server.js"); const tools_js_namespaceObject = require("../utils/tools.js"); const validator_js_namespaceObject = require("../utils/validator.js"); const deleteResource = async ({ prisma, resource, body, modelOptions })=>{ const modelIdProperty = (0, server_js_namespaceObject.getModelIdProperty)(resource); if (modelOptions?.middlewares?.delete) { const resources = await prisma[(0, tools_js_namespaceObject.uncapitalize)(resource)].findMany({ where: { [modelIdProperty]: { in: body.map((id)=>(0, server_js_namespaceObject.formatId)(resource, id.toString())) } } }); const middlewareExec = await Promise.allSettled(resources.map(async (res)=>{ const isSuccessDelete = await modelOptions?.middlewares?.delete?.(res); return isSuccessDelete; })); if (middlewareExec.some((exec)=>"rejected" === exec.status || false === exec.value)) return false; } return prisma[(0, tools_js_namespaceObject.uncapitalize)(resource)].deleteMany({ where: { [modelIdProperty]: { in: body.map((id)=>(0, server_js_namespaceObject.formatId)(resource, id.toString())) } } }); }; const submitResource = async ({ prisma, resource, body, id, options, schema })=>{ const { __admin_redirect: redirect, ...formValues } = body; const schemaDefinition = schema.definitions[resource]; const parsedFormData = (0, server_js_namespaceObject.parseFormData)(formValues, schemaDefinition, options?.model?.[resource]?.edit?.fields); const resourceIdField = (0, server_js_namespaceObject.getModelIdProperty)(resource); const fields = options?.model?.[resource]?.edit?.fields; try { (0, validator_js_namespaceObject.validate)(parsedFormData, fields); const { formattedData, complementaryFormattedData, errors } = await (0, server_js_namespaceObject.formattedFormData)(formValues, schema, resource, id, fields, prisma); if (errors.length) return { error: options?.model?.[resource]?.edit?.submissionErrorMessage ?? "Submission error", validation: errors.map((error)=>({ property: error.field, message: error.message })) }; if (!!id) { if (!(0, permissions_js_namespaceObject.hasPermission)(options?.model?.[resource], external_types_js_namespaceObject.Permission.EDIT)) return { error: "Unable to update items of this model" }; await prisma.$transaction(async (client)=>{ let canEdit = true; if (options?.model?.[resource]?.middlewares?.edit) { const currentData = await prisma[(0, tools_js_namespaceObject.uncapitalize)(resource)].findUniqueOrThrow({ where: { [resourceIdField]: (0, server_js_namespaceObject.formatId)(resource, id.toString()) } }); canEdit = await options?.model?.[resource]?.middlewares?.edit(formattedData, currentData); } if (!canEdit) throw new Error("Unable to edit this item"); await prisma[resource].update({ where: { [resourceIdField]: id }, data: formattedData }); }); const { data, relationshipsRawData } = await (0, prisma_js_namespaceObject.getDataItem)({ prisma, resource, resourceId: id, options }); return { updated: true, data, redirect: "list" === redirect, relationshipsRawData }; } if (!(0, permissions_js_namespaceObject.hasPermission)(options?.model?.[resource], external_types_js_namespaceObject.Permission.CREATE)) return { error: "Unable to create items of this model" }; const data = await prisma[resource].create({ data: formattedData }); await prisma[resource].update({ where: { [resourceIdField]: data[resourceIdField] }, data: complementaryFormattedData }); const { data: responseData, relationshipsRawData } = await (0, prisma_js_namespaceObject.getDataItem)({ prisma, resource, resourceId: data[resourceIdField], options }); return { created: true, createdId: data[resourceIdField], data: responseData, redirect: "list" === redirect, relationshipsRawData }; } catch (error) { if (error.constructor.name === library_namespaceObject.PrismaClientValidationError.name || error.constructor.name === library_namespaceObject.PrismaClientKnownRequestError.name || "ValidationError" === error.name) { let data = parsedFormData; if ("ValidationError" === error.name) error.errors.map((error)=>{ data[error.property] = formValues[error.property]; }); return { error: error.message, validation: error.errors }; } throw error; } }; exports.deleteResource = __webpack_exports__.deleteResource; exports.submitResource = __webpack_exports__.submitResource; for(var __webpack_i__ in __webpack_exports__)if (-1 === [ "deleteResource", "submitResource" ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; Object.defineProperty(exports, '__esModule', { value: true });