import variables from 'config/variables'; import React, { useState, useEffect } from 'react'; import { MdCancel, MdAdd, MdSource, MdOutlineFormatQuote } from 'react-icons/md'; import { Header, Row, Content, Action, Section, PreferencesWrapper, } from 'components/Layout/Settings'; import { Checkbox, Dropdown, Textarea } from 'components/Form/Settings'; import { Button } from 'components/Elements'; import { FREQUENCY_OPTIONS } from 'utils/frequencyManager'; import './QuoteOptions.scss'; const QuoteOptions = ({ currentSubSection, onSubSectionChange, sectionName }) => { const getCustom = () => { let data = JSON.parse(localStorage.getItem('customQuote')); if (data === null) { data = []; } return data; }; const [quoteType, setQuoteType] = useState(() => { let type = localStorage.getItem('quoteType') || 'quote_pack'; // Migrate deprecated 'api' type to 'quote_pack' if (type === 'api') { type = 'quote_pack'; localStorage.setItem('quoteType', 'quote_pack'); } return type; }); // Migration: Force authorDetails on for users upgrading from older versions useState(() => { if (localStorage.getItem('authorDetails') === null) { localStorage.setItem('authorDetails', 'true'); } }); const [customQuote, setCustomQuote] = useState(getCustom()); // Clear quote queue when quote type changes useEffect(() => { localStorage.removeItem('quoteQueue'); localStorage.removeItem('currentQuote'); }, [quoteType]); const handleCustomQuote = (e, text, index, type) => { const result = text === true ? e.target.value : e.target.result; const updatedCustomQuote = [...customQuote]; updatedCustomQuote[index][type] = result; setCustomQuote(updatedCustomQuote); localStorage.setItem('customQuote', JSON.stringify(updatedCustomQuote)); document.querySelector('.reminder-info').style.display = 'flex'; localStorage.setItem('showReminder', true); }; const modifyCustomQuote = (type, index) => { const updatedCustomQuote = [...customQuote]; if (type === 'add') { updatedCustomQuote.push({ quote: '', author: '' }); } else { updatedCustomQuote.splice(index, 1); } setCustomQuote(updatedCustomQuote); localStorage.setItem('customQuote', JSON.stringify(updatedCustomQuote)); // Clear quote queue when custom quotes are modified localStorage.removeItem('quoteQueue'); localStorage.removeItem('currentQuote'); }; const QUOTE_SECTION = 'modals.main.settings.sections.quote'; const ButtonOptions = () => { return ( ); }; const SourceDropdown = () => { return ( setQuoteType(value)} category="quote" items={[ localStorage.getItem('quote_packs') && { value: 'quote_pack', text: variables.getMessage('modals.main.marketplace.title'), }, { value: 'custom', text: variables.getMessage(`${QUOTE_SECTION}.custom`) }, ]} /> ); }; const FrequencyOptions = () => { return ( { localStorage.setItem('quoteStartTime', Date.now()); // Clear queue if switching from refresh to time-based frequency const oldValue = localStorage.getItem('quoteFrequency'); if (oldValue === 'refresh' && value !== 'refresh') { localStorage.removeItem('quoteQueue'); } // Notify the frequency interval hook that the frequency changed window.dispatchEvent( new CustomEvent('frequencyChanged', { detail: { type: 'quote' }, }), ); }} items={FREQUENCY_OPTIONS.map((opt) => ({ value: opt.value, text: variables.getMessage(opt.text), }))} /> ); }; const AdditionalOptions = () => { return ( ); }; const isSourceSection = currentSubSection === 'source'; let customSettings; if (quoteType === 'custom' && isSourceSection) { customSettings = ( <>