firestoreConnect: firestore.ordered не определено - PullRequest
0 голосов
/ 25 февраля 2020

Расположение моих данных в Firestore:

Пользовательские документы содержат массив ссылок id на документы чата.

Пример:

collections
    /users
        'CQATa3f3d2XmBskmmt8hmCJhzcJ2'
             name: '...'
             email: '...'
             chats: ["RuUKEwsGtR9QylicdgJW", "JlzcIfkZ1KzeXClhJvOE"]
    /chats
        ...    

Для текущего пользователя я хочу получить объект чата, связанный с каждым элементом в его массиве чата. Эти данные должны go в firestore.ordered, чтобы я мог предоставить их в FlatList, но firestore.ordered.chats всегда неопределен, даже если firestore.data.chats содержит правильные данные.

I'm не уверен, что это проблема, связанная с порядком, в котором я вызываю connect и firestoreConnect, или с тем, как я использую заполнения, или с чем-то еще.

... Component ...


const populates = [
  { child: 'chats', root: 'chats' }
]

const mapStateToProps = (state, props) => { 
  return {
    auth: state.firebase.auth,
    user: populate(state.firestore, 'users', populates),
    chats: state.firestore.ordered.chats,
  }
}

// ---- TEST ----
export default compose(
  connect(mapStateToProps, mapDispatchToProps),
  firestoreConnect((props) => {
    return [ { collection: 'users', doc: props.auth.uid, populates } ]
  }),
)(Main)

Результат регистрации состояния внутри mapStateToProps:

enter image description here

1 Ответ

0 голосов
/ 25 февраля 2020

В итоге я просто получил массив чатов из результата вызова populate.

const populates = [
{ child: 'chats', root: 'chats', keyProp: 'subjectName', queryParams: ['orderByKey'] } 
]


const mapStateToProps = (state, props) => { 
  const populatedUser = populate(state.firestore, 'users', populates)
  let chats = null
  if(populatedUser){
    chats = Object.values(populatedUser[state.firebase.auth.uid].chats)
  }
  return {
    auth: state.firebase.auth,
    user: populatedUser,
    chats: chats
  }
}

// ---- TEST ----
export default compose(
  connect(mapStateToProps, mapDispatchToProps),
  firestoreConnect((props) => {
    return [ { collection: 'users', doc: props.auth.uid, populates } ]
  }),
)(Main)
...