drf-react-by-schema 0.3.1 → 0.5.0

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.
Files changed (30) hide show
  1. package/dist/api.d.ts +9 -9
  2. package/dist/api.js +16 -8
  3. package/dist/components/DataGridBySchemaEditable/BooleanInputCell.d.ts +24 -0
  4. package/dist/components/DataGridBySchemaEditable/BooleanInputCell.js +42 -0
  5. package/dist/components/DataGridBySchemaEditable/CustomToolbar.d.ts +1 -0
  6. package/dist/components/DataGridBySchemaEditable/FooterToolbar.d.ts +1 -0
  7. package/dist/components/DataGridBySchemaEditable/GridDecimalInput.d.ts +1 -0
  8. package/dist/components/DataGridBySchemaEditable/GridPatternInput.d.ts +1 -0
  9. package/dist/components/DataGridBySchemaEditable/InputInterval.d.ts +1 -0
  10. package/dist/components/DataGridBySchemaEditable/utils.d.ts +2 -2
  11. package/dist/components/DataGridBySchemaEditable.js +13 -0
  12. package/dist/components/DataTotals.d.ts +1 -0
  13. package/dist/components/DialogJSONSchemaForm.d.ts +1 -0
  14. package/dist/components/FormButtons.d.ts +13 -6
  15. package/dist/components/FormButtons.js +20 -16
  16. package/dist/components/GenericModelList.d.ts +4 -3
  17. package/dist/components/GenericModelList.js +13 -3
  18. package/dist/context/APIWrapper.js +9 -4
  19. package/dist/context/APIWrapperContext.d.ts +5 -1
  20. package/dist/context/Form.d.ts +11 -1
  21. package/dist/context/Form.js +22 -5
  22. package/dist/context/FormContext.d.ts +72 -0
  23. package/dist/context/FormContext.js +15 -0
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.js +3 -1
  26. package/dist/styles/layout.d.ts +1 -1
  27. package/dist/styles/theme.d.ts +1 -1
  28. package/dist/utils.d.ts +4 -2
  29. package/dist/utils.js +2 -2
  30. package/package.json +4 -4
package/dist/api.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { AxiosResponse } from 'axios';
2
1
  import { serverEndPointType } from './context/DRFReactBySchemaContext';
3
- import { Item, SchemaType, DataSchemaColumnsType, ItemSchemaColumnsType } from './utils';
2
+ import { Item, SchemaType, modelOptionsType, DataSchemaColumnsType, ItemSchemaColumnsType } from './utils';
4
3
  type Id = string | number | null;
5
4
  /**
6
5
  * Interface for CRUD on API
@@ -24,11 +23,11 @@ interface TargetApiParamsOptionalId {
24
23
  * @param param0
25
24
  * @returns Id when succesfully updated, false otherwise
26
25
  */
27
- export declare const updateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<false | Id | AxiosResponse<any, any>>;
28
- export declare const partialUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<Id | AxiosResponse<any, any>>;
29
- export declare const createData: ({ path, serverEndPoint, data }: Omit<TargetApiParams, 'id'>) => Promise<false | AxiosResponse<any, any>>;
26
+ export declare const updateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<any>;
27
+ export declare const partialUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<any>;
28
+ export declare const createData: ({ path, serverEndPoint, data }: Omit<TargetApiParams, 'id'>) => Promise<any>;
30
29
  export declare const deleteData: (path: string, serverEndPoint: serverEndPointType | null, id: Id) => Promise<boolean>;
31
- export declare const createOrUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParamsOptionalId) => Promise<false | Id | AxiosResponse<any, any>>;
30
+ export declare const createOrUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParamsOptionalId) => Promise<any>;
32
31
  export declare const updateDataBySchema: ({ model, modelObjectId, serverEndPoint, data, schema, path }: {
33
32
  model: string;
34
33
  modelObjectId: Id;
@@ -36,13 +35,13 @@ export declare const updateDataBySchema: ({ model, modelObjectId, serverEndPoint
36
35
  data: Item;
37
36
  schema: SchemaType;
38
37
  path?: string | null | undefined;
39
- }) => Promise<false | Id | AxiosResponse<any, any>>;
38
+ }) => Promise<any>;
40
39
  export declare const addExistingRelatedModel: ({ model, serverEndPoint, id, data }: {
41
40
  model: string;
42
41
  serverEndPoint: serverEndPointType | null;
43
42
  id: Id;
44
43
  data: Item;
45
- }) => Promise<Id | AxiosResponse<any, any>>;
44
+ }) => Promise<any>;
46
45
  export declare const getAutoComplete: ({ model, serverEndPoint }: {
47
46
  model: string;
48
47
  serverEndPoint: serverEndPointType | null;
@@ -72,8 +71,9 @@ export interface getGenericModelListProps {
72
71
  creatableFields?: string[];
73
72
  isInBatches?: boolean;
74
73
  loadedSchema?: SchemaType | boolean;
74
+ loadedModelOptions?: modelOptionsType | boolean;
75
75
  }
76
- export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema }: getGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
76
+ export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema, loadedModelOptions, }: getGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
77
77
  export declare const getGenericModel: ({ model, serverEndPoint, id, relatedModel, relatedModelId }: {
78
78
  model: string;
79
79
  serverEndPoint: serverEndPointType | null;
package/dist/api.js CHANGED
@@ -73,7 +73,11 @@ const getSchema = (path, serverEndPoint) => __awaiter(void 0, void 0, void 0, fu
73
73
  }
74
74
  }
75
75
  }
