@netless/telebox-insider 0.3.0-beta.2 → 0.3.0-beta.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/telebox-insider",
3
- "version": "0.3.0-beta.2",
3
+ "version": "0.3.0-beta.4",
4
4
  "private": false,
5
5
  "description": "Window widget for Whiteboard",
6
6
  "author": "CRIMX <straybugs@gmail.com> (https://github.com/crimx/)",
@@ -12,11 +12,12 @@ export interface MaxTitleBarConfig extends DefaultTitleBarConfig {
12
12
  boxes: MaxTitleBarTeleBox[];
13
13
  containerRect: TeleBoxRect;
14
14
  focusedBox?: MaxTitleBarTeleBox;
15
- boxesStatus?: Map<string, TeleBoxState>;
15
+ getBoxesStatus?: () => Map<string, TeleBoxState>;
16
16
  }
17
17
 
18
18
  export class MaxTitleBar extends DefaultTitleBar {
19
- public boxesStatus?: Map<string, TeleBoxState>;
19
+
20
+ public getBoxesStatus?: MaxTitleBarConfig["getBoxesStatus"];
20
21
  public constructor(config: MaxTitleBarConfig) {
21
22
  super(config);
22
23
 
@@ -24,22 +25,27 @@ export class MaxTitleBar extends DefaultTitleBar {
24
25
  this.focusedBox = config.focusedBox;
25
26
  this.containerRect = config.containerRect;
26
27
  this.darkMode = config.darkMode;
27
- this.boxesStatus = config.boxesStatus;
28
+ this.getBoxesStatus = config.getBoxesStatus;
28
29
  }
29
-
30
30
  public hasMaximizedBoxInStatus(): boolean {
31
- if (!this.boxesStatus || this.boxesStatus.size === 0) {
32
- return false
31
+ if (this.getBoxesStatus) {
32
+ const boxesStatus = this.getBoxesStatus();
33
+ if (boxesStatus.size) {
34
+ const hasMaximizedBox = [...boxesStatus.values()].find((state) => state === TELE_BOX_STATE.Maximized);
35
+ return !!hasMaximizedBox;
36
+ }
33
37
  }
34
- const hasMaximizedBox = [...this.boxesStatus.values()].find((state) => state === TELE_BOX_STATE.Maximized);
35
- return !!hasMaximizedBox;
38
+ return false;
36
39
  }
37
40
 
38
41
  public get MaximizedBoxes(): MaxTitleBarTeleBox[] {
39
- if (!this.boxesStatus || this.boxesStatus.size === 0) {
40
- return [];
42
+ if (this.getBoxesStatus) {
43
+ const boxesStatus = this.getBoxesStatus();
44
+ if (boxesStatus) {
45
+ return this.boxes.filter((box) => boxesStatus && boxesStatus.get(box.id) === TELE_BOX_STATE.Maximized);
46
+ }
41
47
  }
42
- return this.boxes.filter((box) => this.boxesStatus && this.boxesStatus.get(box.id) === TELE_BOX_STATE.Maximized);
48
+ return [];
43
49
  }
44
50
 
45
51
  /**
@@ -103,8 +109,7 @@ export class MaxTitleBar extends DefaultTitleBar {
103
109
  }
104
110
  }
105
111
 
106
- public setBoxesStatus(boxesStatus: Map<string, TeleBoxState>): void {
107
- this.boxesStatus = boxesStatus;
112
+ public updateBoxesStatus(): void {
108
113
  if (this.hasMaximizedBoxInStatus()) {
109
114
  this.setBoxStatus(TELE_BOX_STATE.Maximized);
110
115
  }
@@ -201,6 +201,7 @@ export class TeleBoxManager {
201
201
  this.setBoxStatus(box.id, TELE_BOX_STATE.Normal);
202
202
  }
203
203
  });
204
+ this.effectBoxStatusChange();
204
205
  }
205
206
  minimized$.setValue(false);
206
207
  }
@@ -315,12 +316,15 @@ export class TeleBoxManager {
315
316
  state: state$.value,
316
317
  boxes: this.boxes$.value,
317
318
  containerRect: containerRect$.value,
318
- boxesStatus: this.boxesStatus$,
319
+ getBoxesStatus: () => {
320
+ return this.boxesStatus$;
321
+ },
319
322
  onEvent: (event): void => {
320
323
  switch (event.type) {
321
324
  case TELE_BOX_DELEGATE_EVENT.Maximize: {
322
325
  if (this.hasBoxesStatus() && this.maxTitleBar.focusedBox?.id) {
323
326
  this.setBoxStatus(this.maxTitleBar.focusedBox.id, TELE_BOX_STATE.Normal);
327
+ this.effectBoxStatusChange();
324
328
  this.makeMaximizedTopBoxFocus();
325
329
  } else {
326
330
  maximized$.setValue(!maximized$.value);
@@ -330,6 +334,7 @@ export class TeleBoxManager {
330
334
  case TELE_BOX_DELEGATE_EVENT.Minimize: {
331
335
  if (this.hasBoxesStatus() && this.maxTitleBar.focusedBox?.id) {
332
336
  this.setBoxStatus(this.maxTitleBar.focusedBox.id, TELE_BOX_STATE.Minimized);
337
+ this.effectBoxStatusChange();
333
338
  this.makeMaximizedTopBoxFocus();
334
339
  } else {
335
340
  minimized$.setValue(true);
@@ -433,31 +438,53 @@ export class TeleBoxManager {
433
438
  }
434
439
 
435
440
  public setBoxStatus(boxId: string, boxStatus?: TeleBoxState, skipUpdate = false): void {
436
- const boxesStatus = this.boxesStatus$;
437
441
  if (boxStatus) {
438
- const oldBoxStatus = boxesStatus.get(boxId);
439
- boxesStatus.set(boxId, boxStatus);
442
+ const oldBoxStatus = this.boxesStatus$.get(boxId);
443
+ this.boxesStatus$.set(boxId, boxStatus);
440
444
  if (boxStatus === TELE_BOX_STATE.Minimized && oldBoxStatus !== TELE_BOX_STATE.Minimized) {
441
445
  this.setLastNotMinimizedBoxStatus(boxId, oldBoxStatus, skipUpdate);
446
+ this.effectLastNotMinimizedBoxStatusChange();
442
447
  } else if (oldBoxStatus === TELE_BOX_STATE.Minimized && boxStatus !== TELE_BOX_STATE.Minimized) {
443
448
  this.setLastNotMinimizedBoxStatus(boxId, undefined, skipUpdate);
449
+ this.effectLastNotMinimizedBoxStatusChange();
444
450
  }
445
451
  } else {
446
- boxesStatus.delete(boxId);
452
+ this.boxesStatus$.delete(boxId);
447
453
  this.setLastNotMinimizedBoxStatus(boxId, undefined, skipUpdate);
454
+ this.effectLastNotMinimizedBoxStatusChange();
448
455
  }
449
- this.setBoxesStatus(boxesStatus, skipUpdate);
450
456
  if (!skipUpdate) {
451
457
  this.events.emit(TELE_BOX_MANAGER_EVENT.BoxStatus, { id: boxId, boxStatus});
452
458
  }
453
459
  }
454
460
 
455
- private setBoxesStatus(boxesStatus: Map<string, TeleBoxState>, skipUpdate = false): void {
461
+ public getBoxStatus(boxId: string): TeleBoxState | undefined {
462
+ return this.boxesStatus$.get(boxId);
463
+ }
464
+
465
+ public getLastNotMinimizedBoxStatus(boxId: string): NotMinimizedBoxState | undefined {
466
+ return this.lastNotMinimizedBoxesStatus$.get(boxId);
467
+ }
468
+
469
+ public get boxesStatus(): ReadonlyMap<string, TeleBoxState> {
470
+ return this.boxesStatus$;
471
+ }
472
+
473
+ public get lastNotMinimizedBoxesStatus(): ReadonlyMap<string, NotMinimizedBoxState> {
474
+ return this.lastNotMinimizedBoxesStatus$;
475
+ }
476
+
477
+ public setBoxesStatus(boxesStatus: Map<string, TeleBoxState>, skipUpdate = false): void {
478
+ this.boxesStatus$ = boxesStatus;
479
+ this.effectBoxStatusChange(skipUpdate);
480
+ }
481
+
482
+ private effectBoxStatusChange(skipUpdate = false){
456
483
  let topBox:TeleBox | undefined;
457
484
  const topBoxId = this.topBox?.id;
458
485
  let hasMinimizedBox = false;
459
486
  this.boxes.forEach((box) => {
460
- const boxStatus = boxesStatus.get(box.id);
487
+ const boxStatus = this.boxesStatus$.get(box.id);
461
488
  if (boxStatus) {
462
489
  if (boxStatus !== TELE_BOX_STATE.Minimized && box.zIndex > (topBox?.zIndex ?? 0)) {
463
490
  topBox = box;
@@ -484,7 +511,7 @@ export class TeleBoxManager {
484
511
  this.focusTopBox();
485
512
  }
486
513
  if (this.maxTitleBar) {
487
- this.maxTitleBar.setBoxesStatus(boxesStatus);
514
+ this.maxTitleBar.updateBoxesStatus();
488
515
  }
489
516
  }
490
517
 
@@ -497,24 +524,25 @@ export class TeleBoxManager {
497
524
  }
498
525
 
499
526
  public setLastNotMinimizedBoxStatus(boxId: string, lastNotMinimizedBoxStatus?: NotMinimizedBoxState, skipUpdate = false): void {
500
- const boxesStatus = this.lastNotMinimizedBoxesStatus$;
501
527
  if (lastNotMinimizedBoxStatus) {
502
- boxesStatus.set(boxId, lastNotMinimizedBoxStatus);
528
+ this.lastNotMinimizedBoxesStatus$.set(boxId, lastNotMinimizedBoxStatus);
503
529
  } else {
504
- boxesStatus.delete(boxId);
530
+ this.lastNotMinimizedBoxesStatus$.delete(boxId);
505
531
  }
506
- this.setLastNotMinimizedBoxesStatus(boxesStatus, skipUpdate);
507
532
  if (!skipUpdate) {
508
533
  this.events.emit(TELE_BOX_MANAGER_EVENT.LastNotMinimizedBoxStatus, { id: boxId, boxStatus:lastNotMinimizedBoxStatus});
509
534
  }
510
535
  }
511
536
 
512
- private setLastNotMinimizedBoxesStatus(lastNotMinimizedBoxesStatus: Map<string, NotMinimizedBoxState>, skipUpdate = false): void {
537
+ public setLastNotMinimizedBoxesStatus(lastNotMinimizedBoxesStatus: Map<string, NotMinimizedBoxState>, skipUpdate = false): void {
538
+ this.lastNotMinimizedBoxesStatus$ = lastNotMinimizedBoxesStatus;
539
+ this.effectLastNotMinimizedBoxStatusChange(skipUpdate);
540
+ }
541
+
542
+ private effectLastNotMinimizedBoxStatusChange(skipUpdate = false){
513
543
  this.boxes.forEach((box) => {
514
- const boxStatus = lastNotMinimizedBoxesStatus.get(box.id);
515
- if (boxStatus) {
516
- box.setLastNotMinimizedBoxStatus(boxStatus, skipUpdate);
517
- }
544
+ const boxStatus = this.lastNotMinimizedBoxesStatus$.get(box.id);
545
+ box.setLastNotMinimizedBoxStatus(boxStatus, skipUpdate);
518
546
  });
519
547
  }
520
548
 
@@ -553,10 +581,12 @@ export class TeleBoxManager {
553
581
 
554
582
  if (box.boxStatus) {
555
583
  this.setBoxStatus(box.id, box.boxStatus, true);
584
+ this.effectBoxStatusChange(true);
556
585
  }
557
586
 
558
587
  if (box._lastNotMinimizedBoxStatus$.value) {
559
588
  this.setLastNotMinimizedBoxStatus(box.id, box._lastNotMinimizedBoxStatus$.value, true);
589
+ this.effectLastNotMinimizedBoxStatusChange();
560
590
  }
561
591
 
562
592
  box._delegateEvents.on(TELE_BOX_DELEGATE_EVENT.Maximize, () => {
@@ -570,6 +600,7 @@ export class TeleBoxManager {
570
600
  }
571
601
  });
572
602
  }
603
+ this.effectBoxStatusChange();
573
604
  this.makeMaximizedTopBoxFocus();
574
605
  } else {
575
606
  this.setMaximized(!this.maximized);
@@ -580,6 +611,7 @@ export class TeleBoxManager {
580
611
  if (box.boxStatus) {
581
612
  const oldBoxStatus = box.boxStatus;
582
613
  this.setBoxStatus(box.id, TELE_BOX_STATE.Minimized);
614
+ this.effectBoxStatusChange();
583
615
  if (oldBoxStatus === TELE_BOX_STATE.Maximized) {
584
616
  this.makeMaximizedTopBoxFocus();
585
617
  }
@@ -674,16 +706,20 @@ export class TeleBoxManager {
674
706
  skipUpdate = false
675
707
  ): ReadonlyTeleBox | undefined {
676
708
  const box = this.getBox(boxOrID);
677
- if (box) {
678
- this.setBoxStatus(box.id, undefined, skipUpdate);
679
- this.setLastNotMinimizedBoxStatus(box.id, undefined, skipUpdate);
680
- }
681
709
  const index = this.getBoxIndex(boxOrID);
682
710
  if (index >= 0) {
683
711
  const boxes = this.boxes.slice();
684
712
  const deletedBoxes = boxes.splice(index, 1);
685
713
  this.boxes$.setValue(boxes);
686
714
  deletedBoxes.forEach((box) => box.destroy());
715
+ if (box) {
716
+ this.setBoxStatus(box.id, undefined, skipUpdate);
717
+ this.boxesStatus$.delete(box.id);
718
+ this.effectBoxStatusChange(skipUpdate);
719
+ this.setLastNotMinimizedBoxStatus(box.id, undefined, skipUpdate);
720
+ this.lastNotMinimizedBoxesStatus$.delete(box.id);
721
+ this.effectLastNotMinimizedBoxStatusChange();
722
+ }
687
723
  if (!skipUpdate) {
688
724
  if (this.boxes.length <= 0) {
689
725
  this.setMaximized(false);
@@ -874,9 +910,11 @@ export class TeleBoxManager {
874
910
  }
875
911
  if (config.boxStatus) {
876
912
  this.setBoxStatus(box.id, config.boxStatus, skipUpdate);
913
+ this.effectBoxStatusChange(skipUpdate);
877
914
  }
878
915
  if (config.lastNotMinimizedBoxStatus) {
879
916
  this.setLastNotMinimizedBoxStatus(box.id, config.lastNotMinimizedBoxStatus, skipUpdate);
917
+ this.effectLastNotMinimizedBoxStatusChange();
880
918
  }
881
919
  }
882
920
 
@@ -939,7 +977,7 @@ export class TeleBoxManager {
939
977
  return currentBox;
940
978
  }
941
979
  return topBox.zIndex > currentBox.zIndex ? topBox : currentBox;
942
- });
980
+ }, );
943
981
  if (maximizedBox) {
944
982
  this.maxTitleBar.focusBox(maximizedBox);
945
983
  }