Selaa lähdekoodia

Implements live update when adding notes.

Christopher Leggett 5 vuotta sitten
vanhempi
sitoutus
5e6cd1e58c

+ 39 - 0
app/Events/WorkOrderNoteAdded.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Events;
+
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+use App\WorkOrderNote;
+
+class WorkOrderNoteAdded implements ShouldBroadcast
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $note;
+
+    /**
+     * Create a new event instance.
+     *
+     * @return void
+     */
+    public function __construct($note)
+    {
+        $this->note = $note;
+    }
+
+    /**
+     * Get the channels the event should broadcast on.
+     *
+     * @return \Illuminate\Broadcasting\Channel|array
+     */
+    public function broadcastOn()
+    {
+        return new Channel('wonotes.'.$this->note->notetype.'.'.$this->note->woid);
+    }
+}

+ 1 - 0
app/Http/Controllers/Api/WorkOrderNotesController.php

@@ -32,6 +32,7 @@ class WorkOrderNotesController extends Controller
         $workOrderNote->noteuser = $request->input('noteuser');
         $workOrderNote->woid = $request->input('woid');
         $workOrderNote->save();
+        event(new \App\Events\WorkOrderNoteAdded($workOrderNote));
         return response()->json($workOrderNote, 200);
     }
 

+ 22 - 4
public/js/app.js

@@ -2359,7 +2359,6 @@ __webpack_require__.r(__webpack_exports__);
           return credential.credid === deletedCred['credid'];
         });
 
-        console.log(index);
         $('#credential' + deletedCred['credid'] + 'deleteModal').modal('hide');
 
         _this.deleteCred(index);
@@ -2629,6 +2628,25 @@ __webpack_require__.r(__webpack_exports__);
       }
     };
   },
+  mounted: function mounted() {
+    var _this = this;
+
+    Echo.channel('wonotes.' + this.noteType + '.' + this.woid).listen('WorkOrderNoteAdded', function (e) {
+      _this.notes.push(e.note);
+    }).listen('WorkOrderNoteEdited', function (e) {
+      var index = _this.notes.findIndex(function (note) {
+        return note.noteid === e.note.noteid;
+      });
+
+      _this.notes[index] = e.note;
+    }).listen('WorkOrderNoteDeleted', function (e) {
+      var index = _this.notes.findIndex(function (note) {
+        return note.noteid === e.noteid;
+      });
+
+      _this.notes.splice(index, 1);
+    });
+  },
   methods: {
     setOrder: function setOrder(index) {
       if (index === 0) {
@@ -2644,11 +2662,11 @@ __webpack_require__.r(__webpack_exports__);
       return this.currentOrder;
     },
     createNote: function createNote() {
-      var _this = this;
+      var _this2 = this;
 
       axios.post('/api/workorders/notes', this.newNote).then(function (response) {
-        $('#note' + _this.noteType + 'add').collapse('hide');
-        _this.newNote.thenote = '';
+        $('#note' + _this2.noteType + 'add').collapse('hide');
+        _this2.newNote.thenote = '';
       });
     }
   }

+ 0 - 1
resources/js/components/credential-list.vue

@@ -52,7 +52,6 @@ export default {
                     let index = this.credentials.findIndex((credential) => {
                         return credential.credid === deletedCred['credid']
                     })
-                    console.log(index)
                     $('#credential'+deletedCred['credid']+'deleteModal').modal('hide');
                     this.deleteCred(index);
                 })

+ 18 - 0
resources/js/components/notes.vue

@@ -53,6 +53,24 @@ export default {
             }
         }
     },
+    mounted () {
+        Echo.channel('wonotes.'+this.noteType+'.'+this.woid)
+            .listen('WorkOrderNoteAdded', (e) => {
+                this.notes.push(e.note)
+            })
+            .listen('WorkOrderNoteEdited', (e) => {
+                let index = this.notes.findIndex((note) => {
+                    return note.noteid === e.note.noteid
+                })
+                this.notes[index] = e.note
+            })
+            .listen('WorkOrderNoteDeleted', (e) => {
+                let index = this.notes.findIndex((note) => {
+                    return note.noteid === e.noteid
+                })
+                this.notes.splice(index, 1)
+            })
+    },
     methods: {
         setOrder (index) {
             if (index === 0) {