From 6107a89c80f3ef77f203c98eb04adb4f777f31b3 Mon Sep 17 00:00:00 2001 From: Olaseni Oluwunmi <277661+olaseni@users.noreply.github.com> Date: Tue, 7 Jul 2020 12:57:49 +0100 Subject: [PATCH] Add loading state for the all domain list item component (#43864) * Renamed loading state prop/name * Setup the loading state for `DomainItem` items * Install placeholders for action items * Renamed state booleans --- .../domain-management/list/domain-item.jsx | 64 +++++++++++++------ .../domain-management/list/list-all.jsx | 23 +++++-- .../domains/domain-management/list/style.scss | 4 ++ 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/client/my-sites/domains/domain-management/list/domain-item.jsx b/client/my-sites/domains/domain-management/list/domain-item.jsx index d61cca7ea4121..ef031830baecb 100644 --- a/client/my-sites/domains/domain-management/list/domain-item.jsx +++ b/client/my-sites/domains/domain-management/list/domain-item.jsx @@ -30,6 +30,7 @@ class DomainItem extends PureComponent { onClick: PropTypes.func.isRequired, onAddEmailClick: PropTypes.func.isRequired, onToggle: PropTypes.func, + isLoadingDomainDetails: PropTypes.bool, }; static defaultProps = { @@ -37,6 +38,7 @@ class DomainItem extends PureComponent { showSite: false, showCheckbox: false, onToggle: null, + isLoadingDomainDetails: false, }; handleClick = () => { @@ -110,6 +112,47 @@ class DomainItem extends PureComponent { ); } + renderActionItems() { + const { isLoadingDomainDetails, domainDetails } = this.props; + + if ( isLoadingDomainDetails ) { + return ( + <> +
+
+
+
+
+ + ); + } + + return ( + <> +
+ { domainDetails?.isLocked && ( + + ) } +
+
+ { domainDetails?.privateDomain && ( + + ) } +
+
+ { domainDetails?.bundledPlanSubscriptionId && ( + + ) } + { ! domainDetails?.bundledPlanSubscriptionId && domainDetails?.isAutoRenewing && ( + + ) } +
+
{ this.renderEmail( domainDetails ) }
+ { this.renderOptionsButton() } + + ); + } + getSiteName( site ) { if ( site.name ) { return `${ site.name } (${ withoutHttp( site.URL ) })`; @@ -151,26 +194,7 @@ class DomainItem extends PureComponent {
) }
-
- { domainDetails?.isLocked && ( - - ) } -
-
- { domainDetails?.privateDomain && ( - - ) } -
-
- { domainDetails?.bundledPlanSubscriptionId && ( - - ) } - { ! domainDetails?.bundledPlanSubscriptionId && domainDetails?.isAutoRenewing && ( - - ) } -
-
{ this.renderEmail( domainDetails ) }
- { this.renderOptionsButton() } + { this.renderActionItems() } ); } diff --git a/client/my-sites/domains/domain-management/list/list-all.jsx b/client/my-sites/domains/domain-management/list/list-all.jsx index 24cde93300498..9c55afd069ca4 100644 --- a/client/my-sites/domains/domain-management/list/list-all.jsx +++ b/client/my-sites/domains/domain-management/list/list-all.jsx @@ -20,7 +20,11 @@ import DocumentHead from 'components/data/document-head'; import DomainItem from './domain-item'; import ListHeader from './list-header'; import FormattedHeader from 'components/formatted-header'; -import { getAllDomains, getFlatDomainsList } from 'state/sites/domains/selectors'; +import { + getAllDomains, + getFlatDomainsList, + getAllRequestingSiteDomains, +} from 'state/sites/domains/selectors'; import { getCurrentUser } from 'state/current-user/selectors'; import { getCurrentRoute } from 'state/selectors/get-current-route'; import { getDomainManagementPath } from './utils'; @@ -47,6 +51,7 @@ class ListAll extends Component { sites: PropTypes.object.isRequired, user: PropTypes.object.isRequired, addDomainClick: PropTypes.func.isRequired, + requestingSiteDomains: PropTypes.object, }; clickAddDomain = () => { @@ -79,8 +84,8 @@ class ListAll extends Component { } isLoading() { - const { domainsList, requestingDomains, sites } = this.props; - return ! sites || ( requestingDomains && domainsList.length === 0 ); + const { domainsList, requestingFlatDomains, sites } = this.props; + return ! sites || ( requestingFlatDomains && domainsList.length === 0 ); } findDomainDetails( domainsDetails = [], domain = {} ) { @@ -94,7 +99,13 @@ class ListAll extends Component { return times( 3, ( n ) => ); } - const { domainsList, sites, domainsDetails, canManageSitesMap } = this.props; + const { + domainsList, + sites, + domainsDetails, + canManageSitesMap, + requestingSiteDomains, + } = this.props; const domainListItems = domainsList .filter( @@ -108,6 +119,7 @@ class ListAll extends Component { domainDetails={ this.findDomainDetails( domainsDetails, domain ) } site={ sites[ domain?.blogId ] } isManagingAllSites={ true } + isLoadingDomainDetails={ requestingSiteDomains[ domain?.blogId ] ?? false } showSite={ true } onClick={ this.handleDomainItemClick } onAddEmailClick={ this.handleAddEmailClick } @@ -154,7 +166,8 @@ export default connect( currentRoute: getCurrentRoute( state ), domainsList: getFlatDomainsList( state ), domainsDetails: getAllDomains( state ), - requestingDomains: isRequestingAllDomains( state ), + requestingFlatDomains: isRequestingAllDomains( state ), + requestingSiteDomains: getAllRequestingSiteDomains( state ), sites, user: getCurrentUser( state ), }; diff --git a/client/my-sites/domains/domain-management/list/style.scss b/client/my-sites/domains/domain-management/list/style.scss index 01e0185d9fe50..276e418e4c1f6 100644 --- a/client/my-sites/domains/domain-management/list/style.scss +++ b/client/my-sites/domains/domain-management/list/style.scss @@ -258,3 +258,7 @@ input[type='radio'].domain-management-list-item__radio { .domain-item__icon { fill: var( --color-text-subtle ); } + +.list__action_item_placeholder { + @include placeholder( --color-neutral-5 ); +}