diff --git a/openbis_ng_ui/package.json b/openbis_ng_ui/package.json index c98328cf991b7925534c8e41435a9441d768395d..1ab341c0622c77fe2bbe0ae8072507ef07674432 100644 --- a/openbis_ng_ui/package.json +++ b/openbis_ng_ui/package.json @@ -24,10 +24,7 @@ "react": "^16.13.1", "react-beautiful-dnd": "^13.0.0", "react-dom": "^16.13.1", - "react-redux": "^7.2.1", "react-simple-code-editor": "^0.11.0", - "redux": "^4.0.5", - "redux-saga": "^1.1.3", "reselect": "^4.0.0", "typeface-roboto": "^0.0.75" }, diff --git a/openbis_ng_ui/src/js/store/actions/actions.js b/openbis_ng_ui/src/js/store/actions/actions.js deleted file mode 100644 index f8bfa7de940b1e0782674f5c751a45b92c70c1fa..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/actions/actions.js +++ /dev/null @@ -1,9 +0,0 @@ -import api from '@src/js/store/actions/api.js' -import app from '@src/js/store/actions/app.js' -import page from '@src/js/store/actions/page.js' - -export default { - ...api, - ...app, - ...page -} diff --git a/openbis_ng_ui/src/js/store/actions/api.js b/openbis_ng_ui/src/js/store/actions/api.js deleted file mode 100644 index 41e41e522b7534baa7ce4f128d2942347c749e00..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/actions/api.js +++ /dev/null @@ -1,37 +0,0 @@ -const API_REQUEST = 'API_REQUEST' -const API_SUCCESS = 'API_SUCCESS' -const API_ERROR = 'API_ERROR' - -const apiRequest = ({ method, params, meta }) => ({ - type: API_REQUEST, - payload: { - method, - params - }, - meta -}) - -const apiSuccess = ({ result, meta }) => ({ - type: API_SUCCESS, - payload: { - result - }, - meta -}) - -const apiError = ({ error, meta }) => ({ - type: API_ERROR, - payload: { - error - }, - meta -}) - -export default { - API_REQUEST, - API_SUCCESS, - API_ERROR, - apiRequest, - apiSuccess, - apiError -} diff --git a/openbis_ng_ui/src/js/store/actions/app.js b/openbis_ng_ui/src/js/store/actions/app.js deleted file mode 100644 index aacb241ce5aac25d7f1c9f0576a1e2414aee55f9..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/actions/app.js +++ /dev/null @@ -1,158 +0,0 @@ -const INIT = 'INIT' -const CLEAR = 'CLEAR' -const LOGIN = 'LOGIN' -const LOGOUT = 'LOGOUT' -const SEARCH = 'SEARCH' -const CURRENT_PAGE_CHANGE = 'CURRENT_PAGE_CHANGE' -const SEARCH_CHANGE = 'SEARCH_CHANGE' -const ERROR_CHANGE = 'ERROR_CHANGE' -const ROUTE_CHANGE = 'ROUTE_CHANGE' -const ROUTE_REPLACE = 'ROUTE_REPLACE' -const SET_INITIALIZED = 'SET_INITIALIZED' -const SET_LOADING = 'SET_LOADING' -const SET_SEARCH = 'SET_SEARCH' -const SET_SESSION = 'SET_SESSION' -const SET_ERROR = 'SET_ERROR' -const SET_ROUTE = 'SET_ROUTE' - -const init = () => ({ - type: INIT -}) - -const clear = () => ({ - type: CLEAR -}) - -const login = (username, password) => ({ - type: LOGIN, - payload: { - username, - password - } -}) - -const logout = () => ({ - type: LOGOUT -}) - -const search = (page, text) => ({ - type: SEARCH, - payload: { - page, - text - } -}) - -const currentPageChange = currentPage => ({ - type: CURRENT_PAGE_CHANGE, - payload: { - currentPage - } -}) - -const searchChange = search => ({ - type: SEARCH_CHANGE, - payload: { - search - } -}) - -const errorChange = error => ({ - type: ERROR_CHANGE, - payload: { - error - } -}) - -const routeChange = (route, state) => ({ - type: ROUTE_CHANGE, - payload: { - route, - state - } -}) - -const routeReplace = (route, state) => ({ - type: ROUTE_REPLACE, - payload: { - route, - state - } -}) - -const setInitialized = initialized => ({ - type: SET_INITIALIZED, - payload: { - initialized - } -}) - -const setLoading = loading => ({ - type: SET_LOADING, - payload: { - loading - } -}) - -const setSearch = search => ({ - type: SET_SEARCH, - payload: { - search - } -}) - -const setSession = session => ({ - type: SET_SESSION, - payload: { - session - } -}) - -const setError = error => ({ - type: SET_ERROR, - payload: { - error - } -}) - -const setRoute = route => ({ - type: SET_ROUTE, - payload: { - route - } -}) - -export default { - INIT, - CLEAR, - LOGIN, - LOGOUT, - SEARCH, - CURRENT_PAGE_CHANGE, - SEARCH_CHANGE, - ERROR_CHANGE, - ROUTE_CHANGE, - ROUTE_REPLACE, - SET_INITIALIZED, - SET_LOADING, - SET_SEARCH, - SET_SESSION, - SET_ERROR, - SET_ROUTE, - init, - clear, - login, - logout, - search, - currentPageChange, - searchChange, - errorChange, - routeChange, - routeReplace, - setInitialized, - setLoading, - setSearch, - setSession, - setError, - setRoute -} diff --git a/openbis_ng_ui/src/js/store/actions/page.js b/openbis_ng_ui/src/js/store/actions/page.js deleted file mode 100644 index ae04252212cbadfdb7a3250afd2c14d1505bf454..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/actions/page.js +++ /dev/null @@ -1,134 +0,0 @@ -const OBJECT_NEW = 'OBJECT_NEW' -const OBJECT_CREATE = 'OBJECT_CREATE' -const OBJECT_OPEN = 'OBJECT_OPEN' -const OBJECT_UPDATE = 'OBJECT_UPDATE' -const OBJECT_DELETE = 'OBJECT_DELETE' -const OBJECT_CHANGE = 'OBJECT_CHANGE' -const OBJECT_CLOSE = 'OBJECT_CLOSE' -const ADD_OPEN_TAB = 'ADD_OPEN_TAB' -const REMOVE_OPEN_TAB = 'REMOVE_OPEN_TAB' -const REPLACE_OPEN_TAB = 'REPLACE_OPEN_TAB' -const SET_CURRENT_ROUTE = 'SET_CURRENT_ROUTE' - -const objectNew = (page, type) => ({ - type: OBJECT_NEW, - payload: { - page, - type - } -}) - -const objectCreate = (page, oldType, oldId, newType, newId) => ({ - type: OBJECT_CREATE, - payload: { - page, - oldType, - oldId, - newType, - newId - } -}) - -const objectOpen = (page, type, id) => ({ - type: OBJECT_OPEN, - payload: { - page, - type, - id - } -}) - -const objectUpdate = (page, type, id) => ({ - type: OBJECT_UPDATE, - payload: { - page, - type, - id - } -}) - -const objectDelete = (page, type, id) => ({ - type: OBJECT_DELETE, - payload: { - page, - type, - id - } -}) - -const objectChange = (page, type, id, changed) => ({ - type: OBJECT_CHANGE, - payload: { - page, - type, - id, - changed - } -}) - -const objectClose = (page, type, id) => ({ - type: OBJECT_CLOSE, - payload: { - page, - type, - id - } -}) - -const addOpenTab = (page, tab) => ({ - type: ADD_OPEN_TAB, - payload: { - page, - tab - } -}) - -const removeOpenTab = (page, id) => ({ - type: REMOVE_OPEN_TAB, - payload: { - page, - id - } -}) - -const replaceOpenTab = (page, id, tab) => ({ - type: REPLACE_OPEN_TAB, - payload: { - page, - id, - tab - } -}) - -const setCurrentRoute = (page, currentRoute) => ({ - type: SET_CURRENT_ROUTE, - payload: { - page, - currentRoute - } -}) - -export default { - OBJECT_NEW, - OBJECT_CREATE, - OBJECT_OPEN, - OBJECT_UPDATE, - OBJECT_DELETE, - OBJECT_CHANGE, - OBJECT_CLOSE, - ADD_OPEN_TAB, - REMOVE_OPEN_TAB, - REPLACE_OPEN_TAB, - SET_CURRENT_ROUTE, - objectNew, - objectCreate, - objectOpen, - objectUpdate, - objectDelete, - objectChange, - objectClose, - addOpenTab, - removeOpenTab, - replaceOpenTab, - setCurrentRoute -} diff --git a/openbis_ng_ui/src/js/store/history.js b/openbis_ng_ui/src/js/store/history.js deleted file mode 100644 index 49da3566429b308216bb987d801eef1400a9252e..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/history.js +++ /dev/null @@ -1,33 +0,0 @@ -import { createBrowserHistory } from 'history' -import AppController from '@src/js/components/AppController.js' -import routes from '@src/js/common/consts/routes.js' -import url from '@src/js/common/url.js' - -let history = createBrowserHistory({ - basename: url.getApplicationPath() + '#' -}) - -history.configure = store => { - history.listen(location => { - let route = routes.parse(location.pathname) - - if (route.path !== store.getState().route) { - AppController.routeChange(route.path, location.state) - } - }) - - let currentRoute = store.getState().route - - store.subscribe(() => { - let newRoute = store.getState().route - - if (newRoute && newRoute !== currentRoute) { - currentRoute = newRoute - if (currentRoute && currentRoute !== history.location.pathname) { - history.push(currentRoute) - } - } - }) -} - -export default history diff --git a/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js b/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js deleted file mode 100644 index 0cc07bcf7c998384508ded289bfe9559d7ab8303..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js +++ /dev/null @@ -1,29 +0,0 @@ -import actions from '@src/js/store/actions/actions.js' - -const MIN_LOADING_TIME = 500 -let startLoadingTimestamp = null - -export default () => next => action => { - if (action.type === actions.SET_LOADING) { - if (action.payload.loading) { - if (startLoadingTimestamp === null) { - startLoadingTimestamp = new Date().getTime() - } - next(action) - } else { - let timeToWait = - startLoadingTimestamp + MIN_LOADING_TIME - new Date().getTime() - if (timeToWait > 0) { - setTimeout(() => { - startLoadingTimestamp = null - next(action) - }, timeToWait) - } else { - startLoadingTimestamp = null - next(action) - } - } - } else { - next(action) - } -} diff --git a/openbis_ng_ui/src/js/store/middleware/middlewares.js b/openbis_ng_ui/src/js/store/middleware/middlewares.js deleted file mode 100644 index 88906e6be9496161004ad4658514615209001f91..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/middleware/middlewares.js +++ /dev/null @@ -1,3 +0,0 @@ -import stateChangeCheck from '@src/js/store/middleware/stateChangeCheck.js' - -export default [stateChangeCheck] diff --git a/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js b/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js deleted file mode 100644 index f16b8cd6787233383bed19fed6398a90ae30eff7..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js +++ /dev/null @@ -1,54 +0,0 @@ -import _ from 'lodash' -import diff from '@src/js/common/diff.js' -import logger from '@src/js/common/logger.js' - -export default store => next => action => { - if (logger.isLevelEnabled(logger.DEBUG)) { - logger.group(logger.DEBUG, 'Action ' + action.type, action) - - let beforeState = store.getState() - let beforeStateClone = _.cloneDeep(beforeState) - next(action) - let afterState = store.getState() - - logger.group(logger.DEBUG, 'State diff') - let unmodifiedNewObjects = diff(beforeState, afterState, 'root') - let modifiedPreviousState = !_.isEqual(beforeState, beforeStateClone) - logger.groupEnd(logger.DEBUG) - - if (unmodifiedNewObjects || modifiedPreviousState) { - if (unmodifiedNewObjects) { - logger.log( - logger.ERROR, - 'ERROR state changed incorrectly - returned new objects without changes', - beforeState, - afterState - ) - } - if (modifiedPreviousState) { - logger.log( - logger.ERROR, - 'ERROR state changed incorrectly - reducer modified previous state object', - beforeStateClone, - beforeState, - afterState - ) - } - } else { - if (_.isEqual(beforeState, afterState)) { - logger.log(logger.DEBUG, 'OK state not changed', afterState) - } else { - logger.log( - logger.DEBUG, - 'OK state changed correctly', - beforeState, - afterState - ) - } - } - - logger.groupEnd(logger.DEBUG) - } else { - next(action) - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/reducers.js b/openbis_ng_ui/src/js/store/reducers/reducers.js deleted file mode 100644 index 90bf93921ed5d6dc9d5e9574385677ee78e4a38a..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/reducers.js +++ /dev/null @@ -1,30 +0,0 @@ -import { combineReducers } from 'redux' -import actions from '@src/js/store/actions/actions.js' -import ui from '@src/js/store/reducers/ui/ui.js' -import session from '@src/js/store/reducers/session/session.js' -import route from '@src/js/store/reducers/route/route.js' - -export default function root(state = {}, action) { - if (action.type === actions.CLEAR) { - state = { - initialized: state.initialized - } - } - return combineReducers({ - initialized, - ui, - session, - route - })(state, action) -} - -function initialized(state = false, action) { - switch (action.type) { - case actions.SET_INITIALIZED: { - return action.payload.initialized - } - default: { - return state - } - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/route/route.js b/openbis_ng_ui/src/js/store/reducers/route/route.js deleted file mode 100644 index afda4474d50afd2b24dacb4e833c759e3bbbf7f2..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/route/route.js +++ /dev/null @@ -1,12 +0,0 @@ -import actions from '@src/js/store/actions/actions.js' - -export default function route(state = null, action) { - switch (action.type) { - case actions.SET_ROUTE: { - return action.payload.route - } - default: { - return state - } - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/session/session.js b/openbis_ng_ui/src/js/store/reducers/session/session.js deleted file mode 100644 index 7338983eb9586e59a48a7fb04cbd5f1a44e1350e..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/session/session.js +++ /dev/null @@ -1,12 +0,0 @@ -import actions from '@src/js/store/actions/actions.js' - -export default function session(state = null, action) { - switch (action.type) { - case actions.SET_SESSION: { - return action.payload.session - } - default: { - return state - } - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js deleted file mode 100644 index 06ebb005f17c130e7033bf40af23bb075a593213..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js +++ /dev/null @@ -1,73 +0,0 @@ -import _ from 'lodash' -import actions from '@src/js/store/actions/actions.js' - -const isPageAction = (page, action) => { - return ( - action.type === actions.INIT || - action.type === actions.CLEAR || - page === (action.payload && action.payload.page) - ) -} - -const currentRoute = (state = null, action) => { - switch (action.type) { - case actions.SET_CURRENT_ROUTE: { - return action.payload.currentRoute - } - default: { - return state - } - } -} - -const openTabs = (state = [], action) => { - let newState = null - - switch (action.type) { - case actions.ADD_OPEN_TAB: { - const index = _.findIndex(state, { id: action.payload.id }, _.isMatch) - if (index !== -1) { - return state - } else { - newState = Array.from(state) - newState.push(action.payload.tab) - } - break - } - case actions.REMOVE_OPEN_TAB: { - const index = _.findIndex(state, { id: action.payload.id }, _.isMatch) - if (index !== -1) { - newState = Array.from(state) - newState.splice(index, 1) - } else { - return state - } - break - } - case actions.REPLACE_OPEN_TAB: { - const index = _.findIndex(state, { id: action.payload.id }, _.isMatch) - if (index !== -1) { - newState = Array.from(state) - newState[index] = action.payload.tab - } else { - return state - } - break - } - default: { - return state - } - } - - if (_.isEqual(state, newState)) { - return state - } else { - return newState - } -} - -export default { - isPageAction, - currentRoute, - openTabs -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js deleted file mode 100644 index 9780c6f45516aeb29ba87c530072a5a22e0e2881..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function login(state = {}) { - return state -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js deleted file mode 100644 index 97fdf85fb2109f5fed3da305c23f2cc03dc42f50..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js +++ /dev/null @@ -1,12 +0,0 @@ -import { combineReducers } from 'redux' -import login from '@src/js/store/reducers/ui/pages/login/login.js' -import types from '@src/js/store/reducers/ui/pages/types/types.js' -import users from '@src/js/store/reducers/ui/pages/users/users.js' -import tools from '@src/js/store/reducers/ui/pages/tools/tools.js' - -export default combineReducers({ - login, - types, - users, - tools -}) diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js deleted file mode 100644 index ffb16deaa11e3a0804373bcf052c157580f07ac3..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js +++ /dev/null @@ -1,14 +0,0 @@ -import { combineReducers } from 'redux' -import pages from '@src/js/common/consts/pages.js' -import page from '@src/js/store/reducers/ui/pages/common/page.js' - -export default function types(state = {}, action) { - if (page.isPageAction(pages.TOOLS, action)) { - return combineReducers({ - currentRoute: page.currentRoute, - openTabs: page.openTabs - })(state, action) - } else { - return state - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js deleted file mode 100644 index 1bec7842442913a9f8bbc11eed70fa69faececbf..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js +++ /dev/null @@ -1,14 +0,0 @@ -import { combineReducers } from 'redux' -import pages from '@src/js/common/consts/pages.js' -import page from '@src/js/store/reducers/ui/pages/common/page.js' - -export default function types(state = {}, action) { - if (page.isPageAction(pages.TYPES, action)) { - return combineReducers({ - currentRoute: page.currentRoute, - openTabs: page.openTabs - })(state, action) - } else { - return state - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js deleted file mode 100644 index f4b2e9c4cab29532462df636c7d45f09a956a14e..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js +++ /dev/null @@ -1,14 +0,0 @@ -import { combineReducers } from 'redux' -import pages from '@src/js/common/consts/pages.js' -import page from '@src/js/store/reducers/ui/pages/common/page.js' - -export default function types(state = {}, action) { - if (page.isPageAction(pages.USERS, action)) { - return combineReducers({ - currentRoute: page.currentRoute, - openTabs: page.openTabs - })(state, action) - } else { - return state - } -} diff --git a/openbis_ng_ui/src/js/store/reducers/ui/ui.js b/openbis_ng_ui/src/js/store/reducers/ui/ui.js deleted file mode 100644 index 85f60cd5c7777ec27e6fd6cc648956a64166c657..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/reducers/ui/ui.js +++ /dev/null @@ -1,43 +0,0 @@ -import { combineReducers } from 'redux' -import actions from '@src/js/store/actions/actions.js' -import pages from '@src/js/store/reducers/ui/pages/pages.js' - -export default combineReducers({ - loading, - search, - pages, - error -}) - -function loading(state = false, action) { - switch (action.type) { - case actions.SET_LOADING: { - return action.payload.loading - } - default: { - return state - } - } -} - -function search(state = '', action) { - switch (action.type) { - case actions.SET_SEARCH: { - return action.payload.search - } - default: { - return state - } - } -} - -function error(state = null, action) { - switch (action.type) { - case actions.SET_ERROR: { - return action.payload.error - } - default: { - return state - } - } -} diff --git a/openbis_ng_ui/src/js/store/sagas/api.js b/openbis_ng_ui/src/js/store/sagas/api.js deleted file mode 100644 index 796fa020aa15dd0cf824beb042d3ab47f36cf860..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/sagas/api.js +++ /dev/null @@ -1,28 +0,0 @@ -import { put, takeEvery, apply } from 'redux-saga/effects' -import openbis from '@src/js/services/openbis.js' -import actions from '@src/js/store/actions/actions.js' - -export default function* apiSaga() { - yield takeEvery(actions.API_REQUEST, apiRequest) -} - -function* apiRequest(action) { - const { method, params } = action.payload - - try { - let result = yield apply(openbis, openbis[method], params || []) - yield put( - actions.apiSuccess({ - result, - meta: Object.assign({}, action.meta, { method, params }) - }) - ) - } catch (error) { - yield put( - actions.apiError({ - error, - meta: Object.assign({}, action.meta, { method, params }) - }) - ) - } -} diff --git a/openbis_ng_ui/src/js/store/sagas/app.js b/openbis_ng_ui/src/js/store/sagas/app.js deleted file mode 100644 index e833dc84d11b827c75c3b6208b66d79b7e22b598..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/sagas/app.js +++ /dev/null @@ -1,152 +0,0 @@ -import { - call, - put, - putAndWait, - takeEvery, - select -} from '@src/js/store/sagas/effects.js' -import openbis from '@src/js/services/openbis.js' -import selectors from '@src/js/store/selectors/selectors.js' -import actions from '@src/js/store/actions/actions.js' -import objectType from '@src/js/common/consts/objectType.js' -import routes from '@src/js/common/consts/routes.js' -import cookie from '@src/js/common/cookie.js' -import history from '@src/js/store/history.js' - -export default function* appSaga() { - yield takeEvery(actions.INIT, init) - yield takeEvery(actions.LOGIN, login) - yield takeEvery(actions.LOGOUT, logout) - yield takeEvery(actions.SEARCH, search) - yield takeEvery(actions.CURRENT_PAGE_CHANGE, currentPageChange) - yield takeEvery(actions.SEARCH_CHANGE, searchChange) - yield takeEvery(actions.ERROR_CHANGE, errorChange) - yield takeEvery(actions.ROUTE_CHANGE, routeChange) - yield takeEvery(actions.ROUTE_REPLACE, routeReplace) -} - -function* init() { - let initialized = yield select(selectors.getInitialized) - - if (!initialized) { - try { - yield put(actions.setLoading(true)) - yield call([openbis, openbis.init]) - - let sessionToken = cookie.read(cookie.OPENBIS_COOKIE) - - if (sessionToken) { - try { - openbis.useSession(sessionToken) - let sessionInformation = yield call([ - openbis, - openbis.getSessionInformation - ]) - if (sessionInformation) { - yield put( - actions.setSession({ - sessionToken: sessionToken, - userName: sessionInformation.userName - }) - ) - } else { - openbis.useSession(null) - } - } catch (e) { - openbis.useSession(null) - } - } - - yield put(actions.setInitialized(true)) - } catch (e) { - yield put(actions.setError(e)) - } finally { - yield put(actions.setLoading(false)) - } - } -} - -function* login(action) { - try { - yield put(actions.setLoading(true)) - - let { username, password } = action.payload - let loginResponse = yield putAndWait( - actions.apiRequest({ method: 'login', params: [username, password] }) - ) - - if (loginResponse.payload.result) { - let sessionToken = loginResponse.payload.result - - yield put( - actions.setSession({ - sessionToken: sessionToken, - userName: username - }) - ) - cookie.create(cookie.OPENBIS_COOKIE, sessionToken, 7) - - let path = yield select(selectors.getRoute) - let route = routes.parse(path) - yield put(actions.routeChange(route.path)) - } else { - throw { message: 'Incorrect user or password' } - } - } catch (e) { - yield put(actions.setError(e)) - } finally { - yield put(actions.setLoading(false)) - } -} - -function* logout() { - try { - yield put(actions.setLoading(true)) - yield putAndWait(actions.apiRequest({ method: 'logout' })) - yield put(actions.clear()) - cookie.erase(cookie.OPENBIS_COOKIE) - yield put(actions.routeChange('/')) - } catch (e) { - yield put(actions.setError(e)) - } finally { - yield put(actions.setLoading(false)) - } -} - -function* search(action) { - const { page, text } = action.payload - if (text.trim().length > 0) { - yield put(actions.objectOpen(page, objectType.SEARCH, text.trim())) - } - yield put(actions.setSearch('')) -} - -function* currentPageChange(action) { - let page = action.payload.currentPage - let route = yield select(selectors.getCurrentRoute, page) - - if (route) { - yield put(actions.routeChange(route)) - } else { - route = routes.format({ page }) - yield put(actions.routeChange(route)) - } -} - -function* searchChange(action) { - yield put(actions.setSearch(action.payload.search)) -} - -function* errorChange(action) { - yield put(actions.setError(action.payload.error)) -} - -function* routeChange(action) { - const route = action.payload.route - yield put(actions.setRoute(route)) -} - -function routeReplace(action) { - const { route, state } = action.payload - history.replace(route, state) -} diff --git a/openbis_ng_ui/src/js/store/sagas/effects.js b/openbis_ng_ui/src/js/store/sagas/effects.js deleted file mode 100644 index 783b763f1094e76fd57abecff831e895a92e0f7b..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/sagas/effects.js +++ /dev/null @@ -1,55 +0,0 @@ -import _ from 'lodash' -import { put, take } from 'redux-saga/effects' - -function generateCorrelationId() { - let date = new Date() - let timestamp = - date.getUTCHours() + ':' + date.getUTCMinutes() + ':' + date.getUTCSeconds() - let random = Math.floor(Math.random() * 1000000) - return timestamp + '-' + random -} - -export function* putAndWait(actionOrActionsMap) { - let actionsMap = _.isString(actionOrActionsMap.type) - ? { action: actionOrActionsMap } - : actionOrActionsMap - - let correlationId = generateCorrelationId() - let correlationKeys = [] - let actions = [] - - _.forEach(actionsMap, (action, correlationKey) => { - correlationKeys.push(correlationKey) - actions.push(action) - }) - - for (let i = 0; i < actions.length; i++) { - let actionWithCorrelation = Object.assign(actions[i], { - meta: { correlation: { id: correlationId, key: correlationKeys[i] } } - }) - yield put(actionWithCorrelation) - } - - let responsesMap = {} - - while (_.size(responsesMap) < correlationKeys.length) { - let potentialResponse = yield take('*') - if ( - potentialResponse.meta && - potentialResponse.meta.correlation && - potentialResponse.meta.correlation.id === correlationId - ) { - if (potentialResponse.payload.error) { - throw potentialResponse.payload.error - } - let correlationKey = potentialResponse.meta.correlation.key - responsesMap[correlationKey] = potentialResponse - } - } - - return _.isString(actionOrActionsMap.type) - ? responsesMap.action - : responsesMap -} - -export * from 'redux-saga/effects' diff --git a/openbis_ng_ui/src/js/store/sagas/page.js b/openbis_ng_ui/src/js/store/sagas/page.js deleted file mode 100644 index 97d92c09433b7861d6b834d8b027cab3f1dffcf4..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/sagas/page.js +++ /dev/null @@ -1,164 +0,0 @@ -import _ from 'lodash' -import { put, takeEvery, select } from '@src/js/store/sagas/effects.js' -import selectors from '@src/js/store/selectors/selectors.js' -import actions from '@src/js/store/actions/actions.js' -import routes from '@src/js/common/consts/routes.js' -import objectOperation from '@src/js/common/consts/objectOperation.js' - -import AppController from '@src/js/components/AppController.js' - -export default function* pageSaga() { - yield takeEvery(actions.OBJECT_NEW, objectNew) - yield takeEvery(actions.OBJECT_CREATE, objectCreate) - yield takeEvery(actions.OBJECT_OPEN, objectOpen) - yield takeEvery(actions.OBJECT_UPDATE, objectUpdate) - yield takeEvery(actions.OBJECT_DELETE, objectDelete) - yield takeEvery(actions.OBJECT_CHANGE, objectChange) - yield takeEvery(actions.OBJECT_CLOSE, objectClose) - yield takeEvery(actions.ROUTE_CHANGE, routeChange) -} - -function* objectNew(action) { - const { page, type } = action.payload - - let id = 1 - - const openObjects = yield select(selectors.getOpenObjects, page) - openObjects.forEach(openObject => { - if (openObject.type === type) { - id++ - } - }) - - const route = routes.format({ page, type, id }) - yield put(actions.routeChange(route)) -} - -function* objectCreate(action) { - const { page, oldType, oldId, newType, newId } = action.payload - - const openTabs = yield select(selectors.getOpenTabs, page) - const oldTab = _.find(openTabs, { object: { type: oldType, id: oldId } }) - - if (oldTab) { - const newTab = { - ...oldTab, - object: { type: newType, id: newId }, - changed: false - } - yield put(actions.replaceOpenTab(page, oldTab.id, newTab)) - - yield AppController.setLastObjectModification( - newType, - objectOperation.CREATE, - Date.now() - ) - - const route = routes.format({ page, type: newType, id: newId }) - yield put(actions.routeReplace(route)) - } -} - -function* objectOpen(action) { - const { page, type, id } = action.payload - const route = routes.format({ page, type, id }) - yield put(actions.routeChange(route)) -} - -function* objectUpdate(action) { - const { type } = action.payload - yield AppController.setLastObjectModification( - type, - objectOperation.UPDATE, - Date.now() - ) -} - -function* objectDelete(action) { - const { page, type, id } = action.payload - yield put(actions.objectClose(page, type, id)) - yield AppController.setLastObjectModification( - type, - objectOperation.DELETE, - Date.now() - ) -} - -function* objectChange(action) { - const { page, type, id, changed } = action.payload - - const openTabs = yield select(selectors.getOpenTabs, page) - const oldTab = _.find(openTabs, { object: { type, id } }) - - if (oldTab) { - const newTab = { ...oldTab, changed } - yield put(actions.replaceOpenTab(page, oldTab.id, newTab)) - } -} - -function* objectClose(action) { - const { page, type, id } = action.payload - - const objectToClose = { type, id } - const openTabs = yield select(selectors.getOpenTabs, page) - let selectedObject = yield select(selectors.getSelectedObject, page) - - if (selectedObject && _.isEqual(selectedObject, objectToClose)) { - if (_.size(openTabs) === 1) { - selectedObject = null - } else { - let selectedIndex = _.findIndex(openTabs, { object: selectedObject }) - if (selectedIndex === 0) { - selectedObject = openTabs[selectedIndex + 1].object - } else { - selectedObject = openTabs[selectedIndex - 1].object - } - } - } - - let tabToClose = _.find(openTabs, { object: objectToClose }) - if (tabToClose) { - yield put(actions.removeOpenTab(page, tabToClose.id)) - } - - if (selectedObject) { - let route = routes.format({ - page, - type: selectedObject.type, - id: selectedObject.id - }) - yield put(actions.routeChange(route)) - } else { - let route = routes.format({ page }) - yield put(actions.routeChange(route)) - } -} - -function* routeChange(action) { - const route = routes.parse(action.payload.route) - - if (route.type && route.id) { - const object = { type: route.type, id: route.id } - const openTabs = yield select(selectors.getOpenTabs, route.page) - - if (openTabs) { - let found = false - let id = 1 - - openTabs.forEach(openTab => { - if (_.isMatch(openTab.object, object)) { - found = true - } - if (openTab.id >= id) { - id = openTab.id + 1 - } - }) - - if (!found) { - yield put(actions.addOpenTab(route.page, { id, object })) - } - } - } - - yield put(actions.setCurrentRoute(route.page, route.path)) -} diff --git a/openbis_ng_ui/src/js/store/sagas/sagas.js b/openbis_ng_ui/src/js/store/sagas/sagas.js deleted file mode 100644 index 04ce65514512d9fe3d774bce56e512c6fed872a9..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/sagas/sagas.js +++ /dev/null @@ -1,8 +0,0 @@ -import { all } from 'redux-saga/effects' -import app from '@src/js/store/sagas/app.js' -import api from '@src/js/store/sagas/api.js' -import page from '@src/js/store/sagas/page.js' - -export default function* root() { - yield all([api(), app(), page()]) -} diff --git a/openbis_ng_ui/src/js/store/selectors/app.js b/openbis_ng_ui/src/js/store/selectors/app.js deleted file mode 100644 index 662fd1712a74f49c4ace029797a09210d1e349dc..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/selectors/app.js +++ /dev/null @@ -1,40 +0,0 @@ -import routes from '@src/js/common/consts/routes.js' - -const getInitialized = state => { - return state.initialized -} - -const getLoading = state => { - return state.ui.loading -} - -const getSearch = state => { - return state.ui.search -} - -const getRoute = state => { - return state.route -} - -const getCurrentPage = state => { - let route = routes.parse(state.route) - return route.page -} - -const getError = state => { - return state.ui.error -} - -const getSession = state => { - return state.session -} - -export default { - getInitialized, - getLoading, - getSearch, - getRoute, - getCurrentPage, - getError, - getSession -} diff --git a/openbis_ng_ui/src/js/store/selectors/page.js b/openbis_ng_ui/src/js/store/selectors/page.js deleted file mode 100644 index deaefdc54640097ab2a5cd88f41af0ce6efb80a1..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/selectors/page.js +++ /dev/null @@ -1,51 +0,0 @@ -import _ from 'lodash' -import { createSelector } from 'reselect' -import logger from '@src/js/common/logger.js' -import routes from '@src/js/common/consts/routes.js' - -const getCurrentRoute = (state, page) => { - logger.log(logger.DEBUG, 'pageSelector.getCurrentRoute') - return state.ui.pages[page].currentRoute -} - -const getOpenTabs = (state, page) => { - logger.log(logger.DEBUG, 'pageSelector.getOpenTabs') - return state.ui.pages[page].openTabs -} - -const getOpenObjects = createSelector(getOpenTabs, openTabs => { - logger.log(logger.DEBUG, 'pageSelector.getOpenObjects') - return openTabs.map(openTab => { - return openTab.object - }) -}) - -const getSelectedTab = (state, page) => { - logger.log(logger.DEBUG, 'pageSelector.getSelectedTab') - const selectedObject = getSelectedObject(state, page) - if (selectedObject) { - const openTabs = getOpenTabs(state, page) - return _.find(openTabs, { object: selectedObject }) - } else { - return null - } -} - -const getSelectedObject = createSelector(getCurrentRoute, path => { - logger.log(logger.DEBUG, 'pageSelector.getSelectedObject') - if (path) { - let route = routes.parse(path) - if (route && route.type && route.id) { - return { type: route.type, id: route.id } - } - } - return null -}) - -export default { - getCurrentRoute, - getOpenTabs, - getOpenObjects, - getSelectedTab, - getSelectedObject -} diff --git a/openbis_ng_ui/src/js/store/selectors/selectors.js b/openbis_ng_ui/src/js/store/selectors/selectors.js deleted file mode 100644 index 208e96bbd2fa4ac952755b628c962f61bd4c32e8..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/selectors/selectors.js +++ /dev/null @@ -1,7 +0,0 @@ -import app from '@src/js/store/selectors/app.js' -import page from '@src/js/store/selectors/page.js' - -export default { - ...app, - ...page -} diff --git a/openbis_ng_ui/src/js/store/store.js b/openbis_ng_ui/src/js/store/store.js deleted file mode 100644 index bba1a07b67a4ad3d7d1a35c5fe4d7775dd737239..0000000000000000000000000000000000000000 --- a/openbis_ng_ui/src/js/store/store.js +++ /dev/null @@ -1,40 +0,0 @@ -import { createStore, applyMiddleware, compose } from 'redux' -import createSagaMiddleware from 'redux-saga' -import middlewares from '@src/js/store/middleware/middlewares.js' -import rootReducer from '@src/js/store/reducers/reducers.js' -import rootSaga from '@src/js/store/sagas/sagas.js' -import history from '@src/js/store/history.js' - -function createStoreWithMiddleware() { - const sagaMiddleware = createSagaMiddleware() - const composeEnhancers = - (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && - window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ - trace: true, - traceLimit: 25 - })) || - compose - - let store = createStore( - rootReducer, - composeEnhancers(applyMiddleware(...middlewares, sagaMiddleware)) - ) - sagaMiddleware.run(rootSaga) - - history.configure(store) - - return store -} - -let store = createStoreWithMiddleware() - -/* eslint-disable no-undef */ -if (module.hot) { - module.hot.accept('./reducers/reducers.js', () => { - const nextRootReducer = require('./reducers/reducers.js').default - store.replaceReducer(nextRootReducer) - }) -} - -export { createStoreWithMiddleware as createStore } -export default store