@cloud-app-dev/vidc 3.0.21 → 3.0.23

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/.umirc.ts CHANGED
@@ -2,7 +2,7 @@ import { defineConfig } from 'dumi';
2
2
  import path from 'path';
3
3
 
4
4
  const token =
5
- 'eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MzQwNTM5ODYzOCwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MzE0NjE5ODYzOH0.EPh_1eNPNFl-fmLODbHo0mu5R_1kKdt3UUu_0qfBGFY';
5
+ 'eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MzkyNzM5NjQzMCwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MzY2ODE5NjQzMH0.bJbtN-QjTUGGSIJRfR1ycjhtGt6UCEsrS29CYN-AAfw';
6
6
 
7
7
  export default defineConfig({
8
8
  title: 'CloudApp VIDC',
@@ -0,0 +1,2 @@
1
+ declare const App: () => JSX.Element;
2
+ export default App;
package/es/RIO/demo.js ADDED
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import RIO from './index';
3
+
4
+ var App = function App() {
5
+ return /*#__PURE__*/React.createElement("div", {
6
+ style: {
7
+ width: 600,
8
+ height: 400,
9
+ background: '#999'
10
+ }
11
+ }, /*#__PURE__*/React.createElement(RIO, {
12
+ debug: true,
13
+ isOpen: true,
14
+ onChange: console.log
15
+ }));
16
+ };
17
+
18
+ export default App;
@@ -0,0 +1,29 @@
1
+ .rio-layout {
2
+ width: 100%;
3
+ height: 100%;
4
+ position: relative;
5
+ }
6
+ .rio-layout canvas {
7
+ position: absolute;
8
+ left: 0;
9
+ top: 0;
10
+ width: 100%;
11
+ height: 100%;
12
+ }
13
+ .rio-layout .rio-debug-box {
14
+ position: absolute;
15
+ left: 0;
16
+ top: 0;
17
+ width: 100%;
18
+ height: 100%;
19
+ display: flex;
20
+ flex-direction: column;
21
+ }
22
+ .rio-layout .rio-debug-box > div {
23
+ display: flex;
24
+ flex: 1;
25
+ }
26
+ .rio-layout .rio-debug-box > div span {
27
+ flex: 1;
28
+ border: 1px solid #eee;
29
+ }
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import './index.less';
3
+ interface IRIOProps {
4
+ children?: React.ReactNode;
5
+ /**
6
+ * 调试模式,开启回绘制具体网格
7
+ */
8
+ debug?: boolean;
9
+ /**
10
+ * 绘制数据变化
11
+ */
12
+ onChange?: (rio: number[][]) => void;
13
+ /**
14
+ * 开启/关闭 标识
15
+ */
16
+ isOpen?: boolean;
17
+ /**
18
+ * key变化回清楚画布
19
+ */
20
+ renderKey?: React.Key;
21
+ /**
22
+ * rio共多少行
23
+ * @default 18
24
+ */
25
+ row?: number;
26
+ /**
27
+ * rio 一行有多少个位置
28
+ * @default 32
29
+ */
30
+ rowItems?: number;
31
+ }
32
+ declare function RIO({ children, debug, renderKey, onChange, isOpen, row, rowItems }: IRIOProps): JSX.Element;
33
+ declare namespace RIO {
34
+ var defaultProps: {
35
+ row: number;
36
+ rowItems: number;
37
+ };
38
+ }
39
+ export default RIO;
@@ -0,0 +1,62 @@
1
+ import _useUpdateEffect from "ahooks/es/useUpdateEffect";
2
+ import React, { useEffect, useRef } from 'react';
3
+ import useDrawRIO from '../useDrawRIO';
4
+ import "./index.css";
5
+
6
+ function RIO(_ref) {
7
+ var children = _ref.children,
8
+ debug = _ref.debug,
9
+ renderKey = _ref.renderKey,
10
+ onChange = _ref.onChange,
11
+ isOpen = _ref.isOpen,
12
+ row = _ref.row,
13
+ rowItems = _ref.rowItems;
14
+ var ref = useRef(null);
15
+
16
+ var _useDrawRIO = useDrawRIO(ref, {
17
+ row: row,
18
+ rowItems: rowItems
19
+ }),
20
+ open = _useDrawRIO.open,
21
+ close = _useDrawRIO.close,
22
+ clear = _useDrawRIO.clear,
23
+ rio = _useDrawRIO.rio; // eslint-disable-next-line react-hooks/exhaustive-deps
24
+
25
+
26
+ useEffect(function () {
27
+ return isOpen ? open() : close();
28
+ }, [isOpen]);
29
+
30
+ _useUpdateEffect(function () {
31
+ return clear();
32
+ }, [renderKey]);
33
+
34
+ _useUpdateEffect(function () {
35
+ return onChange === null || onChange === void 0 ? void 0 : onChange(rio);
36
+ }, [rio]);
37
+
38
+ return /*#__PURE__*/React.createElement("div", {
39
+ className: "rio-layout"
40
+ }, children, debug && /*#__PURE__*/React.createElement("div", {
41
+ className: "rio-debug-box"
42
+ }, rio.map(function (item, index) {
43
+ return /*#__PURE__*/React.createElement("div", {
44
+ key: "row-".concat(index)
45
+ }, item.map(function (n, i) {
46
+ return /*#__PURE__*/React.createElement("span", {
47
+ key: "item-".concat(i),
48
+ style: {
49
+ backgroundColor: n === 1 ? 'rgba(0,0,0,0.5)' : 'transparent'
50
+ }
51
+ });
52
+ }));
53
+ })), /*#__PURE__*/React.createElement("canvas", {
54
+ ref: ref
55
+ }));
56
+ }
57
+
58
+ RIO.defaultProps = {
59
+ row: 18,
60
+ rowItems: 32
61
+ };
62
+ export default RIO;
@@ -0,0 +1 @@
1
+ export declare function drawMark(ctx: CanvasRenderingContext2D, x: number, y: number): void;
@@ -0,0 +1 @@
1
+ export function drawMark(ctx, x, y) {}
@@ -15,6 +15,8 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
15
15
 
16
16
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
17
17
 
18
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
+
18
20
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
21
 
20
22
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -140,35 +142,47 @@ function RecordPlayer(_a) {
140
142
  return;
141
143
  }
142
144
 
143
- var diffIndexs = differenceWithIndexs(listKey.split('-'), prevListKey.split('-')).filter(function (v) {
144
- return v.value !== FILTER_KEY;
145
- });
145
+ var diffIndexs = differenceWithIndexs(listKey.split('-'), prevListKey.split('-'));
146
146
 
147
147
  if (diffIndexs.length === 0) {
148
148
  return;
149
149
  }
150
150
 
151
- var i = diffIndexs[0].idx; // 变化索引
152
-
153
151
  setState(function (old) {
154
152
  var mergeList = old.mergeSegments;
155
- var times = old.currentTimes;
156
- var item = list[i];
157
-
158
- if (!item) {
159
- return old;
160
- }
161
-
162
- if (!mergeList[i]) {
163
- mergeList[i] = {};
153
+ var times = old.currentTimes; // 批量更新调整
154
+
155
+ var _iterator = _createForOfIteratorHelper(diffIndexs),
156
+ _step;
157
+
158
+ try {
159
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
160
+ var dif = _step.value;
161
+ var i = dif.idx;
162
+ var item = list[i];
163
+
164
+ if (!item) {
165
+ // 可能是外部的关闭动作关闭
166
+ mergeList[i] = undefined;
167
+ } else {
168
+ if (!mergeList[i]) {
169
+ mergeList[i] = {};
170
+ }
171
+
172
+ mergeList[i].date = item.date;
173
+ mergeList[i].segments = mergeList[i].cid !== item.cid ? [] : mergeList[i].segments;
174
+ mergeList[i].cid = item.cid;
175
+ mergeList[i].recordType = item.recordType; // 更新变化的currentTime
176
+
177
+ times[i] = list[i].date;
178
+ }
179
+ }
180
+ } catch (err) {
181
+ _iterator.e(err);
182
+ } finally {
183
+ _iterator.f();
164
184
  }
165
185
 
166
- mergeList[i].date = item.date;
167
- mergeList[i].segments = mergeList[i].cid !== item.cid ? [] : mergeList[i].segments;
168
- mergeList[i].cid = item.cid;
169
- mergeList[i].recordType = item.recordType; // 更新变化的currentTime
170
-
171
- times[i] = list[i].date;
172
186
  return Object.assign(Object.assign({}, old), {
173
187
  mergeSegments: _toConsumableArray(mergeList),
174
188
  currentTimes: _toConsumableArray(times)
@@ -432,7 +446,9 @@ function RecordPlayer(_a) {
432
446
  snapshot: snapshot,
433
447
  oneWinExtTools: oneWinExtTools,
434
448
  allWinExtTools: allWinExtTools
435
- }), /*#__PURE__*/React.createElement(SegmentTimeLine, {
449
+ })), /*#__PURE__*/React.createElement(DisableMark, {
450
+ disabled: !segmentItem.cid
451
+ }, /*#__PURE__*/React.createElement(SegmentTimeLine, {
436
452
  begin: timeBegin,
437
453
  updateState: updateState,
438
454
  segments: segmentItem.segments,
@@ -28,7 +28,7 @@ import RecordPlayer from './Record';
28
28
  import moment from 'moment';
29
29
  import Service from '../Service';
30
30
  import { completionSegments } from './utils';
31
- var token = "eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MzQwNTM5ODYzOCwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MzE0NjE5ODYzOH0.EPh_1eNPNFl-fmLODbHo0mu5R_1kKdt3UUu_0qfBGFY";
31
+ var token = "eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6IjEwMDEwMTAwMDQ0NSIsImV4dCI6MTY2MzkyNzM5NjQzMCwidWlkIjoiMTAxMDAwMDAwNjk5IiwidmFsaWRTdGF0ZSI6MTA0NDA2LCJyb2xlSWQiOlsxMDAwMDAxMTA1MTgsMTAwMDAwMTEwNzI4XSwidmFsaWRUaW1lIjoxNzA0MzgzOTk5MDAwLCJvcHRDZW50ZXJJZCI6IjEwMDEwMDAwMDIzMyIsInVzZXJUeXBlIjoxMDA3MDQsImlhdCI6MTY2MzY2ODE5NjQzMH0.bJbtN-QjTUGGSIJRfR1ycjhtGt6UCEsrS29CYN-AAfw";
32
32
  var cids = ['538509097', '539172446'];
33
33
 
34
34
  var query = function query(_ref) {
@@ -148,6 +148,22 @@ export default function App() {
148
148
  idx: idx
149
149
  });
150
150
  });
151
+ },
152
+ onClose: function onClose() {
153
+ var list = state.list;
154
+ list[state.idx] = undefined;
155
+ setState(function (old) {
156
+ return Object.assign(Object.assign({}, old), {
157
+ list: _toConsumableArray(list)
158
+ });
159
+ });
160
+ },
161
+ onCloseAll: function onCloseAll() {
162
+ return setState(function (old) {
163
+ return Object.assign(Object.assign({}, old), {
164
+ list: []
165
+ });
166
+ });
151
167
  }
152
168
  }))));
