Skip to content

Commit

Permalink
[MM-17546] Support plugin pagination in the Plugin Marketplace (matte…
Browse files Browse the repository at this point in the history
…rmost#4567)

Automatic Merge
  • Loading branch information
kosgrz authored Mar 14, 2020
1 parent a6efac2 commit 268774b
Show file tree
Hide file tree
Showing 13 changed files with 710 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ exports[`components/marketplace/ AllPlugins should render with no plugins 1`] =
`;

exports[`components/marketplace/ AllPlugins should render with one plugin 1`] = `
<Plugins
<MarketplaceList
plugins={
Array [
Object {
Expand All @@ -42,7 +42,7 @@ exports[`components/marketplace/ AllPlugins should render with one plugin 1`] =
`;

exports[`components/marketplace/ AllPlugins should render with plugins 1`] = `
<Plugins
<MarketplaceList
plugins={
Array [
Object {
Expand Down Expand Up @@ -75,7 +75,7 @@ exports[`components/marketplace/ AllPlugins should render with plugins 1`] = `
`;

exports[`components/marketplace/ InstalledPlugins should render with multiple plugins 1`] = `
<Plugins
<MarketplaceList
plugins={
Array [
Object {
Expand Down Expand Up @@ -139,7 +139,7 @@ exports[`components/marketplace/ InstalledPlugins should render with no plugins
`;

exports[`components/marketplace/ InstalledPlugins should render with one plugin 1`] = `
<Plugins
<MarketplaceList
plugins={
Array [
Object {
Expand Down Expand Up @@ -437,53 +437,3 @@ exports[`components/marketplace/ MarketplaceModal should render with plugins ins
</injectIntl(FullScreenModal)>
</RootPortal>
`;

exports[`components/marketplace/ Plugins should render with multiple plugins 1`] = `
<div
className="more-modal__list"
>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin is to test"
downloadUrl="https://github.com/mattermost/mattermost-test/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-test"
id="com.mattermost.test"
installedVersion="1.0.3"
key="com.mattermost.test"
name="Test"
version="1.0.3"
/>
</div>
`;

exports[`components/marketplace/ Plugins should render with no plugins 1`] = `
<div
className="more-modal__list"
/>
`;

exports[`components/marketplace/ Plugins should render with one plugin 1`] = `
<div
className="more-modal__list"
>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
</div>
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`components/marketplace/marketplace_list should render with multiple plugins 1`] = `
<div
className="more-modal__list"
>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(MarketplaceItem)
description="This plugin sends quarterly user satisfaction surveys to gather feedback and help improve Mattermost"
downloadUrl="https://github.com/mattermost/mattermost-plugin-nps/releases/download/v1.0.3/com.mattermost.nps-1.0.3.tar.gz"
homepageUrl="https://github.com/mattermost/mattermost-plugin-nps"
id="com.mattermost.nps"
installedVersion=""
isPrepackaged={false}
key="com.mattermost.nps"
name="User Satisfaction Surveys"
version="1.0.3"
/>
<Connect(NavigationRow)
maximumPerPage={15}
onNextPageButtonClick={[Function]}
onPreviousPageButtonClick={[Function]}
page={0}
total={17}
/>
</div>
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import React from 'react';
import PropTypes from 'prop-types';

import MarketplaceItem from '../marketplace_item';

import NavigationRow from './navigation_row';

const PLUGINS_PER_PAGE = 15;

export default class MarketplaceList extends React.PureComponent {
static propTypes = {
plugins: PropTypes.array.isRequired,
};

static getDerivedStateFromProps(props, state) {
if (state.page > 0 && props.plugins.length < PLUGINS_PER_PAGE) {
return {page: 0};
}

return null;
}

constructor(props) {
super(props);

this.state = {
page: 0,
};
}

nextPage = () => {
this.setState((state) => ({
page: state.page + 1
}));
};

previousPage = () => {
this.setState((state) => ({
page: state.page - 1
}));
};

render() {
const pageStart = this.state.page * PLUGINS_PER_PAGE;
const pageEnd = pageStart + PLUGINS_PER_PAGE;
const pluginsToDisplay = this.props.plugins.slice(pageStart, pageEnd);

return (
<div className='more-modal__list'>
{pluginsToDisplay.map((p) => (
<MarketplaceItem
key={p.manifest.id}
id={p.manifest.id}
name={p.manifest.name}
description={p.manifest.description}
version={p.manifest.version}
isPrepackaged={false}
downloadUrl={p.download_url}
homepageUrl={p.homepage_url}
releaseNotesUrl={p.release_notes_url}
iconData={p.icon_data}
installedVersion={p.installed_version}
/>
))}
<NavigationRow
page={this.state.page}
total={this.props.plugins.length}
maximumPerPage={PLUGINS_PER_PAGE}
onNextPageButtonClick={this.nextPage}
onPreviousPageButtonClick={this.previousPage}
/>
</div>
);
}
}
Loading

0 comments on commit 268774b

Please sign in to comment.