@bluemarble/bm-components 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3155,7 +3155,7 @@ var Grid_default = Grid;
3155
3155
  // src/components/Grid/EditableTableCell/DefaultInput.tsx
3156
3156
 
3157
3157
 
3158
- var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment);
3158
+ var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_dayjs);
3159
3159
  var DefaultInput = (allProps) => {
3160
3160
  const {
3161
3161
  TextFieldProps: TextFieldProps3,
@@ -3174,9 +3174,9 @@ var DefaultInput = (allProps) => {
3174
3174
  if (formatInputDefautvalue) return formatInputDefautvalue(value);
3175
3175
  switch (type) {
3176
3176
  case "date":
3177
- return _moment2.default.call(void 0, value).format("YYYY-MM-DD");
3177
+ return _dayjs2.default.call(void 0, value).format("YYYY-MM-DD");
3178
3178
  case "datetime-local":
3179
- return _moment2.default.call(void 0, value).format("YYYY-MM-DDTHH:mm:ss");
3179
+ return _dayjs2.default.call(void 0, value).format("YYYY-MM-DDTHH:mm:ss");
3180
3180
  default:
3181
3181
  return String(value);
3182
3182
  }
@@ -3246,9 +3246,7 @@ var InputMask = (allProps) => {
3246
3246
  handleCancelEditing,
3247
3247
  setIsEditing
3248
3248
  } = allProps;
3249
- const { ref, unmaskedValue, setValue } = _reactimask.useIMask.call(void 0,
3250
- mask
3251
- );
3249
+ const { ref, unmaskedValue, setValue } = _reactimask.useIMask.call(void 0, mask);
3252
3250
  const handleSave = (event) => {
3253
3251
  setIsEditing(false);
3254
3252
  setValue(String(_optionalChain([event, 'access', _34 => _34.target, 'optionalAccess', _35 => _35.value])));
@@ -3484,8 +3482,8 @@ function FormikInputMask({
3484
3482
 
3485
3483
 
3486
3484
  var CustomInputLabel = _material.InputLabel;
3487
- function Select({ withFormik = true, ...rest }) {
3488
- if (withFormik) return /* @__PURE__ */ React2.default.createElement(FormikSelect, { ...rest });
3485
+ function Select({ withFormik = true, helperText, ...rest }) {
3486
+ if (withFormik) return /* @__PURE__ */ React2.default.createElement(FormikSelect, { helperText, ...rest });
3489
3487
  else return /* @__PURE__ */ React2.default.createElement(BaseSelect, { ...rest });
3490
3488
  }
3491
3489
  function BaseSelect({
@@ -3706,6 +3704,8 @@ function FormikAutocomplete({
3706
3704
 
3707
3705
 
3708
3706
 
3707
+
3708
+
3709
3709
  var Checkbox = ({
3710
3710
  withFormik = true,
3711
3711
  name,
@@ -3716,40 +3716,40 @@ var Checkbox = ({
3716
3716
  };
3717
3717
  var BaseCheckbox = ({
3718
3718
  label,
3719
+ helperText,
3719
3720
  FormControlLabelProps: FormControlLabelProps3,
3720
3721
  ...props
3721
3722
  }) => {
3722
- return /* @__PURE__ */ React2.default.createElement(
3723
+ return /* @__PURE__ */ React2.default.createElement(_material.FormControl, null, /* @__PURE__ */ React2.default.createElement(
3723
3724
  _material.FormControlLabel,
3724
3725
  {
3725
3726
  label,
3726
3727
  control: /* @__PURE__ */ React2.default.createElement(_material.Checkbox, { ...props }),
3727
3728
  ...FormControlLabelProps3
3728
3729
  }
3729
- );
3730
+ ), helperText && /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, helperText));
3730
3731
  };
3731
3732
  var FormikCheckbox = ({
3732
3733
  label,
3733
3734
  name,
3735
+ helperText,
3734
3736
  FormControlLabelProps: FormControlLabelProps3,
3735
3737
  ...props
3736
3738
  }) => {
3737
- const [{ value, ...field }, , { setValue }] = _formik.useField.call(void 0, {
3738
- name
3739
- });
3739
+ const [{ value, ...field }, { error }, { setValue }] = _formik.useField.call(void 0, { name });
3740
3740
  const onChange = (_, value2) => {
3741
3741
  setValue(value2);
3742
3742
  };
3743
- return /* @__PURE__ */ React2.default.createElement(
3743
+ return /* @__PURE__ */ React2.default.createElement(_material.FormControl, { error: Boolean(error) }, /* @__PURE__ */ React2.default.createElement(
3744
3744
  _material.FormControlLabel,
3745
3745
  {
3746
3746
  label,
3747
- control: /* @__PURE__ */ React2.default.createElement(_material.Checkbox, { ...props, defaultChecked: Boolean(value) }),
3747
+ control: /* @__PURE__ */ React2.default.createElement(_material.Checkbox, { ...props, checked: Boolean(value) }),
3748
3748
  ...field,
3749
3749
  onChange,
3750
3750
  ...FormControlLabelProps3
3751
3751
  }
3752
- );
3752
+ ), (error || helperText) && /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, _nullishCoalesce(error, () => ( helperText))));
3753
3753
  };
3754
3754
 
3755
3755
  // src/components/Switch/index.tsx
@@ -3759,46 +3759,48 @@ var FormikCheckbox = ({
3759
3759
 
3760
3760
 
3761
3761
 
3762
+
3763
+
3762
3764
  var Switch = ({ withFormik = true, name, ...props }) => {
3763
3765
  if (withFormik && name) return /* @__PURE__ */ React2.default.createElement(FormikSwitch, { name, ...props });
3764
3766
  else return /* @__PURE__ */ React2.default.createElement(BaseSwitch, { ...props });
3765
3767
  };
3766
3768
  var BaseSwitch = ({
3767
3769
  label,
3770
+ helperText,
3768
3771
  FormControlLabelProps: FormControlLabelProps3,
3769
3772
  ...props
3770
3773
  }) => {
3771
- return /* @__PURE__ */ React2.default.createElement(
3774
+ return /* @__PURE__ */ React2.default.createElement(_material.FormControl, null, /* @__PURE__ */ React2.default.createElement(
3772
3775
  _material.FormControlLabel,
3773
3776
  {
3774
3777
  label,
3775
3778
  control: /* @__PURE__ */ React2.default.createElement(_material.Switch, { ...props }),
3776
3779
  ...FormControlLabelProps3
3777
3780
  }
3778
- );
3781
+ ), helperText && /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, helperText));
3779
3782
  };
3780
3783
  var FormikSwitch = ({
3781
3784
  label,
3782
3785
  name,
3786
+ helperText,
3783
3787
  FormControlLabelProps: FormControlLabelProps3,
3784
3788
  ...props
3785
3789
  }) => {
3786
- const [{ value, onChange: unused, ...field }, , { setValue }] = _formik.useField.call(void 0, {
3787
- name
3788
- });
3790
+ const [{ value, onChange: unused, ...field }, { error }, { setValue }] = _formik.useField.call(void 0, { name });
3789
3791
  const onChange = (_, value2) => {
3790
3792
  setValue(value2);
3791
3793
  };
3792
- return /* @__PURE__ */ React2.default.createElement(
3794
+ return /* @__PURE__ */ React2.default.createElement(_material.FormControl, { error: Boolean(error) }, /* @__PURE__ */ React2.default.createElement(
3793
3795
  _material.FormControlLabel,
3794
3796
  {
3795
3797
  label,
3796
3798
  onChange,
3797
- control: /* @__PURE__ */ React2.default.createElement(_material.Switch, { defaultChecked: value, ...props }),
3799
+ control: /* @__PURE__ */ React2.default.createElement(_material.Switch, { checked: value, ...props }),
3798
3800
  ...field,
3799
3801
  ...FormControlLabelProps3
3800
3802
  }
3801
- );
3803
+ ), (error || helperText) && /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, _nullishCoalesce(error, () => ( helperText))));
3802
3804
  };
3803
3805
 
3804
3806
  // src/components/Radio/index.tsx
@@ -3811,6 +3813,7 @@ var FormikSwitch = ({
3811
3813
 
3812
3814
 
3813
3815
 
3816
+
3814
3817
  var Radio = ({
3815
3818
  name,
3816
3819
  withFormik = true,
@@ -3822,6 +3825,7 @@ var Radio = ({
3822
3825
  var BaseRadio = ({
3823
3826
  label,
3824
3827
  options,
3828
+ helperText,
3825
3829
  ...rest
3826
3830
  }) => {
3827
3831
  return /* @__PURE__ */ React2.default.createElement(_material.FormControl, null, label && /* @__PURE__ */ React2.default.createElement(_material.FormLabel, null, label), /* @__PURE__ */ React2.default.createElement(_material.RadioGroup, { ...rest }, options.map((option) => /* @__PURE__ */ React2.default.createElement(
@@ -3832,22 +3836,21 @@ var BaseRadio = ({
3832
3836
  label: option.label,
3833
3837
  control: /* @__PURE__ */ React2.default.createElement(_material.Radio, null)
3834
3838
  }
3835
- ))));
3839
+ ))), helperText && /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, helperText));
3836
3840
  };
3837
3841
  var FormikRadio = ({
3838
3842
  label,
3839
3843
  name,
3840
3844
  options,
3845
+ helperText,
3841
3846
  ...rest
3842
3847
  }) => {
3843
- const onChange = (setFieldValue, value) => {
3844
- setFieldValue(name, value);
3845
- };
3846
- return /* @__PURE__ */ React2.default.createElement(_formik.Field, null, ({ field: { value }, form: { setFieldValue } }) => /* @__PURE__ */ React2.default.createElement(_material.FormControl, null, label && /* @__PURE__ */ React2.default.createElement(_material.FormLabel, null, label), /* @__PURE__ */ React2.default.createElement(
3848
+ const [{ value }, meta, { setValue }] = _formik.useField.call(void 0, name);
3849
+ return /* @__PURE__ */ React2.default.createElement(_material.FormControl, { error: Boolean(meta.error) }, label && /* @__PURE__ */ React2.default.createElement(_material.FormLabel, null, label), /* @__PURE__ */ React2.default.createElement(
3847
3850
  _material.RadioGroup,
3848
3851
  {
3849
- defaultValue: value,
3850
- onChange: (_, value2) => onChange(setFieldValue, value2),
3852
+ value: _nullishCoalesce(value, () => ( "")),
3853
+ onChange: (_, val) => setValue(val),
3851
3854
  ...rest
3852
3855
  },
3853
3856
  options.map((option) => /* @__PURE__ */ React2.default.createElement(
@@ -3859,7 +3862,7 @@ var FormikRadio = ({
3859
3862
  control: /* @__PURE__ */ React2.default.createElement(_material.Radio, null)
3860
3863
  }
3861
3864
  ))
3862
- )));
3865
+ ), /* @__PURE__ */ React2.default.createElement(_material.FormHelperText, null, helperText || meta.error));
3863
3866
  };
3864
3867
 
3865
3868
  // src/components/LargeButton/index.tsx
@@ -4153,6 +4156,11 @@ function BaseGridAutoRows({
4153
4156
 
4154
4157
 
4155
4158
  var Modal = ({ open, onClose, BoxProps: BoxProps3, ...rest }) => {
4159
+ if (process.env.NODE_ENV !== "production") {
4160
+ console.warn(
4161
+ "[Modal] is deprecated. Use `BaseDialog` instead. `Modal` will be removed in a future release."
4162
+ );
4163
+ }
4156
4164
  return /* @__PURE__ */ React2.default.createElement(_material.Modal, { open, onClose, ...rest }, /* @__PURE__ */ React2.default.createElement(
4157
4165
  _material.Box,
4158
4166
  {
@@ -4547,6 +4555,7 @@ var _ApiHelper = class _ApiHelper {
4547
4555
  return async (req, res) => {
4548
4556
  const methods = factory(req, res);
4549
4557
  const handler = methods[req.method];
4558
+ if (!handler) throw new HttpError(405, "M\xE9todo inv\xE1lido");
4550
4559
  const methodWithMiddlewares = this.middlewares.reduce((acc, fn) => {
4551
4560
  return fn(acc, options);
4552
4561
  }, handler);
@@ -4582,191 +4591,8 @@ var _ApiHelper = class _ApiHelper {
4582
4591
  _ApiHelper.parserErrorWrapper = _ApiHelper.parse;
4583
4592
  var ApiHelper = _ApiHelper;
4584
4593
 
4585
- // src/hooks/useFormHelper.ts
4586
-
4587
-
4588
- // src/hooks/useAlert.ts
4589
-
4590
-
4591
- // src/contexts/AlertContext.tsx
4592
-
4593
-
4594
-
4595
- // src/components/Toast/index.tsx
4596
-
4597
-
4598
-
4599
- var Toast = ({ open, onClose, severity, message }) => {
4600
- return /* @__PURE__ */ React2.default.createElement(React2.default.Fragment, null, /* @__PURE__ */ React2.default.createElement(
4601
- _material.Snackbar,
4602
- {
4603
- open,
4604
- autoHideDuration: 6e3,
4605
- onClose,
4606
- anchorOrigin: { vertical: "top", horizontal: "right" },
4607
- sx: { zIndex: 99999999 }
4608
- },
4609
- /* @__PURE__ */ React2.default.createElement(
4610
- _material.Alert,
4611
- {
4612
- severity,
4613
- elevation: 2,
4614
- action: /* @__PURE__ */ React2.default.createElement(
4615
- _material.IconButton,
4616
- {
4617
- "aria-label": "close",
4618
- color: "inherit",
4619
- size: "small",
4620
- onClick: onClose
4621
- },
4622
- /* @__PURE__ */ React2.default.createElement(_md.MdClose, { fontSize: "inherit" })
4623
- )
4624
- },
4625
- message
4626
- )
4627
- ));
4628
- };
4629
-
4630
- // src/contexts/AlertContext.tsx
4631
- var AlertContext = _react.createContext.call(void 0, {});
4632
- var AlertProvider = ({ children }) => {
4633
- const [severity, setSeverity] = _react.useState.call(void 0, "info");
4634
- const [message, setMessage] = _react.useState.call(void 0, "");
4635
- const [isVisible, setIsVisible] = _react.useState.call(void 0, false);
4636
- const createAlert = _react.useCallback.call(void 0,
4637
- (newMessage, severity2) => {
4638
- setMessage(newMessage);
4639
- setSeverity(severity2);
4640
- setIsVisible(true);
4641
- },
4642
- []
4643
- );
4644
- const onCloseToast = _react.useCallback.call(void 0, () => {
4645
- setIsVisible(false);
4646
- }, []);
4647
- return /* @__PURE__ */ React2.default.createElement(AlertContext.Provider, { value: { createAlert } }, children, /* @__PURE__ */ React2.default.createElement(
4648
- Toast,
4649
- {
4650
- open: isVisible,
4651
- onClose: onCloseToast,
4652
- severity,
4653
- message
4654
- }
4655
- ));
4656
- };
4657
-
4658
- // src/hooks/useAlert.ts
4659
- var useAlert = () => {
4660
- return _react.useContext.call(void 0, AlertContext);
4661
- };
4662
-
4663
- // src/hooks/useLoading.ts
4664
-
4665
- function useLoading() {
4666
- const [state, setState] = _react.useState.call(void 0, []);
4667
- const isLoading = _react.useCallback.call(void 0, (prop) => state.includes(prop), [state]);
4668
- const setLoading = _react.useCallback.call(void 0, (prop, remove) => {
4669
- if (remove)
4670
- setState((prevState) => prevState.filter((state2) => state2 !== prop));
4671
- else setState((prevState) => [...prevState, prop]);
4672
- }, []);
4673
- return { isLoading, setLoading };
4674
- }
4675
-
4676
- // src/contexts/FormHelperProvider.tsx
4677
-
4678
-
4679
- var FormHelperContext = _react.createContext.call(void 0, {});
4680
- var FormHelperProvider = ({ formatErrorMessage, api, children }) => {
4681
- return /* @__PURE__ */ React2.default.createElement(FormHelperContext.Provider, { value: { formatErrorMessage, api } }, children);
4682
- };
4683
-
4684
- // src/hooks/useFormHelper.ts
4685
- function useFormHelper() {
4686
- const alertProps = useAlert();
4687
- const loadingProps = useLoading();
4688
- const { api, formatErrorMessage } = _react.useContext.call(void 0, FormHelperContext);
4689
- const { createAlert } = alertProps;
4690
- const { setLoading } = loadingProps;
4691
- const sourceRef = _react.useRef.call(void 0, new AbortController());
4692
- const onSubmitWrapper = _react.useCallback.call(void 0,
4693
- (fn, { name }) => {
4694
- return async (fields, methods) => {
4695
- const LOADING_NAME = name;
4696
- setLoading(LOADING_NAME);
4697
- try {
4698
- await fn(fields, methods);
4699
- } catch (error) {
4700
- errorHandler(error, methods.setErrors);
4701
- } finally {
4702
- setLoading(LOADING_NAME, true);
4703
- }
4704
- };
4705
- },
4706
- [setLoading]
4707
- );
4708
- const onRequestWrapper = _react.useCallback.call(void 0,
4709
- (fn, { name }) => {
4710
- return async (...params) => {
4711
- const LOADING_NAME = name;
4712
- setLoading(LOADING_NAME);
4713
- api.interceptors.request.use(
4714
- (config) => {
4715
- if (!config.signal && sourceRef.current && config.method === "get") {
4716
- config.signal = sourceRef.current.signal;
4717
- }
4718
- return config;
4719
- },
4720
- (error) => {
4721
- return Promise.reject(error);
4722
- }
4723
- );
4724
- try {
4725
- const response = await fn(...params);
4726
- return response;
4727
- } catch (error) {
4728
- errorHandler(error);
4729
- } finally {
4730
- setLoading(LOADING_NAME, true);
4731
- }
4732
- };
4733
- },
4734
- [setLoading, api]
4735
- );
4736
- const errorHandler = _react.useCallback.call(void 0,
4737
- (error, callback) => {
4738
- if (_optionalChain([error, 'optionalAccess', _87 => _87.message]) === "cancel.navigation") return;
4739
- if (callback) {
4740
- if (error.response.data.code === "invalid.body") {
4741
- const errors = error.response.data.details.issues;
4742
- const currentErrors = errors.reduce((acc, item) => {
4743
- acc[item.path.join(".")] = item.message;
4744
- return acc;
4745
- }, {});
4746
- callback(currentErrors);
4747
- }
4748
- }
4749
- createAlert(formatErrorMessage(error), "error");
4750
- },
4751
- [formatErrorMessage, createAlert]
4752
- );
4753
- _react.useEffect.call(void 0, () => {
4754
- return () => {
4755
- sourceRef.current.abort();
4756
- sourceRef.current = new AbortController();
4757
- };
4758
- }, []);
4759
- return {
4760
- ...alertProps,
4761
- ...loadingProps,
4762
- onSubmitWrapper,
4763
- onRequestWrapper
4764
- };
4765
- }
4766
-
4767
4594
  // src/helpers/authHelper.ts
4768
4595
  var _cookie = require('cookie'); var cookie = _interopRequireWildcard(_cookie);
4769
- var _uuid = require('uuid');
4770
4596
  var _jsonwebtoken = require('jsonwebtoken'); var _jsonwebtoken2 = _interopRequireDefault(_jsonwebtoken);
4771
4597
 
4772
4598
  // packages/nookies/index.ts
@@ -4820,7 +4646,7 @@ function areCookiesEqual(a, b) {
4820
4646
 
4821
4647
  // packages/nookies/index.ts
4822
4648
  function parseCookies(ctx, options) {
4823
- if (_optionalChain([ctx, 'optionalAccess', _88 => _88.req, 'optionalAccess', _89 => _89.headers, 'optionalAccess', _90 => _90.cookie])) {
4649
+ if (_optionalChain([ctx, 'optionalAccess', _87 => _87.req, 'optionalAccess', _88 => _88.headers, 'optionalAccess', _89 => _89.cookie])) {
4824
4650
  return cookie.parse(ctx.req.headers.cookie, options);
4825
4651
  }
4826
4652
  if (isBrowser()) {
@@ -4829,8 +4655,8 @@ function parseCookies(ctx, options) {
4829
4655
  return {};
4830
4656
  }
4831
4657
  function setCookie(ctx, name, value, options = {}) {
4832
- if (_optionalChain([ctx, 'optionalAccess', _91 => _91.res, 'optionalAccess', _92 => _92.getHeader]) && ctx.res.setHeader) {
4833
- if (_optionalChain([ctx, 'optionalAccess', _93 => _93.res, 'optionalAccess', _94 => _94.finished])) {
4658
+ if (_optionalChain([ctx, 'optionalAccess', _90 => _90.res, 'optionalAccess', _91 => _91.getHeader]) && ctx.res.setHeader) {
4659
+ if (_optionalChain([ctx, 'optionalAccess', _92 => _92.res, 'optionalAccess', _93 => _93.finished])) {
4834
4660
  console.warn(`Not setting "${name}" cookie. Response has finished.`);
4835
4661
  console.warn(`You should set cookie before res.send()`);
4836
4662
  return {};
@@ -4878,13 +4704,14 @@ var nookies = {
4878
4704
  };
4879
4705
 
4880
4706
  // src/helpers/authHelper.ts
4707
+ var _crypto = require('crypto');
4881
4708
  function decodeSessionToken({
4882
4709
  req,
4883
4710
  res,
4884
4711
  sessionTokenName,
4885
4712
  validate
4886
4713
  }) {
4887
- const token = _optionalChain([req, 'access', _95 => _95.headers, 'access', _96 => _96.authorization, 'optionalAccess', _97 => _97.split, 'call', _98 => _98(" "), 'access', _99 => _99[1]]) || req.cookies[sessionTokenName];
4714
+ const token = _optionalChain([req, 'access', _94 => _94.headers, 'access', _95 => _95.authorization, 'optionalAccess', _96 => _96.split, 'call', _97 => _97(" "), 'access', _98 => _98[1]]) || req.cookies[sessionTokenName];
4888
4715
  if (!token) {
4889
4716
  res.status(401).json({ error: "Token inv\xE1lido", code: "token.invalid" });
4890
4717
  return true;
@@ -4920,7 +4747,7 @@ var AuthHelper = class {
4920
4747
  expiresIn: this.tokenExpTimeInSeconds || 60 * 15
4921
4748
  // 15 minutos
4922
4749
  });
4923
- const uniqueToken = _uuid.v4.call(void 0, );
4750
+ const uniqueToken = _crypto.randomUUID.call(void 0, );
4924
4751
  await this.onCreateRefreshToken(userId, uniqueToken);
4925
4752
  return {
4926
4753
  token,
@@ -4952,7 +4779,7 @@ var AuthHelper = class {
4952
4779
  if (!req.url) return res.status(400).json({ error: "url not sent" });
4953
4780
  if (req.url.endsWith("/login")) {
4954
4781
  const loginResult = await this.onLogin(req.body);
4955
- if (loginResult.status === "sucess") {
4782
+ if (loginResult.status === "success") {
4956
4783
  const { refreshToken, token } = await this.generateJwtAndRefreshToken(
4957
4784
  loginResult.userId,
4958
4785
  {}
@@ -5079,7 +4906,7 @@ var AuthHelper = class {
5079
4906
  const data = await response.json();
5080
4907
  const decodedToken = _jsonwebtoken2.default.decode(data.access_token);
5081
4908
  const email = decodedToken.upn;
5082
- const fullName = `${_optionalChain([decodedToken, 'optionalAccess', _100 => _100.given_name])} ${_optionalChain([decodedToken, 'optionalAccess', _101 => _101.family_name])}`;
4909
+ const fullName = `${_optionalChain([decodedToken, 'optionalAccess', _99 => _99.given_name])} ${_optionalChain([decodedToken, 'optionalAccess', _100 => _100.family_name])}`;
5083
4910
  return { decodedToken, email, fullName };
5084
4911
  }
5085
4912
  createOauthCallbackGetServerSideProps({
@@ -5144,7 +4971,6 @@ var AuthHelper = class {
5144
4971
  // src/hooks/useFilter.ts
5145
4972
 
5146
4973
 
5147
-
5148
4974
  // src/components/utils/getObjectValue.ts
5149
4975
  function getObjectValue(obj) {
5150
4976
  return (prop) => {
@@ -5163,7 +4989,7 @@ function useFilter(props = { defaultFilters: [] }) {
5163
4989
  return defaultFilters || [];
5164
4990
  });
5165
4991
  const filterBy = _react.useCallback.call(void 0, (newFilter) => {
5166
- const propToCompare = _optionalChain([newFilter, 'optionalAccess', _102 => _102.id]) ? "id" : "prop";
4992
+ const propToCompare = _optionalChain([newFilter, 'optionalAccess', _101 => _101.id]) ? "id" : "prop";
5167
4993
  function removeRepeatedFilters(filter) {
5168
4994
  return filter[propToCompare] !== newFilter[propToCompare];
5169
4995
  }
@@ -5213,13 +5039,13 @@ function compareFilter(item, filter) {
5213
5039
  case "valueNotIn":
5214
5040
  return !itemValue.includes(filter.value);
5215
5041
  case "gte":
5216
- return isDate(itemValue) ? _moment2.default.call(void 0, String(itemValue)).isSameOrAfter(filter.value) : itemValue >= filter.value;
5042
+ return isDate(itemValue) ? new Date(String(itemValue)) >= filter.value : itemValue >= filter.value;
5217
5043
  case "gt":
5218
- return isDate(itemValue) ? _moment2.default.call(void 0, String(itemValue)).isAfter(filter.value) : itemValue > filter.value;
5044
+ return isDate(itemValue) ? new Date(String(itemValue)) > filter.value : itemValue > filter.value;
5219
5045
  case "lte":
5220
- return isDate(itemValue) ? _moment2.default.call(void 0, String(itemValue)).isSameOrBefore(filter.value) : itemValue <= filter.value;
5046
+ return isDate(itemValue) ? new Date(String(itemValue)) <= filter.value : itemValue <= filter.value;
5221
5047
  case "lt":
5222
- return isDate(itemValue) ? _moment2.default.call(void 0, String(itemValue)).isBefore(filter.value) : itemValue < filter.value;
5048
+ return isDate(itemValue) ? new Date(String(itemValue)) < filter.value : itemValue < filter.value;
5223
5049
  }
5224
5050
  }
5225
5051
  function createFilter(filters) {
@@ -5516,7 +5342,7 @@ function useAsyncGrid({
5516
5342
  const params = new URLSearchParams({
5517
5343
  page: String(page),
5518
5344
  rowsPerPage: String(rowsPerPage2),
5519
- searchText: _optionalChain([search2, 'optionalAccess', _103 => _103.value]) || "",
5345
+ searchText: _optionalChain([search2, 'optionalAccess', _102 => _102.value]) || "",
5520
5346
  sort: sortedBy2.map(({ prop, direction }) => `${prop}:${direction}`).join(","),
5521
5347
  filters: filters2.map(
5522
5348
  (filter) => `${filter.prop}:${filter.compareType}:${filter.value}`
@@ -5618,6 +5444,188 @@ function useEvent(event, handler, passive = false) {
5618
5444
  });
5619
5445
  }
5620
5446
 
5447
+ // src/hooks/useLoading.ts
5448
+
5449
+ function useLoading() {
5450
+ const [state, setState] = _react.useState.call(void 0, []);
5451
+ const isLoading = _react.useCallback.call(void 0, (prop) => state.includes(prop), [state]);
5452
+ const setLoading = _react.useCallback.call(void 0, (prop, remove) => {
5453
+ if (remove)
5454
+ setState((prevState) => prevState.filter((state2) => state2 !== prop));
5455
+ else setState((prevState) => [...prevState, prop]);
5456
+ }, []);
5457
+ return { isLoading, setLoading };
5458
+ }
5459
+
5460
+ // src/hooks/useAlert.ts
5461
+
5462
+
5463
+ // src/contexts/AlertContext.tsx
5464
+
5465
+
5466
+
5467
+ // src/components/Toast/index.tsx
5468
+
5469
+
5470
+
5471
+ var Toast = ({ open, onClose, severity, message }) => {
5472
+ return /* @__PURE__ */ React2.default.createElement(React2.default.Fragment, null, /* @__PURE__ */ React2.default.createElement(
5473
+ _material.Snackbar,
5474
+ {
5475
+ open,
5476
+ autoHideDuration: 6e3,
5477
+ onClose,
5478
+ anchorOrigin: { vertical: "top", horizontal: "right" },
5479
+ sx: { zIndex: 99999999 }
5480
+ },
5481
+ /* @__PURE__ */ React2.default.createElement(
5482
+ _material.Alert,
5483
+ {
5484
+ severity,
5485
+ elevation: 2,
5486
+ action: /* @__PURE__ */ React2.default.createElement(
5487
+ _material.IconButton,
5488
+ {
5489
+ "aria-label": "close",
5490
+ color: "inherit",
5491
+ size: "small",
5492
+ onClick: onClose
5493
+ },
5494
+ /* @__PURE__ */ React2.default.createElement(_md.MdClose, { fontSize: "inherit" })
5495
+ )
5496
+ },
5497
+ message
5498
+ )
5499
+ ));
5500
+ };
5501
+
5502
+ // src/contexts/AlertContext.tsx
5503
+ var AlertContext = _react.createContext.call(void 0, {});
5504
+ var AlertProvider = ({ children }) => {
5505
+ const [severity, setSeverity] = _react.useState.call(void 0, "info");
5506
+ const [message, setMessage] = _react.useState.call(void 0, "");
5507
+ const [isVisible, setIsVisible] = _react.useState.call(void 0, false);
5508
+ const createAlert = _react.useCallback.call(void 0,
5509
+ (newMessage, severity2) => {
5510
+ setMessage(newMessage);
5511
+ setSeverity(severity2);
5512
+ setIsVisible(true);
5513
+ },
5514
+ []
5515
+ );
5516
+ const onCloseToast = _react.useCallback.call(void 0, () => {
5517
+ setIsVisible(false);
5518
+ }, []);
5519
+ return /* @__PURE__ */ React2.default.createElement(AlertContext.Provider, { value: { createAlert } }, children, /* @__PURE__ */ React2.default.createElement(
5520
+ Toast,
5521
+ {
5522
+ open: isVisible,
5523
+ onClose: onCloseToast,
5524
+ severity,
5525
+ message
5526
+ }
5527
+ ));
5528
+ };
5529
+
5530
+ // src/hooks/useAlert.ts
5531
+ var useAlert = () => {
5532
+ return _react.useContext.call(void 0, AlertContext);
5533
+ };
5534
+
5535
+ // src/hooks/useFormHelper.ts
5536
+
5537
+
5538
+ // src/contexts/FormHelperProvider.tsx
5539
+
5540
+
5541
+ var FormHelperContext = _react.createContext.call(void 0, {});
5542
+ var FormHelperProvider = ({ formatErrorMessage, api, children }) => {
5543
+ return /* @__PURE__ */ React2.default.createElement(FormHelperContext.Provider, { value: { formatErrorMessage, api } }, children);
5544
+ };
5545
+
5546
+ // src/hooks/useFormHelper.ts
5547
+ function useFormHelper() {
5548
+ const alertProps = useAlert();
5549
+ const loadingProps = useLoading();
5550
+ const { api, formatErrorMessage } = _react.useContext.call(void 0, FormHelperContext);
5551
+ const { createAlert } = alertProps;
5552
+ const { setLoading } = loadingProps;
5553
+ const sourceRef = _react.useRef.call(void 0, new AbortController());
5554
+ const onSubmitWrapper = _react.useCallback.call(void 0,
5555
+ (fn, { name }) => {
5556
+ return async (fields, methods) => {
5557
+ const LOADING_NAME = name;
5558
+ setLoading(LOADING_NAME);
5559
+ try {
5560
+ await fn(fields, methods);
5561
+ } catch (error) {
5562
+ errorHandler(error, methods.setErrors);
5563
+ } finally {
5564
+ setLoading(LOADING_NAME, true);
5565
+ }
5566
+ };
5567
+ },
5568
+ [setLoading]
5569
+ );
5570
+ const onRequestWrapper = _react.useCallback.call(void 0,
5571
+ (fn, { name }) => {
5572
+ return async (...params) => {
5573
+ const LOADING_NAME = name;
5574
+ setLoading(LOADING_NAME);
5575
+ api.interceptors.request.use(
5576
+ (config) => {
5577
+ if (!config.signal && sourceRef.current && config.method === "get") {
5578
+ config.signal = sourceRef.current.signal;
5579
+ }
5580
+ return config;
5581
+ },
5582
+ (error) => {
5583
+ return Promise.reject(error);
5584
+ }
5585
+ );
5586
+ try {
5587
+ const response = await fn(...params);
5588
+ return response;
5589
+ } catch (error) {
5590
+ errorHandler(error);
5591
+ } finally {
5592
+ setLoading(LOADING_NAME, true);
5593
+ }
5594
+ };
5595
+ },
5596
+ [setLoading, api]
5597
+ );
5598
+ const errorHandler = _react.useCallback.call(void 0,
5599
+ (error, callback) => {
5600
+ if (_optionalChain([error, 'optionalAccess', _103 => _103.message]) === "cancel.navigation") return;
5601
+ if (callback) {
5602
+ if (error.response.data.code === "invalid.body") {
5603
+ const errors = error.response.data.details.issues;
5604
+ const currentErrors = errors.reduce((acc, item) => {
5605
+ acc[item.path.join(".")] = item.message;
5606
+ return acc;
5607
+ }, {});
5608
+ callback(currentErrors);
5609
+ }
5610
+ }
5611
+ createAlert(formatErrorMessage(error), "error");
5612
+ },
5613
+ [formatErrorMessage, createAlert]
5614
+ );
5615
+ _react.useEffect.call(void 0, () => {
5616
+ return () => {
5617
+ sourceRef.current.abort();
5618
+ sourceRef.current = new AbortController();
5619
+ };
5620
+ }, []);
5621
+ return {
5622
+ ...alertProps,
5623
+ ...loadingProps,
5624
+ onSubmitWrapper,
5625
+ onRequestWrapper
5626
+ };
5627
+ }
5628
+
5621
5629
  // src/contexts/AuthContext.tsx
5622
5630
 
5623
5631