Graphcool Mutation изменяет поля, которые не подходят для изменения - PullRequest
0 голосов
/ 25 марта 2019

У меня проблема с мутацией с использованием Graphcool и клиента Apollo, в моем приложении у меня был тип мягкого удаления, когда пользователь нажимает на удаление, а приложение запускает мутацию, чтобы изменить только одно поле в базе данных с именемdeleteAt, с null по умолчанию, но когда на нем были какие-то данные, он попал только на другую вкладку моего приложения.Проблема в том, что мутация получает текущее время, когда была нажата кнопка, примените это поле, но установите все остальные значения равными NULL, вызывая кучу проблем в остальной части моего приложения.Но я не понимаю, в чем проблема, кто-то может мне помочь?

здесь я называю свою функцию

  const handleConfirm = async () => {
    setDeleting(true)

    try {
     await updateEvent({ variables: { id: eventId, deletedAt: moment()}})
      await dataList.refetch()
     sendNotification(t({ id: 'deleted-event'}))
    } catch (err) {
      sendNotification(t({ id: 'failed-delete-event'}), 'error', err)
    }

    setDeleting(false)
    setOpen(false)
  }

и вот моя мутация

export default graphql(
  gql`
    mutation updateEvent(
      $id: ID!
      $canceled: Boolean
      $offreId: ID
      $vehiclesIds: [ID!]
      $employeesIds: [ID!]
      $deletedAt: DateTime
    ) {
      updateEvent(
        id: $id
        canceled: $canceled
        offreId: $offreId
        vehiclesIds: $vehiclesIds
        employeesIds: $employeesIds
        deletedAt: $deletedAt
      ) {
        id
        canceled
        vehicles {
          id
          name
          plate
        }
        eventStuffs {
          id
          quantity
          stuff {
            id
            name
          }
        }
        deletedAt
        offre {
          id
          showTotalBudgetsPdf
          rev
          version
          name
          maxPersons
          minPersons
          startTime
          endTime
          status
          gmtOffset
          client {
            id
            name
            email
            phone
            address
            clientContacts {
              id
              name
              email
            }
          }
          clientContact {
            id
            name
            email
            mobilePhone
            phoneNumber
          }
          language
          eventType {
            id
            name
          }
          place {
            id
            name
          }
          address
          city
          postalCode
          sectionItems {
            content
            h
            i
            id
            isDraggable
            isResizable
            maxH
            maxW
            minH
            minW
            moved
            static
            type
            w
            x
            y
            menu {
              id
              name
              price
              people
              startDate
              endDate
              hasItemsCold
              hasItemsHot
              hasItemsZHot
              hasItemsZCold
              hasItemsDessert
              kitchenNotes
              comment
              sections {
                id
                name
                showPdf
                itemProposals {
                  id
                  status
                  plats {
                    id
                    platTranslations {
                      id
                      name
                      language
                      description
                      internalDescription
                    }
                  }
                }
              }
            }
          }
          budgetLines {
            id
            description
            quantity
            unitPrice
            value
            total
            tax {
              id
              name
              value
            }
          }
          employeeEstimations {
            id
            estimatedEndAt
            estimatedStartAt
            number
            pricePerHour
            total
            job {
              id
              name
            }
          }
        }
      }
    }
  `,
  {
    name: "updateEvent",
  }
);

1 Ответ

0 голосов
/ 27 марта 2019

Попробуйте выполнить глубокое клонирование ответа вашего сервера в службах

getdatabyTeam(teamID: string): Promise<ITeam[]> {
return this.apollo.watchQuery<TeamResponse | any>({ variables: { _id: teamID }, query: listTeamID })
  .result()
  .then(response => _.cloneDeep(response.data.listTeamID))
  .catch(err => {
    console.log(err);
    return err;
  });}

С помощью глубокого клонирования вы можете решить эту проблему

...