diff --git a/src/services/navigation/index.ts b/src/services/navigation/index.ts index 4f1d8cc..0c9b6fc 100644 --- a/src/services/navigation/index.ts +++ b/src/services/navigation/index.ts @@ -1,19 +1,45 @@ -import {navDefaultOptions, withTitle} from './options'; +import merge from 'lodash/merge'; +import { + navDefaultOptions, + screenDefaultOptions, + tabsDefaultOptions, +} from './options'; import {screens} from '../../screens'; import {services} from '..'; export class NavService implements IService { private inited = false; + private mountedScreens: Record = {}; // Record init = async (): PVoid => { if (!this.inited) { - this.setOptions(); + this.registerListeners(); + this.configureDefaultOptions(); this.inited = true; } }; - private setOptions = (): void => { + handleUIOptionsChange = () => { + // -- setting common default options + this.configureDefaultOptions(); + + // -- updating options among mounted screens + for (const cName in this.mountedScreens) { + screens.N.mergeOptions( + this.mountedScreens[cName], + merge( + screenDefaultOptions(), + tabsDefaultOptions(), + screens.get(cName as any).options, + ), + ); + } + }; + + private configureDefaultOptions = () => { + const {t} = services; + // -- setting common default options screens.N.setDefaultOptions(navDefaultOptions()); @@ -21,8 +47,16 @@ export class NavService implements IService { // for ex., if you want to use translate service screens.mergeOptions('Main', { topBar: { - ...withTitle(services.t.do('home.title')), + title: {text: t.do('home.title')}, + }, + bottomTab: { + text: t.do('home.title'), }, }); }; + + private registerListeners = () => + screens.N.events().registerComponentDidAppearListener( + e => (this.mountedScreens[e.componentName] = e.componentId), + ); }