@sava-info-systems/api-maker-with-extensions 1.5.3 → 1.6.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.
package/README.md CHANGED
@@ -10,13 +10,13 @@
10
10
  <hr/>
11
11
 
12
12
  👉 This version is API Maker comes with additional extensions which makes software development process even more faster.<br/>
13
- 👉 You will need --extensionsLicenseKey=YOUR_KEY for installation.<br/>
13
+ 👉 You will need --extLicenseKey=YOUR_KEY for installation.<br/>
14
14
  👉 Contact us to buy license of extensions : https://apimaker.dev <br/>
15
15
  👉 Email address : contact@apimaker.dev <br/>
16
16
 
17
17
  ```shell
18
18
  # Add your key in below command
19
- curl -fsSL https://apimaker.dev/install.sh > install.sh && bash install.sh --default --version=latest --extensionsLicenseKey=YOUR_KEY
19
+ curl -fsSL https://apimaker.dev/v1/install.sh > install.sh && bash install.sh --default --version=latest --extLicenseKey=YOUR_KEY
20
20
 
21
21
  ```
22
22
 
@@ -904,13 +904,14 @@ export interface IExecuteQuery {
904
904
  instance: string;
905
905
  database?: string; // required for postgresql, mongodb only
906
906
  collection?: string; // required for mongodb only
907
- query: string | {
908
- find: any;
909
- sort?: any;
910
- skip?: number;
911
- limit?: number;
912
- select?: any;
913
- };
907
+
908
+ /**
909
+ * You can give SQL query for SQL based databases.<br/>
910
+ * MongoDB = You can give object which will be passed in "command" function.
911
+ * ex: https://www.mongodb.com/docs/drivers/node/current/usage-examples/command/
912
+ * Supported commands : https://www.mongodb.com/docs/v6.0/reference/command/
913
+ */
914
+ query: string | any;
914
915
  headers?: any;
915
916
  }
916
917
 
@@ -1215,6 +1216,10 @@ export enum EDBMasterGridExport {
1215
1216
  // PDF = 'PDF',
1216
1217
  }
1217
1218
 
