PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.5
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 All 203 releases
betterdocs / react-src / admin / doc-categories / components / QuickEditPanel.js

QuickEditPanel.js in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.5, at react-src/admin/doc-categories/components/QuickEditPanel.js

79 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React, { useState, useEffect } from "react";
2 import { __ } from "@wordpress/i18n";
3 import { slugify } from "../utils/treeUtils";
4
5 const QuickEditPanel = ({ node, onSave, onCancel, isSaving }) => {
6 const [name, setName] = useState(node.name);
7 const [slug, setSlug] = useState(node.slug);
8 const [description, setDescription] = useState(node.description || "");
9 const [slugEdited, setSlugEdited] = useState(false);
10
11 useEffect(() => {
12 setName(node.name);
13 setSlug(node.slug);
14 setDescription(node.description || "");
15 setSlugEdited(false);
16 }, [node.id]);
17
18 const handleNameChange = (e) => {
19 const val = e.target.value;
20 setName(val);
21 if (!slugEdited) setSlug(slugify(val));
22 };
23
24 const handleSubmit = (e) => {
25 e.preventDefault();
26 if (!name.trim()) return;
27 onSave({ name: name.trim(), slug: slug.trim() || slugify(name.trim()), description });
28 };
29
30 return (
31 <form className="bd-dc-quick-edit" onSubmit={handleSubmit}>
32 <div className="bd-dc-quick-edit-grid">
33 <div className="bd-dc-field">
34 <label className="bd-dc-label">
35 {__("Name", "betterdocs")}
36 <span className="bd-dc-required">*</span>
37 </label>
38 <input
39 type="text"
40 className="bd-dc-input"
41 value={name}
42 onChange={handleNameChange}
43 required
44 autoFocus
45 />
46 </div>
47 <div className="bd-dc-field">
48 <label className="bd-dc-label">{__("Slug", "betterdocs")}</label>
49 <input
50 type="text"
51 className="bd-dc-input"
52 value={slug}
53 onChange={(e) => { setSlug(e.target.value); setSlugEdited(true); }}
54 />
55 </div>
56 <div className="bd-dc-field bd-dc-field-full">
57 <label className="bd-dc-label">{__("Description", "betterdocs")}</label>
58 <textarea
59 className="bd-dc-input bd-dc-textarea"
60 value={description}
61 onChange={(e) => setDescription(e.target.value)}
62 rows={2}
63 />
64 </div>
65 </div>
66 <div className="bd-dc-quick-edit-actions">
67 <button type="submit" className="bd-dc-btn bd-dc-btn-primary" disabled={isSaving}>
68 {isSaving ? __("Saving…", "betterdocs") : __("Update", "betterdocs")}
69 </button>
70 <button type="button" className="bd-dc-btn bd-dc-btn-ghost" onClick={onCancel}>
71 {__("Cancel", "betterdocs")}
72 </button>
73 </div>
74 </form>
75 );
76 };
77
78 export default QuickEditPanel;
79