diff --git a/.env b/.env index 71d9fdb..d5f54d5 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ PORT=5005 NODE_ENV=development -VERSION=2.2.0 +VERSION=2.2.1 PASSWORD=flame_password SECRET=e02eb43d69953658c6d07311d6313f2d4467672cb881f96b29368ba1f3f4da4b \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 008f899..9502adf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +### v2.2.1 (2022-01-08) +- Local search will now include app descriptions ([#266](https://github.com/pawelmalak/flame/issues/266)) +- Fixed bug with unsupported characters in local search [#279](https://github.com/pawelmalak/flame/issues/279)) +- Background tasks optimization ([#283](https://github.com/pawelmalak/flame/issues/283)) + ### v2.2.0 (2021-12-17) - Added option to set custom description for apps ([#201](https://github.com/pawelmalak/flame/issues/201)) - Fixed fatal error while deploying Flame to cluster ([#242](https://github.com/pawelmalak/flame/issues/242)) diff --git a/client/.env b/client/.env index b41b338..edd69d9 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=2.2.0 \ No newline at end of file +REACT_APP_VERSION=2.2.1 \ No newline at end of file diff --git a/client/src/components/Home/Home.tsx b/client/src/components/Home/Home.tsx index e24e5c0..629ed89 100644 --- a/client/src/components/Home/Home.tsx +++ b/client/src/components/Home/Home.tsx @@ -64,8 +64,10 @@ export const Home = (): JSX.Element => { if (localSearch) { // Search through apps setAppSearchResult([ - ...apps.filter(({ name }) => - new RegExp(escapeRegex(localSearch), 'i').test(name) + ...apps.filter(({ name, description }) => + new RegExp(escapeRegex(localSearch), 'i').test( + `${name} ${description}` + ) ), ]); diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 9920073..dd0efe4 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -69,7 +69,8 @@ export const SearchBar = (props: Props): JSX.Element => { ); if (isLocal) { - setLocalSearch(search); + // no additional encoding required for local search + setLocalSearch(inputRef.current.value); } if (e.code === 'Enter' || e.code === 'NumpadEnter') { diff --git a/client/src/components/Settings/AppDetails/AppDetails.tsx b/client/src/components/Settings/AppDetails/AppDetails.tsx index 1829a4d..efa1586 100644 --- a/client/src/components/Settings/AppDetails/AppDetails.tsx +++ b/client/src/components/Settings/AppDetails/AppDetails.tsx @@ -1,43 +1,57 @@ import { Fragment } from 'react'; + +// UI import { Button, SettingsHeadline } from '../../UI'; -import classes from './AppDetails.module.css'; -import { checkVersion } from '../../../utility'; import { AuthForm } from './AuthForm/AuthForm'; +import classes from './AppDetails.module.css'; + +// Store +import { useSelector } from 'react-redux'; +import { State } from '../../../store/reducers'; + +// Other +import { checkVersion } from '../../../utility'; export const AppDetails = (): JSX.Element => { + const { isAuthenticated } = useSelector((state: State) => state.auth); + return ( -
+ {isAuthenticated && ( + +
-
- -

- - Flame - {' '} - version {process.env.REACT_APP_VERSION} -

+
+ +

+ + Flame + {' '} + version {process.env.REACT_APP_VERSION} +

-

- See changelog{' '} - - here - -

+

+ See changelog{' '} + + here + +

- -
+ +
+
+ )}
); }; diff --git a/server.js b/server.js index c6f25f9..4170563 100644 --- a/server.js +++ b/server.js @@ -23,6 +23,7 @@ const logger = new Logger(); await initApp(); await connectDB(); await associateModels(); + await jobs(); // Create server for Express API and WebSockets const server = http.createServer(); diff --git a/utils/jobs.js b/utils/jobs.js index 0ce3284..e509ef5 100644 --- a/utils/jobs.js +++ b/utils/jobs.js @@ -6,30 +6,34 @@ const Logger = require('./Logger'); const loadConfig = require('./loadConfig'); const logger = new Logger(); -// Update weather data every 15 minutes -const weatherJob = schedule.scheduleJob( - 'updateWeather', - '0 */15 * * * *', - async () => { - const { WEATHER_API_KEY: secret } = await loadConfig(); +module.exports = async function () { + const { WEATHER_API_KEY } = await loadConfig(); - try { - const weatherData = await getExternalWeather(); + if (WEATHER_API_KEY != '') { + // Update weather data every 15 minutes + const weatherJob = schedule.scheduleJob( + 'updateWeather', + '0 */15 * * * *', + async () => { + try { + const weatherData = await getExternalWeather(); - Sockets.getSocket('weather').socket.send(JSON.stringify(weatherData)); - } catch (err) { - if (secret) { - logger.log(err.message, 'ERROR'); + Sockets.getSocket('weather').socket.send(JSON.stringify(weatherData)); + } catch (err) { + if (WEATHER_API_KEY) { + logger.log(err.message, 'ERROR'); + } + } } - } - } -); + ); -// Clear old weather data every 4 hours -const weatherCleanerJob = schedule.scheduleJob( - 'clearWeather', - '0 5 */4 * * *', - async () => { - clearWeatherData(); + // Clear old weather data every 4 hours + const weatherCleanerJob = schedule.scheduleJob( + 'clearWeather', + '0 5 */4 * * *', + async () => { + clearWeatherData(); + } + ); } -); +};