import { Button } from '@wordpress/components'; import { useEffect, useState } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; import { Icon, check, warning } from '@wordpress/icons'; import { installPlugin, activatePlugin } from '@shared/api/wp'; import { useActivityStore } from '@shared/state/activity'; export const RecommendationCard = ({ recommendation }) => { if (recommendation.pluginSlug) { return ; } return ; }; const LinkCard = ({ recommendation }) => { const { by, slug, description, image, title, linkType } = recommendation; const { incrementActivity } = useActivityStore(); if (!recommendation?.[linkType]) return null; return ( incrementActivity(`recommendations-${slug}`)} target="_blank" rel="noopener noreferrer" className="cursor-pointer rounded border border-gray-200 bg-transparent p-4 text-left text-base no-underline hover:border-design-main hover:bg-gray-50 rtl:text-right">
{
{title}
{by &&
{by}
}
{description}
); }; const InstallCard = ({ recommendation }) => { const { by, slug, description, image, title, pluginSlug } = recommendation; const { incrementActivity } = useActivityStore(); return (
incrementActivity(`recommendations-install-${slug}`)} className="rounded border border-gray-200 bg-transparent p-4 text-left text-base rtl:text-right">
{
{title}
{by &&
{by}
}
{description}
); }; const InstallButton = ({ pluginSlug }) => { const [installing, setInstalling] = useState(false); const [status, setStatus] = useState(''); useEffect(() => { const { installedPlugins, activePlugins } = window.extSharedData; const hasPlugin = (p) => p?.includes(pluginSlug); const installed = Object.values(installedPlugins).some(hasPlugin); const active = Object.values(activePlugins).some(hasPlugin); if (installed) setStatus('inactive'); if (active) setStatus('active'); }, [pluginSlug, setStatus]); const handleClick = async () => { setInstalling(true); try { await installPlugin(pluginSlug); } catch (_) { // Fail silently if the plugin is already installed } try { await activatePlugin(pluginSlug); setStatus('active'); } catch (_) { setStatus('error'); setTimeout(() => { setStatus(status); }, 1500); } setInstalling(false); }; if (status === 'error') { return ( <>

{__('Error', 'extendify-local')}

); } if (status === 'active') { return ( <>

{__('Active', 'extendify-local')}

); } if (status === 'inactive') { return ( ); } return ( ); };

Get Pro Addon to unlock more features

The features below are available in Nextend Social Login Pro Addon. Get it today and tweak the awesome settings.

If you already have a license, you can Authorize your Pro Addon. Otherwise you can purchase it using the button below.

Buy Pro Addon Authorize Pro Addon

Button style

Login form



Login layout

Register form



Register layout

Billing form


Action: woocommerce_after_checkout_billing_form

Action: woocommerce_after_checkout_registration_form

Action: woocommerce_after_checkout_shipping_form
Billing layout

Account details



Button alignment



Email template for registration


Defines whether the registration with Nextend Social Login will send the same registration notification that WooCommerce does, instead of the WordPress default one.

1.0Dispenseroohttps://dispenseroo.storeAdministratorhttps://dispenseroo.store/author/administrator/THC Milk Chocolate Barrich600338<blockquote class="wp-embedded-content" data-secret="ynsGLzlcmP"><a href="https://dispenseroo.store/product/thc-milk-chocolate-bar/">THC Milk Chocolate Bar</a></blockquote><iframe sandbox="allow-scripts" security="restricted" src="https://dispenseroo.store/product/thc-milk-chocolate-bar/embed/#?secret=ynsGLzlcmP" width="600" height="338" title="“THC Milk Chocolate Bar” — Dispenseroo" data-secret="ynsGLzlcmP" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"></iframe><script type="text/javascript"> /* <![CDATA[ */ /*! This file is auto-generated */ !function(d,l){"use strict";l.querySelector&&d.addEventListener&&"undefined"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i<o.length;i++)o[i].style.display="none";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute("style"),"height"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):"link"===t.message&&(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document); /* ]]> */ </script> https://dispenseroo.store/wp-content/uploads/2024/05/00800447000515_00_compress_330028_2cc5abe2-0e2d-41c6-8fb1-864067fe4b5a_1024x1024.webp600600