File: /mnt/drbd/www/edenhouse/wp-content/plugins/essential-blocks/admin/src/components/TabIntegrations.js
import React, { useState, useEffect } from "react";
import { __ } from "@wordpress/i18n";
import betterDocs from "../icons/intregrations/bd.svg";
import betterlinks from "../icons/intregrations/btl.svg";
import easyjobs from "../icons/intregrations/ej.svg";
import embedpress from "../icons/intregrations/ep.svg";
import notificationx from "../icons/intregrations/nx.svg";
import betterPayment from "../icons/intregrations/bp.svg";
import scheduledPress from "../icons/intregrations/wscp.svg";
import essentialAddons from "../icons/intregrations/ea.svg";
const { installPlugin } = window.EBControls;
const integrations = [
{
slug: "betterdocs",
basename: "betterdocs/betterdocs.php",
logo: betterDocs,
title: "BetterDocs",
desc: __(
"BetterDocs will help you to create & organize your documentation page in a beautiful way that will make your visitors find any help article easily.",
"essential-blocks"
),
},
{
slug: "embedpress",
basename: "embedpress/embedpress.php",
logo: embedpress,
title: "EmbedPress",
desc: __(
"EmbedPress lets you embed videos, images, posts, audio, maps and upload PDF, DOC, PPT & all other types of content into your WordPress site.",
"essential-blocks"
),
},
{
slug: "betterlinks",
basename: "betterlinks/betterlinks.php",
logo: betterlinks,
title: "BetterLinks",
desc: __(
"Best Link Shortening tool to create, shorten and manage any URL to help you cross-promote your brands & products. Gather analytics reports, run successfully marketing campaigns easily & many more.",
"essential-blocks"
),
},
{
slug: "notificationx",
basename: "notificationx/notificationx.php",
logo: notificationx,
title: "NotificationX",
desc: __(
"Best FOMO Social Proof Plugin to boost your sales conversion. Create stunning Sales Popup & Notification Bar With Elementor Support.",
"essential-blocks"
),
},
{
slug: "easyjobs",
basename: "easyjobs/easyjobs.php",
logo: easyjobs,
title: "easy.jobs",
desc: __(
"Easy solution for the job recruitment to attract, manage & hire right talent faster. The Best Talent Recruitment Suite which lets you manage jobs & career page in Elementor.",
"essential-blocks"
),
},
{
slug: "wp-scheduled-posts",
basename: "wp-scheduled-posts/wp-scheduled-posts.php",
logo: scheduledPress,
title: "SchedulePress",
desc: __(
"Best Content Marketing Tool For WordPress – Schedule, Organize, & Auto Share Blog Posts. Take a quick glance at your content planning with Schedule Calendar, Auto & Manual Scheduler and more.",
"essential-blocks"
),
},
{
slug: "essential-addons-for-elementor-lite",
basename:
"essential-addons-for-elementor-lite/essential_adons_elementor.php",
logo: essentialAddons,
title: "Essential Addons for Elementor",
desc: __(
"Powerful Elementor widgets library with 90+ advanced, fully customizable elements & extensions to enhance your website designing experience.",
"essential-blocks"
),
},
{
slug: "better-payment",
basename: "better-payment/better-payment.php",
logo: betterPayment,
title: "Better Payment",
desc: __(
"Better Payment streamlines transactions in Elementor, integrating PayPal, Stripe, advanced analytics, validation, and Elementor forms for the most secure & efficient payments.",
"essential-blocks"
),
},
];
export default function TabIntegrations() {
const [status, setStatus] = useState({});
useEffect(() => {
const data = { ...status };
integrations.map((item, index) => {
const pluginData =
EssentialBlocksLocalize.get_plugins[item.basename];
let text = "Install";
if (pluginData) {
if (pluginData.active) {
text = "Activated";
} else {
text = "Active";
}
}
data[item.basename] = {
btnText: text,
isLoading: false,
};
});
setStatus({ ...data });
}, []);
const installIntegration = (index, integrationName, plugin_file) => {
const pluginData = EssentialBlocksLocalize.get_plugins[plugin_file];
if (pluginData === "object") {
if (pluginData.active || status[plugin_file].btnText !== "Active")
return;
} else {
if (status[plugin_file].btnText == "Active") {
setStatus({
...status,
[plugin_file]: {
btnText: "Activating...",
isLoading: true,
},
});
} else {
setStatus({
...status,
[plugin_file]: {
btnText: "Installing...",
isLoading: true,
},
});
}
}
installPlugin(integrationName, plugin_file).then((data) => {
const res = JSON.parse(data);
if (res.success) {
setStatus({
...status,
[plugin_file]: {
btnText: "Activated",
isLoading: false,
},
});
}
else {
setStatus({
...status,
[plugin_file]: {
btnText: "Couldn\'t Activated the plugin!",
isLoading: false,
},
});
}
});
};
return (
<>
<div className="eb-admin-grid">
{integrations.map((item, index) => (
<div
key={index}
className="eb-col-3 eb-col-4-md eb-integration-block"
>
{/* <div className="eb-integration-block-wrapper"> */}
{/* <div className="eb-integration-block"> */}
<div className="icon">
<img src={item.logo} alt="" />
</div>
<h3 className="eb-integration-block__title">
{item.title}
</h3>
<p className="eb-integration-block__text">
{item.desc}
</p>
<button
className={`eb-integration-block__link eb-btn eb-btn-md ${status[item.basename]?.btnText == "Activated"
? "eb-btn-border"
: "eb-btn-primary"
}`}
onClick={() =>
installIntegration(
index,
item.slug,
item.basename
)
}
disabled={
status[item.basename]?.btnText == "Activated"
}
>
{status[item.basename]?.isLoading && (
<img
className="eb-install-loader"
src={`${EssentialBlocksLocalize.eb_plugins_url}/assets/images/loading.svg`}
/>
)}
{status[item.basename]?.btnText}
</button>
{/* </div> */}
{/* </div> */}
</div>
))}
</div>
</>
);
}