@vnejs/plugins.views.screens.loading 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import "@vnejs/contracts.views.screens.loading";
2
2
  import { regPlugin } from "@vnejs/shared";
3
3
  import { PARAMS, PLUGIN_NAME, SUBSCRIBE_EVENTS } from "@vnejs/contracts.views.screens.loading";
4
4
  import { LoadingController } from "./modules/controller.js";
5
+ import { LoadingControllerBg } from "./modules/controller.bg.js";
5
6
  import { Loading } from "./modules/loading.js";
6
7
  import { LoadingView } from "./modules/view.js";
7
- regPlugin(PLUGIN_NAME, { events: SUBSCRIBE_EVENTS, params: PARAMS }, [LoadingController, Loading, LoadingView]);
8
+ regPlugin(PLUGIN_NAME, { events: SUBSCRIBE_EVENTS, params: PARAMS }, [LoadingController, LoadingControllerBg, Loading, LoadingView]);
@@ -0,0 +1,16 @@
1
+ import { ModuleControllerBg } from "@vnejs/module.controller.bg";
2
+ import type { LoadingPluginConstants, LoadingPluginEvents, LoadingPluginParams, LoadingPluginSettings } from "../types.js";
3
+ import type { LoadingPluginState } from "../utils/loading.js";
4
+ export declare class LoadingControllerBg extends ModuleControllerBg<LoadingPluginEvents, LoadingPluginConstants, LoadingPluginSettings, LoadingPluginParams, LoadingPluginState> {
5
+ name: string;
6
+ EVENT_SHOW: "vne:loading:show";
7
+ EVENT_HIDE: "vne:loading:hide";
8
+ EVENT_SHOW_BEFORE: "vne:loading:show_before";
9
+ EVENT_STATE_UPDATE: "vne:loading:state_update";
10
+ EVENT_UPDATE_FAST: "vne:loading:update_fast";
11
+ BGNAME: string;
12
+ QUALITY_SETTING: "vne:canvas:quality";
13
+ IS_START_PRELOAD_ENABLED: boolean;
14
+ IS_MEMORY_CLEARED_PRELOAD_ENABLED: boolean;
15
+ IS_MEMORY_CLEARED_UPDATE_ENABLED: boolean;
16
+ }
@@ -0,0 +1,14 @@
1
+ import { ModuleControllerBg } from "@vnejs/module.controller.bg";
2
+ export class LoadingControllerBg extends ModuleControllerBg {
3
+ name = "loading.controller.bg";
4
+ EVENT_SHOW = this.EVENTS.LOADING.SHOW;
5
+ EVENT_HIDE = this.EVENTS.LOADING.HIDE;
6
+ EVENT_SHOW_BEFORE = this.EVENTS.LOADING.SHOW_BEFORE;
7
+ EVENT_STATE_UPDATE = this.EVENTS.LOADING.STATE_UPDATE;
8
+ EVENT_UPDATE_FAST = this.EVENTS.LOADING.UPDATE_FAST;
9
+ BGNAME = this.PARAMS.LOADING.BACKGROUND;
10
+ QUALITY_SETTING = this.SETTINGS.LAYER.QUALITY;
11
+ IS_START_PRELOAD_ENABLED = true;
12
+ IS_MEMORY_CLEARED_PRELOAD_ENABLED = true;
13
+ IS_MEMORY_CLEARED_UPDATE_ENABLED = true;
14
+ }
@@ -4,11 +4,8 @@ import type { LoadingPluginState } from "../utils/loading.js";
4
4
  export declare class LoadingController extends ModuleController<LoadingPluginEvents, LoadingPluginConstants, LoadingPluginSettings, LoadingPluginParams, LoadingPluginState> {
5
5
  name: string;
6
6
  EVENT_UPDATE_VIEW: "vne:loading:update";
7
- BGNAME: string;
8
7
  CONTROLS: {};
9
8
  CONTROLS_INDEX: number;
10
9
  subscribe: () => void;
11
- start: () => Promise<HTMLImageElement>;
12
10
  beforeShow: () => Promise<void>;
13
- onMemoryCleared: () => Promise<unknown[] | undefined>;
14
11
  }
