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)
}
示例#10
0
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))
}
示例#23
0
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))
}
示例#28
0
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))
}