@acvl/frontend-components 0.0.15 → 0.0.17

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.
@@ -1,8 +1,11 @@
1
- import { AlertProps } from "@mui/material";
1
+ import { AlertProps, BoxProps } from "@mui/material";
2
2
  import React from "react";
3
3
  interface StatusBadgeProps {
4
4
  severity?: AlertProps['severity'];
5
5
  title: string;
6
+ slotProps?: {
7
+ box?: Partial<BoxProps>;
8
+ };
6
9
  }
7
10
  declare const StatusBadge: React.FC<StatusBadgeProps>;
8
11
  export default StatusBadge;
@@ -16,6 +16,7 @@ export interface CreateGridWrapperProps extends CreateGridAPIProps {
16
16
  renderFunction: (props: any) => JSX.Element;
17
17
  dataGridProps?: Partial<MyDataGridProps>;
18
18
  pathname: string;
19
+ navigation?: string;
19
20
  }
20
21
  declare const CreateGridWrapper: (props: CreateGridWrapperProps) => import("react/jsx-runtime").JSX.Element;
21
22
  export default CreateGridWrapper;
@@ -14,5 +14,5 @@ export interface JSONFormProps {
14
14
  props?: JSONParserProps;
15
15
  }
16
16
  export declare const jsonForm: ({ submitData, data, useLabel, props }: JSONFormProps) => any;
17
- export declare const formDataForm: (object: any) => FormData;
17
+ export declare const formDataForm: ({ submitData, data, useLabel, props }: JSONFormProps) => FormData;
18
18
  export declare const setErrors: (form: any, error: any) => void;
@@ -0,0 +1,6 @@
1
+ import { BaseControlledFieldProps } from "../types";
2
+ import React from "react";
3
+ export interface ControlledPhotoFieldProps extends BaseControlledFieldProps {
4
+ }
5
+ declare const ControlledPhotoField: React.FC<ControlledPhotoFieldProps>;
6
+ export default ControlledPhotoField;
@@ -0,0 +1,8 @@
1
+ import { SliderProps } from "@mui/material";
2
+ import React from "react";
3
+ import { BaseControlledFieldProps } from "../types";
4
+ export interface ControlledSliderProps extends BaseControlledFieldProps {
5
+ fieldProps?: Partial<SliderProps>;
6
+ }
7
+ declare const ControlledSlider: React.FC<ControlledSliderProps>;
8
+ export default ControlledSlider;
@@ -9,3 +9,5 @@ export { default as ControlledSwitch } from './ControlledSwitch';
9
9
  export { default as ControlledText } from './ControlledText';
10
10
  export { default as ControlledToggleButtons } from './ControlledToggleButtons';
11
11
  export { default as ControlledTimePicker } from './ControlledTimePicker';
