diff --git a/src/_variables.scss b/src/_variables.scss
index e51c0b5..54fd29b 100644
--- a/src/_variables.scss
+++ b/src/_variables.scss
@@ -2,4 +2,7 @@
--mind-brand-color: #e455df;
--mind-brand-darken-color: #bb56df;
--mind-brand-color-2: #4376ec;
+
+ --mind-error-color: #e74f4f;
+ --mind-error-light-color: #faf4f4;
}
diff --git a/src/admin/page-settings/index.js b/src/admin/page-settings/index.js
index 758be45..3950074 100644
--- a/src/admin/page-settings/index.js
+++ b/src/admin/page-settings/index.js
@@ -3,6 +3,11 @@
*/
import './style.scss';
+/**
+ * External dependencies
+ */
+import clsx from 'clsx';
+
/**
* WordPress dependencies
*/
@@ -15,11 +20,13 @@ 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');
@@ -64,7 +71,13 @@ export default function PageSettings() {
-
+
+ {isInvalidAPIKey && (
+
+ {__('Please enter a valid API key', 'mind')}
+
+ )}
{error && {error}
}
@@ -87,7 +105,14 @@ export default function PageSettings() {
onClick={(e) => {
e.preventDefault();
- updateSettings(pendingSettings);
+ if (
+ isValidOpenAIApiKey(pendingSettings.openai_api_key)
+ ) {
+ setIsInvalidAPIKey(false);
+ updateSettings(pendingSettings);
+ } else {
+ setIsInvalidAPIKey(true);
+ }
}}
>
{__('Save Changes', 'mind')}
diff --git a/src/admin/page-settings/style.scss b/src/admin/page-settings/style.scss
index 883bf76..7108f01 100644
--- a/src/admin/page-settings/style.scss
+++ b/src/admin/page-settings/style.scss
@@ -39,15 +39,23 @@
}
}
}
+ .mind-admin-settings-card-input-error input {
+ border-color: var(--mind-error-color);
+ }
}
.mind-admin-settings-error {
padding: 20px;
margin-top: 20px;
margin-bottom: -20px;
- background-color: #faf4f4;
- color: #e74f4f;
- border-left: 3px solid #e74f4f;
+ background-color: var(--mind-error-light-color);
+ color: var(--mind-error-color);
+ border-left: 3px solid var(--mind-error-color);
+}
+.mind-admin-setting-error {
+ font-size: 12px;
+ margin-top: 2px;
+ color: var(--mind-error-color);
}
.mind-admin-settings-actions {
diff --git a/src/utils/is-valid-openai-api-key/index.js b/src/utils/is-valid-openai-api-key/index.js
new file mode 100644
index 0000000..13e267e
--- /dev/null
+++ b/src/utils/is-valid-openai-api-key/index.js
@@ -0,0 +1,4 @@
+export default function isValidOpenAIApiKey(apiKey) {
+ const regex = /^sk-[a-zA-Z0-9]{32,}/;
+ return regex.test(apiKey);
+}