refactor: feature based defaults

Co-authored-by: David Ralph <me@davidcralph.co.uk>
Co-authored-by: Isaac <contact@eartharoid.me>
This commit is contained in:
alexsparkes
2024-06-11 11:13:17 +01:00
parent 8e993b4f93
commit bf1d1660e4
13 changed files with 174 additions and 75 deletions

View File

@@ -0,0 +1,12 @@
const DefaultOptions = {
greeting: true,
birthday: new Date(),
customEvents: [],
birthdayenabled: false,
defaultGreetingMessage: true,
greetingName: '',
birthdayage: false,
zoomGreeting: 100
};
export default DefaultOptions;

View File

@@ -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');
};

View File

@@ -0,0 +1,7 @@
const DefaultOptions = {
message: false,
messages: [],
zoomMessage: 100
};
export default DefaultOptions;

View File

@@ -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;

View File

@@ -0,0 +1,10 @@
const DefaultOptions = {
quicklinks: [], // list of quicklinks
quicklinksenabled: false,
quicklinksnewtab: false,
quicklinkstooltip: false,
quicklinksStyle: 'icon',
zoomQuicklinks: 1,
};
export default DefaultOptions;

View File

@@ -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;

View File

@@ -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

View File

@@ -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 = (
<div className="suggestions">
{this.state.filtered.map((suggestion) => (
<div key={suggestion} onClick={this.onClick}>
{suggestion}
</div>
))}
</div>
);
return () => {
EventBus.off('refresh');
}
});
return (
<div style={{ display: 'flex', flexFlow: 'column' }}>
<input
type="text"
onChange={this.onChange}
value={this.state.input}
placeholder={this.props.placeholder || ''}
autoComplete="off"
spellCheck={false}
id={this.props.id || ''}
/>
{autocomplete}
let autocomplete = null;
// length will only be > 0 if enabled
if (filtered.length > 0 && input.length > 0) {
autocomplete = (
<div className="suggestions">
{filtered.map((suggestion) => (
<div key={suggestion} onClick={onClick}>
{suggestion}
</div>
))}
</div>
);
}
return (
<div style={{ display: 'flex', flexFlow: 'column' }}>
<input
type="text"
onChange={onChange}
value={input}
placeholder={props.placeholder || ''}
autoComplete="off"
spellCheck={false}
id={props.id || ''}
/>
{autocomplete}
</div>
);
}
export { Autocomplete as default, Autocomplete };

View File

@@ -0,0 +1,9 @@
const DefaultOptions = {
search: false,
searchEngine: 'duckduckgo',
customSearchEngine: '',
voiceSearch: false,
searchDropdown: false
};
export default DefaultOptions;

View File

@@ -0,0 +1,6 @@
const DefaultOptions = {
stats: true,
statsData: {},
};
export default DefaultOptions;

View File

@@ -0,0 +1,37 @@
const DefaultDateOptions = {
date: false,
dateType: 'long',
longFormat: 'DMY',
dayofweek: false,
datenth: false,
dateFormat: 'DMY',
shortFormat: 'dots',
zoomDate: 100,
weeknumber: false,
datezero: false,
};
const DefaultTimeOptions = {
time: true,
timeType: 'digital',
hourColour: '#ffffff',
minuteColour: '#ffffff',
secondColour: '#ffffff',
timeformat: 'twentyfourhour',
seconds: false,
zero: true,
secondHand: false,
minuteHand: true,
hourHand: true,
hourMarks: false,
minuteMarks: false,
roundClock: true,
zoomClock: 100,
};
const DefaultOptions = {
date: DefaultDateOptions,
time: DefaultTimeOptions,
};
export default DefaultOptions;

View File

@@ -0,0 +1,15 @@
const DefaultOptions = {
weather: false,
windspeed: true,
weatherType: 'basic',
tempformat: 'celsius',
weatherdescription: false,
cloudiness: false,
humidity: false,
visibility: false,
windDirection: false,
atmosphericpressure: false,
zoomWeather: 100,
};
export default DefaultOptions;