Skip to content

Commit 1e38ec5

Browse files
committed
fix(Announcements): Fixes issue with rendering announcments in workspaces
1 parent 6cdcafe commit 1e38ec5

File tree

10 files changed

+38
-32
lines changed

10 files changed

+38
-32
lines changed

packages/theme/src/themes/dark/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export const workspaces = merge({}, defaultStyles.workspaces, {
113113
});
114114

115115
// Announcements
116-
export const announcements = merge({}, defaultStyles.workspaces, {
116+
export const announcements = merge({}, defaultStyles.announcements, {
117117
spotlight: {
118118
background: legacyStyles.darkThemeGrayDark,
119119
},

src/actions/service.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ServiceModel from '../models/Service';
44
export default {
55
setActive: {
66
serviceId: PropTypes.string.isRequired,
7+
keepActiveRoute: PropTypes.bool,
78
},
89
blurActive: {},
910
setActiveNext: {},

src/app.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import SubscriptionPopupScreen from './containers/subscription/SubscriptionPopup
4343
import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen';
4444
import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen';
4545
import { WORKSPACES_ROUTES } from './features/workspaces';
46+
import AnnouncementScreen from './features/announcements/components/AnnouncementScreen';
47+
import { ANNOUNCEMENTS_ROUTES } from './features/announcements';
4648

4749
// Add Polyfills
4850
smoothScroll.polyfill();
@@ -73,6 +75,7 @@ window.addEventListener('load', () => {
7375
<I18N>
7476
<Router history={history}>
7577
<Route path="/" component={AppLayoutContainer}>
78+
<Route path={ANNOUNCEMENTS_ROUTES.TARGET} component={AnnouncementScreen} />
7679
<Route path="/settings" component={SettingsWindow}>
7780
<IndexRedirect to="/settings/recipes" />
7881
<Route path="/settings/recipes" component={RecipesScreen} />

src/components/layout/AppLayout.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ class AppLayout extends Component {
8383
areRequiredRequestsLoading: PropTypes.bool.isRequired,
8484
darkMode: PropTypes.bool.isRequired,
8585
isDelayAppScreenVisible: PropTypes.bool.isRequired,
86-
isAnnouncementVisible: PropTypes.bool.isRequired,
8786
};
8887

8988
static defaultProps = {
@@ -117,7 +116,6 @@ class AppLayout extends Component {
117116
areRequiredRequestsLoading,
118117
darkMode,
119118
isDelayAppScreenVisible,
120-
isAnnouncementVisible,
121119
} = this.props;
122120

123121
const { intl } = this.context;
@@ -197,12 +195,11 @@ class AppLayout extends Component {
197195
{isDelayAppScreenVisible && (<DelayApp />)}
198196
<BasicAuth />
199197
<ShareFranz />
200-
{isAnnouncementVisible && (<AnnouncementScreen />)}
201198
{services}
199+
{children}
202200
</div>
203201
</div>
204202
</div>
205-
{children}
206203
</div>
207204
</ErrorBoundary>
208205
);

src/containers/layout/AppLayoutContainer.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e
151151
areRequiredRequestsLoading={requests.areRequiredRequestsLoading}
152152
darkMode={settings.all.app.darkMode}
153153
isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible}
154-
isAnnouncementVisible={announcementsStore.isAnnouncementVisible}
155154
>
156155
{React.Children.count(children) > 0 ? children : null}
157156
</AppLayout>

src/features/announcements/components/AnnouncementScreen.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ class AnnouncementScreen extends Component {
268268
<div className={classes.changelog}>
269269
<h1 className={classes.headline}>
270270
{intl.formatMessage(messages.headline, {
271-
version: announcementsStore.currentVersion,
271+
version: announcementsStore.targetVersion,
272272
})}
273273
</h1>
274274
<div

src/features/announcements/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ export const GA_CATEGORY_ANNOUNCEMENTS = 'Announcements';
77

88
export const announcementsStore = new AnnouncementsStore();
99

10+
export const ANNOUNCEMENTS_ROUTES = {
11+
TARGET: '/announcements/:id',
12+
};
13+
1014
export default function initAnnouncements(stores, actions) {
1115
// const { features } = stores;
1216

src/features/announcements/store.js

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import semver from 'semver';
88
import localStorage from 'mobx-localstorage';
99

1010
import { FeatureStore } from '../utils/FeatureStore';
11-
import { GA_CATEGORY_ANNOUNCEMENTS } from '.';
11+
import { ANNOUNCEMENTS_ROUTES, GA_CATEGORY_ANNOUNCEMENTS } from '.';
1212
import { getAnnouncementRequest, getChangelogRequest, getCurrentVersionRequest } from './api';
1313
import { announcementActions } from './actions';
1414
import { createActionBindings } from '../utils/ActionBinding';
1515
import { createReactions } from '../../stores/lib/Reaction';
1616
import { gaEvent } from '../../lib/analytics';
17+
import { matchRoute } from '../../helpers/routing-helpers';
1718

1819
const LOCAL_STORAGE_KEY = 'announcements';
1920

@@ -22,8 +23,6 @@ const debug = require('debug')('Franz:feature:announcements:store');
2223
export class AnnouncementsStore extends FeatureStore {
2324
@observable targetVersion = null;
2425

25-
@observable isAnnouncementVisible = false;
26-
2726
@observable isFeatureActive = false;
2827

2928
@computed get changelog() {
@@ -37,6 +36,7 @@ export class AnnouncementsStore extends FeatureStore {
3736
@computed get areNewsAvailable() {
3837
const isChangelogAvailable = getChangelogRequest.wasExecuted && !!this.changelog;
3938
const isAnnouncementAvailable = getAnnouncementRequest.wasExecuted && !!this.announcement;
39+
console.log(isChangelogAvailable, isAnnouncementAvailable);
4040
return isChangelogAvailable || isAnnouncementAvailable;
4141
}
4242

@@ -67,8 +67,9 @@ export class AnnouncementsStore extends FeatureStore {
6767
]));
6868

6969
this._reactions = createReactions([
70-
this._fetchAnnouncements,
70+
this._showAnnouncementOnRouteMatch,
7171
this._showAnnouncementToUsersWhoUpdatedApp,
72+
this._fetchAnnouncements,
7273
]);
7374
this._registerReactions(this._reactions);
7475
this.isFeatureActive = true;
@@ -78,7 +79,6 @@ export class AnnouncementsStore extends FeatureStore {
7879
super.stop();
7980
debug('AnnouncementsStore::stop');
8081
this.isFeatureActive = false;
81-
this.isAnnouncementVisible = false;
8282
}
8383

8484
// ======= HELPERS ======= //
@@ -93,33 +93,23 @@ export class AnnouncementsStore extends FeatureStore {
9393
// ======= ACTIONS ======= //
9494

9595
@action _showAnnouncement = ({ targetVersion } = {}) => {
96-
if (!this.areNewsAvailable) return;
96+
const { router } = this.stores;
9797
this.targetVersion = targetVersion || this.currentVersion;
98-
this.isAnnouncementVisible = true;
99-
this.actions.service.blurActive();
10098
this._updateSettings({
10199
lastSeenAnnouncementVersion: this.currentVersion,
102100
});
103-
const dispose = reaction(
104-
() => this.stores.services.active,
105-
() => {
106-
this._hideAnnouncement();
107-
dispose();
108-
},
109-
);
110-
101+
const targetRoute = `/announcements/${this.targetVersion}`;
102+
if (router.location.pathname !== targetRoute) {
103+
this.stores.router.push(targetRoute);
104+
}
111105
gaEvent(GA_CATEGORY_ANNOUNCEMENTS, 'show');
112106
};
113107

114-
@action _hideAnnouncement() {
115-
this.isAnnouncementVisible = false;
116-
}
117-
118108
// ======= REACTIONS ========
119109

120110
_showAnnouncementToUsersWhoUpdatedApp = () => {
121111
const { announcement, isNewUser } = this;
122-
// Check if there is an announcement and on't show announcements to new users
112+
// Check if there is an announcement and don't show announcements to new users
123113
if (!announcement || isNewUser) return;
124114

125115
// Check if the user has already used current version (= has seen the announcement)
@@ -140,5 +130,14 @@ export class AnnouncementsStore extends FeatureStore {
140130
} else {
141131
getAnnouncementRequest.reset();
142132
}
133+
};
134+
135+
_showAnnouncementOnRouteMatch = () => {
136+
const { router } = this.stores;
137+
const match = matchRoute(ANNOUNCEMENTS_ROUTES.TARGET, router.location.pathname);
138+
if (match) {
139+
const targetVersion = match.id;
140+
this._showAnnouncement({ targetVersion });
141+
}
143142
}
144143
}

src/features/workspaces/store.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,15 @@ export default class WorkspacesStore extends FeatureStore {
255255
_setActiveServiceOnWorkspaceSwitchReaction = () => {
256256
if (!this.isFeatureActive) return;
257257
if (this.activeWorkspace) {
258-
const services = this.stores.services.allDisplayed;
259-
const activeService = services.find(s => s.isActive);
258+
const activeService = this.stores.services.active;
260259
const workspaceServices = this.getWorkspaceServices(this.activeWorkspace);
261260
if (workspaceServices.length <= 0) return;
262261
const isActiveServiceInWorkspace = workspaceServices.includes(activeService);
263262
if (!isActiveServiceInWorkspace) {
264-
this.actions.service.setActive({ serviceId: workspaceServices[0].id });
263+
this.actions.service.setActive({
264+
serviceId: workspaceServices[0].id,
265+
keepActiveRoute: true,
266+
});
265267
}
266268
}
267269
};

src/stores/ServicesStore.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ export default class ServicesStore extends Store {
291291
gaEvent('Service', 'clear cache');
292292
}
293293

294-
@action _setActive({ serviceId }) {
294+
@action _setActive({ serviceId, keepActiveRoute }) {
295+
if (!keepActiveRoute) this.stores.router.push('/');
295296
const service = this.one(serviceId);
296297

297298
this.all.forEach((s, index) => {

0 commit comments

Comments
 (0)