mui-rhf-integration
Version:
React Hook Form integration for MUI with strict TypeScript handling based on form context.
171 lines (170 loc) • 4.41 kB
JavaScript
import { Autocomplete as e, Box as t, Checkbox as n, FormControl as r, FormControlLabel as i, FormGroup as a, FormHelperText as o, FormLabel as s, Radio as c, RadioGroup as l, Switch as u, TextField as d } from "@mui/material";
import { useController as f } from "react-hook-form";
import { jsx as p, jsxs as m } from "react/jsx-runtime";
//#region src/RhfAutocomplete.tsx
var h = ({ control: t, name: n, rules: r, slotProps: i, multiple: a, valueToOption: o, optionToValue: s, loading: c, ...l }) => {
let { field: u, fieldState: m } = f({
control: t,
name: n,
rules: r
}), h = u.value;
return h === void 0 ? h = null : h && o && (c ? h = a ? [] : null : a ? (Array.isArray(h) || (console.warn("Received a non-array value for a multiple Autocomplete"), h = []), h = h.map(o).filter((e) => e != null)) : a || (h = o(h))), /* @__PURE__ */ p(e, {
onChange: (e, t) => {
if (!(s && t)) {
u.onChange(t);
return;
}
if (!a) {
u.onChange(s(t));
return;
}
if (Array.isArray(t)) {
u.onChange(t.map(s));
return;
}
/* c8 ignore next */
console.warn("Autocomplete is set to multiple but value is an not array");
},
value: h,
multiple: a,
loading: c,
renderInput: (e) => /* @__PURE__ */ p(d, {
...i?.textField,
...e,
error: !!m.error,
onBlur: u.onBlur,
helperText: m.error?.message ?? i?.textField?.helperText,
inputRef: u.ref
}),
...l
});
}, g = ({ control: e, name: t, ...r }) => {
let { field: i } = f({
control: e,
name: t
});
return /* @__PURE__ */ p(n, {
checked: i.value ?? !1,
onChange: (e, t) => {
i.onChange(t);
},
onBlur: i.onBlur,
ref: i.ref,
...r
});
}, _ = ({ control: e, name: t, rules: c, label: l, options: u, helperText: d, slotProps: h, ...g }) => {
let { field: _, fieldState: v } = f({
control: e,
name: t,
rules: c
}), y = _.value ?? [], b = (e, t) => {
if (!t) {
_.onChange(y.filter((t) => t !== e));
return;
}
_.onChange([...y, e]);
};
return /* @__PURE__ */ m(r, {
error: v.invalid,
component: "fieldset",
variant: "standard",
ref: _.ref,
...g,
children: [
/* @__PURE__ */ p(s, {
component: "legend",
...h?.formLabel,
children: l
}),
/* @__PURE__ */ p(a, {
...h?.formGroup,
children: u.map((e) => /* @__PURE__ */ p(i, {
name: e.value,
checked: y.includes(e.value),
onChange: (t, n) => {
b(e.value, n);
},
control: /* @__PURE__ */ p(n, {}),
label: e.label
}, e.value))
}),
(d || v.error) && /* @__PURE__ */ p(o, { children: v.error?.message ?? d })
]
});
}, v = ({ control: e, name: t, rules: n, label: a, options: u, helperText: d, slotProps: h, ...g }) => {
let { field: _, fieldState: v } = f({
control: e,
name: t,
rules: n
}), y = _.value ?? null;
return /* @__PURE__ */ m(r, {
error: !!v.error,
variant: "standard",
ref: _.ref,
...g,
children: [
/* @__PURE__ */ p(s, {
...h?.formLabel,
children: a
}),
/* @__PURE__ */ p(l, {
...h?.radioGroup,
name: t,
onChange: (e, t) => {
_.onChange(t);
},
onBlur: _.onBlur,
value: y,
children: u.map((e) => /* @__PURE__ */ p(i, {
value: e.value,
control: /* @__PURE__ */ p(c, {}),
label: e.label
}, e.value))
}),
(d || v.error) && /* @__PURE__ */ p(o, { children: v.error?.message ?? d })
]
});
}, y = ({ control: e, name: t, ...n }) => {
let { field: r } = f({
control: e,
name: t
});
return /* @__PURE__ */ p(u, {
checked: r.value ?? !1,
onChange: (e, t) => {
r.onChange(t);
},
onBlur: r.onBlur,
ref: r.ref,
...n
});
}, b = ({ control: e, name: n, rules: r, maxCharacters: i, ...a }) => {
let { field: o, fieldState: s } = f({
control: e,
name: n,
rules: r
}), c = o.value ?? "", l = s.error?.message ?? a.helperText;
return i !== void 0 && (l = /* @__PURE__ */ m(t, {
component: "span",
sx: {
display: "flex",
justifyContent: "space-between"
},
children: [/* @__PURE__ */ p("span", { children: l }), /* @__PURE__ */ m("span", { children: [
c.length,
"/",
i
] })]
})), /* @__PURE__ */ p(d, {
...a,
name: n,
error: !!s.error,
onChange: o.onChange,
onBlur: o.onBlur,
value: c,
inputRef: o.ref,
helperText: l
});
};
//#endregion
export { h as RhfAutocomplete, g as RhfCheckbox, _ as RhfCheckboxGroup, v as RhfRadioGroup, y as RhfSwitch, b as RhfTextField };