diff --git a/server/activate_hooks.go b/server/activate_hooks.go index 35f3ec6..6fabe6e 100644 --- a/server/activate_hooks.go +++ b/server/activate_hooks.go @@ -38,19 +38,19 @@ func (p *Plugin) OnActivate() error { teams, err := p.API.GetTeams() if err != nil { - return errors.Wrap(err, "failed to query teams OnActivate") - } - - for _, team := range teams { - _, ok := configuration.demoChannelIDs[team.Id] - if !ok { - p.API.LogWarn("No demo channel id for team", "team", team.Id) - continue - } - - msg := fmt.Sprintf("OnActivate: %s", manifest.Id) - if err := p.postPluginMessage(team.Id, msg); err != nil { - return errors.Wrap(err, "failed to post OnActivate message") + p.API.LogWarn("Failed to query teams OnActivate, skipping activation messages", "error", err.Error()) + } else { + for _, team := range teams { + _, ok := configuration.demoChannelIDs[team.Id] + if !ok { + p.API.LogWarn("No demo channel id for team", "team", team.Id) + continue + } + + msg := fmt.Sprintf("OnActivate: %s", manifest.Id) + if err := p.postPluginMessage(team.Id, msg); err != nil { + p.API.LogWarn("Failed to post OnActivate message", "error", err.Error()) + } } } @@ -83,19 +83,19 @@ func (p *Plugin) OnDeactivate() error { teams, err := p.API.GetTeams() if err != nil { - return errors.Wrap(err, "failed to query teams OnDeactivate") - } - - for _, team := range teams { - _, ok := configuration.demoChannelIDs[team.Id] - if !ok { - p.API.LogWarn("No demo channel id for team", "team", team.Id) - continue - } - - msg := fmt.Sprintf("OnDeactivate: %s", manifest.Id) - if err := p.postPluginMessage(team.Id, msg); err != nil { - return errors.Wrap(err, "failed to post OnDeactivate message") + p.API.LogWarn("Failed to query teams OnDeactivate, skipping deactivation messages", "error", err.Error()) + } else { + for _, team := range teams { + _, ok := configuration.demoChannelIDs[team.Id] + if !ok { + p.API.LogWarn("No demo channel id for team", "team", team.Id) + continue + } + + msg := fmt.Sprintf("OnDeactivate: %s", manifest.Id) + if err := p.postPluginMessage(team.Id, msg); err != nil { + p.API.LogWarn("Failed to post OnDeactivate message", "error", err.Error()) + } } } diff --git a/server/configuration.go b/server/configuration.go index e0dac42..60a059f 100644 --- a/server/configuration.go +++ b/server/configuration.go @@ -401,13 +401,13 @@ func (p *Plugin) ensureDemoUser(configuration *configuration) (string, error) { teams, err := p.API.GetTeams() if err != nil { - return "", err - } - - for _, team := range teams { - _, err := p.API.CreateTeamMember(team.Id, user.Id) - if err != nil { - p.API.LogError("Failed add demo user to team", "teamID", team.Id, "error", err.Error()) + p.API.LogWarn("Failed to get teams for demo user setup, skipping team membership", "error", err.Error()) + } else { + for _, team := range teams { + _, err := p.API.CreateTeamMember(team.Id, user.Id) + if err != nil { + p.API.LogError("Failed add demo user to team", "teamID", team.Id, "error", err.Error()) + } } } @@ -417,7 +417,8 @@ func (p *Plugin) ensureDemoUser(configuration *configuration) (string, error) { func (p *Plugin) ensureDemoChannels(configuration *configuration) (map[string]string, error) { teams, err := p.API.GetTeams() if err != nil { - return nil, err + p.API.LogWarn("Failed to get teams for demo channel setup, skipping channel creation", "error", err.Error()) + return make(map[string]string), nil } demoChannelIDs := make(map[string]string) diff --git a/webapp/src/components/channel_settings_smoke_test.jsx b/webapp/src/components/channel_settings_smoke_test.jsx new file mode 100644 index 0000000..e317c2f --- /dev/null +++ b/webapp/src/components/channel_settings_smoke_test.jsx @@ -0,0 +1,70 @@ +import React, {useCallback, useEffect, useState} from 'react'; +import PropTypes from 'prop-types'; + +export default function ChannelSettingsSmokeTest({channel, setAreThereUnsavedChanges, registerSaveBarHandlers}) { + const [value, setValue] = useState(''); + + const handleSave = useCallback(async () => { + // Smoke test: no server persistence; clearing dirty state matches a successful save. + setAreThereUnsavedChanges?.(false); + }, [setAreThereUnsavedChanges]); + + const handleReset = useCallback(() => { + setValue(''); + setAreThereUnsavedChanges?.(false); + }, [setAreThereUnsavedChanges]); + + /* eslint-disable consistent-return -- useEffect may return cleanup or nothing */ + useEffect(() => { + if (!registerSaveBarHandlers) { + return; + } + registerSaveBarHandlers({ + save: handleSave, + reset: handleReset, + }); + return () => registerSaveBarHandlers(null); + }, [registerSaveBarHandlers, handleSave, handleReset]); + /* eslint-enable consistent-return */ + + const handleChange = useCallback((e) => { + const newValue = e.target.value; + setValue(newValue); + setAreThereUnsavedChanges?.(newValue.length > 0); + }, [setAreThereUnsavedChanges]); + + return ( +