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