Skip to content

Commit

Permalink
handleUIOptionsChange added
Browse files Browse the repository at this point in the history
  • Loading branch information
kanzitelli committed Oct 20, 2022
1 parent b353b49 commit 0b76aa6
Showing 1 changed file with 38 additions and 4 deletions.
42 changes: 38 additions & 4 deletions src/services/navigation/index.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,62 @@
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<string, string> = {}; // Record<ComponentName, ComponentId>

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());

// -- setting screen-based specific options
// 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),
);
}

0 comments on commit 0b76aa6

Please sign in to comment.