ngx-datatable Retrieve the most recent clicked row using multi-click mode

Currently, I am attempting to retrieve the most recent 'clicked' row from ngx-datatable. Here is what I have in my code:

<ngx-datatable
   [rows]="rows"
   [selected]="selected"
   [selectionType]="'multiClick'"
   (select)='onSelect($event)'
   (dblclick)='onDoubleClick($event)'
>

Since the selected rows are stored in 'rows', one approach that almost works is to obtain the latest selected row in this manner:

const latest = selected[selected.length - 1];

However, the issue arises when the latest clicked row is deselected (having been selected at a prior point), causing it to be removed from the 'selected' array and rendering the above approach ineffective. Is there an alternative method to resolve this issue and accurately retrieve the latest 'clicked' row?

Answer №1

If you are referring to the most recently selected row, the solution is simple. Just insert

const latest = selected[selected.length - 1];
into the onSelect() function.

For example:

onSelect({ selected }) {
   this.selected.splice(0, this.selected.length);
   this.selected.push(...selected);

   const latest = this.selected[this.selected.length - 1];
   console.log('Latest', latest)
}

Since arrays are indexed, accessing by the last index will always provide you with the "last selected row".

However, if your goal is to retrieve the last clicked row (regardless of whether the user is selecting or deselecting the row), you can achieve this using the onActivate() event handler.

For instance:

onActivate(event) {
   if(event.type === "click"){
     console.log(event.row)
   }
}

This approach will give you the "last clicked row" regardless of whether the user is selecting or deselecting the row.

Make sure to bind the activate event to your onActivate() function.

<ngx-datatable>
   ...
   (activate)="onActivate($event)
   ...
</ngx-datatable>

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Issue with Angular RC5: Unable to bind to 'myDirective' because it is not recognized as a property of 'div' element

I recently attempted to transition my project to RC5 and utilize NgModules, but I am encountering challenges with references to custom directives. An error is being thrown: "Template parse errors: Can't bind to 'myDirective' since it isn&a ...

Typescript includes empty spaces in its duplicate-checking process

I have been working on removing duplicate values from an array using the following code: for (var i = 0; i < a.length; i++) obj[a[i]] = a[i] a = new Array(); // Checking each object with keys to remove duplicates. for (var key ...

What is the best way to divide an array into groups of four elements when using ngFor

Is there a way to divide an array into groups of four when using ngFor? How can I display four projects at a time instead of one? <div *ngFor="let item of items$ | async"> // How can I show here 4 projects instead of one? {{item}} ...

I am having trouble getting debugging with source maps to work in VSCode and Browserify

I'm currently experiencing an issue with setting breakpoints in Chrome using VSCode, especially when working with TypeScript and Browserify. Oddly enough, if I open Chrome separately and manually refresh the page, the source maps load correctly and I ...

Implementing Object.somefunction() in ngFor with Angular

In my Angular project, I am using an ngFor loop to iterate over keys generated by Object.keys() in the following code snippet: <ul id='nav-tablist' class='tabrows'> <li *ngFor="let tab of obj.keys(tabList)"> ...

Utilizing ES6 JavaScript for Creating Static Methods and Angular 2 Services

During the development of an Angular 2 app involving multiple calculation services, I encountered some interesting questions: Is it beneficial to use static in an Angular service provided on the application level? Or is it unnecessary? How does a static ...

Maintain synchrony of the state with swiftly unfolding occurrences

I developed a custom hook to keep track of a state variable that increments based on the number of socket events received. However, when I tested by sending 10 simultaneous events, the total value of the state variable ended up being 6, 7, or 8 instead of ...

"Exploring the possibilities of integrating Typescript into Material-UI themes: A step-by

I'm experiencing some issues with Typescript pointing out missing properties in the palette section. Although adding //@ts-ignore resolves the problem temporarily, I would prefer to find a cleaner solution. As a newbie to Typescript, here is my attemp ...

Issues with TypeScript arise when transferring arguments between functions

Encountering a TypeScript error due to this pattern: Error message: 'Argument of type '(string | number)[]' is not assignable to parameter of type 'string[] | number[]' function foo(value: string | number) { return bar([va ...

Generic parameter with a union type

The proxy function returns a randomly determined type. const numbersArray = [1,2,3,4]; const stringsArray = ['1','2','3','4']; function func<T>(array: T[]): T[][] { return [[array[0], array[1]], [array[2], ...

An uncommon token was found by Jest - import (Angular CLI 6)

Struggling to get jest installed and running in an angular/cli (v6) app on Mac. Despite trying various methods to set up jest, I keep encountering the following error: Test suite failed to run Jest encountered an unexpected token This usually me ...

Controlling table row validation in Angular 2

After populating users from the userservice, I have successfully rendered them in a textbox control within a table using *ngFor. Users are able to change the values in the textbox within the table. My current challenge is validating each row containing us ...

Change the spread operator in JavaScript to TypeScript functions

I'm struggling to convert a piece of code from Javascript to Typescript. The main issue lies in converting the spread operator. function calculateCombinations(first, next, ...rest) { if (rest.length) { next = calculateCombinations(next, ...res ...

What are the steps to achieve full screen mode in Google Chrome within an Angular 4 Application?

I'm working on an application and I'm looking to incorporate a feature where, when a user navigates from one component to another, the new component's ngOnInit method triggers the Chrome browser to enter full screen mode, similar to pressing ...

An unknown error has arisen: "The page https://registry.yarnpkg.com/react-native-template-react-native-template-typescript cannot be located."

Once I uninstalled the react-native-cli, I attempted to start a React Native project with a typescript template using the following command: npx react-native init MyApp --template react-native-template-typescript However, I encountered an error message: ...

Managing absence of ID field in Prisma and retrieving data from API request

When fetching data from an API, my approach looks like this: async function getApiData() { const promises = []; for (let i = 0; i < PAGE_COUNT; i++) { const apiData = fetch(...); } const apiData = await Promise.all(promises); return apiDat ...

To emphasize the chosen item following a component's update

SCENARIO: A component named list is used to display a list of all customers. The conditions are as follows: 1) By default, the first list-item (e.g. customer 1) is selected and emitted to another component called display. 2) When any other list-item (i.e ...

Error in AWS Cloud Development Kit: Cannot access properties of undefined while trying to read 'Parameters'

I am currently utilizing aws cdk 2.132.1 to implement a basic Lambda application. Within my project, there is one stack named AllStack.ts which acts as the parent stack for all other stacks (DynamoDB, SNS, SQS, StepFunction, etc.), here is an overview: im ...

The reason behind my struggle with mapping API responses to an Interface in Angular

Hello everyone, I am currently working on mapping some API responses from The Muse API to an APIResponseInterface that I have created. Here's a snippet of my code: Service that sends the request: getJobs(page: number): Observable<APIResponseInterf ...

What is the best way to optimize reactive values using the Vue composition API?

Imagine I have a block of code like this... const computedStyle = computed(() => normalizeStyle([undefined, styleProp, undefined]) ); const computedClass = computed(() => normalizeClass([ "button", classProp, { "b ...