76
- return options.actions.POST;
76
+ const modelOptions = Object.assign({}, options);
77
+ delete modelOptions.renders;
78
+ delete modelOptions.parses;
79
+ delete modelOptions.actions;
80
+ return { schema: options.actions.POST, modelOptions };
77
81
  });
78
82
  const getData = (path, serverEndPoint, route = 'api') => __awaiter(void 0, void 0, void 0, function* () {
79
83
  var _b;
@@ -532,10 +536,11 @@ const isLoggedIn = (serverEndPoint) => __awaiter(void 0, void 0, void 0, functio
532
536
  });
533
537
  exports.isLoggedIn = isLoggedIn;
534
538
  ;
535
- const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], isInBatches = false, loadedSchema }) => __awaiter(void 0, void 0, void 0, function* () {
539
+ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], isInBatches = false, loadedSchema, loadedModelOptions, }) => __awaiter(void 0, void 0, void 0, function* () {
536
540
  let path = `${model}/${id}`;
537
541
  let schemaPath = model;
538
542
  let schema = loadedSchema;
543
+ let modelOptions = loadedModelOptions;
539
544
  let columns;
540
545
  if (!(0, utils_1.isTmpId)(id) && relatedModel) {
541
546
  path += `/${relatedModel}/${relatedModelId}`;
@@ -543,10 +548,12 @@ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = ''
543
548
  }
544
549
  // Only get schema and columns if not in batches or in first batch:
545
550
  if (!schema) {
546
- schema = yield getSchema(schemaPath, serverEndPoint);
547
- if (!schema) {
551
+ const options = yield getSchema(schemaPath, serverEndPoint);
552
+ if (!options) {
548
553
  return false;
549
554
  }
555
+ schema = options.schema;
556
+ modelOptions = options.modelOptions;
550
557
  columns = getDataGridColumns(schema, columnFields, hiddenFields, creatableFields);
551
558
  if (!columns) {
552
559
  return false;
@@ -590,7 +597,7 @@ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = ''
590
597
  return { data };
591
598
  }
592
599
  // DEBUG console.log({ path, data, columns, schema });
593
- return { data, columns, schema };
600
+ return { data, columns, schema, modelOptions };
594
601
  });
595
602
  exports.getGenericModelList = getGenericModelList;
596
603
  const getGenericModel = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '' }) => __awaiter(void 0, void 0, void 0, function* () {
@@ -600,14 +607,15 @@ const getGenericModel = ({ model, serverEndPoint, id = '', relatedModel = '', re
600
607
  path += `/${relatedModel}/${relatedModelId}`;
601
608
  schemaPath += `/${id}/${relatedModel}`;
602
609
  }
603
- const schema = yield getSchema(schemaPath, serverEndPoint);
604
- if (!schema) {
610
+ const options = yield getSchema(schemaPath, serverEndPoint);
611
+ if (!options) {
605
612
  return false;
606
613
  }
614
+ const { schema, modelOptions } = options;
607
615
  const data = (!id || (id && relatedModel && !relatedModelId))
608
616
  ? {}
609
617
  : yield getData(path, serverEndPoint);
610
618
  // console.log({ schema, data }); // DEBUG
611
- return { schema, data };
619
+ return { schema, modelOptions, data };
612
620
  });
613
621
  exports.getGenericModel = getGenericModel;
@@ -0,0 +1,24 @@
1
+ /// <reference types="react" />
2
+ import { SxProps } from '@mui/material';
3
+ import { GridEnrichedBySchemaColDef } from '../../utils';
4
+ interface BooleanInputCellProps {
5
+ field: string;
6
+ id: number | string;
7
+ value?: any;
8
+ column: GridEnrichedBySchemaColDef;
9
+ sx?: SxProps;
10
+ }
11
+ /**
12
+ *
13
+ *
14
+ * @param {BooleanInputCellProps} {
15
+ * field,
16
+ * id,
17
+ * value,
18
+ * column,
19
+ * sx = {}
20
+ * }
21
+ * @returns {*} {JSX.Element}
22
+ */
23
+ export declare function BooleanInputCell({ field, id, value, sx }: BooleanInputCellProps): JSX.Element;
24
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BooleanInputCell = void 0;
16
+ const react_1 = __importDefault(require("react"));
17
+ const x_data_grid_1 = require("@mui/x-data-grid");
18
+ const Checkbox_1 = __importDefault(require("@mui/material/Checkbox"));
19
+ /**
20
+ *
21
+ *
22
+ * @param {BooleanInputCellProps} {
23
+ * field,
24
+ * id,
25
+ * value,
26
+ * column,
27
+ * sx = {}
28
+ * }
29
+ * @returns {*} {JSX.Element}
30
+ */
31
+ function BooleanInputCell({ field, id, value, sx = {} }) {
32
+ // TODO: allow edit option label, as in formautocomplete!
33
+ const apiRef = (0, x_data_grid_1.useGridApiContext)();
34
+ const handleChange = (newValue) => __awaiter(this, void 0, void 0, function* () {
35
+ yield apiRef.current.setEditCellValue({ id, field, value: newValue });
36
+ apiRef.current.stopCellEditMode({ id, field });
37
+ });
38
+ return (react_1.default.createElement(Checkbox_1.default, { key: field, id: field, checked: value, inputProps: { 'aria-label': 'controlled' }, onChange: (event) => {
39
+ handleChange(event.target.checked);
40
+ }, sx: sx }));
41
+ }
42
+ exports.BooleanInputCell = BooleanInputCell;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { GridEnrichedBySchemaColDef } from '../../utils';
2
3
  type CustomToolbarProps = {
3
4
  preparedColumns: GridEnrichedBySchemaColDef[];
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { Item } from '../../utils';
2
3
  type FooterToolbarProps = {
3
4
  name: string;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  type GridDecimalInputProps = {
2
3
  field: string;
3
4
  id: number | string;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  type GridPatternInputProps = {
2
3
  field: string;
3
4
  id: number | string;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export declare const InputNumberInterval: (props: any) => JSX.Element;
2
3
  export declare const InputDateInterval: (props: any) => JSX.Element;
3
4
  export declare const InputFloatInterval: (props: any) => JSX.Element;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { GridApi, GridFilterOperator } from "@mui/x-data-grid";
2
+ import { GridApi } from "@mui/x-data-grid";
3
3
  import { GridEnrichedBySchemaColDef } from "../../utils";
4
4
  export type ResizeType = 'condense' | 'maxContent' | 'fitScreen';
5
5
  /**
@@ -12,4 +12,4 @@ export type ResizeType = 'condense' | 'maxContent' | 'fitScreen';
12
12
  export declare function resizeColumns(columns: GridEnrichedBySchemaColDef[], resizeType: ResizeType, apiRef: React.MutableRefObject<GridApi>): GridEnrichedBySchemaColDef[];
13
13
  export declare const quantityOnlyOperators: ({ type }: {
14
14
  type: string;
15
- }) => GridFilterOperator<any, any, any>[];
15
+ }) => GridFilterOperator[];
@@ -66,6 +66,7 @@ const CustomToolbar_1 = require("./DataGridBySchemaEditable/CustomToolbar");
66
66
  const SelectEditInputCell_1 = require("./DataGridBySchemaEditable/SelectEditInputCell");
67
67
  const GridDecimalInput_1 = require("./DataGridBySchemaEditable/GridDecimalInput");
68
68
  const GridPatternInput_1 = require("./DataGridBySchemaEditable/GridPatternInput");
69
+ const BooleanInputCell_1 = require("./DataGridBySchemaEditable/BooleanInputCell");
69
70
  const FooterToolbar_1 = require("./DataGridBySchemaEditable/FooterToolbar");
70
71
  const ConfirmDialog_1 = require("./DataGridBySchemaEditable/ConfirmDialog");
71
72
  const APIWrapperContext_1 = require("../context/APIWrapperContext");
@@ -227,6 +228,18 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
227
228
  return (!params.value) ? '' : params.value.display_name;
228
229
  };
229
230
  break;
231
+ case 'boolean':
232
+ if (isEditable) {
233
+ column.valueFormatter = params => {
234
+ return (params.value) ? 'Sim' : 'Não';
235
+ };
236
+ column.renderEditCell = (params) => react_1.default.createElement(BooleanInputCell_1.BooleanInputCell, Object.assign({}, params, { column: column }));
237
+ break;
238
+ }
239
+ column.valueGetter = params => {
240
+ return (params.value) ? 'Sim' : 'Não';
241
+ };
242
+ break;
230
243
  case 'decimal':
231
244
  case 'float':
232
245
  column.type = 'number';
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { AlertColor } from '@mui/material/Alert';
2
3
  import { GridRowId } from '@mui/x-data-grid';
3
4
  import { Item } from '../utils';
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { Item, SchemaType } from '../utils';
2
3
  interface DialogJSONSchemaFormProps {
3
4
  jsonSchemaFormRef: any;
@@ -1,14 +1,21 @@
1
- import PropTypes from 'prop-types';
2
- import { SxProps } from '@mui/material';
1
+ import React from 'react';
2
+ import { Id } from '../utils';
3
3
  interface FormButtonsProps {
4
+ model: string;
5
+ objId: Id;
4
6
  title: string;
5
- objId?: string | number;
6
7
  formDisabled: boolean;
7
- cancelBtn?: PropTypes.func;
8
+ cancelBtn?: (e: React.BaseSyntheticEvent) => any;
9
+ cancelBtnLabel?: string;
10
+ deleteBtnLabel?: string;
11
+ saveAndCreateNewBtnLabel?: string;
12
+ saveAndContinueBtnLabel?: string;
13
+ saveBtnLabel?: string;
14
+ onSuccess?: (e: React.BaseSyntheticEvent) => any;
8
15
  bottom?: boolean;
9
16
  borderBottom?: boolean;
10
17
  saveAndContinue?: boolean;
11
- sx?: SxProps;
18
+ sx?: any;
12
19
  }
13
- export default function FormButtons({ title, objId, formDisabled, cancelBtn, sx, bottom, borderBottom, saveAndContinue }: FormButtonsProps): JSX.Element;
20
+ export default function FormButtons({ model, objId, title, formDisabled, cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, bottom, borderBottom, saveAndContinue, sx }: FormButtonsProps): JSX.Element;
14
21
  export {};
@@ -4,36 +4,40 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
- const react_router_dom_1 = require("react-router-dom");
8
- const Typography_1 = __importDefault(require("@mui/material/Typography"));
9
7
  const Box_1 = __importDefault(require("@mui/material/Box"));
10
8
  const Button_1 = __importDefault(require("@mui/material/Button"));
11
- // import UndoIcon from '@mui/icons-material/Undo';
9
+ // import { SxProps } from '@mui/material';
10
+ const Typography_1 = __importDefault(require("@mui/material/Typography"));
12
11
  const styles_1 = require("../styles");
13
- const utils_1 = require("../utils/utils");
14
- function FormButtons({ title, objId, formDisabled, cancelBtn, sx = {}, bottom = false, borderBottom = true, saveAndContinue = true }) {
15
- const navigate = (0, react_router_dom_1.useNavigate)();
16
- if (bottom && borderBottom && objId && objId !== 'novo') {
12
+ const utils_1 = require("../utils");
13
+ const APIWrapperContext_1 = require("../context/APIWrapperContext");
14
+ function FormButtons({ model, objId, title, formDisabled, cancelBtn, cancelBtnLabel = 'Cancel', deleteBtnLabel = 'Delete', saveAndCreateNewBtnLabel = 'Save and Create New', saveAndContinueBtnLabel = 'Save and Continue', saveBtnLabel = 'Save', onSuccess, bottom = false, borderBottom = true, saveAndContinue = true, sx = {} }) {
15
+ const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
16
+ if (!apiContext) {
17
+ console.error('Error on drf-react-by-schema: there is no serverEndPoint configuration!');
18
+ return (react_1.default.createElement(react_1.default.Fragment, null));
19
+ }
20
+ const onDeleteModel = apiContext.onDeleteModel;
21
+ if (bottom && borderBottom && objId && objId !== 'novo' && sx !== null) {
17
22
  sx.mb = 5;
18
23
  sx.pb = 2;
19
24
  sx.borderBottom = 'solid 1px #aaa';
20
25
  }
21
26
  return (react_1.default.createElement(Box_1.default, { sx: Object.assign(Object.assign({}, styles_1.Layout.flexRowGrow), sx) },
22
27
  bottom
23
- ? react_1.default.createElement(Button_1.default, { variant: "contained", type: "button", color: "error", size: "small", disabled: (0, utils_1.isTmpId)(objId) || !onDeleteModel, onClick: onDeleteModel }, "Apagar")
28
+ ? react_1.default.createElement(Button_1.default, { variant: "contained", type: "button", color: "error", size: "small", disabled: (0, utils_1.isTmpId)(objId) || !onDeleteModel, onClick: () => {
29
+ onDeleteModel(model, objId, onSuccess);
30
+ } }, deleteBtnLabel)
24
31
  : title
25
32
  ? react_1.default.createElement(Typography_1.default, { variant: "h5" }, title)
26
33
  : react_1.default.createElement(Box_1.default, null),
27
34
  react_1.default.createElement(Box_1.default, { sx: styles_1.Layout.flexRow },
28
- cancelBtn
29
- ? react_1.default.createElement(Button_1.default, { variant: "contained", color: "primary", size: "small", sx: { ml: 1 }, onClick: cancelBtn }, "Cancelar")
30
- : react_1.default.createElement(Button_1.default, { variant: "contained", color: "primary", size: "small", sx: { ml: 1 }, onClick: () => {
31
- navigate(-1);
32
- } }, "Voltar"),
35
+ cancelBtn &&
36
+ react_1.default.createElement(Button_1.default, { variant: "contained", color: "primary", size: "small", sx: { ml: 1 }, onClick: cancelBtn }, cancelBtnLabel),
33
37
  saveAndContinue &&
34
38
  react_1.default.createElement(react_1.default.Fragment, null,
35
- react_1.default.createElement(Button_1.default, { variant: "contained", name: "createNewOnSave", type: "submit", color: "secondary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, "Salvar e criar novo"),
36
- react_1.default.createElement(Button_1.default, { variant: "contained", name: "stayOnSave", type: "submit", color: "secondary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, "Salvar e continuar")),
37
- react_1.default.createElement(Button_1.default, { variant: "contained", name: "exitOnSave", type: "submit", color: "primary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, "Salvar"))));
39
+ react_1.default.createElement(Button_1.default, { variant: "contained", name: "createNewOnSave", type: "submit", color: "secondary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, saveAndCreateNewBtnLabel),
40
+ react_1.default.createElement(Button_1.default, { variant: "contained", name: "stayOnSave", type: "submit", color: "secondary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, saveAndContinueBtnLabel)),
41
+ react_1.default.createElement(Button_1.default, { variant: "contained", name: "exitOnSave", type: "submit", color: "primary", size: "small", sx: { ml: 1 }, disabled: formDisabled }, saveBtnLabel))));
38
42
  }
39
43
  exports.default = FormButtons;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  import { SumRowsType } from './DataTotals';
3
3
  import { GridEnrichedBySchemaColDef } from '../utils';
4
4
  interface GenericModelListProps {
@@ -13,7 +13,8 @@ interface GenericModelListProps {
13
13
  isAutoHeight?: boolean;
14
14
  model: string;
15
15
  forceReload: boolean;
16
- LinkComponent?: React.ReactNode;
16
+ LinkComponent?: JSX.Element | null;
17
+ hasHeader: boolean;
17
18
  }
18
- declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent }: GenericModelListProps) => JSX.Element;
19
+ declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent, hasHeader, }: GenericModelListProps) => JSX.Element;
19
20
  export default GenericModelList;
@@ -37,13 +37,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  const react_1 = __importStar(require("react"));
39
39
  const Box_1 = __importDefault(require("@mui/material/Box"));
40
+ const Typography_1 = __importDefault(require("@mui/material/Typography"));
41
+ const Button_1 = __importDefault(require("@mui/material/Button"));
42
+ const AddCircleOutline_1 = __importDefault(require("@mui/icons-material/AddCircleOutline"));
40
43
  const DataGridBySchemaEditable_1 = __importDefault(require("./DataGridBySchemaEditable"));
41
44
  const DataTotals_1 = __importDefault(require("./DataTotals"));
42
45
  const styles_1 = require("../styles");
43
46
  const api_1 = require("../api");
44
47
  const DRFReactBySchemaContext_1 = require("../context/DRFReactBySchemaContext");
45
48
  const APIWrapperContext_1 = require("../context/APIWrapperContext");
46
- const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null }) => {
49
+ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null, hasHeader = false, }) => {
47
50
  const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
48
51
  const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
49
52
  if (!context.serverEndPoint || !apiContext) {
@@ -82,7 +85,7 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
82
85
  handleLoading(false);
83
86
  if (isInBatches && loadedData.data.length === firstBatchLength) {
84
87
  setHideFooterPagination(true);
85
- (0, api_1.getGenericModelList)(Object.assign(Object.assign({}, loadParams), { loadedSchema: loadedData.schema })).then(lastBatchData => {
88
+ (0, api_1.getGenericModelList)(Object.assign(Object.assign({}, loadParams), { loadedSchema: loadedData.schema, loadedModelOptions: loadedData.modelOptions })).then(lastBatchData => {
86
89
  if (lastBatchData && typeof lastBatchData !== 'boolean') {
87
90
  setData(Object.assign(Object.assign({}, loadedData), { data: [
88
91
  ...loadedData.data,
@@ -101,9 +104,16 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
101
104
  }
102
105
  (0, react_1.useEffect)(() => {
103
106
  loadObjectList();
104
- }, []);
107
+ }, [model]);
105
108
  return (react_1.default.createElement(react_1.default.Fragment, null, typeof data !== 'boolean' && data.columns &&
106
109
  react_1.default.createElement(react_1.default.Fragment, null,
110
+ hasHeader &&
111
+ react_1.default.createElement(Box_1.default, { sx: Object.assign(Object.assign({}, styles_1.Layout.flexRowGrow), { mb: 2 }) },
112
+ react_1.default.createElement(Typography_1.default, { variant: "h5" }, data.modelOptions.verbose_name_plural || data.modelOptions.name),
113
+ LinkComponent &&
114
+ react_1.default.createElement(Box_1.default, { sx: styles_1.Layout.flexRow },
115
+ react_1.default.createElement(LinkComponent, { to: `novo` },
116
+ react_1.default.createElement(Button_1.default, { variant: "contained", size: "medium", sx: { alignSelf: 'stretch' }, startIcon: react_1.default.createElement(AddCircleOutline_1.default, null) }, "Adicionar")))),
107
117
  react_1.default.createElement(Box_1.default, { sx: styles_1.Layout.dataGridWithTabs },
108
118
  react_1.default.createElement(DataGridBySchemaEditable_1.default, { data: data.data, columns: data.columns, schema: data.schema || {}, model: model, indexField: indexField, indexFieldBasePath: indexFieldBasePath, isEditable: false, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, customColumnOperations: finalCustomColumnOperations, customLinkDestination: customLinkDestination, setVisibleRows: setVisibleRows, onDataChange: newData => {
109
119
  setData(Object.assign(Object.assign({}, data), { data: newData }));
@@ -108,7 +108,7 @@ function APIWrapper({ setLoading, handleLoading, setSnackBar, setDialog, childre
108
108
  const values = populateInitialValues(Object.assign({ model, id: objId, extraValidators }, object));
109
109
  return values;
110
110
  });
111
- const onSubmit = (model, id, data, event) => __awaiter(this, void 0, void 0, function* () {
111
+ const onSubmit = (model, id, data) => __awaiter(this, void 0, void 0, function* () {
112
112
  setLoading(true);
113
113
  const response = yield (0, api_1.updateDataBySchema)({
114
114
  model,
@@ -153,6 +153,7 @@ function APIWrapper({ setLoading, handleLoading, setSnackBar, setDialog, childre
153
153
  model,
154
154
  id,
155
155
  schema: object.schema,
156
+ modelOptions: object.modelOptions,
156
157
  initialValues: values,
157
158
  validationSchema: yupSchema
158
159
  });
@@ -235,8 +236,8 @@ function APIWrapper({ setLoading, handleLoading, setSnackBar, setDialog, childre
235
236
  msg: 'Apagado com com sucesso!',
236
237
  severity: 'info'
237
238
  });
238
- if (onSuccess !== null) {
239
- onSuccess();
239
+ if (onSuccess) {
240
+ onSuccess({});
240
241
  }
241
242
  return true;
242
243
  }
@@ -335,7 +336,11 @@ function APIWrapper({ setLoading, handleLoading, setSnackBar, setDialog, childre
335
336
  onEditRelatedModelSave,
336
337
  onDeleteRelatedModel,
337
338
  onTriggerSnackBar,
338
- setDialog
339
+ setDialog,
340
+ // Remove after integrating new "onEditModel" to package:
341
+ serverEndPoint,
342
+ editModel,
343
+ populateOptionsAC,
339
344
  } }, children));
340
345
  }
341
346
  exports.default = react_1.default.memo(APIWrapper);
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { FieldValues, SubmitHandler } from 'react-hook-form';
3
3
  import { ItemSchemaColumnsType, Id, Item, SchemaType } from '../utils';
4
+ import { serverEndPointType } from './DRFReactBySchemaContext';
4
5
  export interface LoadSinglePageDataProps {
5
6
  model: string;
6
7
  objId?: Id;
@@ -66,10 +67,13 @@ export interface APIWrapperContextType {
66
67
  [x: string]: any;
67
68
  }, React.Dispatch<PageFormType>];
68
69
  onEditModel: (p: OnEditModelType) => void;
69
- onDeleteModel: (model: string, id: Id, onSuccess: () => void | null) => void;
70
+ onDeleteModel: (model: string, id: Id, onSuccess?: (e: React.BaseSyntheticEvent) => any) => void;
70
71
  onEditRelatedModelSave: (p: OnEditRelatedModelType) => Promise<boolean | Id | ItemSchemaColumnsType>;
71
72
  onDeleteRelatedModel: (p: OnDeleteRelatedModelType) => Promise<boolean>;
72
73
  onTriggerSnackBar: (p: SnackBarType) => void;
73
74
  setDialog: React.Dispatch<React.SetStateAction<DialogType>>;
75
+ serverEndPoint: serverEndPointType;
76
+ editModel: React.MutableRefObject<Item>;
77
+ populateOptionsAC: (optionsACModels: string[]) => void;
74
78
  }
75
79
  export declare const APIWrapperContext: React.Context<APIWrapperContextType | null>;
@@ -5,7 +5,17 @@ interface FormProps {
5
5
  id: Id;
6
6
  objTitleField?: string;
7
7
  optionsACModels: string[];
8
+ cancelBtn?: (e: React.BaseSyntheticEvent) => any;
9
+ cancelBtnLabel?: string;
10
+ deleteBtnLabel?: string;
11
+ saveAndCreateNewBtnLabel?: string;
12
+ saveAndContinueBtnLabel?: string;
13
+ saveBtnLabel?: string;
14
+ onSuccess?: (e: React.BaseSyntheticEvent) => any;
15
+ borderBottom?: boolean;
16
+ saveAndContinue?: boolean;
17
+ formButtonsSx?: any;
8
18
  children: React.ReactNode;
9
19
  }
10
- export default function Form({ model, id, objTitleField, optionsACModels, children }: FormProps): JSX.Element;
20
+ export default function Form({ model, id, objTitleField, optionsACModels, cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children }: FormProps): JSX.Element;
11
21
  export {};
@@ -36,7 +36,8 @@ const FormButtons_1 = __importDefault(require("../components/FormButtons"));
36
36
  const APIWrapperContext_1 = require("./APIWrapperContext");
37
37
  const utils_1 = require("../utils");
38
38
  const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
39
- function Form({ model, id, objTitleField = 'name', optionsACModels = [], children }) {
39
+ const FormContext_1 = require("./FormContext");
40
+ function Form({ model, id, objTitleField = 'name', optionsACModels = [], cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children }) {
40
41
  const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
41
42
  const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
42
43
  if (!context.serverEndPoint || !apiContext) {
@@ -66,14 +67,30 @@ function Form({ model, id, objTitleField = 'name', optionsACModels = [], childre
66
67
  loadAllData();
67
68
  }, [id]);
68
69
  const formButtonProps = {
70
+ model,
69
71
  objId: id,
72
+ title: (0, utils_1.isTmpId)(id) ? 'Novo' : 'Editar',
70
73
  formDisabled: !isDirty,
71
- title: (0, utils_1.isTmpId)(id) ? 'Novo' : 'Editar'
74
+ cancelBtn,
75
+ cancelBtnLabel,
76
+ deleteBtnLabel,
77
+ saveAndCreateNewBtnLabel,
78
+ saveAndContinueBtnLabel,
79
+ saveBtnLabel,
80
+ onSuccess,
81
+ borderBottom,
82
+ saveAndContinue,
83
+ sx: formButtonsSx
72
84
  };
85
+ // onSubmit={handleSubmit((data, event) => {
86
+ // onSubmit(
87
+ // model,
88
+ // id,
89
+ // data,
90
+ // event
91
+ // );
73
92
  return (react_1.default.createElement(react_1.default.Fragment, null, pageForm.initialValues && pageForm.schema && control &&
74
- react_1.default.createElement("form", { onSubmit: handleSubmit((data, event) => {
75
- onSubmit(model, id, data, event);
76
- }) },
93
+ react_1.default.createElement(FormContext_1.FormContext.Provider, { value: null },
77
94
  react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
78
95
  react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps)),
79
96
  react_1.default.createElement(Box_1.default, null, children),
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ import { Id, Item, SchemaType } from '../utils';
3
+ export interface LoadSinglePageDataProps {
4
+ model: string;
5
+ objId?: Id;
6
+ objTitleField?: string;
7
+ optionsACModels: string[];
8
+ basePath?: string;
9
+ formPath?: string | null;
10
+ extraValidators?: Item;
11
+ }
12
+ export type OptionsACType = Record<string, Item[]>;
13
+ export interface PageFormType {
14
+ id: Id;
15
+ schema: SchemaType | null;
16
+ initialValues: Item | null;
17
+ validationSchema: Item | null;
18
+ }
19
+ export interface OnEditModelType {
20
+ fieldKey: string;
21
+ index: string;
22
+ model: string;
23
+ id: Id;
24
+ labelKey: string;
25
+ setValue: (p: any) => void;
26
+ getValues: (p: any) => any;
27
+ }
28
+ export interface OnEditRelatedModelType {
29
+ model: string;
30
+ id: Id;
31
+ relatedModel: string;
32
+ relatedModelId: Id;
33
+ newRow: Item;
34
+ schema: SchemaType;
35
+ onlyAddExisting: boolean;
36
+ }
37
+ export interface OnDeleteRelatedModelType {
38
+ model: string;
39
+ id: Id;
40
+ relatedModel: string;
41
+ relatedModelId: Id;
42
+ }
43
+ export interface SnackBarType {
44
+ open?: boolean;
45
+ msg?: string;
46
+ severity?: string;
47
+ }
48
+ export interface DialogType {
49
+ open: boolean;
50
+ loading?: boolean;
51
+ title?: string;
52
+ Body?: React.ReactNode;
53
+ Actions?: React.ReactNode;
54
+ }
55
+ export interface FormContextType {
56
+ model: string;
57
+ id: Id;
58
+ objTitleField: string;
59
+ optionsACModels: string[];
60
+ cancelBtn?: (e: React.BaseSyntheticEvent) => any;
61
+ cancelBtnLabel: any;
62
+ deleteBtnLabel: any;
63
+ saveAndCreateNewBtnLabel: any;
64
+ saveAndContinueBtnLabel: any;
65
+ saveBtnLabel: any;
66
+ onSuccess: any;
67
+ borderBottom: any;
68
+ saveAndContinue: any;
69
+ formButtonsSx: any;
70
+ children: any;
71
+ }
72
+ export declare const FormContext: React.Context<FormContextType | null>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FormContext = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ ;
9
+ ;
10
+ ;
11
+ ;
12
+ ;
13
+ ;
14
+ ;
15
+ exports.FormContext = react_1.default.createContext(null);
package/dist/index.d.ts CHANGED
@@ -8,4 +8,5 @@ import GenericModelList from './components/GenericModelList';
8
8
  import GenericRelatedModelList from './components/GenericRelatedModelList';
9
9
  import DataTotals from './components/DataTotals';
10
10
  import DialogActions from './components/DialogActions';
11
- export { DRFReactBySchemaProvider, DRFReactBySchemaContext, APIWrapperContext, useTheme, DataGridBySchemaEditable, GenericModelList, GenericRelatedModelList, DataTotals, DialogActions, updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, getJSONSchema, createOrUpdateJSONSchema, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat };
11
+ import Form from './context/Form';
12
+ export { DRFReactBySchemaProvider, DRFReactBySchemaContext, APIWrapperContext, useTheme, Form, FormContext, DataGridBySchemaEditable, GenericModelList, GenericRelatedModelList, DataTotals, DialogActions, updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, getJSONSchema, createOrUpdateJSONSchema, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat };
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPatternFormat = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = exports.getGenericModel = exports.getGenericModelList = exports.isLoggedIn = exports.setAuthToken = exports.loginByPayload = exports.createOrUpdateJSONSchema = exports.getJSONSchema = exports.getAutoComplete = exports.addExistingRelatedModel = exports.updateDataBySchema = exports.createOrUpdateData = exports.deleteData = exports.createData = exports.partialUpdateData = exports.updateData = exports.DialogActions = exports.DataTotals = exports.GenericRelatedModelList = exports.GenericModelList = exports.DataGridBySchemaEditable = exports.useTheme = exports.APIWrapperContext = exports.DRFReactBySchemaContext = exports.DRFReactBySchemaProvider = void 0;
6
+ exports.getPatternFormat = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = exports.getGenericModel = exports.getGenericModelList = exports.isLoggedIn = exports.setAuthToken = exports.loginByPayload = exports.createOrUpdateJSONSchema = exports.getJSONSchema = exports.getAutoComplete = exports.addExistingRelatedModel = exports.updateDataBySchema = exports.createOrUpdateData = exports.deleteData = exports.createData = exports.partialUpdateData = exports.updateData = exports.DialogActions = exports.DataTotals = exports.GenericRelatedModelList = exports.GenericModelList = exports.DataGridBySchemaEditable = exports.FormContext = exports.Form = exports.useTheme = exports.APIWrapperContext = exports.DRFReactBySchemaContext = exports.DRFReactBySchemaProvider = void 0;
7
7
  // Methods:
8
8
  const api_1 = require("./api");
9
9
  Object.defineProperty(exports, "updateData", { enumerable: true, get: function () { return api_1.updateData; } });
@@ -49,3 +49,5 @@ const DataTotals_1 = __importDefault(require("./components/DataTotals"));
49
49
  exports.DataTotals = DataTotals_1.default;
50
50
  const DialogActions_1 = __importDefault(require("./components/DialogActions"));
51
51
  exports.DialogActions = DialogActions_1.default;
52
+ const Form_1 = __importDefault(require("./context/Form"));
53
+ exports.Form = Form_1.default;
@@ -89,7 +89,7 @@ export declare const fullWidthButton: {
89
89
  };
90
90
  export declare const formCard: {
91
91
  width: string;
92
- backgroundColor: string;
92
+ backgroundColor: any;
93
93
  mt: number;
94
94
  mb: number;
95
95
  };
@@ -17,5 +17,5 @@ declare module '@mui/material/styles' {
17
17
  semaphoric?: string;
18
18
  }
19
19
  }
20
- declare const defaultTheme: import("@mui/material/styles").Theme;
20
+ declare const defaultTheme: any;
21
21
  export default defaultTheme;
package/dist/utils.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import * as Yup from 'yup';
2
1
  import { GridActionsColDef, GridColDef } from '@mui/x-data-grid';
3
2
  export type Id = string | number;
4
3
  export type Item = Record<string, any>;
5
4
  export type SchemaType = Record<string, Field>;
5
+ export type modelOptionsType = Record<string, string>;
6
6
  export interface Choice {
7
7
  value: string | number;
8
8
  display_name: string;
@@ -35,11 +35,13 @@ export type GridEnrichedBySchemaColDef = GridBySchemaColDef | GridActionsBySchem
35
35
  export interface DataSchemaColumnsType {
36
36
  data: Item[];
37
37
  schema: SchemaType;
38
+ modelOptions: modelOptionsType;
38
39
  columns?: GridEnrichedBySchemaColDef[];
39
40
  }
40
41
  export interface ItemSchemaColumnsType {
41
42
  data: Item;
42
43
  schema: SchemaType;
44
+ modelOptions: modelOptionsType;
43
45
  columns?: GridEnrichedBySchemaColDef[];
44
46
  }
45
47
  export declare const emptyByType: any;
@@ -54,7 +56,7 @@ export declare const buildGenericYupValidationSchema: ({ data, schema, many, ski
54
56
  many?: boolean | undefined;
55
57
  skipFields?: string[] | undefined;
56
58
  extraValidators?: Item | undefined;
57
- }) => Yup.ObjectSchema<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>> | Yup.ArraySchema<Yup.ObjectSchema<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>>, import("yup/lib/types").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>[] | undefined, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, Record<string, any>>>[] | undefined>;
59
+ }) => any;
58
60
  export declare const errorProps: ({ type, errors, fieldKey, fieldKeyProp, index }: {
59
61
  type: string;
60
62
  errors: Item;
package/dist/utils.js CHANGED
@@ -144,7 +144,7 @@ const getYupValidator = (type) => {
144
144
  yupFunc = Yup.number();
145
145
  break;
146
146
  case 'boolean':
147
- yupFunc = Yup.boolean();
147
+ yupFunc = Yup.bool();
148
148
  break;
149
149
  case 'array':
150
150
  yupFunc = Yup.array();
@@ -236,7 +236,7 @@ const isTmpId = (id) => {
236
236
  if (!id) {
237
237
  return true;
238
238
  }
239
- return id.toString().substr(0, 3) === 'tmp';
239
+ return id.toString().slice(0, 3) === 'tmp';
240
240
  };
241
241
  exports.isTmpId = isTmpId;
242
242
  const reducer = (state, newState) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drf-react-by-schema",
3
- "version": "0.3.1",
3
+ "version": "0.5.0",
4
4
  "description": "Components and Tools for building a React App having Django Rest Framework (DRF) as server",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,9 +10,9 @@
10
10
  "prepare": "install-peers",
11
11
  "styleguide": "styleguidist server",
12
12
  "styleguide:build": "styleguidist build",
13
- "release:major": "npm version $(semver $npm_package_version -i major) && npm publish --tag latest",
14
- "release:minor": "npm version $(semver $npm_package_version -i minor) && npm publish --tag latest",
15
- "release:patch": "npm version $(semver $npm_package_version -i patch) && npm publish --tag latest"
13
+ "release:major": "yarn version --version $(semver $npm_package_version -i major) && yarn publish --tag latest",
14
+ "release:minor": "yarn version --new-version $(semver $npm_package_version -i minor) && yarn publish --tag latest",
15
+ "release:patch": "yarn version --new-version $(semver $npm_package_version -i patch) && yarn publish --tag latest"
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",