Passed
Push — develop ( 588e30...c592f3 )
by Endre
04:05
created

src/Application/Container.ts   A

Complexity

Total Complexity 1
Complexity/F 1

Size

Lines of Code 90
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 81
dl 0
loc 90
ccs 0
cts 22
cp 0
rs 10
c 0
b 0
f 0
wmc 1
mnd 0
bc 0
fnc 1
bpm 0
cpm 1
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A Container.setupDefaults 0 8 1
1
import React from 'react';
2
import LanguageContainer from '../Language/Container';
3
import ListenerAdapter from '../Observer/ListenerAdapter';
4
import Observer, {IObserverAdapter} from '../Observer/Observer';
5
import RouterContainer from '../Router/Container';
6
import DataStorage from '../Storage/DataStorage';
7
import ThemeContainer from '../Theme/Container';
8
import Action from './Action';
9
import Application, {IAdapter} from './Application';
10
import ModuleLoader from './ModuleLoader';
11
import ApplicationPresenter from './View/Application/Presenter';
12
import StyleUrlFormatter from './View/Application/StyleUrlFormatter';
13
import PagePresenter from './View/Page/Presenter';
14
import SideMenuPresenter from './View/SideMenu/Presenter';
15
import TopBarPresenter from './View/TopBar/Presenter';
16
17
class Container {
18
  language: typeof LanguageContainer;
19
  theme: typeof ThemeContainer;
20
  applicationPresenter: ApplicationPresenter;
21
  topAppBarPresenter: TopBarPresenter;
22
  applicationAction: Action;
23
  menuOpenStateAdapter: IObserverAdapter<boolean>;
24
  menuOpenState: Observer<boolean>;
25
  sideMenuPresenter: SideMenuPresenter;
26
  moduleStateAdapter: ListenerAdapter<typeof React.Component | null>;
27
  moduleState: Observer<typeof React.Component | null>;
28
  moduleLoader: ModuleLoader;
29
  pagePresenter: PagePresenter;
30
  applicationActionAdapter: IAdapter;
31
  storage: DataStorage;
32
  styleUrlFormatter: StyleUrlFormatter;
33
  application: Application;
34
35
  constructor() {
36
    this.storage = new DataStorage('application', window.localStorage);
37
    this.language = LanguageContainer;
38
    this.theme = ThemeContainer;
39
40
    this.menuOpenStateAdapter = {onChange: ((newValue:boolean) => {})};
41
    this.menuOpenState = new Observer<boolean>(
42
      this.storage.loadData<boolean>('menuOpenState', false),
43
      this.storage.attach<boolean>('menuOpenState', this.menuOpenStateAdapter)
44
    );
45
46
    this.moduleStateAdapter = new ListenerAdapter<typeof React.Component | null>();
47
    this.moduleState = new Observer<typeof React.Component | null>(null, this.moduleStateAdapter);
48
    this.moduleLoader = new ModuleLoader('../', this.moduleState);
49
50
    this.applicationAction = new Action(
51
      this.menuOpenState,
52
      RouterContainer.router,
53
      RouterContainer.registry,
54
      this.moduleLoader
55
    );
56
    this.applicationActionAdapter = this.applicationAction.adapter;
57
58
    this.topAppBarPresenter = new TopBarPresenter(this.language.activeTranslator);
59
    this.sideMenuPresenter = new SideMenuPresenter(
60
      this.menuOpenState,
61
      this.language.activeTranslator,
62
      RouterContainer.observer,
63
      RouterContainer.registry
64
    );
65
    this.pagePresenter = new PagePresenter(this.moduleState);
66
    this.styleUrlFormatter = new StyleUrlFormatter(RouterContainer.observer);
67
    this.applicationPresenter = new ApplicationPresenter(
68
      this.theme.currentTheme,
69
      this.topAppBarPresenter,
70
      this.sideMenuPresenter,
71
      this.pagePresenter,
72
      this.styleUrlFormatter
73
    );
74
75
    this.application = new Application(this.applicationActionAdapter, this.applicationPresenter);
76
    this.setupDefaults();
77
  }
78
79
  protected setupDefaults(): void {
80
    RouterContainer.adapter.addListener(this.applicationActionAdapter.onPageChanged);
81
    this.applicationActionAdapter.onPageChanged(RouterContainer.observer.value)
82
83
    this.application.attachToLanguage(this.language.adapter);
84
    this.application.attachToMenuOpenState(this.menuOpenStateAdapter);
85
    this.application.attachToModuleState(this.moduleStateAdapter);
86
  }
87
}
88
89
export default new Container();
90