Restart after changing settings

Summary:
Gets flipper to restart when settings are updated.

In theory most settings should not need this, but the current only one does (android home) because the path is set at startup only, and this modifies the input to it.
It would be a bit awkward to modify the path more than once, but doable.

Reviewed By: passy

Differential Revision: D17737582

fbshipit-source-id: d4669dcc7acc95469f15783fc6a5ba6794750234
This commit is contained in:
John Knox
2019-10-07 08:49:05 -07:00
committed by Facebook Github Bot
parent 729e74f2fc
commit b50aef8f15
3 changed files with 30 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import {updateSettings, Action} from '../reducers/settings';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {State as Store} from '../reducers'; import {State as Store} from '../reducers';
import {Settings} from '../reducers/settings'; import {Settings} from '../reducers/settings';
import {flush} from '../utils/persistor';
import {promises as fs} from 'fs'; import {promises as fs} from 'fs';
import {remote} from 'electron'; import {remote} from 'electron';
import path from 'path'; import path from 'path';
@@ -129,6 +130,10 @@ class SignInSheet extends Component<Props, State> {
applyChanges = async () => { applyChanges = async () => {
this.props.updateSettings(this.state.updatedSettings); this.props.updateSettings(this.state.updatedSettings);
this.props.onHide(); this.props.onHide();
flush().then(() => {
remote.app.relaunch();
remote.app.exit();
});
}; };
render() { render() {
@@ -154,7 +159,7 @@ class SignInSheet extends Component<Props, State> {
Cancel Cancel
</Button> </Button>
<Button type="primary" compact padded onClick={this.applyChanges}> <Button type="primary" compact padded onClick={this.applyChanges}>
Apply Apply and Restart
</Button> </Button>
</FlexRow> </FlexRow>
</Container> </Container>

View File

@@ -26,6 +26,7 @@ import initCrashReporter from './utils/electronCrashReporter';
import fbConfig from './fb-stubs/config'; import fbConfig from './fb-stubs/config';
import {isFBEmployee} from './utils/fbEmployee'; import {isFBEmployee} from './utils/fbEmployee';
import WarningEmployee from './chrome/WarningEmployee'; import WarningEmployee from './chrome/WarningEmployee';
import {setPersistor} from './utils/persistor';
import React from 'react'; import React from 'react';
import path from 'path'; import path from 'path';
@@ -100,7 +101,7 @@ function init() {
} }
// rehydrate app state before exposing init // rehydrate app state before exposing init
persistStore(store, undefined, () => { const persistor = persistStore(store, undefined, () => {
// Make sure process state is set before dispatchers run // Make sure process state is set before dispatchers run
setProcessState(store); setProcessState(store);
dispatcher(store, logger); dispatcher(store, logger);
@@ -108,3 +109,5 @@ persistStore(store, undefined, () => {
window.Flipper.init = init; window.Flipper.init = init;
window.dispatchEvent(new Event('flipper-store-ready')); window.dispatchEvent(new Event('flipper-store-ready'));
}); });
setPersistor(persistor);

20
src/utils/persistor.tsx Normal file
View File

@@ -0,0 +1,20 @@
/**
* Copyright 2018-present Facebook.
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* @format
*/
import {Persistor} from 'redux-persist';
let _persistor: Persistor | null = null;
export function setPersistor(persistor: Persistor) {
_persistor = persistor;
}
export function flush(): Promise<void> {
return _persistor
? _persistor.flush()
: Promise.reject(new Error('Persistor not set.'));
}