Skip to content

Commit

Permalink
Fix Bugs v1.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
rabbl authored Oct 21, 2020
1 parent 2774a6d commit 90fa70a
Show file tree
Hide file tree
Showing 16 changed files with 145 additions and 133 deletions.
1 change: 1 addition & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ build:dev:
stage: build

script:
- export NODE_OPTIONS="--max-old-space-size=8192"
- yarn install
- REACT_APP_VERSION=$(git describe --tags --always --dirty=+) REACT_APP_API_URL=https://api.dev.inowas.com yarn build
- VERSION=$(git describe --tags --always --dirty=+) && DATE=$(date +%Y-%m-%dT%H:%M:%S) && sed -i "s/@@__VERSION__@@/${VERSION}/g;s/@@__BUILT__@@/${DATE}/g" ./build/index.html
Expand Down
8 changes: 8 additions & 0 deletions src/core/model/rtm/PrometheusDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ class PrometheusDataSource extends GenericObject<IPrometheusDataSource> {
this._props.start = value;
}

get begin(): number {
return this._props.start;
}

set begin(value) {
this._props.start = value;
}

get end(): number | undefined {
return this._props.end;
}
Expand Down
6 changes: 5 additions & 1 deletion src/core/model/rtm/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import DataSourceCollection from './DataSourceCollection';
import DataSourceFactory from './DataSourceFactory';
import FileDataSource from './FileDataSource';
import PrometheusDataSource from './PrometheusDataSource';
import Rtm from './Rtm';
import Sensor from './Sensor';
import SensorDataSource from './SensorDataSource';

export {
DataSourceCollection,
DataSourceFactory,
FileDataSource,
PrometheusDataSource,
Rtm,
Sensor
Sensor,
SensorDataSource,
};
7 changes: 4 additions & 3 deletions src/scenes/shared/uiComponents/DatePicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import {useSelector} from 'react-redux';
import React from 'react';
import SemanticDatepicker from 'react-semantic-ui-datepickers';

