inertia-sails
Version:
The Sails adapter for Inertia.
56 lines (47 loc) • 1.76 kB
JavaScript
const isInertiaPartialRequest = require('../helpers/is-inertia-partial-request')
const isInertiaRequest = require('../helpers/is-inertia-request')
const ignoreFirstLoadSymbol = require('../helpers/ignore-first-load-symbol')
const { PARTIAL_DATA, PARTIAL_EXCEPT } = require('../helpers/inertia-headers')
const resolveOnlyProps = require('./resolve-only-props')
const resolveExceptProps = require('./resolve-except-props')
const { filterOnceProps } = require('./resolve-once-props')
const AlwaysProp = require('./always-prop')
/**
* @typedef {import('../types').InertiaRequest} InertiaRequest
* @typedef {import('../types').InertiaProps} InertiaProps
*/
/**
* @param {InertiaRequest} req
* @param {string} component
* @param {InertiaProps} [props]
* @returns {InertiaProps}
*/
module.exports = function pickPropsToResolve(req, component, props = {}) {
const isPartial = isInertiaPartialRequest(req, component)
const isInertia = isInertiaRequest(req)
let newProps = props
if (!isPartial) {
newProps = Object.fromEntries(
Object.entries(props).filter(([_, value]) => {
if (value && /** @type {any} */ (value)[ignoreFirstLoadSymbol]) {
return false
}
return true
})
)
}
if (isPartial && req.get(PARTIAL_DATA)) {
newProps = resolveOnlyProps(req, newProps)
}
if (isPartial && req.get(PARTIAL_EXCEPT)) {
newProps = resolveExceptProps(req, newProps)
}
// Filter out once-props that the client already has (only for Inertia XHR requests, not partial)
if (isInertia && !isPartial) {
newProps = filterOnceProps(req, newProps)
}
for (const [key, value] of Object.entries(props)) {
if (value instanceof AlwaysProp) newProps[key] = props[key]
}
return newProps
}