Blame view

src/pages/Dashboard/LiveOnlineClass.vue 11.8 KB
ac24ec07a   Amber Dev   added live online
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <template>
    <div class="body-color">
      <!-- LOADER -->
      <div class="loader" v-if="showLoader">
        <v-progress-circular indeterminate color="white"></v-progress-circular>
      </div>
  
      <!-- SNACKBAR -->
      <v-snackbar
        :timeout="timeout"
        :top="y === 'top'"
        :right="x === 'right'"
        :vertical="mode === 'vertical'"
        v-model="snackbar"
        :color="snackbarColor"
      >
        {{ text }}
        <v-spacer></v-spacer>
        <v-btn flat text @click="snackbar = false">X</v-btn>
      </v-snackbar>
ac24ec07a   Amber Dev   added live online
21
22
      <v-container grid-list-xl class="pt-0">
        <v-layout row wrap class="mt-1">
e91641fe5   Amber Dev   solved bugs
23
          <!-- if logged in user is parent -->
30e404e65   Amber Dev   added live session
24
25
26
27
          <v-flex xs12 sm12 md9 v-if=" $store.state.role === 'PARENT' ">
            <v-layout column>
              <!-- HEADING -->
              <v-flex>
e91641fe5   Amber Dev   solved bugs
28
29
30
31
                <div
                  class="title side-bar-color font-weight-bold"
                >Live Online Classes - {{$route.query.chapterName}}</div>
                <div class="subheading grey--text lighten-1">{{startLiveSession}}</div>
30e404e65   Amber Dev   added live session
32
33
34
35
36
37
38
39
40
41
42
43
44
                <div
                  class="subheading grey--text lighten-1"
                >The session started at 1:00 there is 1 moderator</div>
              </v-flex>
  
              <!-- JOIN OR END SESSION -->
              <v-flex>
                <div>
                  <v-btn round class="open-dialog-button" dark>Join Session</v-btn>
                </div>
              </v-flex>
  
              <!-- DATA TABLE -->
e91641fe5   Amber Dev   solved bugs
45
              <!-- <v-flex>
30e404e65   Amber Dev   added live session
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
                <div>
                  <span class="subheading font-weight-bold">Recording</span>
                </div>
                <v-data-table
                  :headers="liveOnlineHeaders"
                  :items="liveOnlineHeaders"
                  :pagination.sync="pagination"
                  :search="search"
                  item-key="_id"
                >
                  <template slot="items" slot-scope="props">
                    <tr
                      class="tr"
                      @click="props.expanded = !props.expanded;courseDiscussionId = props.item._id;getDiscussionesThread(props.item._id)"
                    >
                      <td class="text-xs-center td td-row">
                        <v-btn round class="open-dialog-button" dark>Join Session</v-btn>
                      </td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                      <td class="td td-row text-xs-center">-</td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                    </tr>
                  </template>
                </v-data-table>
e91641fe5   Amber Dev   solved bugs
71
              </v-flex>-->
30e404e65   Amber Dev   added live session
72
73
            </v-layout>
          </v-flex>
e91641fe5   Amber Dev   solved bugs
74
75
  
          <!-- if logged in user is teacher -->
30e404e65   Amber Dev   added live session
76
          <v-flex xs12 sm12 md12 v-else>
ac24ec07a   Amber Dev   added live online
77
78
79
            <v-layout column>
              <!-- HEADING -->
              <v-flex>
cf2d498a8   Amber Dev   made live session...
80
81
82
                <div
                  class="title side-bar-color font-weight-bold"
                >Live Online Classes - {{$route.query.chapterName}}</div>
e91641fe5   Amber Dev   solved bugs
83
                <div class="subheading grey--text lighten-1">{{startLiveSession}}</div>
ac24ec07a   Amber Dev   added live online
84
85
86
87
88
89
90
91
                <div
                  class="subheading grey--text lighten-1"
                >The session started at 1:00 there is 1 moderator</div>
              </v-flex>
  
              <!-- JOIN OR END SESSION -->
              <v-flex>
                <div>
e91641fe5   Amber Dev   solved bugs
92
93
94
95
96
97
                  <v-btn
                    round
                    class="open-dialog-button"
                    dark
                    @click="createRoom($route.query.classId)"
                  >Start Session</v-btn>
ac24ec07a   Amber Dev   added live online
98
99
100
101
                </div>
              </v-flex>
  
              <!-- DATA TABLE -->
e91641fe5   Amber Dev   solved bugs
102
              <!-- <v-flex>
ac24ec07a   Amber Dev   added live online
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
                <div>
                  <span class="subheading font-weight-bold">Recording</span>
                </div>
                <v-data-table
                  :headers="liveOnlineHeaders"
                  :items="liveOnlineHeaders"
                  :pagination.sync="pagination"
                  :search="search"
                  item-key="_id"
                >
                  <template slot="items" slot-scope="props">
                    <tr
                      class="tr"
                      @click="props.expanded = !props.expanded;courseDiscussionId = props.item._id;getDiscussionesThread(props.item._id)"
                    >
                      <td class="text-xs-center td td-row">
