120 lines
3.4 KiB
TypeScript
120 lines
3.4 KiB
TypeScript
import {
|
|
BaseNavigator,
|
|
NavigationType,
|
|
CtaParameter,
|
|
ParameterType,
|
|
} from "../interface";
|
|
import { BASE_SCREEN } from "../constants/ScreenNameConstants";
|
|
import {
|
|
BaseActionTypes,
|
|
GenericActionPayload,
|
|
ActionMetaData,
|
|
} from "../actions/GenericAction";
|
|
import WidgetActionHandler from "../widgets/widget-actions/WidgetActionHandler";
|
|
import { ScreenActionHandler } from "../screen/ScreenActionHandler";
|
|
import { logToSentry } from "../hooks/useSentryLogging";
|
|
|
|
export const CtaNavigator: BaseNavigator = {
|
|
navigate: (navigationRef, ctaData) => {
|
|
navigationRef?.navigate(BASE_SCREEN, { ctaData });
|
|
},
|
|
goBack: navigationRef => {
|
|
navigationRef?.goBack();
|
|
},
|
|
push: (navigationRef, ctaData) => {
|
|
navigationRef?.push(BASE_SCREEN, { ctaData });
|
|
},
|
|
|
|
performNavigation: (navigation, type, ctaData) => {
|
|
switch (type) {
|
|
case NavigationType.NAVIGATE:
|
|
CtaNavigator.navigate(navigation, ctaData);
|
|
break;
|
|
case NavigationType.GO_BACK:
|
|
CtaNavigator.goBack(navigation);
|
|
break;
|
|
case NavigationType.PUSH:
|
|
CtaNavigator.navigate(navigation, ctaData);
|
|
break;
|
|
default:
|
|
CtaNavigator.push(navigation, ctaData);
|
|
break;
|
|
}
|
|
},
|
|
};
|
|
|
|
export const extractCtaParameters = (
|
|
ctaData: any,
|
|
): {
|
|
preQuoteId?: string | undefined | null;
|
|
quoteId?: string | undefined | null;
|
|
navigatorType?: string | undefined | null;
|
|
} => {
|
|
let preQuoteId: string | undefined | null = undefined;
|
|
let quoteId: string | undefined | null = undefined;
|
|
let navigatorType: string | undefined | null = undefined;
|
|
|
|
ctaData?.parameters?.forEach((item: CtaParameter) => {
|
|
switch (item.key) {
|
|
case ParameterType.PRE_QUOTE_ID:
|
|
preQuoteId = item.value;
|
|
break;
|
|
case ParameterType.QUOTE_ID:
|
|
quoteId = item.value;
|
|
break;
|
|
case ParameterType.NAVIGATOR_TYPE:
|
|
navigatorType = item.value;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
});
|
|
|
|
return { preQuoteId, quoteId, navigatorType };
|
|
};
|
|
|
|
export const Router = {
|
|
handleAction(actionPayload: GenericActionPayload, navigation?: any): void {
|
|
switch (actionPayload.baseActionType) {
|
|
case BaseActionTypes.WIDGET_ACTION: {
|
|
actionPayload.metaData?.forEach(
|
|
(widgetMetaData: ActionMetaData, _: number) => {
|
|
if (!!actionPayload.setScreenData) {
|
|
WidgetActionHandler.handleWidgetAction(
|
|
!!widgetMetaData ? widgetMetaData : {},
|
|
actionPayload.setScreenData,
|
|
actionPayload.setErrorMetaData,
|
|
actionPayload.screenData,
|
|
actionPayload.ctaData,
|
|
navigation,
|
|
);
|
|
}
|
|
},
|
|
);
|
|
break;
|
|
}
|
|
case BaseActionTypes.SCREEN_ACTION: {
|
|
actionPayload.metaData?.forEach(
|
|
(screenMetaData: ActionMetaData, _: number) => {
|
|
if (!!actionPayload.setScreenData) {
|
|
ScreenActionHandler.handleScreenAction(
|
|
!!screenMetaData ? screenMetaData : {},
|
|
actionPayload.setScreenData,
|
|
actionPayload.screenData,
|
|
navigation,
|
|
);
|
|
}
|
|
},
|
|
);
|
|
break;
|
|
}
|
|
default: {
|
|
logToSentry(
|
|
`Invalid baseActionType ${actionPayload.baseActionType} | MethodName: Router.handleAction`,
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
};
|