/** * Styles */ import './style.scss'; /** * External dependencies */ import clsx from 'clsx'; /** * WordPress dependencies */ // eslint-disable-next-line import/no-extraneous-dependencies import { isEqual } from 'lodash'; import { useState, useEffect } from '@wordpress/element'; import { useSelect, useDispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ import isValidOpenAIApiKey from '../../utils/is-valid-openai-api-key'; import { ReactComponent as LoadingIcon } from '../../icons/loading.svg'; export default function PageSettings() { const [pendingSettings, setPendingSettings] = useState({}); const [settingsChanged, setSettingsChanged] = useState(false); const [isInvalidAPIKey, setIsInvalidAPIKey] = useState(false); const { updateSettings } = useDispatch('mind/settings'); const { settings, updating, error } = useSelect((select) => { const settingsSelect = select('mind/settings'); return { settings: settingsSelect.getSettings(), updating: settingsSelect.getUpdating(), error: settingsSelect.getError(), }; }); // Update pending settings from actual settings object. useEffect(() => { setPendingSettings(settings); }, [settings]); // Check if settings changed. useEffect(() => { setSettingsChanged(!isEqual(settings, pendingSettings)); }, [settings, pendingSettings]); return ( <>