Skip to content

Commit

Permalink
✨ Add navbar links to login, upload & logout
Browse files Browse the repository at this point in the history
  • Loading branch information
jeanremy committed May 16, 2021
1 parent bb9c933 commit 308860f
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 10 deletions.
27 changes: 23 additions & 4 deletions src/components/global/Navbar.vue
@@ -1,19 +1,30 @@
<template>
<b-navbar toggleable="sm" type="dark" class="navbar">
<b-navbar toggleable="sm" type="dark" class="navbar w-100">
<b-navbar-brand class="navbar-brand">
<img src="images/surfrider.svg" alt="surfrider-logo" class="logo" />
</b-navbar-brand>

<b-navbar-toggle target="nav-collapse"></b-navbar-toggle>

<b-collapse id="nav-collapse" is-nav>
<b-navbar-nav>
<b-collapse id="nav-collapse" class="w-100" is-nav>
<b-navbar-nav class="d-flex align-items-center w-100">
<b-nav-item href="/">
<router-link to="/">Annotate</router-link>
</b-nav-item>
<b-nav-item>
<router-link to="/tutorial">Tutorial</router-link>
</b-nav-item>
<b-nav-item v-if="isLoggedIn">
<router-link to="/upload">Upload</router-link>
</b-nav-item>
<b-nav-item v-if="isLoggedIn" class="ml-auto">
<b-button variant="outline-primary" @click="logout">
Logout
</b-button>
</b-nav-item>
<b-nav-item v-if="!isLoggedIn" class="ml-auto">
<router-link to="/login">Login</router-link>
</b-nav-item>
</b-navbar-nav>
</b-collapse>
</b-navbar>
Expand All @@ -22,8 +33,16 @@
<script lang="ts">
import Vue from "vue";
import Component from "vue-class-component";
import { mapGetters, mapMutations } from "vuex";
@Component({})
@Component({
computed: {
...mapGetters(["isLoggedIn"])
},
methods: {
...mapMutations(["logout"])
}
})
export default class NavBar extends Vue {}
</script>

Expand Down
4 changes: 3 additions & 1 deletion src/components/login/LoginForm.vue
Expand Up @@ -112,7 +112,9 @@ export default class LoginForm extends Vue {
})
.catch(prodError => {
this.$data.status = "error";
this.console.error(prodError);
this.$router.push("/");
console.error(prodError);
});
}
}
Expand Down
27 changes: 22 additions & 5 deletions src/store/store.ts
Expand Up @@ -25,6 +25,7 @@ const developmentAnnotationLabels: AnnotationLabel[] = [
{ id: 2, name: "paper" },
{ id: 3, name: "some super long trash name" }
]; // TODO : Should be fetch from API
const savedAuth = localStorage.getItem("auth");

type ContextSelections = {
quality: QualityValue | null;
Expand All @@ -33,9 +34,9 @@ type ContextSelections = {
};
export type State = {
axiosRequestConfig?: AxiosRequestConfig;
auth?: {
token: string;
expires: string;
auth: {
token?: string;
expires?: string;
};
useAxios: boolean;
contextSelections?: ContextSelections;
Expand All @@ -61,6 +62,7 @@ export type State = {
};
export const initialState: State = {
useAxios: false,
auth: savedAuth ? JSON.parse(savedAuth) : {},
image: {
loader: undefined,
loaded: false,
Expand All @@ -84,7 +86,10 @@ const mutations = {
baseURL: url,
headers: {
"Content-Type": "application/json;charset=utf-8",
"Access-Control-Allow-Origin": "*"
"Access-Control-Allow-Origin": "*",
Authorization: state.auth.token
? `Bearer ${state.auth.token}`
: undefined
}
};
},
Expand Down Expand Up @@ -224,11 +229,22 @@ const mutations = {

login(state: State, payload: { token: string; expires: string }): void {
state.auth = payload;
localStorage.setItem("auth", JSON.stringify(payload));
if (state.axiosRequestConfig) {
state.axiosRequestConfig.headers[
state.axiosRequestConfig.headers.common[
"Authorization"
] = `Bearer ${payload.token}`;
}
},

logout(state: State): void {
state.auth = {};
localStorage.removeItem("auth");
if (state.axiosRequestConfig) {
state.axiosRequestConfig.headers.common[
"Authorization"
] = undefined;
}
}
};

Expand All @@ -241,6 +257,7 @@ const store = new Vuex.Store({
mutations: mutations,
getters: {
getAxiosRequestConfig: state => state.axiosRequestConfig,
isLoggedIn: state => !!(state.auth && state.auth.token),
getAnnotationsWithLabel: state => {
return state.annotations.filter(
annotation => !!annotation.annotationLabel
Expand Down

0 comments on commit 308860f

Please sign in to comment.