@mint-ui/map 0.10.0-beta → 0.10.0-beta-test2

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.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var tslib = require('tslib');
6
6
  var React = require('react');
7
7
  var MintMapProvider = require('../../provider/MintMapProvider.js');
8
+ require('../../provider/MarkerAutoTransitionProvider.js');
8
9
  var MapDrawables = require('../../../types/MapDrawables.js');
9
10
  require('../../../types/MapTypes.js');
10
11
  require('../../../types/MapEventTypes.js');
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { Position } from "../../types";
3
+ export declare type TransitionType = 'diagonal';
4
+ export declare type TransitionSizeFunction = (zoomLevel: number) => number;
5
+ export interface MarkerAutoTransitionOption {
6
+ type?: TransitionType;
7
+ sizeInMeter?: number | TransitionSizeFunction;
8
+ }
9
+ export interface MarkerAutoTransitionContextType {
10
+ option: Required<MarkerAutoTransitionOption>;
11
+ transition: (pos: Position) => {
12
+ pos: Position;
13
+ no?: number;
14
+ };
15
+ }
16
+ export declare const MarkerAutoTransitionContext: React.Context<MarkerAutoTransitionContextType>;
17
+ export declare const baseCenter: Position;
18
+ export interface MarkerAutoTransitionProviderProps extends MarkerAutoTransitionOption {
19
+ }
20
+ export declare function MarkerAutoTransitionProvider({ children, sizeInMeter, type, }: React.PropsWithChildren<MarkerAutoTransitionProviderProps>): JSX.Element;
@@ -0,0 +1,105 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ require('../../types/MapDrawables.js');
7
+ var MapTypes = require('../../types/MapTypes.js');
8
+ require('../../types/MapEventTypes.js');
9
+ require('../util/animation.js');
10
+ var geo = require('../util/geo.js');
11
+ require('tslib');
12
+ require('../util/polygon.js');
13
+ require('../util/status.js');
14
+ var MintMapProvider = require('./MintMapProvider.js');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
+
18
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
19
+
20
+ var MarkerAutoTransitionContext = React.createContext({
21
+ option: {
22
+ sizeInMeter: 2,
23
+ type: 'diagonal'
24
+ },
25
+ transition: function (pos) {
26
+ return {
27
+ pos: pos,
28
+ no: undefined
29
+ };
30
+ }
31
+ }); // provider
32
+
33
+ var baseCenter = new MapTypes.Position(37.504497373023206, 127.04896282498558);
34
+ function MarkerAutoTransitionProvider(_a) {
35
+ var children = _a.children,
36
+ _b = _a.sizeInMeter,
37
+ sizeInMeter = _b === void 0 ? 2 : _b,
38
+ _c = _a.type,
39
+ type = _c === void 0 ? 'diagonal' : _c;
40
+ var controller = MintMapProvider.useMintMapController();
41
+
42
+ var _d = React.useState(controller.getZoomLevel()),
43
+ zoom = _d[0],
44
+ setZoom = _d[1];
45
+
46
+ React.useEffect(function () {
47
+ var onZoomChanged = function () {
48
+ setZoom(controller.getZoomLevel());
49
+ };
50
+
51
+ controller.addEventListener('ZOOM_CHANGED', onZoomChanged);
52
+ return function () {
53
+ controller.removeEventListener('ZOOM_CHANGED', onZoomChanged);
54
+ };
55
+ }, []);
56
+ var calcSize = typeof sizeInMeter === 'number' ? sizeInMeter : sizeInMeter(controller.getZoomLevel());
57
+ var deltaLat = geo.GeoCalulator.convertMeterToLatitudeValue(calcSize);
58
+ var offset1 = controller.positionToOffset(baseCenter);
59
+ var offset2 = controller.positionToOffset(new MapTypes.Position(baseCenter.lat + deltaLat, baseCenter.lng));
60
+ var deltaOffsetY = offset2.y - offset1.y;
61
+ var offset3 = new MapTypes.Offset(offset1.x + deltaOffsetY, offset2.y);
62
+ var deltaLng = baseCenter.lng - controller.offsetToPosition(offset3).lng;
63
+ var posMap = new Map();
64
+
65
+ var transition = function (pos) {
66
+ var key = positionToMapKey(pos);
67
+ var count = posMap.get(key);
68
+
69
+ if (count === undefined) {
70
+ count = 1;
71
+ posMap.set(key, count);
72
+ return {
73
+ no: count,
74
+ pos: pos
75
+ };
76
+ } //type : diagonal
77
+
78
+
79
+ var newPos = new MapTypes.Position(pos.lat + count * deltaLat, pos.lng + count * deltaLng);
80
+ count += 1;
81
+ posMap.set(key, count);
82
+ return {
83
+ no: count,
84
+ pos: newPos
85
+ };
86
+ };
87
+
88
+ return React__default["default"].createElement(MarkerAutoTransitionContext.Provider, {
89
+ value: {
90
+ option: {
91
+ sizeInMeter: sizeInMeter,
92
+ type: type
93
+ },
94
+ transition: transition
95
+ }
96
+ }, zoom && children);
97
+ }
98
+
99
+ function positionToMapKey(pos) {
100
+ return "".concat(pos.lat, "-").concat(pos.lng);
101
+ }
102
+
103
+ exports.MarkerAutoTransitionContext = MarkerAutoTransitionContext;
104
+ exports.MarkerAutoTransitionProvider = MarkerAutoTransitionProvider;
105
+ exports.baseCenter = baseCenter;
@@ -1 +1,2 @@
1
1
  export * from "./MintMapProvider";
