react-spatial 1.0.34 → 1.0.37-beta.2

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.
@@ -2,7 +2,7 @@ function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in
2
2
  import React, { useMemo, useEffect, useState } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { Map } from 'ol';
5
- import CopyrightControl from 'mobility-toolbox-js/ol/controls/CopyrightControl';
5
+ import { CopyrightControl } from 'mobility-toolbox-js/ol';
6
6
 
7
7
  var propTypes = {
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Copyright.js","sources":["../../../src/components/Copyright/Copyright.js"],"sourcesContent":["import React, { useMemo, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Map } from 'ol';\nimport CopyrightControl from 'mobility-toolbox-js/ol/controls/CopyrightControl';\n\nconst propTypes = {\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Format function. Called with an array of copyrights from visible layers\n * and returns the copyright.\n */\n format: PropTypes.func,\n\n /**\n * CSS class of th root element\n */\n className: PropTypes.string,\n};\n\nconst defaultProps = {\n format: (copyrights) => {\n return copyrights.join(' | ');\n },\n className: 'rs-copyright',\n};\n\n/**\n * The Copyright component uses the\n * [mobility-toolbox-js CopyrightControl](https://mobility-toolbox-js.geops.io/api/class/src/mapbox/controls/CopyrightControl%20js~CopyrightControl%20html-offset-anchor)\n * to render the layer copyrights.\n */\nfunction Copyright({ map, format, ...other }) {\n const [copyrights, setCopyrights] = useState([]);\n\n const control = useMemo(\n () => {\n return new CopyrightControl({\n target: document.createElement('div'),\n element: document.createElement('div'),\n render() {\n // eslint-disable-next-line react/no-this-in-sfc\n const newCopyrights = this.getCopyrights();\n if (copyrights.toString() !== newCopyrights.toString()) {\n setCopyrights(newCopyrights);\n }\n },\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control || !control.getCopyrights().length) {\n return null;\n }\n\n return (\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: format(copyrights) || '',\n }}\n />\n );\n}\n\nCopyright.propTypes = propTypes;\nCopyright.defaultProps = defaultProps;\n\nexport default React.memo(Copyright);\n"],"names":["const"],"mappings":";AAAA,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAC5D,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,SAAS,GAAG,QAAQ,IAAI,CAAC;AACzB,OAAO,gBAAgB,MAAM,kDAAkD,CAAC;AAChF;AACAA,GAAK,CAAC,SAAS,GAAG;AAClB;AACA;AACA;AACA,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI;AACxB;AACA;AACA;AACA;AACA,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM;AAC7B,CAAC,CAAC;AACF;AACAA,GAAK,CAAC,YAAY,GAAG;AACrB,EAAE,MAAM,WAAE,CAAC,UAAU,EAAK;AAC1B,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,SAAS,EAAE,cAAc;AAC3B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,IAA0B,EAAE,CAAzB;oBAAK;0BAAQ;+DAAG;;AAAU;AAC/C,WAAmC,GAAG,QAAQ,CAAC,EAAE;EAAxC;EAAY,6BAA8B;AACnD;AACA,EAAEA,GAAK,CAAC,OAAO,GAAG,OAAO;AACzB,aAAI,GAAM;AACV,MAAM,OAAO,IAAI,gBAAgB,CAAC;AAClC,QAAQ,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAQ,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAQ,uBAAM,GAAG;AACjB;AACA,UAAUA,GAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACrD,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC,QAAQ,EAAE,EAAE;AAClE,YAAY,aAAa,CAAC,aAAa,CAAC,CAAC;AACzC,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,IAAI,EAAG;AACP,GAAG,CAAC;AACJ;AACA;AACA,EAAE,SAAS,UAAC,GAAM;AAClB,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,gBAAO,GAAM,EAAE,CAAC;AACtB,KAAK;AACL;AACA,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AACtB;AACA,IAAI,gBAAO,GAAM;AACjB,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;AACzB,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACrB;AACA,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AACnD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,sBAAC,uBAAG;AACR;AACA,MAAU,KAAM,IAEV,yBAAyB;AAC/B,QAAQ,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;AACxC,UAAQ,CACF;AACN,GAAG,CAAC;AACJ,CAAC;AACD;AACA,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;AACtC;AACA,eAAe,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;"}
1
+ {"version":3,"file":"Copyright.js","sources":["../../../src/components/Copyright/Copyright.js"],"sourcesContent":["import React, { useMemo, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Map } from 'ol';\nimport { CopyrightControl } from 'mobility-toolbox-js/ol';\n\nconst propTypes = {\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Format function. Called with an array of copyrights from visible layers\n * and returns the copyright.\n */\n format: PropTypes.func,\n\n /**\n * CSS class of th root element\n */\n className: PropTypes.string,\n};\n\nconst defaultProps = {\n format: (copyrights) => {\n return copyrights.join(' | ');\n },\n className: 'rs-copyright',\n};\n\n/**\n * The Copyright component uses the\n * [mobility-toolbox-js CopyrightControl](https://mobility-toolbox-js.geops.io/api/class/src/mapbox/controls/CopyrightControl%20js~CopyrightControl%20html-offset-anchor)\n * to render the layer copyrights.\n */\nfunction Copyright({ map, format, ...other }) {\n const [copyrights, setCopyrights] = useState([]);\n\n const control = useMemo(\n () => {\n return new CopyrightControl({\n target: document.createElement('div'),\n element: document.createElement('div'),\n render() {\n // eslint-disable-next-line react/no-this-in-sfc\n const newCopyrights = this.getCopyrights();\n if (copyrights.toString() !== newCopyrights.toString()) {\n setCopyrights(newCopyrights);\n }\n },\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control || !control.getCopyrights().length) {\n return null;\n }\n\n return (\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: format(copyrights) || '',\n }}\n />\n );\n}\n\nCopyright.propTypes = propTypes;\nCopyright.defaultProps = defaultProps;\n\nexport default React.memo(Copyright);\n"],"names":["const"],"mappings":";AAAA,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAC5D,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,SAAS,GAAG,QAAQ,IAAI,CAAC;AACzB,SAAS,gBAAgB,QAAQ,wBAAwB,CAAC;AAC1D;AACAA,GAAK,CAAC,SAAS,GAAG;AAClB;AACA;AACA;AACA,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI;AACxB;AACA;AACA;AACA;AACA,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM;AAC7B,CAAC,CAAC;AACF;AACAA,GAAK,CAAC,YAAY,GAAG;AACrB,EAAE,MAAM,WAAE,CAAC,UAAU,EAAK;AAC1B,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,SAAS,EAAE,cAAc;AAC3B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,IAA0B,EAAE,CAAzB;oBAAK;0BAAQ;+DAAG;;AAAU;AAC/C,WAAmC,GAAG,QAAQ,CAAC,EAAE;EAAxC;EAAY,6BAA8B;AACnD;AACA,EAAEA,GAAK,CAAC,OAAO,GAAG,OAAO;AACzB,aAAI,GAAM;AACV,MAAM,OAAO,IAAI,gBAAgB,CAAC;AAClC,QAAQ,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAQ,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAQ,uBAAM,GAAG;AACjB;AACA,UAAUA,GAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACrD,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC,QAAQ,EAAE,EAAE;AAClE,YAAY,aAAa,CAAC,aAAa,CAAC,CAAC;AACzC,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,IAAI,EAAG;AACP,GAAG,CAAC;AACJ;AACA;AACA,EAAE,SAAS,UAAC,GAAM;AAClB,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,gBAAO,GAAM,EAAE,CAAC;AACtB,KAAK;AACL;AACA,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AACtB;AACA,IAAI,gBAAO,GAAM;AACjB,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;AACzB,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACrB;AACA,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AACnD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,sBAAC,uBAAG;AACR;AACA,MAAU,KAAM,IAEV,yBAAyB;AAC/B,QAAQ,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;AACxC,UAAQ,CACF;AACN,GAAG,CAAC;AACJ,CAAC;AACD;AACA,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;AACtC;AACA,eAAe,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;"}
@@ -0,0 +1,5 @@
1
+ .rs-copyright-example {
2
+ .rs-copyright {
3
+ font-size: 11px;
4
+ }
5
+ }
@@ -8,7 +8,7 @@ import Tile from 'ol/Tile';
8
8
  import TileLayer from 'ol/layer/Tile';
9
9
  import TileSource from 'ol/source/Tile';
10
10
  import { createXYZ } from 'ol/tilegrid';
11
- import Layer from 'mobility-toolbox-js/ol/layers/Layer';
11
+ import { Layer } from 'mobility-toolbox-js/ol';
12
12
  import Copyright from './Copyright';
13
13
 
14
14
  configure({ adapter: new Adapter() });
@@ -1 +1 @@
1
- {"version":3,"file":"Copyright.test.js","sources":["../../../src/components/Copyright/Copyright.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport { configure, mount } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport { act } from 'react-dom/test-utils';\nimport { Map, View } from 'ol';\nimport Tile from 'ol/Tile';\nimport TileLayer from 'ol/layer/Tile';\nimport TileSource from 'ol/source/Tile';\nimport { createXYZ } from 'ol/tilegrid';\nimport Layer from 'mobility-toolbox-js/ol/layers/Layer';\nimport Copyright from './Copyright';\n\nconfigure({ adapter: new Adapter() });\n\nconst image = new Image();\nimage.width = 256;\nimage.height = 256;\n\nconst tileLoadFunction = () => {\n const tile = new Tile([0, 0, -1], 2 /* LOADED */);\n tile.getImage = () => {\n return image;\n };\n return tile;\n};\n\nconst getOLTileLayer = () => {\n const layer = new TileLayer({\n source: new TileSource({\n projection: 'EPSG:3857',\n tileGrid: createXYZ(),\n }),\n });\n layer.getSource().getTile = tileLoadFunction;\n return layer;\n};\n\nconst getLayer = (copyrights, visible = true) => {\n return new Layer({\n visible,\n copyrights,\n olLayer: getOLTileLayer(),\n });\n};\n\nlet layers;\nlet map;\n\ndescribe('Copyright', () => {\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n layers = [getLayer('bar'), getLayer('foo', false)];\n map = new Map({\n target,\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n layers: layers.map((layer) => {\n return layer.olLayer;\n }),\n });\n map.setSize([200, 200]);\n layers.forEach((layer) => {\n layer.init(map);\n });\n act(() => {\n map.renderSync();\n });\n });\n\n afterEach(() => {\n map.setTarget(null);\n map = null;\n });\n\n test('is empty if no layers are visible', () => {\n const component = mount(<Copyright map={map} />);\n expect(component.html()).toBe(null);\n });\n\n test('displays one copyright', () => {\n const wrapper = mount(<Copyright map={map} />);\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n expect(wrapper.text()).toBe('bar');\n });\n\n test('displays 2 copyrights', () => {\n const wrapper = mount(<Copyright map={map} />);\n layers[0].setVisible(true);\n layers[1].setVisible(true);\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n expect(wrapper.text()).toBe('bar | foo');\n });\n\n test('displays a copyright using a custom format', () => {\n const wrapper = mount(\n <Copyright\n map={map}\n format={(copyrights) => {\n return `Number of copyrights: ${copyrights.length}`;\n }}\n />,\n );\n\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n\n expect(wrapper.text()).toBe('Number of copyrights: 1');\n });\n\n test('set a custom className', () => {\n const wrapper = mount(<Copyright map={map} className=\"foo\" />);\n expect(wrapper.find('.foo').length).toBe(1);\n });\n\n test('set a custom attribute to the root element', () => {\n const wrapper = mount(<Copyright map={map} foo=\"bar\" />);\n expect(wrapper.find('[foo]').length).toBe(1);\n });\n});\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"Copyright.test.js","sources":["../../../src/components/Copyright/Copyright.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport { configure, mount } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport { act } from 'react-dom/test-utils';\nimport { Map, View } from 'ol';\nimport Tile from 'ol/Tile';\nimport TileLayer from 'ol/layer/Tile';\nimport TileSource from 'ol/source/Tile';\nimport { createXYZ } from 'ol/tilegrid';\nimport { Layer } from 'mobility-toolbox-js/ol';\nimport Copyright from './Copyright';\n\nconfigure({ adapter: new Adapter() });\n\nconst image = new Image();\nimage.width = 256;\nimage.height = 256;\n\nconst tileLoadFunction = () => {\n const tile = new Tile([0, 0, -1], 2 /* LOADED */);\n tile.getImage = () => {\n return image;\n };\n return tile;\n};\n\nconst getOLTileLayer = () => {\n const layer = new TileLayer({\n source: new TileSource({\n projection: 'EPSG:3857',\n tileGrid: createXYZ(),\n }),\n });\n layer.getSource().getTile = tileLoadFunction;\n return layer;\n};\n\nconst getLayer = (copyrights, visible = true) => {\n return new Layer({\n visible,\n copyrights,\n olLayer: getOLTileLayer(),\n });\n};\n\nlet layers;\nlet map;\n\ndescribe('Copyright', () => {\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n layers = [getLayer('bar'), getLayer('foo', false)];\n map = new Map({\n target,\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n layers: layers.map((layer) => {\n return layer.olLayer;\n }),\n });\n map.setSize([200, 200]);\n layers.forEach((layer) => {\n layer.init(map);\n });\n act(() => {\n map.renderSync();\n });\n });\n\n afterEach(() => {\n map.setTarget(null);\n map = null;\n });\n\n test('is empty if no layers are visible', () => {\n const component = mount(<Copyright map={map} />);\n expect(component.html()).toBe(null);\n });\n\n test('displays one copyright', () => {\n const wrapper = mount(<Copyright map={map} />);\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n expect(wrapper.text()).toBe('bar');\n });\n\n test('displays 2 copyrights', () => {\n const wrapper = mount(<Copyright map={map} />);\n layers[0].setVisible(true);\n layers[1].setVisible(true);\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n expect(wrapper.text()).toBe('bar | foo');\n });\n\n test('displays a copyright using a custom format', () => {\n const wrapper = mount(\n <Copyright\n map={map}\n format={(copyrights) => {\n return `Number of copyrights: ${copyrights.length}`;\n }}\n />,\n );\n\n act(() => {\n map.renderSync();\n });\n wrapper.update();\n\n expect(wrapper.text()).toBe('Number of copyrights: 1');\n });\n\n test('set a custom className', () => {\n const wrapper = mount(<Copyright map={map} className=\"foo\" />);\n expect(wrapper.find('.foo').length).toBe(1);\n });\n\n test('set a custom attribute to the root element', () => {\n const wrapper = mount(<Copyright map={map} foo=\"bar\" />);\n expect(wrapper.find('[foo]').length).toBe(1);\n });\n});\n"],"names":["const","let"],"mappings":"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"}
@@ -3,11 +3,8 @@
3
3
  import React from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import { TrackerLayer } from 'mobility-toolbox-js/ol';
6
- import { bgColors } from 'mobility-toolbox-js/common/trackerConfig';
7
- import {
8
- getHoursAndMinutes,
9
- getDelayString,
10
- } from 'mobility-toolbox-js/common/timeUtils';
6
+ import { getBgColor } from 'mobility-toolbox-js/common/trackerConfig';
7
+ import { getHoursAndMinutes, getDelayString } from '../../utils/timeUtils';
11
8
  import ReactTransitPropTypes from '../../propTypes';
12
9
  import firstStation from '../../images/RouteSchedule/firstStation.png';
13
10
  import station from '../../images/RouteSchedule/station.png';
@@ -109,7 +106,7 @@ var defaultRenderStation = function (ref) {
109
106
  var stations = lineInfos.stations;
110
107
  var isFirstStation = idx === 0;
111
108
  var isLastStation = idx === stations.length - 1;
112
- var isStationPassed = isPassed(stop, trackerLayer.currTime, stations, idx);
109
+ var isStationPassed = isPassed(stop, trackerLayer.time, stations, idx);
113
110
  var isNotStation = isNotStop(stop);
114
111
  return (
115
112
  React.createElement( 'div', {
@@ -165,10 +162,12 @@ var renderRouteIdentifier = function (ref) {
165
162
  var routeIdentifier = ref.routeIdentifier;
166
163
  var longName = ref.longName;
167
164
 
168
- // first part of the id, without leading zeros.
169
- var id = parseInt(routeIdentifier.split('.')[0], 10);
170
- if (!longName.includes(id)) {
171
- return (" (" + id + ")");
165
+ if (routeIdentifier) {
166
+ // first part of the id, without leading zeros.
167
+ var id = parseInt(routeIdentifier.split('.')[0], 10);
168
+ if (!longName.includes(id)) {
169
+ return (" (" + id + ")");
170
+ }
172
171
  }
173
172
  return null;
174
173
  };
@@ -177,20 +176,21 @@ var defaultRenderHeader = function (ref) {
177
176
  var lineInfos = ref.lineInfos;
178
177
  var renderHeaderButtons = ref.renderHeaderButtons;
179
178
 
179
+ var type = lineInfos.type;
180
180
  var vehicleType = lineInfos.vehicleType;
181
181
  var shortName = lineInfos.shortName;
182
182
  var longName = lineInfos.longName;
183
- var color = lineInfos.color;
184
- var backgroundColor = lineInfos.backgroundColor;
183
+ var stroke = lineInfos.stroke;
185
184
  var destination = lineInfos.destination;
186
185
  var routeIdentifier = lineInfos.routeIdentifier;
186
+ var textColor = lineInfos.text_color;
187
187
  return (
188
188
  React.createElement( 'div', { className: "rt-route-header" },
189
189
  React.createElement( 'span', {
190
190
  className: "rt-route-icon", style: {
191
191
  /* stylelint-disable-next-line value-keyword-case */
192
- backgroundColor: backgroundColor || bgColors[vehicleType],
193
- color: color || 'black',
192
+ backgroundColor: stroke || getBgColor(type || vehicleType),
193
+ color: textColor || 'black',
194
194
  } },
195
195
  shortName
196
196
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"RouteSchedule.js","sources":["../../../src/components/RouteSchedule/RouteSchedule.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\nimport { bgColors } from 'mobility-toolbox-js/common/trackerConfig';\nimport {\n getHoursAndMinutes,\n getDelayString,\n} from 'mobility-toolbox-js/common/timeUtils';\nimport ReactTransitPropTypes from '../../propTypes';\nimport firstStation from '../../images/RouteSchedule/firstStation.png';\nimport station from '../../images/RouteSchedule/station.png';\nimport lastStation from '../../images/RouteSchedule/lastStation.png';\nimport line from '../../images/RouteSchedule/line.png';\n\n/**\n * Returns a color class to display the delay.\n * @param {Number} time Delay time in milliseconds.\n */\nconst getDelayColor = (time) => {\n const secs = Math.round(((time / 1800 / 2) * 3600) / 1000);\n if (secs >= 3600) {\n return 'dark-red';\n }\n if (secs >= 500) {\n return 'middle-red';\n }\n if (secs >= 300) {\n return 'light-red';\n }\n if (secs >= 180) {\n return 'orange';\n }\n return 'green';\n};\n\n/**\n * Returns true if the train doesn't stop to the station.\n * @param {Object} stop Station information.\n */\nconst isNotStop = (stop) => {\n return !stop.arrivalTime && !stop.departureTime;\n};\n\n/**\n * Returns if the station has already been passed by the vehicule.\n * @param {Object} stop Station information.\n * @param {number} time The current time to test in ms.\n * @param {Array<Object>} stops the list of all stops of the train.\n * @param {idx} idx The index of the stop object in the stops array.\n */\nconst isPassed = (stop, time, stops, idx) => {\n // If the train doesn't stop to the stop object, we test if the stop just before has been passed or not.\n // if yes the current stop is considered as passed.\n if (isNotStop(stop)) {\n if (stops[idx - 1] && idx > 0) {\n return isPassed(stops[idx - 1], time, stops, idx);\n }\n return true;\n }\n\n // Sometimes stop.departureDelay is undefined.\n const timeToCompare = stop.departureTime || stop.arrivalTime || 0;\n const delayToCompare = stop.departureDelay || stop.arrivalDelay || 0;\n return timeToCompare + delayToCompare <= time;\n};\n\n/**\n * Returns an image for first, middle or last stations.\n * @param {Number} stations The stations list.\n * @param {Number} index Index of the station in the list.\n * @param {Boolean} isStationPassed If the train is already passed at this station.\n * @param {Boolean} isNotStation If the train doesn't stop to this station.\n */\nconst defaultRenderStationImg = (\n stations,\n index,\n isStationPassed,\n isNotStation,\n) => {\n const { length } = stations;\n let src = station;\n if (index === 0) {\n src = firstStation;\n } else if (index === length - 1) {\n src = lastStation;\n } else if (isNotStation) {\n src = line;\n }\n return <img src={src} alt=\"routeScheduleLine\" className=\"rt-route-icon\" />;\n};\n\nconst defaultRenderStation = ({\n lineInfos,\n onStationClick,\n trackerLayer,\n renderStationImg,\n stop,\n idx,\n}) => {\n const {\n stationId,\n arrivalDelay,\n departureDelay,\n arrivalTime,\n departureTime,\n cancelled,\n stationName,\n } = stop;\n const { stations } = lineInfos;\n const isFirstStation = idx === 0;\n const isLastStation = idx === stations.length - 1;\n const isStationPassed = isPassed(stop, trackerLayer.currTime, stations, idx);\n const isNotStation = isNotStop(stop);\n return (\n <div\n // Train line can go in circle so begin and end have the same id,\n // using the time in the key should fix the issue.\n key={stationId + arrivalTime + departureTime}\n role=\"button\"\n className={[\n 'rt-route-station',\n isStationPassed ? ' rt-passed' : '',\n isNotStation ? ' rt-no-stop' : '',\n ].join('')}\n onClick={(e) => {\n return onStationClick(stop, e);\n }}\n tabIndex={0}\n onKeyPress={(e) => {\n return e.which === 13 && onStationClick(stop, e);\n }}\n >\n <div className=\"rt-route-delay\">\n {typeof arrivalDelay === 'undefined' || isFirstStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-arrival${` ${getDelayColor(\n arrivalDelay,\n )}`}`}\n >\n {`+${getDelayString(arrivalDelay)}`}\n </span>\n )}\n {typeof departureDelay === 'undefined' || isLastStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-departure${` ${getDelayColor(\n departureDelay,\n )}`}`}\n >\n {`+${getDelayString(departureDelay)}`}\n </span>\n )}\n </div>\n <div className=\"rt-route-times\">\n <span\n className={`rt-route-time-arrival ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(arrivalTime)}\n </span>\n <span\n className={`rt-route-time-departure ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(departureTime)}\n </span>\n </div>\n {renderStationImg(stations, idx, isStationPassed, isNotStation)}\n <div className={cancelled ? 'rt-route-cancelled' : ''}>{stationName}</div>\n </div>\n );\n};\n\nconst renderRouteIdentifier = ({ routeIdentifier, longName }) => {\n // first part of the id, without leading zeros.\n const id = parseInt(routeIdentifier.split('.')[0], 10);\n if (!longName.includes(id)) {\n return ` (${id})`;\n }\n return null;\n};\n\nconst defaultRenderHeader = ({ lineInfos, renderHeaderButtons }) => {\n const {\n vehicleType,\n shortName,\n longName,\n color,\n backgroundColor,\n destination,\n routeIdentifier,\n } = lineInfos;\n return (\n <div className=\"rt-route-header\">\n <span\n className=\"rt-route-icon\"\n style={{\n /* stylelint-disable-next-line value-keyword-case */\n backgroundColor: backgroundColor || bgColors[vehicleType],\n color: color || 'black',\n }}\n >\n {shortName}\n </span>\n <div className=\"rt-route-title\">\n <span className=\"rt-route-name\">{destination}</span>\n <span>\n {longName}\n {renderRouteIdentifier(lineInfos)}\n </span>\n </div>\n <div className=\"rt-route-buttons\">\n {renderHeaderButtons(routeIdentifier)}\n </div>\n </div>\n );\n};\n\nconst defaultRenderFooter = (props) => {\n const { lineInfos, renderCopyright } = props;\n if (!lineInfos.operator && !lineInfos.publisher) {\n return null;\n }\n return <div className=\"rt-route-footer\">{renderCopyright({ ...props })}</div>;\n};\n\nconst defaultRenderLink = (text, url) => {\n return (\n <div className=\"rt-route-copyright-link\">\n {url ? (\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {text}\n </a>\n ) : (\n <>{text}</>\n )}\n </div>\n );\n};\n\nconst defaultRenderCopyright = ({ lineInfos }) => {\n return (\n <span className=\"rt-route-copyright\">\n {lineInfos.operator &&\n defaultRenderLink(lineInfos.operator, lineInfos.operatorUrl)}\n {lineInfos.operator && lineInfos.publisher && <span>&nbsp;-&nbsp;</span>}\n {lineInfos.publisher &&\n defaultRenderLink(lineInfos.publisher, lineInfos.publisherUrl)}\n {lineInfos.license && <span>&nbsp;(</span>}\n {lineInfos.license &&\n defaultRenderLink(lineInfos.license, lineInfos.licenseUrl)}\n {lineInfos.license && ')'}\n </span>\n );\n};\n\nconst propTypes = {\n /**\n * CSS class of the route schedule wrapper.\n */\n className: PropTypes.string,\n\n /**\n * Trajectory stations informations.\n */\n lineInfos: ReactTransitPropTypes.lineInfos,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Render Header of the route scheduler.\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render Footer of the route scheduler.\n */\n renderFooter: PropTypes.func,\n\n /**\n * Render Copyright of the route scheduler.\n */\n renderCopyright: PropTypes.func,\n\n /**\n * Render the status of the station image.\n */\n renderStationImg: PropTypes.func,\n\n /**\n * Render a station.\n */\n renderStation: PropTypes.func,\n\n /**\n * Function triggered on station's click event.\n */\n onStationClick: PropTypes.func,\n\n /**\n * Function to render header buttons.\n */\n renderHeaderButtons: PropTypes.func,\n};\n\nconst defaultProps = {\n className: 'rt-route-schedule',\n lineInfos: null,\n renderHeader: defaultRenderHeader,\n renderStation: defaultRenderStation,\n renderStationImg: defaultRenderStationImg,\n renderCopyright: defaultRenderCopyright,\n renderFooter: defaultRenderFooter,\n renderHeaderButtons: () => {\n return null;\n },\n onStationClick: () => {},\n};\n\n/**\n * RouteSchedule displays information, stops and punctuality about the clicked route.\n */\nfunction RouteSchedule(props) {\n const { lineInfos, className, renderStation, renderHeader, renderFooter } =\n props;\n\n if (!lineInfos) {\n return null;\n }\n\n return (\n <div className={className}>\n {renderHeader({ ...props })}\n <div className=\"rt-route-body\">\n {lineInfos.stations.map((stop, idx) => {\n return renderStation({ ...props, stop, idx });\n })}\n </div>\n {renderFooter({ ...props })}\n </div>\n );\n}\n\nRouteSchedule.propTypes = propTypes;\nRouteSchedule.defaultProps = defaultProps;\n\nexport default React.memo(RouteSchedule);\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"RouteSchedule.js","sources":["../../../src/components/RouteSchedule/RouteSchedule.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\nimport { getBgColor } from 'mobility-toolbox-js/common/trackerConfig';\nimport { getHoursAndMinutes, getDelayString } from '../../utils/timeUtils';\nimport ReactTransitPropTypes from '../../propTypes';\nimport firstStation from '../../images/RouteSchedule/firstStation.png';\nimport station from '../../images/RouteSchedule/station.png';\nimport lastStation from '../../images/RouteSchedule/lastStation.png';\nimport line from '../../images/RouteSchedule/line.png';\n\n/**\n * Returns a color class to display the delay.\n * @param {Number} time Delay time in milliseconds.\n */\nconst getDelayColor = (time) => {\n const secs = Math.round(((time / 1800 / 2) * 3600) / 1000);\n if (secs >= 3600) {\n return 'dark-red';\n }\n if (secs >= 500) {\n return 'middle-red';\n }\n if (secs >= 300) {\n return 'light-red';\n }\n if (secs >= 180) {\n return 'orange';\n }\n return 'green';\n};\n\n/**\n * Returns true if the train doesn't stop to the station.\n * @param {Object} stop Station information.\n */\nconst isNotStop = (stop) => {\n return !stop.arrivalTime && !stop.departureTime;\n};\n\n/**\n * Returns if the station has already been passed by the vehicule.\n * @param {Object} stop Station information.\n * @param {number} time The current time to test in ms.\n * @param {Array<Object>} stops the list of all stops of the train.\n * @param {idx} idx The index of the stop object in the stops array.\n */\nconst isPassed = (stop, time, stops, idx) => {\n // If the train doesn't stop to the stop object, we test if the stop just before has been passed or not.\n // if yes the current stop is considered as passed.\n if (isNotStop(stop)) {\n if (stops[idx - 1] && idx > 0) {\n return isPassed(stops[idx - 1], time, stops, idx);\n }\n return true;\n }\n\n // Sometimes stop.departureDelay is undefined.\n const timeToCompare = stop.departureTime || stop.arrivalTime || 0;\n const delayToCompare = stop.departureDelay || stop.arrivalDelay || 0;\n return timeToCompare + delayToCompare <= time;\n};\n\n/**\n * Returns an image for first, middle or last stations.\n * @param {Number} stations The stations list.\n * @param {Number} index Index of the station in the list.\n * @param {Boolean} isStationPassed If the train is already passed at this station.\n * @param {Boolean} isNotStation If the train doesn't stop to this station.\n */\nconst defaultRenderStationImg = (\n stations,\n index,\n isStationPassed,\n isNotStation,\n) => {\n const { length } = stations;\n let src = station;\n if (index === 0) {\n src = firstStation;\n } else if (index === length - 1) {\n src = lastStation;\n } else if (isNotStation) {\n src = line;\n }\n return <img src={src} alt=\"routeScheduleLine\" className=\"rt-route-icon\" />;\n};\n\nconst defaultRenderStation = ({\n lineInfos,\n onStationClick,\n trackerLayer,\n renderStationImg,\n stop,\n idx,\n}) => {\n const {\n stationId,\n arrivalDelay,\n departureDelay,\n arrivalTime,\n departureTime,\n cancelled,\n stationName,\n } = stop;\n const { stations } = lineInfos;\n const isFirstStation = idx === 0;\n const isLastStation = idx === stations.length - 1;\n const isStationPassed = isPassed(stop, trackerLayer.time, stations, idx);\n const isNotStation = isNotStop(stop);\n return (\n <div\n // Train line can go in circle so begin and end have the same id,\n // using the time in the key should fix the issue.\n key={stationId + arrivalTime + departureTime}\n role=\"button\"\n className={[\n 'rt-route-station',\n isStationPassed ? ' rt-passed' : '',\n isNotStation ? ' rt-no-stop' : '',\n ].join('')}\n onClick={(e) => {\n return onStationClick(stop, e);\n }}\n tabIndex={0}\n onKeyPress={(e) => {\n return e.which === 13 && onStationClick(stop, e);\n }}\n >\n <div className=\"rt-route-delay\">\n {typeof arrivalDelay === 'undefined' || isFirstStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-arrival${` ${getDelayColor(\n arrivalDelay,\n )}`}`}\n >\n {`+${getDelayString(arrivalDelay)}`}\n </span>\n )}\n {typeof departureDelay === 'undefined' || isLastStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-departure${` ${getDelayColor(\n departureDelay,\n )}`}`}\n >\n {`+${getDelayString(departureDelay)}`}\n </span>\n )}\n </div>\n <div className=\"rt-route-times\">\n <span\n className={`rt-route-time-arrival ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(arrivalTime)}\n </span>\n <span\n className={`rt-route-time-departure ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(departureTime)}\n </span>\n </div>\n {renderStationImg(stations, idx, isStationPassed, isNotStation)}\n <div className={cancelled ? 'rt-route-cancelled' : ''}>{stationName}</div>\n </div>\n );\n};\n\nconst renderRouteIdentifier = ({ routeIdentifier, longName }) => {\n if (routeIdentifier) {\n // first part of the id, without leading zeros.\n const id = parseInt(routeIdentifier.split('.')[0], 10);\n if (!longName.includes(id)) {\n return ` (${id})`;\n }\n }\n return null;\n};\n\nconst defaultRenderHeader = ({ lineInfos, renderHeaderButtons }) => {\n const {\n type,\n vehicleType,\n shortName,\n longName,\n stroke,\n destination,\n routeIdentifier,\n text_color: textColor,\n } = lineInfos;\n return (\n <div className=\"rt-route-header\">\n <span\n className=\"rt-route-icon\"\n style={{\n /* stylelint-disable-next-line value-keyword-case */\n backgroundColor: stroke || getBgColor(type || vehicleType),\n color: textColor || 'black',\n }}\n >\n {shortName}\n </span>\n <div className=\"rt-route-title\">\n <span className=\"rt-route-name\">{destination}</span>\n <span>\n {longName}\n {renderRouteIdentifier(lineInfos)}\n </span>\n </div>\n <div className=\"rt-route-buttons\">\n {renderHeaderButtons(routeIdentifier)}\n </div>\n </div>\n );\n};\n\nconst defaultRenderFooter = (props) => {\n const { lineInfos, renderCopyright } = props;\n if (!lineInfos.operator && !lineInfos.publisher) {\n return null;\n }\n return <div className=\"rt-route-footer\">{renderCopyright({ ...props })}</div>;\n};\n\nconst defaultRenderLink = (text, url) => {\n return (\n <div className=\"rt-route-copyright-link\">\n {url ? (\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {text}\n </a>\n ) : (\n <>{text}</>\n )}\n </div>\n );\n};\n\nconst defaultRenderCopyright = ({ lineInfos }) => {\n return (\n <span className=\"rt-route-copyright\">\n {lineInfos.operator &&\n defaultRenderLink(lineInfos.operator, lineInfos.operatorUrl)}\n {lineInfos.operator && lineInfos.publisher && <span>&nbsp;-&nbsp;</span>}\n {lineInfos.publisher &&\n defaultRenderLink(lineInfos.publisher, lineInfos.publisherUrl)}\n {lineInfos.license && <span>&nbsp;(</span>}\n {lineInfos.license &&\n defaultRenderLink(lineInfos.license, lineInfos.licenseUrl)}\n {lineInfos.license && ')'}\n </span>\n );\n};\n\nconst propTypes = {\n /**\n * CSS class of the route schedule wrapper.\n */\n className: PropTypes.string,\n\n /**\n * Trajectory stations informations.\n */\n lineInfos: ReactTransitPropTypes.lineInfos,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Render Header of the route scheduler.\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render Footer of the route scheduler.\n */\n renderFooter: PropTypes.func,\n\n /**\n * Render Copyright of the route scheduler.\n */\n renderCopyright: PropTypes.func,\n\n /**\n * Render the status of the station image.\n */\n renderStationImg: PropTypes.func,\n\n /**\n * Render a station.\n */\n renderStation: PropTypes.func,\n\n /**\n * Function triggered on station's click event.\n */\n onStationClick: PropTypes.func,\n\n /**\n * Function to render header buttons.\n */\n renderHeaderButtons: PropTypes.func,\n};\n\nconst defaultProps = {\n className: 'rt-route-schedule',\n lineInfos: null,\n renderHeader: defaultRenderHeader,\n renderStation: defaultRenderStation,\n renderStationImg: defaultRenderStationImg,\n renderCopyright: defaultRenderCopyright,\n renderFooter: defaultRenderFooter,\n renderHeaderButtons: () => {\n return null;\n },\n onStationClick: () => {},\n};\n\n/**\n * RouteSchedule displays information, stops and punctuality about the clicked route.\n */\nfunction RouteSchedule(props) {\n const { lineInfos, className, renderStation, renderHeader, renderFooter } =\n props;\n\n if (!lineInfos) {\n return null;\n }\n\n return (\n <div className={className}>\n {renderHeader({ ...props })}\n <div className=\"rt-route-body\">\n {lineInfos.stations.map((stop, idx) => {\n return renderStation({ ...props, stop, idx });\n })}\n </div>\n {renderFooter({ ...props })}\n </div>\n );\n}\n\nRouteSchedule.propTypes = propTypes;\nRouteSchedule.defaultProps = defaultProps;\n\nexport default React.memo(RouteSchedule);\n"],"names":["const","let"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Autocomplete } from '@material-ui/lab';
4
4
  import { FaSearch } from 'react-icons/fa';
5
5
  import TextField from '@material-ui/core/TextField';
6
6
  import CircularProgress from '@material-ui/core/CircularProgress';
7
- import StopFinderControl from 'mobility-toolbox-js/ol/controls/StopFinderControl';
7
+ import { StopFinderControl } from 'mobility-toolbox-js/ol';
8
8
  import { Map } from 'ol';
9
9
  import { makeStyles } from '@material-ui/core';
10
10
  import StopsFinderOptions from './StopsFinderOption';
@@ -1 +1 @@
1
- {"version":3,"file":"StopsFinder.js","sources":["../../../src/components/StopsFinder/StopsFinder.js"],"sourcesContent":["import React, { useMemo, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Autocomplete } from '@material-ui/lab';\nimport { FaSearch } from 'react-icons/fa';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport StopFinderControl from 'mobility-toolbox-js/ol/controls/StopFinderControl';\nimport { Map } from 'ol';\nimport { makeStyles } from '@material-ui/core';\nimport StopsFinderOptions from './StopsFinderOption';\n\nconst useStyles = makeStyles(() => {\n return {\n popupIndicatorOpen: {\n transform: 'rotate(0)',\n },\n };\n});\n\nfunction StopsFinder({\n agencies,\n apiKey,\n autocompleteProps,\n bbox,\n field,\n limit,\n map,\n mots,\n onSelect,\n radius,\n refLocation,\n renderAutocomplete,\n url,\n}) {\n const classes = useStyles();\n const [inputValue, setInputValue] = useState('');\n const [suggestions, setSuggestions] = useState([]);\n const [isLoading, setLoading] = useState(false);\n const [isOpen, setOpen] = useState(false);\n\n const control = useMemo(() => {\n return new StopFinderControl({\n url,\n apiKey,\n target: document.createElement('div'),\n element: document.createElement('div'),\n render(newSuggestions = []) {\n setSuggestions(newSuggestions);\n setLoading(false);\n },\n });\n }, [apiKey, url]);\n\n useEffect(() => {\n if (!inputValue) {\n setSuggestions([]);\n setLoading(false);\n return () => {};\n }\n const abortController = new AbortController();\n setLoading(true);\n control.apiParams = {\n prefAgencies: agencies && agencies.toString(),\n bbox: bbox && bbox.toString(),\n field: field && field.toString(),\n limit,\n mots: mots && mots.toString(),\n radius,\n ref_location: refLocation && refLocation.toString(),\n };\n control.search(inputValue, abortController);\n return () => {\n abortController.abort();\n };\n }, [\n agencies,\n bbox,\n control,\n field,\n inputValue,\n limit,\n mots,\n radius,\n refLocation,\n ]);\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control) {\n return null;\n }\n\n if (renderAutocomplete) {\n return renderAutocomplete(\n suggestions,\n inputValue,\n setInputValue,\n isOpen,\n setOpen,\n isLoading,\n setLoading,\n );\n }\n const textFieldProps = {\n ...((autocompleteProps || {}).textFieldProps || {}),\n };\n const autocProps = { ...autocompleteProps };\n delete autocProps.textFieldProps;\n\n return (\n <Autocomplete\n fullWidth\n autoComplete\n autoHighlight\n selectOnFocus\n getOptionLabel={(option) => {\n return option.properties.name;\n }}\n onChange={(evt, value, reason) => {\n if (onSelect && reason === 'select-option') {\n onSelect(value, evt);\n }\n }}\n popupIcon={<FaSearch focusable={false} size={15} />}\n renderInput={(params) => {\n return (\n <TextField\n label=\"Search stops\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...{\n ...params,\n ...textFieldProps,\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {isLoading && <CircularProgress size={20} />}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n );\n }}\n renderOption={(option) => {\n return <StopsFinderOptions option={option} />;\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...autocProps}\n classes={{ ...classes, ...autocompleteProps.classes }}\n inputValue={inputValue}\n open={isOpen}\n options={suggestions}\n loading={isLoading}\n onOpen={() => {\n setOpen(true);\n }}\n onClose={() => {\n setOpen(false);\n }}\n onInputChange={(evt, val) => {\n setInputValue(val);\n }}\n />\n );\n}\n\nStopsFinder.propTypes = {\n /**\n * Array or a comma separated list of agencies which should be available.\n * Order of these agencies chooses which agency will be preferred.\n * Available values : sbb, db\n */\n agencies: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * geOps api key to access the StopsFinder service.\n */\n apiKey: PropTypes.string,\n\n /**\n * Properties apply to the default [MUI Autocomplete component](https://material-ui.com/api/autocomplete/).\n * We add a custom properties textFieldProps for the default [MUI TextField component](https://material-ui.com/api/text-field/) used by the Autocomplete.\n */\n autocompleteProps: PropTypes.object,\n\n /**\n * minX,minY,maxX,maxY coordinates in WGS84 wherein the station should lie.\n */\n bbox: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Array or a comma separated list of fields which should be used for look up.\n * Available values : id, name, coords\n */\n field: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Control how many matches will be returned.\n */\n limit: PropTypes.number,\n\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Array or a comma separated list of mode of transpaorts which should be available.\n * Available values : bus, ferry, gondola, tram, rail, funicular, cable_car, subway\n */\n mots: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Function called when a suggestion is selected.\n */\n onSelect: PropTypes.func,\n\n /**\n * Radius around refLocation in meters that is most relevant.\n * Used as granularity for location rank.\n */\n radius: PropTypes.number,\n\n /**\n * Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher.\n * Available values : id, name, coords\n */\n refLocation: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Function to render a different autocomplete input than the default one.\n */\n renderAutocomplete: PropTypes.func,\n\n /**\n * Url of the geOps StopsFinder service.\n */\n url: PropTypes.string,\n};\n\nStopsFinder.defaultProps = {\n agencies: null,\n apiKey: null,\n autocompleteProps: {},\n bbox: null,\n field: null,\n limit: null,\n mots: null,\n onSelect: null,\n radius: null,\n refLocation: null,\n url: null,\n renderAutocomplete: null,\n};\n\nexport default StopsFinder;\n"],"names":["const"],"mappings":"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"}
1
+ {"version":3,"file":"StopsFinder.js","sources":["../../../src/components/StopsFinder/StopsFinder.js"],"sourcesContent":["import React, { useMemo, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Autocomplete } from '@material-ui/lab';\nimport { FaSearch } from 'react-icons/fa';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { StopFinderControl } from 'mobility-toolbox-js/ol';\nimport { Map } from 'ol';\nimport { makeStyles } from '@material-ui/core';\nimport StopsFinderOptions from './StopsFinderOption';\n\nconst useStyles = makeStyles(() => {\n return {\n popupIndicatorOpen: {\n transform: 'rotate(0)',\n },\n };\n});\n\nfunction StopsFinder({\n agencies,\n apiKey,\n autocompleteProps,\n bbox,\n field,\n limit,\n map,\n mots,\n onSelect,\n radius,\n refLocation,\n renderAutocomplete,\n url,\n}) {\n const classes = useStyles();\n const [inputValue, setInputValue] = useState('');\n const [suggestions, setSuggestions] = useState([]);\n const [isLoading, setLoading] = useState(false);\n const [isOpen, setOpen] = useState(false);\n\n const control = useMemo(() => {\n return new StopFinderControl({\n url,\n apiKey,\n target: document.createElement('div'),\n element: document.createElement('div'),\n render(newSuggestions = []) {\n setSuggestions(newSuggestions);\n setLoading(false);\n },\n });\n }, [apiKey, url]);\n\n useEffect(() => {\n if (!inputValue) {\n setSuggestions([]);\n setLoading(false);\n return () => {};\n }\n const abortController = new AbortController();\n setLoading(true);\n control.apiParams = {\n prefAgencies: agencies && agencies.toString(),\n bbox: bbox && bbox.toString(),\n field: field && field.toString(),\n limit,\n mots: mots && mots.toString(),\n radius,\n ref_location: refLocation && refLocation.toString(),\n };\n control.search(inputValue, abortController);\n return () => {\n abortController.abort();\n };\n }, [\n agencies,\n bbox,\n control,\n field,\n inputValue,\n limit,\n mots,\n radius,\n refLocation,\n ]);\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control) {\n return null;\n }\n\n if (renderAutocomplete) {\n return renderAutocomplete(\n suggestions,\n inputValue,\n setInputValue,\n isOpen,\n setOpen,\n isLoading,\n setLoading,\n );\n }\n const textFieldProps = {\n ...((autocompleteProps || {}).textFieldProps || {}),\n };\n const autocProps = { ...autocompleteProps };\n delete autocProps.textFieldProps;\n\n return (\n <Autocomplete\n fullWidth\n autoComplete\n autoHighlight\n selectOnFocus\n getOptionLabel={(option) => {\n return option.properties.name;\n }}\n onChange={(evt, value, reason) => {\n if (onSelect && reason === 'select-option') {\n onSelect(value, evt);\n }\n }}\n popupIcon={<FaSearch focusable={false} size={15} />}\n renderInput={(params) => {\n return (\n <TextField\n label=\"Search stops\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...{\n ...params,\n ...textFieldProps,\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {isLoading && <CircularProgress size={20} />}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n );\n }}\n renderOption={(option) => {\n return <StopsFinderOptions option={option} />;\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...autocProps}\n classes={{ ...classes, ...autocompleteProps.classes }}\n inputValue={inputValue}\n open={isOpen}\n options={suggestions}\n loading={isLoading}\n onOpen={() => {\n setOpen(true);\n }}\n onClose={() => {\n setOpen(false);\n }}\n onInputChange={(evt, val) => {\n setInputValue(val);\n }}\n />\n );\n}\n\nStopsFinder.propTypes = {\n /**\n * Array or a comma separated list of agencies which should be available.\n * Order of these agencies chooses which agency will be preferred.\n * Available values : sbb, db\n */\n agencies: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * geOps api key to access the StopsFinder service.\n */\n apiKey: PropTypes.string,\n\n /**\n * Properties apply to the default [MUI Autocomplete component](https://material-ui.com/api/autocomplete/).\n * We add a custom properties textFieldProps for the default [MUI TextField component](https://material-ui.com/api/text-field/) used by the Autocomplete.\n */\n autocompleteProps: PropTypes.object,\n\n /**\n * minX,minY,maxX,maxY coordinates in WGS84 wherein the station should lie.\n */\n bbox: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Array or a comma separated list of fields which should be used for look up.\n * Available values : id, name, coords\n */\n field: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Control how many matches will be returned.\n */\n limit: PropTypes.number,\n\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Array or a comma separated list of mode of transpaorts which should be available.\n * Available values : bus, ferry, gondola, tram, rail, funicular, cable_car, subway\n */\n mots: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Function called when a suggestion is selected.\n */\n onSelect: PropTypes.func,\n\n /**\n * Radius around refLocation in meters that is most relevant.\n * Used as granularity for location rank.\n */\n radius: PropTypes.number,\n\n /**\n * Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher.\n * Available values : id, name, coords\n */\n refLocation: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Function to render a different autocomplete input than the default one.\n */\n renderAutocomplete: PropTypes.func,\n\n /**\n * Url of the geOps StopsFinder service.\n */\n url: PropTypes.string,\n};\n\nStopsFinder.defaultProps = {\n agencies: null,\n apiKey: null,\n autocompleteProps: {},\n bbox: null,\n field: null,\n limit: null,\n mots: null,\n onSelect: null,\n radius: null,\n refLocation: null,\n url: null,\n renderAutocomplete: null,\n};\n\nexport default StopsFinder;\n"],"names":["const"],"mappings":"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"}
package/package.json CHANGED
@@ -1,30 +1,30 @@
1
1
  {
2
2
  "name": "react-spatial",
3
3
  "description": "Components to build React map apps.",
4
- "version": "1.0.34",
4
+ "version": "1.0.37-beta.2",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
- "@geops/geops-ui": "0.1.11",
8
- "@material-ui/core": "4.11.4",
7
+ "@geops/geops-ui": "0.1.12",
8
+ "@material-ui/core": "4.12.3",
9
9
  "@material-ui/icons": "4.11.2",
10
- "@material-ui/lab": "4.0.0-alpha.58",
11
- "@svgr/webpack": "^5.5.0",
10
+ "@material-ui/lab": "4.0.0-alpha.60",
11
+ "@svgr/webpack": "5.5.0",
12
12
  "abortcontroller-polyfill": "1.7.3",
13
13
  "file-loader": "6.2.0",
14
14
  "query-string": "7.0.1",
15
15
  "radians-degrees": "1.0.0",
16
- "re-resizable": "6.9.0",
16
+ "re-resizable": "6.9.1",
17
17
  "react-autosuggest": "10.1.0",
18
- "react-draggable": "4.4.3",
19
- "react-icons": "4.2.0",
18
+ "react-draggable": "4.4.4",
19
+ "react-icons": "4.3.1",
20
20
  "resize-observer-polyfill": "1.5.1"
21
21
  },
22
22
  "peerDependencies": {
23
- "mapbox-gl": "1.13.0",
24
- "mobility-toolbox-js": "1.3.1",
25
- "ol": "6.4.3",
26
- "react": "16.13.1",
27
- "react-dom": "16.13.1"
23
+ "mapbox-gl": "^1.13.0",
24
+ "mobility-toolbox-js": "^1.6.3",
25
+ "ol": "^6.4.3",
26
+ "react": "^16",
27
+ "react-dom": "^16"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@babel/core": "7.15.0",
@@ -46,9 +46,9 @@
46
46
  "eslint-plugin-import": "2.24.2",
47
47
  "eslint-plugin-jsx-a11y": "6.4.1",
48
48
  "eslint-plugin-prettier": "4.0.0",
49
- "eslint-plugin-react": "7.25.1",
49
+ "eslint-plugin-react": "7.26.1",
50
50
  "eslint-plugin-react-hooks": "4.2.0",
51
- "fixpack": "4.0.0",
51
+ "fixpack": "3.0.6",
52
52
  "generact": "0.4.0",
53
53
  "husky": "4.2.5",
54
54
  "identity-obj-proxy": "3.0.0",
@@ -57,21 +57,21 @@
57
57
  "jest-canvas-snapshot-serializer": "1.0.1",
58
58
  "jest-date-mock": "1.0.8",
59
59
  "jest-fetch-mock": "3.0.3",
60
- "jest-serializer-html": "7.0.0",
60
+ "jest-serializer-html": "7.1.0",
61
61
  "jest-svg-transformer": "1.0.0",
62
62
  "jest-transform-file": "1.1.1",
63
- "jsts": "2.7.1",
64
- "lint-staged": "11.1.2",
65
- "mapbox-gl": "1.13.0",
66
- "mobility-toolbox-js": "1.3.5",
67
- "node-sass": "4.14.1",
68
- "ol": "6.4.3",
69
- "prettier": "2.3.2",
63
+ "jsts": "2.7.3",
64
+ "lint-staged": "11.2.0",
65
+ "mapbox-gl": "1.13.1",
66
+ "mobility-toolbox-js": "1.6.3",
67
+ "node-sass": "6.0.1",
68
+ "ol": "6.6.1",
69
+ "prettier": "2.4.1",
70
70
  "proj4": "2.7.5",
71
71
  "prop-types": "15.7.2",
72
- "react": "16.13.1",
72
+ "react": "16.14.0",
73
73
  "react-app-polyfill": "2.0.0",
74
- "react-dom": "16.13.1",
74
+ "react-dom": "16.14.0",
75
75
  "react-styleguidist": "11.0.8",
76
76
  "react-svg-loader": "3.0.3",
77
77
  "react-test-renderer": "16.13.1",
@@ -81,7 +81,7 @@
81
81
  "stylelint": "13.13.1",
82
82
  "stylelint-config-recommended-scss": "4.3.0",
83
83
  "stylelint-config-standard": "22.0.0",
84
- "stylelint-scss": "3.20.1",
84
+ "stylelint-scss": "3.21.0",
85
85
  "url-loader": "4.1.1",
86
86
  "vinyl-fs": "3.0.3",
87
87
  "webpack": "4.46.0",
@@ -91,8 +91,7 @@
91
91
  "build": "buble --no modules,asyncAwait -i src -o build --objectAssign Object.assign --sourcemap && cp package.json README.md LICENSE build && cp -rf src/images build",
92
92
  "coverage": "yarn test --coverage --coverageDirectory=coverage",
93
93
  "cp": "generact --root src/components",
94
- "doc": "bash ./scripts/prepare-doc.sh",
95
- "doc:server": "styleguidist server",
94
+ "doc": "styleguidist build",
96
95
  "format": "prettier --write 'src/**/*.js' && eslint 'src/**/*.js' --fix && stylelint 'src/**/*.css' 'src/**/*.scss' --fix",
97
96
  "link2": "cmdToAdd=$(node ./scripts/read-pkg-json.js add) && $cmdToAdd && yarn build && cmdToRemove=$(node ./scripts/read-pkg-json.js remove) && $cmdToRemove && cd build && yarn link",
98
97
  "lint": "eslint 'src/**/*.js' && stylelint 'src/**/*.css' 'src/**/*.scss'",
@@ -100,7 +99,7 @@
100
99
  "prebuild": "rm -rf build/",
101
100
  "publish:beta": "yarn publish:public --tag beta",
102
101
  "publish:public": "yarn version && git push origin HEAD && yarn build && yarn publish build/",
103
- "start": "yarn doc:server",
102
+ "start": "styleguidist server",
104
103
  "test": "jest"
105
104
  },
106
105
  "browserslist": [
@@ -15,10 +15,11 @@
15
15
  @import '../../components/Popup/Popup.md.scss';
16
16
  @import '../../components/Zoom/Zoom.md.scss';
17
17
  @import '../../components/RouteSchedule/RouteSchedule.md.scss';
18
+ @import '../../components/Copyright/Copyright.md.scss';
18
19
  @import '../../components/Search/Search.md.scss';
19
20
  @import '../../components/Overlay/Overlay.md.scss';
20
21
 
21
- $link-color: #000;
22
+ $link-color: #000;
22
23
  $link-color-hover: #000;
23
24
 
24
25
  // Load 'a' mixin
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Returns a string representation of a number, with a zero if the number is lower than 10.
3
+ * @ignore
4
+ */
5
+ export var pad = function (integer) {
6
+ return integer < 10 ? ("0" + integer) : integer;
7
+ };
8
+
9
+ /**
10
+ * Returns a 'hh:mm' string from a time in ms.
11
+ * @param {Number} timeInMs Time in milliseconds.
12
+ * @ignore
13
+ */
14
+ export var getHoursAndMinutes = function (timeInMs) {
15
+ if (!timeInMs || timeInMs <= 0) {
16
+ return '';
17
+ }
18
+ var date = new Date(timeInMs);
19
+ return ((pad(date.getHours())) + ":" + (pad(date.getMinutes())));
20
+ };
21
+
22
+ /**
23
+ * Returns a string representing a delay.
24
+ * @param {Number} timeInMs Delay time in milliseconds.
25
+ * @ignore
26
+ */
27
+ export var getDelayString = function (timeInMs) {
28
+ var h = Math.floor(timeInMs / 3600000);
29
+ var m = Math.floor((timeInMs % 3600000) / 60000);
30
+ var s = Math.floor(((timeInMs % 3600000) % 60000) / 1000);
31
+
32
+ if (s === 0 && h === 0 && m === 0) {
33
+ return '0';
34
+ }
35
+ if (s === 0 && h === 0) {
36
+ return (m + "m");
37
+ }
38
+ if (s === 0) {
39
+ return (h + "h" + m + "m");
40
+ }
41
+ if (m === 0 && h === 0) {
42
+ return (s + "s");
43
+ }
44
+ if (h === 0) {
45
+ return (m + "m" + s + "s");
46
+ }
47
+ return (h + "h" + m + "m" + s + "s");
48
+ };
49
+
50
+ //# sourceMappingURL=timeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeUtils.js","sources":["../../src/utils/timeUtils.js"],"sourcesContent":["/**\n * Returns a string representation of a number, with a zero if the number is lower than 10.\n * @ignore\n */\nexport const pad = (integer) => {\n return integer < 10 ? `0${integer}` : integer;\n};\n\n/**\n * Returns a 'hh:mm' string from a time in ms.\n * @param {Number} timeInMs Time in milliseconds.\n * @ignore\n */\nexport const getHoursAndMinutes = (timeInMs) => {\n if (!timeInMs || timeInMs <= 0) {\n return '';\n }\n const date = new Date(timeInMs);\n return `${pad(date.getHours())}:${pad(date.getMinutes())}`;\n};\n\n/**\n * Returns a string representing a delay.\n * @param {Number} timeInMs Delay time in milliseconds.\n * @ignore\n */\nexport const getDelayString = (timeInMs) => {\n const h = Math.floor(timeInMs / 3600000);\n const m = Math.floor((timeInMs % 3600000) / 60000);\n const s = Math.floor(((timeInMs % 3600000) % 60000) / 1000);\n\n if (s === 0 && h === 0 && m === 0) {\n return '0';\n }\n if (s === 0 && h === 0) {\n return `${m}m`;\n }\n if (s === 0) {\n return `${h}h${m}m`;\n }\n if (m === 0 && h === 0) {\n return `${s}s`;\n }\n if (h === 0) {\n return `${m}m${s}s`;\n }\n return `${h}h${m}m${s}s`;\n};\n"],"names":["const"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAOA,GAAK,CAAC,GAAG,YAAG,CAAC,OAAO,EAAK;AAChC,EAAE,OAAO,OAAO,GAAG,EAAE,GAAG,OAAI,QAAS,GAAG,OAAO,CAAC;AAChD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,GAAK,CAAC,kBAAkB,YAAG,CAAC,QAAQ,EAAK;AAChD,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE;AAClC,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAEA,GAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,EAAE,SAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,UAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,GAAK,CAAC,cAAc,YAAG,CAAC,QAAQ,EAAK;AAC5C,EAAEA,GAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;AAC3C,EAAEA,GAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACrD,EAAEA,GAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9D;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACrC,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC1B,IAAI,QAAU,CAAC,OAAG,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACf,IAAI,QAAU,CAAC,SAAI,CAAC,OAAG,CAAC;AACxB,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC1B,IAAI,QAAU,CAAC,OAAG,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACf,IAAI,QAAU,CAAC,SAAI,CAAC,OAAG,CAAC;AACxB,GAAG;AACH,EAAE,QAAU,CAAC,SAAI,CAAC,SAAI,CAAC,OAAG,CAAC;AAC3B,CAAC,CAAC;"}
@@ -0,0 +1,32 @@
1
+ import { getHoursAndMinutes, getDelayString } from './timeUtils';
2
+
3
+ var RealDate = Date;
4
+ describe('timeUtils', function () {
5
+ beforeEach(function () {
6
+ global.Date = jest.fn(function () {
7
+ return {
8
+ getHours: function () {
9
+ return 0;
10
+ },
11
+ getMinutes: function () {
12
+ return 2;
13
+ },
14
+ };
15
+ });
16
+ Object.assign(Date, RealDate);
17
+ });
18
+
19
+ afterEach(function () {
20
+ global.Date = RealDate;
21
+ });
22
+
23
+ test('getHoursAndMinutes should be correct.', function () {
24
+ expect(getHoursAndMinutes(123456)).toBe('00:02');
25
+ });
26
+
27
+ test('getDelayString should be correct.', function () {
28
+ expect(getDelayString(123456)).toBe('2m3s');
29
+ });
30
+ });
31
+
32
+ //# sourceMappingURL=timeUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeUtils.test.js","sources":["../../src/utils/timeUtils.test.js"],"sourcesContent":["import { getHoursAndMinutes, getDelayString } from './timeUtils';\n\nconst RealDate = Date;\ndescribe('timeUtils', () => {\n beforeEach(() => {\n global.Date = jest.fn(() => {\n return {\n getHours: () => {\n return 0;\n },\n getMinutes: () => {\n return 2;\n },\n };\n });\n Object.assign(Date, RealDate);\n });\n\n afterEach(() => {\n global.Date = RealDate;\n });\n\n test('getHoursAndMinutes should be correct.', () => {\n expect(getHoursAndMinutes(123456)).toBe('00:02');\n });\n\n test('getDelayString should be correct.', () => {\n expect(getDelayString(123456)).toBe('2m3s');\n });\n});\n"],"names":["const"],"mappings":"AAAA,SAAS,kBAAkB,EAAE,cAAc,QAAQ,aAAa,CAAC;AACjE;AACAA,GAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,QAAQ,CAAC,WAAW,WAAE,GAAM;AAC5B,EAAE,UAAU,UAAC,GAAM;AACnB,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,UAAC,GAAM;AAChC,MAAM,OAAO;AACb,QAAQ,QAAQ,WAAE,GAAM;AACxB,UAAU,OAAO,CAAC,CAAC;AACnB,SAAS;AACT,QAAQ,UAAU,WAAE,GAAM;AAC1B,UAAU,OAAO,CAAC,CAAC;AACnB,SAAS;AACT,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,SAAS,UAAC,GAAM;AAClB,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC3B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,uCAAuC,WAAE,GAAM;AACtD,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,mCAAmC,WAAE,GAAM;AAClD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;"}