diff --git a/src/components/Elements/MainModal/scss/index.scss b/src/components/Elements/MainModal/scss/index.scss index ce0f4178..abadedcb 100644 --- a/src/components/Elements/MainModal/scss/index.scss +++ b/src/components/Elements/MainModal/scss/index.scss @@ -291,6 +291,8 @@ h5 { flex-flow: row; gap: 20px; align-items: center; + width: 275px; + justify-content: flex-end; } } diff --git a/src/features/greeting/options/default.js b/src/features/greeting/options/default.js new file mode 100644 index 00000000..9d13194f --- /dev/null +++ b/src/features/greeting/options/default.js @@ -0,0 +1,12 @@ +const DefaultOptions = { + greeting: true, + birthday: new Date(), + customEvents: [], + birthdayenabled: false, + defaultGreetingMessage: true, + greetingName: '', + birthdayage: false, + zoomGreeting: 100 +}; + +export default DefaultOptions; diff --git a/src/features/message/Message.jsx b/src/features/message/Message.jsx index d7dd5070..ada7b2a8 100644 --- a/src/features/message/Message.jsx +++ b/src/features/message/Message.jsx @@ -3,18 +3,22 @@ import EventBus from 'utils/eventbus'; import './message.scss'; const Message = () => { + const calculateFontSize = () => { + const zoomMessage = localStorage.getItem('zoomMessage') || 100; + return `${1 * Number((zoomMessage || 100) / 100)}em`; + }; + const [messageText, setMessageText] = useState(''); const [display, setDisplay] = useState('none'); - const [fontSize, setFontSize] = useState('1em'); + const [fontSize, setFontSize] = useState(calculateFontSize()); const message = useRef(); useEffect(() => { const handleRefresh = (data) => { if (data === 'message') { const messageSetting = localStorage.getItem('message'); - const zoomMessage = localStorage.getItem('zoomMessage'); setDisplay(messageSetting === 'false' ? 'none' : 'block'); - setFontSize(`${1 * Number((zoomMessage || 100) / 100)}em`); + setFontSize(calculateFontSize()); } }; @@ -25,6 +29,7 @@ const Message = () => { } EventBus.on('refresh', handleRefresh); + return () => { EventBus.off('refresh'); }; diff --git a/src/features/message/options/default.js b/src/features/message/options/default.js new file mode 100644 index 00000000..5dddffed --- /dev/null +++ b/src/features/message/options/default.js @@ -0,0 +1,7 @@ +const DefaultOptions = { + message: false, + messages: [], + zoomMessage: 100 +}; + +export default DefaultOptions; diff --git a/src/features/navbar/components/Refresh.jsx b/src/features/navbar/components/Refresh.jsx index 6372d583..9f7163df 100644 --- a/src/features/navbar/components/Refresh.jsx +++ b/src/features/navbar/components/Refresh.jsx @@ -11,17 +11,18 @@ function Refresh() { useEffect(() => { EventBus.on('refresh', (data) => { if (data === 'navbar' || data === 'background') { - setRefreshOption(localStorage.getItem('refreshOption')); - updateRefreshText(); + const newRefreshOption = localStorage.getItem('refreshOption'); + setRefreshOption(newRefreshOption); + updateRefreshText(newRefreshOption); } }); updateRefreshText(); - }, []); + }); function updateRefreshText() { let text; - switch (localStorage.getItem('refreshOption')) { + switch (refreshOption) { case 'background': text = variables.getMessage('modals.main.settings.sections.background.title'); break; diff --git a/src/features/quicklinks/options/default.js b/src/features/quicklinks/options/default.js new file mode 100644 index 00000000..e8a816e2 --- /dev/null +++ b/src/features/quicklinks/options/default.js @@ -0,0 +1,10 @@ +const DefaultOptions = { + quicklinks: [], // list of quicklinks + quicklinksenabled: false, + quicklinksnewtab: false, + quicklinkstooltip: false, + quicklinksStyle: 'icon', + zoomQuicklinks: 1, +}; + +export default DefaultOptions; diff --git a/src/features/quote/options/default.js b/src/features/quote/options/default.js new file mode 100644 index 00000000..f260b20a --- /dev/null +++ b/src/features/quote/options/default.js @@ -0,0 +1,13 @@ +const DefaultOptions = { + quote: false, + quoteType: 'api', + customQuote: [], + copyButton: false, + quoteShareButton: false, + favouriteQuoteEnabled: false, + authorLink: false, + authorImg: true, + zoomQuote: 100 +}; + +export default DefaultOptions; diff --git a/src/features/search/Search.jsx b/src/features/search/Search.jsx index 97b159b2..b9607c72 100644 --- a/src/features/search/Search.jsx +++ b/src/features/search/Search.jsx @@ -139,7 +139,6 @@ function Search() { } const getSuggestionsDebounced = useDebouncedCallback(getSuggestions, 100); - // const getSuggestionsDebounced = getSuggestions; /** * If the user selects a search engine from the dropdown menu, the function will set the state of the diff --git a/src/features/search/components/autocomplete/Autocomplete.jsx b/src/features/search/components/autocomplete/Autocomplete.jsx index e6d40753..9e27bd7b 100644 --- a/src/features/search/components/autocomplete/Autocomplete.jsx +++ b/src/features/search/components/autocomplete/Autocomplete.jsx @@ -1,95 +1,78 @@ -import { PureComponent } from 'react'; +import { useEffect, useState } from 'react'; import EventBus from 'utils/eventbus'; import './autocomplete.scss'; -class Autocomplete extends PureComponent { - constructor(props) { - super(props); - this.state = { - filtered: [], - input: '', - autocompleteDisabled: localStorage.getItem('autocomplete') !== 'true', - }; - } +function Autocomplete(props) { + const [filtered, setFiltered] = useState([]); + const [input, setInput] = useState(''); + const [autocompleteDisabled, setAutocompleteDisabled] = useState(localStorage.getItem('autocomplete') !== 'true'); - onChange = (e) => { - if (this.state.autocompleteDisabled) { - return this.setState({ - input: e.target.value, - }); + const onChange = (e) => { + if (autocompleteDisabled) { + return setInput(e.target.value); } - this.setState({ - filtered: this.props.suggestions.filter( - (suggestion) => suggestion.toLowerCase().indexOf(e.target.value.toLowerCase()) > -1, - ), - input: e.target.value, - }); + setFiltered(props.suggestions.filter( + (suggestion) => suggestion.toLowerCase().indexOf(e.target.value.toLowerCase()) > -1, + )); + setInput(e.target.value); + props.onChange(e.target.value); + } - this.props.onChange(e.target.value); - }; - - onClick = (e) => { - this.setState({ - filtered: [], - input: e.target.innerText, - }); - - this.props.onClick({ + const onClick = (e) => { + setFiltered([]); + setInput(e.target.innerText); + props.onClick({ preventDefault: () => e.preventDefault(), target: { value: e.target.innerText, }, }); - }; + } - componentDidMount() { + useEffect(() => { EventBus.on('refresh', (data) => { if (data === 'search') { - this.setState({ - autocompleteDisabled: localStorage.getItem('autocomplete') !== 'true', - }); + setAutocompleteDisabled(localStorage.getItem('autocomplete') !== 'true'); } }); - } - componentWillUnmount() { - EventBus.off('refresh'); - } - - render() { - let autocomplete = null; - - // length will only be > 0 if enabled - if (this.state.filtered.length > 0 && this.state.input.length > 0) { - autocomplete = ( -