2
+ export * from "./MarkerAutoTransitionProvider";
@@ -8,6 +8,7 @@ var reactDom = require('react-dom');
8
8
  var MintMapProvider = require('../provider/MintMapProvider.js');
9
9
  var MarkerMovingHook = require('../hooks/MarkerMovingHook.js');
10
10
  var MapDrawables = require('../../types/MapDrawables.js');
11
+ var MarkerAutoTransitionProvider = require('../provider/MarkerAutoTransitionProvider.js');
11
12
 
12
13
  var offsetCalibration = function (mapType, divElement, options, autoFitToViewport, autoAdjustAnchor, autoAdjustAnchorConfig, mapDivElement) {
13
14
  //google 맵의 anchor 보정 (네이버와 같이 왼쪽/위 기준으로 처리)
@@ -214,8 +215,21 @@ function MapMarkerWrapper(_a) {
214
215
  };
215
216
  }, []); //create / update object
216
217
 
218
+ var transition = React.useContext(MarkerAutoTransitionProvider.MarkerAutoTransitionContext).transition;
219
+ var positionNo = React.useRef();
217
220
  React.useEffect(function () {
218
221
  if (options) {
222
+ if (!Array.isArray(options.position)) {
223
+ var _a = transition(options.position),
224
+ no = _a.no,
225
+ pos = _a.pos;
226
+
227
+ if (positionNo.current !== no) {
228
+ options.position = pos;
229
+ positionNo.current = no;
230
+ }
231
+ }
232
+
219
233
  if (markerRef.current) {
220
234
  //console.log('update Marker')
221
235
  controller.updateMarker(markerRef.current, options); //disablePointerEvent 처리
package/dist/index.es.js CHANGED
@@ -4283,6 +4283,89 @@ function useMarkerMoving(_a) {
4283
4283
  return [start, stop, resume];
4284
4284
  }
4285
4285
 
4286
+ var MarkerAutoTransitionContext = createContext({
4287
+ option: {
4288
+ sizeInMeter: 2,
4289
+ type: 'diagonal'
4290
+ },
4291
+ transition: function (pos) {
4292
+ return {
4293
+ pos: pos,
4294
+ no: undefined
4295
+ };
4296
+ }
4297
+ }); // provider
4298
+
4299
+ var baseCenter = new Position(37.504497373023206, 127.04896282498558);
4300
+ function MarkerAutoTransitionProvider(_a) {
4301
+ var children = _a.children,
4302
+ _b = _a.sizeInMeter,
4303
+ sizeInMeter = _b === void 0 ? 2 : _b,
4304
+ _c = _a.type,
4305
+ type = _c === void 0 ? 'diagonal' : _c;
4306
+ var controller = useMintMapController();
4307
+
4308
+ var _d = useState(controller.getZoomLevel()),
4309
+ zoom = _d[0],
4310
+ setZoom = _d[1];
4311
+
4312
+ useEffect(function () {
4313
+ var onZoomChanged = function () {
4314
+ setZoom(controller.getZoomLevel());
4315
+ };
4316
+
4317
+ controller.addEventListener('ZOOM_CHANGED', onZoomChanged);
4318
+ return function () {
4319
+ controller.removeEventListener('ZOOM_CHANGED', onZoomChanged);
4320
+ };
4321
+ }, []);
4322
+ var calcSize = typeof sizeInMeter === 'number' ? sizeInMeter : sizeInMeter(controller.getZoomLevel());
4323
+ var deltaLat = GeoCalulator.convertMeterToLatitudeValue(calcSize);
4324
+ var offset1 = controller.positionToOffset(baseCenter);
4325
+ var offset2 = controller.positionToOffset(new Position(baseCenter.lat + deltaLat, baseCenter.lng));
4326
+ var deltaOffsetY = offset2.y - offset1.y;
4327
+ var offset3 = new Offset(offset1.x + deltaOffsetY, offset2.y);
4328
+ var deltaLng = baseCenter.lng - controller.offsetToPosition(offset3).lng;
4329
+ var posMap = new Map();
4330
+
4331
+ var transition = function (pos) {
4332
+ var key = positionToMapKey(pos);
4333
+ var count = posMap.get(key);
4334
+
4335
+ if (count === undefined) {
4336
+ count = 1;
4337
+ posMap.set(key, count);
4338
+ return {
4339
+ no: count,
4340
+ pos: pos
4341
+ };
4342
+ } //type : diagonal
4343
+
4344
+
4345
+ var newPos = new Position(pos.lat + count * deltaLat, pos.lng + count * deltaLng);
4346
+ count += 1;
4347
+ posMap.set(key, count);
4348
+ return {
4349
+ no: count,
4350
+ pos: newPos
4351
+ };
4352
+ };
4353
+
4354
+ return React.createElement(MarkerAutoTransitionContext.Provider, {
4355
+ value: {
4356
+ option: {
4357
+ sizeInMeter: sizeInMeter,
4358
+ type: type
4359
+ },
4360
+ transition: transition
4361
+ }
4362
+ }, zoom && children);
4363
+ }
4364
+
4365
+ function positionToMapKey(pos) {
4366
+ return "".concat(pos.lat, "-").concat(pos.lng);
4367
+ }
4368
+
4286
4369
  var offsetCalibration = function (mapType, divElement, options, autoFitToViewport, autoAdjustAnchor, autoAdjustAnchorConfig, mapDivElement) {
4287
4370
  //google 맵의 anchor 보정 (네이버와 같이 왼쪽/위 기준으로 처리)
4288
4371
  var baseTransform = '';
@@ -4488,8 +4571,21 @@ function MapMarkerWrapper(_a) {
4488
4571
  };
4489
4572
  }, []); //create / update object
4490
4573
 
4574
+ var transition = useContext(MarkerAutoTransitionContext).transition;
4575
+ var positionNo = useRef();
4491
4576
  useEffect(function () {
4492
4577
  if (options) {
4578
+ if (!Array.isArray(options.position)) {
4579
+ var _a = transition(options.position),
4580
+ no = _a.no,
4581
+ pos = _a.pos;
4582
+
4583
+ if (positionNo.current !== no) {
4584
+ options.position = pos;
4585
+ positionNo.current = no;
4586
+ }
4587
+ }
4588
+
4493
4589
  if (markerRef.current) {
4494
4590
  //console.log('update Marker')
4495
4591
  controller.updateMarker(markerRef.current, options); //disablePointerEvent 처리
@@ -5892,4 +5988,4 @@ function MapCanvasMarkerWrapper(_props) {
5892
5988
  return React.createElement(React.Fragment, null);
5893
5989
  }
5894
5990
 
5895
- export { AnimationPlayer, Bounds, CanvasMarker, CircleMarker, Drawable, GeoCalulator, GoogleMintMapController, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SVGCircle, SVGPolygon, SVGRect, Status, getClusterInfo, getMapOfType, log, useMarkerMoving, useMintMapController, waiting };
5991
+ export { AnimationPlayer, Bounds, CanvasMarker, CircleMarker, Drawable, GeoCalulator, GoogleMintMapController, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MarkerAutoTransitionContext, MarkerAutoTransitionProvider, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SVGCircle, SVGPolygon, SVGRect, Status, baseCenter, getClusterInfo, getMapOfType, log, useMarkerMoving, useMintMapController, waiting };
package/dist/index.js CHANGED
@@ -16,6 +16,7 @@ var MapBuildingProjection = require('./components/mint-map/core/advanced/MapBuil
16
16
  var MapLoadingComponents = require('./components/mint-map/core/advanced/MapLoadingComponents.js');
17
17
  var MarkerMovingHook = require('./components/mint-map/core/hooks/MarkerMovingHook.js');
18
18
  var MintMapProvider = require('./components/mint-map/core/provider/MintMapProvider.js');
19
+ var MarkerAutoTransitionProvider = require('./components/mint-map/core/provider/MarkerAutoTransitionProvider.js');
19
20
  var animation = require('./components/mint-map/core/util/animation.js');
20
21
  var geo = require('./components/mint-map/core/util/geo.js');
21
22
  var waiting = require('./components/mint-map/core/util/waiting.js');
@@ -54,6 +55,9 @@ exports.PointLoading = MapLoadingComponents.PointLoading;
54
55
  exports.useMarkerMoving = MarkerMovingHook.useMarkerMoving;
55
56
  exports.MintMapProvider = MintMapProvider.MintMapProvider;
56
57
  exports.useMintMapController = MintMapProvider.useMintMapController;
58
+ exports.MarkerAutoTransitionContext = MarkerAutoTransitionProvider.MarkerAutoTransitionContext;
59
+ exports.MarkerAutoTransitionProvider = MarkerAutoTransitionProvider.MarkerAutoTransitionProvider;
60
+ exports.baseCenter = MarkerAutoTransitionProvider.baseCenter;
57
61
  exports.AnimationPlayer = animation.AnimationPlayer;
58
62
  exports.GeoCalulator = geo.GeoCalulator;
59
63
  exports.waiting = waiting.waiting;
package/dist/index.umd.js CHANGED
@@ -4287,6 +4287,89 @@
4287
4287
  return [start, stop, resume];
4288
4288
  }
4289
4289
 
4290
+ var MarkerAutoTransitionContext = React.createContext({
4291
+ option: {
4292
+ sizeInMeter: 2,
4293
+ type: 'diagonal'
4294
+ },
4295
+ transition: function (pos) {
4296
+ return {
4297
+ pos: pos,
4298
+ no: undefined
4299
+ };
4300
+ }
4301
+ }); // provider
4302
+
4303
+ var baseCenter = new Position(37.504497373023206, 127.04896282498558);
4304
+ function MarkerAutoTransitionProvider(_a) {
4305
+ var children = _a.children,
4306
+ _b = _a.sizeInMeter,
4307
+ sizeInMeter = _b === void 0 ? 2 : _b,
4308
+ _c = _a.type,
4309
+ type = _c === void 0 ? 'diagonal' : _c;
4310
+ var controller = useMintMapController();
4311
+
4312
+ var _d = React.useState(controller.getZoomLevel()),
4313
+ zoom = _d[0],
4314
+ setZoom = _d[1];
4315
+
4316
+ React.useEffect(function () {
4317
+ var onZoomChanged = function () {
4318
+ setZoom(controller.getZoomLevel());
4319
+ };
4320
+
4321
+ controller.addEventListener('ZOOM_CHANGED', onZoomChanged);
4322
+ return function () {
4323
+ controller.removeEventListener('ZOOM_CHANGED', onZoomChanged);
4324
+ };
4325
+ }, []);
4326
+ var calcSize = typeof sizeInMeter === 'number' ? sizeInMeter : sizeInMeter(controller.getZoomLevel());
4327
+ var deltaLat = GeoCalulator.convertMeterToLatitudeValue(calcSize);
4328
+ var offset1 = controller.positionToOffset(baseCenter);
4329
+ var offset2 = controller.positionToOffset(new Position(baseCenter.lat + deltaLat, baseCenter.lng));
4330
+ var deltaOffsetY = offset2.y - offset1.y;
4331
+ var offset3 = new Offset(offset1.x + deltaOffsetY, offset2.y);
4332
+ var deltaLng = baseCenter.lng - controller.offsetToPosition(offset3).lng;
4333
+ var posMap = new Map();
4334
+
4335
+ var transition = function (pos) {
4336
+ var key = positionToMapKey(pos);
4337
+ var count = posMap.get(key);
4338
+
4339
+ if (count === undefined) {
4340
+ count = 1;
4341
+ posMap.set(key, count);
4342
+ return {
4343
+ no: count,
4344
+ pos: pos
4345
+ };
4346
+ } //type : diagonal
4347
+
4348
+
4349
+ var newPos = new Position(pos.lat + count * deltaLat, pos.lng + count * deltaLng);
4350
+ count += 1;
4351
+ posMap.set(key, count);
4352
+ return {
4353
+ no: count,
4354
+ pos: newPos
4355
+ };
4356
+ };
4357
+
4358
+ return React__default["default"].createElement(MarkerAutoTransitionContext.Provider, {
4359
+ value: {
4360
+ option: {
4361
+ sizeInMeter: sizeInMeter,
4362
+ type: type
4363
+ },
4364
+ transition: transition
4365
+ }
4366
+ }, zoom && children);
4367
+ }
4368
+
4369
+ function positionToMapKey(pos) {
4370
+ return "".concat(pos.lat, "-").concat(pos.lng);
4371
+ }
4372
+
4290
4373
  var offsetCalibration = function (mapType, divElement, options, autoFitToViewport, autoAdjustAnchor, autoAdjustAnchorConfig, mapDivElement) {
4291
4374
  //google 맵의 anchor 보정 (네이버와 같이 왼쪽/위 기준으로 처리)
4292
4375
  var baseTransform = '';
@@ -4492,8 +4575,21 @@
4492
4575
  };
4493
4576
  }, []); //create / update object
4494
4577
 
4578
+ var transition = React.useContext(MarkerAutoTransitionContext).transition;
4579
+ var positionNo = React.useRef();
4495
4580
  React.useEffect(function () {
4496
4581
  if (options) {
4582
+ if (!Array.isArray(options.position)) {
4583
+ var _a = transition(options.position),
4584
+ no = _a.no,
4585
+ pos = _a.pos;
4586
+
4587
+ if (positionNo.current !== no) {
4588
+ options.position = pos;
4589
+ positionNo.current = no;
4590
+ }
4591
+ }
4592
+
4497
4593
  if (markerRef.current) {
4498
4594
  //console.log('update Marker')
4499
4595
  controller.updateMarker(markerRef.current, options); //disablePointerEvent 처리
@@ -5914,6 +6010,8 @@
5914
6010
  exports.MapPolylineWrapper = MapPolylineWrapper;
5915
6011
  exports.MapUIEvent = MapUIEvent;
5916
6012
  exports.Marker = Marker;
6013
+ exports.MarkerAutoTransitionContext = MarkerAutoTransitionContext;
6014
+ exports.MarkerAutoTransitionProvider = MarkerAutoTransitionProvider;
5917
6015
  exports.MintMap = MintMap;
5918
6016
  exports.MintMapCanvasRenderer = MintMapCanvasRenderer;
5919
6017
  exports.MintMapController = MintMapController;
@@ -5931,6 +6029,7 @@
5931
6029
  exports.SVGPolygon = SVGPolygon;
5932
6030
  exports.SVGRect = SVGRect;
5933
6031
  exports.Status = Status;
6032
+ exports.baseCenter = baseCenter;
5934
6033
  exports.getClusterInfo = getClusterInfo;
5935
6034
  exports.getMapOfType = getMapOfType;
5936
6035
  exports.log = log;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "0.10.0-beta",
3
+ "version": "0.10.0-beta-test2",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",