2023-09-21 14:00:04 +00:00
/ * *
* External dependencies
* /
import { getNewPath } from '@woocommerce/navigation' ;
2023-11-08 10:26:44 +00:00
import { Button } from '@wordpress/components' ;
import { __ } from '@wordpress/i18n' ;
import { createInterpolateElement , useContext } from '@wordpress/element' ;
import { Icon , external } from '@wordpress/icons' ;
2023-09-21 14:00:04 +00:00
/ * *
* Internal dependencies
* /
2023-09-26 12:12:14 +00:00
import { getAdminSetting } from '../../../utils/admin-settings' ;
2023-10-23 05:55:23 +00:00
import { SubscriptionsContext } from '../../contexts/subscriptions-context' ;
2023-09-21 14:00:04 +00:00
import './my-subscriptions.scss' ;
2023-10-18 09:14:14 +00:00
import {
AvailableSubscriptionsTable ,
2023-10-23 05:55:23 +00:00
InstalledSubscriptionsTable ,
2023-10-18 09:14:14 +00:00
} from './table/table' ;
import {
availableSubscriptionRow ,
2023-10-23 05:55:23 +00:00
installedSubscriptionRow ,
2023-10-18 09:14:14 +00:00
} from './table/table-rows' ;
2023-10-23 05:55:23 +00:00
import { Subscription } from './types' ;
2023-11-08 10:26:44 +00:00
import RefreshIcon from '../../assets/images/refresh.svg' ;
2023-09-21 14:00:04 +00:00
export default function MySubscriptions ( ) : JSX . Element {
2023-10-18 09:14:14 +00:00
const { subscriptions , isLoading } = useContext ( SubscriptionsContext ) ;
2023-10-23 05:55:23 +00:00
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 ,
2023-10-18 10:07:18 +00:00
'redirect-to-wc-admin' : 1 ,
2023-09-21 14:11:19 +00:00
} ,
''
) ;
2023-11-08 10:26:44 +00:00
const installedTableDescription = createInterpolateElement (
2023-09-21 14:11:19 +00:00
__ (
2023-11-08 10:26:44 +00:00
'Woo.com extensions and themes installed on this store. To see all your subscriptions go to <a>your account<custom_icon /></a> on Woo.com.' ,
2023-09-21 14:11:19 +00:00
'woocommerce'
) ,
2023-11-08 10:26:44 +00:00
{
a : (
< a
href = "https://woo.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-21 14:00:04 +00:00
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-21 14:00:04 +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
) ;
2023-09-21 14:00:04 +00:00
2023-10-23 05:55:23 +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" >
{ __ (
2023-11-06 08:15:34 +00:00
'Connect your account to get updates, manage your subscriptions, and get seamless support. Once connected, your Woo.com subscriptions will appear here.' ,
2023-10-23 05:55:23 +00:00
'woocommerce'
) }
< / p >
< Button href = { wccomSettings ? . connectURL } variant = "primary" >
{ __ ( 'Connect Account' , 'woocommerce' ) }
< / Button >
< / div >
) ;
}
2023-09-21 14:00:04 +00:00
return (
< div className = "woocommerce-marketplace__my-subscriptions" >
2023-11-08 10:26:44 +00:00
< section className = "woocommerce-marketplace__my-subscriptions__installed" >
< header className = "woocommerce-marketplace__my-subscriptions__header" >
< div >
< h2 className = "woocommerce-marketplace__my-subscriptions__heading" >
{ __ ( 'Installed on this store' , 'woocommerce' ) }
< / h2 >
< span className = "woocommerce-marketplace__my-subscriptions__table-description" >
{ installedTableDescription }
< / span >
< / div >
< div >
2023-09-21 14:11:19 +00:00
< Button
2023-11-08 10:26:44 +00:00
href = { updateConnectionUrl }
className = "woocommerce-marketplace__refresh-subscriptions"
>
< img
src = { RefreshIcon }
alt = { __ (
'Refresh subscriptions' ,
'woocommerce'
) }
/ >
{ __ ( 'Refresh' , 'woocommerce' ) }
< / Button >
< / div >
< / header >
2023-10-18 09:14:14 +00:00
< InstalledSubscriptionsTable
isLoading = { isLoading }
2023-09-21 14:00:04 +00:00
rows = { subscriptionsInstalled . map ( ( item ) = > {
2023-10-18 09:14:14 +00:00
return installedSubscriptionRow ( item ) ;
2023-09-21 14:00:04 +00:00
} ) }
/ >
< / section >
2023-11-08 10:26:44 +00:00
< section className = "woocommerce-marketplace__my-subscriptions__available" >
< h2 className = "woocommerce-marketplace__my-subscriptions__heading" >
{ __ ( 'Available to use' , 'woocommerce' ) }
2023-10-18 09:14:14 +00:00
< / h2 >
< p className = "woocommerce-marketplace__my-subscriptions__table-description" >
2023-09-21 14:11:19 +00:00
{ __ (
2023-11-08 10:26:44 +00:00
"Woo.com subscriptions you haven't used yet." ,
2023-09-21 14:11:19 +00:00
'woocommerce'
) }
2023-09-21 14:00:04 +00:00
< / p >
2023-10-18 09:14:14 +00:00
< AvailableSubscriptionsTable
isLoading = { isLoading }
2023-09-21 14:00:04 +00:00
rows = { subscriptionsAvailable . map ( ( item ) = > {
2023-10-18 09:14:14 +00:00
return availableSubscriptionRow ( item ) ;
2023-09-21 14:00:04 +00:00
} ) }
/ >
< / section >
< / div >
) ;
}