// import fetchJsonp from 'fetch-jsonp' import * as types from '../types' // import { hashPath } from '../util' import { store } from '../store' import { get, post } from '../util' // import querystring from 'query-string' // urls const url = { upload: () => process.env.API_HOST + '/task/upload/blur', } export const publicUrl = { } // standard loading events const loading = (tag, offset) => ({ type: types.faceAnalysis.loading, tag, offset }) const loaded = (tag, data, offset = 0) => ({ type: types.faceAnalysis.loaded, tag, data, offset }) const polled = (data, offset = 0) => ({ type: types.faceAnalysis.poll, data, offset }) const error = (tag, err) => ({ type: types.faceAnalysis.error, tag, err }) // search UI functions export const updateOptions = opt => dispatch => { dispatch({ type: types.faceAnalysis.update_options, opt }) } // API functions // task polling const POLL_DELAY = 500 let pollTimeout = null export const poll = (payload, taskURL) => dispatch => { clearTimeout(pollTimeout) console.log('polling...') get(taskURL) .then(data => { console.log('poll', data) dispatch(polled(data)) if (data.state !== 'error' && data.state !== 'complete') { pollTimeout = setTimeout(() => poll(payload, taskURL), POLL_DELAY) } }) .catch(err => dispatch(error('result', err))) } export const upload = (payload, file) => dispatch => { const tag = 'task' const fd = new FormData() fd.append('query_img', file) dispatch(loading(tag)) post(url.upload(), fd) .then(data => { console.log('loaded!', tag, data) dispatch(loaded(tag, data)) const { result, taskURL } = data if (result && taskURL) { poll(payload, taskURL)(dispatch) } }) .catch(err => dispatch(error(tag, err))) }