From 569bdb8c5d7538fa0ea8a99ff2f8376f7cbfa51a Mon Sep 17 00:00:00 2001 From: piotrruss Date: Mon, 6 Sep 2021 23:13:22 +0200 Subject: added stadard linter --- .eslintignore | 1 + .eslintrc.json | 17 + app.js | 4 +- apps/Notes/components/Actions.js | 1 - apps/Notes/components/Export.js | 22 +- apps/Notes/components/Import.js | 26 +- apps/Notes/components/List.js | 96 +- apps/Notes/components/ListItem.js | 24 +- apps/Notes/components/NoteEdit.js | 14 +- apps/Notes/components/NoteView.js | 20 +- apps/Notes/helpers/copyToClipboard.js | 2 +- apps/Notes/helpers/export.js | 6 +- apps/Notes/helpers/fileName.js | 2 +- apps/Notes/helpers/import.js | 22 +- apps/Notes/helpers/noteActions.js | 38 +- apps/Notes/hooks/useNotes.js | 4 +- apps/Notes/hooks/useSort.js | 10 +- apps/Settings/api.js | 3 +- apps/Settings/components/Settings.js | 51 +- apps/index.js | 4 +- components/App.js | 40 +- components/Form.js | 74 +- components/Header.js | 73 +- components/Layout.js | 20 +- components/Popup.js | 9 +- components/Splash.js | 8 +- components/index.js | 12 +- configs/appList.js | 8 +- configs/dbConnect.js | 6 +- configs/sendMail.js | 7 +- configs/translations.js | 8 +- helpers/crypt.js | 2 +- helpers/email.js | 3 +- helpers/fetchJson.js | 4 +- helpers/queue.js | 48 +- helpers/saveFile.js | 4 +- helpers/submitForm.js | 14 +- helpers/windowActions.js | 20 +- hocs/withSession.js | 8 +- hooks/useApps.js | 4 +- hooks/useMediaQuery.js | 20 +- hooks/usePopup.js | 25 +- hooks/useSettings.js | 14 +- hooks/useUser.js | 8 +- next.config.js | 5 + package-lock.json | 9780 ++++++++++++++++++++++++--------- package.json | 10 +- pages/_app.js | 52 +- pages/api/login.js | 11 +- pages/api/logout.js | 2 +- pages/api/notes/[id].js | 14 +- pages/api/notes/index.js | 10 +- pages/api/register.js | 11 +- pages/api/settings.js | 1 - pages/api/user.js | 2 +- pages/api/verify.js | 5 +- pages/index.js | 40 +- pages/login.js | 10 +- pages/register.js | 10 +- pages/verify.js | 44 +- public/icons/notes.svg | 1 + public/notes.svg | 1 - 62 files changed, 7769 insertions(+), 3046 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 next.config.js create mode 100644 public/icons/notes.svg delete mode 100644 public/notes.svg diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..5d24e5e --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +helpers/queue.js diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..40bc712 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "extends": [ + "standard", + "standard-jsx", + "standard-react", + "plugin:@next/next/recommended" + ], + "env": { + "browser": true, + "node": true + }, + "rules": { + "react/react-in-jsx-scope": "off", + "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], + "react/prop-types": "off" + } +} diff --git a/app.js b/app.js index 70ded1f..37ec8e2 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,5 @@ const { createServer } = require('http') -const { parse } = require('url') +const { URL } = require('url') const next = require('next') const dev = process.env.NODE_ENV !== 'production' @@ -10,7 +10,7 @@ app.prepare().then(() => { createServer((req, res) => { // Be sure to pass `true` as the second argument to `url.parse`. // This tells it to parse the query portion of the URL. - const parsedUrl = parse(req.url, true) + const parsedUrl = new URL(req.url, true) const { pathname, query } = parsedUrl if (pathname === '/a') { diff --git a/apps/Notes/components/Actions.js b/apps/Notes/components/Actions.js index 9591cfa..c3fefed 100644 --- a/apps/Notes/components/Actions.js +++ b/apps/Notes/components/Actions.js @@ -43,4 +43,3 @@ const Actions = ({ } export default Actions - diff --git a/apps/Notes/components/Export.js b/apps/Notes/components/Export.js index eeeab8f..4ab1d64 100644 --- a/apps/Notes/components/Export.js +++ b/apps/Notes/components/Export.js @@ -1,12 +1,12 @@ import styles from '../styles/Notes.module.scss' -import React, {useState} from 'react' +import React, { useState } from 'react' import useSettings from 'hooks/useSettings' import useNotes from '../hooks/useNotes' -import {handleSelect, handleSelectAll, handleExport} from '../helpers/export' +import { handleSelect, handleSelectAll, handleExport } from '../helpers/export' -const Export = ({setAction}) => { - const {notes} = useNotes() - const {t} = useSettings() +const Export = ({ setAction }) => { + const { notes } = useNotes() + const { t } = useSettings() const [ids, setIds] = useState(notes.map(n => n.noteId)) const sortFn = (a, b) => new Date(b.updated_at) - new Date(a.updated_at) @@ -16,21 +16,21 @@ const Export = ({setAction}) => {
-
{setAction('')}}>{t('back')}
+
{ setAction('') }}>{t('back')}

