diff --git a/src/utils/clusterIcon.js b/src/utils/clusterIcon.ts
similarity index 78%
rename from src/utils/clusterIcon.js
rename to src/utils/clusterIcon.ts
index 7d45b89..87aaaaa 100644
--- a/src/utils/clusterIcon.js
+++ b/src/utils/clusterIcon.ts
@@ -1,6 +1,6 @@
-import { divIcon } from 'leaflet';
+import { DivIcon, divIcon } from 'leaflet';
-export const clusterIcon = cluster => divIcon({
+export const clusterIcon = (cluster): DivIcon => divIcon({
html: `
${cluster.getChildCount()}
diff --git a/src/utils/format.js b/src/utils/format.ts
similarity index 76%
rename from src/utils/format.js
rename to src/utils/format.ts
index e12db6d..7777f17 100644
--- a/src/utils/format.js
+++ b/src/utils/format.ts
@@ -1,11 +1,13 @@
const ru = [' ','\\.',',',':','\\?','#','Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э'];
const en = ['_','','','','','','Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','','','','','E', 'e'];
-export const toHours = (info) => {
- const hrs = parseInt(Number(info), 10);
+export const toHours = (info: number): string => {
+ const hrs = parseInt(String(info), 10);
const min = Math.round((Number(info) - hrs) * 60);
const lmin = min < 10 ? '0' + min : min;
return `${hrs}:${lmin}`;
};
-export const toTranslit = string => ru.reduce((text, el, i) => (text.replace(new RegExp(ru[i], 'g'), en[i])), (String(string) || ''));
+export const toTranslit = (string: string): string => (
+ ru.reduce((text, el, i) => (text.replace(new RegExp(ru[i], 'g'), en[i])), (String(string) || ''))
+);
diff --git a/src/utils/geom.js b/src/utils/geom.ts
similarity index 56%
rename from src/utils/geom.js
rename to src/utils/geom.ts
index 09bf17f..24ce715 100644
--- a/src/utils/geom.js
+++ b/src/utils/geom.ts
@@ -1,14 +1,17 @@
-export const middleCoord = (l1, l2) => ({
+interface ILatLng {
+ lat: number,
+ lng: number,
+}
+
+export const middleCoord = (l1: ILatLng, l2: ILatLng): ILatLng => ({
lat: (l2.lat + ((l1.lat - l2.lat) / 2)),
lng: (l2.lng + ((l1.lng - l2.lng) / 2))
});
-export const deg2rad = deg => ((deg * Math.PI) / 180);
-export const rad2deg = rad => ((rad / Math.PI) * 180);
+export const deg2rad = (deg: number): number => ((deg * Math.PI) / 180);
+export const rad2deg = (rad: number): number => ((rad / Math.PI) * 180);
-window.rad2deg = rad2deg;
-
-export const findDistance = (t1, n1, t2, n2) => {
+export const findDistance = (t1: number, n1: number, t2: number, n2: number): number => {
// convert coordinates to radians
const lat1 = deg2rad(t1);
const lon1 = deg2rad(n1);
@@ -23,12 +26,11 @@ export const findDistance = (t1, n1, t2, n2) => {
const a = (Math.sin(dlat / 2) ** 2) +
(Math.cos(lat1) * Math.cos(lat2) * (Math.sin(dlon / 2) ** 2));
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // great circle distance in radians
- // const dm = c * 3961; // great circle distance in miles
const dk = c * 6373; // great circle distance in km
- // round the results down to the nearest 1/1000
- // const mi = round(dm);
return (Math.round(dk * 1000) / 1000);
};
-export const getLabelDirection = angle => (((angle % Math.PI) >= -(Math.PI / 2) && (angle % Math.PI) <= (Math.PI / 2)) ? 'left' : 'right');
+export const getLabelDirection = (angle: number): 'left' | 'right' => (
+ ((angle % Math.PI) >= -(Math.PI / 2) && (angle % Math.PI) <= (Math.PI / 2)) ? 'left' : 'right'
+);
diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts
index 6d873d0..db71a08 100644
--- a/src/utils/gpx.ts
+++ b/src/utils/gpx.ts
@@ -5,7 +5,6 @@ export interface IRoutePoint {
lng: number,
}
-
interface IGPXSticker {
latlng: IRoutePoint,
text?: string,
@@ -45,7 +44,7 @@ export const getGPXString = ({ route, title, stickers }: IGetGPXString): string
`);
-export const downloadGPXTrack = ({ track, title }: { track: string, title?: string }) => (
+export const downloadGPXTrack = ({ track, title }: { track: string, title?: string }): void => (
saveAs(
new Blob([track], { type: 'application/gpx+xml;charset=utf-8' }),
`${title || 'track'}.gpx`
diff --git a/src/utils/history.js b/src/utils/history.ts
similarity index 68%
rename from src/utils/history.js
rename to src/utils/history.ts
index 8094dac..d85a771 100644
--- a/src/utils/history.js
+++ b/src/utils/history.ts
@@ -1,8 +1,16 @@
import { history } from '$redux/store';
-export const getPath = () => (window.location && window.location.pathname);
-export const pushPath = url => history.push(url);
-export const replacePath = url => history.replace(url);
+interface IUrlData {
+ path: string,
+ mode: 'edit' | '',
+ host: string,
+ hash: string,
+ protocol: 'http' | 'https',
+}
+
+export const getPath = (): string => (window.location && window.location.pathname);
+export const pushPath = (url: string): string => history.push(url);
+export const replacePath = (url: string): string => history.replace(url);
export const getUrlData = (url = getPath()) => {
const [, path, mode] = url.split('/');
@@ -31,14 +39,15 @@ export const pushLoaderState = state => {
};
export const pushNetworkInitError = () => {
- document.getElementById('loader-error').style.opacity = 1;
+ document.getElementById('loader-error').style.opacity = String(1);
};
export const copyToClipboard = str => {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
- el.style = { position: 'absolute', left: '-9999px' };
+ el.style.position = 'absolute';
+ el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand('copy');