| 
									
										
										
										
											2021-01-05 14:24:53 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { merge } = require('lodash/fp'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const getDefaultState = () => ({ actions: [], models: [], fixtures: {} }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  | const createContext = (initialState) => { | 
					
						
							| 
									
										
										
										
											2021-01-05 14:24:53 +01:00
										 |  |  |   let state; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const contextApi = { | 
					
						
							|  |  |  |     get state() { | 
					
						
							|  |  |  |       return state; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     addAction(action) { | 
					
						
							|  |  |  |       state.actions.push(action); | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     addModel(model) { | 
					
						
							|  |  |  |       state.models.push(model); | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     addFixtures(modelName, entries) { | 
					
						
							|  |  |  |       state.fixtures = merge(state.fixtures, { [modelName]: entries }); | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resetState() { | 
					
						
							|  |  |  |       return this.setState({ ...getDefaultState(), ...initialState }); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setState(newState) { | 
					
						
							|  |  |  |       state = newState; | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return contextApi.resetState(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = { createContext }; |