UNPKG

mui-spfx-controls

Version:
214 lines 14.4 kB
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; import { Close, Save } from '@mui/icons-material'; import { Button, ButtonGroup, Card, CardActions, CardContent, CardHeader, Checkbox, CircularProgress, FormControlLabel, Grid, MenuItem, TextField, Typography, } from '@mui/material'; import { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import { Logger } from '@pnp/logging'; import dayjs from 'dayjs'; import * as React from 'react'; import { forwardRef, useEffect, useState } from 'react'; import { ListService } from '../../services/ListService'; import { PeoplePicker } from '../PeoplePicker/PeoplePicker'; export var ListForm = forwardRef(function (_a, ref) { var context = _a.context, list = _a.list, fields = _a.fields, label = _a.label, paperVariant = _a.paperVariant, paperElevation = _a.paperElevation, inputVariant = _a.inputVariant, inputSize = _a.inputSize, fieldSpacing = _a.fieldSpacing, responsive = _a.responsive, onSave = _a.onSave, onCancel = _a.onCancel; var listService = new ListService(context, list); var _b = useState([]), filteredFields = _b[0], setFilteredFields = _b[1]; var _c = useState({}), formData = _c[0], setFormData = _c[1]; var _d = useState(false), loading = _d[0], setLoading = _d[1]; useEffect(function () { if (list) { var fetchFields = function () { return __awaiter(void 0, void 0, void 0, function () { var response, error_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, 3, 4]); setLoading(true); return [4 /*yield*/, listService.getListFields(fields)]; case 1: response = _a.sent(); setFilteredFields(response); return [3 /*break*/, 4]; case 2: error_1 = _a.sent(); Logger.error(error_1); return [3 /*break*/, 4]; case 3: setLoading(false); return [7 /*endfinally*/]; case 4: return [2 /*return*/]; } }); }); }; fetchFields(); } }, [list, fields]); var handleFieldTypes = function () { if (loading) { if (list === '' || list === undefined || list === null) { return (React.createElement(Grid, { display: "flex", width: "100%", justifyContent: "center", p: 1 }, React.createElement(Typography, { color: "primary", variant: "h5", fontWeight: "bold", component: "span" }, "Select a list to continue"))); } else { return (React.createElement(Grid, { display: "flex", width: "100%", justifyContent: "center" }, React.createElement(CircularProgress, null))); } } else { return filteredFields.map(function (field, index) { var _a, _b; var commonProps = { key: "grid-".concat(field.Id, "-").concat(index), size: responsive ? responsive[field.TypeAsString].size : { xs: 12 }, }; switch (field.TypeAsString) { case 'Text': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(TextField, { label: field.Title, name: field.InternalName, required: field.Required, variant: inputVariant, size: inputSize, fullWidth: true, disabled: field.ReadOnlyField, onChange: function (event) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = event.target.value, _a))); } }))); case 'User': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(PeoplePicker, { context: context, label: field.Title, name: field.InternalName, required: field.Required, multiple: false, variant: inputVariant, size: inputSize, fullWidth: true, disabled: field.ReadOnlyField, onChange: function (value) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = value, _a))); } }))); case 'UserMulti': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(PeoplePicker, { context: context, label: field.Title, name: field.InternalName, required: field.Required, multiple: true, variant: inputVariant, size: inputSize, fullWidth: true, disabled: field.ReadOnlyField, onChange: function (value) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = value, _a))); } }))); case 'Choice': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(TextField, { label: field.Title, name: field.InternalName, required: field.Required, variant: inputVariant, size: inputSize, disabled: field.ReadOnlyField, select: true, fullWidth: true, onChange: function (event) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = event.target.value, _a))); } }, (_a = field.Choices) === null || _a === void 0 ? void 0 : _a.map(function (choice, index) { return (React.createElement(MenuItem, { key: "".concat(choice, "-").concat(index), value: choice }, choice)); })))); case 'MultiChoice': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(TextField, { label: field.Title, name: field.InternalName, required: field.Required, variant: inputVariant, size: inputSize, defaultValue: [], select: true, fullWidth: true, disabled: field.ReadOnlyField, onChange: function (event) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = event.target.value, _a))); }, slotProps: { select: { multiple: true, }, input: { readOnly: field.ReadOnlyField, }, } }, (_b = field.Choices) === null || _b === void 0 ? void 0 : _b.map(function (choice, index) { return (React.createElement(MenuItem, { key: "".concat(choice, "-").concat(index), value: choice }, choice)); })))); case 'DateTime': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(DateTimePicker, { label: field.Title, name: field.InternalName, disabled: field.ReadOnlyField, onChange: function (value) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = dayjs(value).toISOString(), _a))); }, slotProps: { textField: { fullWidth: true, variant: inputVariant, required: field.Required, size: inputSize, }, } }))); case 'Boolean': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(FormControlLabel, { required: field.Required, name: field.InternalName, disabled: field.ReadOnlyField, onChange: function (event, checked) { var _a; return setFormData(__assign(__assign({}, formData), (_a = {}, _a[field.InternalName] = checked, _a))); }, control: React.createElement(Checkbox, { size: inputSize }), label: field.Title }))); case 'Lookup': return (React.createElement(Grid, __assign({}, commonProps), React.createElement("p", null, field.LookupList))); case 'Counter': return (React.createElement(Grid, __assign({}, commonProps), React.createElement(Card, { sx: { backgroundColor: 'primary.main', color: 'common.white', } }, React.createElement(CardHeader, { title: "Counter Type, Title - ".concat(field.Title), slotProps: { typography: { variant: 'h6' } } })))); default: return (React.createElement(Grid, __assign({}, commonProps), React.createElement(Card, { sx: { backgroundColor: 'error.main', color: 'common.white', } }, React.createElement(CardHeader, { title: "Yet to be implemented!" })))); } }); } }; var handleSave = function () { if (onSave) { onSave(formData); } }; var handleClose = function () { if (onCancel) { onCancel(); } }; var calculatedPaperElevation = isNaN(Number(paperElevation)) ? 2 : paperElevation; return (React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs }, React.createElement(Card, { ref: ref, "data-testid": "mui-spfx-listform", variant: paperVariant !== null && paperVariant !== void 0 ? paperVariant : 'outlined', elevation: paperVariant === 'elevation' ? calculatedPaperElevation : 0, sx: { p: 2 } }, label ? React.createElement(CardHeader, { title: label }) : null, React.createElement(CardContent, null, React.createElement(Grid, { container: true, spacing: isNaN(Number(fieldSpacing)) ? 2 : Number(fieldSpacing) }, handleFieldTypes())), React.createElement(CardActions, null, React.createElement(ButtonGroup, null, React.createElement(Button, { startIcon: React.createElement(Save, null), color: "success", onClick: handleSave }, "Save"), React.createElement(Button, { startIcon: React.createElement(Close, null), type: "reset", color: "error", onClick: handleClose }, "Cancel")))))); }); export default ListForm; //# sourceMappingURL=ListForm.js.map