Skip to content
Snippets Groups Projects
Commit 56f48cd8 authored by piotr.kupczyk@id.ethz.ch's avatar piotr.kupczyk@id.ethz.ch
Browse files

SSDM-13273 : Admin UI - remember the sizes of side panels between reloads

parent 7908d277
No related branches found
No related tags found
1 merge request!40SSDM-13578 : 2PT : Database and V3 Implementation - include the new AFS "free"...
...@@ -8,6 +8,7 @@ import routes from '@src/js/common/consts/routes.js' ...@@ -8,6 +8,7 @@ import routes from '@src/js/common/consts/routes.js'
import users from '@src/js/common/consts/users.js' import users from '@src/js/common/consts/users.js'
import cookie from '@src/js/common/cookie.js' import cookie from '@src/js/common/cookie.js'
import url from '@src/js/common/url.js' import url from '@src/js/common/url.js'
import ids from '@src/js/common/consts/ids.js'
const AppContext = React.createContext() const AppContext = React.createContext()
...@@ -36,6 +37,7 @@ export class AppController { ...@@ -36,6 +37,7 @@ export class AppController {
search: null, search: null,
pages: [], pages: [],
error: null, error: null,
settings: {},
lastObjectModifications: {} lastObjectModifications: {}
} }
} }
...@@ -57,23 +59,24 @@ export class AppController { ...@@ -57,23 +59,24 @@ export class AppController {
const sessionInformation = await openbis.getSessionInformation() const sessionInformation = await openbis.getSessionInformation()
if (sessionInformation) { if (sessionInformation) {
const [settings, serverInformation] = await Promise.all([
this._loadSettings(),
openbis.getServerInformation()
])
await this.context.setState({ await this.context.setState({
session: { session: {
sessionToken: sessionToken, sessionToken: sessionToken,
userName: sessionInformation.userName userName: sessionInformation.userName
} },
settings,
serverInformation
}) })
const routeObject = routes.parse(this.getRoute()) const routeObject = routes.parse(this.getRoute())
await this.routeChanged(routeObject.path) await this.routeChanged(routeObject.path)
} else { } else {
openbis.useSession(null) openbis.useSession(null)
} }
const serverInformation = await openbis.getServerInformation()
await this.context.setState({
serverInformation
})
} catch (e) { } catch (e) {
openbis.useSession(null) openbis.useSession(null)
} }
...@@ -95,17 +98,19 @@ export class AppController { ...@@ -95,17 +98,19 @@ export class AppController {
const sessionToken = await openbis.login(username, password) const sessionToken = await openbis.login(username, password)
if (sessionToken !== null) { if (sessionToken !== null) {
this.context.setState({
session: {
sessionToken: sessionToken,
userName: username
}
})
cookie.create(cookie.OPENBIS_COOKIE, sessionToken, 7) cookie.create(cookie.OPENBIS_COOKIE, sessionToken, 7)
const serverInformation = await openbis.getServerInformation() const [settings, serverInformation] = await Promise.all([
this._loadSettings(),
openbis.getServerInformation()
])
await this.context.setState({ await this.context.setState({
session: {
sessionToken: sessionToken,
userName: username
},
settings,
serverInformation serverInformation
}) })
...@@ -468,6 +473,58 @@ export class AppController { ...@@ -468,6 +473,58 @@ export class AppController {
} }
} }
async getSetting(settingId) {
const { settings } = this.context.getState()
return settings[settingId]
}
async setSetting(settingId, settingObject) {
const { settings } = this.context.getState()
const newSettings = {
...settings,
[settingId]: settingObject
}
this.context.setState({ settings: newSettings })
await this._saveSettings(settingId, settingObject)
}
async _loadSettings() {
const id = new openbis.Me()
const fo = new openbis.PersonFetchOptions()
fo.withWebAppSettings(ids.WEB_APP_ID).withAllSettings()
const map = await openbis.getPersons([id], fo)
const person = map[id]
const webAppSettings = person.webAppSettings[ids.WEB_APP_ID]
if (webAppSettings && webAppSettings.settings) {
const map = {}
Object.values(webAppSettings.settings).forEach(setting => {
if (setting.value !== null && setting.value !== undefined) {
map[setting.name] = JSON.parse(setting.value)
}
})
return map
} else {
return {}
}
}
async _saveSettings(settingId, settingObject) {
const settings = new openbis.WebAppSettingCreation()
settings.setName(settingId)
settings.setValue(JSON.stringify(settingObject))
const update = new openbis.PersonUpdate()
update.setUserId(new openbis.Me())
update.getWebAppSettings(ids.WEB_APP_ID).add(settings)
await openbis.updatePersons([update])
}
withState(additionalPropertiesFn) { withState(additionalPropertiesFn) {
const WithContext = Component => { const WithContext = Component => {
const WithConsumer = props => { const WithConsumer = props => {
......
...@@ -2,7 +2,7 @@ import React from 'react' ...@@ -2,7 +2,7 @@ import React from 'react'
import autoBind from 'auto-bind' import autoBind from 'auto-bind'
import ResizableWithOpenbis from '@src/js/components/common/resizable/ResizableWithOpenbis.jsx' import ResizableWithOpenbis from '@src/js/components/common/resizable/ResizableWithOpenbis.jsx'
import Browser from '@src/js/components/common/browser/Browser.jsx' import Browser from '@src/js/components/common/browser/Browser.jsx'
import openbis from '@src/js/services/openbis.js' import AppController from '@src/js/components/AppController.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
class BrowserWithOpenbis extends React.PureComponent { class BrowserWithOpenbis extends React.PureComponent {
...@@ -37,11 +37,11 @@ class BrowserWithOpenbis extends React.PureComponent { ...@@ -37,11 +37,11 @@ class BrowserWithOpenbis extends React.PureComponent {
} }
async loadSettings() { async loadSettings() {
return await openbis.loadWebAppSetting(this.props.id) return await AppController.getInstance().getSetting(this.props.id)
} }
async onSettingsChange(settings) { async onSettingsChange(settings) {
await openbis.saveWebAppSetting(this.props.id, settings) await AppController.getInstance().setSetting(this.props.id, settings)
} }
} }
......
...@@ -44,7 +44,7 @@ export default class GridWithOpenbis extends React.PureComponent { ...@@ -44,7 +44,7 @@ export default class GridWithOpenbis extends React.PureComponent {
return null return null
} }
return await openbis.loadWebAppSetting(settingsId) return await AppController.getInstance().getSetting(settingsId)
} }
async onSettingsChange(settings) { async onSettingsChange(settings) {
...@@ -54,7 +54,7 @@ export default class GridWithOpenbis extends React.PureComponent { ...@@ -54,7 +54,7 @@ export default class GridWithOpenbis extends React.PureComponent {
return return
} }
await openbis.saveWebAppSetting(settingsId, settings) await AppController.getInstance().setSetting(settingsId, settings)
} }
async exportXLS({ async exportXLS({
......
import _ from 'lodash' import _ from 'lodash'
import React from 'react' import React from 'react'
import { Resizable } from 're-resizable' import { Resizable } from 're-resizable'
import openbis from '@src/js/services/openbis.js' import AppController from '@src/js/components/AppController.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
class ResizableClass extends React.PureComponent { class ResizableClass extends React.PureComponent {
...@@ -19,7 +19,7 @@ class ResizableClass extends React.PureComponent { ...@@ -19,7 +19,7 @@ class ResizableClass extends React.PureComponent {
const { id } = this.props const { id } = this.props
if (id) { if (id) {
const setting = await openbis.loadWebAppSetting(id) const setting = await AppController.getInstance().getSetting(id)
if (setting && _.isNumber(setting.width)) { if (setting && _.isNumber(setting.width)) {
this.setState({ this.setState({
...@@ -39,7 +39,7 @@ class ResizableClass extends React.PureComponent { ...@@ -39,7 +39,7 @@ class ResizableClass extends React.PureComponent {
const { id } = this.props const { id } = this.props
if (id) { if (id) {
openbis.saveWebAppSetting(id, { width }) AppController.getInstance().setSetting(id, { width })
} }
} }
......
import autoBind from 'auto-bind' import autoBind from 'auto-bind'
import dto from '@src/js/services/openbis/dto.js' import dto from '@src/js/services/openbis/dto.js'
import ids from '@src/js/common/consts/ids.js'
class Facade { class Facade {
constructor() { constructor() {
...@@ -284,40 +283,6 @@ class Facade { ...@@ -284,40 +283,6 @@ class Facade {
return this.promise(this.v3.executeOperations(operations, options)) return this.promise(this.v3.executeOperations(operations, options))
} }
async loadWebAppSetting(settingId) {
const id = new dto.Me()
const fo = new dto.PersonFetchOptions()
fo.withWebAppSettings(ids.WEB_APP_ID).withAllSettings()
return this.getPersons([id], fo).then(map => {
const person = map[id]
const webAppSettings = person.webAppSettings[ids.WEB_APP_ID]
if (webAppSettings && webAppSettings.settings) {
const setting = webAppSettings.settings[settingId]
if (setting) {
const settingObject = JSON.parse(setting.value)
if (settingObject) {
return settingObject
} else {
return null
}
}
}
})
}
async saveWebAppSetting(settingId, settingObject) {
const settings = new dto.WebAppSettingCreation()
settings.setName(settingId)
settings.setValue(JSON.stringify(settingObject))
const update = new dto.PersonUpdate()
update.setUserId(new dto.Me())
update.getWebAppSettings(ids.WEB_APP_ID).add(settings)
await this.updatePersons([update])
}
promise(dfd) { promise(dfd) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
dfd.then( dfd.then(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment