@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
JavaScript
;
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
});