woocommerce/plugins/woocommerce-admin/client/marketplace/components/my-subscriptions/my-subscriptions.tsx

139 lines
4.7 KiB
TypeScript
Raw Normal View History

/**
* External dependencies
*/
import { Button } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { createInterpolateElement, useContext } from '@wordpress/element';
import { Icon, external } from '@wordpress/icons';
/**
* Internal dependencies
*/
2023-09-26 12:12:14 +00:00
import { getAdminSetting } from '../../../utils/admin-settings';
import { SubscriptionsContext } from '../../contexts/subscriptions-context';
import './my-subscriptions.scss';
import {
AvailableSubscriptionsTable,
InstalledSubscriptionsTable,
} from './table/table';
import {
availableSubscriptionRow,
installedSubscriptionRow,
} from './table/table-rows';
import { Subscription } from './types';
import { RefreshButton } from './table/actions/refresh-button';
import Notices from './notices';
import InstallModal from './table/actions/install-modal';
import { connectUrl } from '../../utils/functions';
export default function MySubscriptions(): JSX.Element {
const { subscriptions, isLoading } = useContext( SubscriptionsContext );
const wccomSettings = getAdminSetting( 'wccomHelper', {} );
2023-09-26 12:12:14 +00:00
const installedTableDescription = createInterpolateElement(
2023-09-21 14:11:19 +00:00
__(
'WooCommerce.com extensions and themes installed on this store. To see all your subscriptions go to <a>your account<custom_icon /></a> on WooCommerce.com.',
2023-09-21 14:11:19 +00:00
'woocommerce'
),
{
a: (
<a
href="https://woocommerce.com/my-account/my-subscriptions"
target="_blank"
rel="nofollow noopener noreferrer"
>
your account
</a>
),
custom_icon: <Icon icon={ external } size={ 12 } />,
}
2023-09-21 14:11:19 +00:00
);
2023-09-26 12:12:14 +00:00
const subscriptionsInstalled: Array< Subscription > = subscriptions.filter(
( subscription: Subscription ) => subscription.subscription_installed
2023-09-26 12:12:14 +00:00
);
2023-09-26 12:12:14 +00:00
const subscriptionsAvailable: Array< Subscription > = subscriptions.filter(
Remove the ability to update Woo.com extensions not available in WP.org plugin directory (#44279) * Remove the hook for updating update_plugins transient with data fetched from Woo.com This prevents the WP core from updating Woo.com plugins. * Remove the hook for updating update_themes transient with data fetched from Woo.com This prevents the WP core from updating Woo.com themes. * Remove the class hand hooks used for updating the API response of WP.org with update URI's from Woo.com. * Add change log file. * Add update_plugins and themes transient update hooks back while removing the package from Woo.com extensions. When a Woo hosted plugin has an update, this will allow showing the update message but block the ability to update. * Adding a hook to modify the plugin update notification on plugins.php. When a Woo.com hosted plugin has an update available it will show a message to install Woo Marketplace plugin, if it's not installed. * Utility class for Woo Marketplace plugin. * Check wether the Woo marketplace plugin is already installed before modifying update notice. * Update docblocks. * Add status end point for wccom-site API. * Check the existence of marketplace plugin only after the plugins are loaded. * Add WP.org plugin api response updater back to core. * Function to identify if the market-place plugin is installed. * Update status API response with installation status. * Update the status variable push to store admin frontend with information about market-place plugin. * Styles for woo-connect-plugin component. * Component for displaying the message to install Woo Connect plugin based on the installation status. * Add Woo Connect plugin notice to my-subscriptions page. * Add Woo connect plugin message to discover page. * Add Woo Connect install/download urls to constants file. * Add a modal for asking the user to install Woo Connect plugin. * Update strings with constants. * Show the Woo Connect modal when user updating plugins without Woo Connect installed. * Show Woo Connect install notifications only when the site is connected. * Update plugin management page messaging. * Update notification on connect screen. * Update notifications on plugin management page. * Remove additional spacing in Plugin Install Notice and spacing in the discover page results and the notice. * Use notice component instead of Card. * Minor improvements to readability. * Add translation support for messages displayed on plugins.php. * Update woo connect plugin installation URL (#45127) * Ad functions for generating WooConnect plugin install URLs. * Make WooConnect install url to available to marketplace components. * Make WooConnect install url to available to marketplace components. * Link install buttons to install URL with access_token and secret. * Update Woo Update Manager download url. * Show admin notice to install Woo Update Manager on plugins.php. * Adding the view for admin notice for installing woo_update_manager. * Show woo update manager installation notice on WC admin pages and make the notice dissmisable. * Update the install url for Woo Update Manager by adding the product ID and introduce a filter to override the product ID. * Change the plugin name to Woo Update Manager. * Change the download url for woo update manager * Fix the margin below the Woo Update plugin install notice. * Rename Woo Connect to Woo Update Manager. * Rename wccom-site status endpoint response variables based on plugin name changes. * Update the plugin main file name for Woo Update Manager. * Updating the download URL. * Updating css class names and file names from `woo-connect-plugin` to `woo-update-manager`. * Change wooConnect variables to wooUpdateManager. * Rename WC_Helper_Plugin to WC_Woo_Update_Manager_Plugin and remove references to market place plugin. * Extract and reuse the logic for creating the signature. * Use WC built-in method to check if the current page is a WC page. * Add source parameter for installer. * Update text copies based on flows for in-app Woo Update Manager install message. * Update admin notice based on the flows. * Update connect store message. * Update the text based on the latest flow and show a different message when WUM is installed but not activated. * Use html text for install notice message. * Implement the bubble showing number of updates available on WooCommerce -> Extensions menu. Add one to available Woo.com updates if WUM is not installed or activated. * Update install url to new structure. * Update download url for WUM. * Add a method to get the id of the WUM. * Remove WUM from available to install list of extensions on my-subscriptions tab. * Remove the hard coded ID of the Woo Update Manager and use the slug to get the ID of the plugin based on update-check response. * Fixing the notice generated due to empty body. * Update CTA and image for the not connected screen. * Increasing the left margin of the install notice to match admin notices. * Add close button to modal with message to activate WUM. * Add install/activate notice to Browse and Themes tabs. * Add the view for showing admin notice for activating the plugin. * Update plugin name on install admin notice. * Show install or activate admin notice based on the context. * Update comment * Make the linked text shorter in plugin update message. * Generate a signed auto-install URL for woo hosted plugins without helper API (#45313) * Generate a signed auto-install URL for woo hosted plugins without helper API * Use product slug in auto-install URL instead of product id. * Update activate Woo Update Manager modal buttons. * Change install url from Woo Update Manager ID to slug. * Allow defining the menu title and page title separately for when adding menus and sub menus in WooCommerce Admin. * Set the page title separately for WooCommerce Extensions menu. * Fix the update count issue. * Update the download URL for Woo Update Manager. * Update the download link for WUM in admin notices. * Show WUM admin notices on WC Admin pages only when the site is connected. * Remove additional slash in plugin admin url. * Add wum-installed parameter to the connect URL (#45702) * Add wum-installed parameter to the connect URL * Send status of Woo Update Manager installation on connection init. * Revert "Add wum-installed parameter to the connect URL" This reverts commit 4c55038b0315370a800aa463ca391dbdae02bbf7. --------- Co-authored-by: Denis Dvali <denis.dvali@automattic.com> * Fix lint errors. * Fix lint error. * Fix lint errors. * Fix js lint issues. * Update Woo Update manager admin notice. --------- Co-authored-by: Muhammad Anas <anastts.pk@gmail.com> Co-authored-by: Denis Dvali <denis.dvali@automattic.com>
2024-03-20 14:02:23 +00:00
( subscription: Subscription ) =>
! subscription.subscription_installed &&
wccomSettings?.wooUpdateManagerPluginSlug !==
subscription.product_slug
2023-09-26 12:12:14 +00:00
);
if ( ! wccomSettings?.isConnected ) {
const connectMessage = __(
"Connect your store to WooCommerce.com using the WooCommerce.com Update Manager. Once connected, you'll be able to manage your subscriptions, receive product updates, and access streamlined support from this screen.",
'woocommerce'
);
return (
<div className="woocommerce-marketplace__my-subscriptions--connect">
<InstallModal />
<div className="woocommerce-marketplace__my-subscriptions__icon" />
<h2 className="woocommerce-marketplace__my-subscriptions__header">
{ __( 'Manage your subscriptions', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__description">
{ connectMessage }
</p>
<Button href={ connectUrl() } variant="primary">
Remove the ability to update Woo.com extensions not available in WP.org plugin directory (#44279) * Remove the hook for updating update_plugins transient with data fetched from Woo.com This prevents the WP core from updating Woo.com plugins. * Remove the hook for updating update_themes transient with data fetched from Woo.com This prevents the WP core from updating Woo.com themes. * Remove the class hand hooks used for updating the API response of WP.org with update URI's from Woo.com. * Add change log file. * Add update_plugins and themes transient update hooks back while removing the package from Woo.com extensions. When a Woo hosted plugin has an update, this will allow showing the update message but block the ability to update. * Adding a hook to modify the plugin update notification on plugins.php. When a Woo.com hosted plugin has an update available it will show a message to install Woo Marketplace plugin, if it's not installed. * Utility class for Woo Marketplace plugin. * Check wether the Woo marketplace plugin is already installed before modifying update notice. * Update docblocks. * Add status end point for wccom-site API. * Check the existence of marketplace plugin only after the plugins are loaded. * Add WP.org plugin api response updater back to core. * Function to identify if the market-place plugin is installed. * Update status API response with installation status. * Update the status variable push to store admin frontend with information about market-place plugin. * Styles for woo-connect-plugin component. * Component for displaying the message to install Woo Connect plugin based on the installation status. * Add Woo Connect plugin notice to my-subscriptions page. * Add Woo connect plugin message to discover page. * Add Woo Connect install/download urls to constants file. * Add a modal for asking the user to install Woo Connect plugin. * Update strings with constants. * Show the Woo Connect modal when user updating plugins without Woo Connect installed. * Show Woo Connect install notifications only when the site is connected. * Update plugin management page messaging. * Update notification on connect screen. * Update notifications on plugin management page. * Remove additional spacing in Plugin Install Notice and spacing in the discover page results and the notice. * Use notice component instead of Card. * Minor improvements to readability. * Add translation support for messages displayed on plugins.php. * Update woo connect plugin installation URL (#45127) * Ad functions for generating WooConnect plugin install URLs. * Make WooConnect install url to available to marketplace components. * Make WooConnect install url to available to marketplace components. * Link install buttons to install URL with access_token and secret. * Update Woo Update Manager download url. * Show admin notice to install Woo Update Manager on plugins.php. * Adding the view for admin notice for installing woo_update_manager. * Show woo update manager installation notice on WC admin pages and make the notice dissmisable. * Update the install url for Woo Update Manager by adding the product ID and introduce a filter to override the product ID. * Change the plugin name to Woo Update Manager. * Change the download url for woo update manager * Fix the margin below the Woo Update plugin install notice. * Rename Woo Connect to Woo Update Manager. * Rename wccom-site status endpoint response variables based on plugin name changes. * Update the plugin main file name for Woo Update Manager. * Updating the download URL. * Updating css class names and file names from `woo-connect-plugin` to `woo-update-manager`. * Change wooConnect variables to wooUpdateManager. * Rename WC_Helper_Plugin to WC_Woo_Update_Manager_Plugin and remove references to market place plugin. * Extract and reuse the logic for creating the signature. * Use WC built-in method to check if the current page is a WC page. * Add source parameter for installer. * Update text copies based on flows for in-app Woo Update Manager install message. * Update admin notice based on the flows. * Update connect store message. * Update the text based on the latest flow and show a different message when WUM is installed but not activated. * Use html text for install notice message. * Implement the bubble showing number of updates available on WooCommerce -> Extensions menu. Add one to available Woo.com updates if WUM is not installed or activated. * Update install url to new structure. * Update download url for WUM. * Add a method to get the id of the WUM. * Remove WUM from available to install list of extensions on my-subscriptions tab. * Remove the hard coded ID of the Woo Update Manager and use the slug to get the ID of the plugin based on update-check response. * Fixing the notice generated due to empty body. * Update CTA and image for the not connected screen. * Increasing the left margin of the install notice to match admin notices. * Add close button to modal with message to activate WUM. * Add install/activate notice to Browse and Themes tabs. * Add the view for showing admin notice for activating the plugin. * Update plugin name on install admin notice. * Show install or activate admin notice based on the context. * Update comment * Make the linked text shorter in plugin update message. * Generate a signed auto-install URL for woo hosted plugins without helper API (#45313) * Generate a signed auto-install URL for woo hosted plugins without helper API * Use product slug in auto-install URL instead of product id. * Update activate Woo Update Manager modal buttons. * Change install url from Woo Update Manager ID to slug. * Allow defining the menu title and page title separately for when adding menus and sub menus in WooCommerce Admin. * Set the page title separately for WooCommerce Extensions menu. * Fix the update count issue. * Update the download URL for Woo Update Manager. * Update the download link for WUM in admin notices. * Show WUM admin notices on WC Admin pages only when the site is connected. * Remove additional slash in plugin admin url. * Add wum-installed parameter to the connect URL (#45702) * Add wum-installed parameter to the connect URL * Send status of Woo Update Manager installation on connection init. * Revert "Add wum-installed parameter to the connect URL" This reverts commit 4c55038b0315370a800aa463ca391dbdae02bbf7. --------- Co-authored-by: Denis Dvali <denis.dvali@automattic.com> * Fix lint errors. * Fix lint error. * Fix lint errors. * Fix js lint issues. * Update Woo Update manager admin notice. --------- Co-authored-by: Muhammad Anas <anastts.pk@gmail.com> Co-authored-by: Denis Dvali <denis.dvali@automattic.com>
2024-03-20 14:02:23 +00:00
{ __( 'Connect your store', 'woocommerce' ) }
</Button>
</div>
);
}
return (
<div className="woocommerce-marketplace__my-subscriptions">
<InstallModal />
<section className="woocommerce-marketplace__my-subscriptions__notices">
<Notices />
</section>
<section className="woocommerce-marketplace__my-subscriptions-section woocommerce-marketplace__my-subscriptions__installed">
<header className="woocommerce-marketplace__my-subscriptions__header">
<div className="woocommerce-marketplace__my-subscriptions__header-content">
<h2 className="woocommerce-marketplace__my-subscriptions__heading">
{ __( 'Installed on this store', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__table-description">
{ installedTableDescription }
</p>
</div>
<div className="woocommerce-marketplace__my-subscriptions__header-refresh">
<RefreshButton />
</div>
</header>
<div className="woocommerce-marketplace__my-subscriptions__table-wrapper">
<InstalledSubscriptionsTable
isLoading={ isLoading }
rows={ subscriptionsInstalled.map( ( item ) => {
return installedSubscriptionRow( item );
} ) }
/>
</div>
</section>
{ subscriptionsAvailable.length > 0 && (
<section className="woocommerce-marketplace__my-subscriptions-section woocommerce-marketplace__my-subscriptions__available">
<h2 className="woocommerce-marketplace__my-subscriptions__heading">
{ __( 'Available to use', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__table-description">
{ __(
"WooCommerce.com subscriptions you haven't used yet.",
'woocommerce'
) }
</p>
<div className="woocommerce-marketplace__my-subscriptions__table-wrapper">
<AvailableSubscriptionsTable
isLoading={ isLoading }
rows={ subscriptionsAvailable.map( ( item ) => {
return availableSubscriptionRow( item );
} ) }
/>
</div>
</section>
) }
</div>
);
}