From bf676f8597e5539c047f42a5716022681e3419c3 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Mon, 16 Sep 2019 12:46:13 +0200 Subject: Implement #37 --- .../workspaces/components/EditWorkspaceForm.js | 24 ++++++++++++++++++++++ .../workspaces/containers/EditWorkspaceScreen.js | 4 +++- src/features/workspaces/models/Workspace.js | 14 ++++++++++++- src/features/workspaces/store.js | 4 +++- 4 files changed, 43 insertions(+), 3 deletions(-) (limited to 'src/features/workspaces') diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js index 82ea1b564..b3551a7b9 100644 --- a/src/features/workspaces/components/EditWorkspaceForm.js +++ b/src/features/workspaces/components/EditWorkspaceForm.js @@ -13,6 +13,10 @@ import { required } from '../../../helpers/validation-helpers'; import WorkspaceServiceListItem from './WorkspaceServiceListItem'; import Request from '../../../stores/lib/Request'; +import { KEEP_WS_LOADED_USID } from '../../../config'; + +import Toggle from '../../../components/ui/Toggle'; + const messages = defineMessages({ buttonDelete: { id: 'settings.workspace.form.buttonDelete', @@ -30,6 +34,14 @@ const messages = defineMessages({ id: 'settings.workspace.form.yourWorkspaces', defaultMessage: '!!!Your workspaces', }, + keepLoaded: { + id: 'settings.workspace.form.keepLoaded', + defaultMessage: '!!!Keep this workspace loaded*', + }, + keepLoadedInfo: { + id: 'settings.workspace.form.keepLoadedInfo', + defaultMessage: '!!!*This option will be overwritten by the global "Keep all workspaces loaded" option.', + }, servicesInWorkspaceHeadline: { id: 'settings.workspace.form.servicesInWorkspaceHeadline', defaultMessage: '!!!Services in this Workspace', @@ -51,6 +63,9 @@ const styles = () => ({ serviceList: { height: 'auto', }, + keepLoadedInfo: { + marginBottom: '2rem !important', + }, }); @injectSheet(styles) @observer @@ -88,6 +103,11 @@ class EditWorkspaceForm extends Component { value: workspace.name, validators: [required], }, + keepLoaded: { + label: intl.formatMessage(messages.keepLoaded), + value: workspace.services.includes(KEEP_WS_LOADED_USID), + default: false, + }, services: { value: workspace.services.slice(), }, @@ -151,6 +171,10 @@ class EditWorkspaceForm extends Component {
+ +

+ { intl.formatMessage(messages.keepLoadedInfo) } +

{intl.formatMessage(messages.servicesInWorkspaceHeadline)}

diff --git a/src/features/workspaces/containers/EditWorkspaceScreen.js b/src/features/workspaces/containers/EditWorkspaceScreen.js index 248b40131..7eaabc1ea 100644 --- a/src/features/workspaces/containers/EditWorkspaceScreen.js +++ b/src/features/workspaces/containers/EditWorkspaceScreen.js @@ -33,7 +33,9 @@ class EditWorkspaceScreen extends Component { const { workspaceBeingEdited } = workspaceStore; const { actions } = this.props; const workspace = new Workspace( - Object.assign({}, workspaceBeingEdited, values), + Object.assign({ + saving: true, + }, workspaceBeingEdited, values), ); actions.workspaces.update({ workspace }); }; diff --git a/src/features/workspaces/models/Workspace.js b/src/features/workspaces/models/Workspace.js index 6c73d7095..77c4e05f4 100644 --- a/src/features/workspaces/models/Workspace.js +++ b/src/features/workspaces/models/Workspace.js @@ -1,5 +1,7 @@ import { observable } from 'mobx'; +import { KEEP_WS_LOADED_USID } from '../../../config'; + export default class Workspace { id = null; @@ -19,7 +21,17 @@ export default class Workspace { this.id = data.id; this.name = data.name; this.order = data.order; - this.services.replace(data.services); + + let services = data.services; + if (data.saving && data.keepLoaded) { + // Keep workspaces loaded + services.push(KEEP_WS_LOADED_USID); + } else if (data.saving && data.services.includes(KEEP_WS_LOADED_USID)) { + // Don't keep loaded + services = services.filter(e => e !== KEEP_WS_LOADED_USID); + } + this.services.replace(services); + this.userId = data.userId; } } diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js index da1582a77..949f8a792 100644 --- a/src/features/workspaces/store.js +++ b/src/features/workspaces/store.js @@ -17,6 +17,8 @@ import { WORKSPACES_ROUTES } from './index'; import { createReactions } from '../../stores/lib/Reaction'; import { createActionBindings } from '../utils/ActionBinding'; +import { KEEP_WS_LOADED_USID } from '../../config'; + const debug = require('debug')('Ferdi:feature:workspaces:store'); export default class WorkspacesStore extends FeatureStore { @@ -327,7 +329,7 @@ export default class WorkspacesStore extends FeatureStore { // Loop through all workspaces and remove invalid service ids (locally) this.workspaces.forEach((workspace) => { workspace.services.forEach((serviceId) => { - if (servicesHaveBeenLoaded && !services.one(serviceId)) { + if (servicesHaveBeenLoaded && !services.one(serviceId) && serviceId !== KEEP_WS_LOADED_USID) { workspace.services.remove(serviceId); } }); -- cgit v1.2.3-54-g00ecf