cashay icon indicating copy to clipboard operation
cashay copied to clipboard

Cannot read property 'length' of undefined

Open dustinfarris opened this issue 8 years ago • 4 comments

I am getting this error on subsequent updates to a query that looks like this:

const itemsByNameQuery = `

query {
  itemsByName(query: $query) {
    id
    name
  }
}

`;


const stateToComputed = (state, props) => {

  if (!props.query) { return {} }

  const { data: { itemsByName } } = cashay.query(itemsByNameQuery, {
    op: 'item-select',
    key: props.query,
    variables: { query: props.query }
  });

  return { items: itemsByName };
}

it's for a search box that updates as you type.

the first hit goes through ok, but the second time around throws the above error.

in visitObject here

leading to visitIterable here where the error is thrown

dustinfarris avatar Dec 31 '16 07:12 dustinfarris

i'll need to know all the variables that are used here: https://github.com/mattkrick/cashay/blob/8d9174d478b63883f68b64f82c183b60a3aad0c4/src/normalize/denormalizeStore.js#L75. I'm not sure how fieldState could be undefined.

mattkrick avatar Jan 01 '17 02:01 mattkrick

I have exactly the same error:

Uncaught TypeError: Cannot read property 'length' of undefined
    at visitIterable (denormalizeStore.js:137)
    at visitObject (denormalizeStore.js:111)
    at denormalizeStore (denormalizeStore.js:178)
    at CachedQuery.createResponse (helperClasses.js:89)
    at Cashay.query (Cashay.js:443)
    at ProxyComponent.mapStateToProps [as finalMapStateToProps] (calendar.jsx:192)
    at ProxyComponent.computeStateProps (connect.js:146)
    at ProxyComponent.computeStateProps (createPrototypeProxy.js:44)
    at ProxyComponent.updateStatePropsIfNeeded (connect.js:204)
    at ProxyComponent.updateStatePropsIfNeeded (createPrototypeProxy.js:44)

(with real line numbers)

It happens when the variables are modified, except the first time. If I use "setVariables" returning currentVariables there is no problem. If I return something else, I have the error.

Some code:

const eventsQuery = `
  query($from: Date, $to: Date) {
    events(from: $from, to: $to) {
      id
      title
      url
      start
      end
    }
  }
`

const mapStateToProps = (state) => {
  return {
    events: cashay.query(eventsQuery, {
      op: 'eventList',
    })
  }
}

class Calendar extends React.Component {
  componentDidMount() {
    $(this.calendarRef).calendar({
      events_source: (from, to) => {
        const {setVariables} = this.props.events
        setVariables(currentVariables => {
          const newVariables = {
            from: new Date(from).getTime(),
            to:   new Date(to).getTime()
          }
          console.log(currentVariables)
          console.log(newVariables)
          return newVariables
        })
        return []
      }
    })
  }

Anything else I could provide?

@dustinfarris : have you found any explanation?

slaivyn avatar Jan 30 '17 16:01 slaivyn

@slaivyn I was not able to get this to work.

I ended up running the query manually:

const { data } = cashay.getTransport().handleQuery({ query, variables });

dustinfarris avatar Jan 30 '17 16:01 dustinfarris

Thank you @dustinfarris!

slaivyn avatar Feb 05 '17 10:02 slaivyn