* fix(files): Decouple files from challenges * feat(server/react): Remove action logger use redux remote devtools instead! * feat(Challenges): Disable js on edit, enable on execute * feat(Challenge/Preview): Show message when js is disabled * refactor(frameEpic): Reduce code by using lodash * feat(frameEpic): Disable js in preview by state * feat(frameEpic): Colocate epic in Challenges/redux * refactor(ExecuteChallengeEpic): CoLocated with Challenges * refactor(executeChallengesEpic): Separate tests from main logic * feat(Challenge/Preview): Update main on edit * feat(frameEpuc): Replace frame on edit/execute This allows for sandbox to work properly * fix(Challenges/Utils): Require utisl * revert(frameEpic): Hoist function to mount code in frame * fix(frameEpic): Ensure new frame is given classname * feat(executeChallenge): Update main on code unlocked * fix(frameEpic): Filter out empty test message * fix(Challenge/Preview): Remove unnessary quote in classname * feat(codeStorageEpic): Separate localstorage from solutions loading * fix(fetchUser): Merge user actions into one prefer many effects from one action over one action to one effect * fix(themes): Centralize theme utils and defs * fix(entities.user): Fix user reducer namespacing * feat(frame): Refactor frameEpic to util * feat(Challenges.redux): Should not attempt to update main from storage * fix(loadPreviousChallengeEpic): Refactor for RFR * fix(Challenges.Modern): Show preview plane
		
			
				
	
	
		
			20 lines
		
	
	
		
			500 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			500 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { ofType } from 'redux-epic';
 | 
						|
import {
 | 
						|
  types,
 | 
						|
 | 
						|
  fetchUserComplete,
 | 
						|
  createErrorObservable,
 | 
						|
  showSignIn
 | 
						|
} from './';
 | 
						|
 | 
						|
export default function getUserEpic(actions, _, { services }) {
 | 
						|
  return actions::ofType('' + types.fetchUser)
 | 
						|
    .flatMap(() => {
 | 
						|
      return services.readService$({ service: 'user' })
 | 
						|
        .filter(({ entities, result }) => entities && !!result)
 | 
						|
        .map(fetchUserComplete)
 | 
						|
        .defaultIfEmpty(showSignIn())
 | 
						|
        .catch(createErrorObservable);
 | 
						|
    });
 | 
						|
}
 |