Skip to content

Commit

Permalink
feat(demos): use Logger Feature Service in Todo Manager (#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
unstubbable authored and clebert committed Mar 13, 2019
1 parent e0f0605 commit 58287e5
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
1 change: 1 addition & 0 deletions packages/demos/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"@feature-hub/core": "^1.1.0",
"@feature-hub/dom": "^1.2.0",
"@feature-hub/history-service": "^1.1.0",
"@feature-hub/logger": "^0.0.0",
"@feature-hub/module-loader-amd": "^1.1.0",
"@feature-hub/module-loader-commonjs": "^1.1.0",
"@feature-hub/react": "^1.2.0",
Expand Down
3 changes: 2 additions & 1 deletion packages/demos/src/todomvc/integrator.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import {createFeatureHub} from '@feature-hub/core';
import {defineLogger} from '@feature-hub/logger';
import {defineExternals, loadAmdModule} from '@feature-hub/module-loader-amd';
import {FeatureAppLoader, FeatureHubContextProvider} from '@feature-hub/react';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {todoManagerDefinition} from './todo-manager';

const {featureAppManager} = createFeatureHub('test:todomvc-integrator', {
featureServiceDefinitions: [todoManagerDefinition],
featureServiceDefinitions: [defineLogger(), todoManagerDefinition],
moduleLoader: loadAmdModule,
providedExternals: {
react: process.env.REACT_VERSION as string
Expand Down
28 changes: 22 additions & 6 deletions packages/demos/src/todomvc/todo-manager/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import {
FeatureServiceBinder,
FeatureServiceProviderDefinition,
FeatureServices,
SharedFeatureService
} from '@feature-hub/core';
import {Logger} from '@feature-hub/logger';

export interface Todo {
readonly id: string;
Expand All @@ -26,11 +28,17 @@ export interface SharedTodoManager extends SharedFeatureService {
readonly '1.0.0': FeatureServiceBinder<TodoManagerV1>;
}

export interface TodoManagerDependencies extends FeatureServices {
readonly 's2:logger': Logger;
}

class TodoManagerV1Impl implements TodoManagerV1 {
private readonly listeners = new Set<ListenerCallback>();
private todos: Todo[] = [];
private idCount = 0;

public constructor(private readonly logger: Logger) {}

public getTodos(): Todo[] {
return this.todos;
}
Expand All @@ -41,7 +49,7 @@ class TodoManagerV1Impl implements TodoManagerV1 {

this.todos = [...this.todos, todo];

console.info('Added todo:', todo);
this.logger.info('Added todo:', todo);
this.notifyListeners();

return todo;
Expand All @@ -60,7 +68,7 @@ class TodoManagerV1Impl implements TodoManagerV1 {
...this.todos.slice(index + 1)
];

console.info('Removed todo:', deletedTodo);
this.logger.info('Removed todo:', deletedTodo);
this.notifyListeners();
}

Expand Down Expand Up @@ -110,18 +118,26 @@ class TodoManagerV1Impl implements TodoManagerV1 {
...this.todos.slice(index + 1)
];

console.info('Changed todo from:', oldTodo, 'to:', newTodo);
this.logger.info('Changed todo from:', oldTodo, 'to:', newTodo);
this.notifyListeners();
}
}

export const todoManagerDefinition: FeatureServiceProviderDefinition<
SharedTodoManager
SharedTodoManager,
TodoManagerDependencies
> = {
id: 'test:todomvc-todo-manager',

create: () => {
const todoManager = new TodoManagerV1Impl();
dependencies: {
featureServices: {
's2:logger': '^1.0.0'
}
},

create: env => {
const logger = env.featureServices['s2:logger'];
const todoManager = new TodoManagerV1Impl(logger);

return {
'1.0.0': () => ({featureService: todoManager})
Expand Down

0 comments on commit 58287e5

Please sign in to comment.