UNPKG

filter-material-ui

Version:

A material-ui component which allows to edit a user defined set of fields representing a filter and display it as a text or a form

134 lines (133 loc) 6.14 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var material_1 = require("@mui/material"); var lodash_1 = require("lodash"); var react_1 = __importStar(require("react")); var ApplyButton_1 = __importDefault(require("./ApplyButton")); var CancelButton_1 = __importDefault(require("./CancelButton")); var ColorsSelect_1 = __importDefault(require("./ColorsSelect")); var FilterMaterialUi_1 = require("./FilterMaterialUi"); var InputField_1 = __importDefault(require("./InputField")); var MultipleSelect_1 = __importDefault(require("./MultipleSelect")); var SingleSelect_1 = __importDefault(require("./SingleSelect")); var styles = { button: { margin: 10, }, buttons: { textAlign: 'center', }, container: { width: '100%', }, grid: { alignItems: 'flex-end', }, item: { padding: 10, }, }; function FormFilter(props) { var fields = props.fields, id = props.id, onCancel = props.onCancel, onChange = props.onChange; var _a = (0, react_1.useState)(props.data || {}), data = _a[0], setData = _a[1]; var handleChange = (0, react_1.useCallback)(function (field, value) { return setData(function (prevData) { var _a; return (__assign(__assign({}, prevData), (_a = {}, _a[field] = value, _a))); }); }, []); var renderFieldByType = (0, react_1.useCallback)(function (field) { var label = field.label, name = field.name, options = field.options, text = field.text; var noOptionsAvailable = text.noOptionsAvailable, noOptionsMatchFilter = text.noOptionsMatchFilter; var value = data[name]; switch (field.type) { case FilterMaterialUi_1.TYPE.INPUT: return react_1.default.createElement(InputField_1.default, { label: label, name: name, onChange: handleChange, value: value }); case FilterMaterialUi_1.TYPE.COLORS_SELECT: return (react_1.default.createElement(ColorsSelect_1.default, { label: label, name: name, noOptionsAvailable: noOptionsAvailable, noOptionsMatchFilter: noOptionsMatchFilter, onChange: handleChange, options: options || [], values: value })); case FilterMaterialUi_1.TYPE.MULTIPLE_SELECT: return (react_1.default.createElement(MultipleSelect_1.default, { label: label, name: name, noOptionsAvailable: noOptionsAvailable, noOptionsMatchFilter: noOptionsMatchFilter, onChange: handleChange, options: options || [], values: value })); case FilterMaterialUi_1.TYPE.SINGLE_SELECT: return (react_1.default.createElement(SingleSelect_1.default, { label: label, name: name, noOptionsAvailable: noOptionsAvailable, noOptionsMatchFilter: noOptionsMatchFilter, onChange: handleChange, options: options || [], value: value })); default: return react_1.default.createElement("div", null, field.type); } }, [data]); var renderField = (0, react_1.useCallback)(function (field) { var _a = getColWidth((0, lodash_1.size)(fields)), md = _a.md, sm = _a.sm, xs = _a.xs; return (react_1.default.createElement(material_1.Grid, { item: true, key: field.name, md: md, sm: sm, style: styles.item, xs: xs }, renderFieldByType(field))); }, [fields]); var renderedFields = (0, react_1.useMemo)(function () { return fields.map(renderField); }, [fields]); var handleApply = (0, react_1.useCallback)(function () { return onChange(data); }, [data]); return (react_1.default.createElement("div", { id: id, style: styles.container }, react_1.default.createElement(material_1.Grid, { container: true, style: styles.grid }, renderedFields), react_1.default.createElement("div", { style: styles.buttons }, react_1.default.createElement(CancelButton_1.default, { onCancel: onCancel, style: styles.button }), react_1.default.createElement(ApplyButton_1.default, { onApply: handleApply, style: styles.button })))); } function getColWidth(numFields) { switch (numFields) { case 1: return { md: 12, sm: 12, xs: 12, }; case 2: return { md: 6, sm: 6, xs: 12, }; case 3: return { md: 4, sm: 6, xs: 12, }; default: return { md: 3, sm: 6, xs: 12, }; } } exports.default = FormFilter;