UNPKG

patternplate-client

Version:

Universal javascript client application for patternplate

66 lines (52 loc) 1.38 kB
import path from 'path'; import {createAction} from 'redux-actions'; import {loadPatternData, loadPatternFile, loadPatternDemo} from './'; import urlQuery from '../utils/url-query'; export default loadPattern; function loadPattern() { return async (dispatch, getState) => { const state = getState(); if (state.id === '..') { return; } const location = state.routing.locationBeforeTransitions; const {environment = 'index'} = location.query; const type = path.basename(state.sourceId) === 'index.md' ? 'source' : state.sourceType; const dataPayload = { id: state.id, query: { environment }, options: { base: state.base } }; const actions = [ loadPatternData(dataPayload), loadPatternDemo(true) ]; const jobs = actions.map(dispatch); const id = urlQuery.parse(state.sourceId || '').pathname; if (id && id !== 'relations') { jobs.push(dispatch(loadPatternFile({ base: state.base, environment, id: state.sourceId, type }))); } await least(1000, Promise.all(jobs)); }; } function wait(timeout, value) { return new Promise(resolve => setTimeout(() => resolve(value), timeout)); } function least(timeout, thenable) { const then = new Date(); return Promise.resolve(thenable) .then(result => { const delta = 1000 - (new Date() - then) % 1000; return wait(delta, result); }); }