Browse Source

feat(AdvancedTable): Number equals, lesser and greater filters

Owen Diffey 3 years ago
parent
commit
ffe84bdf7b

+ 6 - 0
backend/logic/actions/dataRequests.js

@@ -54,6 +54,12 @@ export default {
 							newQuery[filter.property] = { $lte: new Date(data) };
 						} else if (filterType === "datetimeAfter") {
 							newQuery[filter.property] = { $gte: new Date(data) };
+						} else if (filterType === "numberLesser") {
+							newQuery[filter.property] = { $lt: data };
+						} else if (filterType === "numberGreater") {
+							newQuery[filter.property] = { $gt: data };
+						} else if (filterType === "numberEquals") {
+							newQuery[filter.property] = { $eq: data };
 						}
 						return newQuery;
 					});

+ 6 - 0
backend/logic/actions/news.js

@@ -90,6 +90,12 @@ export default {
 							newQuery[filter.property] = { $lte: new Date(data) };
 						} else if (filterType === "datetimeAfter") {
 							newQuery[filter.property] = { $gte: new Date(data) };
+						} else if (filterType === "numberLesser") {
+							newQuery[filter.property] = { $lt: data };
+						} else if (filterType === "numberGreater") {
+							newQuery[filter.property] = { $gt: data };
+						} else if (filterType === "numberEquals") {
+							newQuery[filter.property] = { $eq: data };
 						}
 						return newQuery;
 					});

+ 6 - 0
backend/logic/actions/punishments.js

@@ -61,6 +61,12 @@ export default {
 							newQuery[filter.property] = { $lte: new Date(data) };
 						} else if (filterType === "datetimeAfter") {
 							newQuery[filter.property] = { $gte: new Date(data) };
+						} else if (filterType === "numberLesser") {
+							newQuery[filter.property] = { $lt: data };
+						} else if (filterType === "numberGreater") {
+							newQuery[filter.property] = { $gt: data };
+						} else if (filterType === "numberEquals") {
+							newQuery[filter.property] = { $eq: data };
 						}
 						return newQuery;
 					});

+ 6 - 0
backend/logic/actions/reports.js

@@ -93,6 +93,12 @@ export default {
 							newQuery[filter.property] = { $lte: new Date(data) };
 						} else if (filterType === "datetimeAfter") {
 							newQuery[filter.property] = { $gte: new Date(data) };
+						} else if (filterType === "numberLesser") {
+							newQuery[filter.property] = { $lt: data };
+						} else if (filterType === "numberGreater") {
+							newQuery[filter.property] = { $gt: data };
+						} else if (filterType === "numberEquals") {
+							newQuery[filter.property] = { $eq: data };
 						}
 						return newQuery;
 					});

+ 6 - 0
backend/logic/actions/users.js

@@ -202,6 +202,12 @@ export default {
 							newQuery[filter.property] = { $lte: new Date(data) };
 						} else if (filterType === "datetimeAfter") {
 							newQuery[filter.property] = { $gte: new Date(data) };
+						} else if (filterType === "numberLesser") {
+							newQuery[filter.property] = { $lt: data };
+						} else if (filterType === "numberGreater") {
+							newQuery[filter.property] = { $gt: data };
+						} else if (filterType === "numberEquals") {
+							newQuery[filter.property] = { $eq: data };
 						}
 						return newQuery;
 					});

+ 6 - 0
backend/logic/playlists.js

@@ -903,6 +903,12 @@ class _PlaylistsModule extends CoreClass {
 								newQuery[filter.property] = { $lte: new Date(data) };
 							} else if (filterType === "datetimeAfter") {
 								newQuery[filter.property] = { $gte: new Date(data) };
+							} else if (filterType === "numberLesser") {
+								newQuery[filter.property] = { $lt: data };
+							} else if (filterType === "numberGreater") {
+								newQuery[filter.property] = { $gt: data };
+							} else if (filterType === "numberEquals") {
+								newQuery[filter.property] = { $eq: data };
 							}
 							return newQuery;
 						});

+ 6 - 0
backend/logic/songs.js

