All files / module/helpers processResponseData.js

50% Statements 8/16
41.67% Branches 5/12
75% Functions 3/4
50% Lines 8/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86            8x                     8x                                                                                           8x 8x   8x   8x         8x       8x                
import { setResourceObjectsForModule } from './setResourceObjectsForModule'
import { hasOwn } from '../../shared/utils'
import { ResourceProxy } from '../../api/ResourceProxy'
import { ModuleBuilder } from '../ModuleBuilder'
 
function isAllowedRelatedModule (relatedModule, currentMethod) {
  return relatedModule !== null &&
    relatedModule.state.options.absoluteMethods.includes(currentMethod)
}
 
/**
 * Check if a module is registered in the store
 *
 * @param {Vuex} store
 * @param {String} moduleName
 */
function isMissingModule (store, moduleName) {
  return Object.keys(store._modules.root._children).indexOf(moduleName) < 0
}
 
/**
 * Register a standalone module to the store.
 *
 * @param {ResourcefulApi} api
 * @param {String} moduleName
 */
function registerMissingModule (api, moduleName) {
  let resourceProxy = api[moduleName]
  if (!resourceProxy) {
    resourceProxy = new ResourceProxy()
  }
 
  const builder = new ModuleBuilder(
    api,
    moduleName,
    resourceProxy,
    { standalone: true }
  )
 
  api.store.registerModule(
    moduleName,
    builder.build()
  )
}
 
/**
 * Process the (normalized) data part of a response
 *
 * @param {Object} vuexFns
 * @param {ResourcefulApi} api
 * @param {String} currentModule  name of the current storeModule
 * @param {Object} data           payload from request
 * @param {String} currentMethod  default = ''
 * @param {Object} relatedModule         storeModule
 */
export function processResponseData (
  vuexFns,
  api,
  currentModule,
  data,
  currentMethod = '',
  relatedModule = null
) {
  for (const itemType in data) {
    let registeredModule = itemType
 
    Iif (isAllowedRelatedModule(relatedModule, currentMethod)) {
      registeredModule = currentModule
    } else Iif (!hasOwn(data, itemType)) {
      // TODO: add error here, invalid resource format
      continue
    }
 
    Iif (isMissingModule(api.store, registeredModule)) {
      registerMissingModule(api, registeredModule)
    }
 
    setResourceObjectsForModule(
      vuexFns,
      currentModule,
      registeredModule,
      data[itemType]
    )
  }
}