e91641fe5   Amber Dev   solved bugs
119
                        <v-btn round class="open-dialog-button" dark>Start Session</v-btn>
ac24ec07a   Amber Dev   added live online
120
121
122
123
124
125
126
127
                      </td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                      <td class="td td-row text-xs-center">-</td>
                      <td class="td td-row text-xs-center">{{ }}</td>
                    </tr>
                  </template>
                </v-data-table>
e91641fe5   Amber Dev   solved bugs
128
129
130
131
              </v-flex>-->
  
              <v-flex>
                <div id="jitsi-container"></div>
ac24ec07a   Amber Dev   added live online
132
133
134
135
136
              </v-flex>
            </v-layout>
          </v-flex>
  
          <v-spacer></v-spacer>
e91641fe5   Amber Dev   solved bugs
137
138
          <!-- COURSES SIDE BAR- positioned to the right of the page -->
          <v-flex xs3>
ac24ec07a   Amber Dev   added live online
139
            <v-card class="elevation-0 card-border" height="100%">
e91641fe5   Amber Dev   solved bugs
140
              <CoursesSideBar></CoursesSideBar>
ac24ec07a   Amber Dev   added live online
141
142
143
144
145
146
147
148
149
150
            </v-card>
          </v-flex>
        </v-layout>
      </v-container>
    </div>
  </template>
  <script>
  import AllApiCalls from "@/Services/AllApiCalls.js";
  import http from "@/Services/http.js";
  import moment from "moment";
e91641fe5   Amber Dev   solved bugs
151
152
  import Meet from "@/pages/Meet/meet.vue";
  import CoursesSideBar from "@/pages/Common/CoursesSideBar.vue";
