Selaa lähdekoodia

refactor: Added data request resolved column, filter and update event to table

Owen Diffey 2 vuotta sitten
vanhempi
commit
d9e350cebc

+ 23 - 12
backend/logic/actions/dataRequests.js

@@ -11,11 +11,17 @@ const WSModule = moduleManager.modules.ws;
 const CacheModule = moduleManager.modules.cache;
 
 CacheModule.runJob("SUB", {
-	channel: "dataRequest.resolve",
-	cb: dataRequestId => {
-		WSModule.runJob("EMIT_TO_ROOM", {
-			room: "admin.users",
-			args: ["event:admin.dataRequests.resolved", { data: { dataRequestId } }]
+	channel: "dataRequest.update",
+	cb: async dataRequestId => {
+		const dataRequestModel = await DBModule.runJob("GET_MODEL", {
+			modelName: "dataRequest"
+		});
+
+		dataRequestModel.findOne({ _id: dataRequestId }, (err, dataRequest) => {
+			WSModule.runJob("EMIT_TO_ROOM", {
+				room: "admin.users",
+				args: ["event:admin.dataRequests.updated", { data: { dataRequest } }]
+			});
 		});
 	}
 });
@@ -81,10 +87,11 @@ export default {
 	 * Resolves a data request
 	 *
 	 * @param {object} session - the session object automatically added by the websocket
-	 * @param {object} dataRequestId - the id of the data request to resolve
+	 * @param {string} dataRequestId - the id of the data request to resolve
+	 * @param {boolean} resolved - whether to set to resolved to true or false
 	 * @param {Function} cb - gets called with the result
 	 */
-	resolve: isAdminRequired(async function update(session, dataRequestId, cb) {
+	resolve: isAdminRequired(async function resolve(session, dataRequestId, resolved, cb) {
 		const dataRequestModel = await DBModule.runJob("GET_MODEL", { modelName: "dataRequest" }, this);
 
 		async.waterfall(
@@ -96,7 +103,7 @@ export default {
 				},
 
 				next => {
-					dataRequestModel.updateOne({ _id: dataRequestId }, { resolved: true }, { upsert: true }, err =>
+					dataRequestModel.updateOne({ _id: dataRequestId }, { resolved }, { upsert: true }, err =>
 						next(err)
 					);
 				}
@@ -107,22 +114,26 @@ export default {
 					this.log(
 						"ERROR",
 						"DATA_REQUESTS_RESOLVE",
-						`Resolving data request ${dataRequestId} failed for user "${session.userId}". "${err}"`
+						`${resolved ? "R" : "Unr"}esolving data request ${dataRequestId} failed for user "${
+							session.userId
+						}". "${err}"`
 					);
 					return cb({ status: "error", message: err });
 				}
 
-				CacheModule.runJob("PUB", { channel: "dataRequest.resolve", value: dataRequestId });
+				CacheModule.runJob("PUB", { channel: "dataRequest.update", value: dataRequestId });
 
 				this.log(
 					"SUCCESS",
 					"DATA_REQUESTS_RESOLVE",
-					`Resolving data request "${dataRequestId}" successful for user ${session.userId}".`
+					`${resolved ? "R" : "Unr"}esolving data request "${dataRequestId}" successful for user ${
+						session.userId
+					}".`
 				);
 
 				return cb({
 					status: "success",
-					message: "Successfully resolved data request."
+					message: `Successfully ${resolved ? "" : "un"}resolved data request.`
 				});
 			}
 		);

+ 44 - 17
frontend/src/pages/Admin/Users/DataRequests.vue

@@ -15,7 +15,7 @@ const columnDefault = ref({
 	defaultVisibility: "shown",
 	draggable: true,
 	resizable: true,
-	minWidth: 150,
+	minWidth: 230,
 	maxWidth: 600
 });
 const columns = ref([
@@ -29,6 +29,13 @@ const columns = ref([
 		minWidth: 76,
 		defaultWidth: 76
 	},
+	{
+		name: "resolved",
+		displayName: "Resolved",
+		properties: ["resolved"],
+		sortProperty: "resolved",
+		minWidth: 150
+	},
 	{
 		name: "type",
 		displayName: "Type",
@@ -62,18 +69,26 @@ const filters = ref([
 		property: "userId",
 		filterTypes: ["contains", "exact", "regex"],
 		defaultFilterType: "contains"
+	},
+	{
+		name: "resolved",
+		displayName: "Resolved",
+		property: "resolved",
+		filterTypes: ["boolean"],
+		defaultFilterType: "boolean"
 	}
 ]);
 const events = ref({
 	adminRoom: "users",
-	removed: {
-		event: "admin.dataRequests.resolved",
-		id: "dataRequestId"
+	updated: {
+		event: "admin.dataRequests.updated",
+		id: "dataRequest._id",
+		item: "dataRequest"
 	}
 });
 
-const resolveDataRequest = id => {
-	socket.dispatch("dataRequests.resolve", id, res => {
+const resolveDataRequest = (id, resolved) => {
+	socket.dispatch("dataRequests.resolve", id, resolved, res => {
 		if (res.status === "success") new Toast(res.message);
 	});
 };
@@ -99,21 +114,33 @@ const resolveDataRequest = id => {
 		>
 			<template #column-options="slotProps">
 				<div class="row-options">
-					<quick-confirm
-						placement="right"
-						@confirm="resolveDataRequest(slotProps.item._id)"
+					<button
+						v-if="slotProps.item.resolved"
+						class="button is-danger material-icons icon-with-button"
+						@click="resolveDataRequest(slotProps.item._id, false)"
 						:disabled="slotProps.item.removed"
+						content="Unresolve Data Request"
+						v-tippy
 					>
-						<button
-							class="button is-success icon-with-button material-icons"
-							content="Resolve Data Request"
-							v-tippy
-						>
-							done_all
-						</button>
-					</quick-confirm>
+						remove_done
+					</button>
+					<button
+						v-else
+						class="button is-success material-icons icon-with-button"
+						@click="resolveDataRequest(slotProps.item._id, true)"
+						:disabled="slotProps.item.removed"
+						content="Resolve Data Request"
+						v-tippy
+					>
+						done_all
+					</button>
 				</div>
 			</template>
+			<template #column-resolved="slotProps">
+				<span :title="slotProps.item.resolved">{{
+					slotProps.item.resolved
+				}}</span>
+			</template>
 			<template #column-type="slotProps">
 				<span
 					:title="