@@ -2,15 +2,15 @@ import { ModuleController } from "@vnejs/module.components";
2
2
  export class LoadingController extends ModuleController {
3
3
  name = "loading.controller";
4
4
  EVENT_UPDATE_VIEW = this.EVENTS.LOADING.UPDATE;
5
- BGNAME = this.PARAMS.LOADING.BACKGROUND;
6
5
  CONTROLS = {};
7
6
  CONTROLS_INDEX = this.PARAMS.LOADING.ZINDEX;
8
7
  subscribe = () => {
9
8
  this.on(this.EVENTS.LOADING.SHOW, this.onShow);
10
9
  this.on(this.EVENTS.LOADING.HIDE, this.onHide);
11
- this.on(this.EVENTS.MEMORY.CLEARED, this.onMemoryCleared);
10
+ this.on(this.EVENTS.LOADING.STATE_UPDATE, this.updateState);
11
+ this.on(this.EVENTS.LOADING.UPDATE_FAST, this.updateViewFast);
12
+ };
13
+ beforeShow = async () => {
14
+ await this.emit(this.EVENTS.LOADING.SHOW_BEFORE);
12
15
  };
13
- start = () => this.loadBgMedia();
14
- beforeShow = async () => this.updateState({ bgSrc: (await this.loadBgMedia()).src });
15
- onMemoryCleared = async () => this.updateStateAndViewFast({ bgSrc: (await this.loadBgMedia()).src });
16
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/plugins.views.screens.loading",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,6 +35,8 @@
35
35
  "peerDependencies": {
36
36
  "@vnejs/module.core": "~0.2.0",
37
37
  "@vnejs/module.components": "~0.2.0",
38
+ "@vnejs/module.controller.bg": "~0.2.0",
39
+ "@vnejs/contracts.canvas.layer": "~0.2.0",
38
40
  "@vnejs/contracts.text.locs": "~0.2.0",
39
41
  "@vnejs/shared": "~0.2.0",
40
42
  "@vnejs/uis.react": "~0.2.0"
@@ -43,10 +45,12 @@
43
45
  "@vnejs/configs.ts-common": "~0.2.0",
44
46
  "@vnejs/configs.vitest": "~0.2.0",
45
47
  "@vnejs/test-utils": "~0.2.0",
48
+ "@vnejs/contracts.canvas.layer": "~0.2.0",
46
49
  "@vnejs/contracts.text.locs": "~0.2.0",
47
50
  "@vnejs/contracts.views.screens.loading": "~0.2.0",
48
51
  "@vnejs/module.core": "~0.2.0",
49
52
  "@vnejs/module.components": "~0.2.0",
53
+ "@vnejs/module.controller.bg": "~0.2.0",
50
54
  "@vnejs/shared": "~0.2.0",
51
55
  "@vnejs/uis.react": "~0.2.0"
52
56
  }
package/src/index.ts CHANGED
@@ -4,7 +4,8 @@ import { regPlugin } from "@vnejs/shared";
4
4
  import { PARAMS, PLUGIN_NAME, SUBSCRIBE_EVENTS } from "@vnejs/contracts.views.screens.loading";
5
5
 
6
6
  import { LoadingController } from "./modules/controller.js";
7
+ import { LoadingControllerBg } from "./modules/controller.bg.js";
7
8
  import { Loading } from "./modules/loading.js";
8
9
  import { LoadingView } from "./modules/view.js";
9
10
 
10
- regPlugin(PLUGIN_NAME, { events: SUBSCRIBE_EVENTS, params: PARAMS }, [LoadingController, Loading, LoadingView]);
11
+ regPlugin(PLUGIN_NAME, { events: SUBSCRIBE_EVENTS, params: PARAMS }, [LoadingController, LoadingControllerBg, Loading, LoadingView]);
@@ -0,0 +1,27 @@
1
+ import { ModuleControllerBg } from "@vnejs/module.controller.bg";
2
+
3
+ import type { LoadingPluginConstants, LoadingPluginEvents, LoadingPluginParams, LoadingPluginSettings } from "../types.js";
4
+ import type { LoadingPluginState } from "../utils/loading.js";
5
+
6
+ export class LoadingControllerBg extends ModuleControllerBg<
7
+ LoadingPluginEvents,
8
+ LoadingPluginConstants,
9
+ LoadingPluginSettings,
10
+ LoadingPluginParams,
11
+ LoadingPluginState
12
+ > {
13
+ name = "loading.controller.bg";
14
+
15
+ EVENT_SHOW = this.EVENTS.LOADING.SHOW;
16
+ EVENT_HIDE = this.EVENTS.LOADING.HIDE;
17
+ EVENT_SHOW_BEFORE = this.EVENTS.LOADING.SHOW_BEFORE;
18
+ EVENT_STATE_UPDATE = this.EVENTS.LOADING.STATE_UPDATE;
19
+ EVENT_UPDATE_FAST = this.EVENTS.LOADING.UPDATE_FAST;
20
+
21
+ BGNAME = this.PARAMS.LOADING.BACKGROUND;
22
+ QUALITY_SETTING = this.SETTINGS.LAYER.QUALITY;
23
+
24
+ IS_START_PRELOAD_ENABLED = true;
25
+ IS_MEMORY_CLEARED_PRELOAD_ENABLED = true;
26
+ IS_MEMORY_CLEARED_UPDATE_ENABLED = true;
27
+ }
@@ -14,21 +14,17 @@ export class LoadingController extends ModuleController<
14
14
 
15
15
  EVENT_UPDATE_VIEW = this.EVENTS.LOADING.UPDATE;
16
16
 
17
- BGNAME = this.PARAMS.LOADING.BACKGROUND;
18
-
19
17
  CONTROLS = {};
20
18
  CONTROLS_INDEX = this.PARAMS.LOADING.ZINDEX;
21
19
 
22
20
  subscribe = () => {
23
21
  this.on(this.EVENTS.LOADING.SHOW, this.onShow);
24
22
  this.on(this.EVENTS.LOADING.HIDE, this.onHide);
25
-
26
- this.on(this.EVENTS.MEMORY.CLEARED, this.onMemoryCleared);
23
+ this.on(this.EVENTS.LOADING.STATE_UPDATE, this.updateState);
24
+ this.on(this.EVENTS.LOADING.UPDATE_FAST, this.updateViewFast);
27
25
  };
28
26
 
29
- start = () => this.loadBgMedia();
30
-
31
- beforeShow = async () => this.updateState({ bgSrc: (await this.loadBgMedia()).src });
32
-
33
- onMemoryCleared = async () => this.updateStateAndViewFast({ bgSrc: (await this.loadBgMedia()).src });
27
+ beforeShow = async () => {
28
+ await this.emit(this.EVENTS.LOADING.SHOW_BEFORE);
29
+ };
34
30
  }
