Skip to content

Commit f7929e9

Browse files
show messages
1 parent 6827189 commit f7929e9

File tree

10 files changed

+116
-59
lines changed

10 files changed

+116
-59
lines changed

src/App.vue

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,34 @@
55
v-else
66
indeterminate
77
></v-progress-linear>
8+
9+
<v-snackbar
10+
:value="messageShow"
11+
@input="setMessage"
12+
>
13+
{{ messageText }}
14+
<template #action="{ attrs }">
15+
<v-btn
16+
color="pink"
17+
text
18+
v-bind="attrs"
19+
@click="hideMessage"
20+
>
21+
Close
22+
</v-btn>
23+
</template>
24+
</v-snackbar>
825
</v-app>
926
</template>
1027

1128
<script lang="ts">
1229
import { Vue, Component } from 'vue-property-decorator'
1330
import LayoutDefault from '@/layouts/LayoutDefault.vue'
14-
import { mapGetters } from 'vuex'
31+
import { mapGetters, mapMutations, mapState } from 'vuex'
1532
import { User } from './interfaces/user'
1633
import { unexpectedExc } from './utils'
1734
import { assertErrCode, status } from './utils/status-codes'
35+
import { noAuthenRoutes } from './router'
1836
1937
@Component({
2038
components: {
@@ -23,28 +41,34 @@ import { assertErrCode, status } from './utils/status-codes'
2341
computed: {
2442
...mapGetters('account', {
2543
user: 'loggedInUser'
44+
}),
45+
...mapState('message', {
46+
messageShow: 'show',
47+
messageText: 'text'
48+
})
49+
},
50+
methods: {
51+
...mapMutations('message', {
52+
showMessage: 'SHOW_MESSAGE',
53+
hideMessage: 'HIDE_MESSAGE'
2654
})
2755
}
2856
})
2957
export default class App extends Vue {
58+
/**
59+
* Init
60+
*/
3061
user!: User
3162
loading = false
3263
initDone = false
3364
34-
noAuthenRoutes = [
35-
'Login',
36-
'Register',
37-
'ResetPassword',
38-
'NewPassword'
39-
]
40-
4165
created (): void {
4266
this.setUserInfo()
4367
}
4468
4569
setUserInfo (): void {
4670
const routeName = this.$route.name
47-
if (this.noAuthenRoutes.includes(routeName as string)) {
71+
if (noAuthenRoutes.includes(routeName as string)) {
4872
this.initDone = true
4973
return
5074
}
@@ -64,6 +88,10 @@ export default class App extends Vue {
6488
})
6589
}
6690
91+
/**
92+
* Layout
93+
*/
94+
6795
get layout (): typeof Vue {
6896
const meta = this.$route.meta
6997
@@ -89,6 +117,22 @@ export default class App extends Vue {
89117
90118
return LayoutDefault
91119
}
120+
121+
/**
122+
* Message
123+
*/
124+
messageShow!: boolean
125+
messageText!: string
126+
showMessage!: CallableFunction
127+
hideMessage!: CallableFunction
128+
129+
setMessage (show: boolean): void {
130+
if (show) {
131+
this.showMessage()
132+
} else {
133+
this.hideMessage()
134+
}
135+
}
92136
}
93137
</script>
94138

src/layouts/LayoutClassroomTeacher.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ import KLDialogConfirm from '@/components/KLDialogConfirm.vue'
138138
methods: {
139139
...mapMutations('classroom', {
140140
setCurrentClassroom: 'SET_CURRENT_CLASSROOM'
141+
}),
142+
...mapMutations('message', {
143+
showMessage: 'SHOW_MESSAGE'
141144
})
142145
}
143146
})
@@ -147,6 +150,7 @@ export default class LayoutClassroomTeacher extends Vue {
147150
148151
classroom!: Classroom
149152
setCurrentClassroom!: CallableFunction
153+
showMessage!: CallableFunction
150154
151155
get breadcrumbs (): unknown[] {
152156
if (this.classroom === undefined) return []
@@ -199,6 +203,7 @@ export default class LayoutClassroomTeacher extends Vue {
199203
this.$store.dispatch('classroom/delete', this.classroom.pk)
200204
.then(() => {
201205
this.$router.push({ name: 'ClassroomList' })
206+
this.showMessage('Classroom deleted.')
202207
})
203208
.catch(unexpectedExc)
204209
.finally(() => {

src/layouts/LayoutDefault.vue

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,6 @@
4545
</slot>
4646
</v-main>
4747

48-
<v-snackbar
49-
:value="messageShow"
50-
@input="setMessage"
51-
>
52-
{{ messageText }}
53-
<template #action="{ attrs }">
54-
<v-btn
55-
color="pink"
56-
text
57-
v-bind="attrs"
58-
@click="hideMessage"
59-
>
60-
Close
61-
</v-btn>
62-
</template>
63-
</v-snackbar>
64-
6548
<!-- TODO: is this needed?
6649
<v-bottom-navigation
6750
app
@@ -88,16 +71,6 @@ import KLAvatar from '@/components/KLAvatar.vue'
8871
computed: {
8972
...mapGetters({
9073
user: 'account/loggedInUser'
91-
}),
92-
...mapState('message', {
93-
messageShow: 'show',
94-
messageText: 'text'
95-
})
96-
},
97-
methods: {
98-
...mapMutations('message', {
99-
showMessage: 'SHOW_MESSAGE',
100-
hideMessage: 'HIDE_MESSAGE'
10174
})
10275
},
10376
components: {
@@ -106,19 +79,6 @@ import KLAvatar from '@/components/KLAvatar.vue'
10679
})
10780
export default class LayoutDefault extends Vue {
10881
user!: User
109-
110-
messageShow!: boolean
111-
messageText!: string
112-
showMessage!: CallableFunction
113-
hideMessage!: CallableFunction
114-
115-
setMessage (show: boolean): void {
116-
if (show) {
117-
this.showMessage()
118-
} else {
119-
this.hideMessage()
120-
}
121-
}
12282
}
12383
</script>
12484

src/plugins/axios.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ Vue.use(Plugin)
6868
export default Plugin
6969

7070
function setAuthenticationHeader (headers) {
71-
const accessToken = Store.getters['account/accessToken']
71+
const accessToken = getAuthorizationHeaderValue()
7272
if (accessToken !== '') {
73-
headers.Authorization = getAuthorizationHeaderValue(accessToken)
73+
headers.Authorization = accessToken
7474
} else {
7575
delete headers.Authorization
7676
}

src/router/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,10 @@ const router = new VueRouter({
213213
})
214214

215215
export default router
216+
217+
export const noAuthenRoutes = [
218+
'Login',
219+
'Register',
220+
'ResetPassword',
221+
'NewPassword'
222+
]

src/utils/auth.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ export function loadRefreshToken (): string {
1818
}
1919

2020
export function getAuthorizationHeaderValue (accessToken?: string): string {
21-
if (accessToken !== undefined) {
22-
return `Bearer ${accessToken}`
21+
const token = accessToken || loadAccessToken()
22+
if (token === undefined || token === null || token === '') {
23+
return ''
2324
} else {
24-
return `Bearer ${loadAccessToken()}`
25+
return `Bearer ${token}`
2526
}
2627
}
2728

src/views/account/ChangePassword.vue

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,18 @@
4646

4747
<script lang="ts">
4848
import { Api } from '@/api'
49-
import { snakeCaseToCamelCase } from '@/utils'
49+
import { snakeCaseToCamelCase, unexpectedExc } from '@/utils'
5050
import { assertErrCode, status } from '@/utils/status-codes'
5151
import { Vue, Component } from 'vue-property-decorator'
52+
import { mapMutations } from 'vuex'
5253
53-
@Component
54+
@Component({
55+
methods: {
56+
...mapMutations('message', {
57+
showMessage: 'SHOW_MESSAGE'
58+
})
59+
}
60+
})
5461
export default class ChangePassword extends Vue {
5562
// eslint-disable-next-line no-undef
5663
[key: string]: unknown
@@ -70,6 +77,7 @@ export default class ChangePassword extends Vue {
7077
showCurrentPassword = false
7178
showNewPassword = false
7279
loading = false
80+
showMessage!: CallableFunction
7381
7482
changePassword (): void {
7583
if (this.loading) return
@@ -80,6 +88,7 @@ export default class ChangePassword extends Vue {
8088
new_password: this.newPassword
8189
})
8290
.then(() => {
91+
this.showMessage('Password changed.')
8392
this.$router.push({ name: 'MyInfo' })
8493
})
8594
.catch(err => {
@@ -91,6 +100,8 @@ export default class ChangePassword extends Vue {
91100
})
92101
} else if (assertErrCode(err, status.HTTP_403_FORBIDDEN)) {
93102
this.currentPasswordErrs = [err.response.data.detail]
103+
} else {
104+
unexpectedExc(err)
94105
}
95106
})
96107
.finally(() => {

src/views/auth/NewPassword.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,22 @@ import { Api } from '@/api'
4545
import { snakeCaseToCamelCase } from '@/utils'
4646
import { assertErrCode, status } from '@/utils/status-codes'
4747
import { Vue, Component } from 'vue-property-decorator'
48+
import { mapMutations } from 'vuex'
4849
49-
@Component
50+
@Component({
51+
methods: {
52+
...mapMutations('message', {
53+
showMessage: 'SHOW_MESSAGE'
54+
})
55+
}
56+
})
5057
export default class NewPassword extends Vue {
5158
// eslint-disable-next-line no-undef
5259
[index: string]: unknown
5360
5461
token = ''
5562
uid = ''
63+
showMessage!: CallableFunction
5664
5765
created (): void {
5866
this.token = (this.$route.query.token as string) || ''
@@ -74,6 +82,7 @@ export default class NewPassword extends Vue {
7482
password: this.password
7583
})
7684
.then(() => {
85+
this.showMessage('Password reset completed. You can login with your new password.')
7786
this.$router.push({ name: 'Login' })
7887
})
7988
.catch(err => {

src/views/classroom/ClassroomExercisesReadingTeacher.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ import { ReadingExercise } from '@/interfaces/reading-exercise'
105105
import { unexpectedExc } from '@/utils'
106106
import { PAGE_SIZE } from '@/utils/constants'
107107
import { Vue, Component } from 'vue-property-decorator'
108-
import { mapState } from 'vuex'
108+
import { mapMutations, mapState } from 'vuex'
109109
110110
declare interface _Exercise extends ReadingExercise {
111111
isChosen: boolean
@@ -120,6 +120,11 @@ declare interface _Exercise extends ReadingExercise {
120120
...mapState('classroom', {
121121
classroom: 'currentClassroom'
122122
})
123+
},
124+
methods: {
125+
...mapMutations('message', {
126+
showMessage: 'SHOW_MESSAGE'
127+
})
123128
}
124129
})
125130
export default class ClassroomExercisesReadingTeacher extends Vue {
@@ -133,6 +138,7 @@ export default class ClassroomExercisesReadingTeacher extends Vue {
133138
pagination!: PaginatedRes
134139
classroom!: Classroom
135140
page = 1
141+
showMessage!: CallableFunction
136142
137143
created (): void {
138144
this.setExercises()
@@ -180,6 +186,9 @@ export default class ClassroomExercisesReadingTeacher extends Vue {
180186
promises = promises.filter(promise => promise !== null)
181187
182188
Promise.all(promises)
189+
.then(() => {
190+
this.showMessage('Exercises saved.')
191+
})
183192
.catch(unexpectedExc)
184193
.finally(() => {
185194
this.saving = false

src/views/reading-exercise/ReadingExerciseDetail.vue

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@
4545
</v-icon>
4646
Edit exercise
4747
</v-btn>
48-
<div v-html="exercise.content"></div>
48+
<div
49+
v-html="exercise.content"
50+
class="mt-1"
51+
></div>
4952
</v-col>
5053
<v-col
5154
cols="6"
@@ -147,8 +150,14 @@ import { Mixins, Component } from 'vue-property-decorator'
147150
import { ReadingExerciseMixin } from '@/mixins/reading-exercise-mixin'
148151
import { unexpectedExc } from '@/utils'
149152
import KLDialogConfirm from '@/components/KLDialogConfirm.vue'
153+
import { mapMutations } from 'vuex'
150154
151155
@Component({
156+
methods: {
157+
...mapMutations('message', {
158+
showMessage: 'SHOW_MESSAGE'
159+
})
160+
},
152161
components: {
153162
KLDialogConfirm
154163
}
@@ -184,13 +193,15 @@ export default class ReadingExerciseDetail extends Mixins(ReadingExerciseMixin)
184193
*/
185194
confirmDelete = false
186195
deleting = false
196+
showMessage!: CallableFunction
187197
188198
deleteExercise (): void {
189199
if (this.deleting) return
190200
this.deleting = true
191201
192202
this.$store.dispatch('readingExercise/delete', this.exercise.pk)
193203
.then(() => {
204+
this.showMessage('Exercise deleted.')
194205
this.$router.push({ name: 'ReadingExerciseList' })
195206
})
196207
.catch(unexpectedExc)

0 commit comments

Comments
 (0)