PluginProbe
Smart Post – Post Grid, Post Carousel, Post Slider Gutenberg Blocks for Blog & News / 4.0.8
Smart Post – Post Grid, Post Carousel, Post Slider Gutenberg Blocks for Blog & News v4.0.8
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 2.3.5 2.3.6 2.4.0 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.15 2.4.16 2.4.17 2.4.18 2.4.19 2.4.2 2.4.20 2.4.21 All 88 releases
post-carousel / src / admin / components / cards / IntegrationsCard.js

IntegrationsCard.js in Smart Post – Post Grid, Post Carousel, Post Slider Gutenberg Blocks for Blog & News 4.0.8, at src/admin/components/cards/IntegrationsCard.js

105 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import Toggle from "react-toggle";
2 import { Demos, Docs, GearIcon } from "../icons/ui";
3 import { useState } from "@wordpress/element";
4 import { Modal } from "@wordpress/components";
5
6 const IntegrationsCard = ({
7 attributes,
8 blockName,
9 blockShowHideHandler,
10 value,
11 isDisabled = false,
12 token,
13 updateIntegrateToken,
14 }) => {
15 const { Icon, title, text, docsLink, demoLink } = attributes;
16 const disabledClass = isDisabled ? " sp-disabled" : "";
17 const [isOpen, setIsOpen] = useState(false);
18 const [apiToken, setApiToken] = useState(token);
19
20 return (
21 <>
22 <div className={`sp-pcp-blocks-settings-card${disabledClass}`}>
23 <div className="sp-pcp-blocks-settings-card-info">
24 <div className={`sp-pcp-blocks-settings-card-icon sp-${blockName}`}>
25 {!attributes?.imgUrl ? <Icon /> : <img src={attributes?.imgUrl} alt={title} width={"44px"} />}
26 </div>
27 <div className="sp-pcp-blocks-settings-card-docs">
28 <h4>{title}</h4>
29 <span>{text}</span>
30 <ul>
31 <li>
32 <a target="_blank" href={docsLink} rel="noreferrer">
33 <Docs /> Docs
34 </a>
35 </li>
36 <li>
37 <a target="_blank" href={demoLink} rel="noreferrer">
38 <Demos /> Demo
39 </a>
40 </li>
41 <li>
42 <span
43 className="sp-pcp-blocks-settings-card-ai-settings"
44 onClick={() => setIsOpen((prev) => !prev)}
45 >
46 <GearIcon />
47 </span>
48 </li>
49 </ul>
50 </div>
51 </div>
52
53 <div className="sp-pcp-blocks-settings-toggle-btn">
54 <Toggle
55 defaultChecked={value}
56 icons={false}
57 onChange={() => blockShowHideHandler(blockName, "integrates-options")}
58 disabled={isDisabled}
59 />
60 </div>
61 </div>
62 {isOpen && (
63 <Modal
64 icon={<Icon />}
65 title={title}
66 onRequestClose={() => setIsOpen(false)}
67 className="sp-pcp-blocks-settings-popup-container"
68 >
69 <div className="sp-pcp-blocks-settings-popup-setup">
70 <div className="sp-pcp-blocks-settings-body">
71 <div className="sp-pcp-blocks-settings-body-content">
72 <div className="sp-pcp-blocks-settings-form">
73 <div className="sp-pcp-blocks-settings-label">Token:</div>
74 <div className="sp-pcp-blocks-settings-input">
75 <input
76 name="api_token_field"
77 type="text"
78 className="sp-pcp-blocks-settings-input-field"
79 placeholder="Please enter you api token "
80 onChange={(e) => setApiToken(e?.target?.value)}
81 value={apiToken || ""}
82 />
83 </div>
84 </div>
85 <div className="sp-pcp-blocks-settings-form-save">
86 <button
87 className="sp-pcp-blocks-settings-form-save-btn"
88 onClick={() => {
89 updateIntegrateToken(blockName, apiToken);
90 }}
91 >
92 Save Token
93 </button>
94 </div>
95 </div>
96 </div>
97 </div>
98 </Modal>
99 )}
100 </>
101 );
102 };
103
104 export default IntegrationsCard;
105