From 081df029e0414a8ddeeb1d480fefd0b3655ad55c Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Wed, 20 Mar 2024 13:10:57 -0400 Subject: [PATCH] refactor: de-duplicate code into handleResponse helper and add support for success notifications --- app/data/auth-provider.ts | 70 +++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/app/data/auth-provider.ts b/app/data/auth-provider.ts index 0f207b0..9b94720 100644 --- a/app/data/auth-provider.ts +++ b/app/data/auth-provider.ts @@ -4,12 +4,15 @@ import type { AuthActionResponse, CheckResponse, IdentityResponse, - OnErrorResponse + OnErrorResponse, + SuccessNotificationResponse // @ts-ignore } from "@refinedev/core/dist/interfaces/bindings/auth" import {Sdk} from "@lumeweb/portal-sdk"; import type {AccountInfoResponse} from "@lumeweb/portal-sdk"; +; + export type AuthFormRequest = { email: string; password: string; @@ -31,7 +34,7 @@ export type Identity = { email: string; } -export interface UpdatePasswordFormRequest extends UpdatePasswordFormTypes{ +export interface UpdatePasswordFormRequest extends UpdatePasswordFormTypes { currentPassword: string; } @@ -43,6 +46,39 @@ export const createPortalAuthProvider = (sdk: Sdk): AuthProvider => { } }; + type ResponseResult = { + ret: boolean | Error; + successNotification?: SuccessNotificationResponse; + redirectToSuccess?: string; + redirectToError?: string; + successCb?: () => void; + } + + const handleResponse = (result: ResponseResult): AuthActionResponse => { + if (result.ret) { + if (result.ret instanceof Error) { + return { + success: false, + error: result.ret, + redirectTo: result.redirectToError + } + } + + result.successCb?.(); + + return { + success: true, + successNotification: result.successNotification, + redirectTo: result.redirectToSuccess, + } + } + + return { + success: false, + redirectTo: result.redirectToError + } + } + return { async login(params: AuthFormRequest): Promise { const ret = await sdk.account().login({ @@ -68,17 +104,13 @@ export const createPortalAuthProvider = (sdk: Sdk): AuthProvider => { async logout(params: any): Promise { let ret = await sdk.account().logout(); - return {success: ret, redirectTo: "/login"}; + return handleResponse({ret, redirectToSuccess: "/login"}); }, async check(params?: any): Promise { const ret = await sdk.account().ping(); - if (ret) { - maybeSetupAuth(); - } - - return {authenticated: ret, redirectTo: ret ? undefined : "/login"}; + return handleResponse({ret, redirectToError: "/login", successCb: maybeSetupAuth}); }, async onError(error: any): Promise { @@ -92,7 +124,7 @@ export const createPortalAuthProvider = (sdk: Sdk): AuthProvider => { first_name: params.firstName, last_name: params.lastName, }); - return {success: ret, redirectTo: ret ? "/dashboard" : undefined}; + return handleResponse({ret, redirectToSuccess: "/login"}); }, async forgotPassword(params: any): Promise { @@ -103,22 +135,12 @@ export const createPortalAuthProvider = (sdk: Sdk): AuthProvider => { maybeSetupAuth(); const ret = await sdk.account().updatePassword(params.currentPassword, params.password as string); - if (ret) { - if (ret instanceof Error) { - return { - success: false, - error: ret - } + return handleResponse({ + ret, successNotification: { + message: "Password Updated", + description: "Your password has been updated successfully.", } - - return { - success: true - } - } else { - return { - success: false - } - } + }); }, async getPermissions(params?: Record): Promise {