mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-25 00:07:47 +01:00
refactor: port unleash context to SWR (#683)
Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>
This commit is contained in:
parent
08c4b60cef
commit
dd37100302
@ -13,7 +13,7 @@ import { Info } from '@material-ui/icons';
|
|||||||
|
|
||||||
import { weightTypes } from './enums';
|
import { weightTypes } from './enums';
|
||||||
|
|
||||||
import OverrideConfig from './OverrideConfig/OverrideConfig';
|
import { OverrideConfig } from './OverrideConfig/OverrideConfig';
|
||||||
import ConditionallyRender from '../../../../../common/ConditionallyRender';
|
import ConditionallyRender from '../../../../../common/ConditionallyRender';
|
||||||
import GeneralSelect from '../../../../../common/GeneralSelect/GeneralSelect';
|
import GeneralSelect from '../../../../../common/GeneralSelect/GeneralSelect';
|
||||||
import { useCommonStyles } from '../../../../../../common.styles';
|
import { useCommonStyles } from '../../../../../../common.styles';
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
import { connect } from 'react-redux';
|
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Grid, IconButton, TextField } from '@material-ui/core';
|
import { Grid, IconButton, TextField } from '@material-ui/core';
|
||||||
import { Delete } from '@material-ui/icons';
|
import { Delete } from '@material-ui/icons';
|
||||||
@ -10,17 +8,19 @@ import GeneralSelect from '../../../../../../common/GeneralSelect/GeneralSelect'
|
|||||||
import { useCommonStyles } from '../../../../../../../common.styles';
|
import { useCommonStyles } from '../../../../../../../common.styles';
|
||||||
import ConditionallyRender from '../../../../../../common/ConditionallyRender';
|
import ConditionallyRender from '../../../../../../common/ConditionallyRender';
|
||||||
import InputListField from '../../../../../../common/input-list-field.jsx';
|
import InputListField from '../../../../../../common/input-list-field.jsx';
|
||||||
|
import useUnleashContext from '../../../../../../../hooks/api/getters/useUnleashContext/useUnleashContext';
|
||||||
|
|
||||||
const OverrideConfig = ({
|
export const OverrideConfig = ({
|
||||||
overrides,
|
overrides,
|
||||||
updateOverrideType,
|
updateOverrideType,
|
||||||
updateOverrideValues,
|
updateOverrideValues,
|
||||||
removeOverride,
|
removeOverride,
|
||||||
contextDefinitions,
|
|
||||||
}) => {
|
}) => {
|
||||||
const styles = useStyles();
|
const styles = useStyles();
|
||||||
const commonStyles = useCommonStyles();
|
const commonStyles = useCommonStyles();
|
||||||
const contextNames = contextDefinitions.map(c => ({
|
|
||||||
|
const { context } = useUnleashContext();
|
||||||
|
const contextNames = context.map(c => ({
|
||||||
key: c.name,
|
key: c.name,
|
||||||
label: c.name,
|
label: c.name,
|
||||||
}));
|
}));
|
||||||
@ -34,9 +34,7 @@ const OverrideConfig = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return overrides.map((o, i) => {
|
return overrides.map((o, i) => {
|
||||||
const definition = contextDefinitions.find(
|
const definition = context.find(c => c.name === o.contextName);
|
||||||
c => c.name === o.contextName
|
|
||||||
);
|
|
||||||
const legalValues = definition ? definition.legalValues : [];
|
const legalValues = definition ? definition.legalValues : [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -115,9 +113,3 @@ OverrideConfig.propTypes = {
|
|||||||
updateOverrideValues: PropTypes.func.isRequired,
|
updateOverrideValues: PropTypes.func.isRequired,
|
||||||
removeOverride: PropTypes.func.isRequired,
|
removeOverride: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
|
||||||
contextDefinitions: state.context.toJS(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default connect(mapStateToProps, {})(OverrideConfig);
|
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
import api from './api';
|
|
||||||
import { dispatchError } from '../util';
|
|
||||||
|
|
||||||
export const RECEIVE_CONTEXT = 'RECEIVE_CONTEXT';
|
|
||||||
export const ERROR_RECEIVE_CONTEXT = 'ERROR_RECEIVE_CONTEXT';
|
|
||||||
export const REMOVE_CONTEXT = 'REMOVE_CONTEXT';
|
|
||||||
export const ERROR_REMOVING_CONTEXT = 'ERROR_REMOVING_CONTEXT';
|
|
||||||
export const ADD_CONTEXT_FIELD = 'ADD_CONTEXT_FIELD';
|
|
||||||
export const ERROR_ADD_CONTEXT_FIELD = 'ERROR_ADD_CONTEXT_FIELD';
|
|
||||||
export const UPDATE_CONTEXT_FIELD = 'UPDATE_CONTEXT_FIELD';
|
|
||||||
export const ERROR_UPDATE_CONTEXT_FIELD = 'ERROR_UPDATE_CONTEXT_FIELD';
|
|
||||||
|
|
||||||
export const receiveContext = value => ({ type: RECEIVE_CONTEXT, value });
|
|
||||||
const addContextField = context => ({ type: ADD_CONTEXT_FIELD, context });
|
|
||||||
const upContextField = context => ({ type: UPDATE_CONTEXT_FIELD, context });
|
|
||||||
const createRemoveContext = context => ({ type: REMOVE_CONTEXT, context });
|
|
||||||
|
|
||||||
export function fetchContext() {
|
|
||||||
return dispatch =>
|
|
||||||
api
|
|
||||||
.fetchAll()
|
|
||||||
.then(json => {
|
|
||||||
json.sort((a, b) => a.sortOrder - b.sortOrder);
|
|
||||||
dispatch(receiveContext(json));
|
|
||||||
})
|
|
||||||
.catch(dispatchError(dispatch, ERROR_RECEIVE_CONTEXT));
|
|
||||||
}
|
|
||||||
|
|
||||||
export function removeContextField(context) {
|
|
||||||
return dispatch =>
|
|
||||||
api
|
|
||||||
.remove(context)
|
|
||||||
.then(() => dispatch(createRemoveContext(context)))
|
|
||||||
.catch(dispatchError(dispatch, ERROR_REMOVING_CONTEXT));
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createContextField(context) {
|
|
||||||
return dispatch =>
|
|
||||||
api
|
|
||||||
.create(context)
|
|
||||||
.then(() => dispatch(addContextField(context)))
|
|
||||||
.catch(e => {
|
|
||||||
dispatchError(dispatch, ERROR_ADD_CONTEXT_FIELD);
|
|
||||||
throw e;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function updateContextField(context) {
|
|
||||||
return dispatch =>
|
|
||||||
api
|
|
||||||
.update(context)
|
|
||||||
.then(() => dispatch(upContextField(context)))
|
|
||||||
.catch(dispatchError(dispatch, ERROR_UPDATE_CONTEXT_FIELD));
|
|
||||||
}
|
|
||||||
|
|
||||||
export function validateName(name) {
|
|
||||||
return api.validate({ name });
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
import { formatApiPath } from '../../utils/format-path';
|
|
||||||
import { throwIfNotSuccess, headers } from '../api-helper';
|
|
||||||
|
|
||||||
const URI = formatApiPath('api/admin/context');
|
|
||||||
|
|
||||||
function fetchAll() {
|
|
||||||
return fetch(URI, { credentials: 'include' })
|
|
||||||
.then(throwIfNotSuccess)
|
|
||||||
.then(response => response.json());
|
|
||||||
}
|
|
||||||
|
|
||||||
function create(contextField) {
|
|
||||||
return fetch(URI, {
|
|
||||||
method: 'POST',
|
|
||||||
headers,
|
|
||||||
body: JSON.stringify(contextField),
|
|
||||||
credentials: 'include',
|
|
||||||
}).then(throwIfNotSuccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
function update(contextField) {
|
|
||||||
return fetch(`${URI}/${contextField.name}`, {
|
|
||||||
method: 'PUT',
|
|
||||||
headers,
|
|
||||||
body: JSON.stringify(contextField),
|
|
||||||
credentials: 'include',
|
|
||||||
}).then(throwIfNotSuccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove(contextField) {
|
|
||||||
return fetch(`${URI}/${contextField.name}`, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers,
|
|
||||||
credentials: 'include',
|
|
||||||
}).then(throwIfNotSuccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
function validate(name) {
|
|
||||||
return fetch(`${URI}/validate`, {
|
|
||||||
method: 'POST',
|
|
||||||
headers,
|
|
||||||
credentials: 'include',
|
|
||||||
body: JSON.stringify(name),
|
|
||||||
}).then(throwIfNotSuccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
fetchAll,
|
|
||||||
create,
|
|
||||||
update,
|
|
||||||
remove,
|
|
||||||
validate,
|
|
||||||
};
|
|
@ -1,46 +0,0 @@
|
|||||||
import { List } from 'immutable';
|
|
||||||
import {
|
|
||||||
RECEIVE_CONTEXT,
|
|
||||||
REMOVE_CONTEXT,
|
|
||||||
ADD_CONTEXT_FIELD,
|
|
||||||
UPDATE_CONTEXT_FIELD,
|
|
||||||
} from './actions';
|
|
||||||
import { USER_LOGOUT, USER_LOGIN } from '../user/actions';
|
|
||||||
|
|
||||||
const DEFAULT_CONTEXT_FIELDS = [
|
|
||||||
{ name: 'environment', initial: true },
|
|
||||||
{ name: 'userId', initial: true },
|
|
||||||
{ name: 'appName', initial: true },
|
|
||||||
];
|
|
||||||
|
|
||||||
function getInitState() {
|
|
||||||
return new List(DEFAULT_CONTEXT_FIELDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
const context = (state = getInitState(), action) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case RECEIVE_CONTEXT:
|
|
||||||
return new List(action.value);
|
|
||||||
case REMOVE_CONTEXT:
|
|
||||||
const index = state.findIndex(
|
|
||||||
item => item.name === action.context.name
|
|
||||||
);
|
|
||||||
|
|
||||||
return state.remove(index);
|
|
||||||
case ADD_CONTEXT_FIELD:
|
|
||||||
return state.push(action.context);
|
|
||||||
case UPDATE_CONTEXT_FIELD: {
|
|
||||||
const index = state.findIndex(
|
|
||||||
item => item.name === action.context.name
|
|
||||||
);
|
|
||||||
return state.set(index, action.context);
|
|
||||||
}
|
|
||||||
case USER_LOGOUT:
|
|
||||||
case USER_LOGIN:
|
|
||||||
return getInitState();
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default context;
|
|
@ -16,11 +16,6 @@ import {
|
|||||||
UPDATE_STRATEGY_SUCCESS,
|
UPDATE_STRATEGY_SUCCESS,
|
||||||
} from '../strategy/actions';
|
} from '../strategy/actions';
|
||||||
|
|
||||||
import {
|
|
||||||
ERROR_ADD_CONTEXT_FIELD,
|
|
||||||
ERROR_UPDATE_CONTEXT_FIELD,
|
|
||||||
} from '../context/actions';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ERROR_REMOVING_PROJECT,
|
ERROR_REMOVING_PROJECT,
|
||||||
ERROR_ADD_PROJECT,
|
ERROR_ADD_PROJECT,
|
||||||
@ -62,8 +57,6 @@ const strategies = (state = getInitState(), action) => {
|
|||||||
case ERROR_UPDATING_STRATEGY:
|
case ERROR_UPDATING_STRATEGY:
|
||||||
case ERROR_CREATING_STRATEGY:
|
case ERROR_CREATING_STRATEGY:
|
||||||
case ERROR_RECEIVE_STRATEGIES:
|
case ERROR_RECEIVE_STRATEGIES:
|
||||||
case ERROR_ADD_CONTEXT_FIELD:
|
|
||||||
case ERROR_UPDATE_CONTEXT_FIELD:
|
|
||||||
case ERROR_REMOVING_PROJECT:
|
case ERROR_REMOVING_PROJECT:
|
||||||
case ERROR_UPDATE_PROJECT:
|
case ERROR_UPDATE_PROJECT:
|
||||||
case ERROR_ADD_ADDON_CONFIG:
|
case ERROR_ADD_ADDON_CONFIG:
|
||||||
|
@ -10,7 +10,6 @@ import error from './error';
|
|||||||
import user from './user';
|
import user from './user';
|
||||||
import applications from './application';
|
import applications from './application';
|
||||||
import uiConfig from './ui-config';
|
import uiConfig from './ui-config';
|
||||||
import context from './context';
|
|
||||||
import projects from './project';
|
import projects from './project';
|
||||||
import addons from './addons';
|
import addons from './addons';
|
||||||
import apiCalls from './api-calls';
|
import apiCalls from './api-calls';
|
||||||
@ -28,7 +27,6 @@ const unleashStore = combineReducers({
|
|||||||
user,
|
user,
|
||||||
applications,
|
applications,
|
||||||
uiConfig,
|
uiConfig,
|
||||||
context,
|
|
||||||
projects,
|
projects,
|
||||||
addons,
|
addons,
|
||||||
apiCalls,
|
apiCalls,
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import api from './api';
|
import api from './api';
|
||||||
import { dispatchError } from '../util';
|
import { dispatchError } from '../util';
|
||||||
import { receiveConfig } from '../ui-config/actions';
|
import { receiveConfig } from '../ui-config/actions';
|
||||||
import { receiveContext } from '../context/actions';
|
|
||||||
import { receiveFeatureTypes } from '../feature-type/actions';
|
import { receiveFeatureTypes } from '../feature-type/actions';
|
||||||
import { receiveProjects } from '../project/actions';
|
import { receiveProjects } from '../project/actions';
|
||||||
import { receiveTagTypes } from '../tag-type/actions';
|
import { receiveTagTypes } from '../tag-type/actions';
|
||||||
@ -17,7 +16,6 @@ export function fetchUiBootstrap() {
|
|||||||
.then(json => {
|
.then(json => {
|
||||||
dispatch(receiveProjects(json.projects));
|
dispatch(receiveProjects(json.projects));
|
||||||
dispatch(receiveConfig(json.uiConfig));
|
dispatch(receiveConfig(json.uiConfig));
|
||||||
dispatch(receiveContext(json.context));
|
|
||||||
dispatch(receiveTagTypes(json));
|
dispatch(receiveTagTypes(json));
|
||||||
dispatch(receiveFeatureTypes(json.featureTypes));
|
dispatch(receiveFeatureTypes(json.featureTypes));
|
||||||
dispatch(receiveStrategies(json.strategies));
|
dispatch(receiveStrategies(json.strategies));
|
||||||
|
Loading…
Reference in New Issue
Block a user