MM-50347 Make desktop app landing page optional (#28421)
* fix: Make desktop app landing page optional * Update i18n strings * Fix linting and unit test --------- Co-authored-by: Kiran <kiran@krinati.co>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
0048723ccd
Коммит
394f625bcb
@@ -25,6 +25,7 @@ func GenerateClientConfig(c *model.Config, telemetryID string, license *model.Li
|
|||||||
props["EnableJoinLeaveMessageByDefault"] = strconv.FormatBool(*c.TeamSettings.EnableJoinLeaveMessageByDefault)
|
props["EnableJoinLeaveMessageByDefault"] = strconv.FormatBool(*c.TeamSettings.EnableJoinLeaveMessageByDefault)
|
||||||
|
|
||||||
props["EnableBotAccountCreation"] = strconv.FormatBool(*c.ServiceSettings.EnableBotAccountCreation)
|
props["EnableBotAccountCreation"] = strconv.FormatBool(*c.ServiceSettings.EnableBotAccountCreation)
|
||||||
|
props["EnableDesktopLandingPage"] = strconv.FormatBool(*c.ServiceSettings.EnableDesktopLandingPage)
|
||||||
props["EnableOAuthServiceProvider"] = strconv.FormatBool(*c.ServiceSettings.EnableOAuthServiceProvider)
|
props["EnableOAuthServiceProvider"] = strconv.FormatBool(*c.ServiceSettings.EnableOAuthServiceProvider)
|
||||||
props["GoogleDeveloperKey"] = *c.ServiceSettings.GoogleDeveloperKey
|
props["GoogleDeveloperKey"] = *c.ServiceSettings.GoogleDeveloperKey
|
||||||
props["EnableIncomingWebhooks"] = strconv.FormatBool(*c.ServiceSettings.EnableIncomingWebhooks)
|
props["EnableIncomingWebhooks"] = strconv.FormatBool(*c.ServiceSettings.EnableIncomingWebhooks)
|
||||||
@@ -244,6 +245,7 @@ func GenerateLimitedClientConfig(c *model.Config, telemetryID string, license *m
|
|||||||
props["ServiceEnvironment"] = model.GetServiceEnvironment()
|
props["ServiceEnvironment"] = model.GetServiceEnvironment()
|
||||||
|
|
||||||
props["EnableBotAccountCreation"] = strconv.FormatBool(*c.ServiceSettings.EnableBotAccountCreation)
|
props["EnableBotAccountCreation"] = strconv.FormatBool(*c.ServiceSettings.EnableBotAccountCreation)
|
||||||
|
props["EnableDesktopLandingPage"] = strconv.FormatBool(*c.ServiceSettings.EnableDesktopLandingPage)
|
||||||
props["EnableFile"] = strconv.FormatBool(*c.LogSettings.EnableFile)
|
props["EnableFile"] = strconv.FormatBool(*c.LogSettings.EnableFile)
|
||||||
props["FileLevel"] = *c.LogSettings.FileLevel
|
props["FileLevel"] = *c.LogSettings.FileLevel
|
||||||
|
|
||||||
|
|||||||
@@ -387,6 +387,7 @@ type ServiceSettings struct {
|
|||||||
EnableAPITeamDeletion *bool
|
EnableAPITeamDeletion *bool
|
||||||
EnableAPITriggerAdminNotifications *bool
|
EnableAPITriggerAdminNotifications *bool
|
||||||
EnableAPIUserDeletion *bool
|
EnableAPIUserDeletion *bool
|
||||||
|
EnableDesktopLandingPage *bool
|
||||||
ExperimentalEnableHardenedMode *bool `access:"experimental_features"`
|
ExperimentalEnableHardenedMode *bool `access:"experimental_features"`
|
||||||
ExperimentalStrictCSRFEnforcement *bool `access:"experimental_features,write_restrictable,cloud_restrictable"`
|
ExperimentalStrictCSRFEnforcement *bool `access:"experimental_features,write_restrictable,cloud_restrictable"`
|
||||||
EnableEmailInvitations *bool `access:"authentication_signup"`
|
EnableEmailInvitations *bool `access:"authentication_signup"`
|
||||||
@@ -825,6 +826,10 @@ func (s *ServiceSettings) SetDefaults(isUpdate bool) {
|
|||||||
s.EnableBotAccountCreation = NewPointer(false)
|
s.EnableBotAccountCreation = NewPointer(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.EnableDesktopLandingPage == nil {
|
||||||
|
s.EnableDesktopLandingPage = NewPointer(true)
|
||||||
|
}
|
||||||
|
|
||||||
if s.EnableSVGs == nil {
|
if s.EnableSVGs == nil {
|
||||||
if isUpdate {
|
if isUpdate {
|
||||||
s.EnableSVGs = NewPointer(true)
|
s.EnableSVGs = NewPointer(true)
|
||||||
|
|||||||
@@ -2024,6 +2024,13 @@ const AdminDefinition: AdminDefinitionType = {
|
|||||||
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.CUSTOMIZATION)),
|
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.CUSTOMIZATION)),
|
||||||
isHidden: it.configIsTrue('ExperimentalSettings', 'RestrictSystemAdmin'),
|
isHidden: it.configIsTrue('ExperimentalSettings', 'RestrictSystemAdmin'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'bool',
|
||||||
|
key: 'ServiceSettings.EnableDesktopLandingPage',
|
||||||
|
label: defineMessage({id: 'admin.customization.enableDesktopLandingPageTitle', defaultMessage: 'Enable Desktop App Landing Page:'}),
|
||||||
|
help_text: defineMessage({id: 'admin.customization.enableDesktopLandingPageDesc', defaultMessage: 'Whether or not to prompt a user to use the Desktop App when they first use Mattermost.'}),
|
||||||
|
isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.SITE.CUSTOMIZATION)),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ function mapStateToProps(state: GlobalState) {
|
|||||||
iosDownloadLink: config.IosAppDownloadLink,
|
iosDownloadLink: config.IosAppDownloadLink,
|
||||||
androidDownloadLink: config.AndroidAppDownloadLink,
|
androidDownloadLink: config.AndroidAppDownloadLink,
|
||||||
appDownloadLink: config.AppDownloadLink,
|
appDownloadLink: config.AppDownloadLink,
|
||||||
|
enableDesktopLandingPage: config.EnableDesktopLandingPage === 'true',
|
||||||
permalinkRedirectTeamName: permalinkRedirectTeam ? permalinkRedirectTeam.name : '',
|
permalinkRedirectTeamName: permalinkRedirectTeam ? permalinkRedirectTeam.name : '',
|
||||||
showTermsOfService,
|
showTermsOfService,
|
||||||
plugins,
|
plugins,
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ describe('components/Root', () => {
|
|||||||
rhsState: null,
|
rhsState: null,
|
||||||
shouldShowAppBar: false,
|
shouldShowAppBar: false,
|
||||||
isCloud: false,
|
isCloud: false,
|
||||||
|
enableDesktopLandingPage: true,
|
||||||
actions: {
|
actions: {
|
||||||
loadConfigAndMe: jest.fn().mockImplementation(() => {
|
loadConfigAndMe: jest.fn().mockImplementation(() => {
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
@@ -356,6 +357,19 @@ describe('components/Root', () => {
|
|||||||
expect(props.history.push).not.toHaveBeenCalled();
|
expect(props.history.push).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should not show when disabled', async () => {
|
||||||
|
const props = {
|
||||||
|
...landingProps,
|
||||||
|
enableDesktopLandingPage: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
renderWithContext(<Root {...props}/>);
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(props.history.push).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,11 @@ export default class Root extends React.PureComponent<Props, State> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private showLandingPageIfNecessary = () => {
|
private showLandingPageIfNecessary = () => {
|
||||||
|
// Only show Landing Page if enabled
|
||||||
|
if (!this.props.enableDesktopLandingPage) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// We have nothing to redirect to if we're already on Desktop App
|
// We have nothing to redirect to if we're already on Desktop App
|
||||||
// Chromebook has no Desktop App to switch to
|
// Chromebook has no Desktop App to switch to
|
||||||
if (isDesktopApp() || isChromebook()) {
|
if (isDesktopApp() || isChromebook()) {
|
||||||
|
|||||||
@@ -647,6 +647,8 @@
|
|||||||
"admin.customization.customUrlSchemesPlaceholder": "E.g.: \"git,smtp\"",
|
"admin.customization.customUrlSchemesPlaceholder": "E.g.: \"git,smtp\"",
|
||||||
"admin.customization.enableCustomEmojiDesc": "Enable users to create custom emoji for use in messages. When enabled, custom emoji settings can be accessed in Channels through the emoji picker.",
|
"admin.customization.enableCustomEmojiDesc": "Enable users to create custom emoji for use in messages. When enabled, custom emoji settings can be accessed in Channels through the emoji picker.",
|
||||||
"admin.customization.enableCustomEmojiTitle": "Enable Custom Emoji:",
|
"admin.customization.enableCustomEmojiTitle": "Enable Custom Emoji:",
|
||||||
|
"admin.customization.enableDesktopLandingPageDesc": "Whether or not to prompt a user to use the Desktop App when they first use Mattermost.",
|
||||||
|
"admin.customization.enableDesktopLandingPageTitle": "Enable Desktop App Landing Page:",
|
||||||
"admin.customization.enableEmojiPickerDesc": "The emoji picker allows users to select emoji to add as reactions or use in messages. Enabling the emoji picker with a large number of custom emoji may slow down performance.",
|
"admin.customization.enableEmojiPickerDesc": "The emoji picker allows users to select emoji to add as reactions or use in messages. Enabling the emoji picker with a large number of custom emoji may slow down performance.",
|
||||||
"admin.customization.enableEmojiPickerTitle": "Enable Emoji Picker:",
|
"admin.customization.enableEmojiPickerTitle": "Enable Emoji Picker:",
|
||||||
"admin.customization.enableGifPickerDesc": "Allows users to select GIFs from the emoji picker.",
|
"admin.customization.enableGifPickerDesc": "Allows users to select GIFs from the emoji picker.",
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ export type ClientConfig = {
|
|||||||
EnableCustomTermsOfService: string;
|
EnableCustomTermsOfService: string;
|
||||||
EnableDeveloper: string;
|
EnableDeveloper: string;
|
||||||
EnableDiagnostics: string;
|
EnableDiagnostics: string;
|
||||||
|
EnableDesktopLandingPage: 'true' | 'false';
|
||||||
EnableEmailBatching: string;
|
EnableEmailBatching: string;
|
||||||
EnableEmailInvitations: string;
|
EnableEmailInvitations: string;
|
||||||
EnableEmojiPicker: string;
|
EnableEmojiPicker: string;
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user