This commit is contained in:
parent
8af40bfe50
commit
1dff7573ff
@ -1,13 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { RouterLink, RouterView } from 'vue-router'
|
import { RouterView } from 'vue-router'
|
||||||
import ErrorWrapper from "@/views/errorWrapper.vue";
|
import ErrorWrapper from "@/views/errorWrapper.vue";
|
||||||
|
import ProjectComponent from "@/components/ProjectComponent.vue";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Header />
|
<HeaderComponent />
|
||||||
<error-wrapper></error-wrapper>
|
<error-wrapper></error-wrapper>
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<ProjectComp
|
<ProjectComponent
|
||||||
v-for="(project, index) in projects"
|
v-for="(project, index) in projects"
|
||||||
:key="index"
|
:key="index"
|
||||||
:project-name="project.name"
|
:project-name="project.name"
|
||||||
@ -17,14 +18,12 @@ import ErrorWrapper from "@/views/errorWrapper.vue";
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Header from "@/components/Header.vue";
|
import HeaderComponent from "@/components/HeaderComponent.vue";
|
||||||
import ProjectComp from "@/components/Project-comp.vue";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'App',
|
name: 'App',
|
||||||
components: {
|
components: {
|
||||||
Header,
|
HeaderComponent,
|
||||||
ProjectComp,
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: 'Header',
|
name: 'HeaderComponent',
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -9,10 +9,15 @@
|
|||||||
|
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import type {PropType} from "vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Project',
|
name: 'ProjectComponent',
|
||||||
props: {
|
props: {
|
||||||
projectName: String,
|
projectName: {
|
||||||
|
type: Object as PropType<string>,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
@ -1,12 +1,24 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const props = defineProps(['data']);
|
import {color} from "@/services/popupDisplayer.ts";
|
||||||
|
import type {PropType} from "vue";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
errorMessage: {
|
||||||
|
type: Object as PropType<string>,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
errorColor: {
|
||||||
|
type: Object as PropType<color>,
|
||||||
|
default: color.Red
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class='["red", "yellow", "blue", "green"][data.type]' class="error-modal">
|
<div :class='["red", "yellow", "blue", "green"][errorColor]' class="error-modal">
|
||||||
<p>{{["Erreur :(", "Warning :|", "Info :)", "Succes ;)"][data.type]}}</p>
|
<p>{{["Erreur :(", "Warning :|", "Info :)", "Succes ;)"][errorColor]}}</p>
|
||||||
<p>{{data.errorMessage}}</p>
|
<p>{{errorMessage}}</p>
|
||||||
<div class="loading" :class='["red-loader", "yellow-loader", "blue-loader", "green-loader"][data.type]'></div>
|
<div class="loading" :class='["red-loader", "yellow-loader", "blue-loader", "green-loader"][errorColor]'></div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -3,10 +3,11 @@ import App from './App.vue'
|
|||||||
import router from './router/router.ts'
|
import router from './router/router.ts'
|
||||||
import {createPinia} from "pinia";
|
import {createPinia} from "pinia";
|
||||||
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
|
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
|
||||||
import AuthStorePlugin from './plugins/authStore';
|
|
||||||
import keycloakService from './services/keycloak';
|
import keycloakService from './services/keycloak';
|
||||||
import {useAuthStore} from "@/stores/authStore.ts";
|
import {type AuthStore, useAuthStore} from "@/stores/authStore.ts";
|
||||||
let store: any;
|
|
||||||
|
|
||||||
|
let store: AuthStore;
|
||||||
|
|
||||||
keycloakService.CallInit(() => {
|
keycloakService.CallInit(() => {
|
||||||
try {
|
try {
|
||||||
@ -16,8 +17,8 @@ keycloakService.CallInit(() => {
|
|||||||
const pinia = createPinia();
|
const pinia = createPinia();
|
||||||
pinia.use(piniaPluginPersistedstate);
|
pinia.use(piniaPluginPersistedstate);
|
||||||
app.use(pinia);
|
app.use(pinia);
|
||||||
app.use(AuthStorePlugin, { pinia });
|
|
||||||
store = useAuthStore();
|
store = useAuthStore();
|
||||||
|
keycloakService.CallInitStore(store);
|
||||||
app.use(router)
|
app.use(router)
|
||||||
|
|
||||||
app.mount('#app');
|
app.mount('#app');
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
// file: src/plugins/authStore.js
|
|
||||||
|
|
||||||
import { useAuthStore } from "@/stores/authStore.ts";
|
|
||||||
import keycloakService from '@/services/keycloak';
|
|
||||||
// Setup auth store as a plugin so it can be accessed globally in our FE
|
|
||||||
const authStorePlugin = {
|
|
||||||
install(app: any, option: any) {
|
|
||||||
const store = useAuthStore(option.pinia);
|
|
||||||
app.config.globalProperties.$store = store;
|
|
||||||
keycloakService.CallInitStore(store);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default authStorePlugin;
|
|
@ -9,7 +9,7 @@ const router = createRouter({
|
|||||||
// route level code-splitting
|
// route level code-splitting
|
||||||
// this generates a separate chunk (About.[hash].js) for this route
|
// this generates a separate chunk (About.[hash].js) for this route
|
||||||
// which is lazy-loaded when the route is visited.
|
// which is lazy-loaded when the route is visited.
|
||||||
component: () => import('../views/test.vue'),
|
component: () => import('../views/testComponent.vue'),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import axios from "axios";
|
import axios, {type AxiosError, type AxiosResponse} from "axios";
|
||||||
import {store} from "@/main.ts";
|
import {store} from "@/main.ts";
|
||||||
import {addNewMessage, color} from "@/services/popupDisplayer.ts";
|
import {addNewMessage, color} from "@/services/popupDisplayer.ts";
|
||||||
|
|
||||||
@ -34,21 +34,18 @@ axiosInstance.interceptors.response.use(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// TODO: spawn a error modal
|
// TODO: spawn a error modal
|
||||||
function defaultApiErrorHandler(err: string){
|
function defaultApiErrorHandler(err: AxiosError){
|
||||||
addNewMessage(err, color.Red);
|
addNewMessage(err.message, color.Red);
|
||||||
}
|
}
|
||||||
|
|
||||||
function defaultApiSuccessHandler(response: any){
|
function defaultApiSuccessHandler(response: AxiosResponse){
|
||||||
addNewMessage(response.data, color.green)
|
addNewMessage(response.data, color.Green)
|
||||||
}
|
}
|
||||||
function callApi(endpoint: string, onSuccessHandler?: any, onErrorHandler?: any): void {
|
function callApi(endpoint: string, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void): void {
|
||||||
axiosInstance.get(endpoint).then(
|
axiosInstance.get(endpoint).then(
|
||||||
onSuccessHandler == null ? defaultApiSuccessHandler : onSuccessHandler
|
onSuccessHandler == null ? defaultApiSuccessHandler : onSuccessHandler
|
||||||
).catch(
|
).catch(
|
||||||
(err) => {
|
onErrorHandler == null ? defaultApiErrorHandler: onErrorHandler
|
||||||
onErrorHandler == null ? defaultApiErrorHandler(err): onErrorHandler(err);
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import Keycloak from 'keycloak-js';
|
import Keycloak from 'keycloak-js';
|
||||||
|
import type {AuthStore} from "@/stores/authStore.ts";
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
url: import.meta.env.VITE_KEYCLOAK_URL,
|
url: import.meta.env.VITE_KEYCLOAK_URL,
|
||||||
@ -54,7 +55,7 @@ async function init(onInitCallback: () => void) {
|
|||||||
* Initializes store with Keycloak user data
|
* Initializes store with Keycloak user data
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
async function initStore(storeInstance: any) {
|
async function initStore(storeInstance: AuthStore) {
|
||||||
try {
|
try {
|
||||||
store = storeInstance
|
store = storeInstance
|
||||||
console.log(keycloak)
|
console.log(keycloak)
|
||||||
|
@ -1,5 +1,19 @@
|
|||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
enum color {Red, Yellow, Blue, green}
|
import {type Ref} from "vue";
|
||||||
|
enum color {Red, Yellow, Blue, Green}
|
||||||
|
|
||||||
|
type ErrorMessageContent = {
|
||||||
|
message: string;
|
||||||
|
color: color;
|
||||||
|
id: number;
|
||||||
|
timeout: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
let id: number = 0;
|
||||||
|
const getId = () => {
|
||||||
|
id = id+1;
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
function addNewMessage(errorMessage: string, type?: color, timeout?: number){
|
function addNewMessage(errorMessage: string, type?: color, timeout?: number){
|
||||||
if (timeout == null){
|
if (timeout == null){
|
||||||
@ -9,11 +23,11 @@ function addNewMessage(errorMessage: string, type?: color, timeout?: number){
|
|||||||
type = color.Red;
|
type = color.Red;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = {errorMessage: errorMessage, timeout: timeout, type: type, uid: Math.random()*100000};
|
const data: ErrorMessageContent = {message: errorMessage, timeout: timeout, color: type, id: getId()};
|
||||||
errorList.value.push(data)
|
errorList.value.push(data)
|
||||||
setTimeout(() => errorList.value.slice(0, 1), timeout)
|
setTimeout(() => errorList.value.slice(0, 1), timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
const errorList: any= ref([])
|
const errorList: Ref<ErrorMessageContent[]>= ref([])
|
||||||
|
|
||||||
export {addNewMessage, errorList, color}
|
export {addNewMessage, errorList, color, type ErrorMessageContent}
|
@ -1,10 +1,10 @@
|
|||||||
import { defineStore } from "pinia";
|
import { defineStore } from "pinia";
|
||||||
import keycloakService from '@/services/keycloak';
|
import keycloakService from '@/services/keycloak';
|
||||||
import type Keycloak from "keycloak-js";
|
import type Keycloak from "keycloak-js";
|
||||||
export const useAuthStore = defineStore("storeAuth", {
|
|
||||||
|
const useAuthStore = defineStore("storeAuth", {
|
||||||
state: () => {
|
state: () => {
|
||||||
return {
|
return {
|
||||||
testv: true,
|
|
||||||
authenticated: false,
|
authenticated: false,
|
||||||
user: {
|
user: {
|
||||||
token: "",
|
token: "",
|
||||||
@ -64,9 +64,6 @@ export const useAuthStore = defineStore("storeAuth", {
|
|||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
test() {
|
|
||||||
this.testv = !this.testv;
|
|
||||||
},
|
|
||||||
// Clear user's store data
|
// Clear user's store data
|
||||||
clearUserData() {
|
clearUserData() {
|
||||||
this.authenticated = false;
|
this.authenticated = false;
|
||||||
@ -77,4 +74,8 @@ export const useAuthStore = defineStore("storeAuth", {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type AuthStore = ReturnType<typeof useAuthStore>
|
||||||
|
|
||||||
|
export {useAuthStore, type AuthStore}
|
@ -6,7 +6,7 @@ import ErrorModal from "@/components/errorModal.vue";
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="error-wrapper">
|
<div class="error-wrapper">
|
||||||
<error-modal v-for="elm in errorList" :data=elm></error-modal>
|
<error-modal v-for="elm in errorList" :key="elm.id" :error-message=elm.message :error-color="elm.color"></error-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1,16 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {store} from "../main.ts";
|
import {store} from "../main.ts";
|
||||||
import {callApi} from "@/services/api.ts";
|
import {callApi} from "@/services/api.ts";
|
||||||
import ErrorModal from "@/components/errorModal.vue";
|
|
||||||
import {errorList} from "@/services/popupDisplayer.ts";
|
|
||||||
import TempModal from "@/components/temp-modal.vue";
|
import TempModal from "@/components/temp-modal.vue";
|
||||||
import ErrorWrapper from "@/App.vue";
|
|
||||||
function addResToTable(id: any){
|
|
||||||
return (req: any) => {
|
|
||||||
console.log(req)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user