153
169
  }
@@ -13,7 +13,10 @@ export type RecordItem = {
13
13
  };
14
14
 
15
15
  export interface IRecordPlayerProps {
16
- list?: Omit<RecordItem, 'segments'>[];
16
+ /**
17
+ * 播放对象
18
+ */
19
+ list?: Omit<RecordItem, 'segments' | 'url'>[];
17
20
  children?: JSX.Element;
18
21
 
19
22
  /**
@@ -13,6 +13,8 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
13
13
 
14
14
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
15
15
 
16
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
17
+
16
18
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
19
 
18
20
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -51,14 +53,13 @@ export default function useRecordList(list, queryRecord) {
51
53
 
52
54
  _useAsyncEffect(function () {
53
55
  return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
54
- var diffIndexs, index, item, record, segments, type;
56
+ var diffIndexs, arr, _iterator, _step, dif, index, item, record, segments, _segments, _segments2, _segments3;
57
+
55
58
  return _regeneratorRuntime().wrap(function _callee$(_context) {
56
59
  while (1) {
57
60
  switch (_context.prev = _context.next) {
58
61
  case 0:
59
- diffIndexs = differenceWithIndexs(listKey ? listKey.split('-') : [], prevListKey ? prevListKey.split('-') : []).filter(function (v) {
60
- return v.value !== FILTER_KEY;
61
- });
62
+ diffIndexs = differenceWithIndexs(listKey ? listKey.split('-') : [], prevListKey ? prevListKey.split('-') : []);
62
63
 
63
64
  if (!(diffIndexs.length === 0)) {
64
65
  _context.next = 3;
@@ -68,137 +69,214 @@ export default function useRecordList(list, queryRecord) {
68
69
  return _context.abrupt("return");
69
70
 
70
71
  case 3:
71
- index = diffIndexs[0].idx; // 一次变化理论上只有一个
72
+ arr = []; // 存在披露更新的情况
73
+
74
+ _iterator = _createForOfIteratorHelper(diffIndexs);
75
+ _context.prev = 5;
76
+
77
+ _iterator.s();
78
+
79
+ case 7:
80
+ if ((_step = _iterator.n()).done) {
81
+ _context.next = 41;
82
+ break;
83
+ }
84
+
85
+ dif = _step.value;
86
+ index = dif.idx;
87
+ item = list[index]; // 当前外部传入的对象
72
88
 
73
- item = list[index];
74
- record = state.cidSegments[index];
89
+ record = state.cidSegments[index]; //当前转换的播放对象
75
90
 
91
+ if (item) {
92
+ _context.next = 16;
93
+ break;
94
+ }
95
+
96
+ // 这里可能原来是空,也可能是外部删除
97
+ arr.push({
98
+ idx: index,
99
+ type: 'delete',
100
+ segments: []
101
+ });
102
+ _context.next = 39;
103
+ break;
104
+
105
+ case 16:
76
106
  if (!(item.cid && item.date)) {
77
- _context.next = 30;
107
+ _context.next = 39;
78
108
  break;
79
109
  }
80
110
 
81
111
  if (record) {
82
- _context.next = 14;
112
+ _context.next = 24;
83
113
  break;
84
114
  }
85
115
 
86
- // 首次直接查询
87
- type = 'add';
88
- _context.next = 11;
116
+ _context.next = 20;
89
117
  return queryRecord({
90
118
  cid: item.cid,
91
119
  date: item.date,
92
120
  recordType: item.recordType
93
121
  });
94
122
 
95
- case 11:
123
+ case 20:
96
124
  segments = _context.sent;
97
- _context.next = 29;
125
+ arr.push({
126
+ idx: index,
127
+ type: 'add',
128
+ segments: segments
129
+ });
130
+ _context.next = 39;
98
131
  break;
99
132
 
100
- case 14:
133
+ case 24:
101
134
  if (!(record.cid !== item.cid || record.recordType !== item.recordType)) {
102
- _context.next = 21;
135
+ _context.next = 31;
103
136
  break;
104
137
  }
105
138
 
106
- // cid变化,录像类型变化重新请求
107
- type = 'add';
108
- _context.next = 18;
139
+ _context.next = 27;
109
140
  return queryRecord({
110
141
  cid: item.cid,
111
142
  date: item.date,
112
143
  recordType: item.recordType
113
144
  });
114
145
 
115
- case 18:
116
- segments = _context.sent;
117
- _context.next = 29;
146
+ case 27:
147
+ _segments = _context.sent;
148
+ arr.push({
149
+ idx: index,
150
+ type: 'add',
151
+ segments: _segments
152
+ });
153
+ _context.next = 39;
118
154
  break;
119
155
 
120
- case 21:
156
+ case 31:
121
157
  if (!(record.date !== item.date)) {
122
- _context.next = 28;
158
+ _context.next = 38;
123
159
  break;
124
160
  }
125
161
 
126
- // 上层日期变化更新,追加
127
- type = 'modify';
128
- _context.next = 25;
162
+ _context.next = 34;
129
163
  return queryRecord({
130
164
  cid: item.cid,
131
165
  date: item.date,
132
166
  recordType: item.recordType
133
167
  });
134
168
 
135
- case 25:
136
- segments = _context.sent;
137
- _context.next = 29;
169
+ case 34:
170
+ _segments2 = _context.sent;
171
+ arr.push({
172
+ idx: index,
173
+ type: 'modify',
174
+ segments: _segments2
175
+ });
176
+ _context.next = 39;
138
177
  break;
139
178
 
140
- case 28:
179
+ case 38:
141
180
  if (Array.isArray(item.segments) && item.segments.length > 0) {
142
181
  // 时间轴更新
143
- type = 'modify';
144
- segments = item.segments;
182
+ _segments3 = item.segments;
183
+ arr.push({
184
+ idx: index,
185
+ type: 'modify',
186
+ segments: _segments3
187
+ });
145
188
  } else {
146
189
  console.debug('无变化!跳过~');
147
190
  }
148
191
 
149
- case 29:
192
+ case 39:
193
+ _context.next = 7;
194
+ break;
195
+
196
+ case 41:
197
+ _context.next = 46;
198
+ break;
199
+
200
+ case 43:
201
+ _context.prev = 43;
202
+ _context.t0 = _context["catch"](5);
203
+
204
+ _iterator.e(_context.t0);
205
+
206
+ case 46:
207
+ _context.prev = 46;
208
+
209
+ _iterator.f();
210
+
211
+ return _context.finish(46);
212
+
213
+ case 49:
150
214
  setState(function (old) {
151
215
  var flag = false; //标记是否更新
152
216
 
153
217
  var cidSegments = state.cidSegments;
154
-
155
- switch (type) {
156
- case 'add':
157
- flag = true;
158
- var arr1 = item.segments ? [].concat(item.segments, segments) : segments;
159
- arr1 = arr1.map(function (v) {
160
- return Object.assign(Object.assign({}, v), {
161
- id: "".concat(v.beginTime, "-").concat(v.endTime)
162
- });
163
- });
164
- cidSegments[index] = Object.assign(Object.assign({}, item), {
165
- segments: orderBy(uniqBy(arr1, 'id'), 'beginTime', 'asc')
166
- });
167
- break;
168
-
169
- case 'modify':
170
- flag = true;
171
- cidSegments[index].date = item.date;
172
- cidSegments[index].recordType = item.recordType;
173
- var dif = differenceBy(cidSegments[index].segments, segments, 'beginTime');
174
-
175
- if (dif.length === 0) {
176
- flag = false;
177
- } else {
178
- var arr2 = [].concat(cidSegments[index].segments, segments);
179
- arr2 = arr2.map(function (v) {
218
+ arr.forEach(function (_ref) {
219
+ var type = _ref.type,
220
+ segments = _ref.segments,
221
+ idx = _ref.idx;
222
+ var index = idx;
223
+ var item = list[index];
224
+
225
+ switch (type) {
226
+ case 'add':
227
+ // 这里重置播放对象
228
+ flag = true;
229
+ var arr1 = item.segments ? [].concat(item.segments, segments) : segments;
230
+ arr1 = arr1.map(function (v) {
180
231
  return Object.assign(Object.assign({}, v), {
181
232
  id: "".concat(v.beginTime, "-").concat(v.endTime)
182
233
  });
183
234
  });
184
- arr2 = uniqBy(arr2, 'id');
185
- cidSegments[index].segments = orderBy(arr2, 'beginTime', 'asc');
186
- }
187
-
188
- break;
189
- }
235
+ cidSegments[index] = Object.assign(Object.assign({}, item), {
236
+ segments: orderBy(uniqBy(arr1, 'id'), 'beginTime', 'asc')
237
+ });
238
+ break;
239
+
240
+ case 'delete':
241
+ // 这里一是保持无播放对象,二是删除当前播放对象
242
+ flag = true;
243
+ cidSegments[index] = undefined;
244
+ break;
245
+
246
+ case 'modify':
247
+ // 这里属于相同的播放对象,需要追加播放片断
248
+ flag = true;
249
+ cidSegments[index].date = item.date;
250
+ cidSegments[index].recordType = item.recordType;
251
+ var dif = differenceBy(cidSegments[index].segments, segments, 'beginTime');
252
+
253
+ if (dif.length === 0) {
254
+ flag = false;
255
+ } else {
256
+ var arr2 = [].concat(cidSegments[index].segments, segments);
257
+ arr2 = arr2.map(function (v) {
258
+ return Object.assign(Object.assign({}, v), {
259
+ id: "".concat(v.beginTime, "-").concat(v.endTime)
260
+ });
261
+ });
262
+ arr2 = uniqBy(arr2, 'id');
263
+ cidSegments[index].segments = orderBy(arr2, 'beginTime', 'asc');
264
+ }
190
265
 
266
+ break;
267
+ }
268
+ });
191
269
  return Object.assign(Object.assign({}, old), {
192
270
  cidSegments: flag ? _toConsumableArray(cidSegments) : cidSegments
193
271
  });
194
272
  });
195
273
 
196
- case 30:
274
+ case 50:
197
275
  case "end":
198
276
  return _context.stop();
199
277
  }
200
278
  }
201
- }, _callee);
279
+ }, _callee, null, [[5, 43, 46, 49]]);
202
280
  }));
203
281
  }, [list, listKey, prevListKey]);
204
282
 
@@ -285,22 +285,7 @@ function useTimeSlider(canvasRef, _ref2) {
285
285
 
286
286
 
287
287
  var get_cursor_x_position = function get_cursor_x_position(e) {
288
- var posx = 0;
289
-
290
- var _canvas$getBoundingCl = canvas.getBoundingClientRect(),
291
- left = _canvas$getBoundingCl.left;
292
-
293
- if (!e) {
294
- e = window.event;
295
- }
296
-
297
- if (e.pageX || e.pageY) {
298
- posx = e.pageX - left;
299
- } else if (e.clientX || e.clientY) {
300
- posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
301
- }
302
-
303
- return posx;
288
+ return e.offsetX;
304
289
  };
305
290
  /**
306
291
  * 更新画布大小
package/es/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export { default as Picture } from './Picture';
29
29
  export { default as Player } from './Player';
30
30
  export { default as PlayerExt } from './PlayerExt';
31
31
  export { default as Progress } from './Progress';
32
+ export { default as RIO } from './RIO';
32
33
  export { default as ScreenPlayer } from './ScreenPlayer';
33
34
  export { default as SegmentPlayer } from './SegmentPlayer';
34
35
  export { default as Service } from './Service';
@@ -36,6 +37,7 @@ export { default as TableLayout } from './TableLayout';
36
37
  export { default as ThemeAntd } from './ThemeAntd';
37
38
  export { default as Timeout } from './Timeout';
38
39
  export { default as Tree } from './Tree';
40
+ export { default as useDrawRIO } from './useDrawRIO';
39
41
  export { default as useFullscreen } from './useFullscreen';
40
42
  export { default as useHistory } from './useHistory';
41
43
  export { default as useInfiniteScroll } from './useInfiniteScroll';
package/es/index.js CHANGED
@@ -29,6 +29,7 @@ export { default as Picture } from './Picture';
29
29
  export { default as Player } from './Player';
30
30
  export { default as PlayerExt } from './PlayerExt';
31
31
  export { default as Progress } from './Progress';
32
+ export { default as RIO } from './RIO';
32
33
  export { default as ScreenPlayer } from './ScreenPlayer';
33
34
  export { default as SegmentPlayer } from './SegmentPlayer';
34
35
  export { default as Service } from './Service';
@@ -36,6 +37,7 @@ export { default as TableLayout } from './TableLayout';
36
37
  export { default as ThemeAntd } from './ThemeAntd';
37
38
  export { default as Timeout } from './Timeout';
38
39
  export { default as Tree } from './Tree';
40
+ export { default as useDrawRIO } from './useDrawRIO';
39
41
  export { default as useFullscreen } from './useFullscreen';
40
42
  export { default as useHistory } from './useHistory';
41
43
  export { default as useInfiniteScroll } from './useInfiniteScroll';
@@ -0,0 +1,13 @@
1
+ import { BasicTarget } from 'ahooks/lib/utils/domTarget';
2
+ interface RIOOptions {
3
+ row: number;
4
+ rowItems: number;
5
+ }
6
+ declare function useDrawRIO(target: BasicTarget<HTMLCanvasElement>, { row, rowItems }: RIOOptions): {
7
+ open: () => void;
8
+ close: () => void;
9
+ clear: () => void;
10
+ rio: number[][];
11
+ status: string;
12
+ };
13
+ export default useDrawRIO;
@@ -0,0 +1,312 @@
1
+ import _useEventListener from "ahooks/es/useEventListener";
2
+ import _useMount from "ahooks/es/useMount";
3
+ import _useLatest from "ahooks/es/useLatest";
4
+
5
+ function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
6
+
7
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+
9
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+
11
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
12
+
13
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
14
+
15
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
16
+
17
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
+
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
+
21
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
+
23
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
24
+
25
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
26
+
27
+ import { getTargetElement } from 'ahooks/lib/utils/domTarget';
28
+ import { useEffect, useMemo, useState } from 'react';
29
+ import { lineString } from '@turf/helpers';
30
+ import lineToPolygon from '@turf/line-to-polygon';
31
+ import booleanDisjoint from '@turf/boolean-disjoint';
32
+
33
+ function useDrawRIO(target, _ref) {
34
+ var row = _ref.row,
35
+ rowItems = _ref.rowItems;
36
+
37
+ var _useState = useState({
38
+ pos: [],
39
+ tempPos: [],
40
+ saveArea: [],
41
+ isOpen: false
42
+ }),
43
+ _useState2 = _slicedToArray(_useState, 2),
44
+ state = _useState2[0],
45
+ setState = _useState2[1];
46
+
47
+ var isOpenRef = _useLatest(state.isOpen);
48
+
49
+ _useMount(function () {
50
+ var canvas = getTargetElement(target);
51
+
52
+ var _canvas$getBoundingCl = canvas.getBoundingClientRect(),
53
+ width = _canvas$getBoundingCl.width,
54
+ height = _canvas$getBoundingCl.height;
55
+
56
+ canvas.width = width;
57
+ canvas.height = height;
58
+ });
59
+
60
+ _useEventListener('click', function (event) {
61
+ if (!isOpenRef.current) {
62
+ return;
63
+ }
64
+
65
+ var p_x = event.offsetX;
66
+ var p_y = event.offsetY;
67
+ setState(function (old) {
68
+ var pos = old.pos; // 去掉重复点位,dbclick导致重复触发
69
+
70
+ if (!pos.find(function (_ref2) {
71
+ var _ref3 = _slicedToArray(_ref2, 2),
72
+ x = _ref3[0],
73
+ y = _ref3[1];
74
+
75
+ return x === p_x && y === p_y;
76
+ })) {
77
+ pos = [].concat(_toConsumableArray(pos), [[p_x, p_y]]);
78
+ }
79
+
80
+ return Object.assign(Object.assign({}, old), {
81
+ pos: pos
82
+ });
83
+ });
84
+ }, {
85
+ target: target
86
+ });
87
+
88
+ _useEventListener('dblclick', function (event) {
89
+ var p_x = event.offsetX;
90
+ var p_y = event.offsetY;
91
+ setState(function (old) {
92
+ var saveArea = old.saveArea;
93
+ var pos = old.pos;
94
+ var tempPos = old.tempPos;
95
+
96
+ if (pos.length > 2) {
97
+ // 去掉重复点位
98
+ if (!pos.find(function (_ref4) {
99
+ var _ref5 = _slicedToArray(_ref4, 2),
100
+ x = _ref5[0],
101
+ y = _ref5[1];
102
+
103
+ return x === p_x && y === p_y;
104
+ })) {
105
+ pos = [].concat(_toConsumableArray(pos), [[p_x, p_y]]);
106
+ }
107
+
108
+ saveArea = [].concat(_toConsumableArray(saveArea), [pos]);
109
+ pos = [];
110
+ tempPos = [];
111
+ }
112
+
113
+ return Object.assign(Object.assign({}, old), {
114
+ pos: pos,
115
+ saveArea: saveArea,
116
+ tempPos: tempPos
117
+ });
118
+ });
119
+ }, {
120
+ target: target
121
+ });
122
+
123
+ _useEventListener('mousemove', function (event) {
124
+ if (!isOpenRef.current || state.pos.length === 0) {
125
+ return;
126
+ }
127
+
128
+ var p_x = event.offsetX;
129
+ var p_y = event.offsetY;
130
+ setState(function (old) {
131
+ return Object.assign(Object.assign({}, old), {
132
+ tempPos: [p_x, p_y]
133
+ });
134
+ });
135
+ }, {
136
+ target: target
137
+ });
138
+
139
+ var clearCanvas = function clearCanvas() {
140
+ var canvas = getTargetElement(target);
141
+ var ctx = canvas.getContext('2d'); // 重置画布
142
+
143
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
144
+ };
145
+
146
+ var drawSavaArea = function drawSavaArea(area) {
147
+ var canvas = getTargetElement(target);
148
+ var ctx = canvas.getContext('2d'); // 绘制已完成的图形
149
+
150
+ area.forEach(function (item) {
151
+ // 绘制坐标线
152
+ var _item = _toArray(item),
153
+ startPos = _item[0],
154
+ pos = _item.slice(1);
155
+
156
+ ctx.beginPath();
157
+ ctx.moveTo.apply(ctx, _toConsumableArray(startPos));
158
+ pos.forEach(function (_ref6) {
159
+ var _ref7 = _slicedToArray(_ref6, 2),
160
+ x = _ref7[0],
161
+ y = _ref7[1];
162
+
163
+ return ctx.lineTo(x, y);
164
+ });
165
+ ctx.lineTo.apply(ctx, _toConsumableArray(startPos));
166
+ ctx.strokeStyle = '#f32d37';
167
+ ctx.lineWidth = 2;
168
+ ctx.fillStyle = 'rgba(243,45,55,0.5)';
169
+ ctx.fill();
170
+ ctx.stroke();
171
+ });
172
+ };
173
+
174
+ var canvasRendering = function canvasRendering(points, tempPos) {
175
+ if (points.length === 0) {
176
+ return;
177
+ }
178
+
179
+ var canvas = getTargetElement(target);
180
+ var ctx = canvas.getContext('2d'); // 绘制坐标点
181
+
182
+ points.forEach(function (_ref8) {
183
+ var _ref9 = _slicedToArray(_ref8, 2),
184
+ x = _ref9[0],
185
+ y = _ref9[1];
186
+
187
+ ctx.beginPath();
188
+ ctx.arc(x, y, 4, 0, 2 * Math.PI);
189
+ ctx.fillStyle = 'red';
190
+ ctx.fill();
191
+ }); // 绘制坐标线
192
+
193
+ var _points = _toArray(points),
194
+ startPos = _points[0],
195
+ pos = _points.slice(1);
196
+
197
+ ctx.beginPath();
198
+ ctx.moveTo.apply(ctx, _toConsumableArray(startPos));
199
+ pos.forEach(function (_ref10) {
200
+ var _ref11 = _slicedToArray(_ref10, 2),
201
+ x = _ref11[0],
202
+ y = _ref11[1];
203
+
204
+ return ctx.lineTo(x, y);
205
+ });
206
+
207
+ var _tempPos = _slicedToArray(tempPos, 2),
208
+ x = _tempPos[0],
209
+ y = _tempPos[1];
210
+
211
+ if (typeof x === 'number' && typeof y === 'number') {
212
+ ctx.lineTo(x, y);
213
+ }
214
+
215
+ ctx.lineTo.apply(ctx, _toConsumableArray(startPos));
216
+ ctx.strokeStyle = '#f32d37';
217
+ ctx.lineWidth = 2;
218
+ ctx.fillStyle = 'rgba(243,45,55,0.5)';
219
+ ctx.fill();
220
+ ctx.stroke();
221
+ }; //绘制hook
222
+
223
+
224
+ useEffect(function () {
225
+ clearCanvas();
226
+ drawSavaArea(state.saveArea);
227
+ canvasRendering(state.pos, state.tempPos); // eslint-disable-next-line react-hooks/exhaustive-deps
228
+ }, [state.pos, state.saveArea, state.tempPos]);
229
+ var status = useMemo(function () {
230
+ return state.isOpen ? 'open' : 'close';
231
+ }, [state.isOpen]);
232
+
233
+ var open = function open() {
234
+ return setState(function (old) {
235
+ return Object.assign(Object.assign({}, old), {
236
+ isOpen: true
237
+ });
238
+ });
239
+ };
240
+
241
+ var close = function close() {
242
+ return setState(function (old) {
243
+ return Object.assign(Object.assign({}, old), {
244
+ isOpen: false
245
+ });
246
+ });
247
+ };
248
+
249
+ var clear = function clear() {
250
+ return setState(function (old) {
251
+ return Object.assign(Object.assign({}, old), {
252
+ pos: [],
253
+ saveArea: [],
254
+ tempPos: []
255
+ });
256
+ });
257
+ };
258
+
259
+ var rio = useMemo(function () {
260
+ var rioArr = [];
261
+ var canvas = getTargetElement(target);
262
+
263
+ if (!canvas) {
264
+ rioArr = new Array(row).fill(new Array(rowItems).fill(0));
265
+ return rioArr;
266
+ }
267
+
268
+ var _canvas$getBoundingCl2 = canvas.getBoundingClientRect(),
269
+ width = _canvas$getBoundingCl2.width,
270
+ height = _canvas$getBoundingCl2.height;
271
+
272
+ var itemWidth = width / rowItems;
273
+ var itemHeight = height / row; // 转换当前绘制完成的区域为多边形
274
+
275
+ var areas = state.saveArea.map(function (item) {
276
+ return lineToPolygon(lineString(item));
277
+ });
278
+
279
+ for (var i = 0; i < row; i++) {
280
+ var arr = [];
281
+
282
+ var _loop = function _loop(k) {
283
+ // x表示当地的纬度,y表示当地的经度
284
+ var lines = lineString([[k * itemWidth, i * itemHeight], [(k + 1) * itemWidth, i * itemHeight], [(k + 1) * itemWidth, (i + 1) * itemHeight], [k * itemWidth, (i + 1) * itemHeight], [k * itemWidth, i * itemHeight]]); // 转换每格为多边形
285
+
286
+ var rect = lineToPolygon(lines); //标记当前rect 是否与绘制的图形相交
287
+
288
+ var flag = areas.findIndex(function (area) {
289
+ return !booleanDisjoint(rect, area);
290
+ }) > -1;
291
+ arr.push(flag ? 1 : 0);
292
+ };
293
+
294
+ for (var k = 0; k < rowItems; k++) {
295
+ _loop(k);
296
+ }
297
+
298
+ rioArr.push(arr);
299
+ }
300
+
301
+ return rioArr;
302
+ }, [row, rowItems, state.saveArea, target]);
303
+ return {
304
+ open: open,
305
+ close: close,
306
+ clear: clear,
307
+ rio: rio,
308
+ status: status
309
+ };
310
+ }
311
+
312
+ export default useDrawRIO;
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.21",
5
+ "version": "3.0.23",
6
6
  "scripts": {
7
7
  "start": "dumi dev",
8
8
  "docs:build": "dumi build",
@@ -31,6 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@cloud-app-dev/flv.js": "^1.0.3",
34
+ "@turf/boolean-disjoint": "^6.5.0",
35
+ "@turf/helpers": "^6.5.0",
36
+ "@turf/line-to-polygon": "^6.5.0",
34
37
  "ahooks": "^3.7.0",
35
38
  "axios": "^0.27.2",
36
39
  "hls.js": "^1.2.1",