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 / gutenberg / components / partials / FAQList.js

FAQList.js in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.5, at react-src/gutenberg/components/partials/FAQList.js

112 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React from "react";
2 import { useMemo } from "@wordpress/element";
3 import { buildQueryString } from "@wordpress/url";
4
5 import { useFetch } from "../../hooks";
6 import { htmlToElem } from "../../helpers/helper";
7 import { DownChevronIcon, Minus1, Minus2, Plus1, Plus2, UpChevronIcon } from "../icons/FaqIcons";
8
9 const FAQList = ({
10 className = "betterfaqs-articles-list",
11 attributes,
12 faqs,
13 widgetType,
14 ...props
15 }) => {
16 const {
17 postsPerPage,
18 postsOrderBy,
19 postsOrder,
20 faqLayout,
21 listIcon,
22 enableNestedSubcategory,
23 showButtonIcon,
24 buttonIcon,
25 buttonIconPosition,
26 buttonColor,
27 buttonHoverColor,
28 faqTaxonomy,
29 } = attributes;
30
31 // Map faqTaxonomy to the WP REST filter param for betterdocs_faq posts.
32 const faqTermParam = (faqTaxonomy === 'betterdocs_product_faq_category' || faqTaxonomy === 'product_assignments')
33 ? 'betterdocs_product_faq_category'
34 : 'betterdocs_faq_category';
35
36 const faqsByCatIDURL = useMemo(() => {
37 let query = {
38 posts_per_page: -1,
39 orderby: postsOrderBy,
40 order: postsOrder,
41 [faqTermParam]: props.id,
42 };
43
44 const baseURL =
45 query.orderby === "betterfaqs_order"
46 ? "/betterdocs/order_faqs"
47 : "/wp/v2/betterdocs_faq";
48
49 return `${baseURL}?${buildQueryString(query)}`;
50 }, [faqs, postsPerPage, postsOrderBy, postsOrder, props.id, faqTermParam]);
51
52 const {
53 data: betterdocs_faq,
54 isLoading: isFAQLoading,
55 error: faqsError,
56 } = useFetch(faqsByCatIDURL);
57
58 return (
59 <ul class="betterdocs-faq-list">
60 {!isFAQLoading &&
61 betterdocs_faq.length > 0 &&
62 betterdocs_faq.map((faq) => (
63 <li>
64 <div className={`betterdocs-faq-group`}>
65 <div className="betterdocs-faq-post">
66 {showButtonIcon && faqLayout == "layout-2" && (
67 <div className="betterdocs-faq-post-icon-group">
68 <Minus2
69 buttonColor={buttonColor}
70 buttonHoverColor={buttonHoverColor}
71 />
72 <Plus2
73 buttonColor={buttonColor}
74 buttonHoverColor={buttonHoverColor}
75 />
76 </div>
77 )}
78 <span className="betterdocs-faq-post-name">
79 {faq.title.rendered}
80 </span>
81
82 {showButtonIcon && faqLayout == "layout-1" && (
83 <>
84 <Minus1
85 buttonColor={buttonColor}
86 buttonHoverColor={buttonHoverColor}
87 />
88 <Plus1
89 buttonColor={buttonColor}
90 buttonHoverColor={buttonHoverColor}
91 />
92 </>
93 )}
94 {showButtonIcon && faqLayout == 'layout-3' && (
95 <>
96 <UpChevronIcon/>
97 <DownChevronIcon/>
98 </>
99 )}
100 </div>
101 <div className="betterdocs-faq-main-content">
102 {htmlToElem(faq.content.rendered)}
103 </div>
104 </div>
105 </li>
106 ))}
107 </ul>
108 );
109 };
110
111 export default FAQList;
112