Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

124 řádky
4.5 KiB

  1. import {Const} from '../../utils/const';
  2. import {IGridSelectItem} from './grid-select-item';
  3. export class GridSelectFactory {
  4. /**
  5. * Returns select item for grid
  6. */
  7. static getGridSelect(headerName: string, field: string, editable: boolean, values: any[], itemKey: string,
  8. itemValueKeys: string[], mandatory: boolean = true, relatesOnDgField: string = null,
  9. headerClass: string = null, pinned: boolean = false, cellClass: any = null,
  10. exclusive: boolean = false, exclusiveCompareData: any = null, exclusiveCompareDataKey: string = null): {} {
  11. if (null !== relatesOnDgField && exclusive) {
  12. // NOTE: This is not allowed for now, maybe needed in future
  13. throw new Error('Select can be either relative or exclusive');
  14. }
  15. const res = {
  16. headerName,
  17. field,
  18. headerClass,
  19. pinned,
  20. editable,
  21. cellClass: null === cellClass ?? (editable ? '' : Const.CSS_NO_EDIT),
  22. cellRenderer: 'gridSelectRenderer',
  23. cellEditor: 'gridSelectEditor',
  24. cellEditorParams: {
  25. values: null === relatesOnDgField && !exclusive ? GridSelectFactory.getGridSelectItems(values, itemKey, itemValueKeys, mandatory) : values,
  26. itemKey,
  27. itemValueKeys,
  28. mandatory,
  29. relatesOnDgField,
  30. exclusive,
  31. exclusiveCompareData,
  32. exclusiveCompareDataKey
  33. }
  34. };
  35. if (mandatory) {
  36. res['cellClassRules'] = {
  37. error(params) {
  38. return params.value == null;
  39. }
  40. };
  41. }
  42. return res;
  43. }
  44. /**
  45. * Returns select item for grid without renderer and editor
  46. */
  47. static getGridSelectForSelectors(headerName: string, field: string, editable: boolean, values: any[], itemKey: string,
  48. itemValueKeys: string[], mandatory: boolean = true, relatesOnDgField: string = null,
  49. headerClass: string = null, pinned: boolean = false, cellClass: any = null,
  50. exclusive: boolean = false, exclusiveCompareData: any = null, exclusiveCompareDataKey: string = null): {} {
  51. const res: {} = GridSelectFactory.getGridSelect(
  52. headerName, field, editable, values, itemKey, itemValueKeys, mandatory, relatesOnDgField,
  53. headerClass, pinned, cellClass, exclusive, exclusiveCompareData, exclusiveCompareDataKey
  54. );
  55. delete res['cellRenderer'];
  56. delete res['cellEditor'];
  57. return res;
  58. }
  59. /**
  60. * Returns array of grid select items
  61. */
  62. static getGridSelectItems(objArray: any[], key: string, valueKeys: string[], mandatory: boolean = true): IGridSelectItem[] {
  63. const res: IGridSelectItem[] = [];
  64. if (!mandatory) {
  65. // Add empty item (null value)
  66. res.push(GridSelectFactory.getGridSelectItem({key: null, value: '-'}, 'key', valueKeys, true));
  67. }
  68. objArray.forEach(item => {
  69. res.push(GridSelectFactory.getGridSelectItem(item, key, valueKeys));
  70. });
  71. return res;
  72. }
  73. /**
  74. * Returns single grid select item
  75. */
  76. static getGridSelectItem(obj: any, key: string, valueKeys: string[], isNullItem: boolean = false): IGridSelectItem {
  77. if (!obj.hasOwnProperty(key)) {
  78. throw new Error('GridFactory: Key not found: ' + key);
  79. }
  80. let gridItem: {} = {};
  81. if (!isNullItem) {
  82. for (const item of valueKeys) {
  83. if (!obj.hasOwnProperty(key) || !obj.hasOwnProperty(item)) {
  84. throw new Error('GridFactory: Value not found: ' + item);
  85. }
  86. }
  87. gridItem = {
  88. key: obj[key],
  89. value: GridSelectFactory.getGridSelectItemValue(obj, valueKeys)
  90. };
  91. } else {
  92. // Empty placeholder item
  93. gridItem = {
  94. key: obj.key,
  95. value: obj.value
  96. };
  97. }
  98. return gridItem as IGridSelectItem;
  99. }
  100. /**
  101. * Returns displayed value of grid item
  102. */
  103. static getGridSelectItemValue(obj: any, valueKeys: string[]): string {
  104. let value = '';
  105. for (let i = 0; i < valueKeys.length; i++) {
  106. value += obj[valueKeys[i]];
  107. value += i < (valueKeys.length - 1) ? ' - ' : '';
  108. }
  109. return value;
  110. }
  111. }