@cloud-app-dev/vidc 3.0.15 → 3.0.17

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.
@@ -3,6 +3,7 @@ import './index.less';
3
3
  interface IDisableMarkProps {
4
4
  children: React.ReactNode;
5
5
  disabled: boolean;
6
+ width?: string | number;
6
7
  }
7
- export default function DisableMark({ children, disabled }: IDisableMarkProps): JSX.Element;
8
+ export default function DisableMark({ children, disabled, width }: IDisableMarkProps): JSX.Element;
8
9
  export {};
@@ -2,8 +2,12 @@ import React from 'react';
2
2
  import "./index.css";
3
3
  export default function DisableMark(_ref) {
4
4
  var children = _ref.children,
5
- disabled = _ref.disabled;
5
+ disabled = _ref.disabled,
6
+ width = _ref.width;
6
7
  return /*#__PURE__*/React.createElement(React.Fragment, null, disabled ? /*#__PURE__*/React.createElement("div", {
7
- className: "disable-mark"
8
+ className: "disable-mark",
9
+ style: {
10
+ width: width
11
+ }
8
12
  }) : null, children);
9
13
  }
@@ -12,5 +12,8 @@ declare class AMapInstance implements IMapInstance {
12
12
  getZoom(): number;
13
13
  setCenter(center: [number, number]): void;
14
14
  setZoomAndCenter(zoom: number, center: [number, number]): void;
15
+ on(type: string, fn: (e: any) => void): void;
16
+ off(type: string, fn: (e: any) => void): void;
17
+ setCursor(cursor: string): void;
15
18
  }
16
19
  export default AMapInstance;
@@ -66,13 +66,28 @@ var AMapInstance = /*#__PURE__*/function () {
66
66
  }, {
67
67
  key: "setCenter",
68
68
  value: function setCenter(center) {
69
- return this.map.setCenter(center);
69
+ this.map.setCenter(center);
70
70
  }
71
71
  }, {
72
72
  key: "setZoomAndCenter",
73
73
  value: function setZoomAndCenter(zoom, center) {
74
74
  this.map.setZoomAndCenter(zoom, center);
75
75
  }
76
+ }, {
77
+ key: "on",
78
+ value: function on(type, fn) {
79
+ this.map.on(type, fn);
80
+ }
81
+ }, {
82
+ key: "off",
83
+ value: function off(type, fn) {
84
+ this.map.off(type, fn);
85
+ }
86
+ }, {
87
+ key: "setCursor",
88
+ value: function setCursor(cursor) {
89
+ this.map.setDefaultCursor(cursor);
90
+ }
76
91
  }]);
77
92
 
78
93
  return AMapInstance;
@@ -8,8 +8,11 @@ declare class LeafletInstance implements IMapInstance {
8
8
  destoryMap(): void;
9
9
  setZoomAndCenter(zoom: number, center: [number, number] | LatLng): void;
10
10
  mapReset(): void;
11
- setZoom(zoom: number): Map;
11
+ setZoom(zoom: number): void;
12
12
  setCenter(center: [number, number] | LatLng): void;
13
13
  getZoom(): number;
14
+ on(type: string, fn: (event: any) => void): void;
15
+ off(type: string, fn: (event: any) => void): void;
16
+ setCursor(cursor: string): void;
14
17
  }
15
18
  export default LeafletInstance;
@@ -78,18 +78,33 @@ var LeafletInstance = /*#__PURE__*/function () {
78
78
  }, {
79
79
  key: "setZoom",
80
80
  value: function setZoom(zoom) {
81
- return this.map.setZoom(zoom);
81
+ this.map.setZoom(zoom);
82
82
  }
83
83
  }, {
84
84
  key: "setCenter",
85
85
  value: function setCenter(center) {
86
- return this.map.setCenter(center);
86
+ this.map.setCenter(center);
87
87
  }
88
88
  }, {
89
89
  key: "getZoom",
90
90
  value: function getZoom() {
91
91
  return this.map.getZoom();
92
92
  }
93
+ }, {
94
+ key: "on",
95
+ value: function on(type, fn) {
96
+ this.map.on(type, fn);
97
+ }
98
+ }, {
99
+ key: "off",
100
+ value: function off(type, fn) {
101
+ this.map.off(type, fn);
102
+ }
103
+ }, {
104
+ key: "setCursor",
105
+ value: function setCursor(cursor) {
106
+ this.map.setDefaultCursor(cursor);
107
+ }
93
108
  }]);
94
109
 
95
110
  return LeafletInstance;
@@ -1,13 +1,16 @@
1
+ import React from 'react';
1
2
  import { LatLng, MapPoint } from '../interface';
2
3
  import './index.less';
3
4
  export interface ILevelCenter {
4
5
  center?: [number, number];
5
6
  zoom?: number;
6
7
  points: MapPoint[];
8
+ enableClick?: boolean;
7
9
  onLevelCenterChange?: (options: {
8
10
  center: [number, number] | LatLng;
9
11
  zoom: number;
10
12
  }) => void;
13
+ children?: React.ReactNode;
11
14
  }
12
15
  declare const _default: (props: ILevelCenter) => JSX.Element;
13
16
  export default _default;