@@ -0,0 +1,40 @@
1
+ import { beforeEach, describe, expect, it } from "vitest";
2
+
3
+ import { SUBSCRIBE_EVENTS as MEDIA_EVENTS } from "@vnejs/contracts.core.media";
4
+ import { SUBSCRIBE_EVENTS as MEMORY_EVENTS } from "@vnejs/contracts.core.memory";
5
+ import { spyEvent, stubEvent } from "@vnejs/test-utils";
6
+
7
+ import { LoadingControllerBg } from "../modules/controller.bg.js";
8
+ import { createLoadingTestModule, PARAMS, registerLoadingPluginVne, SUBSCRIBE_EVENTS } from "./setup.js";
9
+
10
+ describe("LoadingControllerBg", () => {
11
+ beforeEach(() => {
12
+ registerLoadingPluginVne();
13
+ });
14
+
15
+ it("SHOW_BEFORE loads bg and emits STATE_UPDATE with bgSrc", async () => {
16
+ const { observer } = createLoadingTestModule(LoadingControllerBg);
17
+ stubEvent(observer, MEDIA_EVENTS.LOAD, () => ({ src: "bg.png" }));
18
+ const mediaLoad = spyEvent(observer, MEDIA_EVENTS.LOAD);
19
+ const stateUpdate = spyEvent(observer, SUBSCRIBE_EVENTS.STATE_UPDATE);
20
+
21
+ await observer.emit(SUBSCRIBE_EVENTS.SHOW_BEFORE);
22
+
23
+ expect(mediaLoad).toHaveBeenCalledOnce();
24
+ expect(mediaLoad.mock.calls[0][0]).toMatchObject({ name: `bg/${PARAMS.BACKGROUND}`, mediaType: "view" });
25
+ expect(stateUpdate).toHaveBeenCalledWith({ bgSrc: "bg.png" });
26
+ });
27
+
28
+ it("MEMORY.CLEARED updates bgSrc when shown", async () => {
29
+ const { observer } = createLoadingTestModule(LoadingControllerBg);
30
+ stubEvent(observer, MEDIA_EVENTS.LOAD, () => ({ src: "bg.png" }));
31
+ const stateUpdate = spyEvent(observer, SUBSCRIBE_EVENTS.STATE_UPDATE);
32
+ const updateFast = spyEvent(observer, SUBSCRIBE_EVENTS.UPDATE_FAST);
33
+
34
+ await observer.emit(SUBSCRIBE_EVENTS.SHOW);
35
+ await observer.emit(MEMORY_EVENTS.CLEARED);
36
+
37
+ expect(stateUpdate).toHaveBeenCalledWith({ bgSrc: "bg.png" });
38
+ expect(updateFast).toHaveBeenCalledOnce();
39
+ });
40
+ });
@@ -1,8 +1,11 @@
1
+ import { CONSTANTS as LAYER_CONST, PLUGIN_NAME as LAYER, SETTINGS_KEYS as LAYER_SETTINGS } from "@vnejs/contracts.canvas.layer";
2
+ import { SUBSCRIBE_EVENTS as MEDIA_EVENTS } from "@vnejs/contracts.core.media";
1
3
  import { PARAMS, PLUGIN_NAME, SUBSCRIBE_EVENTS } from "@vnejs/contracts.views.screens.loading";