@@ -241,6 +241,12 @@ class _SongsModule extends CoreClass {
 								newQuery[filter.property] = { $lte: new Date(data) };
 							} else if (filterType === "datetimeAfter") {
 								newQuery[filter.property] = { $gte: new Date(data) };
+							} else if (filterType === "numberLesser") {
+								newQuery[filter.property] = { $lt: data };
+							} else if (filterType === "numberGreater") {
+								newQuery[filter.property] = { $gt: data };
+							} else if (filterType === "numberEquals") {
+								newQuery[filter.property] = { $eq: data };
 							}
 							return newQuery;
 						});

+ 6 - 0
backend/logic/stations.js

@@ -426,6 +426,12 @@ class _StationsModule extends CoreClass {
 								newQuery[filter.property] = { $lte: new Date(data) };
 							} else if (filterType === "datetimeAfter") {
 								newQuery[filter.property] = { $gte: new Date(data) };
+							} else if (filterType === "numberLesser") {
+								newQuery[filter.property] = { $lt: data };
+							} else if (filterType === "numberGreater") {
+								newQuery[filter.property] = { $gt: data };
+							} else if (filterType === "numberEquals") {
+								newQuery[filter.property] = { $eq: data };
 							}
 							return newQuery;
 						});

+ 25 - 0
frontend/src/components/AdvancedTable.vue

@@ -123,6 +123,19 @@
 										class="input"
 										type="datetime-local"
 									/>
+									<input
+										v-else-if="
+											filter.filterType &&
+											filter.filterType.startsWith(
+												'number'
+											)
+										"
+										v-model="filter.data"
+										class="input"
+										type="number"
+										:disabled="!filter.filterType"
+										@keydown.enter="applyFilterAndGetData()"
+									/>
 									<input
 										v-else
 										v-model="filter.data"
@@ -725,6 +738,18 @@ export default {
 				datetimeAfter: {
 					name: "datetimeAfter",
 					displayName: "After"
+				},
+				numberLesser: {
+					name: "numberLesser",
+					displayName: "Less than"
+				},
+				numberGreater: {
+					name: "numberGreater",
+					displayName: "Greater than"
+				},
+				numberEquals: {
+					name: "numberEquals",
+					displayName: "Equals"
 				}
 			},
 			bulkPopup: {

+ 32 - 8
frontend/src/pages/Admin/tabs/Songs.vue

@@ -525,29 +525,53 @@ export default {
 					name: "likes",
 					displayName: "Likes",
 					property: "likes",
-					filterTypes: ["contains", "exact", "regex"],
-					defaultFilterType: "exact"
+					filterTypes: [
+						"numberLesser",
+						"numberGreater",
+						"numberEquals",
+						"exact",
+						"regex"
+					],
+					defaultFilterType: "numberLesser"
 				},
 				{
 					name: "dislikes",
 					displayName: "Dislikes",
 					property: "dislikes",
-					filterTypes: ["contains", "exact", "regex"],
-					defaultFilterType: "exact"
+					filterTypes: [
+						"numberLesser",
+						"numberGreater",
+						"numberEquals",
+						"exact",
+						"regex"
+					],
+					defaultFilterType: "numberLesser"
 				},
 				{
 					name: "duration",
 					displayName: "Duration",
 					property: "duration",
-					filterTypes: ["contains", "exact", "regex"],
-					defaultFilterType: "exact"
+					filterTypes: [
+						"numberLesser",
+						"numberGreater",
+						"numberEquals",
+						"exact",
+						"regex"
+					],
+					defaultFilterType: "numberLesser"
 				},
 				{
 					name: "skipDuration",
 					displayName: "Skip Duration",
 					property: "skipDuration",
-					filterTypes: ["contains", "exact", "regex"],
-					defaultFilterType: "exact"
+					filterTypes: [
+						"numberLesser",
+						"numberGreater",
+						"numberEquals",
+						"exact",
+						"regex"
+					],
+					defaultFilterType: "numberLesser"
 				}
 			],
 			jobs: [

+ 8 - 2
frontend/src/pages/Admin/tabs/Users.vue

@@ -398,8 +398,14 @@ export default {
 						name: "songsRequested",
 						displayName: "Songs Requested",
 						property: "statistics.songsRequested",
-						filterTypes: ["contains", "exact", "regex"],
-						defaultFilterType: "contains"
+						filterTypes: [
+							"numberLesser",
+							"numberGreater",
+							"numberEquals",
+							"exact",
+							"regex"
+						],
+						defaultFilterType: "numberLesser"
 					}
 				]
 			}