mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	POST and PUT on toggles works now, but needs a bit cleanup
This commit is contained in:
		
							parent
							
								
									ec77cd05ec
								
							
						
					
					
						commit
						de9f0ab743
					
				| @ -7,7 +7,7 @@ const Feature = ({ onClick, name, enabled, strategies }) => ( | |||||||
|   <tr> |   <tr> | ||||||
|     <td style={{ paddingTop: '1.5rem' }}><Switch onChange={onClick} checked={enabled} /></td> |     <td style={{ paddingTop: '1.5rem' }}><Switch onChange={onClick} checked={enabled} /></td> | ||||||
|     <td><a href="/edit">{name}</a></td> |     <td><a href="/edit">{name}</a></td> | ||||||
|     <td>{strategies.map(s => `${s.name}, `)}</td> |     <td>{strategies.map(s => s.name).join(', ')}</td> | ||||||
|     <td style={{ textAlign: 'right' }}> |     <td style={{ textAlign: 'right' }}> | ||||||
|       <FontIcon value="edit" /> |       <FontIcon value="edit" /> | ||||||
|       <FontIcon value="delete"  style={{ color: 'red' }} /> |       <FontIcon value="delete"  style={{ color: 'red' }} /> | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ export default class FeatureList extends React.Component { | |||||||
|         const features = this.props.features.map(featureToggle => |         const features = this.props.features.map(featureToggle => | ||||||
|                 <Feature key={featureToggle.name} |                 <Feature key={featureToggle.name} | ||||||
|                     {...featureToggle} |                     {...featureToggle} | ||||||
|                     onClick={() => onFeatureClick(featureToggle.name)} |                     onClick={() => onFeatureClick(featureToggle)} | ||||||
|                 /> |                 /> | ||||||
|             ); |             ); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,9 +1,14 @@ | |||||||
|  | import { urls } from './urls'; | ||||||
|  | 
 | ||||||
| export const ADD_FEATURE_TOGGLE             = 'ADD_FEATURE_TOGGLE'; | export const ADD_FEATURE_TOGGLE             = 'ADD_FEATURE_TOGGLE'; | ||||||
|  | export const UPDATE_FEATURE_TOGGLE          = 'UPDATE_FEATURE_TOGGLE'; | ||||||
| export const TOGGLE_FEATURE_TOGGLE          = 'TOGGLE_FEATURE_TOGGLE'; | export const TOGGLE_FEATURE_TOGGLE          = 'TOGGLE_FEATURE_TOGGLE'; | ||||||
| export const REQUEST_FEATURE_TOGGLES        = 'REQUEST_FEATURE_TOGGLES'; | export const REQUEST_FEATURE_TOGGLES        = 'REQUEST_FEATURE_TOGGLES'; | ||||||
|  | export const REQUEST_UPDATE_FEATURE_TOGGLES = 'REQUEST_UPDATE_FEATURE_TOGGLES'; | ||||||
| export const RECEIVE_FEATURE_TOGGLES        = 'RECEIVE_FEATURE_TOGGLES'; | export const RECEIVE_FEATURE_TOGGLES        = 'RECEIVE_FEATURE_TOGGLES'; | ||||||
| export const ERROR_RECEIVE_FEATURE_TOGGLES  = 'ERROR_RECEIVE_FEATURE_TOGGLES'; | export const ERROR_RECEIVE_FEATURE_TOGGLES  = 'ERROR_RECEIVE_FEATURE_TOGGLES'; | ||||||
| export const ERROR_CREATING_FEATURE_TOGGLE  = 'ERROR_CREATING_FEATURE_TOGGLE'; | export const ERROR_CREATING_FEATURE_TOGGLE  = 'ERROR_CREATING_FEATURE_TOGGLE'; | ||||||
|  | export const ERROR_UPDATING_FEATURE_TOGGLE  = 'ERROR_UPDATING_FEATURE_TOGGLE'; | ||||||
| 
 | 
 | ||||||
| function addFeatureToggle (featureToggle) { | function addFeatureToggle (featureToggle) { | ||||||
|     return { |     return { | ||||||
| @ -12,6 +17,13 @@ function addFeatureToggle (featureToggle) { | |||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | function updateFeatureToggle (featureToggle) { | ||||||
|  |     return { | ||||||
|  |         type: UPDATE_FEATURE_TOGGLE, | ||||||
|  |         featureToggle, | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| function errorCreatingFeatureToggle (statusCode) { | function errorCreatingFeatureToggle (statusCode) { | ||||||
|     return { |     return { | ||||||
|         type: ERROR_CREATING_FEATURE_TOGGLE, |         type: ERROR_CREATING_FEATURE_TOGGLE, | ||||||
| @ -20,10 +32,20 @@ function errorCreatingFeatureToggle (statusCode) { | |||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export const toggleFeature = (featureName) => ({ | function errorUpdatingFeatureToggle (statusCode) { | ||||||
|     type: TOGGLE_FEATURE_TOGGLE, |     return { | ||||||
|     name: featureName, |         type: ERROR_UPDATING_FEATURE_TOGGLE, | ||||||
| }); |         statusCode, | ||||||
|  |         receivedAt: Date.now(), | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function toggleFeature (featureToggle) { | ||||||
|  |     return dispatch => { | ||||||
|  |         const newValue = Object.assign({}, featureToggle, { enabled: !featureToggle.enabled }); | ||||||
|  |         dispatch(requestUpdateFeatureToggle(newValue)); | ||||||
|  |     }; | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| function requestFeatureToggles () { | function requestFeatureToggles () { | ||||||
| @ -40,6 +62,12 @@ function receiveFeatureToggles (json) { | |||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | function requestUpdateFeatureToggles () { | ||||||
|  |     return { | ||||||
|  |         type: REQUEST_UPDATE_FEATURE_TOGGLES, | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function errorReceiveFeatureToggles (statusCode) { | function errorReceiveFeatureToggles (statusCode) { | ||||||
|     return { |     return { | ||||||
|         type: ERROR_RECEIVE_FEATURE_TOGGLES, |         type: ERROR_RECEIVE_FEATURE_TOGGLES, | ||||||
| @ -51,7 +79,7 @@ function errorReceiveFeatureToggles (statusCode) { | |||||||
| export function fetchFeatureToggles () { | export function fetchFeatureToggles () { | ||||||
|     return dispatch => { |     return dispatch => { | ||||||
|         dispatch(requestFeatureToggles()); |         dispatch(requestFeatureToggles()); | ||||||
|         return fetch('/features') |         return fetch(urls.features) | ||||||
|             .then(response => { |             .then(response => { | ||||||
|                 if (response.ok) { |                 if (response.ok) { | ||||||
|                     return response.json(); |                     return response.json(); | ||||||
| @ -66,16 +94,17 @@ export function fetchFeatureToggles () { | |||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const headers = { | ||||||
|  |     'Accept': 'application/json', | ||||||
|  |     'Content-Type': 'application/json', | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| export function createFeatureToggles (featureToggle) { | export function createFeatureToggles (featureToggle) { | ||||||
|     return dispatch => { |     return dispatch => { | ||||||
|         dispatch(requestFeatureToggles()); |         dispatch(requestUpdateFeatureToggles()); | ||||||
|         return fetch('/features', { |         return fetch(urls.features, { | ||||||
|             method: 'POST', |             method: 'POST', | ||||||
|             headers: { |             headers, | ||||||
|                 'Accept': 'application/json', |  | ||||||
|                 'Content-Type': 'application/json', |  | ||||||
|             }, |  | ||||||
|             body: JSON.stringify(featureToggle), |             body: JSON.stringify(featureToggle), | ||||||
|         }) |         }) | ||||||
|         .then(response => { |         .then(response => { | ||||||
| @ -89,3 +118,24 @@ export function createFeatureToggles (featureToggle) { | |||||||
|         .catch(error => dispatch(errorCreatingFeatureToggle(error))); |         .catch(error => dispatch(errorCreatingFeatureToggle(error))); | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export function requestUpdateFeatureToggle (featureToggle) { | ||||||
|  |     return dispatch => { | ||||||
|  |         dispatch(requestUpdateFeatureToggles()); | ||||||
|  |         return fetch(`${urls.features}/${featureToggle.name}`, { | ||||||
|  |             method: 'PUT', | ||||||
|  |             headers, | ||||||
|  |             body: JSON.stringify(featureToggle), | ||||||
|  |         }) | ||||||
|  |         .then(response => { | ||||||
|  |             if (!response.ok) { | ||||||
|  |                 let error = new Error('failed fetching'); | ||||||
|  |                 error.status = response.status; | ||||||
|  |                 throw error; | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|  |         .then(() => dispatch(updateFeatureToggle(featureToggle))) | ||||||
|  |         .catch(error => dispatch(errorUpdatingFeatureToggle(error))); | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -1,22 +1,18 @@ | |||||||
| import { | import { | ||||||
|     ADD_FEATURE_TOGGLE, |     ADD_FEATURE_TOGGLE, | ||||||
|     TOGGLE_FEATURE_TOGGLE, |  | ||||||
|     RECEIVE_FEATURE_TOGGLES, |     RECEIVE_FEATURE_TOGGLES, | ||||||
|  |     UPDATE_FEATURE_TOGGLE, | ||||||
| } from './featureToggleActions'; | } from './featureToggleActions'; | ||||||
| 
 | 
 | ||||||
| const feature = (state = {}, action) => { | const feature = (state = {}, action) => { | ||||||
|     switch (action.type) { |     switch (action.type) { | ||||||
|         case ADD_FEATURE_TOGGLE: |         case ADD_FEATURE_TOGGLE: | ||||||
|             return action.featureToggle; |             return action.featureToggle; | ||||||
|         case TOGGLE_FEATURE_TOGGLE: |         case UPDATE_FEATURE_TOGGLE: | ||||||
|             if (state.name !== action.name) { |             if (state.name !== action.featureToggle.name) { | ||||||
|                 return state; |                 return state; | ||||||
|             } |             } | ||||||
| 
 |             return action.featureToggle; | ||||||
|             return Object.assign({}, state, { |  | ||||||
|                 enabled: !state.enabled, |  | ||||||
|             }); |  | ||||||
| 
 |  | ||||||
|         default: |         default: | ||||||
|             return state; |             return state; | ||||||
|     } |     } | ||||||
| @ -29,7 +25,7 @@ const features = (state = [], action) => { | |||||||
|                 ...state, |                 ...state, | ||||||
|                 feature(undefined, action), |                 feature(undefined, action), | ||||||
|             ]; |             ]; | ||||||
|         case TOGGLE_FEATURE_TOGGLE: |         case UPDATE_FEATURE_TOGGLE: | ||||||
|             return state.map(t => |             return state.map(t => | ||||||
|             feature(t, action) |             feature(t, action) | ||||||
|         ); |         ); | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								packages/unleash-frontend-next/src/store/urls.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								packages/unleash-frontend-next/src/store/urls.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | export const urls = { | ||||||
|  |     features: '/features', | ||||||
|  |     strategies: '/strategies', | ||||||
|  |     events: '/events', | ||||||
|  |     archive: '/archive/features', | ||||||
|  | }; | ||||||
| @ -62,6 +62,14 @@ module.exports = { | |||||||
|                 target: 'http://localhost:4242', |                 target: 'http://localhost:4242', | ||||||
|                 secure: false, |                 secure: false, | ||||||
|             }, |             }, | ||||||
|  |             '/strategies': { | ||||||
|  |                 target: 'http://localhost:4242', | ||||||
|  |                 secure: false, | ||||||
|  |             }, | ||||||
|  |             '/archive': { | ||||||
|  |                 target: 'http://localhost:4242', | ||||||
|  |                 secure: false, | ||||||
|  |             }, | ||||||
|         }, |         }, | ||||||
|     }, |     }, | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user