35 lines
		
	
	
		
			862 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			862 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								const throwIfUndefined = () => {
							 | 
						||
| 
								 | 
							
								  throw new TypeError('Argument must not be of  type `undefined`');
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// createEventMetaCreator({
							 | 
						||
| 
								 | 
							
								//   category: String,
							 | 
						||
| 
								 | 
							
								//   action: String,
							 | 
						||
| 
								 | 
							
								//   label?: String,
							 | 
						||
| 
								 | 
							
								//   value?: Number
							 | 
						||
| 
								 | 
							
								// }) => () => Object
							 | 
						||
| 
								 | 
							
								export const createEventMetaCreator = ({
							 | 
						||
| 
								 | 
							
								  // categories are features or namespaces of the app (capitalized):
							 | 
						||
| 
								 | 
							
								  // Map, Nav, Challenges, and so on
							 | 
						||
| 
								 | 
							
								  category = throwIfUndefined,
							 | 
						||
| 
								 | 
							
								  // can be a one word the event
							 | 
						||
| 
								 | 
							
								  // click, play, toggle.
							 | 
						||
| 
								 | 
							
								  // This is not a hard and fast rule
							 | 
						||
| 
								 | 
							
								  action = throwIfUndefined,
							 | 
						||
| 
								 | 
							
								  // any additional information
							 | 
						||
| 
								 | 
							
								  // when in doubt use redux action type
							 | 
						||
| 
								 | 
							
								  // or a short sentence describing the
							 | 
						||
| 
								 | 
							
								  // action
							 | 
						||
| 
								 | 
							
								  label,
							 | 
						||
| 
								 | 
							
								  // used to tack some specific value for a GA event
							 | 
						||
| 
								 | 
							
								  value
							 | 
						||
| 
								 | 
							
								} = throwIfUndefined) => () => ({
							 | 
						||
| 
								 | 
							
								  analytics: {
							 | 
						||
| 
								 | 
							
								    type: 'event',
							 | 
						||
| 
								 | 
							
								    category,
							 | 
						||
| 
								 | 
							
								    action,
							 | 
						||
| 
								 | 
							
								    label,
							 | 
						||
| 
								 | 
							
								    value
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |