mui-extended
Version:
Extended UI Components built on Material UI
67 lines (66 loc) • 2.6 kB
JavaScript
import { __assign } from "tslib";
import { jsx as _jsx } from "react/jsx-runtime";
import { isEqual, isEqualWith } from "lodash";
import { forwardRef, memo, useMemo } from "react";
import { debugPropChanges, debugRender } from "./debug";
import { useFormContext } from "./FormContext";
export var withResetButton = function (Button) {
var ButtonWrapper = function (props) {
debugRender("resetButton");
return _jsx(Button, __assign({}, props));
};
var PureButton = memo(ButtonWrapper, function (prevProps, nextProps) {
debugPropChanges(prevProps, nextProps);
return isEqual(prevProps, nextProps);
});
var DecoratedButton = forwardRef(function ResetButton(props, ref) {
var formContext = useFormContext();
if (!formContext) {
throw new Error("ResetButton is rendered with out Form");
}
var onClick = useMemo(function () {
return function (event) {
formContext.reset();
if (props.onClick) {
props.onClick(event);
}
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return _jsx(PureButton, __assign({}, props, { onClick: onClick, ref: ref }));
});
return DecoratedButton;
};
export var withSubmitButton = function (Button) {
var ButtonWrapper = function (props) {
debugRender("submitButton");
return _jsx(Button, __assign({}, props));
};
var PureButton = memo(ButtonWrapper, function (prevProps, nextProps) {
debugPropChanges(prevProps, nextProps);
return isEqualWith(prevProps, nextProps, function (value, other, propName) {
if (propName == "onClick") {
return true;
}
});
});
var DecoratedButton = forwardRef(function SubmitButton(props, ref) {
var formContext = useFormContext();
if (!formContext) {
throw new Error("SubmitButton is rendered with out Form");
}
var onClick = useMemo(function () {
return function (event) {
formContext.submit();
if (props.onClick) {
props.onClick(event);
}
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (_jsx(PureButton, __assign({}, props, { onClick: onClick, disabled: !formContext.isDirty ||
!formContext.isValid ||
formContext.isSubmitting, ref: ref })));
});
return DecoratedButton;
};