I think it’s better to access user organizations through their identifier. Here is a possible way to organize your condition:
{
user: {
id: 1,
first_name: 'Andrew',
last_name: 'McLagan',
email: 'andrew@example.com',
organization: 3,
},
organizations: {
1: {id: 1, name: 'Facebook', suburb: 'Booklyn', phone: '000-000-000',},
2: {id: 2, name: 'Twitter', suburb: 'Manhattan', phone: '456-456-000'},
3: {id: 3, name: 'Foo Bar Co.', suburb: 'Booklyn', phone: '123-123-000'},
4: {id: 4, name: 'Some Org.', suburb: 'Bronx', phone: '642-642-000'},
}
}
Using vanilla Redux
If you want to get the current user and his organization, you can use the following selector:
function mapStateToProps(state) {
return {
user: state.user,
organization: state.organizations[state.user.organization]
}
}
. :
function mapStateToProps(state) {
return {
organizations: Object.values(state.organizations),
}
}
, reselect . :
const getAllOrganizations = createSelector(
state => state.organizations,
orgs => Object.values(orgs)
)
const getUser = state => state.user
const getUserOrganization = createSelector(
[
state => state.user,
state => state.organizations,
],
(user, orgs) => orgs[user.organization],
)
mapStateToProps. :
function mapStateToProps(state) {
return {
user: getUser(state),
organization: getUserOrganization(state),
}
}
const mapStateToProps = getAllOrganizations