From a5d7c523c7958ae8fa0fea175f5ce97a0fdf4e19 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 12:52:54 +0530 Subject: [PATCH 1/9] fix(warning): Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function fix(styled-component): To resolve this only create new Styled Components outside of any render method and function component improved(rendering): Very slow network rendering (https://github.com/almende/vis/issues/3187) --- components/FilterPanel/index.js | 69 ++++++++++++++++---------------- components/NetworkMap/index.js | 30 ++++++++++---- components/SidePanel/datagrid.js | 26 ++++++------ 3 files changed, 70 insertions(+), 55 deletions(-) diff --git a/components/FilterPanel/index.js b/components/FilterPanel/index.js index 9e24e5b..22d9afb 100644 --- a/components/FilterPanel/index.js +++ b/components/FilterPanel/index.js @@ -31,8 +31,6 @@ const filters = [ { name: 'Travel', icon: abroad, add: addTravel, remove: removeTravel }, ] -//{ name: 'Travel', icon: abroad, add: addTravel, remove: removeTravel }, - const HeaderContainer = styled.div` padding-top: 10px; background-color: #f2f2f2; @@ -64,30 +62,43 @@ const FilterMenuContainer = styled.div` } ` -const FilterCategory = ({ filter, onClick, selected }) => { - const FilterContainer = styled.div` +const FilterContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-evenly; + height: '20vh'; + user-select: none; + background-color: ${props => (props.selected ? '#d6d6d6' : '#F2F2F2')}; + transition: all 0.2s ease-out; + cursor: pointer; + &:hover { + background-color: #d7d7d7; + } +` + +const FilterName = styled.div` + text-transform: uppercase; + font-size: 11px; +` + +const FilterIcon = styled.img` + width: 40px; +` + +const FilterHeader = styled.div` + text-align: center; + text-transform: uppercase; + font-size: 14px; + + @media screen and (max-width: 768px) { display: flex; - flex-direction: column; align-items: center; - justify-content: space-evenly; - height: '20vh'; - user-select: none; - background-color: ${props => (props.selected ? '#d6d6d6' : '#F2F2F2')}; - transition: all 0.2s ease-out; - cursor: pointer; - &:hover { - background-color: #d7d7d7; - } - ` - const FilterName = styled.div` - text-transform: uppercase; - font-size: 11px; - ` - - const FilterIcon = styled.img` - width: 40px; - ` + justify-content: center; + } +` +const FilterCategory = ({ filter, onClick, selected }) => { return ( @@ -122,17 +133,7 @@ const FilterPanel = ({ console.log(newGraph) updateGraph(newGraph) } - const FilterHeader = styled.div` - text-align: center; - text-transform: uppercase; - font-size: 14px; - - @media screen and (max-width: 768px) { - display: flex; - align-items: center; - justify-content: center; - } - ` + return ( Cluster Filter diff --git a/components/NetworkMap/index.js b/components/NetworkMap/index.js index 5a77c21..271b15a 100644 --- a/components/NetworkMap/index.js +++ b/components/NetworkMap/index.js @@ -2,7 +2,13 @@ import React, { useState, useEffect, useRef, useMemo } from 'react' import Graph from 'react-graph-vis' import { Tooltip, TooltipArrow, TooltipInner } from 'styled-tooltip-component' import { connect, useSelector } from 'react-redux' -import { updateGraph, updatePatients, updateLastRefreshed, selectPatient, updateStates } from '../Redux/actions' +import { + updateGraph, + updatePatients, + updateLastRefreshed, + selectPatient, + updateStates, +} from '../Redux/actions' import { rowsToGraph, letterToCode } from '../../util/parse' import normalize from '../../util/normalize' import DatePicker from '../DatePicker' @@ -18,7 +24,7 @@ const NetworkMap = ({ selectPatient, height, width, - states + states, }) => { const graphRef = useRef() const [isLoading, setIsLoading] = useState(true) @@ -32,7 +38,7 @@ const NetworkMap = ({ selected: state.patient, })) useEffect(() => { - if(!states){ + if (!states) { fetch('https://api.covid19india.org/state_district_wise.json', { cors: 'no-cors', method: 'GET', @@ -40,9 +46,9 @@ const NetworkMap = ({ }) .then(resp => resp.json()) .then(res => { - if(res){ - let stateNames = Object.keys(res); - updateStates(stateNames); + if (res) { + let stateNames = Object.keys(res) + updateStates(stateNames) } }) } @@ -73,7 +79,7 @@ const NetworkMap = ({ scale: 1.5, offset: { x: 0, y: 0 }, animation: { - duration: 500, + duration: 250, easingFunction: 'easeInCubic', }, } @@ -99,9 +105,13 @@ const NetworkMap = ({ const options = { layout: { hierarchical: false, + improvedLayout: true, }, edges: { color: '#000000', + smooth: { + type: 'continuous' + }, }, nodes: { chosen: { @@ -116,6 +126,10 @@ const NetworkMap = ({ navigationButtons: true, hover: true, }, + physics: { + enabled: true + }, + autoResize: true } const events = { @@ -181,7 +195,7 @@ const NetworkMap = ({ const mapStateToProps = state => { let { graph, searchTerm, filter, states } = state - return { graph, searchTerm, filter, states} + return { graph, searchTerm, filter, states } } export default connect(mapStateToProps, { diff --git a/components/SidePanel/datagrid.js b/components/SidePanel/datagrid.js index f902f1b..00585cf 100644 --- a/components/SidePanel/datagrid.js +++ b/components/SidePanel/datagrid.js @@ -20,21 +20,21 @@ const A = styled.a` padding-bottom: 10px; ` -function Cell({ name, children }) { - const CellContainer = styled.div` - font-family: 'Lato', sans-serif; - background: #fff; - border-radius: 5px; - border: 1px solid #e7e7e7; - padding: 15px 20px; - ` +const CellContainer = styled.div` +font-family: 'Lato', sans-serif; +background: #fff; +border-radius: 5px; +border: 1px solid #e7e7e7; +padding: 15px 20px; +` - const Name = styled.div` - font-weight: 600; - text-transform: uppercase; - margin-bottom: 10px; - ` +const Name = styled.div` +font-weight: 600; +text-transform: uppercase; +margin-bottom: 10px; +` +function Cell({ name, children }) { return ( {name} From 8fe4d5d5959d31be53e701f8883ba2ccb28232ef Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 13:23:40 +0530 Subject: [PATCH 2/9] fix(state): Error: Array index '-1' has to be an integer --- util/filters/state.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/util/filters/state.js b/util/filters/state.js index c163f90..f164b12 100644 --- a/util/filters/state.js +++ b/util/filters/state.js @@ -64,7 +64,9 @@ export const removeStates = (graph, patients, states) => { return o.to == edgeTo && o.from === edgeFrom }) - graph = dotProp.delete(graph, `edges.${edgeIndex}`) + if (edgeIndex !== -1) { + graph = dotProp.delete(graph, `edges.${edgeIndex}`) + } } return graph From c647e71115c061f96b21ef649d91516e53445a96 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 13:47:30 +0530 Subject: [PATCH 3/9] fix(travel): Error: Array index '-1' has to be an integer --- util/filters/travel.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/filters/travel.js b/util/filters/travel.js index 5503574..6005a7e 100644 --- a/util/filters/travel.js +++ b/util/filters/travel.js @@ -107,8 +107,9 @@ export const removeTravel = (graph, patients) => { let edgeIndex = _.findIndex(graph.edges, function(o) { return o.to == edge.to && o.from === edge.from }) - - graph = dotProp.delete(graph, `edges.${edgeIndex}`) + if (edgeIndex !== -1) { + graph = dotProp.delete(graph, `edges.${edgeIndex}`) + } }) } } From 71b93738c9745528e275c41fc88ba15acb5d4dc5 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 14:55:09 +0530 Subject: [PATCH 4/9] fix: loader --- components/Loader.js | 197 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 components/Loader.js diff --git a/components/Loader.js b/components/Loader.js new file mode 100644 index 0000000..ce34c4c --- /dev/null +++ b/components/Loader.js @@ -0,0 +1,197 @@ +import React from 'react' +import styled, { keyframes } from 'styled-components' + +const commonStyle = { + margin: 'auto', + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, +} + +const rotate = keyframes` + 50% { + transform: rotate(360deg) scale(0.7); + } +` + +const LoadContainer = styled.div` + width: ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px; + height: ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px; + position: relative; + /* overflow: hidden; */ + > div:nth-child(1) { + height: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 0 + ); + width: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 0 + ); + top: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 0 + ); + left: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 0 + ); + animation: ${rotate} ${props => props.speed || 2}s infinite; + animation-delay: calc(${props => props.speed || 2}s * 0.1 * 4); + z-index: 5; + } + > div:nth-child(2) { + height: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 1 + ); + width: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 1 + ); + top: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 1 + ); + left: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 1 + ); + animation: ${rotate} ${props => props.speed || 2}s infinite; + animation-delay: calc(${props => props.speed || 2}s * 0.1 * 3); + z-index: 4; + } + > div:nth-child(3) { + height: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 2 + ); + width: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 2 + ); + top: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 2 + ); + left: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 2 + ); + animation: ${rotate} ${props => props.speed || 2}s infinite; + animation-delay: calc(${props => props.speed || 2}s * 0.1 * 2); + z-index: 3; + } + > div:nth-child(4) { + height: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 3 + ); + width: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 3 + ); + top: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 3 + ); + left: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 3 + ); + animation: ${rotate} ${props => props.speed || 2}s infinite; + animation-delay: calc(${props => props.speed || 2}s * 0.1 * 1); + z-index: 2; + } + > div:nth-child(5) { + height: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 4 + ); + width: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.2 * 4 + ); + top: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 4 + ); + left: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.1 * 4 + ); + animation: ${rotate} ${props => props.speed || 2}s infinite; + animation-delay: calc(${props => props.speed || 2}s * 0.1 * 0); + z-index: 1; + } +` + +const HalfCircle = styled.div` + box-sizing: border-box; + border-radius: 50%; + position: absolute; + border: calc( + ${props => + props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * + 0.05 + ) + solid transparent; + border-top-color: ${props => props.color || '#00adb5'}; + border-left-color: ${props => props.color || '#00adb5'}; +` + +const Loader = ({ style = commonStyle, color, speed, size = 'default' }) => { + return ( + + {Array.from(Array(5)).map((item, index) => ( + + ))} + + ) +} + +export default Loader From d63874001c1727c83327556305a1fdd9b1f3eee2 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 19:18:36 +0530 Subject: [PATCH 5/9] fix(travel:filter): TypeError: Cannot read property 'forEach' of undefined --- util/filters/travel.js | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/util/filters/travel.js b/util/filters/travel.js index 6005a7e..e3a84a9 100644 --- a/util/filters/travel.js +++ b/util/filters/travel.js @@ -8,8 +8,9 @@ export const addTravel = (graph, patients) => { let locations = {} for (let patientId in patients) { - if (patients[patientId].place_attributes !== null) { - patients[patientId].place_attributes.forEach(loc => { + const place_attributes = patients[patientId].place_attributes + if (place_attributes && place_attributes.length) { + place_attributes.forEach(loc => { if (!locations[hash(loc.place)]) { locations[hash(loc.place)] = loc } @@ -30,11 +31,9 @@ export const addTravel = (graph, patients) => { // Add edges from patient to location for (let patientId in patients) { - if ( - patients[patientId].place_attributes !== null && - patients[patientId].place_attributes[0] - ) { - patients[patientId].place_attributes.forEach(loc => { + const place_attributes = patients[patientId].place_attributes + if (place_attributes && place_attributes[0]) { + place_attributes.forEach(loc => { let edge = { from: hash(loc.place), to: patients[patientId].patientId, @@ -86,11 +85,9 @@ export const removeTravel = (graph, patients) => { } for (let patientId in patients) { - if ( - patients[patientId].place_attributes !== null && - patients[patientId].place_attributes[0] - ) { - patients[patientId].place_attributes.forEach(loc => { + const place_attributes = patients[patientId].place_attributes + if (place_attributes && place_attributes[0]) { + place_attributes.forEach(loc => { let edge = { from: hash(loc.place), to: patients[patientId].patientId, From be333da071aeb67d0421bd28d2caa23e4bbf6f7c Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 19:42:10 +0530 Subject: [PATCH 6/9] fix(travel:filter): TypeError: Cannot read property 'forEach' of undefined (removeTravel) --- util/filters/travel.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/filters/travel.js b/util/filters/travel.js index e3a84a9..d2e51a9 100644 --- a/util/filters/travel.js +++ b/util/filters/travel.js @@ -59,8 +59,9 @@ export const removeTravel = (graph, patients) => { let locations = {} for (let patientId in patients) { - if (patients[patientId].place_attributes !== null) { - patients[patientId].place_attributes.forEach(loc => { + const place_attributes = patients[patientId].place_attributes + if (place_attributes && place_attributes.length) { + place_attributes.forEach(loc => { if (!locations[hash(loc.place)]) { locations[hash(loc.place)] = loc } From 19a10f888092dd84eaa55f31d57a6b04c439b5e2 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Tue, 31 Mar 2020 20:01:03 +0530 Subject: [PATCH 7/9] feat: loader functionality added --- components/Loader.js | 5 +- components/NetworkMap/index.js | 112 +++++++++++++++++++-------------- components/Redux/actions.js | 1 - components/Redux/reducers.js | 15 ++--- 4 files changed, 76 insertions(+), 57 deletions(-) diff --git a/components/Loader.js b/components/Loader.js index ce34c4c..566d8aa 100644 --- a/components/Loader.js +++ b/components/Loader.js @@ -22,7 +22,6 @@ const LoadContainer = styled.div` height: ${props => props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px; position: relative; - /* overflow: hidden; */ > div:nth-child(1) { height: calc( ${props => @@ -180,8 +179,8 @@ const HalfCircle = styled.div` 0.05 ) solid transparent; - border-top-color: ${props => props.color || '#00adb5'}; - border-left-color: ${props => props.color || '#00adb5'}; + border-top-color: ${props => props.color || '#201AA2'}; + border-left-color: ${props => props.color || '#201AA2'}; ` const Loader = ({ style = commonStyle, color, speed, size = 'default' }) => { diff --git a/components/NetworkMap/index.js b/components/NetworkMap/index.js index 271b15a..b2474ac 100644 --- a/components/NetworkMap/index.js +++ b/components/NetworkMap/index.js @@ -9,6 +9,9 @@ import { selectPatient, updateStates, } from '../Redux/actions' +import { store } from '../Redux/store' +import Loader from '../Loader' +import actionTypes from '../Redux/actionTypes' import { rowsToGraph, letterToCode } from '../../util/parse' import normalize from '../../util/normalize' import DatePicker from '../DatePicker' @@ -27,7 +30,7 @@ const NetworkMap = ({ states, }) => { const graphRef = useRef() - const [isLoading, setIsLoading] = useState(true) + const [showLoader, setShowLoader] = useState(true) const [toolTipPosition, setToolTipPosition] = useState(null) const [tooltipContent, setToolTipContent] = useState('') const toolTipVisible = useMemo(() => { @@ -37,6 +40,37 @@ const NetworkMap = ({ searchTerm: state.searchTerm, selected: state.patient, })) + + const options = { + layout: { + hierarchical: false, + improvedLayout: true, + }, + edges: { + color: '#000000', + smooth: { + type: 'continuous', + }, + }, + nodes: { + chosen: { + node: (values, id, selected, hovering) => { + values.color = selected ? '#000' : 'green' + }, + }, + }, + height: height, + width: width, + interaction: { + navigationButtons: true, + hover: true, + }, + physics: { + enabled: true, + }, + autoResize: true, + } + useEffect(() => { if (!states) { fetch('https://api.covid19india.org/state_district_wise.json', { @@ -52,9 +86,7 @@ const NetworkMap = ({ } }) } - }) - useEffect(() => { fetch('https://api.rootnet.in/covid19-in/unofficial/covid19india.org', { cors: 'no-cors', method: 'GET', @@ -65,10 +97,9 @@ const NetworkMap = ({ updateGraph(rowsToGraph(res.data.rawPatientData)) updatePatients(normalize(res.data.rawPatientData)) updateLastRefreshed(res.data.lastRefreshed) - setIsLoading(false) }) .catch(err => console.log('error', err)) - }, [isLoading]) + }, []) useEffect(() => { // TODO: Figure out a way to make this do-able with patient Id search @@ -85,9 +116,6 @@ const NetworkMap = ({ } graphRef.current.Network.moveTo(moveParams) } - }, [selected]) - - useEffect(() => { // TODO: Add search by age, district, etc. if (graphRef.current && searchTerm) { // Make sure the ref is ready @@ -100,37 +128,25 @@ const NetworkMap = ({ // None found. TODO: Add a UI response } } - }, [searchTerm]) - const options = { - layout: { - hierarchical: false, - improvedLayout: true, - }, - edges: { - color: '#000000', - smooth: { - type: 'continuous' - }, - }, - nodes: { - chosen: { - node: (values, id, selected, hovering) => { - values.color = selected ? '#000' : 'green' - }, - }, - }, - height: height, - width: width, - interaction: { - navigationButtons: true, - hover: true, - }, - physics: { - enabled: true - }, - autoResize: true - } + const unsubscribe = store.subscribe(() => { + const { type } = store.getState() + if (type === actionTypes.UPDATE_GRAPH) { + if (!showLoader) { + setShowLoader(true) + } + if (showLoader) { + const timeout = setTimeout(() => { + setShowLoader(false) + }, 500) + return () => { + clearTimeout(timeout) + unsubscribe() + } + } + } + }) + }, [selected, searchTerm, showLoader]) const events = { select: function(event) { @@ -162,18 +178,22 @@ const NetworkMap = ({ setToolTipPosition(null) }, } - + return (
- {isLoading ? null : ( + {showLoader ? ( + + ) : ( <> - + {graph && ( + + )} {toolTipVisible && ( (dispatch, getState) => { } const updateStates = states => (dispatch, getState) => { - console.log('Action updateStates', states); dispatch({ type: actionTypes.UPDATE_STATES, payload: { diff --git a/components/Redux/reducers.js b/components/Redux/reducers.js index f774e3b..f6b0dd9 100644 --- a/components/Redux/reducers.js +++ b/components/Redux/reducers.js @@ -20,26 +20,27 @@ const initialState = { // Export the Device Reducer. export default (state = initialState, action) => { + const type = action.type switch (action.type) { case actionTypes.SELECT_FILTER: { const { filter } = action.payload - return { ...state, filter: filter } + return { ...state, filter, type } } case actionTypes.SEARCH: { const { term } = action.payload - return { ...state, searchTerm: term } + return { ...state, searchTerm: term, type } } case actionTypes.UPDATE_GRAPH: { const { graph } = action.payload - return { ...state, graph: graph } + return { ...state, graph, type } } case actionTypes.UPDATE_PATIENTS: { const { patients } = action.payload - return { ...state, patients: patients, patient: patients.byId[251] } // `P1` in code + return { ...state, patients, patient: patients.byId[251], type } // `P1` in code } case actionTypes.UPDATE_LAST_REFRESHED: { const { lastRefreshed } = action.payload - return { ...state, lastRefreshed: lastRefreshed } + return { ...state, lastRefreshed, type } } case actionTypes.SELECT_PATIENT: { const { id, coords } = action.payload @@ -49,14 +50,14 @@ export default (state = initialState, action) => { ...patients.byId[id], coords } - return existingPatient ? { ...state, patient } : state + return existingPatient ? { ...state, patient, type } : {...state, type} } case actionTypes.UPDATE_STATES: { let states = action.payload.states.reduce((accumulator, currentValue) => { accumulator[currentValue] = hash(currentValue); return accumulator; },{}); - return {...state, states: states} + return {...state, states, type} } default: return state From 9faf1897b07685e23e07b4e7866bcaec46723fa5 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Wed, 1 Apr 2020 13:14:35 +0530 Subject: [PATCH 8/9] refactor(icon): from png > svg improved(render): network performance improved due to svg use refactor(img): image folder refactor --- components/NetworkMapLegend/index.js | 16 +++---- images/female/cured.png | Bin 11190 -> 0 bytes images/female/dead.png | Bin 11217 -> 0 bytes images/female/hospitalized.png | Bin 11156 -> 0 bytes images/filter/abroad.png | Bin 1276 -> 0 bytes images/filter/city.png | Bin 730 -> 0 bytes images/filter/p2p.png | Bin 1892 -> 0 bytes images/filter/state.png | Bin 1073 -> 0 bytes images/index.js | 32 ++++++------- images/male/cured.png | Bin 11233 -> 0 bytes images/male/dead.png | Bin 11136 -> 0 bytes images/male/hospitalized.png | Bin 11165 -> 0 bytes images/nodes/city.png | Bin 5314 -> 0 bytes images/nodes/plane.png | Bin 6745 -> 0 bytes images/nodes/plane_local.png | Bin 6476 -> 0 bytes images/nodes/state.png | Bin 10852 -> 0 bytes images/svg/abroad.svg | 1 + images/svg/city.svg | 1 + images/svg/female/cured.svg | 1 + images/svg/female/dead.svg | 1 + images/svg/female/hospitalized.svg | 1 + images/svg/male/cured.svg | 1 + images/svg/male/dead.svg | 1 + images/svg/male/hospitalized.svg | 1 + images/{ => svg}/man.png | Bin images/svg/man.svg | 2 + images/svg/p2p.svg | 2 + images/svg/plane.svg | 2 + images/svg/plane_local.svg | 1 + images/svg/state.svg | 1 + images/{ => svg}/woman.png | Bin images/svg/woman.svg | 2 + util/filters/city.js | 12 ++--- util/filters/state.js | 4 +- util/filters/travel.js | 6 +-- util/parse.js | 65 +-------------------------- 36 files changed, 52 insertions(+), 101 deletions(-) delete mode 100644 images/female/cured.png delete mode 100644 images/female/dead.png delete mode 100644 images/female/hospitalized.png delete mode 100644 images/filter/abroad.png delete mode 100644 images/filter/city.png delete mode 100644 images/filter/p2p.png delete mode 100644 images/filter/state.png delete mode 100644 images/male/cured.png delete mode 100644 images/male/dead.png delete mode 100644 images/male/hospitalized.png delete mode 100644 images/nodes/city.png delete mode 100644 images/nodes/plane.png delete mode 100644 images/nodes/plane_local.png delete mode 100644 images/nodes/state.png create mode 100644 images/svg/abroad.svg create mode 100644 images/svg/city.svg create mode 100644 images/svg/female/cured.svg create mode 100644 images/svg/female/dead.svg create mode 100644 images/svg/female/hospitalized.svg create mode 100644 images/svg/male/cured.svg create mode 100644 images/svg/male/dead.svg create mode 100644 images/svg/male/hospitalized.svg rename images/{ => svg}/man.png (100%) create mode 100644 images/svg/man.svg create mode 100644 images/svg/p2p.svg create mode 100644 images/svg/plane.svg create mode 100644 images/svg/plane_local.svg create mode 100644 images/svg/state.svg rename images/{ => svg}/woman.png (100%) create mode 100644 images/svg/woman.svg diff --git a/components/NetworkMapLegend/index.js b/components/NetworkMapLegend/index.js index d8fb572..56a9dd5 100644 --- a/components/NetworkMapLegend/index.js +++ b/components/NetworkMapLegend/index.js @@ -4,10 +4,10 @@ import { male_hosp, male_cured, male_dead, - state_node, - city_node, - plane_abroad_node, - plane_local_node, + state, + city, + plane_abroad, + plane_local, } from '../../images/index' @@ -79,14 +79,14 @@ const NetworkMapLegend = ({ currentFilter }) => { {['State', 'City'].includes(currentFilter) ? - + : null } {currentFilter === 'City' ? - + : null @@ -94,11 +94,11 @@ const NetworkMapLegend = ({ currentFilter }) => { {currentFilter === 'Travel' ? <> - + - + diff --git a/images/female/cured.png b/images/female/cured.png deleted file mode 100644 index b3074876d10f433ff6a9be6f3ac7db651abb5831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11190 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 diff --git a/images/female/dead.png b/images/female/dead.png deleted file mode 100644 index 204af924caa5476ee27a5250880d0ca07edc8abc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11217 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Û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 RLm_a{wAA!f8IM^sjrs3`b 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 diff --git a/images/filter/abroad.png b/images/filter/abroad.png deleted file mode 100644 index dc6d14b843371ce033b533315c3c2755ec5cb7db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1276 zcmeAS@N?(olHy`uVBq!ia0vp^DIm``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB?nF-)$B+ufw{!i29yy2{ljqtsDe)oW3}GJi zjtZu^bFFtao;kOvMe)_4xfM*Q=GGrs{#iB_Gsm1ecX4V^Tcy9V=u@7yC6muxKleK{ zurtg=aeqlY?;bvvu0yZ_F0_pW#w5pnkO zp4+cqzm_f%m>%Vke2v#K-t1)H904W8bKS4j-0pWmDmfl zuKZ^Y;gHZ`;SptO<6?AfZCL1ZAV4u;g@6H3!VkM9=!;A~e*F0QCkhviUb}t!_SK-3 zB|#b@uckCy%qX#v;j5j#>XBlr$JNB0G4~!_<(p}oV0irZ@87XS3>JzH@9?ioSRb^D zXWqPdVHcyhdnOdTYcKJCJwPEY%&lb(t@}z9CEK=X3M|a`?KpbDO!fMO?Lx1n zIp3ZV<7|IfY*Kl~>`Cq~(v?_rw)k$8`n8gqkuNuRO-o&tlMGjGuo3Uy5U0Bvf!Z!# zFwat4*S<|NvZYQ*Q68vzXR={k)I#~_6YM}8L7abQwmuQLB{XMmL2dV=ho3jrO}w4+ zVb@k5@oyJDKY!h&3-diYQd~Di>`}1x&pFWlS%KphJ3IUIPu*dwuRfS8{d$`>H#c`^ z-r4P&&YdpJyIQ2UcEa3gb9ZbNS!_1p{MN{0lBpWa>sNW(Jq*`*Sfr!q`=kC_rDA{K zbnT*R8rGJf`xKrq{qr&G6baIr`sBgtDMm_-;?HfotlyScUAuRJyY=+qlfT#6+S_0M znKa?H0(j+)s3!Po*%ci_PC|oxtGjYJ6mYk!Q%?YmHYM9hr9OO$<{t2oBX5x z>dVl7XI!`zUQh5nCCmNxv+&!(?d8o1iBdH=%yDy0B|Dv)b#g(&f3t6&dqtEUo?;hE zZ~1IwG>a$o`iv>c_Uf`C9{vtMhbgH~4D zkor@1wISU6IJ=?XslO`LWm7vH8@DWxif?%=c-tboH*V+gx}|!5SHHQECO2ar-$usy z{3mC2y*z3e%w4(pF{5U^VBCUZ;w$~!83?7?1KbloDc3DG&*PkM=j1|9KBijrc9E`6 zb7su8<9xGyizlP`_8$3^u)2_k{1>F=J^x$uH2U^~D31um%4ubc+e1V?Ew8xGA)}!v z_NwjSZi5+m+DrAcxPIvIENWHxdFIX(1&%O5?G%N!y_G&cI9GE$?1+8BaKt-QMPGZ{ za+#FQV5fW9CuXn6n$BdF{@iL2$ILLh&zHC&4upm@ew)p-?ZmB^e}5Yo8aYZW8*7^U yo;*nnoc3$m*N&9?-{``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{3f+E{-7;jBoE8EWG6)(f07F)=AST3rZe{ z-D$M;;JlbHIs3%S8_rrvs!N&!n7;Ge(lNg2?Gkq4Q&;}=_r;0Fg#I;_yB$`VUu_nUbbiJ_St8jEk7Bu&GFn3 zj!k`&QYU!yDBRY#$+}a)Z9?jlHBCJof+^yvvlY$*X;IZ~1>q!?n=TXiKQS3L=`8YK zuRJKxSR-;%fisEaQlLt6j6`z&qgf}+ZffNBD5Sr=8_;w1@#FRrWuJfk`#1e}{ghT~ zx%Yq8#!Pr)AEU$TctpU32Tq)MQF`KV(al?{ex(S#Y72jUHgm4v?Sn_f+cwSHY!I`g zZqxLdnhCGD?OL3tNi=mRcEAYFLc1pq=KPksdw6}a+C0uV$;U!fI6u98nJIhwp#Cen zU7e0;GYUmzHlbMNGwFTm*4*1Ojx0O3;o83W4-4hC-F};RMmC5g^WL?u7fvo-ef|UY z>1+S{uc)8|%`t|4%pk_I~ zNK^~1vYz?Id|Uc(&*n*U7R;*Hy8XJz;&wFuD|XCKvA;3%VOIXqGcPo&{>aXnrAT-G@yGywqnwK^~W diff --git a/images/filter/p2p.png b/images/filter/p2p.png deleted file mode 100644 index c21578d5d0e29a96a64f483cf7a32742f4187025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892 zcmV-q2b=hbP)Uv2*e4nce5L@n++gNFwF_Z zMDQ>+;Q4<|%i*!Dt}Lm#RSo$?bXb;3t*ZL#m04LWVi<;D7=~dOhG7_nVHk#C7=~dO zhG7_nVHiIpw{G1^mY0`X@&hmuZ@#DwEMx${N|E9Q-14;V0vhUx&Z=5=HYQ59x zY)Xx&jUW`_)2B~&`Eq7vM%5d3cXv0Db{*G)M~@z5QUhkC1}rTtUD@8={sR^J8?L7I zdwJSX+4~Y9 z(Ftr0^23oI~Su6Yssl-+qWWX>36}E$1G@dA_!`)-6he z0;g5XAN$cv?rd;*Z%U;Yx@;ay;<6cQ$YKURfByUiLaZp=7;II~?%cWaYf&N;W?m`= z`6~QP_6mr>Mv{t~gym%2FCdEd9OWfQS;pEv z5~-eFq$D_k_==(ygk7*?F<5}gUF9g#J1G&0;vU%;ft#g=KRqd*?8%cS>qQA}-@eTX zOe7Gl5rQ}cK`RPstf7^pt~6Ej68y%3D-GN#s&PLgm3w?IKHo|FU{nKlX~ zm5R{}S)o@wt$Z0>$is&ZJ7x3~ih-eO#g*>*_3Ld3?>TtyN}!q4gRgqHjMf-RXvHfb zMbU~u0xtFU(5xVxg20$tm++_!rCgM&c$vwVQh-J8@#DwNg~TyYz+nTKOeHKW2Ed8J zHX*riZ4Py?=ocZ*rF=<#aBa_Y+z@*?&PEaP^g>Did3~-*CrZlbB^*Xj(OsF4T%=Zr z_}!(YrDcd2+L5}B-f>xzP%TK_l|yb!b&<)d5+T@X=mre7$Y}Fu8;jZw;SJGpE(db{ z_2=g1O0zR2WqW&@3yz6bm#iz+nNQF4G7Q(&*7}$v=|azBOpwWSh_Mj!xeYowzkKQX^2-HuCPf3|>W}TN$U(O%#{4PZ+wW zlM%^!DA2~qlP9}%JIyp?xUxez*Z|WJ$ue9UsEf`di;G~v))WVSC{QbRNcOSp%<3w_ zC~|S;hvmffY=*b9x}4B5JgL>8PxivEU%xWuiA(Sn0}$|+YE0rp zAqa!;@~Dhdrh_UNyb7i&2seT9eTPKiU=Y1NO<~3ogyZ{%4<9(B@Jz_S20;r~y9hWm zK?pkVQi&5U|5NVgdnW%aD&9iW9^<`AH4JkR+7RH99H>ZS;-1z5hu4@xQ!T7@#xkQ^ zsvXM_UgE(}=(C7$3ZgiylEG_xMif8{wxYJw2=3WH6qO^?u|=Vpr$!2r3&9FZqyX*l z;yQ}457kzI@&s7nJT-H~O^4%QDsEK017ff%tM<@iMcY$6HuCsToO=g{vj4f?x%`BB zZl2c4CNj=t>)!YA(V7?zJUj2re`Y03zvnHD@F zqX=K>ik?<}^lh)f4g|@2MpyiB`iM#jHk&34UuqX6;1J}yt4g7VG0zRo8DpM~atD1i z8kIc+pepFvQKZSlli?|=1`oo^c&*qO7KxTpwm)hbILk!iQ2ZGL526t_#*OeUeBuJ1 z$}pjKHdb0?J#dpdube|lX~oTE^G6h8z|PK2Sx2eoqkKHmPfW`Mi3}4YGE9)jFhL^2 z1c{7eaG8u1fu0A5jbv+UYxDT=<55PpPYTLaXcWV?>%!pfiD4LqVHk#C7=~dOhG7_n eVHk#Sh<^bH<4({@PNcs80000``W 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 M(khU0N#o%E0}&`^CIA2c diff --git a/images/male/dead.png b/images/male/dead.png deleted file mode 100644 index 2ea842aa890b1b171e9ca5ae27a4dad48199ae5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11136 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 Vsbv&L4~j60rX;5dE|)P5{C_`-PJ;jd diff --git a/images/male/hospitalized.png b/images/male/hospitalized.png deleted file mode 100644 index cd7e2764c039a10ca90f817acaedf533b9f38df3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11165 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 diff --git a/images/nodes/city.png b/images/nodes/city.png deleted file mode 100644 index a67a98caa6d8d79a9f4f1fa70924198584c10589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5314 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 H7aQ?Ehc(yn diff --git a/images/nodes/plane.png b/images/nodes/plane.png deleted file mode 100644 index 10ebb8279b33f4ce4730fbf46bd1fcd33edc44ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6745 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 diff --git a/images/nodes/plane_local.png b/images/nodes/plane_local.png deleted file mode 100644 index c4fe570b0d3bae7469a9e9061ec113163a6303d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6476 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 iKv?qvg1= diff --git a/images/nodes/state.png b/images/nodes/state.png deleted file mode 100644 index e65ea5c780acc87ad26f98d6bdf16670dba165f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10852 zcmV-qDx1}bP)>E@S;<=ROe`@`lRO{BXpBZlG^QI(o<^ThlNgQe zqwE4kq(~Bs=Gjm&wkROd%Tfduc4zK+=gdM_$}Y2W|99rj%RB zM`&=11@`b`W zXtmgU27iMa`v*eX7Gu~ITR=I10V|u$sp66O~W&E9SEKBO3Hf_BN&;16DfCuO15JTmv_L zvFU1eK-p}E`SUDP{6`pZ;p?EZV8HU5?d5A9DK`P?dUJ0mC@OZ^ezZHli{kXpmb*t0o%ZR{>n zoUa458Ut2qO_}20>{GskxO=C$$Bc?nvC{M^-j2V&@q2SVxuB#mU?odyh39L|Hy_!z z%f;c_J?7RJ5XpNEI(8jKO;9^3P5v=Lc|J{{`2nZyp0ya~4!zVCoE}ppKJ4lr9?Y!NvD5rhF>s zAPiUsvda!f3LY|bs!1Tq4A*2^PawAAR*bpi6VSggU^O*w`UG>L{K4F63!=dd6XNIQljs7Xz*5_w z+;3pS#K)1x@;6}FT2;8HNWPI2snEeKvL0C|dz*wE3LZAW>RK>Z5w*s3=n#E4@r9p-vNOY4Q1he- zR+oT?QluWiPW7J{KYk~&NOlFRnKL_~ME}|ZtBXNI9;v6WbH_I^{?d)e64|rG`plWd zC}yxCl4Gu=k`j9(Yg#MWQNyzB?V{MP6CW@IUQ{Wry`3#=0$@ulSt9u7l?_(5NCv-oxMrta&pYfKu0j0&RHv&iG;f zV{t~?_WM2l+NWD_=d$-OYvVe&T7v>i<3Vh$|Aq-#aRgMb1J=BnZ$s&yf&%Nfl2Y7z z%n2CPp>vDRo3m*>zWdQTSZo3q1y&r|y$z!(evE($Zoo=RB~U*H1=1O9JK$@*`ru35 zj)0?*JB@69HDmo6JiK~&B7jjK)tdu41;Z!&2mut#fVE)yHPFrj;J%50bF9gzZtFV$ zle+dW#r4$sY;4nT=Ek+SW9fT%Yx_1(;F#|g_cDyEcme?vynrybW{7D9KEsVogQZ77 z5pL<*A6ND0gCa*}a)B+z|9;IUiNLjH_byPN)FI}67Go>kM1TYS4t5P6yDSC; zLN61jZtiS*4nH;7)?=$b!S;9zlqu?4 z7&+k{WKd=UmfevV?%&MIC(mW*9d#@Qmb5`O_}9)IxP9rncxv4$P)2M8 zVxQ0C4%3+nSc_)2M}7Q7XuE4IrHdWpS=prrzSgrZ&T7{&5xBC=%iA_5dK8~nyAm-@ z_en2>*ANYl!qD?KBLgyXwrZ_R-D;Y-H4&6HXPdgvUHy(VfvN*?!FxNmrK?U7nBx*+q6qG{l<38&9S(D-Mk4m{A&qb=RC#q z(RwmQO-%bWoc@5-IFkME+~vk!w&{0fS$ka3qjA1pHa7iQ!-dAwb!+h8s%2QXIcpZs z%x3i_e2g_k__X#MruQtKQ`G_C=!>x3q~x0crnm2oexJdGUAkvpIs7YtUu>04Ng`v;tWS5G?|mvrr!m%++9*ED@!KK1i> z?6{NB$9yK_6K$^LaN?RyoAhN^b7x#;{@;FQ3U&E;75S)lK@leRIST(_ntq)kY-u-T z$8G&~^$Oho$x?h+w*w^3H9a1eWAwzwkp}4rSkF}-fe_v{x7vcl6gUpjE1;aI0CKyVDh=#>ze$~Y;N~NbMnBeO zJXx`;4)?EIivL-)99v?X?jt}$I}H$ib-8Sp;9(@way&TCv zC91Ze9#fXRk4IL0jGb;^_g=^r+Yl=}5@W~u)@$f*lQ4`Qg25_fwi#32xqG4+^U!Bb zWU%sq&02qT%pkma`Z>6)+YyN`2TEC6gm*s#ANhB5=2uUG)=#rnu=VUgnbfr>zTWFd zoZYS?D1BbsT8rPTT$Y$%&3TF`QW%dB<+I=ee*)IRg<-f`mzY*9CpNc|osj&i0fTUI zDHpKFq<40FnpkUo+WOUC*lI1c81<2JFm9aq$X$Q3A9wSO3|6gkQkyc&KJj!c8hjRm zRRA1U(gsz7PQ`*#K8Mfc$Yk;K(I+EPe;s@vpJC0O-46w^CFVD?;BpxD!#};OJ+3oN zKU+VcVA?xR@qtxK6BDf|8QK)y)liHqe+PnO1D0JjW`6Y?Q@0uoYSD4UZE$D*V==B{ zR}?xd^JNRW0qkuby^GgA-2ytS=P+WzxsuD!$Ofzh)fbpAqnV&)^)4*JjlKKhiXOdD z8VZB5kKLB+k84)qryqZS59@YfSyk4Gn2ztkZQCW5?y-}r|7i;Jc8fAP1f_eR-?4wdU;ZMJWyxh&3#zX$+0~<< z{n#lWH}yRl-!OG5PNB(7^{$IY)~vvt%iiY>)`y~TB}SD$1_3ewtE#F99itzZ7uE}u zU>DH)rU_EF_xlVwgd?Ebx2}FS?)zjZ9$vK^8yhmdgssI07mM>6e_j?r5g ztQxg98Pzo=P<`^b(YW`RK@3)Tq-(SQcOP{uUb7Rd`wd`?a-UvkAHD$syk}U?&gg3z z^^47|cF1FG!(m*~wO3+mcTS-p%Vt?WUjDDd4nK9Arx-(MXLk&{)YJOa-ZQMIa~1M9 zSUG#<`~7Y3S$L51{iq3Bzx?^p$K&lYhT-C_J#&6t{lf^uEx8pQdHVzxKG_Me;y2B2 z$-4>8_Jg~qOHX{WcR!q2#*xr;c&~oC1^2D^2v4qCm9N{9twh`%j4>7Kks@yymRtO- zd<<4&I(EVTopv_S=1BeoAK>4hBH`^nA6*~Pt-nVop^>h$J!$=Xw@0v;_H#3)H19ERXw4j zZ3ODyTI+4C}z90E*_QrL%ed)Vcobx+atBt7JeG)FHT!mIj@hXf|Acuoh zuYy9{cg&!~QZKf5hrx={!DjETncC`V6b8DufPEyJW;M z$T3G2m6(jGKQ8RjgS)CwM%lTEPn+JvpRf23AMVV-{S+16#-{p{P+8fk0cx#J9ok3A zk%Pf%a_^(?*6HWqYd!liSW(8c3r7;?;y+Ixp4gTw=V%Pv6H8j9^#Mz%lnZ7-HokK= zPNks0v8#HNcgfKOP!w7nOIjDO=FB|B{2YoL)P})|D9zMR%&%@$JZW9PinzBRM}@e( z6H)ppT+^DTCm*mD&gg5}o#%pxNQ%bAm{XPXbdluSK@FH-!dnS)RK;5_qfBTi7&{E2 zFbfy!vo*YIoS>U{-A?ws?!qLu?A)5$tC>0oM{Or0^1) zvd?4Ku-M_Anp}u~cIpWXRz&0rjlpQxbW$=;O)g*+gue^9e40=XKCQy6=fKQ(JmcGEKs-fQZO{hmAEY2dp{Mx|@R7Fc1;>?{j!& zTA!Al&~m^EJL634ibWbCN{3QJ)!8jQq2++3oO3`#lrG8{(b7LRAFviyl|sAYKtz;2 z7bVu*Yew?{D;_?}ggb5tLqzFRfOZAvHTRFr2Q1}W1R|nzb1=U7e>xPKl4+gNn#)8) z-stk?nuUiRINBk6nn|%bf?D*G{U#XEp)*QDseP1ov$k0q)LLFT}|6Ga+d}Q7LAea5_@;yVWajg>b+s3x_?urscbKnt(MA zBp?J^c>i6~hYqe`DGUaAX4gh9@VLdjVATfXna!@eW>{gtwt3V9hp5-rBfK+Bs`a$J!b(1q3445t zi5-(dECGwqXpf?zflVLU|A@Px&w@lKcyC@vW;BTm%j3mZD!g@>*CubN4}pOhR=_BA zX4AX-2P`Kyx1rAjTjchdVHJktGKi?jMxq`wl8A6dQyTIX9HKtdiX6{1EGOyx1}Q1~ z#iV_o?5ht&p!F#r5eo3!pes~z8AL>&Iael}eRyqt6+3=pSl+T)n^kAyX0!n|5Hn{M z@4d4xV13%Yk4e9}fJ8_Xge5bq636@Nk-iSwc?^IBK4e&4-=cj@A!b;Tx*?*E*n4N+ zCmRoOID;UGZ&}Ih?jr&hcUi#dJ4HU!u*w9!Xrc}?EJ0xtu>QTtYLm0rITa+PRN&&4 zEV`EnT-*`i6sujt+jar=OF_E%r389rOG5I)E%KZGcWl}hu(TQk5+iZSN?wc-zbj}L zq8-*C9k4_)EH(*cseQ4j@snM+&<^=I4kSh*JCe+>B!&P)r86v#@2@e#k_`?LJ)y-M zhb2p^W3ceCLVI)1(W$kwJyW0YNe7XbRudMTn&bTNpuJ{2CSIVA2O{N+C!pgAvrZiVt$+SxF@eYsWxCqk9i6U#J>X0C6s20osoX_ zM&l=|a1=5B9{Uy`L<{UkQ^Kht*DS7=gq^ zB;6$RT30Jf%qEa+e#s0+VZic1lO~~Zjs%JFW9btwBr+`NqI+22!j=vV5=Hz{4r}m% z(>3ukaa(H!EMXFpXeGa?B~}m!3ug`zJ(s27U@dtg^*iW5dVu}8w}#ahBue5kk{HCe zmqh(ZI&Y8|uOuBDBz_-PeDHyW?HDuxOKSxey+NWRngs>It2KBfT`!WDyevIkNMbk& zD_A~ICPtZ9<>2}M?P2bCnxRZ z3NyR%fkctJKyY~(i7`}?%iUN(n+;%vnPCN2LqRX|*@n3#y$>Xo7?B*r9lUvfDv$;4 zZ~)g0qdj!2uLC#M3nZ>oWOW3&?`nw)TXF<<72!*;h=0{hM zIEeyvRIupYCLF8`E2LzCsPuFpi6wN}a2%FDv^D`t>D0I0rDhcg1RKdEfF*jr+C}7= zIuW6zVT#3jE(J0yj>GaxXH#?sYgj&zD40vGt0YmJ4huI?gSING6%8@N3M{2M*nrgu zB(6wg?w;JmD6z+(WW7jgEvrKD(f7d$?6jYD_LD6EiIbQLBbhx&Okt7Du$(|nG!9x| zr>1mAQ^Qj2LE!5SGZW9GR5}B$^kE8J5iJk-89zgvOXj22rWu2zC!h1}s0QLVMPff<)Pq zRpN5AnVQ6DFLmiiZmT7=@`GeEwNNy$vyLTC7xGi}f&GS!2u+145GvkFG<75|M5zLP z5Lfr~V>cga#DL`kdnrmxezvE)63S>Kt{=$@Q7TiD-3m=Gu!8~14-8m7hzK<;6169h z!IdGg)jgwP8J5g6pLPLU89}nvNBd*I@<9kvy?Zho!E8qAgb4@mdbWXGriSH+ug*%1 z7_fXGwK771&^A_Wh3Y(#7ot?{NpeDV5SyvAKL#uxNM=|P#rvSuog{ykf?OslS-|H6 zXn!zZ`9N~(DT&_|#0ybs-SfsQRA>;YV9#EJy@b9nM_TOyi3(aK5|Mm8j#RIuT!tk# z)I#u!h8dP0wwoiZ8L))43kU1OFA<#ERwne`$^_?0N(E8Lh4;9KpD$uIU~L5jmdr*C zaxH%qupZDvh9&gd+6V^rAP%?4etN3|<Ntq9PequsQ)O$*C)0p+Hj@VulrPriRt9dnHIz zMDUwhV#}x^!QfCBk{ga7MJo774o6|Y@g@bWlSZ9h^^&m0D0ox8sviGY%Xa!W+ z!K@HbC^)R4n3JES)#Lp0SKFeyHbs{eATg3nLW#uyiv$Cf)P*S7lPWb`s6a4?M!CF< zEQJ*|Ry7_WjSoR$iUq%^BSLG#OOdz`3lqBv1+OSw%oSGxb)gRlx8qXS~-Uo>( z5}lgkJ)>z8uyvm7DEE-yI4rRYOR(r3RSa07lv-y0+LK|q>p)^8Ga8AdQ$hh;P%sj} zft8Xym&M$KLYQ7^e>R>quDbywrYIDw3@d0WX*$B&U`b_Il6wiVh9xdBUUW~B&|wWr zkZ6V_aNRmW0vJb(Dula9-|~N8^G2bC2Nn|NL7&D7n_!K2=NTdR0#P*>`2_j;=80;aZSqk{L}z zV9Zim;S9^`>nU`C*CdqAhqxY=nDyv##J}e{@B388kKbux+1nt`M7M_bIA+QAFggKx zJyxOgum+I~DxKMC}O{uwEvNI;xByO-Bm#;^J7YemjL0%07kDHQAh`@#%3=(@go~5WF5;Jg-@}4%NtD}+W!+BHh!ad z631hC;72RK%c6OHWLQN`u$qJg0z)m@`tU_l$Q2trQj0P1iY-kaIrz-c`k$bbwe_JH z;ANz{9~obP#|u$DLZ?%wMN`N{{Je?l*AIN?;G^8oFcXwAKTdov+gO$QFh!)m^IXE*Xx>|`Zoh8h$QZy?O zgASqjGbaZ27N(#q6h)A<3CY)syk3TWWT9TC3;8iBy^I-FYGUf?=KiVqqqJrBGv?=R zP^y84@w!gD^a>J`vRV}EexbR4Z2l-Urew`VIyy8zvIj5QSotw7 zEab7N(=Ou2G#HN=mJeg5f*9BXPvcn(tK8n)KRbu{j~9SiCFH|5wU_L{j~$jvo!~Wf zJO?Zv#!NZvC2YOWp@%c<)$*C=ME(lhV540rC@J$dZNR2_*)1O5-mwj-nrmLqh5)@D z>$j^uM$LNJ#cltw)!QN?Ppw^rH$L_Dz7Di_`&Lk^)T2Ju;*hGte+A61o@0KF0TGd( zG@iq#^06&FC7C?>w;&?&n>u`~Iefs<_47>RTLU5@-{>`oSaTT3RR!nGxF1Sghdgxe zF#|nMtR+g;weP)&JoNxZmVfyCPyLDsZ^0TBnFe3(-kaUils5SruwoA- z^Q`3hf+HQ@Fv03I5D|&fuVCb)w~~2gasg}DFuNo4VcVBPL@9V8*(WAH+AdajAGCHs zL?mYi8c>t$lamivW5?FQQBQ%0NQ%asL#-^@oYu`}(0C9;L{gmi-K~0hYo2Vn9T%CX z^#X{9yjz437rx$_|Dg3VMm6pQ5s_C~--lLe{j~ed4b|uvc^g^{M3$OzF+Ouq)&`3lb6r>igMpUjcwXDZLMAUkZ;Q|vwQjmIqM%UeI>R1~Se<5hY8z_haZ6Q(hj{TNjv%d(10X2_mAyTaECppTh%h0c%Xfdh;`- z;u#U;8C&-rcB!Y%I`4ywLUnh+Zo5iE)EtE^h-uHut$PnxHexDw3W$iBqumEuGs(F* zGQ+rwV)sC?mPJH|Vq!ya>@En930P-V*1=V`gNW!r+QbGMBLv88;rsVDevhFie%ZXZ zvynk3w<$xP!Xgmmy7JE5TKxBqchzC>ry1YOb#Wp#2$9`OdqMRDrYB$~GU&kpC*o_p z`hqCmJ+yK;u6aMhn_4K0$B6P-5F)!2!SD&Qq4iu45dqI7VuB#qfTfg1gPLrDRxOAq zpY4Q>U6+Ung5(!_8dv^~sj~eHM3lec?wuGlX(@#HvpQWv;RCS6HX_PDTD^y8drwnv zn&VHv8aHm6DYo4KBFZmzD?m5)y*+!Git}&%-^QMSsUV{K;e?*RmfW>iIuc`sb(k0_UE zJc;2I)8R9@sW~li!#{zFUtkLHUEs6jyLRF)Tev?4(c3%HR*l()Xx%MH1KFuLEtxyx zGV}lTJ1E7C{)lpi=@rzMWAwzwkp}4t9`+3>?ix*$Tl6o}6|AiEW;?N>ADW-pyj?93 z?WN4M94opTX_Vf8HFj(*5Wm(G=;}d4*-Pts#AE-_cul8I`s+y}FI;He?ad&fY<4q7 zPkI$;mcF8UQ(7y`ubyrS@Z}()?4orwMwVAduf&jy%=FmVH(I#!O7qTN2N7itjrUL( zxiS;M%F5gj1H1ccgL8%X1TwycD-k8bT&pT}5r&?h^3Kg(Wp+%|xf9-ktA79@$^y<0 zFmlpc$e_#*;v8LZk4ZCs2qFqD?fwuWC)|S!3&yDP&Gk0R5?iRAhy*D;9iu94LjVLL zU{zMuBVP0sb88uhC^)paCL;ycARvM>uW!tl^(O5+4|Yu*A_{^PP&gl-AGZMkk(qH= zEtxa@M1-A}%q{MQN|ZV4;i~g6dP3R7lVjo zIqDH?+LSPr$O~RX=53@kJma85&Qc&bbof$L~ZI$gT|`!p=8L>iRT@$U7UX z!aKi_Ey2plt_;hXIkOl=@n1u!D?vo5QR+_^G2v2Vne5wg%YGYdZnzdK#1o~)7TB{e zSXtS*N1!bZ*4AHbKKS2&h>{gI&AzXQobUv4KyGCub8Ci}s@yblka~lNRwL$)Yg_>(H{@OuYJT-`=I3nl=SUFcE4xxC z-19K1;$7sB?Cd3M$;k3|5O>coM{F91@{z(!6hu$YwP0oCc9D8s^14Xkdb{PYUMZMLPlgDCU1LAzhVsEQg; z0yC_phF45C&BN2pH`*Ur+oFupdK!ugk7TggA2Y1x%&(qgGOat!iNnFBlunDyRe1+S zl+OYkgc(+IMwU;7vv`oHAlzd9WX-N3l&y4a;#{kbp2J|(JZ4zQm_4;03PQgz8P{kK z$$QTHxgoLA2(^d-D_MzA@-^q1Z^7@Idnbd)E2aL5nEnMuPnexgqt(4&lQ3EKgtDpn z3vUcDLF-B=y%I#JP*|BbhZZd!jxpw(Vz5dYGptm-SXG4W;oIOi*O`0mKy+9t1|6S* zlGr^sv$77(lrdmQSva#3VzC>c zoUfaEr6AI30}y`{F7CmYiuEAR7_g)z*4>KTVm{d`%)L&ad}OjH_c6Gkdrd)oHAoBt zmS1Mg>WOIlLWE#5E-qt}4;0=;+`S*WBeQV91*<^f7_j_SRTV<}h+XCMzf5n?S)g3B z2r+#hwl!2|^EU9=fB`F==1e;Uk?<|h`do9b1eCq(TvJCq1&s$WvV0LJEf}ye!S*aR zI1}KwUo?l{R8V%X%M#lSAE4$TR(~JHR@Q>jiUBLr=GUA6M}HM@RG6c|Wo?2;V~zPS z1KN2Ek;QLd*pwJ3BN(uPVqR4lRA`jBD6Tg5&N1~aZjzBn3ftl87opsTq2u!~s&XqR z;~21lXwJ0mP|i4n)UZUoOQ{Z^bl7b^?<$i`%}0H~Uvb`fAA}3Y2?7@JQ&1`RD9A}x}b&3gMgVDI`O&icY8k^y$C2-w;!okakMr!h9 zm*iZ;fR#%Y&S;0YV}h3ctU0tp0oUACU641&S()BDz1IBww)uMz5Pu1w-Ag#(ICn5$ z<+4{_jbQyJy%AMI%msX^$;1YkqVjQo)6LuuBb(VVQI4|n^gb}Rmzd!E3JTO>Y!0u) z`0-rQI!7^J<(q|5!l)b64H2h5TpWe4>TH@#N11==YyR$QB0=xK45`pCK?y71>W|E8 zdf%L_YY@{L%wrz`4NDQ;u^z*&*agZP3|O?k#8S|+dq6kzHupN3pw`O-i*DvjF@eqW zP%85nbcuPay?JhtIfcs1^K7 \ No newline at end of file diff --git a/images/svg/city.svg b/images/svg/city.svg new file mode 100644 index 0000000..5fe1a2d --- /dev/null +++ b/images/svg/city.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/female/cured.svg b/images/svg/female/cured.svg new file mode 100644 index 0000000..c812d65 --- /dev/null +++ b/images/svg/female/cured.svg @@ -0,0 +1 @@ +user security 2 \ No newline at end of file diff --git a/images/svg/female/dead.svg b/images/svg/female/dead.svg new file mode 100644 index 0000000..9e5ee64 --- /dev/null +++ b/images/svg/female/dead.svg @@ -0,0 +1 @@ +Cancel \ No newline at end of file diff --git a/images/svg/female/hospitalized.svg b/images/svg/female/hospitalized.svg new file mode 100644 index 0000000..176b8ce --- /dev/null +++ b/images/svg/female/hospitalized.svg @@ -0,0 +1 @@ +lady nurse \ No newline at end of file diff --git a/images/svg/male/cured.svg b/images/svg/male/cured.svg new file mode 100644 index 0000000..a8fe5fa --- /dev/null +++ b/images/svg/male/cured.svg @@ -0,0 +1 @@ +security check \ No newline at end of file diff --git a/images/svg/male/dead.svg b/images/svg/male/dead.svg new file mode 100644 index 0000000..256e93e --- /dev/null +++ b/images/svg/male/dead.svg @@ -0,0 +1 @@ +Cancel User \ No newline at end of file diff --git a/images/svg/male/hospitalized.svg b/images/svg/male/hospitalized.svg new file mode 100644 index 0000000..03f1b03 --- /dev/null +++ b/images/svg/male/hospitalized.svg @@ -0,0 +1 @@ +male nurse \ No newline at end of file diff --git a/images/man.png b/images/svg/man.png similarity index 100% rename from images/man.png rename to images/svg/man.png diff --git a/images/svg/man.svg b/images/svg/man.svg new file mode 100644 index 0000000..455d847 --- /dev/null +++ b/images/svg/man.svg @@ -0,0 +1,2 @@ + +User diff --git a/images/svg/p2p.svg b/images/svg/p2p.svg new file mode 100644 index 0000000..2424b82 --- /dev/null +++ b/images/svg/p2p.svg @@ -0,0 +1,2 @@ + +Companies Network diff --git a/images/svg/plane.svg b/images/svg/plane.svg new file mode 100644 index 0000000..e413696 --- /dev/null +++ b/images/svg/plane.svg @@ -0,0 +1,2 @@ + +Departures diff --git a/images/svg/plane_local.svg b/images/svg/plane_local.svg new file mode 100644 index 0000000..7042b64 --- /dev/null +++ b/images/svg/plane_local.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/svg/state.svg b/images/svg/state.svg new file mode 100644 index 0000000..a6e2341 --- /dev/null +++ b/images/svg/state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/woman.png b/images/svg/woman.png similarity index 100% rename from images/woman.png rename to images/svg/woman.png diff --git a/images/svg/woman.svg b/images/svg/woman.svg new file mode 100644 index 0000000..e215ea0 --- /dev/null +++ b/images/svg/woman.svg @@ -0,0 +1,2 @@ + +Female User diff --git a/util/filters/city.js b/util/filters/city.js index 5299677..14741f0 100644 --- a/util/filters/city.js +++ b/util/filters/city.js @@ -1,5 +1,5 @@ import hash from 'object-hash' -import { state_node, city_node } from '../../images' +import { state, city } from '../../images' import _ from 'lodash' import dotProp from 'dot-prop-immutable' @@ -40,7 +40,7 @@ export const addCities = (graph, patients) => { label: states[key], size: 30, shape: 'image', - image: state_node, + image: state, } let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { return o.id == node.id @@ -58,7 +58,7 @@ export const addCities = (graph, patients) => { label: stateCitiesMap[key][cityKey], size: 20, shape: 'image', - image: city_node, + image: city, } let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { @@ -139,7 +139,7 @@ export const removeCities = (graph, patients) => { label: states[key], size: 30, shape: 'image', - image: state_node, + image: state, } let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { return o.id == node.id @@ -157,7 +157,7 @@ export const removeCities = (graph, patients) => { label: stateCitiesMap[key][cityKey], size: 40, shape: 'image', - image: city_node, + image: city, } let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { @@ -230,7 +230,7 @@ export const removeCities = (graph, patients) => { // label: states[key], // size: 40, // shape: 'image', -// image: state_node, +// image: state, // } // let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { // return o.id == key diff --git a/util/filters/state.js b/util/filters/state.js index f164b12..896a849 100644 --- a/util/filters/state.js +++ b/util/filters/state.js @@ -1,5 +1,5 @@ import hash from 'object-hash' -import { state_node } from '../../images' +import { state } from '../../images' import _ from 'lodash' import dotProp from 'dot-prop-immutable' @@ -13,7 +13,7 @@ export const addStates = (graph, patients, states) => { label: stateName, size: 40, shape: 'image', - image: state_node, + image: state, } graph = dotProp.set(graph, 'nodes', list => [...list, node]) } diff --git a/util/filters/travel.js b/util/filters/travel.js index d2e51a9..608b518 100644 --- a/util/filters/travel.js +++ b/util/filters/travel.js @@ -2,7 +2,7 @@ import hash from 'object-hash' import _ from 'lodash' import dotProp from 'dot-prop-immutable' -import { plane_abroad_node, plane_local_node } from '../../images' +import { plane_abroad, plane_local } from '../../images' export const addTravel = (graph, patients) => { let locations = {} @@ -24,7 +24,7 @@ export const addTravel = (graph, patients) => { label: locations[loc].place, size: 30, shape: 'image', - image: locations[loc].is_foreign ? plane_abroad_node : plane_local_node, + image: locations[loc].is_foreign ? plane_abroad : plane_local, } graph = dotProp.set(graph, 'nodes', list => [...list, node]) } @@ -75,7 +75,7 @@ export const removeTravel = (graph, patients) => { label: locations[loc].place, size: 30, shape: 'image', - image: locations[loc].is_foreign ? plane_abroad_node : plane_local_node, + image: locations[loc].is_foreign ? plane_abroad : plane_local, } let index = _.findIndex(dotProp.get(graph, 'nodes'), function(o) { return o.id == node.id diff --git a/util/parse.js b/util/parse.js index bf0d258..bf17d34 100644 --- a/util/parse.js +++ b/util/parse.js @@ -1,61 +1,3 @@ -// const graph = { -// nodes: [ -// { -// id: 1, -// label: 'Node 1', -// title: 'node 1 tootip text', -// shape: 'circularImage', -// image: 'https://avatars2.githubusercontent.com/u/14039437?v=4', -// }, -// { id: 2, label: 'Node 2', title: 'node 2 tootip text' }, -// { id: 3, label: 'Node 3', title: 'node 3 tootip text' }, -// { id: 4, label: 'Node 4', title: 'node 4 tootip text' }, -// { id: 5, label: 'Node 5', title: 'node 5 tootip text' }, -// { id: 6, label: 'Node 6', title: 'node 6 tootip text' }, -// ], -// edges: [ -// { from: 1, to: 2 }, -// { from: 1, to: 3 }, -// { from: 2, to: 4 }, -// { from: 2, to: 5 }, -// ], -// } - -// OLD, don't use this schema -// const row = { -// patientId: 'P' + rawRow['Patient number'], -// dateAnnounced: rawRow['Date Announced'], -// ageEstimate: rawRow['Age Bracket'], -// gender: rawRow['Gender'], -// city: rawRow['Detected City'], -// district: rawRow['Detected District'], -// state: rawRow['Detected State'], -// status: rawRow['Current Status'], -// notes: rawRow['Notes'], -// contractedFrom: rawRow['Contracted from which Patient (Suspected)'], -// sources: [rawRow['Source_1'], rawRow['Source_2'], rawRow['Source_3']], -// } - -// New schema -// const row = { -// patientId: parseInt(rawRow['Patient number']), // Change in frontend, used to be 'P' + rawRow['Patient Number'] -// reportedOn: rawRow['Date Announced'], -// onsetEstimate: '', -// ageEstimate: rawRow['Age Bracket'], -// gender: processGender(rawRow['Gender']), // Change in frontend, used to be 'M'/'F' -// city: rawRow['Detected City'], -// state: rawRow['Detected State'], -// district: rawRow['Detected District'], -// status: rawRow['Current Status'], -// notes: rawRow['Notes'], -// contractedFrom: rawRow['Contracted from which Patient (Suspected)'], -// sources: processSources([ -// rawRow['Source_1'], -// rawRow['Source_2'], -// rawRow['Source_3'], -// ]), -// } - import { male_hosp, male_cured, @@ -134,9 +76,4 @@ export const rowsToGraph = rows => { } }) return graph -} - -// console.log(letterToCode('P699999')) -// console.log(codeToLetter(letterToCode('P6'))) - -// console.log(jsonToGraph(dumpedRows)) +} \ No newline at end of file From 9be9f2aba36e00c2fcaafc5669f6157beba6b3c7 Mon Sep 17 00:00:00 2001 From: rjoydip Date: Wed, 1 Apr 2020 18:52:23 +0530 Subject: [PATCH 9/9] loader added on top left --- components/FilterPanel/index.js | 26 +-- components/Loader.js | 296 +++++++++++++------------------- components/NetworkMap/index.js | 2 +- 3 files changed, 120 insertions(+), 204 deletions(-) diff --git a/components/FilterPanel/index.js b/components/FilterPanel/index.js index 22d9afb..eab5606 100644 --- a/components/FilterPanel/index.js +++ b/components/FilterPanel/index.js @@ -32,11 +32,7 @@ const filters = [ ] const HeaderContainer = styled.div` - padding-top: 10px; - background-color: #f2f2f2; - display: grid; - grid-template-rows: 7% 93%; - overflow: auto; + margin: 30px 0px; font-family: 'Lato', sans-serif; color: #7c7a7a; font-weight: bold; @@ -49,9 +45,6 @@ const HeaderContainer = styled.div` ` const FilterMenuContainer = styled.div` - display: grid; - grid-template-rows: 10% 10% 10% 10% 60%; - overflow: auto; font-family: 'Lato', sans-serif; color: #7c7a7a; font-weight: bold; @@ -63,13 +56,13 @@ const FilterMenuContainer = styled.div` ` const FilterContainer = styled.div` + padding: 5px 0px; display: flex; flex-direction: column; align-items: center; justify-content: space-evenly; height: '20vh'; - user-select: none; - background-color: ${props => (props.selected ? '#d6d6d6' : '#F2F2F2')}; + background-color: ${props => (props.selected ? '#d7d7d7' : 'transparent')}; transition: all 0.2s ease-out; cursor: pointer; &:hover { @@ -86,18 +79,6 @@ const FilterIcon = styled.img` width: 40px; ` -const FilterHeader = styled.div` - text-align: center; - text-transform: uppercase; - font-size: 14px; - - @media screen and (max-width: 768px) { - display: flex; - align-items: center; - justify-content: center; - } -` - const FilterCategory = ({ filter, onClick, selected }) => { return ( @@ -136,7 +117,6 @@ const FilterPanel = ({ return ( - Cluster Filter {filters.map((filterItem, filterIndex) => ( diff --git a/components/Loader.js b/components/Loader.js index 566d8aa..d63a3b7 100644 --- a/components/Loader.js +++ b/components/Loader.js @@ -1,196 +1,132 @@ import React from 'react' import styled, { keyframes } from 'styled-components' -const commonStyle = { - margin: 'auto', - position: 'absolute', - left: 0, - right: 0, - top: 0, - bottom: 0, +const rotateBall = props => keyframes` + ${(((props.size / 2 / props.countBalls) * (props.index - 1)) / props.size) * + 100}% { + opacity: 0; + } + ${(((props.size / 2 / props.countBalls + 0.0001) * (props.index - 1)) / + props.size) * + 100}% { + opacity: 1; + transform: ${`rotate(${0 - + (360 / props.countBalls) * (props.index - 2)}deg)`}; + } + ${(((props.size / 2 / props.countBalls) * (props.index - 0) + 2) / + props.size) * + 100}% { + transform: ${`rotate(${0 - + (360 / props.countBalls) * (props.index - 1)}deg)`}; + } + ${((props.size / 2 + + (props.size / 2 / props.countBalls) * (props.index - 0) + + 2) / + props.size) * + 100}% { + transform: ${`rotate(${0 - + (360 / props.countBalls) * (props.index - 1)}deg)`}; + } + 100% { + transform: ${`rotate(${0 - + (360 / props.countBalls) * (props.countBalls - 1)}deg)`}; + opacity: 1; + } +` + +const getBalls = ({ + countBalls, + radius, + angle, + color, + size, + ballSize, + sizeUnit, +}) => { + const balls = [] + const offset = ballSize / 2 + for (let i = 0; i < countBalls; i++) { + const y = Math.sin(angle * i * (Math.PI / 180)) * radius - offset + const x = Math.cos(angle * i * (Math.PI / 180)) * radius - offset + balls.push( + + ) + } + return balls } const rotate = keyframes` - 50% { - transform: rotate(360deg) scale(0.7); - } + 0% { + transform: rotate(0deg); + } + 100%{ + transform: rotate(-360deg); + } ` -const LoadContainer = styled.div` - width: ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px; - height: ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px; - position: relative; - > div:nth-child(1) { - height: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 0 - ); - width: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 0 - ); - top: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 0 - ); - left: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 0 - ); - animation: ${rotate} ${props => props.speed || 2}s infinite; - animation-delay: calc(${props => props.speed || 2}s * 0.1 * 4); - z-index: 5; - } - > div:nth-child(2) { - height: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 1 - ); - width: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 1 - ); - top: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 1 - ); - left: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 1 - ); - animation: ${rotate} ${props => props.speed || 2}s infinite; - animation-delay: calc(${props => props.speed || 2}s * 0.1 * 3); - z-index: 4; - } - > div:nth-child(3) { - height: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 2 - ); - width: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 2 - ); - top: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 2 - ); - left: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 2 - ); - animation: ${rotate} ${props => props.speed || 2}s infinite; - animation-delay: calc(${props => props.speed || 2}s * 0.1 * 2); - z-index: 3; - } - > div:nth-child(4) { - height: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 3 - ); - width: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 3 - ); - top: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 3 - ); - left: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 3 - ); - animation: ${rotate} ${props => props.speed || 2}s infinite; - animation-delay: calc(${props => props.speed || 2}s * 0.1 * 1); - z-index: 2; - } - > div:nth-child(5) { - height: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 4 - ); - width: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px - - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.2 * 4 - ); - top: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 4 - ); - left: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.1 * 4 - ); - animation: ${rotate} ${props => props.speed || 2}s infinite; - animation-delay: calc(${props => props.speed || 2}s * 0.1 * 0); - z-index: 1; - } +const Wrapper = styled.div` + left: 20px; + position: fixed; + justify-content: center; + align-items: center; + width: ${props => `${props.size}${props.sizeUnit}`}; + height: ${props => `${props.size}${props.sizeUnit}`}; + animation: ${rotate} 3s infinite ease-in; ` -const HalfCircle = styled.div` - box-sizing: border-box; - border-radius: 50%; +const Ball = styled.div` position: absolute; - border: calc( - ${props => - props.size === 'small' ? 40 : props.size === 'large' ? 60 : 50}px * - 0.05 - ) - solid transparent; - border-top-color: ${props => props.color || '#201AA2'}; - border-left-color: ${props => props.color || '#201AA2'}; + width: ${props => `${props.size}${props.sizeUnit}`}; + height: ${props => `${props.size}${props.sizeUnit}`}; + animation: ${rotateBall} 2s infinite linear; + transform: ${props => `rotate(${(360 / props.countBalls) * props.index}deg)`}; + opacity: 0; + &:before { + content: ''; + position: absolute; + left: 50%; + top: 0%; + width: ${props => `${props.ballSize}${props.sizeUnit}`}; + height: ${props => `${props.ballSize}${props.sizeUnit}`}; + background-color: ${props => `${props.color}`}; + transform: translateX(-50%); + border-radius: 50%; + } ` -const Loader = ({ style = commonStyle, color, speed, size = 'default' }) => { +export default function Loader({ + size = 30, + color = '#201AA2', + loading = true, + sizeUnit = 'px', +}) { + const radius = size / 2 + const countBalls = 9 + const ballSize = size / 8 + const angle = 360 / countBalls return ( - - {Array.from(Array(5)).map((item, index) => ( - - ))} - + loading && ( + + {getBalls({ + countBalls, + radius, + angle, + color, + size, + ballSize, + sizeUnit, + })} + + ) ) } - -export default Loader diff --git a/components/NetworkMap/index.js b/components/NetworkMap/index.js index b2474ac..d873e29 100644 --- a/components/NetworkMap/index.js +++ b/components/NetworkMap/index.js @@ -137,7 +137,7 @@ const NetworkMap = ({ } if (showLoader) { const timeout = setTimeout(() => { - setShowLoader(false) + // setShowLoader(false) }, 500) return () => { clearTimeout(timeout)