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

145 lines (144 loc) 6.71 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__, { default: ()=>advancedSearch_AdvancedSearchDropdownItem }); const jsx_runtime_namespaceObject = require("react/jsx-runtime"); const outline_namespaceObject = require("@heroicons/react/24/outline"); const external_clsx_namespaceObject = require("clsx"); var external_clsx_default = /*#__PURE__*/ __webpack_require__.n(external_clsx_namespaceObject); const external_react_namespaceObject = require("react"); const ConfigContext_js_namespaceObject = require("../../context/ConfigContext.js"); const I18nContext_js_namespaceObject = require("../../context/I18nContext.js"); const advancedSearch_js_namespaceObject = require("../../utils/advancedSearch.js"); const Dropdown_js_namespaceObject = require("../radix/Dropdown.js"); const AdvancedSearchDropdownItem = ({ property, schema, resource, path, onAddBlock, displayPath })=>{ const { options } = (0, ConfigContext_js_namespaceObject.useConfig)(); const { t } = (0, I18nContext_js_namespaceObject.useI18n)(); const schemaDef = schema.definitions[resource]; const schemaProperty = schemaDef.properties[property]; const hasChildren = (0, advancedSearch_js_namespaceObject.isSchemaPropertyScalarArray)(schemaDef, property) ? false : schemaProperty?.__nextadmin?.relation || schemaProperty?.type === "array"; const [openChildren, setOpenChildren] = (0, external_react_namespaceObject.useState)(false); const childResource = (0, external_react_namespaceObject.useMemo)(()=>{ if (!hasChildren) return null; const modelRef = schemaProperty?.type === "array" ? schemaProperty?.items?.$ref : schemaProperty?.__nextadmin?.relation?.$ref; const model = modelRef?.split("/")?.at(-1); const schemaModel = schema.definitions[model]; if (!schemaModel) return null; return { model: model, properties: Object.keys(schemaModel.properties) }; }, [ hasChildren, schemaProperty, schema ]); const aliases = options?.model?.[resource]?.aliases; const displayedProperty = t(`model.${resource}.fields.${property}`, {}, aliases?.[property] ?? property); const onClick = (evt)=>{ if (hasChildren) { evt.preventDefault(); setOpenChildren((prev)=>!prev); } else onAddBlock({ type: "filter", path: [ path, property ].filter(Boolean).join("."), value: "", contentType: (0, advancedSearch_js_namespaceObject.contentTypeFromSchemaType)(schemaProperty), enum: schemaProperty?.enum?.filter(Boolean) ?? [], defaultValue: schemaProperty?.default, canHaveChildren: false, condition: "equals", id: crypto.randomUUID(), nullable: (0, advancedSearch_js_namespaceObject.isFieldNullable)(schemaProperty.type), displayPath: [ displayPath, displayedProperty ].filter(Boolean).join(" \u2192 ") }); }; return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, { children: [ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Dropdown_js_namespaceObject.DropdownItem, { className: "cursor-pointer rounded-md p-2", onClick: onClick, children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", { className: "flex items-center justify-between", children: [ displayedProperty, hasChildren && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(outline_namespaceObject.ChevronRightIcon, { className: external_clsx_default()("h-5 w-5 transition-all", { "rotate-90 transform": openChildren }), "aria-hidden": "true", onClick: (e)=>{ e.stopPropagation(); setOpenChildren((prev)=>!prev); } }) ] }) }), childResource && openChildren && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", { className: "border-l-nextadmin-border-strong dark:border-l-dark-nextadmin-border-strong ml-2 border-l pl-2", children: childResource.properties.map((childProperty)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(AdvancedSearchDropdownItem, { property: childProperty, schema: schema, resource: childResource.model, path: [ path, property ].filter(Boolean).join("."), displayPath: [ displayPath, displayedProperty ].filter(Boolean).join(" \u2192 "), onAddBlock: onAddBlock }, childProperty)) }) ] }); }; const advancedSearch_AdvancedSearchDropdownItem = AdvancedSearchDropdownItem; exports["default"] = __webpack_exports__["default"]; for(var __webpack_i__ in __webpack_exports__)if (-1 === [ "default" ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; Object.defineProperty(exports, '__esModule', { value: true });