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

164 lines
4.7 KiB
TypeScript
Raw Normal View History

/**
* External dependencies
*/
import { getNewPath } from '@woocommerce/navigation';
import { Button, Tooltip } from '@wordpress/components';
import { useContext } from '@wordpress/element';
import { __, sprintf } from '@wordpress/i18n';
import { help } 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';
export default function MySubscriptions(): JSX.Element {
const { subscriptions, isLoading } = useContext( SubscriptionsContext );
const wccomSettings = getAdminSetting( 'wccomHelper', {} );
2023-09-26 12:12:14 +00:00
2023-09-21 14:11:19 +00:00
const updateConnectionUrl = getNewPath(
{
page: 'wc-addons',
section: 'helper',
filter: 'all',
'wc-helper-refresh': 1,
'wc-helper-nonce': getAdminSetting( 'wc_helper_nonces' ).refresh,
'redirect-to-wc-admin': 1,
2023-09-21 14:11:19 +00:00
},
''
);
const updateConnectionHTML = sprintf(
2023-09-26 12:12:14 +00:00
// translators: %s is a link to the update connection page.
2023-09-21 14:11:19 +00:00
__(
'If you don\'t see your subscription, try <a href="%s">updating</a> your connection.',
'woocommerce'
),
updateConnectionUrl
);
2023-09-26 12:12:14 +00:00
const subscriptionsInstalled: Array< Subscription > = subscriptions.filter(
2023-09-28 18:58:07 +00:00
( subscription: Subscription ) => subscription.local.installed
2023-09-26 12:12:14 +00:00
);
2023-09-26 12:12:14 +00:00
const subscriptionsAvailable: Array< Subscription > = subscriptions.filter(
2023-09-27 10:21:50 +00:00
( subscription: Subscription ) =>
! subscriptionsInstalled.includes( subscription )
2023-09-26 12:12:14 +00:00
);
if ( ! wccomSettings?.isConnected ) {
return (
<div className="woocommerce-marketplace__my-subscriptions--connect">
<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">
{ __(
'Connect your account to get updates, manage your subscriptions, and get seamless support. Once connected, your WooCommerce.com subscriptions will appear here.',
'woocommerce'
) }
</p>
<Button href={ wccomSettings?.connectURL } variant="primary">
{ __( 'Connect Account', 'woocommerce' ) }
</Button>
</div>
);
}
return (
<div className="woocommerce-marketplace__my-subscriptions">
<section>
<h2 className="woocommerce-marketplace__my-subscriptions__header">
{ __( 'Installed on this store', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__table-description">
2023-09-21 14:11:19 +00:00
<span
dangerouslySetInnerHTML={ {
__html: updateConnectionHTML,
} }
/>
<Tooltip
text={
<>
2023-09-22 10:05:42 +00:00
<h3>
{ __(
"Still don't see your subscription?",
'woocommerce'
) }
</h3>
<p
dangerouslySetInnerHTML={ {
__html: __(
'To see all your subscriptions go to <a href="https://woocommerce.com/my-account/" target="_blank" class="woocommerce-marketplace__my-subscriptions__tooltip-external-link">your account</a> on WooCommerce.com.',
'woocommerce'
),
} }
/>
</>
}
>
2023-09-21 14:11:19 +00:00
<Button
icon={ help }
iconSize={ 20 }
isSmall={ true }
label={ __( 'Help', 'woocommerce' ) }
/>
</Tooltip>
</p>
<InstalledSubscriptionsTable
isLoading={ isLoading }
rows={ subscriptionsInstalled.map( ( item ) => {
return installedSubscriptionRow( item );
} ) }
/>
</section>
<section>
<h2 className="woocommerce-marketplace__my-subscriptions__header">
{ __( 'Not in use', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__table-description">
2023-09-21 14:11:19 +00:00
{ __(
'Your unused WooCommerce.com subscriptions.',
2023-09-21 14:11:19 +00:00
'woocommerce'
) }
</p>
<AvailableSubscriptionsTable
isLoading={ isLoading }
rows={ subscriptionsAvailable.map( ( item ) => {
return availableSubscriptionRow( item );
} ) }
/>
</section>
<section>
<h2 className="woocommerce-marketplace__my-subscriptions__header">
{ __( 'Free to install', 'woocommerce' ) }
</h2>
<p className="woocommerce-marketplace__my-subscriptions__table-description">
{ __(
'Easily install your existing free to install WooCommerce.com subscriptions across sites.',
'woocommerce'
) }
</p>
<AvailableSubscriptionsTable
isLoading={ isLoading }
// TODO: fetch free and uninstalled subscriptions.
rows={ [] }
/>
</section>
</div>
);
}