+
-
+
{strategy.name}
+ {strategy.deprecated ? (Deprecated) : null}
- {strategy.editable === false || !hasPermission(DELETE_STRATEGY) ? (
- ''
- ) : (
- removeStrategy(strategy)} />
- )}
+
+ {strategy.deprecated ? (
+ reactivateStrategy(strategy)}
+ />
+ ) : (
+ deprecateStrategy(strategy)}
+ />
+ )}
+ {strategy.editable === false || !hasPermission(DELETE_STRATEGY) ? (
+ {}}
+ />
+ ) : (
+ removeStrategy(strategy)}
+ />
+ )}
+
))
) : (
diff --git a/frontend/src/component/strategies/list-container.jsx b/frontend/src/component/strategies/list-container.jsx
index a71e7431f4..00ab786876 100644
--- a/frontend/src/component/strategies/list-container.jsx
+++ b/frontend/src/component/strategies/list-container.jsx
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import StrategiesListComponent from './list-component.jsx';
-import { fetchStrategies, removeStrategy } from './../../store/strategy/actions';
+import { fetchStrategies, removeStrategy, deprecateStrategy, reactivateStrategy } from './../../store/strategy/actions';
import { hasPermission } from '../../permissions';
const mapStateToProps = state => {
@@ -19,6 +19,18 @@ const mapDispatchToProps = dispatch => ({
removeStrategy(strategy)(dispatch);
}
},
+ deprecateStrategy: strategy => {
+ // eslint-disable-next-line no-alert
+ if (window.confirm('Are you sure you want to deprecate this strategy?')) {
+ deprecateStrategy(strategy)(dispatch);
+ }
+ },
+ reactivateStrategy: strategy => {
+ // eslint-disable-next-line no-alert
+ if (window.confirm('Are you sure you want to reactivate this strategy?')) {
+ reactivateStrategy(strategy)(dispatch);
+ }
+ },
fetchStrategies: () => fetchStrategies()(dispatch),
});
diff --git a/frontend/src/component/strategies/show-strategy-component.js b/frontend/src/component/strategies/show-strategy-component.js
index 6899e4f096..fac964b68f 100644
--- a/frontend/src/component/strategies/show-strategy-component.js
+++ b/frontend/src/component/strategies/show-strategy-component.js
@@ -32,6 +32,13 @@ class ShowStrategyComponent extends PureComponent {
return (
+ {strategy.deprecated ? (
+
+ Deprecated
+ |
+ ) : (
+ ''
+ )}
Parameters
diff --git a/frontend/src/component/strategies/strategies.module.scss b/frontend/src/component/strategies/strategies.module.scss
index 544d25fa08..3ab4ad4f05 100644
--- a/frontend/src/component/strategies/strategies.module.scss
+++ b/frontend/src/component/strategies/strategies.module.scss
@@ -6,3 +6,10 @@
padding: 0;
margin: 0;
}
+
+.deprecated {
+ a {
+ color: #1d1818;
+ }
+
+}
\ No newline at end of file
diff --git a/frontend/src/store/strategy/actions.js b/frontend/src/store/strategy/actions.js
index 68aa55ff00..a2ef8a23d4 100644
--- a/frontend/src/store/strategy/actions.js
+++ b/frontend/src/store/strategy/actions.js
@@ -5,14 +5,20 @@ import { dispatchAndThrow } from '../util';
export const ADD_STRATEGY = 'ADD_STRATEGY';
export const UPDATE_STRATEGY = 'UPDATE_STRATEGY';
export const REMOVE_STRATEGY = 'REMOVE_STRATEGY';
+export const DEPRECATE_STRATEGY = 'DEPRECATE_STRATEGY';
+export const REACTIVATE_STRATEGY = 'REACTIVATE_STRATEGY';
export const REQUEST_STRATEGIES = 'REQUEST_STRATEGIES';
export const START_CREATE_STRATEGY = 'START_CREATE_STRATEGY';
export const START_UPDATE_STRATEGY = 'START_UPDATE_STRATEGY';
+export const START_DEPRECATE_STRATEGY = 'START_DEPRECATE_STRATEGY';
+export const START_REACTIVATE_STRATEGY = 'START_REACTIVATE_STRATEGY';
export const RECEIVE_STRATEGIES = 'RECEIVE_STRATEGIES';
export const ERROR_RECEIVE_STRATEGIES = 'ERROR_RECEIVE_STRATEGIES';
export const ERROR_CREATING_STRATEGY = 'ERROR_CREATING_STRATEGY';
export const ERROR_UPDATING_STRATEGY = 'ERROR_UPDATING_STRATEGY';
export const ERROR_REMOVING_STRATEGY = 'ERROR_REMOVING_STRATEGY';
+export const ERROR_DEPRECATING_STRATEGY = 'ERROR_DEPRECATING_STRATEGY';
+export const ERROR_REACTIVATING_STRATEGY = 'ERROR_REACTIVATING_STRATEGY';
const addStrategy = strategy => ({ type: ADD_STRATEGY, strategy });
const createRemoveStrategy = strategy => ({ type: REMOVE_STRATEGY, strategy });
@@ -26,6 +32,11 @@ const startCreate = () => ({ type: START_CREATE_STRATEGY });
const startUpdate = () => ({ type: START_UPDATE_STRATEGY });
+const startDeprecate = () => ({ type: START_DEPRECATE_STRATEGY });
+const deprecateStrategyEvent = strategy => ({ type: DEPRECATE_STRATEGY, strategy });
+const startReactivate = () => ({ type: START_REACTIVATE_STRATEGY });
+const reactivateStrategyEvent = strategy => ({ type: REACTIVATE_STRATEGY, strategy });
+
export function fetchStrategies() {
return dispatch => {
dispatch(startRequest());
@@ -70,3 +81,21 @@ export function removeStrategy(strategy) {
export function getApplicationsWithStrategy(strategyName) {
return applicationApi.fetchApplicationsWithStrategyName(strategyName);
}
+
+export function deprecateStrategy(strategy) {
+ return dispatch => {
+ dispatch(startDeprecate());
+ api.deprecate(strategy)
+ .then(() => dispatch(deprecateStrategyEvent(strategy)))
+ .catch(dispatchAndThrow(dispatch, ERROR_DEPRECATING_STRATEGY));
+ };
+}
+
+export function reactivateStrategy(strategy) {
+ return dispatch => {
+ dispatch(startReactivate());
+ api.reactivate(strategy)
+ .then(() => dispatch(reactivateStrategyEvent(strategy)))
+ .catch(dispatchAndThrow(dispatch, ERROR_REACTIVATING_STRATEGY));
+ };
+}
diff --git a/frontend/src/store/strategy/api.js b/frontend/src/store/strategy/api.js
index 8a3553154f..2387fb550f 100644
--- a/frontend/src/store/strategy/api.js
+++ b/frontend/src/store/strategy/api.js
@@ -34,9 +34,27 @@ function remove(strategy) {
}).then(throwIfNotSuccess);
}
+function deprecate(strategy) {
+ return fetch(`${URI}/${strategy.name}/deprecate`, {
+ method: 'POST',
+ headers,
+ credentials: 'include',
+ }).then(throwIfNotSuccess);
+}
+
+function reactivate(strategy) {
+ return fetch(`${URI}/${strategy.name}/reactivate`, {
+ method: 'POST',
+ headers,
+ credentials: 'include',
+ }).then(throwIfNotSuccess);
+}
+
export default {
fetchAll,
create,
update,
remove,
+ deprecate,
+ reactivate,
};
diff --git a/frontend/src/store/strategy/index.js b/frontend/src/store/strategy/index.js
index f8fe4783c6..900ae3259c 100644
--- a/frontend/src/store/strategy/index.js
+++ b/frontend/src/store/strategy/index.js
@@ -1,5 +1,12 @@
import { List, Map as $Map } from 'immutable';
-import { RECEIVE_STRATEGIES, REMOVE_STRATEGY, ADD_STRATEGY, UPDATE_STRATEGY } from './actions';
+import {
+ RECEIVE_STRATEGIES,
+ REMOVE_STRATEGY,
+ ADD_STRATEGY,
+ UPDATE_STRATEGY,
+ DEPRECATE_STRATEGY,
+ REACTIVATE_STRATEGY,
+} from './actions';
function getInitState() {
return new $Map({ list: new List() });
@@ -25,6 +32,19 @@ function updateStrategy(state, action) {
);
}
+function setDeprecationStatus(state, action, status) {
+ return state.update('list', list =>
+ list.map(strategy => {
+ if (strategy.name === action.strategy.name) {
+ action.strategy.deprecated = status;
+ return action.strategy;
+ } else {
+ return strategy;
+ }
+ })
+ );
+}
+
const strategies = (state = getInitState(), action) => {
switch (action.type) {
case RECEIVE_STRATEGIES:
@@ -35,6 +55,10 @@ const strategies = (state = getInitState(), action) => {
return state.update('list', list => list.push(action.strategy));
case UPDATE_STRATEGY:
return updateStrategy(state, action);
+ case DEPRECATE_STRATEGY:
+ return setDeprecationStatus(state, action, true);
+ case REACTIVATE_STRATEGY:
+ return setDeprecationStatus(state, action, false);
default:
return state;
}
|