We have updated Flexmonster Software License Agreement, effective as of September 30, 2024. Learn more about what’s changed.

Multiple chips in single cell, assign each chip an id and each chip can call independent functions on clicking

Re-Open
Manavjeet Gupta asked on March 4, 2022

Hi Team!

 I am using Reactjs, and want to call different functions on clicking different chips(buttons) inside a single cell. 
If I am using pure javascript and html, I am able to achieve this (here https://jsfiddle.net/Manav326/dw0fox9v/48/). But in ReactJs, the function, which I have written there, is not accessible to the onclick attribute of the html div.

const handleChipClick=(actionName, sarId)=> {
        console.log(actionName, sarId);
    }
    const addChips = (text) => {
        // console.log(text);
        let divs = '';
        let chips = text.split(',');

        for (let i = 0; i < chips.length; i++) {
            divs = divs + `<div
        style="display: inline-block;
  padding: 0 25px;
  height: 50px;
  font-size: 16px;
  line-height: 50px;
  border-radius: 25px;
  background-color: #f1f1f1;
   title="${chips[i]}"  onclick="handleChipClick( '${chips[i]}', '${i}')">${chips[i]}</div>`;
        }

        divs = `<div>` + divs + `</div>`;
        return divs;
    }

   
    const customizeCellFunction = (cell, data) => {
        if (
            data.hierarchy &&
            data.hierarchy.uniqueName === 'countryName' &&
            data.type === 'value'
        ) {
            cell.addClass('link');
            cell.text = addChips(cell.text);
        }
       }

Please provide a solution for this specific problem.
Thanks a lot, in advance::)

Attachments:
twochipsInOneCell.png

2 answers

Public
Vera Didenko Vera Didenko Flexmonster March 7, 2022

Hello,
 
Thank you for reaching out to us and for providing a code example.
 
A possible solution is to add your click handlers to the window object.
For example, you could add the handlers when Flexmonster's reportcomplete event is triggered:

onReportCompleteHandler = () => {

this.refs.pivot.flexmonster.off("reportcomplete");

window["LinkClicked"] = this.LinkClicked.bind(this);

window["ChipClicked"] = this.ChipClicked.bind(this);

this.applyCustomization();

}

applyCustomization = () => {

//running grid customization using "customizeCellFunction"

this.refs.pivot.flexmonster.customizeCell(this.customizeCellFunction);

}

removeCustomization = () => {

this.refs.pivot.flexmonster.customizeCell(null);

}

// Your customization logic:

customizeCellFunction = (cell, data) => {...}

// Your click handlers:

LinkClicked = (rowIndex) => {...}

ChipClicked = (rowIndex) => {...}

...


// Rendering Flexmonster React Component:

<FlexmonsterReact.Pivot

ref="pivot"

toolbar={true}

width="100%"

height={600}

report={this.report}

reportcomplete={this.onReportCompleteHandler}

//licenseKey="XXXX-XXXX-XXXX-XXXX-XXXX"

/>

This will make LinkClicked() and ChipClicked() accessible when using React.
 
Please let us know if this helps.
 
Kind regards,
Vera

Public
Manavjeet Gupta March 15, 2022

Hi Team!
  Thanks a lot for your response, it worked for me.
  Now,  Is there any way to insert React(Material UI) Components (Pop-up, alert etc..) in cells of the pivot table?

We actually want to achieve this(attached image) UI and functionality in the flexmonster pivot table.
Please reply ASAP.
Thanks.

Attachments:
BlackListScreen1.png

Vera Didenko created a new ticket #44775 from this answer

Please login or Register to Submit Answer