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 { List } from "immutable";
import { Browser } from "../browser"; 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 { updater } from "../state_updater";
import { MockWorker } from "../../worker/interface"; import { MockWorker } from "../../worker/interface";
import { MockUsersClient, resps as usersResps } from "../../client/users_mock"; import { MockUsersClient, resps as usersResps } from "../../client/users_mock";
@ -13,8 +14,9 @@ describe("Browser", () => {
const initBrowser = (): any => { const initBrowser = (): any => {
const mockWorkerClass = mock(MockWorker); const mockWorkerClass = mock(MockWorker);
const mockWorker = instance(mockWorkerClass); const mockWorker = instance(mockWorkerClass);
initUploadMgr(mockWorker);
const coreState = newWithWorker(mockWorker); const coreState = newState();
const usersCl = new MockUsersClient(""); const usersCl = new MockUsersClient("");
const filesCl = new MockFilesClient(""); const filesCl = new MockFilesClient("");

View file

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

View file

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

View file

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

View file

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

View file

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