diff --git a/src/components/App.scss b/src/components/App.scss index e1829a1..bd67300 100755 --- a/src/components/App.scss +++ b/src/components/App.scss @@ -1,3 +1,5 @@ +@import "vars.scss"; + .App { padding: 12px; box-sizing: border-box; @@ -31,7 +33,7 @@ .divider { width: 313px; - border: solid 1px #72bfca; + border: solid 1px $teal-light; } .footer { @@ -57,6 +59,9 @@ } .status-message { width: 120px; + &.success { + color: $teal-dark; + } } } diff --git a/src/components/App.tsx b/src/components/App.tsx index 41cfa86..79d1a6f 100755 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -29,14 +29,19 @@ const kInitialDimensions = { height: 670 }; +interface IStatus { + status: "success" | "error" | "fetching"; + message: string; + icon: JSX.Element; +} + export const App = () => { const { state, setState } = useStateContext(); const { showModal, location, weatherStation, startDate, endDate, timezone, units, frequencies, selectedFrequency } = state; const { filterItems, createNOAAItems } = useCODAPApi(); - const [statusMessage, setStatusMessage] = useState(""); - const [statusIcon, setStatusIcon] = useState(); const [isFetching, setIsFetching] = useState(false); const [disableGetData, setDisableGetData] = useState(true); + const [status, setStatus] = useState(); const weatherStations = getWeatherStations(); useEffect(() => { @@ -142,25 +147,38 @@ export const App = () => { const dataRecords = formatData(formatDataProps); const items = Array.isArray(dataRecords) ? dataRecords : [dataRecords]; const filteredItems = filterItems(items); - setStatusMessage("Sending weather records to CODAP"); - setStatusIcon(); + setStatus({ + status: "fetching", + message: "Sending weather records to CODAP", + icon: + }); await createNOAAItems(filteredItems).then( function (result: any) { setIsFetching(false); - setStatusIcon(); - setStatusMessage(`Retrieved ${filteredItems.length} cases`); + setStatus({ + status: "success", + message: `Retrieved ${filteredItems.length} cases`, + icon: + }); return result; }, function (msg: string) { + console.log("Error creating items: " + msg); setIsFetching(false); - setStatusIcon(); - setStatusMessage(msg); + setStatus({ + status: "error", + message: msg, + icon: + }); } ); } else { setIsFetching(false); - setStatusIcon(); - setStatusMessage("No data retrieved"); + setStatus({ + status: "error", + message: "No data retrieved", + icon: + }); } }; @@ -178,8 +196,11 @@ export const App = () => { console.warn("fetchErrorHandler: " + resultText); console.warn("fetchErrorHandler error: " + message); setIsFetching(false); - setStatusIcon(); - setStatusMessage(message); + setStatus({ + status: "error", + message, + icon: + }); }; const handleGetData = async () => { @@ -188,8 +209,11 @@ export const App = () => { const attributes = frequencies[selectedFrequency].attrs.map(attr => attr.name); const isEndDateAfterStartDate = endDate.getTime() >= startDate.getTime(); if (isEndDateAfterStartDate) { - setStatusMessage("Fetching weather records from NOAA"); - setStatusIcon(); + setStatus({ + status: "fetching", + message: "Fetching weather records from NOAA", + icon: + }); const tURL = composeURL({ startDate, endDate, @@ -221,7 +245,11 @@ export const App = () => { fetchErrorHandler(error, msg); } } else { - setStatusMessage("End date must be on or after start date"); + setStatus({ + status: "error", + message: "End date must be on or after start date", + icon: + }); } } }; @@ -242,8 +270,8 @@ export const App = () => {
-
{statusIcon ? statusIcon: ""}
-
{statusMessage ? statusMessage: ""}
+
{status ? status.icon : ""}
+
{status ? status.message : ""}
diff --git a/src/components/vars.scss b/src/components/vars.scss index 1a26fd5..badcf27 100644 --- a/src/components/vars.scss +++ b/src/components/vars.scss @@ -6,4 +6,4 @@ $teal-dark-75: rgba(23, 121, 145, 0.75); $teal-dark-50: rgba(23, 121, 145, 0.5); $teal-light-25: rgba(114, 191, 202, 0.25); $teal-light-12: rgba(114, 191, 202, 0.12); -$placeholder-gray: #c6c6c6 +$placeholder-gray: #c6c6c6;