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

220 lines (219 loc) 10.2 kB
"use strict"; var __webpack_require__ = {}; (()=>{ __webpack_require__.n = (module)=>{ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module; __webpack_require__.d(getter, { a: getter }); return getter; }; })(); (()=>{ __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__, { getMainLayoutProps: ()=>getMainLayoutProps, getPropsFromParams: ()=>getPropsFromParams }); const external_lodash_clonedeep_namespaceObject = require("lodash.clonedeep"); var external_lodash_clonedeep_default = /*#__PURE__*/ __webpack_require__.n(external_lodash_clonedeep_namespaceObject); const external_globals_js_namespaceObject = require("./globals.js"); const external_options_js_namespaceObject = require("./options.js"); const external_prisma_js_namespaceObject = require("./prisma.js"); const external_server_js_namespaceObject = require("./server.js"); const external_tools_js_namespaceObject = require("./tools.js"); async function getPropsFromParams({ params, searchParams, options, prisma, isAppDir = true, locale, getMessages, basePath, apiBasePath }) { const { resource, resources, resourcesTitles, resourcesIdProperty, customPages, title, sidebar, resourcesIcons, externalLinks, translations } = await getMainLayoutProps({ basePath, apiBasePath, options, params, isAppDir, getMessages, locale }); const clientOptions = (0, external_tools_js_namespaceObject.extractSerializable)(options); let defaultProps = { resources, basePath, apiBasePath, isAppDir, customPages, resourcesTitles, resourcesIdProperty, options: clientOptions, title, sidebar, resourcesIcons, externalLinks, locale: locale ?? null, schema: (0, external_globals_js_namespaceObject.getSchema)(), translations }; if (!params) return defaultProps; if (!resource) return defaultProps; const actions = options?.model?.[resource]?.actions?.map((action)=>{ const { action: _, ...actionRest } = action; return actionRest; }); const dialogActionsComponents = isAppDir ? (0, external_options_js_namespaceObject.getClientActionsComponents)(resource, options) : null; switch(params.length){ case 1: { const { data, total, error, rawData } = await (0, external_prisma_js_namespaceObject.getMappedDataList)({ prisma, resource, options, searchParams: new URLSearchParams(searchParams), context: { locale }, appDir: isAppDir }); if (options?.model?.[resource]?.list?.filters) clientOptions.model[resource].list.filters = await (0, external_prisma_js_namespaceObject.mapModelFilters)(options.model[resource].list.filters); const dataIds = data.map((item)=>item[(0, external_server_js_namespaceObject.getModelIdProperty)(resource)].value); const fullfilledAction = await (0, external_server_js_namespaceObject.getEnableToExecuteActions)(resource, prisma, dataIds, actions); let serializedActions = (0, external_tools_js_namespaceObject.extractSerializable)(external_lodash_clonedeep_default()(fullfilledAction), isAppDir); return { ...defaultProps, resource, data, total, error: error ?? searchParams?.error ?? null, actions: serializedActions, dialogComponents: dialogActionsComponents, rawData: (0, external_tools_js_namespaceObject.extractSerializable)(rawData), listFilterOptions: clientOptions?.model?.[resource]?.list?.filters ?? null }; } case 2: { const resourceId = (0, external_server_js_namespaceObject.getResourceIdFromParam)(params[1], resource); const edit = options?.model?.[resource]?.edit; let deepCopySchema = await (0, external_server_js_namespaceObject.transformSchema)(resource, edit, options)(external_lodash_clonedeep_default()((0, external_globals_js_namespaceObject.getSchema)())); const customInputs = isAppDir ? (0, external_options_js_namespaceObject.getCustomInputs)(resource, options) : null; if (void 0 !== resourceId) { const { data, relationshipsRawData } = await (0, external_prisma_js_namespaceObject.getDataItem)({ prisma, resource, resourceId, options, locale, isAppDir }); const toStringFunction = (0, external_server_js_namespaceObject.getToStringForModel)(options?.model?.[resource]); const slug = toStringFunction ? toStringFunction(data) : resourceId.toString(); (0, external_server_js_namespaceObject.applyVisiblePropertiesInSchema)(resource, edit, data, deepCopySchema); const dataId = data[(0, external_server_js_namespaceObject.getModelIdProperty)(resource)]; const fullfilledAction = await (0, external_server_js_namespaceObject.getEnableToExecuteActions)(resource, prisma, [ dataId ], actions); let serializedActions = (0, external_tools_js_namespaceObject.extractSerializable)(external_lodash_clonedeep_default()(fullfilledAction), isAppDir); return { ...defaultProps, resource, data, slug, schema: deepCopySchema, customInputs, actions: serializedActions, dialogComponents: dialogActionsComponents, relationshipsRawData: (0, external_tools_js_namespaceObject.extractSerializable)(relationshipsRawData, isAppDir) }; } if ("new" === params[1]) return { ...defaultProps, resource, schema: deepCopySchema, customInputs }; return defaultProps; } default: return defaultProps; } } const getMainLayoutProps = async ({ basePath, apiBasePath, options, params, isAppDir = true, getMessages, locale })=>{ if (void 0 !== params && !Array.isArray(params)) throw new Error("`params` parameter in `getMainLayoutProps` should be an array of strings."); await (0, external_globals_js_namespaceObject.initGlobals)(); const resources = (0, external_server_js_namespaceObject.getResources)(options); const resource = (0, external_server_js_namespaceObject.getResourceFromParams)(params ?? [], resources); const resourcesIdProperty = resources.reduce((acc, resource)=>{ acc[resource] = (0, external_server_js_namespaceObject.getModelIdProperty)(resource); return acc; }, {}); const customPages = Object.keys(options?.pages ?? {}).map((path)=>({ title: options?.pages[path].title ?? path, path: path, icon: options?.pages[path].icon })); const resourcesTitles = resources.reduce((acc, resource)=>{ acc[resource] = options?.model?.[resource]?.title ?? resource; return acc; }, {}); const resourcesIcons = resources.reduce((acc, resource)=>{ if (!options?.model?.[resource]?.icon) return acc; acc[resource] = options.model?.[resource]?.icon; return acc; }, {}); let translations = null; if (getMessages) { const messages = await getMessages(locale); const dottedProperty = {}; const dot = (obj, prefix = "")=>{ Object.entries(obj).forEach(([key, value])=>{ if ("object" == typeof value) dot(value, `${prefix}${key}.`); else dottedProperty[`${prefix}${key}`] = value; }); }; dot(messages); translations = dottedProperty; } return { resources, resource, basePath, apiBasePath, customPages, resourcesTitles, isAppDir, title: isAppDir ? options?.title ?? "Admin" : null, sidebar: options?.sidebar, resourcesIcons, externalLinks: options?.externalLinks, options: (0, external_tools_js_namespaceObject.extractSerializable)(options, isAppDir), resourcesIdProperty: resourcesIdProperty, schema: (0, external_globals_js_namespaceObject.getSchema)(), translations }; }; exports.getMainLayoutProps = __webpack_exports__.getMainLayoutProps; exports.getPropsFromParams = __webpack_exports__.getPropsFromParams; for(var __webpack_i__ in __webpack_exports__)if (-1 === [ "getMainLayoutProps", "getPropsFromParams" ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; Object.defineProperty(exports, '__esModule', { value: true });