fix token refresh on window focus, deactivate webkit playwright tests

This commit is contained in:
Gregor Vostrak
2024-06-24 17:18:08 +02:00
parent 237b3832bb
commit a10d0569af
4 changed files with 26 additions and 17 deletions

View File

@@ -44,10 +44,10 @@ export default defineConfig({
use: { ...devices['Desktop Firefox'] }, use: { ...devices['Desktop Firefox'] },
}, },
{ // {
name: 'webkit', // name: 'webkit',
use: { ...devices['Desktop Safari'] }, // use: { ...devices['Desktop Safari'] },
}, // },
/* Test against mobile viewports. */ /* Test against mobile viewports. */
// { // {

View File

@@ -4,17 +4,17 @@ import Banner from '@/Components/Banner.vue';
import OrganizationSwitcher from '@/Components/OrganizationSwitcher.vue'; import OrganizationSwitcher from '@/Components/OrganizationSwitcher.vue';
import CurrentSidebarTimer from '@/Components/CurrentSidebarTimer.vue'; import CurrentSidebarTimer from '@/Components/CurrentSidebarTimer.vue';
import { import {
Bars3Icon,
ChartBarIcon, ChartBarIcon,
ClockIcon, ClockIcon,
Cog6ToothIcon, Cog6ToothIcon,
CreditCardIcon,
FolderIcon, FolderIcon,
HomeIcon, HomeIcon,
TagIcon, TagIcon,
UserCircleIcon, UserCircleIcon,
UserGroupIcon, UserGroupIcon,
Bars3Icon,
XMarkIcon, XMarkIcon,
CreditCardIcon,
} from '@heroicons/vue/20/solid'; } from '@heroicons/vue/20/solid';
import NavigationSidebarItem from '@/Components/NavigationSidebarItem.vue'; import NavigationSidebarItem from '@/Components/NavigationSidebarItem.vue';
import UserSettingsIcon from '@/Components/UserSettingsIcon.vue'; import UserSettingsIcon from '@/Components/UserSettingsIcon.vue';
@@ -32,6 +32,7 @@ import {
import { isBillingActivated } from '@/utils/billing'; import { isBillingActivated } from '@/utils/billing';
import type { User } from '@/types/models'; import type { User } from '@/types/models';
import { ArrowsRightLeftIcon } from '@heroicons/vue/16/solid'; import { ArrowsRightLeftIcon } from '@heroicons/vue/16/solid';
import { fetchToken, isTokenValid } from '@/utils/api';
defineProps({ defineProps({
title: String, title: String,
@@ -45,7 +46,10 @@ onMounted(async () => {
window.initialDataLoaded = true; window.initialDataLoaded = true;
initializeStores(); initializeStores();
} }
window.onfocus = () => { window.onfocus = async () => {
if (!isTokenValid()) {
await fetchToken();
}
refreshStores(); refreshStores();
}; };
}); });

View File

@@ -5,6 +5,7 @@ import type {
ZodiosQueryParamsByAlias, ZodiosQueryParamsByAlias,
} from '@zodios/core'; } from '@zodios/core';
import { api } from '../../../openapi.json.client'; import { api } from '../../../openapi.json.client';
import { router } from '@inertiajs/vue3';
export type SolidTimeApi = ApiOf<typeof api>; export type SolidTimeApi = ApiOf<typeof api>;
@@ -123,3 +124,16 @@ export type UpdateOrganizationBody = ZodiosBodyByAlias<
SolidTimeApi, SolidTimeApi,
'updateOrganization' 'updateOrganization'
>; >;
export async function fetchToken() {
return new Promise((resolve) => {
router.reload({
onFinish: () => {
resolve(null);
},
});
});
}
export function isTokenValid() {
return window.document.cookie.includes('solidtime_session');
}

View File

@@ -2,6 +2,7 @@ import { defineStore } from 'pinia';
import { ref } from 'vue'; import { ref } from 'vue';
import axios from 'axios'; import axios from 'axios';
import { router } from '@inertiajs/vue3'; import { router } from '@inertiajs/vue3';
import { fetchToken } from '@/utils/api';
export type NotificationType = 'success' | 'error'; export type NotificationType = 'success' | 'error';
@@ -37,16 +38,6 @@ export const useNotificationsStore = defineStore('notifications', () => {
} }
} }
async function fetchToken() {
return new Promise((resolve) => {
router.reload({
onFinish: () => {
resolve(null);
},
});
});
}
async function handleApiRequestNotifications<T>( async function handleApiRequestNotifications<T>(
apiRequest: () => Promise<T>, apiRequest: () => Promise<T>,
successMessage?: string, successMessage?: string,