2
- import { createTestModule as baseCreateTestModule, registerCoreVne, registerVnePlugin, stubSilentEvent } from "@vnejs/test-utils";
4
+ import { createTestModule as baseCreateTestModule, registerCoreVne, registerVnePlugin, stubEvent, stubSilentEvent } from "@vnejs/test-utils";
3
5
 
4
6
  export const registerLoadingPluginVne = () => {
5
7
  registerCoreVne();
8
+ registerVnePlugin(LAYER, { constants: LAYER_CONST, settings: LAYER_SETTINGS });
6
9
  registerVnePlugin(PLUGIN_NAME, { events: SUBSCRIBE_EVENTS, params: PARAMS });
7
10
  };
8
11
 
@@ -15,12 +18,20 @@ export const createLoadingTestModule = <T extends Parameters<typeof baseCreateTe
15
18
  loading: { isShow: false },
16
19
  ...(options.state ?? {}),
17
20
  },
21
+ shared: {
22
+ settings: { [LAYER_SETTINGS.QUALITY]: LAYER_CONST.QUALITIES.FHD },
23
+ ...(options.shared ?? {}),
24
+ },
18
25
  ...options,
19
26
  });
20
27
 
28
+ stubEvent(result.observer, MEDIA_EVENTS.LOAD, () => ({ src: "bg.png" }));
21
29
  stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.SHOW);
22
30
  stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.HIDE);
31
+ stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.SHOW_BEFORE);
23
32
  stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.UPDATE);
33
+ stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.UPDATE_FAST);
34
+ stubSilentEvent(result.observer, SUBSCRIBE_EVENTS.STATE_UPDATE);
24
35
 
25
36
  return result;
26
37
  };