@netless/app-slide 0.2.48 → 0.2.50

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/app-slide",
3
- "version": "0.2.48",
3
+ "version": "0.2.50",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.es.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,7 @@
10
10
  "README-zh.md"
11
11
  ],
12
12
  "devDependencies": {
13
- "@netless/slide": "^1.1.11",
13
+ "@netless/slide": "^1.2.0",
14
14
  "@types/color-string": "^1.5.2",
15
15
  "color-string": "^1.9.1",
16
16
  "jspdf": "2.5.1",
@@ -20,13 +20,15 @@ export interface DocsViewerConfig {
20
20
  onNewPageIndex: (index: number) => void;
21
21
  onPlay?: () => void;
22
22
  urlInterrupter?: (url: string) => Promise<string>;
23
+ onPagesReady?: (pages: DocsViewerPage[]) => void;
23
24
  }
24
25
 
25
26
  export class DocsViewer {
26
- public constructor({ readonly, onNewPageIndex, onPlay, urlInterrupter }: DocsViewerConfig) {
27
+ public constructor({ readonly, onNewPageIndex, onPlay, onPagesReady, urlInterrupter }: DocsViewerConfig) {
27
28
  this.readonly = readonly;
28
29
  this.onNewPageIndex = onNewPageIndex;
29
30
  this.onPlay = onPlay;
31
+ this.onPagesReady = onPagesReady;
30
32
  this.urlInterrupter = urlInterrupter || (url => url);
31
33
 
32
34
  this.render();
@@ -35,6 +37,7 @@ export class DocsViewer {
35
37
  protected readonly: boolean;
36
38
  protected onNewPageIndex: (index: number) => void;
37
39
  protected onPlay?: () => void;
40
+ protected onPagesReady?: (pages: DocsViewerPage[]) => void
38
41
  protected urlInterrupter: (url: string) => Promise<string> | string;
39
42
 
40
43
  private _pages: DocsViewerPage[] = [];
@@ -43,6 +46,9 @@ export class DocsViewer {
43
46
  this._pages = value;
44
47
  this.refreshPreview().then(this.refreshBtnSidebar.bind(this));
45
48
  this.refreshTotalPage();
49
+ if (this.onPagesReady) {
50
+ this.onPagesReady(value);
51
+ }
46
52
  }
47
53
 
48
54
  public get pages() {
@@ -9,7 +9,7 @@
9
9
  // 5. pages information are loaded dynamically by the slide package
10
10
 
11
11
  import type { AppContext, Player, Room, Displayer } from "@netless/window-manager";
12
- import type { SyncEvent } from "@netless/slide";
12
+ import type { ISlideConfig, SyncEvent } from "@netless/slide";
13
13
  import type { Attributes, MagixEvents, MagixPayload, SlideState } from "../typings";
14
14
  import type { AppOptions } from "..";
15
15
 
@@ -18,6 +18,7 @@ import { Slide, SLIDE_EVENTS } from "@netless/slide";
18
18
  import { clamp } from "../utils/helpers";
19
19
  import { cachedGetBgColor } from "../utils/bgcolor";
20
20
  import { logger, log, verbose, setRoomLogger } from "../utils/logger";
21
+ import { getRoomTracker } from "../utils/tracker";
21
22
  export { syncSceneWithSlide, createDocsViewerPages } from "./helpers";
22
23
 
23
24
  export const DefaultUrl = "https://convertcdn.netless.link/dynamicConvert";
@@ -89,7 +90,9 @@ export class SlideController {
89
90
  this.room = context.getRoom();
90
91
  this.player = this.room ? undefined : (context.getDisplayer() as Player);
91
92
  setRoomLogger((this.room || this.player) as Displayer);
92
- this.slide = this.createSlide(anchor);
93
+ this.slide = this.createSlide(anchor, {
94
+ whiteTracker: getRoomTracker(context.getDisplayer()),
95
+ });
93
96
 
94
97
  // the adder does not need to sync state
95
98
  this.syncStateOnceFlag = !this.context.isAddApp;
@@ -259,7 +262,7 @@ export class SlideController {
259
262
  return this.slide.slideState.currentSlideIndex;
260
263
  }
261
264
 
262
- private createSlide(anchor: HTMLDivElement) {
265
+ private createSlide(anchor: HTMLDivElement, defaults: Partial<ISlideConfig> = {}) {
263
266
  const options = this.context.getAppOptions() || {};
264
267
  const slide = new Slide({
265
268
  anchor,
@@ -286,6 +289,7 @@ export class SlideController {
286
289
  rtcAudio: options.rtcAudio,
287
290
  useLocalCache: options.useLocalCache,
288
291
  logger: options.logger,
292
+ whiteTracker: defaults.whiteTracker,
289
293
  timestamp: this.timestamp,
290
294
  });
291
295
  if (import.meta.env.DEV) {
@@ -3,7 +3,7 @@ import type { SlideController, SlideControllerOptions } from "../SlideController
3
3
 
4
4
  import { SideEffectManager } from "side-effect-manager";
5
5
  import { createDocsViewerPages } from "../SlideController";
6
- import { DocsViewer } from "../DocsViewer";
6
+ import { DocsViewer, DocsViewerPage } from "../DocsViewer";
7
7
  import { logger } from "../utils/logger";
8
8
  import { isEditable } from "../utils/helpers";
9
9
 
@@ -21,6 +21,7 @@ export interface SlideDocsViewerConfig {
21
21
  baseScenePath: string;
22
22
  appId: string;
23
23
  urlInterrupter?: (url: string) => Promise<string>;
24
+ onPagesReady?: (pages: DocsViewerPage[]) => void;
24
25
  }
25
26
 
26
27
  export interface SavePdfConfig {
@@ -48,6 +49,7 @@ export class SlideDocsViewer {
48
49
  baseScenePath,
49
50
  appId,
50
51
  urlInterrupter,
52
+ onPagesReady,
51
53
  }: SlideDocsViewerConfig) {
52
54
  this.box = box;
53
55
  this.whiteboardView = view;
@@ -60,6 +62,7 @@ export class SlideDocsViewer {
60
62
  onNewPageIndex: this.onNewPageIndex,
61
63
  onPlay: this.onPlay,
62
64
  urlInterrupter,
65
+ onPagesReady,
63
66
  });
64
67
 
65
68
  this.sideEffect.add(() => {
package/src/index.ts CHANGED
@@ -133,6 +133,10 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> = {
133
133
  docsViewer.viewer.setPageIndex(page - 1);
134
134
  docsViewer.viewer.setPaused();
135
135
  docsViewer.onPageChanged();
136
+ const length = docsViewer.viewer.pages.length;
137
+ if (length > 0) {
138
+ context.dispatchAppEvent("pageStateChange", { index: page - 1, length });
139
+ }
136
140
  }
137
141
  };
138
142
 
@@ -174,6 +178,10 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, AppResult> = {
174
178
  baseScenePath,
175
179
  appId: context.appId,
176
180
  urlInterrupter: context.getAppOptions()?.urlInterrupter,
181
+ onPagesReady: ({ length }) => {
182
+ const index = docsViewer?.viewer.pageIndex || 0;
183
+ context.dispatchAppEvent("pageStateChange", { index, length });
184
+ }
177
185
  });
178
186
 
179
187
  if (import.meta.env.DEV) {
@@ -0,0 +1,6 @@
1
+ import type { Displayer } from "white-web-sdk"
2
+ import type { ISlideConfig } from "@netless/slide"
3
+
4
+ export const getRoomTracker = (displayer: Displayer): ISlideConfig["whiteTracker"] => {
5
+ return (displayer as any).tracker;
6
+ }