ac24ec07a   Amber Dev   added live online
153
154
  export default {
    mixins: [AllApiCalls],
e91641fe5   Amber Dev   solved bugs
155
156
157
    components: {
      CoursesSideBar
    },
ac24ec07a   Amber Dev   added live online
158
159
    data() {
      return {
e91641fe5   Amber Dev   solved bugs
160
        startLiveSession: "",
ac24ec07a   Amber Dev   added live online
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  
        // DATA TABLE
        search: "",
        pagination: {
          rowsPerPage: 10
        },
        liveOnlineHeaders: [
          {
            text: "Playback",
            value: "attachementUrl",
            sortable: false,
            align: "center"
          },
          {
            text: "Meeting",
            align: "center",
            sortable: false,
            value: ""
          },
          {
            text: "Recording",
            value: "",
            sortable: false,
            align: "center"
          },
          {
            text: "Description Preview",
            value: "",
            sortable: false,
            align: "center"
          },
          { text: "Date", value: "", sortable: false, align: "center" },
          { text: "Duration", value: "", sortable: false, align: "center" },
          { text: "Toolbar", value: "", sortable: false, align: "center" }
        ],
        liveOnlineItems: [],
e91641fe5   Amber Dev   solved bugs
197
198
199
200
201
202
203
204
205
206
207
        // JITSI CONTAINER
        token: "",
        selectStudents: {},
        classRules: [v => !!v || " Class Name is required"],
        sectionRules: [v => !!v || " Section Name is required"],
        addclass: [],
        addSection: [],
        loading: false,
        room: "",
        username: "",
        roomPassword: ""
ac24ec07a   Amber Dev   added live online
208
209
210
      };
    },
    methods: {
e91641fe5   Amber Dev   solved bugs
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
      // JITSI CONTAINER
      startConference() {
        var _this = this;
        try {
          const domain = "meet.jit.si";
          const options = {
            audioInput: "<deviceLabel>",
            audioOutput: "<deviceLabel>",
            videoInput: "<deviceLabel>",
            roomName: this.room,
            height: 500,
            parentNode: document.getElementById("jitsi-container"),
            interfaceConfigOverwrite: {
              filmStripOnly: false,
              SHOW_JITSI_WATERMARK: false,
              TOOLBAR_BUTTONS: [
                "microphone",
                "camera",
                "closedcaptions",
                "desktop",
                "fullscreen",
                "fodeviceselection",
                "hangup",
                "profile",
                "info",
                "chat",
                "recording",
                "livestreaming",
                "etherpad",
                "sharedvideo",
                "settings",
                "raisehand",
                "videoquality",
                "filmstrip",
                "invite",
                "feedback",
                "stats",
                "shortcuts",
                "tileview"
              ]
            },
            configOverwrite: {
              disableSimulcast: false
            },
            teacherName: "",
            romm: ""
          };
ac24ec07a   Amber Dev   added live online
258

e91641fe5   Amber Dev   solved bugs
259
260
261
          this.api = new JitsiMeetExternalAPI(domain, options);
          this.api.addEventListener("videoConferenceJoined", () => {
            console.log("Local User Joined");
ac24ec07a   Amber Dev   added live online
262

e91641fe5   Amber Dev   solved bugs
263
264
            _this.api.executeCommand("displayName", _this.username);
            _this.api.executeCommand("password", this.roomPassword);
ac24ec07a   Amber Dev   added live online
265
          });
e91641fe5   Amber Dev   solved bugs
266
267
        } catch (error) {
          console.error("Failed to load Jitsi API", error);
ac24ec07a   Amber Dev   added live online
268
269
        }
      },
e91641fe5   Amber Dev   solved bugs
270
271
272
273
274
275
276
277
278
279
280
      openRoom() {
        // verify the JitsiMeetExternalAPI constructor is added to the global..
        // if (this.teacherName != "" || this.room != "") {
        //   if (window.JitsiMeetExternalAPI) {
        //     // var person = prompt("Please enter your name:", "Rabie");
        //     if (person != null || person != "") this.username = this.teacherName;
        //     var room = prompt("Please enter your room:", "Test Room");
        //     if (room != null || room != "") this.room = this.room;
        //     this.startConference();
        //   } else alert("Jitsi Meet API script not loaded");
        // }
ac24ec07a   Amber Dev   added live online
281
      },
e91641fe5   Amber Dev   solved bugs
282
      createRoom(classId) {
ac24ec07a   Amber Dev   added live online
283
        this.showLoader = true;
e91641fe5   Amber Dev   solved bugs
284
285
        var classId = {
          classId: classId
ac24ec07a   Amber Dev   added live online
286
287
        };
        http()
e91641fe5   Amber Dev   solved bugs
288
289
290
291
          .post("/createLiveClasses", {
            classId: this.$route.query.classId,
            courseId: this.$route.query.courseId,
            chapterId: this.$route.query.chapterId
ac24ec07a   Amber Dev   added live online
292
          })
ac24ec07a   Amber Dev   added live online
293
          .then(response => {
e91641fe5   Amber Dev   solved bugs
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
            // this.addSection = response.data.data;
            console.log("CREATE___ROOOM", response.data);
            this.room = response.data.data.LiveClasses.roomName;
            this.username = response.data.data.LiveClasses.teacherName;
            this.roomPassword = response.data.data.LiveClasses.roomPassword;
            var this_ = this;
            if (this.username != "" || this.room != "") {
              if (window.JitsiMeetExternalAPI) {
                // var person = prompt("Please enter your name:", "Rabie");
                if (this_.username != null || this_.username != "") {
                  this.username = this.username;
                }
                // var room = prompt("Please enter your room:", "Test Room");
                if (this_.room != null || this_.room != "") {
                  this.room = this.room;
                }
                this.startConference();
              } else alert("Jitsi Meet API script not loaded");
            }
ac24ec07a   Amber Dev   added live online
313
            this.showLoader = false;
ac24ec07a   Amber Dev   added live online
314
          })
e91641fe5   Amber Dev   solved bugs
315
          .catch(err => {
ac24ec07a   Amber Dev   added live online
316
317
318
319
            this.showLoader = false;
          });
      }
    },
e91641fe5   Amber Dev   solved bugs
320
321
322
323
  
    mounted() {
      this.token = this.$store.state.token;
    },
ac24ec07a   Amber Dev   added live online
324
    async created() {
e91641fe5   Amber Dev   solved bugs
325
326
327
328
329
      /* getLiveClassesesList - To up date line under heading*/
      let response = await this.getLiveClassesesList({
        classId: this.$route.query.classId,
        courseId: this.$route.query.courseId,
        chapterId: this.$route.query.chapterId
ac24ec07a   Amber Dev   added live online
330
      });
e91641fe5   Amber Dev   solved bugs
331
332
333
334
335
336
337
338
339
340
341
342
343
      console.log("response getLiveClassesesList- ", response);
      if (response.data.data.length == 0) {
        console.log("response of  - ", response);
        this.startLiveSession = "Start live session";
      }
  
      /* getStudentCourses - to get courseData - defined in GetApis.js*/
      if (this.$store.state.role === "PARENT") {
        await this.getStudentCourses({
          classId: localStorage.getItem("parentClassId"),
          studentId: localStorage.getItem("parentStudentId")
        });
      }
ac24ec07a   Amber Dev   added live online
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
    }
  };
  </script>
  <style scoped>
  .side-bar-color {
    color: #827bfa !important;
    /* border-top-right-radius: 74px !important; */
  }
  .card-border {
    border: 1px #bdbdbd solid;
    border-radius: 3px;
  }
  .reply-desc {
    border: 1px solid #f2f2f2;
  }
  .open-dialog-button {
    background: #827bfa !important;
    border-color: #827bfa !important;
    text-transform: none !important;
  }
  
  .reply-btn {
    background: #feb83c !important;
    border-color: #feb83c !important;
    text-transform: none !important;
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
  }
e91641fe5   Amber Dev   solved bugs
372
373
374
  #jitsi-container {
    height: 100vh;
  }
ac24ec07a   Amber Dev   added live online
375
  </style>