Next.js 16, React 19.2, Identities page, Invitations identities step, PNPM Catalogs (#381)
* Upgraded to Next.js 16 * Refactored code to comply with React 19.2 ESLint rules * Refactored some useEffect usages with the new useEffectEvent * Added Identities page and added second step to set up an identity after accepting an invitation * Updated all dependencies * Introduced PNPM catalogs for some frequently updated dependencies * Bugs fixing and improvements
This commit is contained in:
committed by
GitHub
parent
ea0c1dde80
commit
2c0d0bf7a1
@@ -11,9 +11,9 @@
|
||||
},
|
||||
"author": "Makerkit",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.55.1",
|
||||
"@supabase/supabase-js": "2.58.0",
|
||||
"@types/node": "^24.6.2",
|
||||
"@playwright/test": "^1.56.1",
|
||||
"@supabase/supabase-js": "2.76.1",
|
||||
"@types/node": "catalog:",
|
||||
"dotenv": "17.2.3",
|
||||
"node-html-parser": "^7.0.1",
|
||||
"totp-generator": "^2.0.0"
|
||||
|
||||
@@ -103,9 +103,6 @@ test.describe('Admin', () => {
|
||||
),
|
||||
]);
|
||||
|
||||
// TODO: remove when https://github.com/makerkit/next-supabase-saas-kit-turbo/issues/356 is solved
|
||||
await page.reload();
|
||||
|
||||
await expect(page.getByText('Banned').first()).toBeVisible();
|
||||
|
||||
await page.context().clearCookies();
|
||||
@@ -154,9 +151,6 @@ test.describe('Admin', () => {
|
||||
|
||||
await page.waitForTimeout(250);
|
||||
|
||||
// TODO: remove when https://github.com/makerkit/next-supabase-saas-kit-turbo/issues/356 is solved
|
||||
await page.reload();
|
||||
|
||||
// Verify ban badge is removed
|
||||
await expect(page.getByText('Banned')).not.toBeVisible();
|
||||
|
||||
|
||||
@@ -29,22 +29,15 @@ test.describe('Password Reset Flow', () => {
|
||||
subject: 'Reset your password',
|
||||
});
|
||||
|
||||
await page.waitForURL('/update-password');
|
||||
await page.waitForURL(new RegExp('/update-password?.*'));
|
||||
|
||||
await auth.updatePassword(newPassword);
|
||||
|
||||
await page
|
||||
.locator('a', {
|
||||
hasText: 'Back to Home Page',
|
||||
})
|
||||
.click();
|
||||
|
||||
await page.waitForURL('/home');
|
||||
}).toPass();
|
||||
|
||||
await page.context().clearCookies();
|
||||
|
||||
await page.waitForURL('/');
|
||||
await page.reload();
|
||||
await page.goto('/auth/sign-in');
|
||||
|
||||
await auth.loginAsUser({
|
||||
|
||||
@@ -115,19 +115,37 @@ export class InvitationsPageObject {
|
||||
async acceptInvitation() {
|
||||
console.log('Accepting invitation...');
|
||||
|
||||
await Promise.all([
|
||||
this.page
|
||||
.locator('[data-test="join-team-form"] button[type="submit"]')
|
||||
.click(),
|
||||
this.page.waitForResponse((response) => {
|
||||
return (
|
||||
response.url().includes('/join') &&
|
||||
response.request().method() === 'POST'
|
||||
);
|
||||
}),
|
||||
]);
|
||||
const click = this.page
|
||||
.locator('[data-test="join-team-form"] button[type="submit"]')
|
||||
.click();
|
||||
|
||||
console.log('Invitation accepted');
|
||||
const response = this.page.waitForResponse((response) => {
|
||||
return (
|
||||
response.url().includes('/join') &&
|
||||
response.request().method() === 'POST'
|
||||
);
|
||||
});
|
||||
|
||||
await Promise.all([click, response]);
|
||||
|
||||
// wait for animation to complete
|
||||
await this.page.waitForTimeout(500);
|
||||
|
||||
// skip authentication setup
|
||||
const skipIdentitiesButton = this.page.locator(
|
||||
'[data-test="skip-identities-button"]',
|
||||
);
|
||||
|
||||
if (
|
||||
await skipIdentitiesButton.isVisible({
|
||||
timeout: 1000,
|
||||
})
|
||||
) {
|
||||
await skipIdentitiesButton.click();
|
||||
}
|
||||
|
||||
// wait for redirect to account home
|
||||
await this.page.waitForURL(new RegExp('/home/[a-z0-9-]+'));
|
||||
}
|
||||
|
||||
private getInviteForm() {
|
||||
|
||||
Reference in New Issue
Block a user