1219
+ export enum EDBMasterDataImport {
1220
+ CSV = 'CSV',
1221
+ }
1222
+
1218
1223
  export interface IDBMasterConfig {
1219
1224
  theme?: EDBMasterTheme;
1220
1225
 
@@ -1248,7 +1253,16 @@ export interface IDBMasterConfig {
1248
1253
  operations?: {
1249
1254
  add?: IDBMasterConfigOperation;
1250
1255
  hideAddConfirmation?: boolean;
1256
+ /** Default : false. If true, it will not show delete all button. */
1257
+ hideDeleteAllButton?: boolean;
1251
1258
  hideDeleteAllConfirmation?: boolean;
1259
+
1260
+ showRefreshButton?: boolean;
1261
+ showExportButton?: boolean;
1262
+
1263
+ customActionButtons?: IDBMasterTopLevelCustomActionButton[];
1264
+
1265
+ importData?: IDBMasterImportData;
1252
1266
  };
1253
1267
  externalLibs?: {
1254
1268
  css?: string[],
@@ -1261,13 +1275,15 @@ export interface IDBMasterConfig {
1261
1275
  jsCode?: {
1262
1276
 
1263
1277
  /**
1264
- * oncePageLoad = Code will be run only once on page load. (config) <br/>
1265
- * gridRender = Gets executed everytime grid gets data. (gridEvent, gridData) <br/>
1266
- * modifyGridRequest = You can modify api call request. (gridEvent, reqBody: IQueryFormat) <br/>
1267
- * preSave = Change data before saving them in data. (reqBody: any) <br/>
1278
+ * oncePageLoad = Code will be run only once on page load. (config, globalData: any) <br/>
1279
+ * gridRender = Gets executed everytime grid gets data. (gridEvent, gridData, globalData: any) <br/>
1280
+ * modifyGridRequest = You can modify api call request. (gridEvent, reqBody: IQueryFormat, globalData: any) <br/>
1281
+ * preSaveAndEdit = Change data before saving/update/import. (reqBody: any | any[], globalData: any) <br/>
1282
+ * beforeSaveModalOpen = Change data before save modal open. (formData: any , globalData: any) <br/>
1283
+ * beforeEditModalOpen = Change data before edit modal open. (formData: any , globalData: any) <br/>
1268
1284
  *
1269
1285
  */
1270
- appendTo: 'oncePageLoad' | 'gridRender' | 'modifyGridRequest' | 'preSaveAndEdit',
1286
+ appendTo: EDBMasterConfigAppendTo,
1271
1287
  /**
1272
1288
  * // gridEvent, gridData are available to use.
1273
1289
  *
@@ -1296,19 +1312,31 @@ export interface IDBMasterConfig {
1296
1312
  /** Default : 50rem */
1297
1313
  minWidth?: string;
1298
1314
 
1315
+ /** Default : 40rem */
1316
+ breakpoint?: string;
1317
+
1299
1318
  /** Used for nested grid only. From this field it will pickup data array and show grid based on that */
1300
1319
  dataFieldPath?: string;
1301
1320
 
1302
1321
  operations?: {
1303
- delete?: Omit<IDBMasterConfigOperation, 'label'>;
1304
- edit?: Omit<IDBMasterConfigOperation, 'label'>;
1322
+ delete?: Omit<IDBMasterConfigOperation, 'label'> & { apiCallOverridesDeleteMany?: IDBMasterAPICallOverrides; };
1323
+ edit?: Omit<IDBMasterConfigOperation, 'label'> & { apiCallOverridesGetById?: IDBMasterAPICallOverrides; };
1305
1324
 
1306
1325
  hideDeleteConfirmation?: boolean;
1307
1326
  hideEditConfirmation?: boolean;
1308
1327
 
1328
+ disableDoubleClickForEdit?: boolean;
1329
+ disableDeleteButtonClickForDelete?: boolean;
1330
+
1331
+ /** Only 3 & do not give duplicates */
1309
1332
  gridOperationsOrder?: ('delete' | 'edit' | 'custom')[];
1310
1333
 
1334
+ /** Only 3 & do not give duplicates */
1335
+ gridColumnsOrder?: ('checkbox' | 'actions' | 'dbFields')[];
1336
+
1311
1337
  actionColumnWidth?: string;
1338
+
1339
+ customActionButtons?: IDBMasterCustomActionButton[];
1312
1340
  };
1313
1341
 
1314
1342
  /**
@@ -1355,7 +1383,30 @@ export interface IDBMasterConfig {
1355
1383
  rowsPerPageOptions?: number[];
1356
1384
  }
1357
1385
 
1386
+ grouping?: {
1387
+ // rowGroupMode: 'subheader'; // default : subheader. rowspan = is not supported.
1388
+
1389
+ /** group by column name */
1390
+ groupRowsBy: string;
1391
+
1392
+ /** Give style object in angular style. */
1393
+ headerStyle?: any;
1394
+
1395
+ /** You can provide single or multiple classes. */
1396
+ headerCssClass?: string,
1397
+
1398
+ /** Give style object in angular style. */
1399
+ footerStyle?: any;
1400
+
1401
+ /** You can provide single or multiple classes. */
1402
+ footerCssClass?: string,
1403
+
1404
+ /** Group footer will be generated from this property of object. */
1405
+ footerColumnPath?: string,
1406
+ }
1407
+
1358
1408
  selection?: {
1409
+ /** Default grid selection mode is multiple */
1359
1410
  mode: 'single' | 'multiple';
1360
1411
 
1361
1412
  /** name of primary key field. Default : it will be automatically pickup from schema. */
@@ -1383,6 +1434,8 @@ export interface IDBMasterConfig {
1383
1434
  /** Default : false, if true it will show filter for each column */
1384
1435
  rowFilter?: boolean;
1385
1436
  }
1437
+
1438
+ apiCallOverrides?: IDBMasterAPICallOverrides;
1386
1439
  };
1387
1440
  form?: {
1388
1441
  /** Ex : 90vw */
@@ -1398,6 +1451,72 @@ export interface IDBMasterConfig {
1398
1451
  }
1399
1452
  }
1400
1453
 
1454
+ export interface IDBMasterImportData {
1455
+ enable: boolean;
1456
+
1457
+ fieldMappings: IDBMasterImportGridColumn[];
1458
+ }
1459
+
1460
+ export interface IDBMasterImportGridColumn {
1461
+ header: string;
1462
+ sourceField: string;
1463
+ targetField: string;
1464
+ convertTargetFieldToType: EType;
1465
+
1466
+ /** Default: ISO date format, date-fns format, Dates from CSV will be parsed using this format. */
1467
+ dateParseFormat?: string;
1468
+
1469
+ /** Dates will be converted into this timezone before sending to database query. */
1470
+ dateTimeZone?: string;
1471
+
1472
+ /** Dates will be converted to this format to display in UI.<br/> */
1473
+ dateFormatUIDisplay?: string;
1474
+
1475
+ /** Dates will be converted to this format to display in UI.<br/> */
1476
+ dateTimeZoneUIDisplay?: string;
1477
+
1478
+ // calculated property
1479
+ filterType?: EDBMasterConfigFilterType;
1480
+ }
1481
+
1482
+ export interface IDBMasterCustomActionButton {
1483
+ /** So parent can identify which custom action button clicked. */
1484
+ actionName: string;
1485
+
1486
+ /** ex : pi pi-check. https://primeng.org/icons */
1487
+ cssClass: string,
1488
+
1489
+ /** Give style object in angular style. */
1490
+ style?: any;
1491
+
1492
+ /**
1493
+ * If provided, it will ask for confirmation with this message.<br/>
1494
+ * Below variables are available<br/>
1495
+ * rowData = entire row object.<br/>
1496
+ * message = Assign your custom confirmation message to this variable.<br/>
1497
+ * ex: confirmationMessageScript: "message = `Do you want to approve ${rowData.name}?`",
1498
+ *
1499
+ * */
1500
+ confirmationMessageScript?: string;
1501
+ }
1502
+
1503
+ export interface IDBMasterTopLevelCustomActionButton extends Omit<IDBMasterCustomActionButton, 'cssClass'> {
1504
+ /** custom CSS class to assign to button */
1505
+ cssClass?: string,
1506
+
1507
+ /** Give label to button */
1508
+ label?: string;
1509
+
1510
+ /** Default: info */
1511
+ severity?: 'contrast' | 'danger' | 'help' | 'info' | 'primary' | 'secondary' | 'success' | 'warning';
1512
+
1513
+ /** ex : pi pi-check https://primeng.org/icons */
1514
+ icon?: string;
1515
+
1516
+ /** Default: true, if false it will be enabled even if no row selected in grid. */
1517
+ isDependentOnGridSelection?: boolean;
1518
+ }
1519
+
1401
1520
  export interface IDBMasterConfigGridFilterOfField {
1402
1521
  matchMode: EDBMasterMatchMode;
1403
1522
  value: string;
@@ -1409,6 +1528,16 @@ export interface IDBMasterConfigOperation {
1409
1528
  /** Applicable for add button only. */
1410
1529
  label?: string;
1411
1530
  cssClass?: string;
1531
+
1532
+ apiCallOverrides?: IDBMasterAPICallOverrides;
1533
+ }
1534
+
1535
+ export interface IDBMasterAPICallOverrides {
1536
+ url: string;
1537
+ headers?: any;
1538
+ method?: 'POST';
1539
+ body?: any;
1540
+ pkField?: string;
1412
1541
  }
1413
1542
 
1414
1543
  export enum EDBMasterMatchMode {
@@ -1438,7 +1567,7 @@ export interface IDBMasterConfigGridField {
1438
1567
  /** Default false, it will format dates in 'dd-MM-yyyy hh:mm:ss a' automatically if 'dateTimeFormat' is not provided. */
1439
1568
  autoFormatDate?: boolean;
1440
1569
 
1441
- /** Default : browser timezone. Dates will be converted into this timezone before sending to database query. */
1570
+ /** Dates will be converted into this timezone before sending to database query. */
1442
1571
  dateTimeZone?: string;
1443
1572
 
1444
1573
  /** Default : 'dd-MM-yyyy hh:mm:ss a' . System is using date-fns formats to format date object. */
@@ -1446,6 +1575,33 @@ export interface IDBMasterConfigGridField {
1446
1575
 
1447
1576
  /** Default : false, if true sorting will be enabled for this field. */
1448
1577
  enableSorting?: boolean;
1578
+
1579
+ dataSource?: 'db_data';
1580
+ dbData?: {
1581
+ instance?: string;
1582
+ database?: string;
1583
+ collection?: string;
1584
+ pkField?: string;
1585
+ displayField: string;
1586
+
1587
+ /** if select is provided, it will get those data. Make sure displayField is included in it. */
1588
+ select?: any;
1589
+ };
1590
+
1591
+ /** ex: 200px */
1592
+ width?: string;
1593
+
1594
+ /** Give style object in angular style. */
1595
+ headerStyle?: any;
1596
+
1597
+ /** custom CSS class to assign */
1598
+ headerCssClass?: string,
1599
+
1600
+ /** Give style object in angular style. */
1601
+ dataCellStyle?: any;
1602
+
1603
+ /** custom CSS class to assign */
1604
+ dataCellCssClass?: string,
1449
1605
  }
1450
1606
 
1451
1607
  /** For internal use only. */
@@ -1468,10 +1624,20 @@ export enum EDBMasterConfigFilterType {
1468
1624
 
1469
1625
  export interface IDBMasterConfigFormField {
1470
1626
  label: string;
1627
+
1628
+ /** This text will be displayed under control in small. HTML supported. */
1629
+ helpText?: string;
1630
+
1471
1631
  path: string;
1472
1632
  control: EDBMasterFormControl;
1633
+ disabled?: boolean;
1634
+
1635
+ validations?: Pick<IPropertyValidation, 'required'>;
1636
+ validationErrors?: {
1637
+ required: string;
1638
+ };
1473
1639
 
1474
- // gridSettings?: IDBMasterConfig;
1640
+ gridSettings?: IDBMasterConfig;
1475
1641
 
1476
1642
  textAreaSettings?: {
1477
1643
  rows?: number;
@@ -1503,6 +1669,9 @@ export interface IDBMasterConfigFormField {
1503
1669
  /** it will use used when dataSource is 'static_data'. */
1504
1670
  staticData?: any[]; // { label: string; value: any; }[] works default.
1505
1671
 
1672
+ /**
1673
+ * it can pickup IDB values from schema also.
1674
+ */
1506
1675
  dbData?: Partial<Pick<ICollectionIdentity, 'instance' | 'database' | 'collection' | 'table'>
1507
1676
  & Pick<IQueryFormat, 'find' | 'select' | 'limit'>>;
1508
1677
 
@@ -1526,7 +1695,19 @@ export interface IDBMasterConfigFormField {
1526
1695
  virtualScroll?: boolean;
1527
1696
 
1528
1697
  jsCode?: {
1529
- appendTo: 'onceDropdownDataLoaded',
1698
+ /**
1699
+ * modifyDropdownRequest = It will run before hitting API call. So we can do whatever we want.<br/>
1700
+ * onceDropdownDataLoaded = Execute code when dropdown data is loaded.<br/>
1701
+ *
1702
+ * Available variables:<br/>
1703
+ * formData: any = Entire form object<br/>
1704
+ * column: IDBMasterConfigFormField = Configuration of that form column<br/>
1705
+ * allDropdownDataMap: {[path: string]: any[]} = Map of all dropdown data<br/>
1706
+ * dropdownData: any[] = Latest loaded dropdown data<br/>
1707
+ * reloadDropdownsOfPath: string[] = Add path to this variable to reload its dropdown data.<br/>
1708
+ * globalData: any = User will send it using SET_GLOBAL_DATA_TO_USE_IN_ANY_SCRIPT event from parent.
1709
+ */
1710
+ appendTo: EDBMasterDropdownAppendTo,
1530
1711
  /**
1531
1712
  * // dropdownData is available to use.
1532
1713
  *
@@ -1545,7 +1726,10 @@ export interface IDBMasterConfigFormField {
1545
1726
  *
1546
1727
  */
1547
1728
  code: string,
1729
+
1548
1730
  }[],
1731
+
1732
+ addNewFormConfig?: IDBMasterConfig;
1549
1733
  };
1550
1734
 
1551
1735
  autocompleteSettings?: {
@@ -1577,9 +1761,30 @@ export interface IDBMasterConfigFormField {
1577
1761
 
1578
1762
  /** Maximum file size allowed in bytes. Default : 10000000 (10MB) */
1579
1763
  maxFileSize?: number;
1764
+ };
1765
+
1766
+ dividerSettings?: {
1767
+ align?: 'center' | 'left' | 'right' | 'bottom' | 'top';
1768
+ type?: 'dashed' | 'dotted' | 'solid';
1769
+ dividerText?: string;
1770
+ style?: any;
1580
1771
  }
1581
1772
  }
1582
1773
 
1774
+ export enum EDBMasterDropdownAppendTo {
1775
+ modifyDropdownRequest = 'modifyDropdownRequest',
1776
+ onceDropdownDataLoaded = 'onceDropdownDataLoaded',
1777
+ }
1778
+
1779
+ export enum EDBMasterConfigAppendTo {
1780
+ oncePageLoad = 'oncePageLoad',
1781
+ gridRender = 'gridRender',
1782
+ modifyGridRequest = 'modifyGridRequest',
1783
+ preSaveAndEdit = 'preSaveAndEdit',
1784
+ beforeSaveModalOpen = 'beforeSaveModalOpen',
1785
+ beforeEditModalOpen = 'beforeEditModalOpen',
1786
+ }
1787
+
1583
1788
  export enum EDBMasterFormControl {
1584
1789
  input = 'input',
1585
1790
  password = 'password',
@@ -1589,10 +1794,58 @@ export enum EDBMasterFormControl {
1589
1794
  color_picker = 'color_picker',
1590
1795
  dropdown = 'dropdown',
1591
1796
  file_upload = 'file_upload',
1592
- // grid = 'grid',
1797
+ grid = 'grid',
1798
+ divider = 'divider',
1593
1799
  // Save is working for editor but setting data is not working. PrimeNG has bug in it.
1594
1800
  // editor = 'editor',
1595
1801
  // auto_complete = 'auto_complete',
1596
1802
  }
1597
1803
 
1804
+ export interface IDBMasterMessageFromIframeToParent {
1805
+ fromDBMaster: string;
1806
+ eventType: IDBMasterEventFromIframeToParent;
1807
+ eventData: any;
1808
+ }
1809
+
1810
+ export interface IDBMasterMessageFromParentToIframe {
1811
+ eventType: IDBMasterEventFromParentToIframe;
1812
+ eventData: any;
1813
+ }
1814
+
1815
+ export enum IDBMasterEventFromIframeToParent {
1816
+ PAGE_READY = 'PAGE_READY',
1817
+ RECORD_SAVED = 'RECORD_SAVED',
1818
+ RECORDS_IMPORTED = 'RECORDS_IMPORTED',
1819
+ RECORD_UPDATED = 'RECORD_UPDATED',
1820
+ RECORD_DELETED = 'RECORD_DELETED',
1821
+ MANY_RECORD_DELETED = 'MANY_RECORD_DELETED',
1822
+ GRID_EXPORTED = 'GRID_EXPORTED',
1823
+ GRID_REFRESHED = 'GRID_REFRESHED',
1824
+ ADD_NEW_BUTTON_CLICKED = 'ADD_NEW_BUTTON_CLICKED',
1825
+ CUSTOM_ACTION_BUTTON_CLICKED = 'CUSTOM_ACTION_BUTTON_CLICKED',
1826
+ DROPDOWN_ADD_NEW_RECORD_SAVED = 'DROPDOWN_ADD_NEW_RECORD_SAVED',
1827
+ }
1828
+
1829
+ export enum IDBMasterEventFromParentToIframe {
1830
+ TRIGGER_ADD_NEW_BUTTON_CLICK = 'TRIGGER_ADD_NEW_BUTTON_CLICK',
1831
+ TRIGGER_REFRESH_BUTTON_CLICK = 'TRIGGER_REFRESH_BUTTON_CLICK',
1832
+ DATA_TO_APPEND_IN_GRID_LOAD_FIND_QUERY = 'DATA_TO_APPEND_IN_GRID_LOAD_FIND_QUERY',
1833
+ DATA_TO_APPEND_IN_RECORD_SAVE_API_PAYLOAD = 'DATA_TO_APPEND_IN_RECORD_SAVE_API_PAYLOAD',
1834
+ DATA_TO_APPEND_IN_RECORD_UPDATE_API_PAYLOAD = 'DATA_TO_APPEND_IN_RECORD_UPDATE_API_PAYLOAD',
1835
+ SET_GLOBAL_DATA_TO_USE_IN_ANY_SCRIPT = 'SET_GLOBAL_DATA_TO_USE_IN_ANY_SCRIPT',
1836
+ PARENT_READY = 'PARENT_READY', // parent will send message when it is ready with grid conditions.
1837
+ }
1838
+
1839
+ /**
1840
+ * If you want to hide custom action provide below property
1841
+ * ____hide_actionName = true
1842
+ */
1843
+ export enum IDBMasterSpecialRowProperties {
1844
+ /** if this property found in row with value true, it will hide delete button for that row even if that is supported. */
1845
+ ____hide_delete_button = '____hide_delete_button',
1846
+
1847
+ /** if this property found in row with value true, it will hide edit button for that row even if that is supported. */
1848
+ ____hide_edit_button = '____hide_edit_button',
1849
+ }
1850
+
1598
1851
  // ==== DB Master configurations End ====