@@ -1,17 +1,20 @@
1
- import React, { useCallback, useContext, useEffect, useMemo } from 'react';
1
+ import _useMount from "ahooks/es/useMount";
2
+ import React, { useCallback, useContext, useMemo } from 'react';
2
3
  import ClusterLayer from '../ClusterLayer';
3
- import FindPio from '../FindPio';
4
4
  import ResetTools from '../ResetTools';
5
5
  import DragMarker from './DragMarker';
6
6
  import withMap from '../withMap';
7
7
  import { mapContext } from '../Context';
8
+ import useMapEvent from '../hook/useMapEvent';
8
9
  import "./index.css";
9
10
 
10
11
  function LevelCenter(_ref) {
11
12
  var center = _ref.center,
12
13
  zoom = _ref.zoom,
13
14
  points = _ref.points,
14
- onLevelCenterChange = _ref.onLevelCenterChange;
15
+ onLevelCenterChange = _ref.onLevelCenterChange,
16
+ enableClick = _ref.enableClick,
17
+ children = _ref.children;
15
18
 
16
19
  var _useContext = useContext(mapContext),
17
20
  instance = _useContext.instance;
@@ -21,22 +24,39 @@ function LevelCenter(_ref) {
21
24
  }, [center, instance]);
22
25
  var defaultZoom = useMemo(function () {
23
26
  return zoom || instance.config.zoom;
24
- }, [zoom, instance]);
27
+ }, [zoom, instance]); // eslint-disable-next-line react-hooks/exhaustive-deps
28
+
25
29
  var mapRest = useCallback(function () {
26
30
  return instance.setZoomAndCenter(defaultZoom, defaultCenter);
27
31
  }, [defaultZoom, defaultCenter]);
28
- useEffect(function () {
29
- return mapRest();
30
- }, []);
32
+
33
+ _useMount(function () {
34
+ if (enableClick) {
35
+ instance.setCursor('pointer');
36
+ }
37
+
38
+ mapRest();
39
+ });
40
+
41
+ useMapEvent('click', function (event) {
42
+ if (enableClick) {
43
+ var _center = [event.lnglat.lng, event.lnglat.lat];
44
+ instance.setCenter(_center);
45
+ onLevelCenterChange === null || onLevelCenterChange === void 0 ? void 0 : onLevelCenterChange({
46
+ center: _center,
47
+ zoom: defaultZoom
48
+ });
49
+ }
50
+ });
31
51
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ClusterLayer, {
32
52
  points: points
33
- }), /*#__PURE__*/React.createElement(FindPio, null), /*#__PURE__*/React.createElement(ResetTools, {
53
+ }), /*#__PURE__*/React.createElement(ResetTools, {
34
54
  onMapReset: mapRest
35
55
  }), /*#__PURE__*/React.createElement(DragMarker, {
36
56
  center: defaultCenter,
37
57
  zoom: defaultZoom,
38
58
  onChange: onLevelCenterChange
39
- }));
59
+ }), children);
40
60
  }
41
61
 
42
62
  export default withMap(LevelCenter, 'lv-center-map-container');
@@ -1,4 +1,5 @@
1
- import React, { useCallback, useContext, useEffect, useMemo } from 'react';
1
+ import _useMount from "ahooks/es/useMount";
2
+ import React, { useCallback, useContext, useMemo } from 'react';
2
3
  import ResetTools from '../ResetTools';
3
4
  import Marker from './Marker';
4
5
  import withMap from '../withMap';
