Skip to content
This repository was archived by the owner on May 2, 2022. It is now read-only.

Commit 9fc878e

Browse files
authored
Prevent user from moving installing location when installing apps (#243)
1 parent f3cc668 commit 9fc878e

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

src/components/pages/preferences/index.js

+30-13
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@ import StatedMenu from '../../shared/stated-menu';
1818

1919
import connectComponent from '../../../helpers/connect-component';
2020

21+
import { getInstallingAppsAsList } from '../../../state/app-management/utils';
22+
2123
import {
2224
requestOpenInBrowser,
2325
requestResetPreferences,
2426
requestSetPreference,
2527
requestShowRequireRestartDialog,
28+
requestShowMessageBox,
2629
requestOpenInstallLocation,
2730
} from '../../../senders';
2831

@@ -71,7 +74,7 @@ const getInstallLocationString = (installLocation) => {
7174
};
7275

7376
const Preferences = ({
74-
theme, classes, errorMonitoring, installLocation,
77+
theme, classes, errorMonitoring, installLocation, installingAppCount,
7578
}) => (
7679
<div className={classes.root}>
7780
<AppBar position="static" className={classes.appBar} elevation={2}>
@@ -134,18 +137,30 @@ const Preferences = ({
134137
</Typography>
135138
<Paper className={classes.paper}>
136139
<List dense>
137-
<StatedMenu
138-
id="installLocation"
139-
buttonElement={(
140-
<ListItem button>
141-
<ListItemText primary="Installation path" secondary={getInstallLocationString(installLocation)} />
142-
<ChevronRightIcon color="action" />
143-
</ListItem>
144-
)}
145-
>
146-
<MenuItem onClick={() => requestSetPreference('installLocation', 'home')}>~/Applications/WebCatalog Apps (default)</MenuItem>
147-
<MenuItem onClick={() => requestSetPreference('installLocation', 'root')}>/Applications/WebCatalog Apps (requires sudo)</MenuItem>
148-
</StatedMenu>
140+
{installingAppCount > 0 ? (
141+
<ListItem
142+
button
143+
onClick={() => {
144+
requestShowMessageBox('This preference cannot be changed when installing or updating apps.');
145+
}}
146+
>
147+
<ListItemText primary="Installation path" secondary={getInstallLocationString(installLocation)} />
148+
<ChevronRightIcon color="action" />
149+
</ListItem>
150+
) : (
151+
<StatedMenu
152+
id="installLocation"
153+
buttonElement={(
154+
<ListItem button>
155+
<ListItemText primary="Installation path" secondary={getInstallLocationString(installLocation)} />
156+
<ChevronRightIcon color="action" />
157+
</ListItem>
158+
)}
159+
>
160+
<MenuItem onClick={() => requestSetPreference('installLocation', 'home')}>~/Applications/WebCatalog Apps (default)</MenuItem>
161+
<MenuItem onClick={() => requestSetPreference('installLocation', 'root')}>/Applications/WebCatalog Apps (requires sudo)</MenuItem>
162+
</StatedMenu>
163+
)}
149164
<Divider />
150165
<ListItem button onClick={requestOpenInstallLocation}>
151166
<ListItemText primary="Open installation path in Finder" />
@@ -174,12 +189,14 @@ Preferences.propTypes = {
174189
classes: PropTypes.object.isRequired,
175190
errorMonitoring: PropTypes.bool.isRequired,
176191
installLocation: PropTypes.string.isRequired,
192+
installingAppCount: PropTypes.number.isRequired,
177193
};
178194

179195
const mapStateToProps = state => ({
180196
theme: state.preferences.theme,
181197
errorMonitoring: state.preferences.errorMonitoring,
182198
installLocation: state.preferences.installLocation,
199+
installingAppCount: getInstallingAppsAsList(state).length,
183200
});
184201

185202
export default connectComponent(

src/state/app-management/utils.js

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ export const getOutdatedAppsAsList = (state) => {
1919
return Object.values(apps).filter(app => isOutdatedApp(app.id, state));
2020
};
2121

22+
export const getInstallingAppsAsList = (state) => {
23+
const { apps } = state.appManagement;
24+
return Object.values(apps).filter(app => app.status !== 'INSTALLED');
25+
};
26+
2227
export const isNameExisted = (name, state) => {
2328
const { apps } = state.appManagement;
2429
return Boolean(Object.keys(apps).find((id) => {

0 commit comments

Comments
 (0)