From 88c8eee98219b7c556b947b34dbc359936c41f06 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 May 2021 13:21:11 +0200 Subject: [PATCH] Weather settings form update functionality. API: update multiple values in one Config query --- .../WeatherSettings/WeatherSettings.tsx | 140 +++++++++--------- controllers/config.js | 16 ++ package.json | 3 +- routes/config.js | 6 +- 4 files changed, 95 insertions(+), 70 deletions(-) diff --git a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx index 9f60ac2..93ca9c7 100644 --- a/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx +++ b/client/src/components/Settings/WeatherSettings/WeatherSettings.tsx @@ -1,4 +1,4 @@ -import { useState, ChangeEvent, Fragment, useEffect } from 'react'; +import { useState, ChangeEvent, Fragment, useEffect, FormEvent } from 'react'; import axios from 'axios'; import { ApiResponse, Config } from '../../../interfaces'; @@ -55,73 +55,79 @@ const WeatherSettings = (): JSX.Element => { .catch(err => console.log(err)); }, []); + const formSubmitHandler = (e: FormEvent) => { + e.preventDefault(); + + axios.put>('/api/config', formData) + .then(data => console.log(data.data.success)) + .catch(err => console.log(err)); + } + return ( -
- - - - inputChangeHandler(e)} - /> - - Using - - {' '}Weather API - - - - - - inputChangeHandler(e, true)} - /> - - You can use - - {' '}latlong.net - - - - - - inputChangeHandler(e, true)} - /> - - - - - - - -
+
formSubmitHandler(e)}> + + + inputChangeHandler(e)} + /> + + Using + + {' '}Weather API + + + + + + inputChangeHandler(e, true)} + /> + + You can use + + {' '}latlong.net + + + + + + inputChangeHandler(e, true)} + /> + + + + + + +
) } diff --git a/controllers/config.js b/controllers/config.js index c3e2560..82b6691 100644 --- a/controllers/config.js +++ b/controllers/config.js @@ -86,6 +86,22 @@ exports.updateValue = asyncWrapper(async (req, res, next) => { }) }) +// @desc Update multiple values +// @route PUT /api/config/ +// @access Public +exports.updateValues = asyncWrapper(async (req, res, next) => { + Object.entries(req.body).forEach(async ([key, value]) => { + await Config.update({ value }, { + where: { key } + }) + }) + + res.status(200).send({ + success: true, + data: {} + }) +}) + // @desc Delete key:value pair // @route DELETE /api/config/:key // @access Public diff --git a/package.json b/package.json index e6c92ed..85d6a43 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "start": "node server.js", "server": "nodemon server.js", "client": "npm start --prefix client", - "dev": "concurrently \"npm run server\" \"npm run client\"" + "dev": "concurrently \"npm run server\" \"npm run client\"", + "dev-lines": "git ls-files | grep -v '.json' | xargs wc -l" }, "author": "", "license": "ISC", diff --git a/routes/config.js b/routes/config.js index bcb66ac..3b7c3f2 100644 --- a/routes/config.js +++ b/routes/config.js @@ -6,13 +6,15 @@ const { getAllPairs, getSinglePair, updateValue, - deletePair + updateValues, + deletePair, } = require('../controllers/config'); router .route('') .post(createPair) - .get(getAllPairs); + .get(getAllPairs) + .put(updateValues); router .route('/:key')