PluginProbe
Tableberg – Simple Gutenberg Table Block / 1.1.5
Tableberg – Simple Gutenberg Table Block v1.1.5
1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 trunk 0.0.2 0.2.1 0.3.2 0.3.3 0.4.1 0.5.0 0.5.1 0.5.2 0.5.3 0.5.4 0.5.5 0.5.6 0.5.7 All 42 releases
tableberg / admin / src / components / AITableSettings.jsx

AITableSettings.jsx in Tableberg – Simple Gutenberg Table Block 1.1.5, at admin/src/components/AITableSettings.jsx

154 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React, { useState } from "react";
2 import { __ } from "@wordpress/i18n";
3 import BoxContent from "./BoxContent/BoxContent";
4 import { testAIConnection, saveAISettings } from "../functions";
5 import "./AITableSettings.css";
6
7 function AITableSettings({ apiKey = "", onSettingsChange }) {
8 const [localApiKey, setLocalApiKey] = useState(apiKey);
9 const [showApiKey, setShowApiKey] = useState(false);
10 const [isTesting, setIsTesting] = useState(false);
11 const [testStatus, setTestStatus] = useState(null);
12 const [isSaving, setIsSaving] = useState(false);
13
14 const handleTestConnection = async () => {
15 if (!localApiKey) {
16 setTestStatus({
17 success: false,
18 message: __("Please enter an API key", "tableberg"),
19 });
20 return;
21 }
22
23 setIsTesting(true);
24 setTestStatus(null);
25
26 try {
27 const result = await testAIConnection(localApiKey);
28 setTestStatus({
29 success: result.success,
30 message:
31 result.message ||
32 (result.success
33 ? __("Connection successful!", "tableberg")
34 : __(
35 "Connection failed. Please check your API key.",
36 "tableberg"
37 )),
38 });
39 } catch (error) {
40 setTestStatus({
41 success: false,
42 message: __(
43 "Error testing connection. Please try again.",
44 "tableberg"
45 ),
46 });
47 } finally {
48 setIsTesting(false);
49 }
50 };
51
52 const handleSave = async () => {
53 setIsSaving(true);
54 try {
55 await saveAISettings({
56 api_key: localApiKey,
57 });
58 if (onSettingsChange) {
59 onSettingsChange({
60 api_key: localApiKey,
61 });
62 }
63 } catch (error) {
64 // Error saving AI settings
65 } finally {
66 setIsSaving(false);
67 }
68 };
69
70 return (
71 <div className="tableberg-ai-table-settings tableberg-settings-card">
72 <BoxContent
73 title={__("AI Table Settings", "tableberg")}
74 content={__(
75 "Configure your OpenAI API key to enable AI-powered table generation. This feature is available for Pro users only.",
76 "tableberg"
77 )}
78 >
79 <div className="tableberg-ai-settings-content">
80 <div className="tableberg-api-key-field">
81 <label htmlFor="ai-api-key">
82 {__("OpenAI API Key", "tableberg")}
83 </label>
84 <div className="tableberg-api-key-input-wrapper">
85 <input
86 id="ai-api-key"
87 type={showApiKey ? "text" : "password"}
88 value={localApiKey}
89 onChange={e => setLocalApiKey(e.target.value)}
90 placeholder={__("sk-…", "tableberg")}
91 className="tableberg-api-key-input"
92 />
93 <button
94 type="button"
95 onClick={() => setShowApiKey(!showApiKey)}
96 className="tableberg-toggle-visibility"
97 >
98 {showApiKey
99 ? __("Hide", "tableberg")
100 : __("Show", "tableberg")}
101 </button>
102 </div>
103 <p className="tableberg-help-text">
104 {__("Get your API key from", "tableberg")}{" "}
105 <a
106 href="https://platform.openai.com/api-keys"
107 target="_blank"
108 rel="noopener noreferrer"
109 >
110 {__("OpenAI Dashboard", "tableberg")}
111 </a>
112 </p>
113 </div>
114
115 {testStatus && (
116 <div
117 className={`tableberg-test-status ${
118 testStatus.success ? "success" : "error"
119 }`}
120 >
121 {testStatus.message}
122 </div>
123 )}
124
125 <div className="tableberg-ai-settings-actions">
126 <button
127 type="button"
128 onClick={handleTestConnection}
129 disabled={isTesting || !localApiKey}
130 className="tableberg-button tableberg-button-secondary"
131 >
132 {isTesting
133 ? __("Testing…", "tableberg")
134 : __("Test Connection", "tableberg")}
135 </button>
136 <button
137 type="button"
138 onClick={handleSave}
139 disabled={isSaving}
140 className="tableberg-button tableberg-button-primary"
141 >
142 {isSaving
143 ? __("Saving…", "tableberg")
144 : __("Save Settings", "tableberg")}
145 </button>
146 </div>
147 </div>
148 </BoxContent>
149 </div>
150 );
151 }
152
153 export default AITableSettings;
154