interface IProps {
export interface IDatePickerProps {
disabled?: boolean;
inline?: boolean;
inverted?: boolean;
label?: string;
name?: string;
onBlur?: (event?: React.SyntheticEvent) => void;
onChange?: (event: React.SyntheticEvent) => void;
onChange?: (event: React.SyntheticEvent, data: IDatePickerProps) => void;
pointing?: 'left' | 'right' | 'top left' | 'top right';
required?: boolean;
showToday?: boolean;
Expand All @@ -18,7 +19,7 @@ interface IProps {
value: Date | null;
}

const DatePicker = (props: IProps) => {
const DatePicker = (props: IDatePickerProps) => {
const dateFormat = useSelector((state: IRootReducer) => state.user.settings.dateFormat);

return (
Expand Down
78 changes: 38 additions & 40 deletions src/scenes/t10/components/AddSensor.tsx
Original file line number Diff line number Diff line change
@@ -1,58 +1,43 @@
import {Point} from 'geojson';
import {cloneDeep} from 'lodash';
import React, {ChangeEvent, useState} from 'react';
import {Button, Form, Grid, Header, InputOnChangeData, Modal} from 'semantic-ui-react';
import Uuid from 'uuid';
import {Point} from 'geojson';
import {Rtm, Sensor} from '../../../core/model/rtm';
import {SensorMap} from './index';
import React, {ChangeEvent, useState} from 'react';
import Uuid from 'uuid';

interface IProps {
rtm: Rtm;
onAdd: (sensor: Sensor) => void;
onCancel: () => void;
}

interface IActiveInput {
name: string;
value: string;
}

const AddSensor = (props: IProps) => {
const [name, setName] = useState<string>('New Sensor');
const [activeInput, setActiveInput] = useState<IActiveInput | null>(null);
const [geolocation, setGeolocation] = useState<Point | null>(null);
const [lat, setLat] = useState<string | null>(null);
const [long, setLong] = useState<string | null>(null);

const handleChange = (func: any) => (e: any, data: any) => {
const value = data.value ? data.value : data.checked;
func(value);
};

const handleLocalChange = (e: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => setActiveInput({
name: data.name,
value: data.value
});

const handleChangeGeolocation = () => {
if (geolocation && activeInput) {
const n = activeInput.name;
const value = parseFloat(activeInput.value);

if (isNaN(value)) {
setActiveInput(null);
return;
}

const g = cloneDeep(geolocation);
if (n === 'lat') {
g.coordinates[1] = value;
}
const handleLocalChange = (e: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => {
if (data.name === 'lat') {
setLat(data.value);
}

if (n === 'lon') {
g.coordinates[0] = value;
}
if (data.name === 'long') {
setLong(data.value);
}
};

setActiveInput(null);
setGeolocation(g);
const handleChangeGeolocation = () => {
if (latIsValid() && longIsValid()) {
setGeolocation({
type: 'Point',
coordinates: [parseFloat(long as string), parseFloat(lat as string)]
});
}
};

Expand All @@ -68,8 +53,25 @@ const AddSensor = (props: IProps) => {
}
};

const latIsValid = (): boolean => {
if (lat === null) {
return false;
}

return parseFloat(lat) >= -90 && parseFloat(lat) <= 90;
};

const longIsValid = () => {
if (long === null) {
return false;
}
return parseFloat(long) >= -180 && parseFloat(long) <= 180;
};

const handleChangeGeometry = (geometry: Point) => {
setGeolocation(geometry);
setLong(geometry.coordinates[0].toString(10));
setLat(geometry.coordinates[1].toString(10));
};

return (
Expand All @@ -87,26 +89,22 @@ const AddSensor = (props: IProps) => {
value={name}
onChange={handleChange(setName)}
/>
{geolocation &&
<div>
<Form.Input
label={'Lat'}
name={'lat'}
value={activeInput && activeInput.name === 'lat' ?
activeInput.value : geolocation.coordinates[1]}
value={lat ? lat : ''}
onBlur={handleChangeGeolocation}
onChange={handleLocalChange}
/>
<Form.Input
label={'Long'}
name={'lon'}
value={activeInput && activeInput.name === 'lon' ?
activeInput.value : geolocation.coordinates[0]}
value={long ? long : ''}
onBlur={handleChangeGeolocation}
onChange={handleLocalChange}
/>
</div>
}
</Form>
</Grid.Column>
<Grid.Column width={12}>
Expand Down
26 changes: 13 additions & 13 deletions src/scenes/t10/components/DataSourceTimeRange.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
import moment from 'moment';
import React from 'react';
import {DataSource} from '../../../core/model/rtm/Sensor.type';
import React from 'react';
import moment from 'moment';

interface IProps {
datasource: DataSource | null;
color?: string;
dateTimeFormat?: 'string'
}

const DsTimeRange = (props: IProps) => {

const {datasource} = props;
if (!datasource) {
if (!props.datasource) {
return null;
}

const {data} = datasource;
if (!data) {
return null;
}

const beginTimeStamp = data[0].timeStamp;
const endTimeStamp = data[data.length - 1].timeStamp;
const beginTimeStamp = props.datasource.begin;
const endTimeStamp = props.datasource.end;
const dateTimeFormat = props.dateTimeFormat ? props.dateTimeFormat : 'YYYY/MM/DD';

let begin = '';
if (beginTimeStamp) {
begin = moment.unix(beginTimeStamp).format('YYYY/MM/DD');
begin = moment.unix(beginTimeStamp).format(dateTimeFormat);
}

let end = '';
if (endTimeStamp) {
end = moment.unix(endTimeStamp).format('YYYY/MM/DD');
end = moment.unix(endTimeStamp).format(dateTimeFormat);
}

if (!endTimeStamp) {
end = moment.utc().format(dateTimeFormat);
}

return <span>{begin} - {end}</span>;
Expand Down
14 changes: 7 additions & 7 deletions src/scenes/t10/components/DataSources.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import React, {useEffect, useState} from 'react';
import {Button, Dropdown, Grid, Header, Icon, Label, Popup, Segment, Table} from 'semantic-ui-react';
import {DataSourceCollection, DataSourceFactory, Rtm} from '../../../core/model/rtm';
import FileDataSource from '../../../core/model/rtm/FileDataSource';
import PrometheusDataSource from '../../../core/model/rtm/PrometheusDataSource';
import {DataSource, IDataSource, ISensorParameter} from '../../../core/model/rtm/Sensor.type';
import SensorDataSource from '../../../core/model/rtm/SensorDataSource';
import {colors, dataSourceList} from '../defaults';
import {DataSourceCollection, DataSourceFactory, Rtm} from '../../../core/model/rtm';
import {
DataSourcesChart,
DataSourceTimeRange,
DataSourcesChart,
FileDatasourceEditor,
PrometheusDatasourceEditor,
SensorDatasourceEditor,
TinyLineChart
} from './index';
import {colors, dataSourceList} from '../defaults';
import FileDataSource from '../../../core/model/rtm/FileDataSource';
import PrometheusDataSource from '../../../core/model/rtm/PrometheusDataSource';
import React, {useEffect, useState} from 'react';
import SensorDataSource from '../../../core/model/rtm/SensorDataSource';

interface IProps {
rtm: Rtm;
Expand Down
13 changes: 6 additions & 7 deletions src/scenes/t10/components/DataSourcesChart.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {LTOB} from 'downsample';
// @ts-ignore todo
import {DataPoint} from 'downsample/dist/types';
import moment from 'moment';
import React, {useEffect, useRef, useState} from 'react';
import {ResponsiveContainer, Scatter, ScatterChart, XAxis, YAxis} from 'recharts';
import {Button, Icon} from 'semantic-ui-react';
import {DataPoint} from 'downsample';
import {DataSourceCollection} from '../../../core/model/rtm';
import ProcessingCollection from '../../../core/model/rtm/processing/ProcessingCollection';
import {IDateTimeValue} from '../../../core/model/rtm/Sensor.type';
import {LTOB} from 'downsample';
import {ResponsiveContainer, Scatter, ScatterChart, XAxis, YAxis} from 'recharts';
import {exportChartData, exportChartImage} from '../../shared/simpleTools/helpers';
import ProcessingCollection from '../../../core/model/rtm/processing/ProcessingCollection';
import React, {useEffect, useRef, useState} from 'react';
import moment from 'moment';

interface IProps {
dataSources: DataSourceCollection;
Expand Down
37 changes: 19 additions & 18 deletions src/scenes/t10/components/FileDatasourceEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import {LTOB} from 'downsample';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore todo
import {DataPoint} from 'downsample/dist/types';
import {cloneDeep} from 'lodash';
import moment from 'moment';
import * as Papa from 'papaparse';
import {ParseResult} from 'papaparse';
import React, {ChangeEvent, useEffect, useState} from 'react';
import {ResponsiveContainer, Scatter, ScatterChart, XAxis, YAxis} from 'recharts';
import {Button, Form, Grid, Header, Label, List, Modal, Segment} from 'semantic-ui-react';
import {DataPoint} from 'downsample';
import {DatePicker} from '../../shared/uiComponents';
import {FileDataSource} from '../../../core/model/rtm';
import {IDateTimeValue, IFileDataSource} from '../../../core/model/rtm/Sensor.type';
import {LTOB} from 'downsample';
import {ParseResult} from 'papaparse';
import {ResponsiveContainer, Scatter, ScatterChart, XAxis, YAxis} from 'recharts';
import {cloneDeep} from 'lodash';
import React, {ChangeEvent, useEffect, useState} from 'react';
import moment from 'moment';

interface IProps {
dataSource?: FileDataSource;
Expand Down Expand Up @@ -303,34 +302,36 @@ const FileDatasourceEditor = (props: IProps) => {
<Form>
<Form.Group>
<Form.Checkbox
disabled={true}
style={{marginTop: '30px'}}
toggle={true}
checked={beginEnabled}
onChange={handleChange(setBeginEnabled)}
/>
<Form.Input
<DatePicker
label={'Start'}
type={'date'}
value={moment.unix(lBegin).format('YYYY-MM-DD')}
disabled={!beginEnabled}
name={'start'}
value={moment.unix(lBegin).toDate()}
onChange={handleChange((d) => setLBegin(moment.utc(d).unix()))}
onBlur={handleBlur(() => setBegin(lBegin))}
size={'small'}
/>
</Form.Group>
<Form.Group>
<Form.Checkbox
disabled={true}
style={{marginTop: '30px'}}
toggle={true}
checked={endEnabled}
onChange={handleChange(setEndEnabled)}
/>
<Form.Input
<DatePicker
label={'End'}
type={'date'}
value={moment.unix(lEnd).format('YYYY-MM-DD')}
disabled={!endEnabled}
name={'end'}
value={moment.unix(lEnd).toDate()}
onChange={handleChange((d) => setLEnd(moment.utc(d).unix()))}
onBlur={handleBlur(() => setEnd(lEnd))}
onBlur={handleBlur(() => setEnd(lBegin))}
size={'small'}
/>
</Form.Group>
</Form>
Expand Down
Loading

0 comments on commit 90fa70a

Please sign in to comment.