12
+ export { default as ControlledPhotoField } from './ControlledPhotoField';
13
+ export { default as ControlledSimpleSlider } from './ControlledSimpleSlider';
@@ -53,6 +53,7 @@ export interface DetailPageProps {
53
53
  edit: {
54
54
  defaultValues: any;
55
55
  schema: any;
56
+ useFormData?: boolean;
56
57
  };
57
58
  mainValidation?: {
58
59
  api: {
package/dist/esm/index.js CHANGED
@@ -25643,82 +25643,90 @@ dayjs.locale(es);
25643
25643
  dayjs.extend(duration);
25644
25644
 
25645
25645
  // ==============================|| JSON ||============================== //
25646
- const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, data, props }) => {
25646
+ const typeSwitch = ({ base_object, base_key, response, submitData, useLabel, data, props, formType }) => {
25647
25647
  const ignore = get$1(props, `${base_key}.ignore`, false);
25648
- if (ignore)
25648
+ if (ignore || ['obj_permissions', 'has_history'].includes(base_key))
25649
25649
  return;
25650
25650
  const altered_key = invoke(props, `${base_key}.alter_key`, base_key);
25651
25651
  const key = altered_key || base_key;
25652
25652
  const altered_obj = invoke(props, `${base_key}.alter_value`, base_object, submitData);
25653
25653
  const object = altered_obj || base_object;
25654
+ const setValue = (form, key, value) => {
25655
+ if (formType === "json") {
25656
+ set(form, key, object);
25657
+ }
25658
+ else if (formType === "formData") {
25659
+ form.append(key, value);
25660
+ }
25661
+ };
25654
25662
  switch (typeof object) {
25655
25663
  case "string":
25656
25664
  if (invoke(props, `${base_key}.extra_validation`, object))
25657
25665
  return;
25658
- set(response, key, isEmpty(object) ? '' : object);
25666
+ setValue(response, key, isEmpty(object) ? '' : object);
25659
25667
  break;
25660
25668
  case "number":
25661
- set(response, key, object);
25669
+ setValue(response, key, object);
25662
25670
  break;
25663
25671
  case "boolean":
25664
- set(response, key, object);
25672
+ setValue(response, key, object);
25665
25673
  break;
25666
25674
  case "object":
25667
25675
  if (isNull(object) || isEmpty(object)) {
25668
25676
  if (includes(key, 'after') || includes(key, 'before'))
25669
- set(response, key, '');
25677
+ setValue(response, key, '');
25670
25678
  else
25671
- set(response, key, object);
25679
+ setValue(response, key, object);
25672
25680
  }
25673
25681
  else if (object instanceof dayjs) {
25674
- set(response, key, object.format(get$1(props, `${key}.format`, 'YYYY-MM-DD')));
25682
+ setValue(response, key, object.format(get$1(props, `${key}.format`, 'YYYY-MM-DD')));
25675
25683
  }
25676
25684
  else if ('label' in object && 'value' in object) {
25677
25685
  if (useLabel)
25678
- set(response, key, object['label']);
25686
+ setValue(response, key, object['label']);
25679
25687
  else
25680
- set(response, key, object['value']);
25688
+ setValue(response, key, object['value']);
25681
25689
  }
25682
25690
  else if (Array.isArray(object)) { // it is an array
25683
25691
  if (object.length && typeof object[0] == 'object' && !Array.isArray(object[0]) && 'value' in object[0] && object[0]['value'] == 'all') { // for data grid filters
25684
- set(response, key, '');
25692
+ setValue(response, key, '');
25685
25693
  }
25686
25694
  else {
25687
25695
  forEach(object, (arrayItem, idx) => {
25688
25696
  if (typeof arrayItem == 'object') {
25689
25697
  if ('label' in arrayItem) {
25690
- set(response, `${key}.${idx}`, function (item) {
25698
+ setValue(response, `${key}.${idx}`, function (item) {
25691
25699
  if (useLabel)
25692
25700
  return item.label;
25693
25701
  else
25694
25702
  return item.value;
25695
25703
  });
25696
25704
  }
25697
- typeSwitch({ base_object: arrayItem, base_key: `${key}.${idx}`, response: response, useLabel: useLabel, data: data, submitData: submitData });
25705
+ typeSwitch({ base_object: arrayItem, base_key: `${key}.${idx}`, response: response, useLabel: useLabel, data: data, submitData: submitData, props: props, formType: formType });
25698
25706
  }
25699
25707
  else {
25700
25708
  const keyArray = get$1(response, key);
25701
25709
  if (keyArray)
25702
25710
  keyArray.push(arrayItem);
25703
25711
  else
25704
- set(response, key, [arrayItem]);
25712
+ setValue(response, key, [arrayItem]);
25705
25713
  }
25706
25714
  });
25707
25715
  }
25708
25716
  }
25709
25717
  else if (object instanceof Set) {
25710
- set(response, key, Array.from(object));
25718
+ setValue(response, key, Array.from(object));
25711
25719
  }
25712
25720
  else {
25713
25721
  forEach(object, (value, key2) => {
25714
25722
  if (!includes(['id', 'transporte.tarifa.cargos_adicionales'], key) && isEqual(get$1(data, `${key}.${key2}`), value))
25715
25723
  return;
25716
- typeSwitch({ base_object: value, base_key: `${key}.${key2}`, response: response, useLabel: useLabel, data: data, submitData: submitData, props: props });
25724
+ typeSwitch({ base_object: value, base_key: `${key}.${key2}`, response: response, useLabel: useLabel, data: data, submitData: submitData, props: props, formType: formType });
25717
25725
  });
25718
25726
  }
25719
25727
  break;
25720
25728
  default:
25721
- set(response, key, object);
25729
+ setValue(response, key, object);
25722
25730
  break;
25723
25731
  }
25724
25732
  };
@@ -25727,69 +25735,34 @@ const jsonForm = ({ submitData, data, useLabel, props }) => {
25727
25735
  forEach(submitData, function (value, key) {
25728
25736
  if (key != 'id' && isEqual(get$1(data, key), value))
25729
25737
  return;
25730
- typeSwitch({ base_object: value, base_key: key, response: response, useLabel: useLabel, data: data, props: props, submitData: submitData });
25738
+ typeSwitch({
25739
+ base_object: value,
25740
+ base_key: key,
25741
+ response: response,
25742
+ useLabel: useLabel,
25743
+ data: data,
25744
+ props: props,
25745
+ submitData: submitData,
25746
+ formType: 'json',
25747
+ });
25731
25748
  });
25732
25749
  return response;
25733
25750
  };
25734
- // ==============================|| FORM DATA ||============================== //
25735
- const formConversion = (key, value, formData) => {
25736
- switch (typeof value) {
25737
- case "string":
25738
- if (!value)
25739
- return;
25740
- formData.append(key, value);
25741
- break;
25742
- case "bigint":
25743
- case "number":
25744
- if (!value)
25745
- return;
25746
- formData.append(key, value.toString());
25747
- break;
25748
- case "boolean":
25749
- if (value) {
25750
- formData.append(key, 'True');
25751
- }
25752
- else {
25753
- formData.append(key, 'False');
25754
- }
25755
- break;
25756
- case "object":
25757
- if (!value)
25758
- return;
25759
- if (Array.isArray(value) && value.length) {
25760
- for (let i = 0; i < value.length; i++) {
25761
- formConversion(`${key}[${i}]`, value[i], formData);
25762
- }
25763
- }
25764
- else {
25765
- if (value instanceof Date) {
25766
- formData.append(key, dayjs(value).format('YYYY-MM-DDTHH:mmZ'));
25767
- }
25768
- else if (dayjs.isDayjs(value)) {
25769
- // if (key == 'scheduling.end') {
25770
- // formData.append(key, value.format('YYYY-MM-DD'))
25771
- // } else {
25772
- formData.append(key, value.format('YYYY-MM-DD'));
25773
- // }
25774
- }
25775
- else if (value instanceof File) {
25776
- formData.append(key, value);
25777
- }
25778
- else {
25779
- Object.keys(value).forEach(key2 => {
25780
- if (value[key2] != undefined) {
25781
- formConversion(`${key}.${key2}`, value[key2], formData);
25782
- }
25783
- });
25784
- }
25785
- }
25786
- break;
25787
- }
25788
- };
25789
- const formDataForm = (object) => {
25751
+ const formDataForm = ({ submitData, data, useLabel, props }) => {
25790
25752
  const formData = new FormData();
25791
- Object.keys(object).forEach(key => {
25792
- formConversion(key, object[key], formData);
25753
+ forEach(submitData, function (value, key) {
25754
+ if (key != 'id' && isEqual(get$1(data, key), value))
25755
+ return;
25756
+ typeSwitch({
25757
+ base_object: value,
25758
+ base_key: key,
25759
+ response: formData,
25760
+ useLabel: useLabel,
25761
+ data: data,
25762
+ props: props,
25763
+ submitData: submitData,
25764
+ formType: 'formData',
25765
+ });
25793
25766
  });
25794
25767
  return formData;
25795
25768
  };
@@ -25967,7 +25940,7 @@ const FileUploadBox = (props) => {
25967
25940
  const Dropzone = ({ onChange, value }) => {
25968
25941
  const onDrop = useCallback((acceptedFiles) => {
25969
25942
  acceptedFiles.map(file => {
25970
- const data = formDataForm({ archivo: file });
25943
+ const data = formDataForm({ });
25971
25944
  validarCSV({ endpoint: props.csvProps.endpoint || '', data: data, custom: props.csvProps.custom }).unwrap()
25972
25945
  .then((response) => {
25973
25946
  onChange('archivo' in response ? response.archivo : acceptedFiles[0]);
@@ -26382,7 +26355,7 @@ const ControlledSelect = (props) => {
26382
26355
  };
26383
26356
 
26384
26357
  // ==============================|| DESLIZADOR CONTROLADO ||============================== //
26385
- const ControlledSlider = (props) => {
26358
+ const ControlledSlider$1 = (props) => {
26386
26359
  const [_val, setVal] = useState([]);
26387
26360
  return (
26388
26361
  // controlador
@@ -26497,6 +26470,19 @@ const ControlledTimePicker = (props) => {
26497
26470
  } }));
26498
26471
  };
26499
26472
 
26473
+ const ControlledPhotoField = (props) => {
26474
+ return (jsx(Controller, { control: props.control, name: props.name, render: ({ field: { onChange, onBlur, ref } }) => (jsx("input", { type: "file", accept: "image/*", ref: ref, onBlur: onBlur, onChange: (e) => onChange(e.target.files && e.target.files[0]) })) }));
26475
+ };
26476
+
26477
+ // ==============================|| DESLIZADOR CONTROLADO ||============================== //
26478
+ const ControlledSlider = (props) => {
26479
+ return (
26480
+ // controlador
26481
+ jsx(Controller, { name: props.name, control: props.control, render: ({ field: { onChange, value }, }) => {
26482
+ return (jsx(Slider, { value: value, onChange: onChange, valueLabelDisplay: 'auto', sx: { mx: 2, width: 0.87 }, ...props.fieldProps }));
26483
+ } }));
26484
+ };
26485
+
26500
26486
  const DeleteConfirmationDialog = (props) => {
26501
26487
  const notifications = useNotifications();
26502
26488
  const pathname = 'temp';
@@ -26763,7 +26749,7 @@ const StatusBadge = (props) => {
26763
26749
  }
26764
26750
  }, [props?.severity]);
26765
26751
  if (props)
26766
- return (jsx(Box, { display: 'flex', justifyContent: 'center', alignItems: 'center', border: 4, borderRadius: 1, borderColor: color[800], bgcolor: color[100], height: 1, minWidth: 100, px: 1, children: jsx(Typography$1, { fontWeight: 'bold', sx: {
26752
+ return (jsx(Box, { display: 'flex', justifyContent: 'center', alignItems: 'center', border: 4, borderRadius: 1, borderColor: color[800], bgcolor: color[100], height: 1, minWidth: 100, px: 1, ...props.slotProps?.box, children: jsx(Typography$1, { fontWeight: 'bold', sx: {
26767
26753
  color: color[900]
26768
26754
  }, children: props.title }) }));
26769
26755
  return null;
@@ -26989,7 +26975,7 @@ const generateSchema = (columns, columnsFilter, id) => {
26989
26975
  dynamicSchema[`${column.field}_max`] = z.number().or(z.string()).optional();
26990
26976
  dv[`${column.field}_min`] = '';
26991
26977
  dv[`${column.field}_max`] = '';
26992
- column.input = (jsx(ControlledSlider, { name: column.field, control: undefined, fieldProps: column.extra, extraProps: {
26978
+ column.input = (jsx(ControlledSlider$1, { name: column.field, control: undefined, fieldProps: column.extra, extraProps: {
26993
26979
  getValue: undefined,
26994
26980
  setValue: undefined,
26995
26981
  } }));
@@ -27566,7 +27552,7 @@ const CreateGridWrapper = (props) => {
27566
27552
  handleClose();
27567
27553
  }, disableRipple: true, children: option.title }, index));
27568
27554
  })), jsx(MenuItem, { onClick: () => {
27569
- navigate(`crear`);
27555
+ navigate(props.navigation ? `${props.navigation}crear` : `crear`);
27570
27556
  handleClose();
27571
27557
  }, disableRipple: true, children: "Manual" })] }), props.csv_upload?.enable && (jsx(CSVUpload, { open: csv.open, drawerToggle: handleToggleClose, data: csv.data })), props.renderFunction({ dataGridProps: createGridProps })] }));
27572
27558
  };
@@ -27773,6 +27759,7 @@ const Base = (props) => {
27773
27759
  permission: data?.permissions?.create,
27774
27760
  renderFunction: renderFunction,
27775
27761
  pathname: props.pathname,
27762
+ navigation: props.slotProps?.navigation,
27776
27763
  ...renderProps,
27777
27764
  ...props.api.create
27778
27765
  };
@@ -27915,6 +27902,16 @@ const DetailField = (props) => {
27915
27902
  if (props.fieldData)
27916
27903
  return map(props.fieldData, function (item) { return item.label; }).join(', ');
27917
27904
  }
27905
+ else if (props.type.name == 'ControlledDate') {
27906
+ if (props.fieldData) {
27907
+ if (props.extraProps.type == 'datetime')
27908
+ return dayjs(props.fieldData).format('YYYY-MM-DD HH:mm');
27909
+ }
27910
+ }
27911
+ else if (props.type.name == 'ControlledPhotoField') {
27912
+ if (props.fieldData)
27913
+ return 'Imagen';
27914
+ }
27918
27915
  else {
27919
27916
  if (props.fieldData) {
27920
27917
  if (props.detail_name) {
@@ -27932,6 +27929,9 @@ const DetailField = (props) => {
27932
27929
  }
27933
27930
  return (jsx(LinkField, { url: props.navigation.url, value: get(props.fieldData, 'value'), text: content }));
27934
27931
  }
27932
+ else if (props.type.name == 'ControlledPhotoField') {
27933
+ return (jsx(Link, { href: props.fieldData, download: "filename.pdf", children: content }));
27934
+ }
27935
27935
  else {
27936
27936
  if (Array.isArray(props.fieldData)) {
27937
27937
  return (props.fieldData.map((item, index) => (jsx(Typography$1, { children: `${get(item, 'label')}${index < props.fieldData.length - 1 ? ', ' : ''}` }, `${props.name}-link-${index}`))));
@@ -28287,8 +28287,9 @@ function DetailPage(props) {
28287
28287
  // ==============================|| SUBMIT ||============================== //
28288
28288
  const onSubmitHandler = (submitedData) => {
28289
28289
  const formData = 'nativeEvent' in submitedData ? form.getValues() : submitedData;
28290
- const dataToSend = jsonForm({ submitData: formData, data: data, props: props.slotProps?.parser });
28291
- mutation({ ...dataToSend, ...props.api.mutate.args }).unwrap()
28290
+ const params = { submitData: formData, data: data, props: props.slotProps?.parser };
28291
+ const dataToSend = props.edit.useFormData ? formDataForm(params) : jsonForm(params);
28292
+ mutation(props.edit.useFormData ? dataToSend : { ...dataToSend, ...props.api.mutate.args }).unwrap()
28292
28293
  .then(() => {
28293
28294
  if (!props.slotProps?.button?.save?.disableNavBack)
28294
28295
  navigate(-1);
@@ -28661,5 +28662,5 @@ const theme = () => {
28661
28662
  return themes;
28662
28663
  };
28663
28664
 
28664
- export { APIContext, APIProvider, ActiveCell, Base, ButtonWithDrawer, CSVUpload, ContentLayout, ControlledDate, ControlledDropdown, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledSelect, ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, DeleteButton, DeleteConfirmationDialog, DetailPage, EditButton, HistorialDrawer, ListPage, Loadable, LoadingComponent, Logo, MainDrawer, MenuItemWithLoading, ModuleCard, MyGridEditSingleSelect, NavigationContext, NavigationProvider, NormalOrIcon, NotAllowed, NotFound, ObjectProgressStack, SaveCancelButton, StatusBadge, StyledMenu, Tabs, Transitions, UncontrolledText, changeTitle, closeProgressSnack, dayjs, deleteColumn, editColumn, filterQuery, formDataForm, header as headerReducer, jsonForm, manualCacheRefresh, mergeSettings, openProgressSnack, query, renderEditCellWithErrorTooltip, setErrors, snackProgress_default as snackProgressReducer, tags, theme, updateProgressSnackData, useAPI, useHasPermission, useNavigation, valueLabel };
28665
+ export { APIContext, APIProvider, ActiveCell, Base, ButtonWithDrawer, CSVUpload, ContentLayout, ControlledDate, ControlledDropdown, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledPhotoField, ControlledSelect, ControlledSlider as ControlledSimpleSlider, ControlledSlider$1 as ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, DeleteButton, DeleteConfirmationDialog, DetailPage, EditButton, HistorialDrawer, ListPage, Loadable, LoadingComponent, Logo, MainDrawer, MenuItemWithLoading, ModuleCard, MyGridEditSingleSelect, NavigationContext, NavigationProvider, NormalOrIcon, NotAllowed, NotFound, ObjectProgressStack, SaveCancelButton, StatusBadge, StyledMenu, Tabs, Transitions, UncontrolledText, changeTitle, closeProgressSnack, dayjs, deleteColumn, editColumn, filterQuery, formDataForm, header as headerReducer, jsonForm, manualCacheRefresh, mergeSettings, openProgressSnack, query, renderEditCellWithErrorTooltip, setErrors, snackProgress_default as snackProgressReducer, tags, theme, updateProgressSnackData, useAPI, useHasPermission, useNavigation, valueLabel };
28665
28666
  //# sourceMappingURL=index.js.map