diff --git a/api/tacticalrmm/agents/views.py b/api/tacticalrmm/agents/views.py index 05b2b4c7..4555133a 100644 --- a/api/tacticalrmm/agents/views.py +++ b/api/tacticalrmm/agents/views.py @@ -732,6 +732,9 @@ class GetAddNotes(APIView): if not _has_perm_on_agent(request.user, agent.agent_id): raise PermissionDenied() + if "note" not in request.data.keys(): + return notify_error("Cannot add an empty note") + data = { "note": request.data["note"], "agent": agent.pk, diff --git a/web/src/components/agents/NotesTab.vue b/web/src/components/agents/NotesTab.vue index 9faae702..bd0e242a 100644 --- a/web/src/components/agents/NotesTab.vue +++ b/web/src/components/agents/NotesTab.vue @@ -111,6 +111,7 @@ export default { const $q = useQuasar(); // notes tab logic + const noteText = ref(""); const notes = ref([]); const loading = ref(false); const pagination = ref({ @@ -126,17 +127,21 @@ export default { } function addNote() { + noteText.value = ""; $q.dialog({ title: "Add Note", prompt: { + model: noteText, type: "textarea", + isValid: val => !!val, }, style: "width: 30vw; max-width: 50vw;", ok: { label: "Add" }, - }).onOk(async data => { + cancel: true, + }).onOk(async () => { loading.value = true; try { - const result = await saveAgentNote({ agent_id: selectedAgent.value, note: data }); + const result = await saveAgentNote({ agent_id: selectedAgent.value, note: noteText.value }); notifySuccess(result); await getNotes(); } catch (e) { @@ -152,6 +157,7 @@ export default { prompt: { model: note.note, type: "textarea", + isValid: val => !!val, }, style: "width: 30vw; max-width: 50vw;", ok: { label: "Save" }, @@ -204,6 +210,7 @@ export default { pagination, selectedAgent, tabHeight, + noteText, // non-reactive data columns,