🪇 Implements major structure and service refactors

This commit is contained in:
Rune Harlyk
2024-08-19 20:13:57 +02:00
committed by Rune Harlyk
parent 9978918bf9
commit 3da1717341
23 changed files with 139 additions and 121 deletions
+17
View File
@@ -0,0 +1,17 @@
import { api } from '$lib/api';
import { notifications } from '$lib/components/toasts/notifications';
import { onMount } from 'svelte';
import { writable } from 'svelte/store';
export function useFeatureFlags() {
const featureFlags = writable<Record<string, boolean>>({});
onMount(async () => {
const result = await api.get<Record<string, boolean>>('/api/features');
if (result.isOk()) featureFlags.set(result.inner);
else {
notifications.error('Feature flag could not fetched', 2500);
}
});
return featureFlags;
}
+20 -29
View File
@@ -1,36 +1,27 @@
import { type IMU } from '$lib/types/models';
import { writable } from 'svelte/store';
let imu_data = {
x: <number[]>[],
y: <number[]>[],
z: <number[]>[],
imu_temp: <number[]>[],
altitude: <number[]>[],
pressure: <number[]>[],
bmp_temp: <number[]>[]
};
import type { IMU } from '$lib/types/models';
const maxIMUData = 100;
function createIMU() {
const { subscribe, update } = writable(imu_data);
export const imu = (() => {
const { subscribe, update } = writable({
x: [] as number[],
y: [] as number[],
z: [] as number[],
imu_temp: [] as number[],
altitude: [] as number[],
pressure: [] as number[],
bmp_temp: [] as number[]
});
return {
subscribe,
addData: (content: IMU) => {
update((imu_data) => ({
...imu_data,
x: [...imu_data.x, content.x].slice(-maxIMUData),
y: [...imu_data.y, content.y].slice(-maxIMUData),
z: [...imu_data.z, content.z].slice(-maxIMUData),
imu_temp: [...imu_data.imu_temp, content.imu_temp].slice(-maxIMUData),
altitude: [...imu_data.altitude, content.altitude].slice(-maxIMUData),
pressure: [...imu_data.pressure, content.pressure].slice(-maxIMUData),
bmp_temp: [...imu_data.bmp_temp, content.bmp_temp].slice(-maxIMUData)
}));
}
const addData = (content: IMU) => {
update((data) => {
(Object.keys(content) as (keyof IMU)[]).forEach((key) => {
data[key] = [...data[key], content[key]].slice(-maxIMUData);
});
return data;
});
};
}
export const imu = createIMU();
return { subscribe, addData };
})();
+1
View File
@@ -6,3 +6,4 @@ export * from './fullscreen';
export * from './telemetry';
export * from './analytics';
export * from './user';
export * from './featureFlags';
+12 -27
View File
@@ -1,55 +1,40 @@
import { writable } from 'svelte/store';
import { goto } from '$app/navigation';
import { jwtDecode } from 'jwt-decode';
import { persistentStore } from '$lib/utilities';
export type userProfile = {
export type UserProfile = {
username: string;
admin: boolean;
bearer_token: string;
};
type decodedJWT = {
username: string;
admin: boolean;
};
type DecodedJWT = Omit<UserProfile, 'bearer_token'>;
let empty = {
const emptyUser: UserProfile = {
username: '',
admin: false,
bearer_token: ''
};
function createStore() {
const { subscribe, set } = writable(empty);
// retrieve store from sessionStorage / localStorage if available
const userdata = localStorage.getItem('user');
if (userdata) {
set(JSON.parse(userdata));
}
function createUserStore() {
const store = persistentStore<UserProfile>('user', emptyUser);
return {
subscribe,
subscribe: store.subscribe,
init: (access_token: string) => {
const decoded: decodedJWT = jwtDecode(access_token);
const userdata = {
const decoded: DecodedJWT = jwtDecode(access_token);
const userProfile: UserProfile = {
bearer_token: access_token,
username: decoded.username,
admin: decoded.admin
};
set(userdata);
// persist store in sessionStorage / localStorage
localStorage.setItem('user', JSON.stringify(userdata));
store.set(userProfile);
},
invalidate: () => {
console.log('Log out user');
set(empty);
// remove localStorage "user"
localStorage.removeItem('user');
// redirect to login page
store.set(emptyUser);
goto('/');
}
};
}
export const user = createStore();
export const user = createUserStore();