Skip to content
Snippets Groups Projects
Commit aa032067 authored by Alexander Rose's avatar Alexander Rose
Browse files

replaced immutable.js with immer; updated packages

parent 3f297cf6
No related branches found
No related tags found
No related merge requests found
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
"@types/jest": "^23.3.2", "@types/jest": "^23.3.2",
"@types/node": "^10.9.4", "@types/node": "^10.9.4",
"@types/node-fetch": "^2.1.2", "@types/node-fetch": "^2.1.2",
"@types/react": "^16.4.13", "@types/react": "^16.4.14",
"@types/react-dom": "^16.0.7", "@types/react-dom": "^16.0.7",
"benchmark": "^2.1.4", "benchmark": "^2.1.4",
"cpx": "^1.5.0", "cpx": "^1.5.0",
...@@ -87,15 +87,14 @@ ...@@ -87,15 +87,14 @@
"file-loader": "^2.0.0", "file-loader": "^2.0.0",
"glslify-import": "^3.1.0", "glslify-import": "^3.1.0",
"glslify-loader": "^1.0.2", "glslify-loader": "^1.0.2",
"graphql-code-generator": "^0.11.0", "graphql-code-generator": "^0.12.2",
"graphql-codegen-typescript-template": "^0.11.0", "graphql-codegen-typescript-template": "^0.12.2",
"graphql-tag": "^2.9.2", "jest": "^23.6.0",
"jest": "^23.5.0",
"jest-raw-loader": "^1.0.1", "jest-raw-loader": "^1.0.1",
"mini-css-extract-plugin": "^0.4.2", "mini-css-extract-plugin": "^0.4.2",
"node-sass": "^4.9.3", "node-sass": "^4.9.3",
"raw-loader": "^0.5.1", "raw-loader": "^0.5.1",
"resolve-url-loader": "^2.3.1", "resolve-url-loader": "^3.0.0",
"sass-loader": "^7.1.0", "sass-loader": "^7.1.0",
"style-loader": "^0.23.0", "style-loader": "^0.23.0",
"ts-jest": "^23.1.4", "ts-jest": "^23.1.4",
...@@ -103,19 +102,19 @@ ...@@ -103,19 +102,19 @@
"typescript": "^3.0.3", "typescript": "^3.0.3",
"uglify-js": "^3.4.9", "uglify-js": "^3.4.9",
"util.promisify": "^1.0.0", "util.promisify": "^1.0.0",
"webpack": "^4.17.2", "webpack": "^4.19.0",
"webpack-cli": "^3.1.0" "webpack-cli": "^3.1.0"
}, },
"dependencies": { "dependencies": {
"argparse": "^1.0.10", "argparse": "^1.0.10",
"compression": "^1.7.3", "compression": "^1.7.3",
"express": "^4.16.3", "express": "^4.16.3",
"graphql": "^0.13.2", "graphql": "^14.0.2",
"graphql-request": "^1.8.2", "graphql-request": "^1.8.2",
"immutable": "^4.0.0-rc.9", "immer": "^1.6.0",
"node-fetch": "^2.2.0", "node-fetch": "^2.2.0",
"react": "^16.5.0", "react": "^16.5.1",
"react-dom": "^16.5.0", "react-dom": "^16.5.1",
"rxjs": "^6.3.2" "rxjs": "^6.3.2"
} }
} }
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* Copyright (c) 2016 - now David Sehnal, licensed under Apache 2.0, See LICENSE file for more info. * Copyright (c) 2016 - now David Sehnal, licensed under Apache 2.0, See LICENSE file for more info.
*/ */
import { Map } from 'immutable' import produce from 'immer'
import { filter } from 'rxjs/operators'; import { filter } from 'rxjs/operators';
import { Controller } from '../controller' import { Controller } from '../controller'
...@@ -21,7 +21,7 @@ export interface JobInfo { ...@@ -21,7 +21,7 @@ export interface JobInfo {
} }
export interface JobsState { export interface JobsState {
jobs: Map<number, JobInfo> jobs: { [k: number]: JobInfo }
} }
export class JobsController extends Controller<JobsState> { export class JobsController extends Controller<JobsState> {
...@@ -30,38 +30,42 @@ export class JobsController extends Controller<JobsState> { ...@@ -30,38 +30,42 @@ export class JobsController extends Controller<JobsState> {
let jobs = this.latestState.jobs!; let jobs = this.latestState.jobs!;
if (!isWatched) { if (!isWatched) {
if (jobs.has(state.jobId)) { if (jobs[state.jobId] !== undefined) {
jobs = jobs.delete(state.jobId); jobs = produce(jobs, _jobs => { delete _jobs[state.jobId] });
this.setState({ jobs }); this.setState({ jobs });
} }
return; return;
} }
jobs = jobs.set(state.jobId, { jobs = produce(jobs, _jobs => {
name: state.name, _jobs[state.jobId] = {
message: state.message, name: state.name,
abort: state.abort message: state.message,
}); abort: state.abort
};
})
this.setState({ jobs }); this.setState({ jobs });
} }
private started(job: Job.Info) { private started(job: Job.Info) {
this.setState({ this.setState({
jobs: this.latestState.jobs!.set(job.id, { name: job.name, message: 'Running...' }) jobs: produce(this.latestState.jobs!, _jobs => {
_jobs[job.id] = { name: job.name, message: 'Running...' }
})
}); });
} }
private completed(taskId: number) { private completed(taskId: number) {
if (!this.latestState.jobs!.has(taskId)) return; if (!this.latestState.jobs![taskId]) return;
this.setState({ this.setState({
jobs: this.latestState.jobs!.delete(taskId) jobs: produce(this.latestState.jobs!, _jobs => { delete _jobs[taskId] })
}); });
} }
constructor(context: Context, private type: Job.Type) { constructor(context: Context, private type: Job.Type) {
super(context, { super(context, {
jobs: Map<number, JobInfo>() jobs: {}
}); });
JobEvents.StateUpdated.getStream(this.context) JobEvents.StateUpdated.getStream(this.context)
......
...@@ -5,18 +5,20 @@ ...@@ -5,18 +5,20 @@
* Copyright (c) 2016 - now David Sehnal, licensed under Apache 2.0, See LICENSE file for more info. * Copyright (c) 2016 - now David Sehnal, licensed under Apache 2.0, See LICENSE file for more info.
*/ */
import { List } from 'immutable' import produce from 'immer'
import { Controller } from '../controller' import { Controller } from '../controller'
import { Context } from '../../context/context'; import { Context } from '../../context/context';
import { LogEvent } from '../../event/basic'; import { LogEvent } from '../../event/basic';
import { Logger } from '../../service/logger'; import { Logger } from '../../service/logger';
export class LogController extends Controller<{ entries: List<Logger.Entry> }> { export class LogController extends Controller<{ entries: Logger.Entry[] }> {
constructor(context: Context) { constructor(context: Context) {
super(context, { entries: List<Logger.Entry>() }); super(context, { entries: [] });
LogEvent.getStream(this.context) LogEvent.getStream(this.context)
.subscribe(e => this.setState({ entries: this.latestState.entries.push(e.data) })) .subscribe(e => this.setState({
entries: produce(this.latestState.entries, _entries => { _entries.push(e.data) })
}))
} }
} }
\ No newline at end of file
...@@ -30,10 +30,10 @@ export class Overlay extends View<JobsController, {}, {}> { ...@@ -30,10 +30,10 @@ export class Overlay extends View<JobsController, {}, {}> {
render() { render() {
const state = this.controller.latestState; const state = this.controller.latestState;
if (!state.jobs!.count()) return <div className='molstar-empty-control' /> if (!Object.keys(state.jobs).length) return <div className='molstar-empty-control' />
const jobs: any[] = []; const jobs: any[] = [];
state.jobs!.forEach((t, k) => jobs.push(<JobState key={k} info={t!} />)); Object.keys(state.jobs).forEach(k => jobs.push(<JobState key={k} info={state.jobs[parseInt(k)]} />));
return <div className='molstar-overlay'> return <div className='molstar-overlay'>
<div className='molstar-overlay-background' /> <div className='molstar-overlay-background' />
...@@ -52,10 +52,10 @@ export class BackgroundJobs extends View<JobsController, {}, {}> { ...@@ -52,10 +52,10 @@ export class BackgroundJobs extends View<JobsController, {}, {}> {
render() { render() {
const state = this.controller.latestState; const state = this.controller.latestState;
if (!state.jobs!.count()) return <div className='molstar-empty-control' /> if (!Object.keys(state.jobs).length) return <div className='molstar-empty-control' />
const jobs: any[] = []; const jobs: any[] = [];
state.jobs!.forEach((t, k) => jobs.push(<JobState key={k} info={t!} isSmall={true} />)); Object.keys(state.jobs).forEach(k => jobs.push(<JobState key={k} info={state.jobs[parseInt(k)]} isSmall={true} />));
return <div className='molstar-background-jobs'> return <div className='molstar-background-jobs'>
{jobs} {jobs}
......
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
"noUnusedLocals": true, "noUnusedLocals": true,
"strictNullChecks": true, "strictNullChecks": true,
"strictFunctionTypes": true, "strictFunctionTypes": true,
//"keyofStringsOnly": true,
// temp fix for immutable package: has(key: string): key is keyof TProps; => has(key: string | number | Symbol): key is keyof TProps;
//"downlevelIteration": true, //"downlevelIteration": true,
"jsx": "react", "jsx": "react",
"lib": [ "es6", "dom", "esnext.asynciterable", "es2016" ], "lib": [ "es6", "dom", "esnext.asynciterable", "es2016" ],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment