fix(core_state): make core state pure

This commit is contained in:
hexxa 2021-09-27 11:42:28 +08:00 committed by Hexxa
parent abbeed24d7
commit 65b250d83c
6 changed files with 25 additions and 23 deletions

View file

@ -2,7 +2,8 @@ import { mock, instance, verify, when, anything } from "ts-mockito";
import { List } from "immutable";
import { Browser } from "../browser";
import { ICoreState, newWithWorker } from "../core_state";
import { initUploadMgr } from "../../worker/upload_mgr";
import { ICoreState, newState } from "../core_state";
import { updater } from "../state_updater";
import { MockWorker } from "../../worker/interface";
import { MockUsersClient, resps as usersResps } from "../../client/users_mock";
@ -13,8 +14,9 @@ describe("Browser", () => {
const initBrowser = (): any => {
const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass);
initUploadMgr(mockWorker);
const coreState = newWithWorker(mockWorker);
const coreState = newState();
const usersCl = new MockUsersClient("");
const filesCl = new MockFilesClient("");

View file

@ -3,7 +3,8 @@ import { mock, instance } from "ts-mockito";
import { User, UploadInfo } from "../../client";
import { AuthPane } from "../pane_login";
import { ICoreState, newWithWorker } from "../core_state";
import { ICoreState, newState } from "../core_state";
import { initUploadMgr } from "../../worker/upload_mgr";
import { updater } from "../state_updater";
import { MockWorker, UploadState, UploadEntry } from "../../worker/interface";
import { MockUsersClient, resps as usersResps } from "../../client/users_mock";
@ -13,8 +14,9 @@ describe("Login", () => {
test("login", async () => {
const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass);
initUploadMgr(mockWorker);
const coreState = newWithWorker(mockWorker);
const coreState = newState();
const pane = new AuthPane({
login: coreState.login,
msg: coreState.msg,

View file

@ -1,7 +1,8 @@
import { mock, instance } from "ts-mockito";
import { Panes } from "../panes";
import { ICoreState, newWithWorker } from "../core_state";
import { ICoreState, newState } from "../core_state";
import { initUploadMgr } from "../../worker/upload_mgr";
import { updater } from "../state_updater";
import { MockWorker } from "../../worker/interface";
@ -9,8 +10,9 @@ describe("Panes", () => {
test("closePane", async () => {
const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass);
initUploadMgr(mockWorker);
const coreState = newWithWorker(mockWorker);
const coreState = newState();
const panes = new Panes({
panes: coreState.panes,
admin: coreState.admin,

View file

@ -2,10 +2,11 @@ import { List, Set, Map } from "immutable";
import { mock, instance } from "ts-mockito";
import { StateMgr } from "../state_mgr";
import { initUploadMgr } from "../../worker/upload_mgr";
import { User, UploadInfo } from "../../client";
import { MockFilesClient, resps as filesResps } from "../../client/files_mock";
import { MockUsersClient, resps as usersResps } from "../../client/users_mock";
import { ICoreState, newWithWorker } from "../core_state";
import { ICoreState, newState } from "../core_state";
import { MockWorker, UploadState, UploadEntry } from "../../worker/interface";
describe("State Manager", () => {
@ -15,6 +16,7 @@ describe("State Manager", () => {
const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass);
initUploadMgr(mockWorker);
const mgr = new StateMgr({}); // it will call initUpdater
mgr.setUsersClient(usersCl);
@ -25,7 +27,7 @@ describe("State Manager", () => {
// no op
};
const coreState = newWithWorker(mockWorker);
const coreState = newState();
await mgr.initUpdater(coreState);
// browser
@ -121,7 +123,7 @@ describe("State Manager", () => {
const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass);
const coreState = newWithWorker(mockWorker);
const coreState = newState();
const mgr = new StateMgr({}); // it will call initUpdater
mgr.setUsersClient(usersCl);

View file

@ -1,17 +1,13 @@
import { List, Set, Map } from "immutable";
import BgWorker from "../worker/upload.bg.worker";
import { FgWorker } from "../worker/upload.fg.worker";
import { UploadEntry } from "../worker/interface";
import { BrowserProps } from "./browser";
import { PanesProps } from "./panes";
import { LoginProps } from "./pane_login";
import { AdminProps } from "./pane_admin";
import { MsgPackage } from "../i18n/msger";
import { User, MetadataResp } from "../client";
import { initUploadMgr, IWorker } from "../worker/upload_mgr";
export interface MsgProps {
lan: string;
@ -36,15 +32,7 @@ export interface ICoreState {
msg: MsgProps;
}
export function newWithWorker(worker: IWorker): ICoreState {
initUploadMgr(worker);
return initState();
}
export function newState(): ICoreState {
const worker = window.Worker == null ? new FgWorker() : new BgWorker();
initUploadMgr(worker);
return initState();
}

View file

@ -1,5 +1,9 @@
import * as React from "react";
import { initUploadMgr } from "../worker/upload_mgr";
import BgWorker from "../worker/upload.bg.worker";
import { FgWorker } from "../worker/upload.fg.worker";
import { updater } from "./state_updater";
import { ICoreState, newState } from "./core_state";
import { RootFrame } from "./root_frame";
@ -7,8 +11,8 @@ import { FilesClient } from "../client/files";
import { UsersClient } from "../client/users";
import { IUsersClient, IFilesClient } from "../client";
export interface Props { }
export interface State extends ICoreState { }
export interface Props {}
export interface State extends ICoreState {}
export class StateMgr extends React.Component<Props, State, {}> {
private usersClient: IUsersClient = new UsersClient("");
@ -17,6 +21,8 @@ export class StateMgr extends React.Component<Props, State, {}> {
constructor(p: Props) {
super(p);
this.state = newState();
const worker = window.Worker == null ? new FgWorker() : new BgWorker();
initUploadMgr(worker);
this.initUpdater(this.state); // don't await
}