mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-16 20:22:15 +01:00
fix token refresh on window focus, deactivate webkit playwright tests
This commit is contained in:
@@ -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. */
|
||||||
// {
|
// {
|
||||||
|
|||||||
@@ -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();
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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');
|
||||||
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user