import {NavigationProp} from '@react-navigation/native'; import {NavigationOptions} from './types'; import {getOptions} from './utils'; import {StackNavigationOptions} from '@react-navigation/stack'; export const WHITE_LIST = [ 'vn.momo.appx', 'vn.momo.transactionhistory', 'vn.momo.promotionhub', 'vn.momo.payment', 'vn.momo.ekyc', ]; class Navigation { instance: NavigationProp; context: any; constructor(instance: any, context?: any) { this.instance = instance; this.context = context; } /** * navigation options filter by design system rule * @param params */ private filterParams = (params: NavigationOptions) => { if (params.headerLeft) { console.warn('headerLeft not allow override render by design system!'); delete params.headerLeft; } if ( params.headerRight && typeof params.headerRight !== 'object' && !WHITE_LIST.includes(this.context?.appId) ) { console.warn('headerRight not allow type func render by design system!'); delete params.headerRight; } if ( params.headerTitle && !['string', 'object'].includes(typeof params.headerTitle) && !WHITE_LIST.includes(this.context?.appId) ) { console.warn('headerTitle not allow type func render by design system!'); delete params.headerTitle; } return params; }; /** * navigation setOptions support props NavigationOptions base on react-navigation options * @param params */ setOptions = (params: NavigationOptions) => { const options = getOptions(this.filterParams(params)); this.instance.setOptions(options as StackNavigationOptions); }; } export default Navigation;