ag-Grid is there a (checkboxClicked) event?












0















What I really hope to learn is whether ag-Grid has a (checkboxClicked) event that fires and gives you node data just like (rowClicked) and if not how I could implement such a thing.



Here's the description of my problem:
Right now I have check boxes on each row of the grid. The user needs to be able to click either the row or the checkbox to fire a function in order to access the data behind the grid but if we use (rowClicked) when we click the checkbox this event does not fire... So I looked into using (rowSelected), but when the grid is getting ready it will start firing as we are building our selection state for that grid. Is there a checkboxClicked event or something so that I do not have to customize this?



So far I have done this to get around my problem... as you can see the problem just occurs when i am setting up the check boxes as selected and its triggering the mapping function. So i Turn that off for the first 500 ms after those build functions have fired.



Thanks for any help you can provide! Thank you



component:



  buildSelectionStateFromId() {
this.buildSelectionStateFromIdIsRunning = true;
// we will have to loop over userIds array and select all the org admins
// input = orgVM.orgInfo.userIds && orgVM.orgInfo.
const admins = this.orgVM.orgAdmins;
this.agGrid.api.forEachNode(function (node) {
console.log('node: ', node);
admins.map(x => {
console.log('x: ', x);
if (node.data.id === x.id) {
console.log('node.data.id: ', node.data.id);
node.setSelected(true);
}
});
});
// output = actually checking the box based on the security ids in currentUser

this.buildingSelection();
}


toggleOnlySelectedRows(data) {
this.buildSelectionStateFromIdIsRunning = true;
this.toggleSelected = !this.toggleSelected;
console.log('this.toggleSelected: ', this.toggleSelected);
if (this.toggleSelected) {
let selectedRows;
const clone = [...(<any>this.agGrid.rowData)];
selectedRows = clone.filter((el) => this.getSelectedRows().includes(el));
this.agGrid.api.setRowData(selectedRows);
console.log('selectedRows: ', selectedRows);
this.buildSelectionStateFromId();
} else {
console.log('data: ', data);
this.agGrid.api.setRowData(data);
this.buildSelectionStateFromId();
}
this.buildingSelection();
}

buildingSelection() {
setTimeout(() => {
this.buildSelectionStateFromIdIsRunning = false;
}, 500);
}

mapClickToModel(rowClicked) {
console.log('rowClicked: ', rowClicked);
// *ag-Grid hint: if we use (rowSelected), it will start firing when we are building
// * our selection through any automated way like buildSelectionStateFromId();
// * if we use (rowClicked) when we click the checkbox mapClickToModel wont fire...
// * Another solution might be to not use their checkbox and just put our checkbox in a cell renderer?
// TODO: refactor this timing hack
if (this.buildSelectionStateFromIdIsRunning === false) {
// console.log('this.buildSelectionStateFromIdIsRunning: mpa click to model fired');

this.orgVM.orgUsers.map(x => {
// whenever a row is clicked I grab the id off it and see if it is equal to any on the orgUsers array
if (x.id === rowClicked.node.data.id) {
console.log('x.id: ', x.id);
// if it is then i check if the usertype is 1
if (x.userType === 1) {
// if it is then I change it to something else
x.userType = 0; // ! what do we change it to?
} else {
x.userType = 1;
}
}
});

}

}


template:



<ag-grid-angular #agGrid (componentStateChanged)="onGridReady($event)"
(rowSelected)="mapClickToModel($event)" (click)="mapClickToModel($event)"
(gridReady)="onGridReady($event)" style="width: 100%; height: 84%;"
class="of-grid-theme" rowMultiSelectWithClick="true"
[context]="context" [frameworkComponents]="frameworkComponents"
[headerHeight]="headerHeight" [getContextMenuItems]="getContextMenuItems"
[enableSorting]="true" [enableFilter]="true" [multiSortKey]="multiSortKey"
[defaultColDef]="defaultColDef" [rowData]="rowData" [columnDefs]="columnDefs"
rowSelection="multiple" pagination="true" paginationAutoPageSize="true"
animateRows="true" [defaultColDef]="defaultColDef">
</ag-grid-angular>


One better solution I thought of was this:
I could make the mapClickToModel parameter optional and have it fired
on (click) and then check whether it is undefined and thennnn if it is undefined I acces the getSelectedRows() and get node data that way.... BUT I really just want to see if I can get an event that gives me the node that was just selected.