{t('notes_click_to_export')}

handleExport(e, ids, notes)} />

{t('notes_to_export')}

handleSelectAll(e, notes, setIds)} checked={notes.length === ids.length} @@ -41,7 +41,7 @@ const Export = ({setAction}) => { {notes.sort(sortFn).map(note => (
  • { />
    +
  • ))} diff --git a/apps/Notes/components/Import.js b/apps/Notes/components/Import.js index 1c90008..5827310 100644 --- a/apps/Notes/components/Import.js +++ b/apps/Notes/components/Import.js @@ -1,31 +1,31 @@ import styles from '../styles/Notes.module.scss' -import React, {useState} from 'react' +import React, { useState } from 'react' import useSettings from 'hooks/useSettings' import useNotes from '../hooks/useNotes' -import {state, color, handleImport, handleChange} from '../helpers/import' +import { state, color, handleImport, handleChange } from '../helpers/import' -const Import = ({setAction}) => { - const {t} = useSettings() +const Import = ({ setAction }) => { + const { t } = useSettings() const [files, setFiles] = useState() const [done, setDone] = useState([]) - const {mutateNotes} = useNotes() + const { mutateNotes } = useNotes() return (
    -
    {setAction('')}}>{t('back')}
    +
    { setAction('') }}>{t('back')}
    handleImport(e, files, mutateNotes, setDone)}> {t('notes_import')}
    -
    {t('color_theme')}
    @@ -50,14 +51,14 @@ const Settings = () => { {['green', 'blue', 'black'].map(c => ( {setSettings(prev => ({...prev, theme: c}))}} + onClick={() => { setSettings(prev => ({ ...prev, theme: c })) }} className={theme === c ? styles.settings__active : ''} /> ))}
    diff --git a/apps/index.js b/apps/index.js index 08b454a..6e264fd 100644 --- a/apps/index.js +++ b/apps/index.js @@ -1,2 +1,2 @@ -export {default as Notes} from './Notes' -export {default as Settings} from './Settings' +export { default as Notes } from './Notes' +export { default as Settings } from './Settings' diff --git a/components/App.js b/components/App.js index c539e72..84268cb 100644 --- a/components/App.js +++ b/components/App.js @@ -1,53 +1,53 @@ -import React, {useEffect, useRef} from 'react' +import { useEffect, useRef } from 'react' import useSettings from 'hooks/useSettings' import useMediaQuery from 'hooks/useMediaQuery' -import {close, toggleMin, toggleMax, move, focus} from 'helpers/windowActions' -import {faArrowUp, faExpandAlt, faTimes, faCompressAlt} from '@fortawesome/free-solid-svg-icons' -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' +import { close, toggleMin, toggleMax, move, focus } from 'helpers/windowActions' +import { faArrowUp, faExpandAlt, faTimes, faCompressAlt } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -const App = ({children, app, setApps}) => { - const {t} = useSettings() - const winRef = useRef(null); - const forceMax = useMediaQuery(`(max-width: ${app.width}), (max-height: ${app.height})`); +const App = ({ children, app, setApps }) => { + const { t } = useSettings() + const winRef = useRef(null) + const forceMax = useMediaQuery(`(max-width: ${app.width}), (max-height: ${app.height})`) useEffect(() => { move(app, winRef, setApps) - }, []) + }, [app, setApps]) return (
    {focus(app.name, setApps)}} + onClick={() => { focus(app.name, setApps) }} className={ - 'window' - + (app.min ? ' hidden' : '') - + (app.max || forceMax ? ' maximized' : '') + 'window' + + (app.min ? ' hidden' : '') + + (app.max || forceMax ? ' maximized' : '') } style={{ height: app.height, width: app.width, ...app.pos.length - ? {top: app.pos[1], left: app.pos[0]} + ? { top: app.pos[1], left: app.pos[0] } : { top: `calc((( 100vh - ${app.height} ) / 2) + 2em)`, - left: `calc(( 100vw - ${app.width} ) / 2)`, - } + left: `calc(( 100vw - ${app.width} ) / 2)` + } }} >

    {t(app.name)}

    {children}
    - { app.buttons.includes('min') && ( + {app.buttons.includes('min') && ( toggleMin(app.name, setApps)}> )} - { app.buttons.includes('max') && !forceMax && ( + {app.buttons.includes('max') && !forceMax && ( toggleMax(app.name, setApps)}> )} - { app.buttons.includes('close') && ( + {app.buttons.includes('close') && ( close(app.name, setApps)}> @@ -57,4 +57,4 @@ const App = ({children, app, setApps}) => { ) } -export default App; +export default App diff --git a/components/Form.js b/components/Form.js index 9a17660..681f13a 100644 --- a/components/Form.js +++ b/components/Form.js @@ -3,65 +3,65 @@ import React from 'react' import PropTypes from 'prop-types' import useSettings from 'hooks/useSettings' -const Form = ({errorMessage, onSubmit, isLogin}) => { - const {settings, setSettings, t} = useSettings() +const Form = ({ errorMessage, onSubmit, isLogin }) => { + const { settings, setSettings, t } = useSettings() const themeChange = c => { - setSettings(prev => ({...prev, theme: c})) + setSettings(prev => ({ ...prev, theme: c })) } const languageChange = l => { - setSettings(prev => ({...prev, language: l})) + setSettings(prev => ({ ...prev, language: l })) } return ( -
    +
    {isLogin ? t('log_in') : t('register_user')}
    - - + + {!isLogin && ( <> - + {t('language')}
    - {['en', 'pl', 'es', 'de'].map(l => ( -
    - languageChange(l)} - /> - -
    - ))} + {['en', 'pl', 'es', 'de'].map(l => ( +
    + languageChange(l)} + /> + +
    + ))}
    {t('color_theme')}
    - {['green', 'blue', 'black'].map(c => ( -
    - themeChange(c)} - /> -
    - ))} + {['green', 'blue', 'black'].map(c => ( +
    + themeChange(c)} + /> +
    + ))}
    )} - + - {errorMessage &&

    {t(errorMessage)}

    } + {errorMessage &&

    {t(errorMessage)}

    } ) } @@ -70,5 +70,5 @@ export default Form Form.propTypes = { errorMessage: PropTypes.string, - onSubmit: PropTypes.func, + onSubmit: PropTypes.func } diff --git a/components/Header.js b/components/Header.js index 83f0ff9..32ec977 100644 --- a/components/Header.js +++ b/components/Header.js @@ -1,27 +1,26 @@ import styles from 'styles/Main.module.scss' -import React, {useState} from 'react' -import {useRouter} from 'next/router' +import React, { useState } from 'react' +import { useRouter } from 'next/router' import Link from 'next/link' import useUser from 'hooks/useUser' import fetchJson from 'helpers/fetchJson' -import {focus, toggleMin} from 'helpers/windowActions' -import {open, close} from 'helpers/windowActions' +import { focus, toggleMin, open, close } from 'helpers/windowActions' import appList from 'configs/appList' import useSettings from 'hooks/useSettings' -import {faTimes} from '@fortawesome/free-solid-svg-icons' -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' +import { faTimes } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -const Header = ({apps, setApps}) => { +const Header = ({ apps, setApps }) => { const [userMenu, setUserMenu] = useState(false) const [showApps, setShowApps] = useState(false) - const {user, mutateUser} = useUser() - const {t} = useSettings() + const { user, mutateUser } = useUser() + const { t } = useSettings() const router = useRouter() const handleLogout = async (e) => { e.preventDefault() mutateUser( - await fetchJson('/api/logout', {method: 'POST'}), + await fetchJson('/api/logout', { method: 'POST' }), false ) router.push('/login') @@ -39,13 +38,13 @@ const Header = ({apps, setApps}) => {