@tripup-company/element-ui-extended 0.0.74 → 0.0.75

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 (26) hide show
  1. package/dist/element-ui-extended.common.js +355 -113
  2. package/dist/element-ui-extended.common.js.map +1 -1
  3. package/dist/element-ui-extended.css +1 -1
  4. package/dist/element-ui-extended.umd.js +355 -113
  5. package/dist/element-ui-extended.umd.js.map +1 -1
  6. package/dist/element-ui-extended.umd.min.js +2 -2
  7. package/dist/element-ui-extended.umd.min.js.map +1 -1
  8. package/dist/examples/models/contact-model.d.ts +1 -0
  9. package/dist/examples/models/contact-model.d.ts.map +1 -1
  10. package/dist/src/components/GenericFilters/filter-convertor.d.ts.map +1 -1
  11. package/dist/src/components/GenericFilters/filter-factory.d.ts +4 -0
  12. package/dist/src/components/GenericFilters/filter-factory.d.ts.map +1 -1
  13. package/dist/src/components/GenericFilters/filters/bool-filter.d.ts +7 -0
  14. package/dist/src/components/GenericFilters/filters/bool-filter.d.ts.map +1 -0
  15. package/dist/src/components/GenericFilters/filters/in-array-of-object.d.ts +7 -0
  16. package/dist/src/components/GenericFilters/filters/in-array-of-object.d.ts.map +1 -0
  17. package/package.json +1 -1
  18. package/src/components/CompositeTable/index.vue +4 -2
  19. package/src/components/EditableField/index.vue +116 -38
  20. package/src/components/GenericFilters/FilterRow.vue +56 -24
  21. package/src/components/GenericFilters/index.vue +19 -11
  22. package/src/components/NewField/index.vue +63 -16
  23. package/src/components/PartColumn/EditColumn.vue +4 -0
  24. package/src/components/PartColumn/NewColumn.vue +4 -0
  25. package/src/repositories/base-repository.ts +5 -5
  26. package/src/styles/index.scss +0 -215
@@ -15,6 +15,7 @@ export declare class ContactModel extends BaseModel implements Icontact {
15
15
  zip_code: string;
16
16
  street?: string;
17
17
  country?: string;
18
+ destination?: any;
18
19
  constructor(data?: any[]);
19
20
  }
20
21
  //# sourceMappingURL=contact-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contact-model.d.ts","sourceRoot":"","sources":["../../../examples/models/contact-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAEpD,qBAAa,YAAa,SAAQ,SAAU,YAAW,QAAQ;IAC7D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEL,IAAI,QAAK;CAGtB"}