share|improve this question





























    0















    What I really hope to learn is whether ag-Grid has a (checkboxClicked) event that fires and gives you node data just like (rowClicked) and if not how I could implement such a thing.



    Here's the description of my problem:
    Right now I have check boxes on each row of the grid. The user needs to be able to click either the row or the checkbox to fire a function in order to access the data behind the grid but if we use (rowClicked) when we click the checkbox this event does not fire... So I looked into using (rowSelected), but when the grid is getting ready it will start firing as we are building our selection state for that grid. Is there a checkboxClicked event or something so that I do not have to customize this?



    So far I have done this to get around my problem... as you can see the problem just occurs when i am setting up the check boxes as selected and its triggering the mapping function. So i Turn that off for the first 500 ms after those build functions have fired.



    Thanks for any help you can provide! Thank you



    component:



      buildSelectionStateFromId() {
    this.buildSelectionStateFromIdIsRunning = true;
    // we will have to loop over userIds array and select all the org admins
    // input = orgVM.orgInfo.userIds && orgVM.orgInfo.
    const admins = this.orgVM.orgAdmins;
    this.agGrid.api.forEachNode(function (node) {
    console.log('node: ', node);
    admins.map(x => {
    console.log('x: ', x);
    if (node.data.id === x.id) {
    console.log('node.data.id: ', node.data.id);
    node.setSelected(true);
    }
    });
    });
    // output = actually checking the box based on the security ids in currentUser

    this.buildingSelection();
    }


    toggleOnlySelectedRows(data) {
    this.buildSelectionStateFromIdIsRunning = true;
    this.toggleSelected = !this.toggleSelected;
    console.log('this.toggleSelected: ', this.toggleSelected);
    if (this.toggleSelected) {
    let selectedRows;
    const clone = [...(<any>this.agGrid.rowData)];
    selectedRows = clone.filter((el) => this.getSelectedRows().includes(el));
    this.agGrid.api.setRowData(selectedRows);
    console.log('selectedRows: ', selectedRows);
    this.buildSelectionStateFromId();
    } else {
    console.log('data: ', data);
    this.agGrid.api.setRowData(data);
    this.buildSelectionStateFromId();
    }
    this.buildingSelection();
    }

    buildingSelection() {
    setTimeout(() => {
    this.buildSelectionStateFromIdIsRunning = false;
    }, 500);
    }

    mapClickToModel(rowClicked) {
    console.log('rowClicked: ', rowClicked);
    // *ag-Grid hint: if we use (rowSelected), it will start firing when we are building
    // * our selection through any automated way like buildSelectionStateFromId();
    // * if we use (rowClicked) when we click the checkbox mapClickToModel wont fire...
    // * Another solution might be to not use their checkbox and just put our checkbox in a cell renderer?
    // TODO: refactor this timing hack
    if (this.buildSelectionStateFromIdIsRunning === false) {
    // console.log('this.buildSelectionStateFromIdIsRunning: mpa click to model fired');

    this.orgVM.orgUsers.map(x => {
    // whenever a row is clicked I grab the id off it and see if it is equal to any on the orgUsers array
    if (x.id === rowClicked.node.data.id) {
    console.log('x.id: ', x.id);
    // if it is then i check if the usertype is 1
    if (x.userType === 1) {
    // if it is then I change it to something else
    x.userType = 0; // ! what do we change it to?
    } else {
    x.userType = 1;
    }
    }
    });

    }

    }


    template:



    <ag-grid-angular #agGrid (componentStateChanged)="onGridReady($event)"
    (rowSelected)="mapClickToModel($event)" (click)="mapClickToModel($event)"
    (gridReady)="onGridReady($event)" style="width: 100%; height: 84%;"
    class="of-grid-theme" rowMultiSelectWithClick="true"
    [context]="context" [frameworkComponents]="frameworkComponents"
    [headerHeight]="headerHeight" [getContextMenuItems]="getContextMenuItems"
    [enableSorting]="true" [enableFilter]="true" [multiSortKey]="multiSortKey"
    [defaultColDef]="defaultColDef" [rowData]="rowData" [columnDefs]="columnDefs"
    rowSelection="multiple" pagination="true" paginationAutoPageSize="true"
    animateRows="true" [defaultColDef]="defaultColDef">
    </ag-grid-angular>


    One better solution I thought of was this:
    I could make the mapClickToModel parameter optional and have it fired
    on (click) and then check whether it is undefined and thennnn if it is undefined I acces the getSelectedRows() and get node data that way.... BUT I really just want to see if I can get an event that gives me the node that was just selected.










    share|improve this question



























      0












      0








      0








      What I really hope to learn is whether ag-Grid has a (checkboxClicked) event that fires and gives you node data just like (rowClicked) and if not how I could implement such a thing.



      Here's the description of my problem:
      Right now I have check boxes on each row of the grid. The user needs to be able to click either the row or the checkbox to fire a function in order to access the data behind the grid but if we use (rowClicked) when we click the checkbox this event does not fire... So I looked into using (rowSelected), but when the grid is getting ready it will start firing as we are building our selection state for that grid. Is there a checkboxClicked event or something so that I do not have to customize this?



      So far I have done this to get around my problem... as you can see the problem just occurs when i am setting up the check boxes as selected and its triggering the mapping function. So i Turn that off for the first 500 ms after those build functions have fired.



      Thanks for any help you can provide! Thank you



      component:



        buildSelectionStateFromId() {
      this.buildSelectionStateFromIdIsRunning = true;
      // we will have to loop over userIds array and select all the org admins
      // input = orgVM.orgInfo.userIds && orgVM.orgInfo.
      const admins = this.orgVM.orgAdmins;
      this.agGrid.api.forEachNode(function (node) {
      console.log('node: ', node);
      admins.map(x => {
      console.log('x: ', x);
      if (node.data.id === x.id) {
      console.log('node.data.id: ', node.data.id);
      node.setSelected(true);
      }
      });
      });
      // output = actually checking the box based on the security ids in currentUser

      this.buildingSelection();
      }


      toggleOnlySelectedRows(data) {
      this.buildSelectionStateFromIdIsRunning = true;
      this.toggleSelected = !this.toggleSelected;
      console.log('this.toggleSelected: ', this.toggleSelected);
      if (this.toggleSelected) {
      let selectedRows;
      const clone = [...(<any>this.agGrid.rowData)];
      selectedRows = clone.filter((el) => this.getSelectedRows().includes(el));
      this.agGrid.api.setRowData(selectedRows);
      console.log('selectedRows: ', selectedRows);
      this.buildSelectionStateFromId();
      } else {
      console.log('data: ', data);
      this.agGrid.api.setRowData(data);
      this.buildSelectionStateFromId();
      }
      this.buildingSelection();
      }

      buildingSelection() {
      setTimeout(() => {
      this.buildSelectionStateFromIdIsRunning = false;
      }, 500);
      }

      mapClickToModel(rowClicked) {
      console.log('rowClicked: ', rowClicked);
      // *ag-Grid hint: if we use (rowSelected), it will start firing when we are building
      // * our selection through any automated way like buildSelectionStateFromId();
      // * if we use (rowClicked) when we click the checkbox mapClickToModel wont fire...
      // * Another solution might be to not use their checkbox and just put our checkbox in a cell renderer?
      // TODO: refactor this timing hack
      if (this.buildSelectionStateFromIdIsRunning === false) {
      // console.log('this.buildSelectionStateFromIdIsRunning: mpa click to model fired');

      this.orgVM.orgUsers.map(x => {
      // whenever a row is clicked I grab the id off it and see if it is equal to any on the orgUsers array
      if (x.id === rowClicked.node.data.id) {
      console.log('x.id: ', x.id);
      // if it is then i check if the usertype is 1
      if (x.userType === 1) {
      // if it is then I change it to something else
      x.userType = 0; // ! what do we change it to?
      } else {
      x.userType = 1;
      }
      }
      });

      }

      }


      template:



      <ag-grid-angular #agGrid (componentStateChanged)="onGridReady($event)"
      (rowSelected)="mapClickToModel($event)" (click)="mapClickToModel($event)"
      (gridReady)="onGridReady($event)" style="width: 100%; height: 84%;"
      class="of-grid-theme" rowMultiSelectWithClick="true"
      [context]="context" [frameworkComponents]="frameworkComponents"
      [headerHeight]="headerHeight" [getContextMenuItems]="getContextMenuItems"
      [enableSorting]="true" [enableFilter]="true" [multiSortKey]="multiSortKey"
      [defaultColDef]="defaultColDef" [rowData]="rowData" [columnDefs]="columnDefs"
      rowSelection="multiple" pagination="true" paginationAutoPageSize="true"
      animateRows="true" [defaultColDef]="defaultColDef">
      </ag-grid-angular>


      One better solution I thought of was this:
      I could make the mapClickToModel parameter optional and have it fired
      on (click) and then check whether it is undefined and thennnn if it is undefined I acces the getSelectedRows() and get node data that way.... BUT I really just want to see if I can get an event that gives me the node that was just selected.










      share|improve this question
















      What I really hope to learn is whether ag-Grid has a (checkboxClicked) event that fires and gives you node data just like (rowClicked) and if not how I could implement such a thing.



      Here's the description of my problem:
      Right now I have check boxes on each row of the grid. The user needs to be able to click either the row or the checkbox to fire a function in order to access the data behind the grid but if we use (rowClicked) when we click the checkbox this event does not fire... So I looked into using (rowSelected), but when the grid is getting ready it will start firing as we are building our selection state for that grid. Is there a checkboxClicked event or something so that I do not have to customize this?



      So far I have done this to get around my problem... as you can see the problem just occurs when i am setting up the check boxes as selected and its triggering the mapping function. So i Turn that off for the first 500 ms after those build functions have fired.



      Thanks for any help you can provide! Thank you



      component:



        buildSelectionStateFromId() {
      this.buildSelectionStateFromIdIsRunning = true;
      // we will have to loop over userIds array and select all the org admins
      // input = orgVM.orgInfo.userIds && orgVM.orgInfo.
      const admins = this.orgVM.orgAdmins;
      this.agGrid.api.forEachNode(function (node) {
      console.log('node: ', node);
      admins.map(x => {
      console.log('x: ', x);
      if (node.data.id === x.id) {
      console.log('node.data.id: ', node.data.id);
      node.setSelected(true);
      }
      });
      });
      // output = actually checking the box based on the security ids in currentUser

      this.buildingSelection();
      }


      toggleOnlySelectedRows(data) {
      this.buildSelectionStateFromIdIsRunning = true;
      this.toggleSelected = !this.toggleSelected;
      console.log('this.toggleSelected: ', this.toggleSelected);
      if (this.toggleSelected) {
      let selectedRows;
      const clone = [...(<any>this.agGrid.rowData)];
      selectedRows = clone.filter((el) => this.getSelectedRows().includes(el));
      this.agGrid.api.setRowData(selectedRows);
      console.log('selectedRows: ', selectedRows);
      this.buildSelectionStateFromId();
      } else {
      console.log('data: ', data);
      this.agGrid.api.setRowData(data);
      this.buildSelectionStateFromId();
      }
      this.buildingSelection();
      }

      buildingSelection() {
      setTimeout(() => {
      this.buildSelectionStateFromIdIsRunning = false;
      }, 500);
      }

      mapClickToModel(rowClicked) {
      console.log('rowClicked: ', rowClicked);
      // *ag-Grid hint: if we use (rowSelected), it will start firing when we are building
      // * our selection through any automated way like buildSelectionStateFromId();
      // * if we use (rowClicked) when we click the checkbox mapClickToModel wont fire...
      // * Another solution might be to not use their checkbox and just put our checkbox in a cell renderer?
      // TODO: refactor this timing hack
      if (this.buildSelectionStateFromIdIsRunning === false) {
      // console.log('this.buildSelectionStateFromIdIsRunning: mpa click to model fired');

      this.orgVM.orgUsers.map(x => {
      // whenever a row is clicked I grab the id off it and see if it is equal to any on the orgUsers array
      if (x.id === rowClicked.node.data.id) {
      console.log('x.id: ', x.id);
      // if it is then i check if the usertype is 1
      if (x.userType === 1) {
      // if it is then I change it to something else
      x.userType = 0; // ! what do we change it to?
      } else {
      x.userType = 1;
      }
      }
      });

      }

      }


      template:



      <ag-grid-angular #agGrid (componentStateChanged)="onGridReady($event)"
      (rowSelected)="mapClickToModel($event)" (click)="mapClickToModel($event)"
      (gridReady)="onGridReady($event)" style="width: 100%; height: 84%;"
      class="of-grid-theme" rowMultiSelectWithClick="true"
      [context]="context" [frameworkComponents]="frameworkComponents"
      [headerHeight]="headerHeight" [getContextMenuItems]="getContextMenuItems"
      [enableSorting]="true" [enableFilter]="true" [multiSortKey]="multiSortKey"
      [defaultColDef]="defaultColDef" [rowData]="rowData" [columnDefs]="columnDefs"
      rowSelection="multiple" pagination="true" paginationAutoPageSize="true"
      animateRows="true" [defaultColDef]="defaultColDef">
      </ag-grid-angular>


      One better solution I thought of was this:
      I could make the mapClickToModel parameter optional and have it fired
      on (click) and then check whether it is undefined and thennnn if it is undefined I acces the getSelectedRows() and get node data that way.... BUT I really just want to see if I can get an event that gives me the node that was just selected.







      javascript angular typescript ag-grid ag-grid-angular






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 20 '18 at 20:25







      imnickvaughn

















      asked Nov 20 '18 at 20:19









      imnickvaughnimnickvaughn

      451721




      451721
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53400915%2fag-grid-is-there-a-checkboxclicked-event%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53400915%2fag-grid-is-there-a-checkboxclicked-event%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

          ComboBox Display Member on multiple fields

          Is it possible to collect Nectar points via Trainline?