mui-rff
Version:
Set of modern wrapper components to facilitate using Material UI with React Final Form
518 lines (517 loc) • 13.5 kB
JavaScript
import e from "@mui/material/Autocomplete";
import t from "@mui/material/TextField";
import { Field as n, FormSpy as r, useField as i } from "react-final-form";
import { Checkbox as a, FormControl as o, FormControlLabel as s, FormGroup as c, FormHelperText as l, FormLabel as u, InputLabel as d, MenuItem as f, Radio as p, RadioGroup as m, Select as h, Switch as g, TextField as _ } from "@mui/material";
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
import { DatePicker as x, DateTimePicker as S, TimePicker as C } from "@mui/x-date-pickers";
//#region src/Util.tsx
function w({ showError: e, meta: t, formHelperTextProps: n, helperText: r }) {
return e ? /* @__PURE__ */ y(l, {
...n,
children: t.error || t.submitError
}) : r ? /* @__PURE__ */ y(l, {
...n,
children: r
}) : null;
}
var T = { subscription: {
error: !0,
submitError: !0,
dirtySinceLastSubmit: !0,
touched: !0,
modified: !0
} }, E = (e) => i(e, T), D = ({ meta: { submitError: e, dirtySinceLastSubmit: t, error: n, touched: r, modified: i } }) => !!((e && !t || n) && (r || i)), O = ({ meta: { submitError: e, dirtySinceLastSubmit: t, error: n, touched: r } }) => !!((e && !t || n) && r);
//#endregion
//#region src/Autocomplete.tsx
function k({ name: e, fieldProps: t, showError: r = D, ...i }) {
return /* @__PURE__ */ y(n, {
name: e,
render: (e) => /* @__PURE__ */ y(A, {
fieldRenderProps: e,
showError: r,
...i
}),
...t
});
}
function A(n) {
let { fieldRenderProps: { input: { name: r, value: i, onChange: a, onFocus: o, onBlur: s }, meta: c }, options: l, label: u, required: d, multiple: f, textFieldProps: p, getOptionValue: m, showError: h, onChange: g, ..._ } = n;
function x(e) {
return m ? f ? e ? e.map(m) : null : e ? m(e) : null : e;
}
let { helperText: S, ...C } = _, { variant: w, onFocus: T, onBlur: E, slotProps: D, ...O } = p || {}, k;
if (!m) k = i;
else if (i) for (let e of l) {
let t = m(e);
if (f) {
k ||= [];
for (let n of i) n === t && k.push(e);
} else i === t && (k = e);
}
let A = (e, t, n, r) => {
a(x(t)), g && g(e, t, n, r);
}, { error: j, submitError: M } = c, N = h({ meta: c }), P = typeof D?.input == "object" ? D.input : void 0;
return /* @__PURE__ */ y(e, {
multiple: f,
onChange: A,
options: l,
renderInput: (e) => {
let { InputLabelProps: n, InputProps: i, inputProps: a, ...c } = e;
return /* @__PURE__ */ y(t, {
error: N,
helperText: N ? j || M : S,
label: u,
name: r,
onBlur: (e) => {
E?.(e), s(e);
},
onFocus: (e) => {
T?.(e), o(e);
},
required: d,
variant: w,
...c,
...O,
fullWidth: !0,
slotProps: {
...D,
htmlInput: {
...a,
...D?.htmlInput
},
input: {
...i,
...P,
...P?.startAdornment && { startAdornment: /* @__PURE__ */ b(v, { children: [P.startAdornment, i?.startAdornment] }) },
...P?.endAdornment && { endAdornment: /* @__PURE__ */ b(v, { children: [i?.endAdornment, P.endAdornment] }) }
},
inputLabel: {
...n,
...D?.inputLabel
}
}
});
},
value: k || (f ? [] : null),
...C
});
}
//#endregion
//#region src/Checkboxes.tsx
function j(e) {
let { required: t, label: r, data: i, name: l, helperText: d, fieldProps: f, formControlProps: p, formGroupProps: m, formLabelProps: h, formControlLabelProps: g, formHelperTextProps: _, showError: v = D, ...x } = e, S = Array.isArray(i) ? i : [i], C = !Array.isArray(i), T = E(l), O = v(T);
return /* @__PURE__ */ b(o, {
error: O,
required: t,
...p,
children: [
r ? /* @__PURE__ */ y(u, {
...h,
children: r
}) : null,
/* @__PURE__ */ y(c, {
...m,
children: S.map((e) => /* @__PURE__ */ y(s, {
control: /* @__PURE__ */ y(n, {
name: l,
render: ({ input: { name: n, value: r, onChange: i, checked: o, onBlur: s, onFocus: c, ...l } }) => /* @__PURE__ */ y(a, {
checked: o,
disabled: e.disabled,
indeterminate: e.indeterminate,
name: n,
onChange: i,
slotProps: { input: {
required: t,
onBlur: s,
onFocus: c,
...l
} },
value: r,
...x
}),
type: "checkbox",
...f
}),
disabled: e.disabled,
label: e.label,
name: l,
value: C ? void 0 : e.value,
...g
}, `${l}${e.label}`))
}),
/* @__PURE__ */ y(w, {
formHelperTextProps: _,
helperText: d,
meta: T.meta,
showError: O
})
]
});
}
//#endregion
//#region src/DatePicker.tsx
function M(e) {
let { name: t, fieldProps: r, ...i } = e;
return /* @__PURE__ */ y(n, {
name: t,
render: (e) => /* @__PURE__ */ y(N, {
...e,
...i
}),
...r
});
}
function N(e) {
let { input: { name: t, onChange: n, value: r, ...i }, meta: a, showError: o = D, ...s } = e, { error: c, submitError: l } = a, u = o({ meta: a }), { helperText: d, textFieldProps: f, slotProps: p, required: m, ...h } = s;
return /* @__PURE__ */ y(x, {
onChange: n,
value: r === "" ? null : r,
...h,
slotProps: {
...p,
textField: {
...f,
helperText: u ? c || l : d,
inputProps: {
onBlur: (e) => {
i.onBlur(e);
},
onFocus: (e) => {
i.onFocus(e);
}
},
error: u,
fullWidth: !0,
name: t,
onChange: n,
value: r === "" ? null : r,
required: m
}
}
});
}
//#endregion
//#region src/DateTimePicker.tsx
function P(e) {
let { name: t, fieldProps: r, ...i } = e;
return /* @__PURE__ */ y(n, {
name: t,
render: (e) => /* @__PURE__ */ y(F, {
...e,
...i
}),
...r
});
}
function F(e) {
let { input: { name: t, onChange: n, value: r, ...i }, meta: a, showError: o = D, ...s } = e, { error: c, submitError: l } = a, u = o({ meta: a }), { helperText: d, textFieldProps: f, slotProps: p, required: m, ...h } = s;
return /* @__PURE__ */ y(S, {
onChange: n,
value: r === "" ? null : r,
...h,
slotProps: {
...p,
textField: {
...f,
helperText: u ? c || l : d,
inputProps: {
onBlur: (e) => {
i.onBlur(e);
},
onFocus: (e) => {
i.onFocus(e);
}
},
error: u,
fullWidth: !0,
name: t,
onChange: n,
value: r === "" ? null : r,
required: m
}
}
});
}
//#endregion
//#region src/Debug.tsx
function I() {
return /* @__PURE__ */ y(r, {
subscription: { values: !0 },
children: ({ values: e }) => /* @__PURE__ */ y("pre", { children: JSON.stringify(e, void 0, 2) })
});
}
//#endregion
//#region src/Radios.tsx
function L(e) {
let { name: t, data: r, label: i, required: a, helperText: c, formLabelProps: l, formControlLabelProps: d, fieldProps: f, formControlProps: h, radioGroupProps: g, formHelperTextProps: _, showError: v = D, ...x } = e, S = E(t), C = v(S);
return /* @__PURE__ */ b(o, {
error: C,
required: a,
...h,
children: [
!!i && /* @__PURE__ */ y(u, {
...l,
children: i
}),
/* @__PURE__ */ y(m, {
...g,
children: r.map((e) => /* @__PURE__ */ y(s, {
control: /* @__PURE__ */ y(n, {
name: t,
render: ({ input: { name: t, value: n, onChange: r, checked: i, onBlur: o, onFocus: s, ...c } }) => /* @__PURE__ */ y(p, {
checked: i,
disabled: e.disabled,
name: t,
onChange: r,
required: a,
slotProps: { input: {
required: a,
onBlur: o,
onFocus: s,
...c
} },
value: n,
...x
}),
type: "radio",
...f
}),
disabled: e.disabled,
label: e.label,
name: t,
value: e.value,
...d
}, `${t}${e.label}`))
}),
/* @__PURE__ */ y(w, {
formHelperTextProps: _,
helperText: c,
meta: S.meta,
showError: C
})
]
});
}
//#endregion
//#region src/Select.tsx
function R(e) {
let { name: t, label: r, data: i, children: a, required: s, multiple: c, helperText: l, fieldProps: u, inputLabelProps: p, formControlProps: m, formHelperTextProps: g, menuItemProps: _, showError: v = D, ...x } = e;
if (!(i || a)) throw Error("Please specify either children or data as an attribute.");
let { variant: S } = x, C = E(t), T = v(C);
return /* @__PURE__ */ y(n, {
name: t,
render: ({ input: { name: e, value: n, onChange: u, ...v } }) => {
let E = c && !n ? [] : n, D = `select-input-${t}`;
return /* @__PURE__ */ b(o, {
error: T,
fullWidth: !0,
required: s,
variant: S,
...m,
children: [
!!r && /* @__PURE__ */ y(d, {
id: D,
...p,
children: r
}),
/* @__PURE__ */ y(h, {
inputProps: {
required: s,
...v
},
label: r,
labelId: D,
multiple: c,
name: e,
onChange: u,
value: E,
...x,
children: i ? i.map((e) => /* @__PURE__ */ y(f, {
disabled: e.disabled,
value: e.value,
..._,
children: e.label
}, `${e.value}${e.label}`)) : a
}),
/* @__PURE__ */ y(w, {
formHelperTextProps: g,
helperText: l,
meta: C.meta,
showError: T
})
]
});
},
...u
});
}
//#endregion
//#region src/Switches.tsx
function z(e) {
let { name: t, data: r, label: i, required: a, helperText: l, fieldProps: d, formControlProps: f, formGroupProps: p, formLabelProps: m, formControlLabelProps: h, formHelperTextProps: _, showError: v = D, ...x } = e, S = Array.isArray(r) ? r : [r], C = !Array.isArray(r), T = E(t), O = v(T);
return /* @__PURE__ */ b(o, {
error: O,
required: a,
...f,
children: [
i ? /* @__PURE__ */ y(u, {
...m,
children: i
}) : null,
/* @__PURE__ */ y(c, {
...p,
children: S.map((e) => /* @__PURE__ */ y(s, {
control: /* @__PURE__ */ y(n, {
name: t,
render: ({ input: { name: t, value: n, onChange: r, checked: i, ...o } }) => /* @__PURE__ */ y(g, {
checked: i,
disabled: e.disabled,
name: t,
onChange: r,
required: a,
slotProps: { input: {
required: a,
...o
} },
value: n,
...x
}),
type: "checkbox",
...d
}),
disabled: e.disabled,
label: e.label,
name: t,
value: C ? void 0 : e.value,
...h
}, `${t}${e.label}`))
}),
/* @__PURE__ */ y(w, {
formHelperTextProps: _,
helperText: l,
meta: T.meta,
showError: O
})
]
});
}
//#endregion
//#region src/TextField.tsx
function B({ name: e, type: t, fieldProps: r, showError: i = D, fullWidth: a = !0, ...o }) {
return /* @__PURE__ */ y(n, {
name: e,
type: t,
...r,
render: (t) => /* @__PURE__ */ y(V, {
fieldRenderProps: t,
fullWidth: a,
name: e,
showError: i,
...o
})
});
}
function V({ fieldRenderProps: { input: { value: e, type: t, onChange: n, onBlur: r, onFocus: i, ...a }, meta: o }, helperText: s, showError: c, slotProps: l, ...u }) {
let { error: d, submitError: f } = o, p = c({ meta: o });
return /* @__PURE__ */ y(_, {
error: p,
helperText: p ? d || f : s,
onBlur: r,
onChange: n,
onFocus: i,
slotProps: {
...l,
htmlInput: {
...a,
...l?.htmlInput
}
},
type: t,
value: e,
...u
});
}
//#endregion
//#region src/TimePicker.tsx
function H(e) {
let { name: t, fieldProps: r, ...i } = e;
return /* @__PURE__ */ y(n, {
name: t,
render: (e) => /* @__PURE__ */ y(U, {
...e,
...i
}),
...r
});
}
function U(e) {
let { input: { name: t, onChange: n, value: r, ...i }, meta: a, showError: o = D, ...s } = e, { error: c, submitError: l } = a, u = o({ meta: a }), { helperText: d, textFieldProps: f, required: p, ...m } = s;
return /* @__PURE__ */ y(C, {
onChange: n,
value: r === "" ? null : r,
...m,
slotProps: { textField: {
...f,
helperText: u ? c || l : d,
inputProps: {
onBlur: (e) => {
i.onBlur(e);
},
onFocus: (e) => {
i.onFocus(e);
}
},
error: u,
fullWidth: !0,
name: t,
onChange: n,
value: r === "" ? null : r,
required: p
} }
});
}
//#endregion
//#region src/Validation.ts
var W = /[,[\].]+?/;
function G(e, t, n) {
let r = String.prototype.split.call(t, W).filter(Boolean).reduce((e, t) => e == null ? e : e[t], e);
return r === void 0 || r === e ? n : r;
}
function K(e, t, n) {
return new Object(e) === e ? (Array.isArray(t) || (t = t.toString().match(/[^.[\]]+/g) || []), t.slice(0, -1).reduce((e, n, r) => new Object(e[n]) === e[n] ? e[n] : e[n] = Math.abs(t[r + 1]) >> 0 == +t[r + 1] ? [] : {}, e)[t.at(-1)] = n, e) : e;
}
function q(e, t) {
return e.inner.reduce((e, n) => {
let { path: r, message: i } = n, a = t === void 0 ? i : t(n);
if (r && G(e, r)) {
let t = G(e, r);
t.push(a), K(e, r, t);
} else K(e, r, [a]);
return e;
}, {});
}
function J(e, t) {
return async (n) => {
try {
return await e.validate(n, { abortEarly: !1 }), {};
} catch (e) {
return q(e, t);
}
};
}
function Y(e, t) {
return (n) => {
try {
return e.validateSync(n, { abortEarly: !1 }), {};
} catch (e) {
return q(e, t);
}
};
}
function X(e) {
let t = e.fields;
return Object.keys(t).reduce((e, n) => (t[n].fields ? e[n] = X(t[n]) : e[n] = !t[n].spec.optional, e), {});
}
//#endregion
export { k as Autocomplete, j as Checkboxes, M as DatePicker, P as DateTimePicker, I as Debug, w as ErrorMessage, L as Radios, R as Select, z as Switches, B as TextField, H as TimePicker, X as makeRequired, J as makeValidate, Y as makeValidateSync, O as showErrorOnBlur, D as showErrorOnChange, E as useFieldForErrors };
//# sourceMappingURL=mui-rff.esm.js.map