@@ -15,13 +16,15 @@ function SinglePoint(_ref) {
15
16
  var type = useMapType();
16
17
  var defaultCenter = useMemo(function () {
17
18
  return type.AMap ? [point.longitude, point.latitude] : [point.latitude, point.longitude];
18
- }, [point.latitude, point.longitude, instance]);
19
+ }, [type.AMap, point.longitude, point.latitude]);
19
20
  var mapRest = useCallback(function () {
20
21
  return instance.setZoomAndCenter(instance.config.zoom, defaultCenter);
21
- }, [defaultCenter]);
22
- useEffect(function () {
22
+ }, [defaultCenter, instance]);
23
+
24
+ _useMount(function () {
23
25
  return mapRest();
24
- }, []);
26
+ });
27
+
25
28
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ResetTools, {
26
29
  onMapReset: mapRest
27
30
  }), /*#__PURE__*/React.createElement(Marker, {
@@ -0,0 +1,2 @@
1
+ declare function useMapEvent(type: string, fn: (event: any) => void): void;
2
+ export default useMapEvent;
@@ -0,0 +1,22 @@
1
+ import _useCreation from "ahooks/es/useCreation";
2
+ import { useContext, useEffect } from 'react';
3
+ import { mapContext } from '../Context';
4
+
5
+ function useMapEvent(type, fn) {
6
+ var action = _useCreation(function () {
7
+ return fn;
8
+ }, []);
9
+
10
+ var _useContext = useContext(mapContext),
11
+ instance = _useContext.instance;
12
+
13
+ useEffect(function () {
14
+ console.log(11111);
15
+ instance.on(type, action);
16
+ return function () {
17
+ return instance.off(type, action);
18
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
19
+ }, []);
20
+ }
21
+
22
+ export default useMapEvent;
@@ -32,6 +32,9 @@ export class IMapInstance {
32
32
  setCenter(center: [number, number] | LatLng): void;
33
33
  getZoom(): number;
34
34
  setZoomAndCenter(zoom: number, center: [number, number] | LatLng): void;
35
+ on(type: string, fn: (e: any) => void): void;
36
+ off(type: string, fn: (e: any) => void): void;
37
+ setCursor(cursor: string);
35
38
  }
36
39
 
37
40
  export interface MapPoint {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type VideoEventInstance from '.';
3
2
  import type Api from '../api';
4
3
  import Flvjs from '@cloud-app-dev/flv.js';
@@ -11,6 +10,7 @@ interface IErrorEventProps {
11
10
  hls: Hls;
12
11
  reload: () => void;
13
12
  unload: () => void;
13
+ errorHandleAdapter?: (errorInfo: any) => boolean;
14
14
  }
15
- declare function ErrorEvent({ event, api, reload, unload, errorReloadTimer, flv, hls }: IErrorEventProps): JSX.Element;
16
- export default ErrorEvent;
15
+ declare function useErrorEvent({ event, api, reload, unload, errorReloadTimer, flv, hls, errorHandleAdapter }: IErrorEventProps): void;
16
+ export default useErrorEvent;
@@ -18,19 +18,20 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
18
18
 
19
19
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
20
 
21
- import React, { useState, useEffect, useRef } from 'react';
21
+ import { useState, useEffect, useRef } from 'react';
22
22
  import EventName from './eventName';
23
23
  import Flvjs from '@cloud-app-dev/flv.js';
24
24
  import Hls from 'hls.js';
25
25
 
26
- function ErrorEvent(_ref) {
26
+ function useErrorEvent(_ref) {
27
27
  var event = _ref.event,
28
28
  api = _ref.api,
29
29
  reload = _ref.reload,
30
30
  unload = _ref.unload,
31
31
  errorReloadTimer = _ref.errorReloadTimer,
32
32
  flv = _ref.flv,
33
- hls = _ref.hls;
33
+ hls = _ref.hls,
34
+ errorHandleAdapter = _ref.errorHandleAdapter;
34
35
 
35
36
  var _useState = useState(0),
36
37
  _useState2 = _slicedToArray(_useState, 2),
@@ -54,7 +55,10 @@ function ErrorEvent(_ref) {
54
55
  (_console = console).error.apply(_console, args);
55
56
 
56
57
  errorInfo.current = args;
57
- setErrorTime(errorTimer + 1);
58
+
59
+ if (!(errorHandleAdapter === null || errorHandleAdapter === void 0 ? void 0 : errorHandleAdapter(args))) {
60
+ setErrorTime(errorTimer + 1);
61
+ }
58
62
  };
59
63
 
60
64
  var reloadSuccess = function reloadSuccess() {
@@ -77,17 +81,22 @@ function ErrorEvent(_ref) {
77
81
  hls.on(Hls.Events.ERROR, errorHandle);
78
82
  }
79
83
 
80
- event.on(EventName.ERROR, errorHandle);
81
- event.on(EventName.CLEAR_ERROR_TIMER, clearErrorTimer);
82
- event.addEventListener('error', errorHandle); //获取video状态清除错误状态
84
+ if (event) {
85
+ event.on(EventName.ERROR, errorHandle);
86
+ event.on(EventName.CLEAR_ERROR_TIMER, clearErrorTimer);
87
+ event.addEventListener('error', errorHandle); //获取video状态清除错误状态
88
+
89
+ event.addEventListener('canplay', reloadSuccess);
90
+ }
83
91
 
84
- event.addEventListener('canplay', reloadSuccess);
85
92
  return function () {
86
93
  // flv, hls事件不用主动销毁,库内部自己处理
87
- event.off(EventName.ERROR, errorHandle);
88
- event.removeEventListener('error', errorHandle);
89
- event.removeEventListener('canplay', reloadSuccess);
90
- };
94
+ if (event) {
95
+ event.off(EventName.ERROR, errorHandle);
96
+ event.removeEventListener('error', errorHandle);
97
+ event.removeEventListener('canplay', reloadSuccess);
98
+ }
99
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
91
100
  }, [event, flv, hls, errorTimer]);
92
101
  useEffect(function () {
93
102
  if (errorTimer === 0) {
@@ -109,7 +118,6 @@ function ErrorEvent(_ref) {
109
118
  clearTimeout(reloadTimer.current);
110
119
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
111
120
  }, [errorTimer, api, event, flv, hls]);
112
- return /*#__PURE__*/React.createElement(React.Fragment, null);
113
121
  }
114
122
 
115
- export default ErrorEvent;
123
+ export default useErrorEvent;
@@ -1,8 +1,8 @@
1
- /// <reference types="react" />
2
1
  import type Api from './api';
3
2
  import type VideoEventInstance from './event';
4
- declare function LiveHeart({ api, event }: {
3
+ declare function useLiveHeart({ api, event, isLive }: {
5
4
  api: Api;
6
5
  event: VideoEventInstance;
7
- }): JSX.Element;
8
- export default LiveHeart;
6
+ isLive: boolean;
7
+ }): void;
8
+ export default useLiveHeart;
@@ -1,18 +1,23 @@
1
1
  import _useRafInterval from "ahooks/es/useRafInterval";
2
2
  import _useUpdateEffect from "ahooks/es/useUpdateEffect";
3
3
  import _useDocumentVisibility from "ahooks/es/useDocumentVisibility";
4
- import React, { useRef } from 'react';
4
+ import { useRef } from 'react';
5
5
  import Events from './event/eventName';
6
6
 
7
- function LiveHeart(_ref) {
7
+ function useLiveHeart(_ref) {
8
8
  var api = _ref.api,
9
- event = _ref.event;
9
+ event = _ref.event,
10
+ isLive = _ref.isLive;
10
11
 
11
12
  var documentVisibility = _useDocumentVisibility();
12
13
 
13
14
  var cTimeRef = useRef(null);
14
15
 
15
16
  var run = function run() {
17
+ if (!isLive && documentVisibility !== 'visible') {
18
+ return;
19
+ }
20
+
16
21
  var current = api.getCurrentTime();
17
22
  var buffered = api.getSecondsLoaded();
18
23
 
@@ -38,12 +43,10 @@ function LiveHeart(_ref) {
38
43
  _useRafInterval(function () {
39
44
  var cuurentTime = api.getCurrentTime();
40
45
 
41
- if (!api.video.paused && cuurentTime === cTimeRef.current) {
46
+ if (!!isLive && !api.video.paused && cuurentTime === cTimeRef.current) {
42
47
  event.emit(Events.ERROR);
43
48
  }
44
49
  }, 20 * 1000);
45
-
46
- return /*#__PURE__*/React.createElement(React.Fragment, null);
47
50
  }
48
51
 
49
- export default LiveHeart;
52
+ export default useLiveHeart;
@@ -134,7 +134,7 @@ function VideoMessage(_ref) {
134
134
  event.off(EventName.HISTORY_PLAY_END, playEnd);
135
135
  event.off(EventName.CLEAR_ERROR_TIMER, reloadSuccess);
136
136
  };
137
- }, [event]);
137
+ }, [api, event]);
138
138
  var loading = state.loading,
139
139
  status = state.status;
140
140
  return /*#__PURE__*/React.createElement("div", {
@@ -19,9 +19,9 @@ import { usePlayerEvent, useRegisterPlayerEvents, useVideoEvents } from './event
19
19
  import EventName from './event/eventName';
20
20
  import ContrallerBar from './contraller_bar';
21
21
  import ContrallerEvent from './contraller_bar/contraller_event';
22
- import LiveHeart from './live_heart';
22
+ import useLiveHeart from './live_heart';
23
23
  import VideoMessage from './message';
24
- import ErrorEvent from './event/errorEvent';
24
+ import useErrorEvent from './event/errorEvent';
25
25
  import { getVideoType, playReload, playUnload } from './util';
26
26
  import Timeline from './timeline';
27
27
  import "./style/index.css";
@@ -85,7 +85,6 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
85
85
  _usePlayerApi2 = _slicedToArray(_usePlayerApi, 2),
86
86
  api = _usePlayerApi2[0],
87
87
  _usePlayerApi2$ = _slicedToArray(_usePlayerApi2[1], 3),
88
- _ = _usePlayerApi2$[0],
89
88
  flv = _usePlayerApi2$[1],
90
89
  hls = _usePlayerApi2$[2]; // 判断是否有链接传入
91
90
 
@@ -167,7 +166,23 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
167
166
  onCanPlayerInit === null || onCanPlayerInit === void 0 ? void 0 : onCanPlayerInit();
168
167
  } // eslint-disable-next-line react-hooks/exhaustive-deps
169
168
 
170
- }, [api, event, video]);
169
+ }, [api, event, video]); // 补货视频错误,自定义处理
170
+
171
+ useErrorEvent({
172
+ unload: unload,
173
+ flv: flv,
174
+ hls: hls,
175
+ api: playApi,
176
+ event: event,
177
+ reload: reload,
178
+ errorReloadTimer: errorReloadTimer
179
+ }); // 直播缓冲追回
180
+
181
+ useLiveHeart({
182
+ api: playApi,
183
+ event: event,
184
+ isLive: isLive
185
+ });
171
186
  return /*#__PURE__*/React.createElement("div", {
172
187
  className: "lm-player-container ".concat(className),
173
188
  ref: domRef
@@ -204,18 +219,7 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
204
219
  })), customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
205
220
  api: playApi,
206
221
  event: event
207
- }) : null, /*#__PURE__*/React.createElement(ErrorEvent, {
208
- unload: unload,
209
- flv: flv,
210
- hls: hls,
211
- api: playApi,
212
- event: event,
213
- reload: reload,
214
- errorReloadTimer: errorReloadTimer
215
- }), isLive && /*#__PURE__*/React.createElement(LiveHeart, {
216
- api: playApi,
217
- event: playEvent
218
- })), children);
222
+ }) : null), children);
219
223
  });
