export function createModuleCommentAction (tree, params, module, comment) { const {company, workspace, folder, report} = params const level = inferLevelFromParams(params) return createModuleComment(level, params[level], module, comment, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(function onSuccess (response) { const path = compact([ 'user', ['companies', company], workspace && ['workspaces', workspace], folder && ['folders', folder], ['reports', report], ['modules', module], ['comments', response.data.id] ]) const cursor = getDeepCursor(tree, path) tree.set(cursor, response.data) tree.commit() return response }) .catch(pushResponseErrorToState(tree)) }
export function loadCriteriaNameAction (tree, ids) { function onSuccess (response) { tree.set('locationCriteria', assign({}, response.data, tree.get('locationCriteria'))) tree.commit() forEach(ids, id => { delete onGoingCalls[id] }) return response } const promise = loadCriteriaName(ids, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(onSuccess) .catch(pushResponseErrorToState(tree)) forEach(ids, id => { onGoingCalls[id] = promise }) return promise }
export function cloneReportAction (tree, params, report) { const level = inferLevelFromParams(params) return cloneReport(level, params[level], report, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function loadUserCompaniesAction (tree, token) { return loadUserCompanies(getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) .then(mergeList(tree, [ 'user', 'companies' ])) .catch(pushResponseErrorToState(tree)) }
export function updateWorkspaceAction (tree, company, workspace) { return updateWorkspace(workspace, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace.id] ])) .catch(pushResponseErrorToState(tree)) }
export function loadGAPropertiesAction (tree, {company}, {tetris_id, external_id}) { return loadGAProperties(company, tetris_id, external_id, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['accounts', external_id, 'external_id'], 'properties' ])) .catch(pushResponseErrorToState(tree)) }
export function loadDeliveryMethodsAction (tree, token) { return loadDeliveryMethods(getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) .then(function onSuccess (response) { tree.set(['deliveryMethods'], response.data) tree.commit() return response }) .catch(pushResponseErrorToState(tree)) }
export function loadCampaignShoppingSetupAction (tree, {company, workspace, folder, campaign}) { return loadCampaignShoppingSetup(campaign, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(mergeResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], ['campaigns', campaign] ])) .catch(pushResponseErrorToState(tree)) }
export function loadFolderBidStrategiesAction (tree, {company, workspace, folder}) { return loadFolderBidStrategies(folder, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], 'bidStrategies' ])) .catch(pushResponseErrorToState) }
export function createAppExtensionAction (tree, {company, workspace, folder}, feedId, app) { return createAppExtension(folder, feedId, app, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], 'apps' ], push)) .catch(pushResponseErrorToState(tree)) }
export function loadAccountDetailsAction (tree, {company, workspace, folder}, fresh = false) { return loadAccountDetails(folder, fresh, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], 'account', 'details' ])) .catch(pushResponseErrorToState(tree)) }
export function favoriteWorkspaceAction (tree, {company, workspace}) { return favoriteWorkspace(workspace, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(response => { tree.merge(getDeepCursor(tree, [ 'user', ['companies', company], ['workspaces', workspace] ]), {favorite: true}) return response }) .catch(pushResponseErrorToState(tree)) }
export function createLocationFeedItemAction (tree, {company, workspace, folder, campaign}, feedId, location) { return createLocationFeedItem(folder, feedId, location, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], ['campaign', campaign], 'details', 'locations' ], push)) .catch(pushResponseErrorToState(tree)) }
export function loadAdGroupPartitionsAction (tree, {company, workspace, folder, campaign, adGroup}) { return loadAdGroupPartitions(campaign, adGroup, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], ['campaigns', campaign], ['adGroups', adGroup], 'partitions' ])) .catch(pushResponseErrorToState(tree)) }
export function updateReportAction (tree, {company, workspace, folder}, report) { const path = getDeepCursor(tree, compact([ 'user', ['companies', company], workspace && ['workspaces', workspace], folder && ['folders', folder], ['reports', report.id] ])) tree.merge(path, report) return updateReport(company, report, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
function sendModuleChanges (tree, params, moduleId) { const cursorPath = getDeepCursor(tree, compact([ 'user', ['companies', params.company], params.workspace && ['workspaces', params.workspace], params.folder && ['folders', params.folder], ['reports', params.report], ['modules', moduleId] ])) const level = inferLevelFromParams(params) const moduleChanges = omit(tree.get(cursorPath), 'result', 'query', 'isLoading', 'cropped') updateModule(moduleChanges, level, params[level], getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function deleteOrderAction (tree, {company, workspace, folder}, order) { return deleteOrder(order, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(r => { tree.unset(getDeepCursor(tree, compact([ 'user', ['companies', company], workspace && ['workspaces', workspace], folder && ['folders', folder], ['orders', order] ]))) tree.commit() return r }) .catch(pushResponseErrorToState(tree)) }
export function loadBundlePreviewUrlAction (tree, {company, workspace, folder, campaign}, adGroupId, adId, bundleId) { register[bundleId] = register[bundleId] || loadBundlePreviewUrl(folder, bundleId, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) return register[bundleId] .then(saveResponseData(tree, compact([ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], campaign && ['campaigns', campaign], ['adGroups', adGroupId], ['ads', adId], 'preview' ]))) }
export function unlinkCampaignsAction (tree, company, workspace, folder, campaigns) { const cursor = getDeepCursor(tree, [ 'user', ['companies', company], ['workspaces', workspace], ['folders', folder], 'campaigns' ]) const remainingCampaigns = filter(tree.get(cursor), ({id}) => !includes(campaigns, id)) tree.set(cursor, remainingCampaigns) tree.commit() return unlinkCampaigns(folder, campaigns, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function loadReportShareUrlAction (tree, params, report, {from, to}) { const level = inferLevelFromParams(params) const path = compact([ 'user', ['companies', params.company], params.workspace && ['workspaces', params.workspace], params.folder && ['folders', params.folder], ['reports', report] ]) const saveUrl = ({url: shareUrl}, report) => assign({}, report, {shareUrl}) return loadReportShareUrl(level, params[level], report, from, to, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, path, saveUrl)) .catch(pushResponseErrorToState(tree)) }
export function loadRecentAction (tree, level, params, token) { const {company, workspace, folder, campaign, order, report} = params const path = compact([ 'user', company && ['companies', company], workspace && ['workspaces', workspace], folder && ['folders', folder], campaign && ['campaigns', campaign], order && ['orders', order], report && ['reports', report], camelCase(`recent ${level}`) ]) return loadRecent(level, params, getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) .then(saveResponseData(tree, path)) .catch(pushResponseErrorToState(tree)) }
export function cloneModuleAction (tree, params, module, newModule) { const {company, workspace, folder, report} = params return cloneModule(params, module, newModule, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .then(function onSuccess (response) { const modulesCursor = getDeepCursor(tree, compact([ 'user', ['companies', company], workspace && ['workspaces', workspace], folder && ['folders', folder], ['reports', report], 'modules' ])) tree.push(modulesCursor, response.data) touchReport(tree, params) tree.commit() return response }) .catch(pushResponseErrorToState(tree)) }
export function sendHitAction (tree, level, params, token) { return sendHit(level, params, getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) }
export function updateCampaignCreativesAction (tree, {campaign}, adGroups) { return updateCreatives(campaign, normalizeAdGroups(adGroups), getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function createWorkspaceAction (tree, company, workspace) { return createWorkspace(company, workspace, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function getAliasesAction (tree, ids, token) { return getAliases(ids, getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function spawnReportMailingAction (tree, mailing) { return spawnReportMailing(mailing, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function saveOrderAction (tree, order) { const save = order.id ? updateOrder : createOrder return save(order, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }
export function loadFolderCampaignsAction (tree, company, workspace, folder, queryFlag = false, token = null) { return loadFolderCampaigns(folder, queryFlag, getApiFetchConfig(tree, token)) .then(saveResponseTokenAsCookie) .then(saveCampaigns(tree, company, workspace, folder)) .catch(pushResponseErrorToState(tree)) }
export function createMailingReportAction (tree, params, mailing) { return createMailing(params, mailing, getApiFetchConfig(tree)) .then(saveResponseTokenAsCookie) .catch(pushResponseErrorToState(tree)) }