From 818225dffef0d02ecb01638d20a7c44c3ee75bf1 Mon Sep 17 00:00:00 2001 From: Caleb Roseland Date: Fri, 25 Aug 2023 14:39:25 -0500 Subject: [PATCH] MM-52981, MM-53559: Streamlined in-product marketplace (#24311) --- .github/workflows/mmctl-test-template.yml | 4 + .../channels/plugins/marketplace/ui_spec.js | 8 + .../support/server/default_config.ts | 1 + server/Makefile | 5 +- server/channels/api4/plugin_test.go | 123 ++++++++-- server/channels/api4/system_test.go | 2 + server/channels/app/plugin.go | 18 +- server/channels/app/plugin_install.go | 2 +- server/public/model/feature_flags.go | 3 + .../admin_console/plugin_management/index.ts | 2 + .../plugin_management.test.tsx | 6 + .../plugin_management/plugin_management.tsx | 81 ++++--- .../marketplace_modal.test.tsx.snap | 225 ++++++++++++++++++ .../plugin_marketplace/marketplace_modal.scss | 19 +- .../marketplace_modal.test.tsx | 52 ++++ .../plugin_marketplace/marketplace_modal.tsx | 186 +++++++++------ .../web_marketplace_banner.tsx | 109 +++++++++ webapp/channels/src/i18n/en.json | 2 + .../channels/src/images/icons/confluence.svg | 1 + webapp/channels/src/images/icons/giphy.svg | 1 + .../channels/src/images/icons/pager-duty.svg | 1 + .../images/marketplace-notice-background.jpg | Bin 0 -> 86358 bytes .../src/selectors/entities/preferences.ts | 4 + .../src/generic_modal/generic_modal.scss | 6 +- .../src/generic_modal/generic_modal.tsx | 5 +- 25 files changed, 724 insertions(+), 142 deletions(-) create mode 100644 webapp/channels/src/components/plugin_marketplace/web_marketplace_banner.tsx create mode 100644 webapp/channels/src/images/icons/confluence.svg create mode 100644 webapp/channels/src/images/icons/giphy.svg create mode 100644 webapp/channels/src/images/icons/pager-duty.svg create mode 100644 webapp/channels/src/images/marketplace-notice-background.jpg diff --git a/.github/workflows/mmctl-test-template.yml b/.github/workflows/mmctl-test-template.yml index 3713ffee3f..d2098001f8 100644 --- a/.github/workflows/mmctl-test-template.yml +++ b/.github/workflows/mmctl-test-template.yml @@ -34,6 +34,10 @@ jobs: run: | cd server make setup-go-work + - name: Setup needed prepackaged plugins + run: | + cd server + make prepackaged-plugins PLUGIN_PACKAGES=mattermost-plugin-jira-v3.2.5 - name: Run docker compose run: | cd server/build diff --git a/e2e-tests/cypress/tests/integration/channels/plugins/marketplace/ui_spec.js b/e2e-tests/cypress/tests/integration/channels/plugins/marketplace/ui_spec.js index 9b36d0e96b..f5cc983ba8 100644 --- a/e2e-tests/cypress/tests/integration/channels/plugins/marketplace/ui_spec.js +++ b/e2e-tests/cypress/tests/integration/channels/plugins/marketplace/ui_spec.js @@ -17,6 +17,7 @@ describe('Plugin Marketplace', () => { before(() => { cy.shouldNotRunOnCloudEdition(); + cy.shouldHaveFeatureFlag('StreamlinedMarketplace', 'false'); // https://mattermost.atlassian.net/browse/MM-54230 cy.shouldHavePluginUploadEnabled(); cy.apiInitSetup().then(({team}) => { @@ -72,6 +73,7 @@ describe('Plugin Marketplace', () => { cy.get('#marketplaceTabs-pane-allListing').should('be.visible'); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('MM-T2001 autofocus on search plugin input box', () => { cy.uiClose(); @@ -82,6 +84,7 @@ describe('Plugin Marketplace', () => { cy.findByPlaceholderText('Search Marketplace').should('be.focused'); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('render the list of all plugins by default', () => { // * Verify all plugins tab should be active cy.get('#marketplaceTabs-tab-allListing').should('be.visible').parent().should('have.class', 'active'); @@ -92,6 +95,7 @@ describe('Plugin Marketplace', () => { cy.get('#marketplaceTabs-pane-installed').should('not.exist'); }); + // https://mattermost.atlassian.net/browse/MM-54230 // this test uses exist, not visible, due to issues with Cypress it('render the list of installed plugins on demand', () => { // # Click on installed plugins tab @@ -117,6 +121,7 @@ describe('Plugin Marketplace', () => { cy.get('#modal_marketplace').should('not.exist'); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('should filter all on search', () => { // # Load all plugins before searching cy.get('.more-modal__row').should('have.length', 15); @@ -136,6 +141,7 @@ describe('Plugin Marketplace', () => { should('have.length', 1); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('should show an error bar on failing to filter', () => { // # Enable Plugin Marketplace cy.apiUpdateConfig({ @@ -168,6 +174,7 @@ describe('Plugin Marketplace', () => { cy.get('#marketplace-plugin-com\\.mattermost\\.webex').find('.btn.btn-outline', {timeout: TIMEOUTS.ONE_MIN}).scrollIntoView().should('be.visible').and('have.text', 'Configure'); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('should install a plugin from search results on demand', () => { // # Uninstall any existing webex plugin cy.apiRemovePluginById('com.mattermost.webex'); @@ -226,6 +233,7 @@ describe('Plugin Marketplace', () => { cy.get('#marketplace-plugin-github').should('be.visible'); }); + // https://mattermost.atlassian.net/browse/MM-54230 it('MM-T1986 change tab to "All Plugins" when "Install Plugins" link is clicked', () => { cy.get('#marketplaceTabs').scrollIntoView().should('be.visible').within(() => { // # Switch tab to installed plugin diff --git a/e2e-tests/playwright/support/server/default_config.ts b/e2e-tests/playwright/support/server/default_config.ts index 4260123605..be7f8514dc 100644 --- a/e2e-tests/playwright/support/server/default_config.ts +++ b/e2e-tests/playwright/support/server/default_config.ts @@ -679,6 +679,7 @@ const defaultServerConfig: AdminConfig = { OnboardingTourTips: true, DeprecateCloudFree: false, CloudReverseTrial: false, + StreamlinedMarketplace: true }, ImportSettings: { Directory: './import', diff --git a/server/Makefile b/server/Makefile index 0979467203..71ea089941 100644 --- a/server/Makefile +++ b/server/Makefile @@ -157,7 +157,8 @@ MMCTL_PACKAGES=$(shell $(GO) list ./... | grep -E 'server/v8/cmd/mmctl') TEMPLATES_DIR=templates # Plugins Packages -PLUGIN_PACKAGES ?= mattermost-plugin-antivirus-v1.0.0 +PLUGIN_PACKAGES ?= $(PLUGIN_PACKAGES:) +PLUGIN_PACKAGES += mattermost-plugin-antivirus-v1.0.0 PLUGIN_PACKAGES += mattermost-plugin-autolink-v1.4.0 PLUGIN_PACKAGES += mattermost-plugin-aws-SNS-v1.2.0 PLUGIN_PACKAGES += mattermost-plugin-calls-v0.18.0 @@ -300,7 +301,7 @@ plugin-checker: $(GO) run $(GOFLAGS) ./public/plugin/checker prepackaged-plugins: ## Populate the prepackaged-plugins directory - @echo Downloading prepackaged plugins + @echo Downloading prepackaged plugins: $(PLUGIN_PACKAGES) mkdir -p prepackaged_plugins @cd prepackaged_plugins && for plugin_package in $(PLUGIN_PACKAGES) ; do \ curl -f -O -L https://plugins-store.test.mattermost.com/release/$$plugin_package.tar.gz; \ diff --git a/server/channels/api4/plugin_test.go b/server/channels/api4/plugin_test.go index b515917ca9..7f5067a2a8 100644 --- a/server/channels/api4/plugin_test.go +++ b/server/channels/api4/plugin_test.go @@ -462,6 +462,9 @@ func TestDisableOnRemove(t *testing.T) { } func TestGetMarketplacePlugins(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + th := Setup(t) defer th.TearDown() @@ -682,6 +685,9 @@ func TestGetMarketplacePlugins(t *testing.T) { } func TestGetInstalledMarketplacePlugins(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + samplePlugins := []*model.MarketplacePlugin{ { BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ @@ -825,6 +831,9 @@ func TestGetInstalledMarketplacePlugins(t *testing.T) { } func TestSearchGetMarketplacePlugins(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + samplePlugins := []*model.MarketplacePlugin{ { BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ @@ -950,6 +959,9 @@ func TestSearchGetMarketplacePlugins(t *testing.T) { } func TestGetLocalPluginInMarketplace(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + th := Setup(t) defer th.TearDown() @@ -1111,6 +1123,9 @@ func TestGetLocalPluginInMarketplace(t *testing.T) { } func TestGetRemotePluginInMarketplace(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + th := Setup(t) defer th.TearDown() @@ -1166,7 +1181,70 @@ func TestGetRemotePluginInMarketplace(t *testing.T) { require.NoError(t, err) } +func TestRemoteMarketplaceDisabledByStreamlinedMarketplaceFlag(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "true") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + + th := Setup(t) + defer th.TearDown() + + marketplacePlugins := []*model.MarketplacePlugin{ + { + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + HomepageURL: "https://example.com/mattermost/mattermost-plugin-nps", + IconData: "https://example.com/icon.svg", + DownloadURL: "www.github.com/example", + Manifest: &model.Manifest{ + Id: "marketplace.test", + Name: "marketplacetest", + Description: "a marketplace plugin", + Version: "0.1.2", + MinServerVersion: "", + }, + }, + InstalledVersion: "", + }, + } + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{marketplacePlugins[0]}) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + *cfg.PluginSettings.MarketplaceURL = testServer.URL + }) + + prepackagePlugin := &plugin.PrepackagedPlugin{ + Manifest: &model.Manifest{ + Version: "0.0.1", + Id: "prepackaged.test", + }, + } + + env := th.App.GetPluginsEnvironment() + env.SetPrepackagedPlugins([]*plugin.PrepackagedPlugin{prepackagePlugin}, nil) + + // No marketplace plugins returned + plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{}) + require.NoError(t, err) + + // Only returns the prepackaged plugins + require.Len(t, plugins, 1) + require.Equal(t, prepackagePlugin.Manifest, plugins[0].Manifest) +} + func TestGetPrepackagedPluginInMarketplace(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + th := Setup(t) defer th.TearDown() @@ -1212,6 +1290,30 @@ func TestGetPrepackagedPluginInMarketplace(t *testing.T) { env := th.App.GetPluginsEnvironment() env.SetPrepackagedPlugins([]*plugin.PrepackagedPlugin{prepackagePlugin}, nil) + t.Run("prepackaged plugins are shown in Cloud", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + }) + + lic := th.App.Srv().License() + th.App.Srv().SetLicense(model.NewTestLicense("cloud")) + defer th.App.Srv().SetLicense(lic) + + plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{}) + require.NoError(t, err) + + expectedPlugins := marketplacePlugins + expectedPlugins = append(expectedPlugins, &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Manifest: prepackagePlugin.Manifest, + }, + }) + + require.ElementsMatch(t, expectedPlugins, plugins) + require.Len(t, plugins, 2) + }) + t.Run("get remote and prepackaged plugins", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableRemoteMarketplace = true @@ -1271,24 +1373,12 @@ func TestGetPrepackagedPluginInMarketplace(t *testing.T) { require.Len(t, plugins, 1) require.Equal(t, newerPrepackagePlugin.Manifest, plugins[0].Manifest) }) - - t.Run("prepackaged plugins are not shown in Cloud", func(t *testing.T) { - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.PluginSettings.EnableRemoteMarketplace = true - *cfg.PluginSettings.EnableUploads = true - }) - - th.App.Srv().SetLicense(model.NewTestLicense("cloud")) - - plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{}) - require.NoError(t, err) - - require.ElementsMatch(t, marketplacePlugins, plugins) - require.Len(t, plugins, 1) - }) } func TestInstallMarketplacePlugin(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + th := Setup(t).InitBasic() defer th.TearDown() @@ -1639,6 +1729,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { } func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") + path, _ := fileutils.FindDir("tests") signatureFilename := "testplugin2.tar.gz.sig" diff --git a/server/channels/api4/system_test.go b/server/channels/api4/system_test.go index 6b3f1911f1..cff0e28c71 100644 --- a/server/channels/api4/system_test.go +++ b/server/channels/api4/system_test.go @@ -828,6 +828,8 @@ func TestPushNotificationAck(t *testing.T) { } func TestCompleteOnboarding(t *testing.T) { + os.Setenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE", "false") + defer os.Unsetenv("MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE") th := Setup(t) defer th.TearDown() diff --git a/server/channels/app/plugin.go b/server/channels/app/plugin.go index 0ff6335141..9bbbb4381a 100644 --- a/server/channels/app/plugin.go +++ b/server/channels/app/plugin.go @@ -552,7 +552,7 @@ func (a *App) GetPlugins() (*model.PluginsResponse, *model.AppError) { func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { plugins := map[string]*model.MarketplacePlugin{} - if *a.Config().PluginSettings.EnableRemoteMarketplace && !filter.LocalOnly { + if *a.Config().PluginSettings.EnableRemoteMarketplace && !a.Config().FeatureFlags.StreamlinedMarketplace && !filter.LocalOnly { p, appErr := a.getRemotePlugins() if appErr != nil { return nil, appErr @@ -561,20 +561,12 @@ func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*m } if !filter.RemoteOnly { - // Some plugin don't work on cloud. The remote Marketplace is aware of this fact, - // but prepackaged plugins are not. Hence, on a cloud installation prepackaged plugins - // shouldn't be shown in the Marketplace modal. - // This is a short term fix. The long term solution is to have a separate set of - // prepacked plugins for cloud: https://mattermost.atlassian.net/browse/MM-31331. - license := a.Srv().License() - if license == nil || !license.IsCloud() { - appErr := a.mergePrepackagedPlugins(plugins) - if appErr != nil { - return nil, appErr - } + appErr := a.mergePrepackagedPlugins(plugins) + if appErr != nil { + return nil, appErr } - appErr := a.mergeLocalPlugins(plugins) + appErr = a.mergeLocalPlugins(plugins) if appErr != nil { return nil, appErr } diff --git a/server/channels/app/plugin_install.go b/server/channels/app/plugin_install.go index f27e109e1e..74e3bee21b 100644 --- a/server/channels/app/plugin_install.go +++ b/server/channels/app/plugin_install.go @@ -289,7 +289,7 @@ func (ch *Channels) InstallMarketplacePlugin(request *model.InstallMarketplacePl signatureFile = bytes.NewReader(prepackagedPlugin.Signature) } - if *ch.cfgSvc.Config().PluginSettings.EnableRemoteMarketplace { + if *ch.cfgSvc.Config().PluginSettings.EnableRemoteMarketplace && !ch.cfgSvc.Config().FeatureFlags.StreamlinedMarketplace { var plugin *model.BaseMarketplacePlugin plugin, appErr = ch.getRemoteMarketplacePlugin(request.Id, request.Version) // The plugin might only be prepackaged and not on the Marketplace. diff --git a/server/public/model/feature_flags.go b/server/public/model/feature_flags.go index 73b7ebf8d7..20a07e70cf 100644 --- a/server/public/model/feature_flags.go +++ b/server/public/model/feature_flags.go @@ -48,6 +48,8 @@ type FeatureFlags struct { EnableExportDirectDownload bool DataRetentionConcurrencyEnabled bool + + StreamlinedMarketplace bool } func (f *FeatureFlags) SetDefaults() { @@ -65,6 +67,7 @@ func (f *FeatureFlags) SetDefaults() { f.CloudReverseTrial = false f.EnableExportDirectDownload = false f.DataRetentionConcurrencyEnabled = true + f.StreamlinedMarketplace = true } // ToMap returns the feature flags as a map[string]string diff --git a/webapp/channels/src/components/admin_console/plugin_management/index.ts b/webapp/channels/src/components/admin_console/plugin_management/index.ts index 642d88e14c..77e0cbb347 100644 --- a/webapp/channels/src/components/admin_console/plugin_management/index.ts +++ b/webapp/channels/src/components/admin_console/plugin_management/index.ts @@ -18,12 +18,14 @@ import {GenericAction} from 'mattermost-redux/types/actions'; import {appsFeatureFlagEnabled} from 'mattermost-redux/selectors/entities/apps'; import PluginManagement from './plugin_management'; +import {streamlinedMarketplaceEnabled} from 'mattermost-redux/selectors/entities/preferences'; function mapStateToProps(state: any) { return { plugins: state.entities.admin.plugins, pluginStatuses: state.entities.admin.pluginStatuses, appsFeatureFlagEnabled: appsFeatureFlagEnabled(state), + streamlinedMarketplaceFlagEnabled: streamlinedMarketplaceEnabled(state), }; } diff --git a/webapp/channels/src/components/admin_console/plugin_management/plugin_management.test.tsx b/webapp/channels/src/components/admin_console/plugin_management/plugin_management.test.tsx index 7fdf19df6d..673594b208 100644 --- a/webapp/channels/src/components/admin_console/plugin_management/plugin_management.test.tsx +++ b/webapp/channels/src/components/admin_console/plugin_management/plugin_management.test.tsx @@ -91,6 +91,7 @@ describe('components/PluginManagement', () => { }, }, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), @@ -234,6 +235,7 @@ describe('components/PluginManagement', () => { pluginStatuses: {}, plugins: {}, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), @@ -324,6 +326,7 @@ describe('components/PluginManagement', () => { }, }, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), @@ -381,6 +384,7 @@ describe('components/PluginManagement', () => { }, }, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), @@ -438,6 +442,7 @@ describe('components/PluginManagement', () => { }, }, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), @@ -497,6 +502,7 @@ describe('components/PluginManagement', () => { }, }, appsFeatureFlagEnabled: false, + streamlinedMarketplaceFlagEnabled: false, actions: { uploadPlugin: jest.fn(), installPluginFromUrl: jest.fn(), diff --git a/webapp/channels/src/components/admin_console/plugin_management/plugin_management.tsx b/webapp/channels/src/components/admin_console/plugin_management/plugin_management.tsx index db442c65e5..a0e7340f8a 100644 --- a/webapp/channels/src/components/admin_console/plugin_management/plugin_management.tsx +++ b/webapp/channels/src/components/admin_console/plugin_management/plugin_management.tsx @@ -205,16 +205,17 @@ const PluginItem = ({ className={deactivating || isDisabled ? 'disabled' : ''} onClick={handleDisable} > - {deactivating ? + {deactivating ? ( : + /> + ) : ( - } + )} ); } else { @@ -224,16 +225,17 @@ const PluginItem = ({ className={activating || isDisabled ? 'disabled' : ''} onClick={handleEnable} > - {activating ? + {activating ? ( : + /> + ) : ( - } + )} ); } @@ -415,6 +417,7 @@ type Props = BaseProps & { pluginStatuses: Record; plugins: any; appsFeatureFlagEnabled: boolean; + streamlinedMarketplaceFlagEnabled: boolean; actions: { uploadPlugin: (fileData: File, force: boolean) => any; removePlugin: (pluginId: string) => any; @@ -1214,39 +1217,43 @@ export default class PluginManagement extends AdminSettings { onChange={this.handleChange} setByEnv={this.isSetByEnv('PluginSettings.EnableMarketplace')} /> - + + } + helpText={ + + } + value={this.state.enableRemoteMarketplace} + disabled={this.props.isDisabled || !this.state.enable || !this.state.enableUploads || !this.state.enableMarketplace} + onChange={this.handleChange} + setByEnv={this.isSetByEnv('PluginSettings.EnableRemoteMarketplace')} /> - } - helpText={ - + } + helpText={this.getMarketplaceURLHelpText(this.state.marketplaceUrl, this.state.enableUploads)} + value={this.state.marketplaceUrl} + disabled={this.props.isDisabled || !this.state.enable || !this.state.enableUploads || !this.state.enableMarketplace || !this.state.enableRemoteMarketplace} + onChange={this.handleChange} + setByEnv={this.isSetByEnv('PluginSettings.MarketplaceURL')} /> - } - value={this.state.enableRemoteMarketplace} - disabled={this.props.isDisabled || !this.state.enable || !this.state.enableUploads || !this.state.enableMarketplace} - onChange={this.handleChange} - setByEnv={this.isSetByEnv('PluginSettings.EnableRemoteMarketplace')} - /> - - } - helpText={this.getMarketplaceURLHelpText(this.state.marketplaceUrl, this.state.enableUploads)} - value={this.state.marketplaceUrl} - disabled={this.props.isDisabled || !this.state.enable || !this.state.enableUploads || !this.state.enableMarketplace || !this.state.enableRemoteMarketplace} - onChange={this.handleChange} - setByEnv={this.isSetByEnv('PluginSettings.MarketplaceURL')} - /> + + )} )} {pluginsContainer} diff --git a/webapp/channels/src/components/plugin_marketplace/__snapshots__/marketplace_modal.test.tsx.snap b/webapp/channels/src/components/plugin_marketplace/__snapshots__/marketplace_modal.test.tsx.snap index 0321f32193..a52754423a 100644 --- a/webapp/channels/src/components/plugin_marketplace/__snapshots__/marketplace_modal.test.tsx.snap +++ b/webapp/channels/src/components/plugin_marketplace/__snapshots__/marketplace_modal.test.tsx.snap @@ -1,5 +1,225 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`components/marketplace/ doesn't show web marketplace banner in FeatureFlags.StreamlinedMarketplace for Cloud 1`] = ` + +
+ +
+

+ App Marketplace +

+
+
+ +
+ + + Error connecting to the marketplace server. Please check your settings in the + + System Console + + . + +
+
+ +
+
+
+
+`; + +exports[`components/marketplace/ hides search, shows web marketplace banner in FeatureFlags.StreamlinedMarketplace 1`] = ` + +
+ +
+

+ App Marketplace +

+
+
+ +
+ + + Error connecting to the marketplace server. Please check your settings in the + + System Console + + . + +
+
+ +
+
+ +
+
+`; + exports[`components/marketplace/ should render default 1`] = `
{ entities: { general: { firstAdminCompleteSetup: false, + config: { + FeatureFlagStreamlinedMarketplace: 'false', + }, + license: { + Cloud: 'false', + }, }, admin: { pluginStatuses: {}, @@ -156,4 +163,49 @@ describe('components/marketplace/', () => { expect(wrapper.shallow()).toMatchSnapshot(); }); + + test('hides search, shows web marketplace banner in FeatureFlags.StreamlinedMarketplace', () => { + const setState = jest.fn(); + const useStateSpy = jest.spyOn(React, 'useState'); + useStateSpy.mockImplementation(() => [true, setState]); + + mockState.views.marketplace.plugins = [ + samplePlugin, + sampleInstalledPlugin, + ]; + + (mockState.entities.general.config as any).FeatureFlagStreamlinedMarketplace = 'true'; + + const wrapper = shallow( + , + ); + + wrapper.update(); + const content = wrapper.shallow(); + + expect(content.exists('#searchMarketplaceTextbox')).toBe(false); + expect(content.exists(WebMarketplaceBanner)).toBe(true); + + expect(content).toMatchSnapshot(); + }); + + test("doesn't show web marketplace banner in FeatureFlags.StreamlinedMarketplace for Cloud", () => { + const setState = jest.fn(); + const useStateSpy = jest.spyOn(React, 'useState'); + useStateSpy.mockImplementation(() => [true, setState]); + + (mockState.entities.general.config as any).FeatureFlagStreamlinedMarketplace = 'true'; + mockState.entities.general.license.Cloud = 'true'; + + const wrapper = shallow( + , + ); + + wrapper.update(); + const content = wrapper.shallow(); + + expect(content.exists(WebMarketplaceBanner)).toBe(false); + + expect(content).toMatchSnapshot(); + }); }); diff --git a/webapp/channels/src/components/plugin_marketplace/marketplace_modal.tsx b/webapp/channels/src/components/plugin_marketplace/marketplace_modal.tsx index 23fd7a69f0..03445ea59d 100644 --- a/webapp/channels/src/components/plugin_marketplace/marketplace_modal.tsx +++ b/webapp/channels/src/components/plugin_marketplace/marketplace_modal.tsx @@ -13,7 +13,8 @@ import {MagnifyIcon} from '@mattermost/compass-icons/components'; import {FooterPagination, GenericModal} from '@mattermost/components'; import {getPluginStatuses} from 'mattermost-redux/actions/admin'; import {setFirstAdminVisitMarketplaceStatus} from 'mattermost-redux/actions/general'; -import {getFirstAdminVisitMarketplaceStatus} from 'mattermost-redux/selectors/entities/general'; +import {getFirstAdminVisitMarketplaceStatus, getLicense} from 'mattermost-redux/selectors/entities/general'; +import {streamlinedMarketplaceEnabled} from 'mattermost-redux/selectors/entities/preferences'; import {ActionResult} from 'mattermost-redux/types/actions'; import {fetchListing, filterListing} from 'actions/marketplace'; @@ -27,10 +28,13 @@ import {getListing, getInstalledListing} from 'selectors/views/marketplace'; import {isModalOpen} from 'selectors/views/modals'; import {GlobalState} from 'types/store'; import {ModalIdentifiers} from 'utils/constants'; +import WebMarketplaceBanner from './web_marketplace_banner'; +import {isCloudLicense} from 'utils/license_utils'; import './marketplace_modal.scss'; import MarketplaceList, {ITEMS_PER_PAGE} from './marketplace_list/marketplace_list'; +import classNames from 'classnames'; const MarketplaceTabs = { ALL_LISTING: 'all', @@ -63,6 +67,9 @@ const MarketplaceModal = ({ const installedListing = useSelector(getInstalledListing); const pluginStatuses = useSelector((state: GlobalState) => state.entities.admin.pluginStatuses); const hasFirstAdminVisitedMarketplace = useSelector(getFirstAdminVisitMarketplaceStatus); + const isStreamlinedMarketplaceEnabled = useSelector(streamlinedMarketplaceEnabled); + const license = useSelector(getLicense); + const isCloud = isCloudLicense(license); const [tabKey, setTabKey] = useState(MarketplaceTabs.ALL_LISTING); const [filter, setFilter] = useState(''); @@ -162,39 +169,62 @@ const MarketplaceModal = ({ handleChangeTab(MarketplaceTabs.ALL_LISTING); }, [handleChangeTab]); - const getHeaderInput = useCallback(() => ( - } - placeholder={formatMessage({id: 'marketplace_modal.search', defaultMessage: 'Search marketplace'})} - useLegend={false} - autoFocus={true} - clearable={true} - value={filter} - onChange={handleOnChange} - onClear={handleOnClear} - /> - ), [filter, handleOnChange, handleOnClear]); + const getHeaderInput = useCallback(() => { + if (isStreamlinedMarketplaceEnabled) { + return null; + } - const getFooterContent = useCallback(() => ( - - ), [installedListing.length, listing.length, page, handleOnNextPage, handleOnPreviousPage, tabKey]); + return ( + } + placeholder={formatMessage({id: 'marketplace_modal.search', defaultMessage: 'Search marketplace'})} + useLegend={false} + autoFocus={true} + clearable={true} + value={filter} + onChange={handleOnChange} + onClear={handleOnClear} + /> + ); + }, [filter, handleOnChange, handleOnClear]); + + const getFooterContent = useCallback(() => { + if (isStreamlinedMarketplaceEnabled && listing.length <= ITEMS_PER_PAGE) { + return null; + } + + return ( + + ); + }, [installedListing.length, listing.length, page, handleOnNextPage, handleOnPreviousPage, tabKey, isStreamlinedMarketplaceEnabled]); + + const getAppendedContent = useCallback(() => { + if (!isStreamlinedMarketplaceEnabled || isCloud) { + return null; + } + + return ; + }, [isStreamlinedMarketplaceEnabled, isCloud]); return ( - - - {loading ? ( - - ) : ( - - )} - - + {isStreamlinedMarketplaceEnabled ? ( + <> - - + + ) : ( + + + {loading ? ( + + ) : ( + + )} + + + + + + )} ); }; diff --git a/webapp/channels/src/components/plugin_marketplace/web_marketplace_banner.tsx b/webapp/channels/src/components/plugin_marketplace/web_marketplace_banner.tsx new file mode 100644 index 0000000000..a3868fee15 --- /dev/null +++ b/webapp/channels/src/components/plugin_marketplace/web_marketplace_banner.tsx @@ -0,0 +1,109 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React from 'react'; +import {useIntl} from 'react-intl'; +import styled from 'styled-components'; +import ExternalLink from '../external_link'; + +import webMarketplaceBannerBackground from 'images/marketplace-notice-background.jpg'; +import pluginIconConfluence from 'images/icons/confluence.svg'; +import pluginIconGiphy from 'images/icons/giphy.svg'; +import pluginIconPagerDuty from 'images/icons/pager-duty.svg'; + +import {ArrowRightIcon} from '@mattermost/compass-icons/components'; + +const WEB_MARKETPLACE_LINK = 'https://mattermost.com/marketplace'; + +const WebMarketplaceBanner = () => { + const {formatMessage} = useIntl(); + + return ( + + + + {formatMessage({id: 'marketplace_modal.web_marketplace_link.title', defaultMessage: 'Explore Community Integrations'})} + <ArrowRightIcon size={24}/> + + + {formatMessage({id: 'marketplace_modal.web_marketplace_link.desc', defaultMessage: 'We have dozens of community integrations available. So definitely do check them out!'})} + + + + + + + + + ); +}; + +const ExternalBannerLink = styled(ExternalLink)` + &&, + &&:hover, + &&:focus { + color: var(--denim-center-channel-bg, #FFF); + text-decoration: none; + } + && { + display: grid; + grid-template-columns: auto auto; + justify-content: space-between; + text-align: left; + padding: 24px 32px; + } +`; + +const WebMarketplaceBannerRoot = styled.section` + background-image: url(${webMarketplaceBannerBackground}); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + border-radius: 0 0 12px 12px !important; + margin: -1px; +`; + +const Title = styled.div` + font-family: Metropolis; + font-size: 16px; + font-style: normal; + font-weight: 600; + line-height: 24px; + margin: 4px 0; + grid-column: 1; + + svg { + vertical-align: middle; + display: inline-block; + margin-left: 4px; + } +`; + +const Description = styled.p` + font-family: Open Sans; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 20px; + grid-column: 1; + margin-bottom: 4px; +`; + +const PluginIcon = styled.img` + width: 50px; + height: 50px; + border-radius: 50%; +`; + +const IconsContainer = styled.div` + grid-column: 2; + grid-row: span 2/2; + ${PluginIcon}:nth-child(n+2) { + margin-left: calc(-54px / 1/4); + } +`; + +export default WebMarketplaceBanner; diff --git a/webapp/channels/src/i18n/en.json b/webapp/channels/src/i18n/en.json index 787d8db7cf..14f46c88a3 100644 --- a/webapp/channels/src/i18n/en.json +++ b/webapp/channels/src/i18n/en.json @@ -3949,6 +3949,8 @@ "marketplace_modal.tabs.all_listing": "All", "marketplace_modal.tabs.installed_listing": "Installed ({count})", "marketplace_modal.title": "App Marketplace", + "marketplace_modal.web_marketplace_link.desc": "We have dozens of community integrations available. So definitely do check them out!", + "marketplace_modal.web_marketplace_link.title": "Explore Community Integrations", "menu.cloudFree.enterpriseTrialDescription": "Your trial is active until {trialEndDay}. Discover our top Enterprise features. Learn more", "menu.cloudFree.enterpriseTrialTitle": "Enterprise Trial", "menu.cloudFree.postTrial.tryEnterprise": "Interested in a limitless plan with high-security features? See plans", diff --git a/webapp/channels/src/images/icons/confluence.svg b/webapp/channels/src/images/icons/confluence.svg new file mode 100644 index 0000000000..934c65b374 --- /dev/null +++ b/webapp/channels/src/images/icons/confluence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webapp/channels/src/images/icons/giphy.svg b/webapp/channels/src/images/icons/giphy.svg new file mode 100644 index 0000000000..78669eeaa5 --- /dev/null +++ b/webapp/channels/src/images/icons/giphy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webapp/channels/src/images/icons/pager-duty.svg b/webapp/channels/src/images/icons/pager-duty.svg new file mode 100644 index 0000000000..d0d0f42aab --- /dev/null +++ b/webapp/channels/src/images/icons/pager-duty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/webapp/channels/src/images/marketplace-notice-background.jpg b/webapp/channels/src/images/marketplace-notice-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f6169fcef48a6c1f57659cb3bfe97e3a97c596a GIT binary patch literal 86358 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 z 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 W185qs*ZZ)L0}ujVlMnF!0RPzzJjH(i literal 0 HcmV?d00001 diff --git a/webapp/channels/src/packages/mattermost-redux/src/selectors/entities/preferences.ts b/webapp/channels/src/packages/mattermost-redux/src/selectors/entities/preferences.ts index 1dc6b8f9f2..7ac235685e 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/selectors/entities/preferences.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/selectors/entities/preferences.ts @@ -281,3 +281,7 @@ export function deprecateCloudFree(state: GlobalState): boolean { export function cloudReverseTrial(state: GlobalState): boolean { return getFeatureFlagValue(state, 'CloudReverseTrial') === 'true'; } + +export function streamlinedMarketplaceEnabled(state: GlobalState): boolean { + return getFeatureFlagValue(state, 'StreamlinedMarketplace') === 'true'; +} diff --git a/webapp/platform/components/src/generic_modal/generic_modal.scss b/webapp/platform/components/src/generic_modal/generic_modal.scss index 9e70d63799..7a9ae57afa 100644 --- a/webapp/platform/components/src/generic_modal/generic_modal.scss +++ b/webapp/platform/components/src/generic_modal/generic_modal.scss @@ -22,6 +22,10 @@ max-height: 100%; padding: 0; + &.divider { + border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.08); + } + .form-control { height: 40px; box-sizing: border-box; @@ -106,7 +110,7 @@ border-radius: 4px; &.divider { - border-top: 1px solid rgba(63, 67, 80, 0.08); + border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.08); } } diff --git a/webapp/platform/components/src/generic_modal/generic_modal.tsx b/webapp/platform/components/src/generic_modal/generic_modal.tsx index 3bca20efd0..18421b9ebf 100644 --- a/webapp/platform/components/src/generic_modal/generic_modal.tsx +++ b/webapp/platform/components/src/generic_modal/generic_modal.tsx @@ -39,8 +39,10 @@ export type Props = { keyboardEscape?: boolean; headerInput?: React.ReactNode; bodyPadding?: boolean; + bodyDivider?: boolean; footerContent?: React.ReactNode; footerDivider?: boolean; + appendedContent?: React.ReactNode; headerButton?: React.ReactNode; }; @@ -199,7 +201,7 @@ export class GenericModal extends React.PureComponent { )} - + {this.props.compassDesign ? ( this.props.errorText && (
@@ -226,6 +228,7 @@ export class GenericModal extends React.PureComponent { )} )} + {Boolean(this.props.appendedContent) && this.props.appendedContent}
);