220
224
  SinglePlayer.defaultProps = {
221
225
  isLive: true,
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import type { ILivePlayerProps } from './interface';
3
3
  import './index.less';
4
- declare function LivePlayer({ list, children, onIndexChange, onClose, onCloseAll, snapshot, defaultScreen, screenChange, defaultSelectIndex }: ILivePlayerProps): JSX.Element;
4
+ declare function LivePlayer({ list, children, onIndexChange, onClose, onCloseAll, snapshot, defaultScreen, screenChange, defaultSelectIndex, oneWinExtTools, allWinExtTools, ...options }: ILivePlayerProps): JSX.Element;
5
5
  declare namespace LivePlayer {
6
6
  var defaultProps: {
7
7
  list: any[];
@@ -20,6 +20,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
20
20
 
21
21
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
22
 
23
+ import { __rest } from "tslib";
23
24
  import React, { useEffect, useMemo, useRef, useState } from 'react';
24
25
  import { ScreenType, mergeFill } from './utils';
25
26
  import { LivePlayerWithExt } from './PlayerWithExt';
@@ -27,16 +28,19 @@ import Tools from './LiveTools';
27
28
  import useVideoFit from './useVideoFit';
28
29
  import "./index.css";
29
30
 
30
- function LivePlayer(_ref) {
31
- var list = _ref.list,
32
- children = _ref.children,
33
- onIndexChange = _ref.onIndexChange,
34
- onClose = _ref.onClose,
35
- onCloseAll = _ref.onCloseAll,
36
- snapshot = _ref.snapshot,
37
- defaultScreen = _ref.defaultScreen,
38
- screenChange = _ref.screenChange,
39
- defaultSelectIndex = _ref.defaultSelectIndex;
31
+ function LivePlayer(_a) {
32
+ var list = _a.list,
33
+ children = _a.children,
34
+ onIndexChange = _a.onIndexChange,
35
+ onClose = _a.onClose,
36
+ onCloseAll = _a.onCloseAll,
37
+ snapshot = _a.snapshot,
38
+ defaultScreen = _a.defaultScreen,
39
+ screenChange = _a.screenChange,
40
+ defaultSelectIndex = _a.defaultSelectIndex,
41
+ oneWinExtTools = _a.oneWinExtTools,
42
+ allWinExtTools = _a.allWinExtTools,
43
+ options = __rest(_a, ["list", "children", "onIndexChange", "onClose", "onCloseAll", "snapshot", "defaultScreen", "screenChange", "defaultSelectIndex", "oneWinExtTools", "allWinExtTools"]);
40
44
 
41
45
  var _useState = useState({
42
46
  screenNum: defaultScreen !== null && defaultScreen !== void 0 ? defaultScreen : 4,
@@ -51,18 +55,24 @@ function LivePlayer(_ref) {
51
55
 
52
56
  var _useVideoFit = useVideoFit(domRef, []),
53
57
  fit = _useVideoFit.fit,
54
- toggleFit = _useVideoFit.toggleFit; // 缓存所有player对象
58
+ toggleFit = _useVideoFit.toggleFit; // 若外部来控制screenNum 则由外部完全控制
55
59
 
56
60
 
61
+ var screenNum = useMemo(function () {
62
+ var _a;
63
+
64
+ return (_a = options.screenNum) !== null && _a !== void 0 ? _a : state.screenNum;
65
+ }, [options.screenNum, state.screenNum]); // 缓存所有player对象
66
+
57
67
  var playerRef = useRef([]);
58
68
  var screenType = useMemo(function () {
59
69
  return ScreenType.find(function (v) {
60
- return v.name === state.screenNum;
70
+ return v.name === screenNum;
61
71
  });
62
- }, [state.screenNum]);
72
+ }, [screenNum]);
63
73
  var screenList = useMemo(function () {
64
- return mergeFill(state.screenNum, list, {});
65
- }, [list, state.screenNum]); // 获取选中player对象
74
+ return mergeFill(screenNum, list, {});
75
+ }, [list, screenNum]); // 获取选中player对象
66
76
 
67
77
  var getPlayerItem = function getPlayerItem() {
68
78
  var _a;
@@ -75,9 +85,15 @@ function LivePlayer(_ref) {
75
85
  var obj = {};
76
86
 
77
87
  if (newState.hasOwnProperty('screenNum')) {
78
- obj.screenNum = newState.screenNum;
88
+ if (options.screenNum) {
89
+ // 若外部控制,不需要update state
90
+ screenChange === null || screenChange === void 0 ? void 0 : screenChange(newState.screenNum);
91
+ } else {
92
+ obj.screenNum = newState.screenNum;
93
+ } // 修正选中索引
94
+
79
95
 
80
- if (obj.screenNum < state.selectIndex) {
96
+ if (newState.screenNum < state.selectIndex) {
81
97
  obj.selectIndex = 0;
82
98
  }
83
99
  }
@@ -166,11 +182,13 @@ function LivePlayer(_ref) {
166
182
  disabled: !segmentItem.url,
167
183
  toggleFit: toggleFit,
168
184
  getPlayerItem: getPlayerItem,
169
- screenNum: state.screenNum,
185
+ screenNum: screenNum,
170
186
  mode: state.modes[state.selectIndex],
171
187
  containerRef: domRef,
172
188
  updateState: updateState,
173
- snapshot: snapshot
189
+ snapshot: snapshot,
190
+ oneWinExtTools: oneWinExtTools,
191
+ allWinExtTools: allWinExtTools
174
192
  }), children && /*#__PURE__*/React.cloneElement(children, {
175
193
  selectIndex: state.selectIndex
176
194
  }));
@@ -16,6 +16,14 @@ interface IToolsProps {
16
16
  onCloseAll?: () => void;
17
17
  disabled: boolean;
18
18
  snapshot?: (base64?: string) => void;
19
+ /**
20
+ * 单窗口拓展工具条,左侧
21
+ */
22
+ oneWinExtTools?: JSX.Element;
23
+ /**
24
+ * 全局窗口工具条,右侧
25
+ */
26
+ allWinExtTools?: JSX.Element;
19
27
  }
20
- declare function LiveTools({ containerRef, updateState, screenNum, getPlayerItem, mode, toggleFit, fit, onClose, onCloseAll, disabled, snapshot }: IToolsProps): JSX.Element;
28
+ declare function LiveTools({ containerRef, oneWinExtTools, allWinExtTools, updateState, screenNum, getPlayerItem, mode, toggleFit, fit, onClose, onCloseAll, disabled, snapshot, }: IToolsProps): JSX.Element;
21
29
  export default LiveTools;
@@ -21,6 +21,8 @@ import useFullscreen from '../useFullscreen';
21
21
 
22
22
  function LiveTools(_ref) {
23
23
  var containerRef = _ref.containerRef,
24
+ oneWinExtTools = _ref.oneWinExtTools,
25
+ allWinExtTools = _ref.allWinExtTools,
24
26
  updateState = _ref.updateState,
25
27
  screenNum = _ref.screenNum,
26
28
  getPlayerItem = _ref.getPlayerItem,
@@ -71,7 +73,8 @@ function LiveTools(_ref) {
71
73
  return /*#__PURE__*/React.createElement("div", {
72
74
  className: "player-tools"
73
75
  }, /*#__PURE__*/React.createElement(DisableMark, {
74
- disabled: disabled
76
+ disabled: disabled,
77
+ width: "70%"
75
78
  }, /*#__PURE__*/React.createElement("div", {
76
79
  className: "player-tools-left"
77
80
  }, /*#__PURE__*/React.createElement("span", {
@@ -120,7 +123,7 @@ function LiveTools(_ref) {
120
123
  position: 'relative',
121
124
  top: 1
122
125
  }
123
- }))), /*#__PURE__*/React.createElement("div", {
126
+ })), oneWinExtTools), /*#__PURE__*/React.createElement("div", {
124
127
  className: "player-tools-mid"
125
128
  }, /*#__PURE__*/React.createElement("div", {
126
129
  className: "player-tools-item",
@@ -147,7 +150,7 @@ function LiveTools(_ref) {
147
150
  title: "\u64AD\u653E"
148
151
  }))), /*#__PURE__*/React.createElement("div", {
149
152
  className: "player-tools-right"
150
- }, /*#__PURE__*/React.createElement("span", {
153
+ }, allWinExtTools, /*#__PURE__*/React.createElement("span", {
151
154
  className: "player-tools-item",
152
155
  onClick: onCloseAll
153
156
  }, /*#__PURE__*/React.createElement(IconFont, {
@@ -6,5 +6,5 @@ import './index.less';
6
6
  * @param param0
7
7
  * @returns
8
8
  */
9
- declare function RecordPlayer({ list, children, queryRecord, onIndexChange, onClose, onCloseAll, download, snapshot, defaultScreen, screenChange, defaultSelectIndex, }: IRecordPlayerProps): JSX.Element;
9
+ declare function RecordPlayer({ list, children, queryRecord, onIndexChange, onClose, onCloseAll, download, snapshot, defaultScreen, screenChange, defaultSelectIndex, oneWinExtTools, allWinExtTools, ...options }: IRecordPlayerProps): JSX.Element;
10
10
  export default RecordPlayer;
@@ -27,7 +27,7 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
27
27
 
28
28
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
29
29
 
30
- import { __awaiter } from "tslib";
30
+ import { __awaiter, __rest } from "tslib";
31
31
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
32
32
  import { ScreenType, mergeFill, differenceWithIndexs, FILTER_KEY } from './utils';
33
33
  import { SegmentPlayerWithExt, FrontendPlayerWithExt } from './PlayerWithExt';
@@ -53,39 +53,48 @@ var defaultState = {
53
53
  * @returns
54
54
  */
55
55
 
56
- function RecordPlayer(_ref) {
56
+ function RecordPlayer(_a) {
57
57
  var _this = this;
58
58
 
59
- var list = _ref.list,
60
- children = _ref.children,
61
- queryRecord = _ref.queryRecord,
62
- onIndexChange = _ref.onIndexChange,
63
- onClose = _ref.onClose,
64
- onCloseAll = _ref.onCloseAll,
65
- download = _ref.download,
66
- snapshot = _ref.snapshot,
67
- defaultScreen = _ref.defaultScreen,
68
- screenChange = _ref.screenChange,
69
- defaultSelectIndex = _ref.defaultSelectIndex;
59
+ var list = _a.list,
60
+ children = _a.children,
61
+ queryRecord = _a.queryRecord,
62
+ onIndexChange = _a.onIndexChange,
63
+ onClose = _a.onClose,
64
+ onCloseAll = _a.onCloseAll,
65
+ download = _a.download,
66
+ snapshot = _a.snapshot,
67
+ defaultScreen = _a.defaultScreen,
68
+ screenChange = _a.screenChange,
69
+ defaultSelectIndex = _a.defaultSelectIndex,
70
+ oneWinExtTools = _a.oneWinExtTools,
71
+ allWinExtTools = _a.allWinExtTools,
72
+ options = __rest(_a, ["list", "children", "queryRecord", "onIndexChange", "onClose", "onCloseAll", "download", "snapshot", "defaultScreen", "screenChange", "defaultSelectIndex", "oneWinExtTools", "allWinExtTools"]);
70
73
 
71
74
  var _useState = useState(Object.assign(Object.assign({}, defaultState), {
72
75
  screenNum: defaultScreen !== null && defaultScreen !== void 0 ? defaultScreen : defaultState.screenNum
73
76
  })),
74
77
  _useState2 = _slicedToArray(_useState, 2),
75
78
  state = _useState2[0],
76
- setState = _useState2[1];
79
+ setState = _useState2[1]; // 若外部来控制screenNum 则由外部完全控制
77
80
 
81
+
82
+ var screenNum = useMemo(function () {
83
+ var _a;
84
+
85
+ return (_a = options.screenNum) !== null && _a !== void 0 ? _a : state.screenNum;
86
+ }, [options.screenNum, state.screenNum]);
78
87
  var domRef = useRef(null);
79
88
  var screenType = useMemo(function () {
80
89
  return ScreenType.find(function (v) {
81
- return v.name === state.screenNum;
90
+ return v.name === screenNum;
82
91
  });
83
- }, [state.screenNum]);
92
+ }, [screenNum]);
84
93
  var screenList = useMemo(function () {
85
- return mergeFill(state.screenNum, list, {
94
+ return mergeFill(screenNum, list, {
86
95
  recordType: 1
87
96
  });
88
- }, [state.screenNum, list]);
97
+ }, [screenNum, list]);
89
98
 
90
99
  var _useVideoFit = useVideoFit(domRef, []),
91
100
  fit = _useVideoFit.fit,
@@ -198,9 +207,15 @@ function RecordPlayer(_ref) {
198
207
  var obj = {};
199
208
 
200
209
  if (newState.hasOwnProperty('screenNum')) {
201
- obj.screenNum = newState.screenNum;
210
+ if (options.screenNum) {
211
+ // 若外部控制,不需要update state
212
+ screenChange === null || screenChange === void 0 ? void 0 : screenChange(newState.screenNum);
213
+ } else {
214
+ obj.screenNum = newState.screenNum;
215
+ } // 修正选中索引
216
+
202
217
 
203
- if (obj.screenNum < state.selectIndex) {
218
+ if (newState.screenNum < state.selectIndex) {
204
219
  obj.selectIndex = 0;
205
220
  }
206
221
  }
@@ -398,13 +413,14 @@ function RecordPlayer(_ref) {
398
413
  })), /*#__PURE__*/React.createElement("div", {
399
414
  className: "player-tools-group"
400
415
  }, /*#__PURE__*/React.createElement(DisableMark, {
401
- disabled: !segmentItem.cid
416
+ disabled: !segmentItem.cid,
417
+ width: "70%"
402
418
  }, /*#__PURE__*/React.createElement(RecordTools, {
403
419
  time: state.currentTimes[state.selectIndex],
404
420
  fit: fit,
405
421
  toggleFit: toggleFit,
406
422
  getPlayerItem: getPlayerItem,
407
- screenNum: state.screenNum,
423
+ screenNum: screenNum,
408
424
  mode: state.modes[state.selectIndex],
409
425
  containerRef: domRef,
410
426
  updateState: updateState,
@@ -413,7 +429,9 @@ function RecordPlayer(_ref) {
413
429
  onCloseAll: onCloseAll,
414
430
  timeMode: state.timeMode,
415
431
  download: download,
416
- snapshot: snapshot
432
+ snapshot: snapshot,
433
+ oneWinExtTools: oneWinExtTools,
434
+ allWinExtTools: allWinExtTools
417
435
  }), /*#__PURE__*/React.createElement(SegmentTimeLine, {
418
436
  begin: timeBegin,
419
437
  updateState: updateState,
@@ -20,6 +20,14 @@ interface IToolsProps {
20
20
  timeMode: number;
21
21
  download?: () => void;
22
22
  snapshot?: (base64: string) => void;
23
+ /**
24
+ * 单窗口拓展工具条,左侧
25
+ */
26
+ oneWinExtTools?: JSX.Element;
27
+ /**
28
+ * 全局窗口工具条,右侧
29
+ */
30
+ allWinExtTools?: JSX.Element;
23
31
  }
24
- declare function RecordTools({ containerRef, updateState, download, screenNum, timeMode, getPlayerItem, mode, toggleFit, fit, time, onTimeChange, onClose, onCloseAll, snapshot, }: IToolsProps): JSX.Element;
32
+ declare function RecordTools({ containerRef, updateState, download, screenNum, timeMode, getPlayerItem, mode, toggleFit, fit, time, onTimeChange, onClose, onCloseAll, snapshot, oneWinExtTools, allWinExtTools, }: IToolsProps): JSX.Element;
25
33
  export default RecordTools;
@@ -34,7 +34,9 @@ function RecordTools(_ref) {
34
34
  onTimeChange = _ref.onTimeChange,
35
35
  onClose = _ref.onClose,
36
36
  onCloseAll = _ref.onCloseAll,
37
- snapshot = _ref.snapshot;
37
+ snapshot = _ref.snapshot,
38
+ oneWinExtTools = _ref.oneWinExtTools,
39
+ allWinExtTools = _ref.allWinExtTools;
38
40
 
39
41
  var _useFullscreen = useFullscreen(containerRef),
40
42
  _useFullscreen2 = _slicedToArray(_useFullscreen, 2),
@@ -114,7 +116,7 @@ function RecordTools(_ref) {
114
116
  },
115
117
  type: "lm-player-S_Device_shezhi",
116
118
  title: "\u5207\u6362".concat(mode === 1 ? '插件' : '浏览器', "\u6A21\u5F0F")
117
- }))), /*#__PURE__*/React.createElement("div", {
119
+ })), oneWinExtTools), /*#__PURE__*/React.createElement("div", {
118
120
  className: "player-tools-mid"
119
121
  }, /*#__PURE__*/React.createElement("div", {
120
122
  className: "player-tools-item",
@@ -148,7 +150,7 @@ function RecordTools(_ref) {
148
150
  title: "\u64AD\u653E"
149
151
  }))), /*#__PURE__*/React.createElement("div", {
150
152
  className: "player-tools-right"
151
- }, /*#__PURE__*/React.createElement("span", {
153
+ }, allWinExtTools, /*#__PURE__*/React.createElement("span", {
152
154
  className: "player-tools-item",
153
155
  onClick: onCloseAll
154
156
  }, /*#__PURE__*/React.createElement(IconFont, {
@@ -40,13 +40,40 @@ export interface IRecordPlayerProps {
40
40
  */
41
41
  download?: () => void;
42
42
 
43
+ /**
44
+ * 截图
45
+ */
43
46
  snapshot?: (base64: string) => void;
44
47
 
48
+ /**
49
+ * 窗口变化
50
+ */
45
51
  screenChange?: (num: number) => void;
46
52
 
53
+ /**
54
+ * 默认窗口数量
55
+ */
47
56
  defaultScreen?: 1 | 4 | 6 | 9 | 16;
48
57
 
58
+ /**
59
+ * 窗口数量,若有值数量将由外部控制
60
+ */
61
+ screenNum?: 1 | 4 | 6 | 9 | 16;
62
+
63
+ /**
64
+ * 默认选中窗口
65
+ * @default 0
66
+ */
49
67
  defaultSelectIndex?: number;
68
+ /**
69
+ * 单窗口拓展工具条,左侧
70
+ */
71
+ oneWinExtTools?: JSX.Element;
72
+
73
+ /**
74
+ * 全局窗口工具条,右侧
75
+ */
76
+ allWinExtTools?: JSX.Element;
50
77
  }
51
78
 
52
79
  export interface IRecordPlayerState {
@@ -116,13 +143,41 @@ export interface ILivePlayerProps {
116
143
  */
117
144
  onIndexChange?: (idx: number) => void;
118
145
 
146
+ /**
147
+ * 截图
148
+ */
119
149
  snapshot?: (base64: string) => void;
120
150
 
151
+ /**
152
+ * 窗口变化
153
+ */
121
154
  screenChange?: (num: number) => void;
122
155
 
156
+ /**
157
+ * 默认窗口数量
158
+ */
123
159
  defaultScreen?: 1 | 4 | 6 | 9 | 16;
124
160
 
161
+ /**
162
+ * 窗口数量,若有值由外部来完全控制
163
+ */
164
+ screenNum?: 1 | 4 | 6 | 9 | 16;
165
+
166
+ /**
167
+ * 默认选中窗口
168
+ * @default 0
169
+ */
125
170
  defaultSelectIndex?: number;
171
+
172
+ /**
173
+ * 单窗口拓展工具条,左侧
174
+ */
175
+ oneWinExtTools?: JSX.Element;
176
+
177
+ /**
178
+ * 全局窗口工具条,右侧
179
+ */
180
+ allWinExtTools?: JSX.Element;
126
181
  }
127
182
 
128
183
  export interface ILivePlayerState {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "@cloud-app-dev/vidc",
4
4
  "description": "Video Image Data Componennts",
5
- "version": "3.0.15",
5
+ "version": "3.0.17",
6
6
  "scripts": {
7
7
  "start": "dumi dev",
8
8
  "docs:build": "dumi build",
@@ -42,6 +42,8 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@cloud-app-dev/utils": "^4.0.1",
45
+ "@testing-library/react-hooks": "^8.0.1",
46
+ "@types/jest": "^29.0.1",
45
47
  "@types/leaflet": "^1.7.11",
46
48
  "@types/lodash-es": "^4.17.6",
47
49
  "@types/node": "^18.7.6",