HEX
Server: nginx/1.24.0
System: Linux webserver 6.8.0-85-generic #85-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 18 15:26:59 UTC 2025 x86_64
User: wpuser (1002)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /opt/wpsites/datainsightnow.com/wp-content/plugins/essential-blocks/blocks/openverse/src/edit.js
/**
 * WordPress dependencies
 */
import { __ } from "@wordpress/i18n";
import {
	BlockControls,
	useBlockProps,
	BlockAlignmentToolbar,
} from "@wordpress/block-editor";
import { ToolbarButton, Toolbar } from "@wordpress/components";
import { edit } from "@wordpress/icons";
import { useEffect, useState } from "@wordpress/element";
import { select, useSelect } from "@wordpress/data";

/**
 * Internal depencencies
 */
import classnames from "classnames";

import Inspector from "./inspector";
import Style from "./style";

const { duplicateBlockIdFix } = window.EBControls;

import SeachModal from "./template-components/searchModal";
import DisplayImage from "./template-components/displayImage";
import Search from "./template-components/search";
import { OpenverseMainIcon } from "./template-components/icons/openverseMainIcon";
import { ApiInfo } from "./template-components/apiInfo";
import { isEmpty } from "lodash";

export default function Edit(props) {
	const { attributes, setAttributes, className, clientId, isSelected } = props;
	const {
		resOption,
		blockId,
		blockMeta,
		horizontalAlign,
		verticalAlign,
		stylePreset,
		attributionStyle,
		hoverEffect,
		imageAlign,
		classHook,
		imageurl,
		apiInfo,
		searchQ,
	} = attributes;

	const [loadingApi, setLoadingApi] = useState(false);
	const [openverseRegError, setOpenverseRegError] = useState({ status: false });
	const [showForm, setShowForm] = useState(false);

	const [openverseData, setOpenverseData] = useState([]);
	const [openverseDataCount, setOpenverseDataCount] = useState(0);
	const [loading, setLoading] = useState(true);
	const [openverseImage, setOpenverseImage] = useState("");
	const [openverseError, setOpenverseError] = useState({
		status: false,
		type: "",
	});

	const [openverseModal, setOpenverseModal] = useState(false);

	const [pagination, setPagination] = useState(1);
	const [totalPages, setTotalPages] = useState(1);

	// search
	// const [q, setQ] = useState("");
	const [filterData, setFilterData] = useState({
		licenseType: [],
		licenses: [],
		category: [],
		extension: [],
		aspectRatio: [],
		size: [],
	});

	// this useEffect is for creating a unique id for each block's unique className by a random unique number
	useEffect(() => {
		const BLOCK_PREFIX = "eb-openverse";
		duplicateBlockIdFix({
			BLOCK_PREFIX,
			blockId,
			setAttributes,
			select,
			clientId,
		});
	}, []);

	const blockProps = useBlockProps({
		className: classnames(className, `eb-guten-block-main-parent-wrapper`),
	});

	const setimageAlign = (newAlign) => {
		switch (newAlign) {
			case "left":
				setAttributes({ imageAlign: "0" });
				break;
			case "right":
				setAttributes({ imageAlign: "0 0 0 auto" });
				break;
			default:
				setAttributes({ imageAlign: "0 auto" });
		}
	};

	//Initial UseEffect
	useEffect(() => {
		setLoadingApi(true);
		//Get Openverse Email, Name
		let data = new FormData();
		data.append("action", "openverse_email_name_DB");
		data.append("admin_nonce", EssentialBlocksLocalize.admin_nonce);
		fetch(EssentialBlocksLocalize.ajax_url, {
			method: "POST",
			body: data,
		}) // wrapped
			.then((res) => res.text())
			.then((data) => {
				const response = JSON.parse(data);

				if (response.success && response.data) {
					if (response.data.client_id) {
						setShowForm(false);
					} else {
						setShowForm(true);
					}
					setAttributes({
						apiInfo: {
							...apiInfo,
							email: response.data.email,
							name: response.data.name,
						},
					});
					setLoadingApi(false);
				}
			})
			.catch((err) => console.log(err));
	}, []);

	const openverseDataFetch = (event) => {
		if (event) {
			setLoading(true);
			let data = new FormData();
			data.append("action", "eb_get_collections");
			data.append("admin_nonce", EssentialBlocksLocalize.admin_nonce);

			// search
			data.append("openverseQ", searchQ);
			data.append("openverseFilterLicensesType", filterData.licenseType);
			data.append("openverseFilterLicenses", filterData.licenses);
			data.append("openverseFilterImgtype", filterData.category);
			data.append("openverseFilterExtension", filterData.extension);
			data.append("openverseFilterRatio", filterData.aspectRatio);
			data.append("openverseFilterSize", filterData.size);
			data.append("openversePage", pagination);

			fetch(EssentialBlocksLocalize.ajax_url, {
				method: "POST",
				body: data,
			}) // wrapped
				.then((res) => res.text())
				.then((data) => {
					const response = JSON.parse(data);

					if (response.success) {
						const responseData = JSON.parse(response.data);

						if (responseData.result_count == 0) {
							setOpenverseError({
								status: true,
								message: "We couldn't find anything.",
							});
						} else {
							const passData = responseData.results;
							setOpenverseDataCount(responseData.result_count);
							setOpenverseData(passData);
							setOpenverseError({
								status: false,
							});
						}
						setTotalPages(responseData.page_count);
						setLoading(false);
					} else {
						const error =
							typeof response.data === "object"
								? response.data
								: JSON.parse(response.data);

						console.log(error);
						setOpenverseError({
							status: true,
							message:
								typeof error === "string" ? error : "Request was throttled.",
						});
						setLoading(false);
					}
				})
				.catch((err) => console.log(err));
		}
	};

	// fetch
	useEffect(() => {
		if (!isEmpty(searchQ)) {
			openverseDataFetch(true);
		}
	}, [filterData]);

	// fetch pagination data
	useEffect(() => {
		if (pagination > 1) {
			setLoading(true);
			let data = new FormData();
			data.append("action", "eb_get_collections");
			data.append("admin_nonce", EssentialBlocksLocalize.admin_nonce);

			// search
			data.append("openverseQ", searchQ);
			data.append("openverseFilterLicensesType", filterData.licenseType);
			data.append("openverseFilterLicenses", filterData.licenses);
			data.append("openverseFilterImgtype", filterData.category);
			data.append("openverseFilterExtension", filterData.extension);
			data.append("openverseFilterRatio", filterData.aspectRatio);
			data.append("openverseFilterSize", filterData.size);
			data.append("openversePage", pagination);

			fetch(EssentialBlocksLocalize.ajax_url, {
				method: "POST",
				body: data,
			}) // wrapped
				.then((res) => res.text())
				.then((data) => {
					const response = JSON.parse(data);

					if (response.success) {
						const responseData = JSON.parse(response.data);
						const passData = responseData.results;
						setTotalPages(responseData.page_count);
						setOpenverseData([...openverseData, ...passData]);
						setLoading(false);
						setOpenverseError({
							status: false,
						});
					} else {
						const error =
							typeof response.data === "object"
								? response.data
								: JSON.parse(response.data);

						console.log(error);
						setOpenverseError({
							status: true,
							message:
								typeof error === "string" ? error : "Request was throttled.",
						});
						setLoading(false);
					}
				})
				.catch((err) => console.log(err));
		}
	}, [pagination]);

	return (
		<>
			{isSelected && imageurl && <Inspector {...props} />}
			<BlockControls>
				<BlockAlignmentToolbar
					value={imageAlign}
					onChange={(newAlign) => setimageAlign(newAlign)}
					controls={["left", "center", "right"]}
				/>
			</BlockControls>

			<div {...blockProps}>
				<Style {...props} />

				{imageurl && (
					<>
						<BlockControls>
							<Toolbar>
								<ToolbarButton
									className="components-toolbar__control"
									label={__("Replace Image", "essential-blocks")}
									icon={edit}
									onClick={() => setOpenverseModal(true)}
								/>
							</Toolbar>
						</BlockControls>
					</>
				)}

				<div className={`eb-parent-wrapper eb-parent-${blockId} ${classHook}`}>
					<div
						className={`eb-openverse-wrapper ${blockId} img-style-${stylePreset} ${attributionStyle} ${hoverEffect} ${
							imageurl ? "" : "no-image"
						}`}
						data-id={blockId}
					>
						{imageurl && <DisplayImage attributes={attributes}></DisplayImage>}

						{!imageurl && (
							<>
								<div className="openverse-placheholderbox">
									<div className="openverse-placheholderbox__label">
										<OpenverseMainIcon></OpenverseMainIcon>
									</div>

									<div
										className={`eb-openverse-form-wrapper ${
											loadingApi ? "loading-circle" : ""
										}`}
									>
										{showForm && (
											<>
												<div className="openverse-placheholderbox__description">
													{__(
														"Provide your Email ID & unique project Name to get access to Openverse  using API, these are required field",
														"essential-blocks"
													)}

													<span style={{ color: "#ff0000" }}>*</span>
												</div>

												<ApiInfo
													attributes={attributes}
													setAttributes={setAttributes}
													loadingApi={loadingApi}
													setLoadingApi={setLoadingApi}
													openverseRegError={openverseRegError}
													setOpenverseRegError={setOpenverseRegError}
													setShowForm={setShowForm}
												></ApiInfo>
											</>
										)}

										{!showForm && !loadingApi && (
											<>
												{openverseRegError.status &&
													openverseRegError.type == "Success" && (
														<div className="eb-alert eb-alert-success">
															<strong>Hurray!</strong> You have generated an API
															successfully! Please verify your email to enjoy
															uninterrupted access to Openverse
															<span className="eb-alert-warning">
																Without verifying your email you can get access
																to Openverse as anonymous and your search limit
																will be 100 requests/ day and 5 requests/ hr.
															</span>
															{/* {openverseRegError.message} */}
														</div>
													)}
												<div className="openverse-placheholderbox__description">
													{__(
														"Explore more than 600 million creative works",
														"essential-blocks"
													)}
												</div>

												<Search
													setOpenverseModal={setOpenverseModal}
													openverseDataFetch={openverseDataFetch}
													searchQ={searchQ}
													setAttributes={setAttributes}
													componentClassName="openverse-search-section"
												></Search>
												<p className="openverse-placheholderbox__note">
													All Openverse content is under a{" "}
													<a href="https://creativecommons.org/licenses/">
														{" "}
														Creative Commons license
													</a>{" "}
													or is in the public domain.
												</p>
											</>
										)}
									</div>
								</div>
							</>
						)}

						<SeachModal
							trigger={openverseModal}
							setTrigger={setOpenverseModal}
							loading={loading}
							openverseData={openverseData}
							// q={q}
							// setQ={setQ}
							filterData={filterData}
							setFilterData={setFilterData}
							setOpenverseImage={setOpenverseImage}
							attributes={attributes}
							setAttributes={setAttributes}
							pagination={pagination}
							setPagination={setPagination}
							totalPages={totalPages}
							openverseError={openverseError}
							setOpenverseModal={setOpenverseModal}
							openverseDataFetch={openverseDataFetch}
							openverseDataCount={openverseDataCount}
						></SeachModal>
					</div>
				</div>
			</div>
		</>
	);
}