@cloud-app-dev/vidc 3.0.22 → 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/es/RIO/demo.js CHANGED
@@ -9,7 +9,9 @@ var App = function App() {
9
9
  background: '#999'
10
10
  }
11
11
  }, /*#__PURE__*/React.createElement(RIO, {
12
- debug: true
12
+ debug: true,
13
+ isOpen: true,
14
+ onChange: console.log
13
15
  }));
14
16
  };
15
17
 
package/es/RIO/index.d.ts CHANGED
@@ -2,7 +2,38 @@ import React from 'react';
2
2
  import './index.less';
3
3
  interface IRIOProps {
4
4
  children?: React.ReactNode;
5
+ /**
6
+ * 调试模式,开启回绘制具体网格
7
+ */
5
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
+ };
6
38
  }
7
- declare function RIO({ children, debug }: IRIOProps): JSX.Element;
8
39
  export default RIO;
package/es/RIO/index.js CHANGED
@@ -1,29 +1,40 @@
1
- import _useMount from "ahooks/es/useMount";
1
+ import _useUpdateEffect from "ahooks/es/useUpdateEffect";
2
2
  import React, { useEffect, useRef } from 'react';
3
3
  import useDrawRIO from '../useDrawRIO';
4
4
  import "./index.css";
5
- var ROW = 18;
6
- var ROW_ITEMS = 32;
7
5
 
8
6
  function RIO(_ref) {
9
7
  var children = _ref.children,
10
- debug = _ref.debug;
8
+ debug = _ref.debug,
9
+ renderKey = _ref.renderKey,
10
+ onChange = _ref.onChange,
11
+ isOpen = _ref.isOpen,
12
+ row = _ref.row,
13
+ rowItems = _ref.rowItems;
11
14
  var ref = useRef(null);
12
15
 
13
16
  var _useDrawRIO = useDrawRIO(ref, {
14
- row: ROW,
15
- rowItems: ROW_ITEMS
17
+ row: row,
18
+ rowItems: rowItems
16
19
  }),
17
20
  open = _useDrawRIO.open,
18
- rio = _useDrawRIO.rio;
21
+ close = _useDrawRIO.close,
22
+ clear = _useDrawRIO.clear,
23
+ rio = _useDrawRIO.rio; // eslint-disable-next-line react-hooks/exhaustive-deps
19
24
 
20
- _useMount(function () {
21
- return open();
22
- });
23
25
 
24
26
  useEffect(function () {
25
- console.log(rio);
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);
26
36
  }, [rio]);
37
+
27
38
  return /*#__PURE__*/React.createElement("div", {
28
39
  className: "rio-layout"
29
40
  }, children, debug && /*#__PURE__*/React.createElement("div", {
@@ -44,4 +55,8 @@ function RIO(_ref) {
44
55
  }));
45
56
  }
46
57
 
58
+ RIO.defaultProps = {
59
+ row: 18,
60
+ rowItems: 32
61
+ };
47
62
  export default RIO;
