Skip to content

Commit

Permalink
Minor refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
alonrbar committed Aug 7, 2024
1 parent 6578ef7 commit 3afcda3
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 17 deletions.
9 changes: 3 additions & 6 deletions src/core/viewModelLifeCycle.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as React from 'react';
import { ResolverKey } from '../types';
import { ResolverKey } from 'src/types';
import { tryInvoke } from 'src/utils';
import { InternalContext } from './internalContext';
import { VmContext } from './vmContext';

Expand Down Expand Up @@ -58,11 +59,7 @@ export class ViewModelLifeCycle {

private invokeMethods(methodNames: string[]) {
for (const name of methodNames) {
const method = this._viewModel[name];
if (typeof method !== 'function')
return;

method();
tryInvoke(this._viewModel[name]);
}
}
}
24 changes: 16 additions & 8 deletions src/core/vmContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,28 @@ export class VmContext {
return getSymbol(vm, VM_CONTEXT);
}

public static initContext(vm: any, vmClassInfo: VmMetadata, viewRefresher: ViewRefresher): VmContext {
const info = new VmContext(vm, vmClassInfo, viewRefresher);
return setSymbol(vm, VM_CONTEXT, info);
public static init(vm: any, meta: VmMetadata, viewRefresher: ViewRefresher): VmContext {
const ctx = new VmContext(vm, meta, viewRefresher);
return setSymbol(vm, VM_CONTEXT, ctx);
}

public activate: object = {};
public deactivate: object = {};
public readonly registerView: (view: React.Component) => void;
public readonly unregisterView: (view: React.Component) => void;

constructor(vm: any, meta: VmMetadata, viewRefresher: ViewRefresher) {
constructor(
private readonly vm: any,
meta: VmMetadata,
private readonly viewRefresher: ViewRefresher
) {
this.activate = meta.activate;
this.deactivate = meta.deactivate;
this.registerView = (view: React.Component) => viewRefresher.registerView(vm, view);
this.unregisterView = (view: React.Component) => viewRefresher.unregisterView(vm, view);
}

public registerView(view: React.Component) {
this.viewRefresher.registerView(this.vm, view);
}

public unregisterView(view: React.Component) {
this.viewRefresher.unregisterView(this.vm, view);
}
}
7 changes: 4 additions & 3 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,9 @@ export function removeOneFromArray<T>(array: T[], item: T): T {
}

export function tryInvoke<TIn, TOut>(func: Func<TIn, TOut>, ...args: TIn[]): TOut {
if (typeof func === 'function')
return func(...args);
if (typeof func !== 'function') {
return undefined;
}

return undefined;
return func(...args);
}

0 comments on commit 3afcda3

Please sign in to comment.