@phoenix-cg/v-filters 0.1.16 → 0.2.0-beta.10
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/dist/v-filters.common.js +154 -78
- package/dist/v-filters.common.js.map +1 -1
- package/dist/v-filters.umd.js +154 -78
- package/dist/v-filters.umd.js.map +1 -1
- package/dist/v-filters.umd.min.js +1 -1
- package/dist/v-filters.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/VFilters.vue +71 -40
package/package.json
CHANGED
|
@@ -109,7 +109,7 @@ export default {
|
|
|
109
109
|
default: false
|
|
110
110
|
},
|
|
111
111
|
humanLink: {
|
|
112
|
-
type:
|
|
112
|
+
type: Object
|
|
113
113
|
},
|
|
114
114
|
editedOutside: {
|
|
115
115
|
type: Boolean,
|
|
@@ -122,12 +122,19 @@ export default {
|
|
|
122
122
|
fieldKey: {
|
|
123
123
|
type: [String, Number],
|
|
124
124
|
default: '1'
|
|
125
|
+
},
|
|
126
|
+
alwaysSendFields: {
|
|
127
|
+
type: Array,
|
|
128
|
+
default: () => []
|
|
129
|
+
},
|
|
130
|
+
paramsToInclude: {
|
|
131
|
+
type: Object,
|
|
132
|
+
default: () => ({})
|
|
125
133
|
}
|
|
126
134
|
},
|
|
127
135
|
data () {
|
|
128
136
|
return {
|
|
129
137
|
filters: {},
|
|
130
|
-
editedInside: false,
|
|
131
138
|
editedFields: []
|
|
132
139
|
}
|
|
133
140
|
},
|
|
@@ -135,6 +142,9 @@ export default {
|
|
|
135
142
|
edited () {
|
|
136
143
|
return this.editedInside || this.editedOutside
|
|
137
144
|
},
|
|
145
|
+
editedInside () {
|
|
146
|
+
return this.editedFields.length > 0
|
|
147
|
+
},
|
|
138
148
|
actionTitle () {
|
|
139
149
|
let title = this.notFoundTitle
|
|
140
150
|
if (this.count > 0) {
|
|
@@ -146,31 +156,41 @@ export default {
|
|
|
146
156
|
},
|
|
147
157
|
flatFilters () {
|
|
148
158
|
let filters = {}
|
|
159
|
+
const fieldsToInclude = [...this.editedFields, ...this.alwaysSendFields]
|
|
149
160
|
Object.keys(this.filters).forEach(name => {
|
|
150
|
-
if (
|
|
161
|
+
if (fieldsToInclude.includes(name)) {
|
|
151
162
|
const filtersValue = this.filters[name]
|
|
152
163
|
const wrappedValue = getType(filtersValue) === 'Object' ? [filtersValue] : filtersValue
|
|
153
|
-
filters[name] = wrappedValue.map(value => value._id
|
|
164
|
+
filters[name] = wrappedValue.map(value => value._id || value)
|
|
154
165
|
}
|
|
155
166
|
})
|
|
156
167
|
return filters
|
|
157
168
|
}
|
|
158
169
|
},
|
|
170
|
+
watch: {
|
|
171
|
+
fields: {
|
|
172
|
+
deep: true,
|
|
173
|
+
handler () {
|
|
174
|
+
this.setFilters(true)
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
paramsToInclude () {
|
|
178
|
+
this.setUrlParams()
|
|
179
|
+
}
|
|
180
|
+
},
|
|
159
181
|
created () {
|
|
160
182
|
this.setFilters()
|
|
161
183
|
},
|
|
162
184
|
methods: {
|
|
163
|
-
setFilters (
|
|
164
|
-
let params =
|
|
165
|
-
let editedInside = false
|
|
166
|
-
|
|
185
|
+
setFilters (isUpdate) {
|
|
186
|
+
let params = this.getUrlParams()
|
|
167
187
|
this.fields.forEach(field => {
|
|
168
188
|
let value = field._type === 'range' ? field.value : []
|
|
169
189
|
const valueNotArray = ['select', 'tab'].includes(field._type)
|
|
170
190
|
if (valueNotArray) {
|
|
171
191
|
[value] = field.value
|
|
172
192
|
}
|
|
173
|
-
if (params[field._name] && !
|
|
193
|
+
if (params[field._name] && !isUpdate) {
|
|
174
194
|
let paramsValue = params[field._name]
|
|
175
195
|
if (field._type !== 'range') {
|
|
176
196
|
value = field.data.reduce((acc, item) => {
|
|
@@ -184,9 +204,24 @@ export default {
|
|
|
184
204
|
value = paramsValue
|
|
185
205
|
}
|
|
186
206
|
this.addEditedField(field._name)
|
|
187
|
-
} else if (
|
|
207
|
+
} else if (params[field._name] && isUpdate && field._type !== 'range') {
|
|
208
|
+
if (valueNotArray) {
|
|
209
|
+
const isValueInData = field.data.some(dataValue => dataValue._id === value._id || dataValue._id === value)
|
|
210
|
+
if (!isValueInData) {
|
|
211
|
+
value = field.data[0]
|
|
212
|
+
}
|
|
213
|
+
} else {
|
|
214
|
+
value = field.value.reduce((acc, currentValue) => {
|
|
215
|
+
const isValueInData = field.data.some(dataValue => dataValue._id === currentValue._id || dataValue._id === currentValue)
|
|
216
|
+
if (isValueInData) {
|
|
217
|
+
acc.push(currentValue)
|
|
218
|
+
}
|
|
219
|
+
return acc
|
|
220
|
+
}, [])
|
|
221
|
+
}
|
|
222
|
+
} else if ((!params[field._name] || isUpdate) && valueNotArray) {
|
|
188
223
|
[value] = field.value
|
|
189
|
-
} else if (!params[field._name] ||
|
|
224
|
+
} else if (!params[field._name] || isUpdate) {
|
|
190
225
|
value = field.value
|
|
191
226
|
}
|
|
192
227
|
// Detect changed fields
|
|
@@ -194,7 +229,7 @@ export default {
|
|
|
194
229
|
switch (field._type) {
|
|
195
230
|
case 'range':
|
|
196
231
|
fieldIsEdited = field.data.map((dataValue, index) => field.value[index] === dataValue)
|
|
197
|
-
|
|
232
|
+
.some(checkedValue => !checkedValue)
|
|
198
233
|
break
|
|
199
234
|
case 'select':
|
|
200
235
|
case 'tab':
|
|
@@ -202,29 +237,38 @@ export default {
|
|
|
202
237
|
break
|
|
203
238
|
case 'checkbox':
|
|
204
239
|
fieldIsEdited = field.value.length > 0
|
|
205
|
-
break
|
|
240
|
+
break
|
|
206
241
|
}
|
|
207
242
|
fieldIsEdited && this.addEditedField(field._name)
|
|
208
243
|
this.$set(this.filters, field._name, value)
|
|
209
244
|
})
|
|
210
|
-
this.setUrlParams(
|
|
211
|
-
this.
|
|
212
|
-
this.doAction()
|
|
245
|
+
this.setUrlParams(isUpdate)
|
|
246
|
+
!isUpdate && this.doAction(true)
|
|
213
247
|
},
|
|
214
|
-
resetFilters (
|
|
215
|
-
this.$emit('reset-filters', isOutside)
|
|
216
|
-
this.setFilters(true)
|
|
248
|
+
resetFilters () {
|
|
217
249
|
this.editedFields = []
|
|
218
|
-
this.
|
|
219
|
-
this.
|
|
250
|
+
this.setUrlParams(true, {})
|
|
251
|
+
this.$emit('reset-filters', this.flatFilters)
|
|
220
252
|
},
|
|
221
253
|
addEditedField (name) {
|
|
222
254
|
if (!this.editedFields.includes(name)) {
|
|
223
255
|
this.editedFields.push(name)
|
|
224
256
|
}
|
|
225
257
|
},
|
|
226
|
-
|
|
227
|
-
|
|
258
|
+
removeDependentFieldsFromEdited (name) {
|
|
259
|
+
const field = this.fields.find(field => field._name === name)
|
|
260
|
+
if (field.reset) {
|
|
261
|
+
const dependentFields = this.fields.filter(field => !field.reset).map(field => field._name)
|
|
262
|
+
this.editedFields = this.editedFields.filter(fieldName => !dependentFields.includes(fieldName))
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
doAction (both = false) {
|
|
266
|
+
if (both) {
|
|
267
|
+
this.requestCount()
|
|
268
|
+
this.showResult()
|
|
269
|
+
} else {
|
|
270
|
+
this.immediate ? this.showResult() : this.requestCount()
|
|
271
|
+
}
|
|
228
272
|
},
|
|
229
273
|
requestCount () {
|
|
230
274
|
this.$emit('request-count', this.flatFilters)
|
|
@@ -235,25 +279,12 @@ export default {
|
|
|
235
279
|
getUrlParams () {
|
|
236
280
|
return unserialize(window.location.search)
|
|
237
281
|
},
|
|
238
|
-
setUrlParams (
|
|
282
|
+
setUrlParams (isUpdate, rewriteParams) {
|
|
239
283
|
if (this.showParams) {
|
|
240
|
-
|
|
241
|
-
for (let name in this.filters) {
|
|
242
|
-
let filterValue = this.filters[name]
|
|
243
|
-
if (this.editedFields.includes(name)) {
|
|
244
|
-
if (Array.isArray(filterValue) && filterValue.length > 0) {
|
|
245
|
-
params[name] = filterValue.map(val => val._id || val)
|
|
246
|
-
} else if (filterValue instanceof Object) {
|
|
247
|
-
filterValue = { ...filterValue }
|
|
248
|
-
params[name] = [filterValue._id]
|
|
249
|
-
}
|
|
250
|
-
} else {
|
|
251
|
-
delete params[name]
|
|
252
|
-
}
|
|
253
|
-
}
|
|
284
|
+
const params = rewriteParams || { ...this.flatFilters, ...this.paramsToInclude }
|
|
254
285
|
const currentParams = this.getUrlParams()
|
|
255
286
|
const newParamsLength = Object.keys(params).length
|
|
256
|
-
if (((newParamsLength && !equals(params, currentParams)) ||
|
|
287
|
+
if (((newParamsLength && !equals(params, currentParams)) || isUpdate || rewriteParams) && !this.humanLink) {
|
|
257
288
|
let query = serialize(params)
|
|
258
289
|
let url = window.location.origin + window.location.pathname + `${newParamsLength ? '?' : ''}${query}`
|
|
259
290
|
history.replaceState({ state: url }, '', url)
|
|
@@ -262,7 +293,7 @@ export default {
|
|
|
262
293
|
},
|
|
263
294
|
handleFieldChange (name) {
|
|
264
295
|
this.addEditedField(name)
|
|
265
|
-
this.
|
|
296
|
+
this.removeDependentFieldsFromEdited(name)
|
|
266
297
|
this.setUrlParams()
|
|
267
298
|
this.doAction()
|
|
268
299
|
}
|