@@ -164,9 +164,7 @@ function RecordPlayer(_a) {
164
164
  if (!item) {
165
165
  // 可能是外部的关闭动作关闭
166
166
  mergeList[i] = undefined;
167
- }
168
-
169
- if (item) {
167
+ } else {
170
168
  if (!mergeList[i]) {
171
169
  mergeList[i] = {};
172
170
  }
@@ -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
  /**
@@ -78,97 +78,105 @@ export default function useRecordList(list, queryRecord) {
78
78
 
79
79
  case 7:
80
80
  if ((_step = _iterator.n()).done) {
81
- _context.next = 38;
81
+ _context.next = 41;
82
82
  break;
83
83
  }
84
84
 
85
85
  dif = _step.value;
86
86
  index = dif.idx;
87
- item = list[index];
88
- record = state.cidSegments[index];
87
+ item = list[index]; // 当前外部传入的对象
89
88
 
90
- if (!item) {
91
- arr.push({
92
- idx: index,
93
- type: 'delete',
94
- segments: []
95
- });
89
+ record = state.cidSegments[index]; //当前转换的播放对象
90
+
91
+ if (item) {
92
+ _context.next = 16;
93
+ break;
96
94
  }
97
95
 
98
- if (!(item && item.cid && item.date)) {
99
- _context.next = 36;
96
+ // 这里可能原来是空,也可能是外部删除
97
+ arr.push({
98
+ idx: index,
99
+ type: 'delete',
100
+ segments: []
101
+ });
102
+ _context.next = 39;
103
+ break;
104
+
105
+ case 16:
106
+ if (!(item.cid && item.date)) {
107
+ _context.next = 39;
100
108
  break;
101
109
  }
102
110
 
103
111
  if (record) {
104
- _context.next = 21;
112
+ _context.next = 24;
105
113
  break;
106
114
  }
107
115
 
108
- _context.next = 17;
116
+ _context.next = 20;
109
117
  return queryRecord({
110
118
  cid: item.cid,
111
119
  date: item.date,
112
120
  recordType: item.recordType
113
121
  });
114
122
 
115
- case 17:
123
+ case 20:
116
124
  segments = _context.sent;
117
125
  arr.push({
118
126
  idx: index,
119
127
  type: 'add',
120
128
  segments: segments
121
129
  });
122
- _context.next = 36;
130
+ _context.next = 39;
123
131
  break;
124
132
 
125
- case 21:
133
+ case 24:
126
134
  if (!(record.cid !== item.cid || record.recordType !== item.recordType)) {
127
- _context.next = 28;
135
+ _context.next = 31;
128
136
  break;
129
137
  }
130
138
 
131
- _context.next = 24;
139
+ _context.next = 27;
132
140
  return queryRecord({
133
141
  cid: item.cid,
134
142
  date: item.date,
135
143
  recordType: item.recordType
136
144
  });
137
145
 
138
- case 24:
146
+ case 27:
139
147
  _segments = _context.sent;
140
148
  arr.push({
141
149
  idx: index,
142
150
  type: 'add',
143
151
  segments: _segments
144
152
  });
145
- _context.next = 36;
153
+ _context.next = 39;
146
154
  break;
147
155
 
148
- case 28:
156
+ case 31:
149
157
  if (!(record.date !== item.date)) {
150
- _context.next = 35;
158
+ _context.next = 38;
151
159
  break;
152
160
  }
153
161
 
154
- _context.next = 31;
162
+ _context.next = 34;
155
163
  return queryRecord({
156
164
  cid: item.cid,
157
165
  date: item.date,
158
166
  recordType: item.recordType
159
167
  });
160
168
 
161
- case 31:
169
+ case 34:
162
170
  _segments2 = _context.sent;
163
171
  arr.push({
164
172
  idx: index,
165
173
  type: 'modify',
166
174
  segments: _segments2
167
175
  });
168
- _context.next = 36;
176
+ _context.next = 39;
169
177
  break;
170
178
 
171
- case 35:
179
+ case 38:
172
180
  if (Array.isArray(item.segments) && item.segments.length > 0) {
173
181
  // 时间轴更新
174
182
  _segments3 = item.segments;
@@ -181,28 +189,28 @@ export default function useRecordList(list, queryRecord) {
181
189
  console.debug('无变化!跳过~');
182
190
  }
183
191
 
184
- case 36:
192
+ case 39:
185
193
  _context.next = 7;
186
194
  break;
187
195
 
188
- case 38:
189
- _context.next = 43;
196
+ case 41:
197
+ _context.next = 46;
190
198
  break;
191
199
 
192
- case 40:
193
- _context.prev = 40;
200
+ case 43:
201
+ _context.prev = 43;
194
202
  _context.t0 = _context["catch"](5);
195
203
 
196
204
  _iterator.e(_context.t0);
197
205
 
198
- case 43:
199
- _context.prev = 43;
206
+ case 46:
207
+ _context.prev = 46;
200
208
 
201
209
  _iterator.f();
202
210
 
203
- return _context.finish(43);
211
+ return _context.finish(46);
204
212
 
205
- case 46:
213
+ case 49:
206
214
  setState(function (old) {
207
215
  var flag = false; //标记是否更新
208
216
 
@@ -216,6 +224,7 @@ export default function useRecordList(list, queryRecord) {
216
224
 
217
225
  switch (type) {
218
226
  case 'add':
227
+ // 这里重置播放对象
219
228
  flag = true;
220
229
  var arr1 = item.segments ? [].concat(item.segments, segments) : segments;
221
230
  arr1 = arr1.map(function (v) {
@@ -229,11 +238,13 @@ export default function useRecordList(list, queryRecord) {
229
238
  break;
230
239
 
231
240
  case 'delete':
241
+ // 这里一是保持无播放对象,二是删除当前播放对象
232
242
  flag = true;
233
243
  cidSegments[index] = undefined;
234
244
  break;
235
245
 
236
246
  case 'modify':
247
+ // 这里属于相同的播放对象,需要追加播放片断
237
248
  flag = true;
238
249
  cidSegments[index].date = item.date;
239
250
  cidSegments[index].recordType = item.recordType;
@@ -260,12 +271,12 @@ export default function useRecordList(list, queryRecord) {
260
271
  });
261
272
  });
262
273
 
263
- case 47:
274
+ case 50:
264
275
  case "end":
265
276
  return _context.stop();
266
277
  }
267
278
  }
268
- }, _callee, null, [[5, 40, 43, 46]]);
279
+ }, _callee, null, [[5, 43, 46, 49]]);
269
280
  }));
270
281
  }, [list, listKey, prevListKey]);
271
282
 
@@ -6,6 +6,7 @@ interface RIOOptions {
6
6
  declare function useDrawRIO(target: BasicTarget<HTMLCanvasElement>, { row, rowItems }: RIOOptions): {
7
7
  open: () => void;
8
8
  close: () => void;
9
+ clear: () => void;
9
10
  rio: number[][];
10
11
  status: string;
11
12
  };
@@ -136,13 +136,18 @@ function useDrawRIO(target, _ref) {
136
136
  target: target
137
137
  });
138
138
 
139
- useEffect(function () {
139
+ var clearCanvas = function clearCanvas() {
140
140
  var canvas = getTargetElement(target);
141
141
  var ctx = canvas.getContext('2d'); // 重置画布
142
142
 
143
- ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制已完成的图形
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'); // 绘制已完成的图形
144
149
 
145
- state.saveArea.forEach(function (item) {
150
+ area.forEach(function (item) {
146
151
  // 绘制坐标线
147
152
  var _item = _toArray(item),
148
153
  startPos = _item[0],
@@ -164,13 +169,17 @@ function useDrawRIO(target, _ref) {
164
169
  ctx.fill();
165
170
  ctx.stroke();
166
171
  });
172
+ };
167
173
 
168
- if (state.pos.length === 0) {
169
- return undefined;
170
- } // 绘制坐标点
174
+ var canvasRendering = function canvasRendering(points, tempPos) {
175
+ if (points.length === 0) {
176
+ return;
177
+ }
171
178
 
179
+ var canvas = getTargetElement(target);
180
+ var ctx = canvas.getContext('2d'); // 绘制坐标点
172
181
 
173
- state.pos.forEach(function (_ref8) {
182
+ points.forEach(function (_ref8) {
174
183
  var _ref9 = _slicedToArray(_ref8, 2),
175
184
  x = _ref9[0],
176
185
  y = _ref9[1];
@@ -181,9 +190,9 @@ function useDrawRIO(target, _ref) {
181
190
  ctx.fill();
182
191
  }); // 绘制坐标线
183
192
 
184
- var _state$pos = _toArray(state.pos),
185
- startPos = _state$pos[0],
186
- pos = _state$pos.slice(1);
193
+ var _points = _toArray(points),
194
+ startPos = _points[0],
195
+ pos = _points.slice(1);
187
196
 
188
197
  ctx.beginPath();
189
198
  ctx.moveTo.apply(ctx, _toConsumableArray(startPos));
@@ -195,9 +204,9 @@ function useDrawRIO(target, _ref) {
195
204
  return ctx.lineTo(x, y);
196
205
  });
197
206
 
198
- var _state$tempPos = _slicedToArray(state.tempPos, 2),
199
- x = _state$tempPos[0],
200
- y = _state$tempPos[1];
207
+ var _tempPos = _slicedToArray(tempPos, 2),
208
+ x = _tempPos[0],
209
+ y = _tempPos[1];
201
210
 
202
211
  if (typeof x === 'number' && typeof y === 'number') {
203
212
  ctx.lineTo(x, y);
@@ -209,7 +218,14 @@ function useDrawRIO(target, _ref) {
209
218
  ctx.fillStyle = 'rgba(243,45,55,0.5)';
210
219
  ctx.fill();
211
220
  ctx.stroke();
212
- }, [state.pos, state.saveArea, state.tempPos, target]);
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]);
213
229
  var status = useMemo(function () {
214
230
  return state.isOpen ? 'open' : 'close';
215
231
  }, [state.isOpen]);
@@ -230,11 +246,23 @@ function useDrawRIO(target, _ref) {
230
246
  });
231
247
  };
232
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
+
233
259
  var rio = useMemo(function () {
260
+ var rioArr = [];
234
261
  var canvas = getTargetElement(target);
235
262
 
236
263
  if (!canvas) {
237
- return new Array(row).fill(new Array(rowItems).fill(0));
264
+ rioArr = new Array(row).fill(new Array(rowItems).fill(0));
265
+ return rioArr;
238
266
  }
239
267
 
240
268
  var _canvas$getBoundingCl2 = canvas.getBoundingClientRect(),
@@ -242,38 +270,40 @@ function useDrawRIO(target, _ref) {
242
270
  height = _canvas$getBoundingCl2.height;
243
271
 
244
272
  var itemWidth = width / rowItems;
245
- var itemHeight = height / row;
246
- var rio = [];
273
+ var itemHeight = height / row; // 转换当前绘制完成的区域为多边形
274
+
275
+ var areas = state.saveArea.map(function (item) {
276
+ return lineToPolygon(lineString(item));
277
+ });
247
278
 
248
279
  for (var i = 0; i < row; i++) {
249
280
  var arr = [];
250
281
 
251
- for (var k = 0; k < rowItems; k++) {
252
- var flag = false; // x表示当地的纬度,y表示当地的经度
253
-
254
- var rect = lineToPolygon(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]]));
255
-
256
- for (var j = 0; j < state.saveArea.length; j++) {
257
- var item = state.saveArea[j];
258
- var area = lineToPolygon(lineString(item));
259
- flag = !booleanDisjoint(rect, area);
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]]); // 转换每格为多边形
260
285
 
261
- if (flag === true) {
262
- break;
263
- }
264
- }
286
+ var rect = lineToPolygon(lines); //标记当前rect 是否与绘制的图形相交
265
287
 
288
+ var flag = areas.findIndex(function (area) {
289
+ return !booleanDisjoint(rect, area);
290
+ }) > -1;
266
291
  arr.push(flag ? 1 : 0);
292
+ };
293
+
294
+ for (var k = 0; k < rowItems; k++) {
295
+ _loop(k);
267
296
  }
268
297
 
269
- rio.push(arr);
298
+ rioArr.push(arr);
270
299
  }
271
300
 
272
- return rio;
301
+ return rioArr;
273
302
  }, [row, rowItems, state.saveArea, target]);
274
303
  return {
275
304
  open: open,
276
305
  close: close,
306
+ clear: clear,
277
307
  rio: rio,
278
308
  status: status
279
309
  };
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.22",
5
+ "version": "3.0.23",
6
6
  "scripts": {
7
7
  "start": "dumi dev",
8
8
  "docs:build": "dumi build",