1
+ {"version":3,"file":"contact-model.d.ts","sourceRoot":"","sources":["../../../examples/models/contact-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAEpD,qBAAa,YAAa,SAAQ,SAAU,YAAW,QAAQ;IAC7D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,GAAG,CAAC;gBAEN,IAAI,QAAK;CAGtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter-convertor.d.ts","sourceRoot":"","sources":["../../../../src/components/GenericFilters/filter-convertor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,eAAe;IAGlC,WAAW,CAAC,MAAM,KAAA;;;;CAgBnB"}
1
+ {"version":3,"file":"filter-convertor.d.ts","sourceRoot":"","sources":["../../../../src/components/GenericFilters/filter-convertor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,eAAe;IAGlC,WAAW,CAAC,MAAM,KAAA;;;;CAiBnB"}
@@ -12,10 +12,12 @@ import { IsNotNullFilter } from "./filters/is-not-null-filter";
12
12
  import { BetweenFilter } from "./filters/between-filter";
13
13
  import { InFilter } from "./filters/in-filter";
14
14
  import { InObject } from "./filters/in-object";
15
+ import { InArrayOfObject } from "./filters/in-array-of-object";
15
16
  import { InArray } from "./filters/in-array";
16
17
  import { WeekDayFilter } from "./filters/week-day-filter";
17
18
  import { YoungerWeekFilter } from "./filters/younger-week-filter";
18
19
  import { GroupByFilter } from "./filters/group-by-filter";
20
+ import { BoolFilter } from "./filters/bool-filter";
19
21
  export default class FilterFactory {
20
22
  static getRegisteredFilters(): {
21
23
  equal: (field: any, value: any) => EqualFilter;
@@ -34,6 +36,8 @@ export default class FilterFactory {
34
36
  group_by_fields: (field: string, value: string) => GroupByFilter;
35
37
  in_object: (field: string, value: string) => InObject;
36
38
  in_array: (field: string, value: string) => InArray;
39
+ in_array_of_object: (field: string, value: string) => InArrayOfObject;
40
+ bool: (field: any, value: any) => BoolFilter;
37
41
  };
38
42
  createFilter(field: any, condition: Condition): BaseFilter;
39
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filter-factory.d.ts","sourceRoot":"","sources":["../../../../src/components/GenericFilters/filter-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,aAAa;WAClB,oBAAoB;uBAEf,GAAG,SAAS,GAAG;2BACX,GAAG,SAAS,GAAG;0BAChB,GAAG,SAAS,GAAG;8BACX,GAAG,SAAS,GAAG;yBAEpB,GAAG,SAAS,GAAG;6BACX,GAAG,SAAS,GAAG;4BAEhB,GAAG,SAAS,GAAG;0BACjB,GAAG,SAAS,GAAG;6BACZ,GAAG,SAAS,GAAG;yBAEnB,MAAM,SAAS,MAAM;oBAE3B,MAAM,SAAQ,MAAM;yBACf,MAAM,SAAQ,MAAM;+BACd,MAAM,SAAQ,MAAM;iCAClB,MAAM,SAAQ,MAAM;2BAC1B,MAAM,SAAQ,MAAM;0BACrB,MAAM,SAAQ,MAAM;;IAGlC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU;CAQlE"}
1
+ {"version":3,"file":"filter-factory.d.ts","sourceRoot":"","sources":["../../../../src/components/GenericFilters/filter-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,aAAa;WAClB,oBAAoB;uBAEf,GAAG,SAAS,GAAG;2BACX,GAAG,SAAS,GAAG;0BAChB,GAAG,SAAS,GAAG;8BACX,GAAG,SAAS,GAAG;yBAEpB,GAAG,SAAS,GAAG;6BACX,GAAG,SAAS,GAAG;4BAEhB,GAAG,SAAS,GAAG;0BACjB,GAAG,SAAS,GAAG;6BACZ,GAAG,SAAS,GAAG;yBAEnB,MAAM,SAAS,MAAM;oBAE3B,MAAM,SAAQ,MAAM;yBACf,MAAM,SAAQ,MAAM;+BACd,MAAM,SAAQ,MAAM;iCAClB,MAAM,SAAQ,MAAM;2BAC1B,MAAM,SAAQ,MAAM;0BACrB,MAAM,SAAQ,MAAM;oCACV,MAAM,SAAQ,MAAM;sBACjC,GAAG,SAAS,GAAG;;IAG1B,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU;CAQlE"}
@@ -0,0 +1,7 @@
1
+ import { BaseFilter } from "./base-filter";
2
+ import { FilterResponse } from "./interfaces/filter-response";
3
+ export declare class BoolFilter extends BaseFilter {
4
+ protected operator: string;
5
+ applyFilter(): FilterResponse;
6
+ }
7
+ //# sourceMappingURL=bool-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bool-filter.d.ts","sourceRoot":"","sources":["../../../../../src/components/GenericFilters/filters/bool-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAE5D,qBAAa,UAAW,SAAQ,UAAU;IACxC,SAAS,CAAC,QAAQ,SAAU;IACrB,WAAW,IAAI,cAAc;CAMrC"}
@@ -0,0 +1,7 @@
1
+ import { BaseFilter } from "./base-filter";
2
+ import { FilterResponse } from "./interfaces/filter-response";
3
+ export declare class InArrayOfObject extends BaseFilter {
4
+ protected operator: string;
5
+ applyFilter(): FilterResponse;
6
+ }
7
+ //# sourceMappingURL=in-array-of-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-array-of-object.d.ts","sourceRoot":"","sources":["../../../../../src/components/GenericFilters/filters/in-array-of-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAE5D,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAS,CAAC,QAAQ,SAAwB;IACnC,WAAW,IAAI,cAAc;CAMrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tripup-company/element-ui-extended",
3
- "version": "0.0.74",
3
+ "version": "0.0.75",
4
4
  "main": "./dist/element-ui-extended.umd.js",
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve && tsc --emitDeclarationOnly",
@@ -244,7 +244,8 @@ export default {
244
244
  handleFilterChange() {
245
245
  this.handleCurrentChange(1);
246
246
  },
247
- handleApplyFilter() {
247
+ handleApplyFilter(search) {
248
+ this.search = search;
248
249
  this.listQueryService.updateListQuery({ search: this.search });
249
250
  this.handleFilterChange();
250
251
  },
@@ -258,7 +259,8 @@ export default {
258
259
  this.listQueryService.updateListQuery({ search: {} });
259
260
  this.handleFilterChange({});
260
261
  },
261
- handleApplyTopFilter() {
262
+ handleApplyTopFilter(topSearch) {
263
+ this.topSearch = topSearch;
262
264
  this.listQueryService.updateListQuery({ topSearch: this.topSearch });
263
265
  this.handleFilterChange();
264
266
  },
@@ -1,19 +1,28 @@
1
1
  <template>
2
2
  <div class="editable-cell">
3
- <div
4
- v-if="!isEditMode"
5
- class="editable-cell__text"
6
- >
3
+ <div v-if="!isEditMode" class="editable-cell__text">
7
4
  <slot class="editable-cell__text__slot">
8
5
  <el-col :span="23">
9
- <div v-if="value && ['input', 'textarea', 'number'].includes(type)" v-html="value" />
6
+ <div
7
+ v-if="value && ['input', 'textarea', 'number'].includes(type)"
8
+ v-html="value"
9
+ />
10
10
  <div v-else-if="type === 'checkbox'">
11
11
  <i v-if="value === true" class="el-icon-check"></i>
12
12
  <div v-else> {{ placeholder ? placeholder : '-' }}</div>
13
13
  </div>
14
- <el-date-picker v-else-if="type === 'date-picker'" v-model="value" type="date" format="dd.MM.yyyy" value-format="yyyy-MM-dd" disabled placeholder="Pick a day" class="w-100 el-date-transparent" />
14
+ <el-date-picker
15
+ v-else-if="type === 'date-picker'"
16
+ v-model="value"
17
+ type="date"
18
+ :format="format"
19
+ :value-format="valueFormat"
20
+ disabled
21
+ placeholder="Pick a day"
22
+ class="w-100 el-date-transparent"
23
+ />
15
24
  <div v-else-if="isSelectValue" v-html="createList()" />
16
- <div v-else> {{ placeholder ? placeholder : '-' }}</div>
25
+ <div v-else>{{ placeholder ? placeholder : "-" }}</div>
17
26
  </el-col>
18
27
  <el-col v-if="!readonly" :span="1">
19
28
  <el-button
@@ -30,16 +39,42 @@
30
39
  </div>
31
40
  <div v-if="isEditMode" class="editable-cell__editor">
32
41
  <el-checkbox v-if="type === 'checkbox'" v-model="model" />
33
- <el-input-number v-else-if="type === 'number'" :controls="false" v-model="model" :precision="precision" class="w-100" />
34
- <el-select v-else-if="type === 'select'" v-model="model" :span="24" clearable :filterable="filterable" :remote="remote" :remote-method="remoteMethodHandler" placeholder="Select" :multiple="selectMultiple" class="w-100">
42
+ <el-input-number
43
+ v-else-if="type === 'number'"
44
+ :controls="false"
45
+ v-model="model"
46
+ :precision="precision"
47
+ class="w-100"
48
+ />
49
+ <el-select
50
+ v-else-if="type === 'select'"
51
+ v-model="model"
52
+ :span="24"
53
+ clearable
54
+ :filterable="filterable"
55
+ :remote="remote"
56
+ :remote-method="remoteMethodHandler"
57
+ placeholder="Select"
58
+ :value-key="objectValueKey"
59
+ :multiple="selectMultiple"
60
+ class="w-100"
61
+ >
35
62
  <el-option
36
63
  v-for="item in selectListLocal"
37
64
  :key="item[selectKey]"
38
65
  :label="item[selectLabel]"
39
- :value="item[selectValue]"
66
+ :value="selectJson ? item : item[selectValue]"
40
67
  />
41
68
  </el-select>
42
- <el-date-picker v-else-if="type === 'date-picker'" v-model="model" format="dd.MM.yyyy" value-format="yyyy-MM-dd" type="date" placeholder="Pick a day" class="w-100" />
69
+ <el-date-picker
70
+ v-else-if="type === 'date-picker'"
71
+ v-model="model"
72
+ :format="format"
73
+ :value-format="valueFormat"
74
+ type="date"
75
+ placeholder="Pick a day"
76
+ class="w-100"
77
+ />
43
78
  <el-input
44
79
  v-else
45
80
  v-model="model"
@@ -49,29 +84,44 @@
49
84
  class="editable-cell__input"
50
85
  />
51
86
  <el-button-group class="editable-cell__actions">
52
- <el-button v-if="isEditMode" type="success" size="mini" circle plain icon="el-icon-check" @click="handleSave" />
53
- <el-button v-if="isEditMode" type="warning" size="mini" circle plain icon="el-icon-close" @click="handleClose" />
87
+ <el-button
88
+ v-if="isEditMode"
89
+ type="success"
90
+ size="mini"
91
+ circle
92
+ plain
93
+ icon="el-icon-check"
94
+ @click="handleSave"
95
+ />
96
+ <el-button
97
+ v-if="isEditMode"
98
+ type="warning"
99
+ size="mini"
100
+ circle
101
+ plain
102
+ icon="el-icon-close"
103
+ @click="handleClose"
104
+ />
54
105
  </el-button-group>
55
106
  </div>
56
107
  </div>
57
108
  </template>
58
109
 
59
110
  <script>
60
-
61
111
  export default {
62
- name: 'EditableField',
112
+ name: "EditableField",
63
113
  model: {
64
- props: 'value',
65
- event: 'input',
114
+ props: "value",
115
+ event: "input",
66
116
  },
67
117
  props: {
68
118
  field: {
69
119
  type: [String, Boolean],
70
- default: '',
120
+ default: "",
71
121
  },
72
122
  value: {
73
123
  type: [String, Boolean, Date, Number, Array],
74
- default: '',
124
+ default: "",
75
125
  },
76
126
  filterable: {
77
127
  type: Boolean,
@@ -79,11 +129,11 @@ export default {
79
129
  },
80
130
  type: {
81
131
  type: String,
82
- default: 'input',
132
+ default: "input",
83
133
  },
84
134
  placeholder: {
85
135
  type: String,
86
- default: '',
136
+ default: "",
87
137
  },
88
138
  selectList: {
89
139
  type: Array,
@@ -93,17 +143,25 @@ export default {
93
143
  type: Boolean,
94
144
  default: false,
95
145
  },
146
+ objectValueKey: {
147
+ type: String,
148
+ default: "value",
149
+ },
150
+ selectJson: {
151
+ type: Boolean,
152
+ default: false,
153
+ },
96
154
  selectKey: {
97
155
  type: String,
98
- default: '',
156
+ default: "value",
99
157
  },
100
158
  selectLabel: {
101
159
  type: String,
102
- default: '',
160
+ default: "name",
103
161
  },
104
162
  selectValue: {
105
163
  type: String,
106
- default: '',
164
+ default: "",
107
165
  },
108
166
  precision: {
109
167
  type: Number,
@@ -121,18 +179,26 @@ export default {
121
179
  type: Boolean,
122
180
  default: false,
123
181
  },
182
+ format: {
183
+ type: String,
184
+ default: "dd.MM.yyyy",
185
+ },
186
+ valueFormat: {
187
+ type: String,
188
+ default: "yyyy-MM-dd",
189
+ },
124
190
  },
125
191
  data: () => {
126
192
  return {
127
193
  isEditMode: false,
128
- model: '',
194
+ model: "",
129
195
  selectListLocal: [],
130
196
  };
131
197
  },
132
198
  computed: {
133
199
  isSelectValue: {
134
200
  get() {
135
- return (this.value || this.value === false) && this.type === 'select';
201
+ return (this.value || this.value === false) && this.type === "select";
136
202
  },
137
203
  },
138
204
  remote: {
@@ -154,43 +220,55 @@ export default {
154
220
  },
155
221
  methods: {
156
222
  createList() {
157
- let label = '';
223
+ let label = "";
158
224
  if (this.selectMultiple) {
159
225
  if (this.value.length) {
160
- this.value.forEach(element => {
161
- label = label + ' ' + this.selectList.find(({ value }) => value === element).name;
226
+ let values = [];
227
+ this.value.forEach((element) => {
228
+ const compareValue = this.selectJson ? element[this.selectKey] : element;
229
+ const labArray = this.selectList.find(
230
+ x => x[this.selectKey] === compareValue
231
+ );
232
+ if (labArray && labArray[this.selectLabel]) {
233
+ values.push(labArray[this.selectLabel]);
234
+ }
235
+ label = values.join("; ");
162
236
  });
163
237
  } else {
164
- label = '-';
238
+ label = "-";
165
239
  }
166
240
  } else if (this.selectList.length) {
167
- label = this.selectList.find(x =>
168
- x[this.selectKey] === this.value)[this.selectLabel];
241
+ label = this.selectList.find((x) => x[this.selectKey] === this.value)[
242
+ this.selectLabel
243
+ ];
169
244
  } else {
170
245
  label = this.value;
171
246
  }
172
247
  return label;
173
248
  },
174
249
  handleDoubleClick() {
175
- this.$emit('editable:open');
250
+ this.$emit("editable:open");
176
251
  this.isEditMode = true;
177
252
  this.model = this.value;
178
253
  },
179
254
  handleClose() {
180
255
  this.isEditMode = false;
181
- this.$emit('editable:close');
256
+ this.$emit("editable:close");
182
257
  },
183
258
  async remoteCall(query) {
184
259
  this.loading = true;
185
- const response = await this.remoteMethod.all({ search: this.selectLabel + ':' + query, searchFields: this.selectLabel + ':like' });
260
+ const response = await this.remoteMethod.all({
261
+ search: this.selectLabel + ":" + query,
262
+ searchFields: this.selectLabel + ":like",
263
+ });
186
264
  this.selectListLocal = response.data;
187
265
  this.loading = false;
188
266
  },
189
267
  async handleSave() {
190
268
  this.isEditMode = false;
191
- this.$emit('editable:close');
192
- this.$emit('editable:save', { 'field': this.field, 'value': this.model });
193
- this.$emit('update:value', { 'field': this.field, 'value': this.model });
269
+ this.$emit("editable:close");
270
+ this.$emit("editable:save", { field: this.field, value: this.model });
271
+ this.$emit("update:value", { field: this.field, value: this.model });
194
272
  },
195
273
  },
196
274
  };
@@ -13,7 +13,7 @@
13
13
  :span="24"
14
14
  class="p-b-10"
15
15
  >
16
- <el-select v-model="search.operator" placeholder="Select">
16
+ <el-select v-model="searchLocal.operator" placeholder="Select">
17
17
  <el-option
18
18
  v-for="operator in operators"
19
19
  :key="operator.value"
@@ -25,12 +25,12 @@
25
25
  <el-col :span="24">
26
26
  <el-input
27
27
  v-if="column.type === 'string'"
28
- v-show="!isDisableInput(search.operator)"
29
- v-model="search.value"
28
+ v-show="!isDisableInput(searchLocal.operator)"
29
+ v-model="searchLocal.value"
30
30
  />
31
31
  <el-date-picker
32
32
  v-else-if="column.type === 'date'"
33
- v-model="search.value"
33
+ v-model="searchLocal.value"
34
34
  class="w-100"
35
35
  end-placeholder="To"
36
36
  format="dd.MM.yy"
@@ -44,13 +44,14 @@
44
44
  <el-select
45
45
  refs="select"
46
46
  v-else
47
- v-model="search.value"
47
+ v-model="searchLocal.value"
48
48
  :multiple="isMultiple"
49
49
  placeholder="Select"
50
50
  :filterable="filterable"
51
51
  :remote="remote"
52
52
  :remote-method="remoteMethodHandler"
53
53
  :loading="loading"
54
+ :value-key="objectValueKey"
54
55
  clearable
55
56
  @change="updateSearch"
56
57
  >
@@ -66,8 +67,8 @@
66
67
  </el-row>
67
68
  </template>
68
69
  <script>
69
- import { upperFirst } from 'lodash'
70
-
70
+ import { upperFirst } from "lodash";
71
+ import Vue from "vue";
71
72
  export default {
72
73
  props: {
73
74
  column: {
@@ -82,6 +83,10 @@ export default {
82
83
  return {};
83
84
  },
84
85
  },
86
+ name: {
87
+ type: String,
88
+ default: "",
89
+ },
85
90
  },
86
91
  data() {
87
92
  const boolValues = [
@@ -89,19 +94,27 @@ export default {
89
94
  { value: true, name: "true" },
90
95
  { value: false, name: "false" },
91
96
  ];
97
+ let selectValues = [];
98
+ if (this.column.selectList && this.column.selectList.length) {
99
+ selectValues = this.column.selectList;
100
+ } else if (this.search.selectList && this.search.selectList.length) {
101
+ selectValues = this.search.selectList;
102
+ } else if (this.column.type === "enum") {
103
+ selectValues = this.column.values;
104
+ } else {
105
+ selectValues = boolValues;
106
+ }
92
107
  return {
108
+ searchLocal: this.search,
93
109
  loading: false,
94
110
  selectKey: this.column.selectKey ?? "value",
95
111
  selectLabel: this.column.selectLabel ?? "name",
96
112
  selectValue: this.column.selectValue ?? "value",
97
113
  filterable: this.column.filterable ?? false,
114
+ objectValueKey: this.column.objectValueKey ?? "value",
115
+ selectJson: this.column.selectJson ?? false,
98
116
  remote: this.column.remote ?? false,
99
117
  remoteMethod: this.column.remoteMethod ?? null,
100
- selectListLocal: this.column.selectList
101
- ? this.column.selectList
102
- : this.column.type === "enum"
103
- ? this.column.values
104
- : boolValues,
105
118
  showFilter: this.search.operator !== "",
106
119
  stringOperators: [
107
120
  { value: "equal", label: "is equal" },
@@ -118,7 +131,9 @@ export default {
118
131
  enumOperatorsMultiple: [{ value: "in", label: "in" }],
119
132
  enumOperatorsInObject: [{ value: "in_object", label: "in_object" }],
120
133
  dateOperators: [{ value: "between", label: "between" }],
121
- boolOperators: [{ value: "equal", label: "is" }],
134
+ boolOperators: [{ value: "bool", label: "is" }],
135
+ selectListLocal: selectValues,
136
+
122
137
  };
123
138
  },
124
139
  computed: {
@@ -130,7 +145,12 @@ export default {
130
145
  break;
131
146
  case ("enum", "select"):
132
147
  if (this.column.operator) {
133
- operators = [{ value: this.column.operator, label: upperFirst(this.column.operator.replace('_', ' ')) }];
148
+ operators = [
149
+ {
150
+ value: this.column.operator,
151
+ label: upperFirst(this.column.operator.replace("_", " ")),
152
+ },
153
+ ];
134
154
  } else if (this.column.selectMultiple) {
135
155
  operators = this.enumOperatorsMultiple;
136
156
  } else {
@@ -161,26 +181,38 @@ export default {
161
181
  watch: {
162
182
  showFilter() {
163
183
  if (this.showFilter === false) {
164
- this.search.operator = "";
165
- this.search.value = "";
166
- } else if (this.search.operator === "" && this.operators.length === 1) {
167
- this.search.operator = this.operators[0].value;
184
+ this.searchLocal.operator = "";
185
+ this.searchLocal.value = "";
186
+ } else if (
187
+ this.searchLocal.operator === "" &&
188
+ this.operators.length === 1
189
+ ) {
190
+ this.searchLocal.operator = this.operators[0].value;
168
191
  }
169
192
  },
170
- search: {
193
+ search(newValue) {
194
+ if (newValue !== this.search) {
195
+ this.searchLocal = Object.assign({}, this.search);
196
+ }
197
+ },
198
+ searchLocal: {
171
199
  deep: true,
172
200
  handler() {
173
- if (this.search.operator == '') {
201
+ this.$emit("update:search", {
202
+ name: this.name,
203
+ value: this.searchLocal,
204
+ });
205
+ if (this.searchLocal.operator == "") {
174
206
  this.showFilter = false;
175
207
  }
176
- }
208
+ },
177
209
  },
178
210
  },
179
211
  methods: {
180
212
  isDisableInput(operator) {
181
213
  const disable = this.disabledInputOperations.includes(operator);
182
214
  if (disable) {
183
- this.search.value = "";
215
+ this.searchLocal.value = "";
184
216
  }
185
217
  return disable;
186
218
  },
@@ -191,7 +223,7 @@ export default {
191
223
  searchFields: this.selectLabel + ":like",
192
224
  });
193
225
  this.selectListLocal = response.data;
194
- this.search["selectList"] = response.data;
226
+ this.searchLocal["selectList"] = response.data;
195
227
  this.loading = false;
196
228
  },
197
229
  updateSearch(key) {
@@ -200,7 +232,7 @@ export default {
200
232
  for (const item of this.selectListLocal) {
201
233
  if (item[this.selectKey] === key) {
202
234
  obj[this.selectLabel] = item[this.selectLabel];
203
- this.search.selectList = [obj];
235
+ this.searchLocal.selectList = [obj];
204
236
  }
205
237
  }
206
238
  }
@@ -1,10 +1,12 @@
1
1
  <template>
2
2
  <el-card>
3
3
  <filter-row
4
- v-for="(column) in filters"
4
+ v-for="column in filters"
5
5
  :key="column.name"
6
+ :name="column.name"
6
7
  :column="column"
7
8
  :search="search[column.name]"
9
+ @search:upate="filterRowUpdate"
8
10
  />
9
11
  <el-button @click="applyFilter">Filter</el-button>
10
12
  <el-button @click="resetFilter">Reset filter</el-button>
@@ -16,15 +18,19 @@ import FilterRow from "./FilterRow";
16
18
  import FilterConverter from "./filter-convertor";
17
19
 
18
20
  export default {
19
- name: "GenericFilter",
21
+ name: "GenericFilter",
20
22
  props: {
21
23
  filters: {
22
24
  type: Array,
23
- default: () => { return {}}
25
+ default: () => {
26
+ return [];
27
+ },
24
28
  },
25
29
  search: {
26
30
  type: Object,
27
- default: () => { return {}}
31
+ default: () => {
32
+ return {};
33
+ },
28
34
  },
29
35
  },
30
36
  components: { FilterRow },
@@ -39,15 +45,17 @@ name: "GenericFilter",
39
45
  return this.filterConvertor.applyFilter(this.search);
40
46
  },
41
47
  applyFilter() {
42
- this.$emit('apply:filter', this.filterConvertor.applyFilter(this.search) );
48
+ console.log(this.search);
49
+ this.$emit("apply:filter", this.search);
43
50
  },
44
51
  resetFilter() {
45
- this.$emit('reset:filter', {});
52
+ this.$emit("reset:filter", {});
46
53
  },
47
- }
48
- }
54
+ filterRowUpdate(name, value) {
55
+ this.$set(this.search, name, value);
56
+ },
57
+ },
58
+ };
49
59
  </script>
50
60
 
51
- <style scoped>
52
-
53
- </style>
61
+ <style scoped></style>