AG-Grid: updateRowData ({update: ItemsArray}) влияет на все строки, а не на выбранные строки - PullRequest
0 голосов
/ 02 мая 2019

Я использую Ag-Grid и Angular для этого проекта, и я пытаюсь настроить горячие клавиши для изменения значения «Статус» выбранных строк, нажимая соответствующие клавиши («1» = «статус»). завершить »и т. д.). Существует встроенная функция с именем onCellKeyPress(), которая прослушивает нажатия клавиш после выбора строки или строк. Это прекрасно работает, у меня есть переключатель, который отправляет значение в зависимости от того, какая клавиша нажата, например:

  onCellKeyPress = (e: any) => {
    switch(e.event.key) {
      case '0': this.rowUpdates('New'); break;
      case '1': this.rowUpdates('Completed'); break;
      case '2': this.rowUpdates('Needs Attention'); break;
      case '3': this.rowUpdates('Rejected'); break;
    }
  }

Он отправляет строку в мою пользовательскую функцию rowUpdates(), которая принимает значение, проходит через существующие узлы, ищет любые выбранные, устанавливает значение для выбранных и помещает их в массив.

Теперь вот где начинается проблема. updateRowData принимает 2 параметра, во-первых, это тип обновления (добавление, удаление, обновление), в моем случае я использую последнее и массив строк для изменения.

  rowUpdates = (value: String) => {
    let itemsToUpdate = [];
    this.gridOptions.api.forEachNode(rowNode => {
      if(rowNode.isSelected() === true) {
        const selected = rowNode.data;
        selected.status.name = value;
        itemsToUpdate.push(selected);
        console.log(itemsToUpdate);
      }
    });
    this.gridOptions.api.updateRowData({update: itemsToUpdate});
  }

Однако, когда я нажимаю клавишу, чтобы изменить значение строки, она обновляет каждую строку в моей сетке. Что еще страннее, так это то, что у меня есть метод, который добавляет класс в строку в зависимости от значения «Status», и только строки, которые я намеревался изменить, получают этот класс.

Я в тупике. Я console.logged все в этой функции, и все они возвращаются с их предполагаемыми значениями. Массив всегда содержит выбранные узлы, и возвращаемое значение updateRowData всегда является тем же массивом. Я попытался переключить 'forEachNode' с getSelectedNodes и getSelectedRows безрезультатно. Есть идеи?

...