Lizz Parody
Lizz Parody

Reputation: 1765

Delete an item from an array in Redux

I'm learning redux and I was wondering how to delete one item from the state. I have this initial state:

export const getInitialState = () => {
  let state = {
    isLogged: false,
    organizations: [],
    userData: {},
    activeIndex: -1,
    currentRetrospective: {},
    hasFetched: false
  }

This is how the data lives inside organizations

  case `${actions.ACTION_GET_USER_ORGS}_FULFILLED`: {
    let activeIndex = 0
    if (state.activeIndex !== -1) {
      activeIndex = state.activeIndex
    } else if (action.payload.data.length === 0) {
      activeIndex = -1
    }
    return { ...state, activeIndex, organizations: action.payload.data, hasFetched: true }
  }

Now, what I need to do is to delete one item from the retrospectives array in an organization. I tried this but it doesn't work. Is there a better way to do it?

export default (state = getInitialState(), action) => {
  switch (action.type) {

  case `${actions.ACTION_DELETE_RETROSPECTIVE}_FULFILLED`: {

    const { organizations, activeIndex } = state

    const newOrganizations = JSON.parse(JSON.stringify(organizations))

    const activeOrganization = newOrganizations[activeIndex]

    activeOrganization.retrospectives = activeOrganization.retrospectives
      .filter((retro) => retro.id != action.retroId )

    return { ...state, organizations: newOrganizations }
  }

Thank you!

Upvotes: 0

Views: 897

Answers (1)

Steven Daniel Anderson
Steven Daniel Anderson

Reputation: 1443

you can filter the organization array like this:

 export default (state = getInitialState(), action) => {
      switch (action.type) {
          case `${actions.ACTION_DELETE_RETROSPECTIVE}_FULFILLED`: {
              return { 
                  ...state, 
                  organizations: state.organization.filter(retro => 
                      retro.id !== action.retroId }
      }

Upvotes: 1

Related Questions