Skip to content

Commit 59e2bd6

Browse files
authored
Merge pull request #45 from Vlad-Stelea/g3_hotfix
G3 hotfix
2 parents 53e8eaf + 684a3e9 commit 59e2bd6

File tree

6 files changed

+99
-42
lines changed

6 files changed

+99
-42
lines changed

vue/xscratch-app/src/App.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
</router-link>
3535
</div>
3636
<div id="content">
37-
<router-view @reloadPlaylists="loadPlaylists" class="pt-3" />
37+
<router-view @reloadPlaylists="loadPlaylists" :reloadFlag="reloadFlag" class="pt-3" />
3838
</div>
39-
<UploadVideo />
39+
<UploadVideo @reloadVideos="reloadVideos" />
4040
</div>
4141
</template>
4242

@@ -56,13 +56,17 @@ export default {
5656
playlists: [],
5757
loadingPlaylists: false,
5858
addingPlaylist: false,
59-
addPlaylistValue: ''
59+
addPlaylistValue: '',
60+
reloadFlag: 0
6061
}
6162
},
6263
mounted: function () {
6364
this.loadPlaylists()
6465
},
6566
methods: {
67+
reloadVideos () {
68+
this.reloadFlag += 1
69+
},
6670
async loadPlaylists () {
6771
this.loadingPlaylists = true
6872
this.playlists = await api.getPlaylists()

vue/xscratch-app/src/api.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,25 @@ export default {
8686
const response = await this.execute('get', '/tlp')
8787
return JSON.parse(response.data.body).listOfTLP
8888
},
89-
89+
9090
async deleteTLP (id) {
9191
const response = await this.execute('post', '/tlp/delete', id)
9292
return JSON.parse(response.data.body)
9393
},
94-
94+
9595
async appendVideo (playlistID, videoID) {
9696
const body = {
9797
'id': videoID
9898
}
9999
const response = await this.execute('post', '/playlists/' + playlistID + '/video', body)
100100
return JSON.parse(response.data.body)
101+
},
102+
103+
async removeVideo (playlistID, videoID) {
104+
const body = {
105+
'id': videoID
106+
}
107+
const response = await this.execute('post', '/playlists/' + playlistID + '/video/delete', body)
108+
return JSON.parse(response.data.body)
101109
}
102110
}

vue/xscratch-app/src/components/UploadVideo.vue

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,40 @@
1111
title="Upload Video"
1212
@hidden="reset"
1313
>
14-
<form>
15-
<b-form-group label="Video Title:" label-cols-sm="3" label-for="input">
16-
<b-form-input v-model="upload.title" :state="titleState" placeholder="Enter video title" />
17-
<b-form-invalid-feedback :state="titleState">You must give this video a title</b-form-invalid-feedback>
14+
<div v-if="submitting">
15+
<h2>Submitting</h2>
16+
</div>
17+
<div v-else>
18+
<form>
19+
<b-form-group label="Video Title:" label-cols-sm="3" label-for="input">
20+
<b-form-input v-model="upload.title" :state="titleState" placeholder="Enter video title" />
21+
<b-form-invalid-feedback :state="titleState">You must give this video a title</b-form-invalid-feedback>
22+
</b-form-group>
23+
<b-form-group label="Video Dialogue:" label-cols-sm="3" label-for="input">
24+
<b-form-input
25+
v-model="upload.dialogue"
26+
:state="dialogueState"
27+
placeholder="Enter video dialogue"
28+
/>
29+
<b-form-invalid-feedback :state="dialogueState">
30+
Every video has to have dialogue.... even if it's just
31+
<code>SCREAMING</code>
32+
</b-form-invalid-feedback>
33+
</b-form-group>
34+
<b-form-group label="Video Characters:" label-cols-sm="3" label-for="input">
35+
<b-form-input
36+
v-model="upload.characters"
37+
:state="characterState"
38+
placeholder="Enter video characters"
39+
/>
40+
<b-form-invalid-feedback :state="titleState">You must give this video characters</b-form-invalid-feedback>
41+
</b-form-group>
42+
</form>
43+
<b-form-group label="Video File" label-cols-sm="3" label-for="input">
44+
<label for="file">Choose file to upload</label>
45+
<input type="file" @change="processFile($event)" name="avatar" accept=".ogg" />
1846
</b-form-group>
19-
<b-form-group label="Video Dialogue:" label-cols-sm="3" label-for="input">
20-
<b-form-input
21-
v-model="upload.dialogue"
22-
:state="dialogueState"
23-
placeholder="Enter video dialogue"
24-
/>
25-
<b-form-invalid-feedback :state="dialogueState">
26-
Every video has to have dialogue.... even if it's just
27-
<code>SCREAMING</code>
28-
</b-form-invalid-feedback>
29-
</b-form-group>
30-
<b-form-group label="Video Characters:" label-cols-sm="3" label-for="input">
31-
<b-form-input v-model="upload.characters" :state="characterState" placeholder="Enter video characters" />
32-
<b-form-invalid-feedback :state="titleState">You must give this video characters</b-form-invalid-feedback>
33-
</b-form-group>
34-
</form>
35-
<b-form-group label ="Video File" label-cols-sm="3" label-for="input">
36-
<label for = "file">Choose file to upload</label>
37-
<input type="file" @change="processFile($event)"
38-
name="avatar" accept=".ogg">
39-
</b-form-group>
47+
</div>
4048
<template #modal-footer>
4149
<div>
4250
<b-btn type="reset" @click="reset" variant="outline-danger">Reset</b-btn>
@@ -58,7 +66,8 @@ export default {
5866
characters: '',
5967
encodedVideo: ''
6068
},
61-
failedValidation: false
69+
failedValidation: false,
70+
submitting: false
6271
}
6372
},
6473
computed: {
@@ -93,23 +102,25 @@ export default {
93102
}
94103
reader.readAsDataURL(data)
95104
},
96-
submit (event) {
105+
async submit (event) {
97106
this.upload.encodedVideo = globalEncodedVideo
98107
if (this.upload.title === '' || this.upload.dialogue === '' || this.upload.characters === '' || this.upload.encodedVideo === '') {
99108
this.failedValidation = true
100109
return
101110
}
111+
this.submitting = true
102112
var videoBody = {
103113
name: this.upload.title,
104114
dialogue: this.upload.dialogue,
105115
characters: this.upload.characters.split(','),
106116
video: this.upload.encodedVideo
107117
}
108118
console.log(videoBody)
109-
console.log(api.createVideo(videoBody))
110-
api.getVideos()
111-
this.$bvModal.hide('Upload')
112-
// event.target.hide()
119+
await api.createVideo(videoBody)
120+
await api.getVideos()
121+
this.submitting = false
122+
this.$emit('reloadVideos')
123+
this.$bvModal.hide('upload')
113124
},
114125
reset () {
115126
this.upload = {

vue/xscratch-app/src/pages/AdminPage.vue

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@
1515
</div>
1616
</b-col>
1717
</b-row>
18-
<b-table dark :items="tlps" :fields="tlpFields" class="mt-2 w-50">
18+
<b-table dark :busy="loadingTLP" :items="tlps" :fields="tlpFields" class="mt-2 w-50">
1919
<template v-slot:cell(url)="row">
2020
<b-button size="sm" class="mr-2" variant="outline-danger" @click="deleteTLP(row.item.id)">
2121
<font-awesome-icon icon="trash" size="sm" />
2222
</b-button>
2323
{{row.item.url}}
2424
</template>
25+
<template v-slot:table-busy>
26+
<div class="text-center text-danger my-2">
27+
<b-spinner class="align-middle"></b-spinner>
28+
<strong>Loading...</strong>
29+
</div>
30+
</template>
2531
</b-table>
2632

2733
<hr class="bg-success" />
@@ -96,6 +102,14 @@ export default {
96102
components: {
97103
Loading
98104
},
105+
props: {
106+
reloadFlag: Number
107+
},
108+
watch: {
109+
reloadFlag: function (val) {
110+
this.loadVideos()
111+
}
112+
},
99113
data: function () {
100114
return {
101115
videos: [],
@@ -106,7 +120,8 @@ export default {
106120
],
107121
activeTLP: '',
108122
activeSearch: '',
109-
loading: false
123+
loading: false,
124+
loadingTLP: false
110125
}
111126
},
112127
mounted: function () {
@@ -116,17 +131,19 @@ export default {
116131
methods: {
117132
async registerTLPProcess () {
118133
if (this.activeTLP !== '') {
134+
this.loadingTLP = true
119135
await api.registerTLP(this.activeTLP)
120136
.catch(error => {
121137
this.errors = []
122138
console.log(error)
123139
})
124140
this.loadTLPs()
125-
this.loading = false
141+
this.loadingTLP = false
126142
this.activeTLP = ''
127143
}
128144
},
129145
async deleteVidProcess (idNum) {
146+
this.loading = true
130147
this.videos = await api.deleteVideo(idNum)
131148
.catch(error => {
132149
this.errors = []
@@ -159,17 +176,21 @@ export default {
159176
this.activeSearch = ''
160177
},
161178
async loadTLPs () {
179+
this.loadingTLP = true
162180
var allTLPs = await api.getTLPs()
163181
console.log(allTLPs)
164182
this.tlps = allTLPs
165183
console.log(this.tlps)
184+
this.loadingTLP = false
166185
},
167186
async deleteTLP (idNum) {
187+
this.loadingTLP = true
168188
var idBody = {
169189
id: idNum
170190
}
171191
await api.deleteTLP(idBody)
172192
this.loadTLPs()
193+
this.loadingTLP = false
173194
}
174195
}
175196
}

vue/xscratch-app/src/pages/PlaylistPage.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<b-row align-h="between">
3232
<b-col cols="auto" class="pt-1">{{video.name}}</b-col>
3333
<b-col cols="auto" class="mb-1 pr-3">
34-
<b-button variant="outline-danger">
34+
<b-button variant="outline-danger" @click="removeVideo(video.id)">
3535
<font-awesome-icon icon="minus-circle" />
3636
</b-button>
3737
</b-col>
@@ -43,6 +43,7 @@
4343
</b-card>
4444
<!-- Add Video Card -->
4545
<b-card
46+
v-if="!loading"
4647
class="vidContainer addVideoCard m-2"
4748
bg-variant="dark"
4849
footer="Append a video to this playlist"
@@ -92,6 +93,7 @@ export default {
9293
},
9394
methods: {
9495
async deletePlaylistProcess (idNum) {
96+
this.loading = true
9597
var idBody = {
9698
id: idNum
9799
}
@@ -113,8 +115,10 @@ export default {
113115
})
114116
this.loading = false
115117
},
116-
async addVideo () {
117-
console.log('adding')
118+
async removeVideo (videoID) {
119+
this.loading = true
120+
await api.removeVideo(this.playlist.id, videoID)
121+
this.loadPlaylist()
118122
}
119123
}
120124
}

vue/xscratch-app/src/pages/VideosPage.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ export default {
6060
components: {
6161
Loading
6262
},
63+
props: {
64+
reloadFlag: Number
65+
},
66+
watch: {
67+
reloadFlag: function (val) {
68+
this.loadVideos()
69+
}
70+
},
6371
data: function () {
6472
return {
6573
loading: false,
@@ -73,6 +81,7 @@ export default {
7381
},
7482
methods: {
7583
async deleteVidProcess (idNum) {
84+
this.loading = true
7685
this.videos = await api.deleteVideo(idNum)
7786
.catch(error => {
7887
this.errors = []

0 commit comments

Comments
 (0)