diff --git a/desktop/src/App.tsx b/desktop/src/App.tsx index 2da03f74b..972210453 100644 --- a/desktop/src/App.tsx +++ b/desktop/src/App.tsx @@ -37,6 +37,8 @@ import { ACTIVE_SHEET_PLUGIN_SHEET, ACTIVE_SHEET_JS_EMULATOR_LAUNCHER, ACTIVE_SHEET_CHANGELOG, + setActiveSheet, + ACTIVE_SHEET_CHANGELOG_RECENT_ONLY, } from './reducers/application'; import {Logger} from './fb-interfaces/Logger'; import BugReporter from './fb-stubs/BugReporter'; @@ -46,7 +48,7 @@ import PluginManager from './chrome/plugin-manager/PluginManager'; import StatusBar from './chrome/StatusBar'; import SettingsSheet from './chrome/SettingsSheet'; import DoctorSheet from './chrome/DoctorSheet'; -import ChangelogSheet from './chrome/ChangelogSheet'; +import ChangelogSheet, {hasNewChangesToShow} from './chrome/ChangelogSheet'; const version = remote.app.getVersion(); @@ -63,7 +65,11 @@ type StateFromProps = { staticView: StaticView; }; -type Props = StateFromProps & OwnProps; +type DispatchProps = { + setActiveSheet: typeof setActiveSheet; +}; + +type Props = StateFromProps & OwnProps & DispatchProps; export class App extends React.Component { componentDidMount() { @@ -79,6 +85,10 @@ export class App extends React.Component { }); ipcRenderer.send('getLaunchTime'); ipcRenderer.send('componentDidMount'); + + if (hasNewChangesToShow(window.localStorage)) { + this.props.setActiveSheet(ACTIVE_SHEET_CHANGELOG_RECENT_ONLY); + } } getSheet = (onHide: () => any) => { @@ -101,6 +111,8 @@ export class App extends React.Component { return ; case ACTIVE_SHEET_CHANGELOG: return ; + case ACTIVE_SHEET_CHANGELOG_RECENT_ONLY: + return ; case ACTIVE_SHEET_SELECT_PLUGINS_TO_EXPORT: return ; case ACTIVE_SHEET_SHARE_DATA: @@ -163,7 +175,7 @@ export class App extends React.Component { } } -export default connect( +export default connect( ({ application: {leftSidebarVisible, activeSheet, share}, connections: {errors, staticView}, @@ -174,4 +186,7 @@ export default connect( errors, staticView, }), + { + setActiveSheet, + }, )(App); diff --git a/desktop/src/chrome/ChangelogSheet.tsx b/desktop/src/chrome/ChangelogSheet.tsx index 2d1a7ed1e..32032041f 100644 --- a/desktop/src/chrome/ChangelogSheet.tsx +++ b/desktop/src/chrome/ChangelogSheet.tsx @@ -14,10 +14,21 @@ import path from 'path'; import {reportUsage} from '../utils/metrics'; import {getStaticPath} from '../utils/pathUtils'; -const changelog: string = readFileSync( - path.join(getStaticPath(), 'CHANGELOG.md'), - 'utf8', -); +const changelogKey = 'FlipperChangelogStatus'; + +type ChangelogStatus = { + lastHeader: string; +}; + +let getChangelogFromDisk = (): string => { + const changelogFromDisk: string = readFileSync( + path.join(getStaticPath(), 'CHANGELOG.md'), + 'utf8', + ).trim(); + + getChangelogFromDisk = () => changelogFromDisk; + return changelogFromDisk; +}; const Container = styled(FlexColumn)({ padding: 20, @@ -43,15 +54,24 @@ const changelogSectionStyle = { type Props = { onHide: () => void; + recent?: boolean; }; export default class ChangelogSheet extends Component { componentDidMount() { - reportUsage('changelog:opened'); + if (!this.props.recent) { + // opened through the menu + reportUsage('changelog:opened'); + } } componentWillUnmount(): void { - reportUsage('changelog:closed'); + if (this.props.recent) { + markChangelogRead(window.localStorage, getChangelogFromDisk()); + } + if (!this.props.recent) { + reportUsage('changelog:closed'); + } } render() { @@ -59,7 +79,17 @@ export default class ChangelogSheet extends Component { Changelog - +