Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
45
Cell Style from string
posted

hi, i'm trying to pass a string in the column using the [cellStyles] property but i get a css error. "SyntaxError: Unexpected token ( in JSON at position 69".

this is my string: 


{"background": "linear-gradient(to right, #8ca6db, #b993d6)","color":(rowData, coljey, cellValue, rowIndex) => rowIndex % 2 === 0 ? "gray" : white"}; 


and this is the function that I use to send the value of the css to [cellStyles] :

public applyCSS() {
  
        var splitted = this.field.grid.cellStyles.split(";");
        
        splitted.forEach(element => {                
            if (element!=null && element!='') {
                    var css= element.trim();            
                    
                        try {
                            var style = JSON.parse(css);
                            console.log(style);
                            this.field.headerGrid.forEach((column, index) => {
                                column.cellStyles = style;
                            });
                        } catch (error) {
                            console.log(error);
                            return false;
                        }

            }
        });

        
    }


What should I do to correctly send that string in [cellStyles]?

Parents Reply
  • 1560
    Offline posted in reply to erick martinez

    Hello, 

    Here could be found a sample with text area where could be added a style in string format and applied to the grid on "Apply new styles" button click. 

    According to me, the best place to evaluate an expression that depends on rowData, cellValue, etc. would be in the applyCSS method. When the button is clicked, we invoke the applyCSS event and in a global variable, we are keeping the input in the textarea that will hold the new style. Of course, this is only for the purposes of the example and this string could be created from some other place in the code dynamically. 

    Again for the purposes of the example, each new line is marked with ';' instead of ',', so I could use it as a separator and easily split the lines. This, of course, you could implement in a different manner, however, the goal is to have a string array with the following format: 

    [<property> , <value>, <property>, <value>...]. 

    Afterwards, you could loop through this array, find and evaluate all functions like "(rowData, coljey, cellValue, rowIndex) =>  rowIndex % 2 === 0 ? "gray" : "white"  " and replace them with their correct value. In this case, the value depends on the rowIndex so it is possible to need to loop through all cells in each column too. 

    After all functions are evaluated and the array is modified appropriately you could merge it back to a single string that would be in correct format using the convertBack method from the attached sample and pass it to the JSON.parse() method. 

    Initially, as you could see the style that we could apply is: 

    {    "background": "linear-gradient(to right, #b993d6, #8ca6db)";    "color": "white";    "animation": "0.75s popin"  }

     Since there is no functions in this string it would be evaluated to

    {    "background": "linear-gradient(to right, #b993d6, #8ca6db)",   "color": "white",   "animation": "0.75s popin"  } 
    and if you commented out the 72 and 73 line in the .ts file you could see it applied correctly. 

    Basically, if you require to apply {    "background": "linear-gradient(to right, #b993d6, #8ca6db)";    "color": (rowData, coljey, cellValue, rowIndex) =>  rowIndex % 2 === 0 ? "gray" : "white"   } you should evaluate this function for each column and row to "gray" or "white" and after that to call the JSON.parse() method. This way, I believe it will work, however you need to test it on your side to check for any side effects. 

    Additionally, I found this discussion that you might consider helpful. Please keep in mind that as I already mention this is related to the JSON specification and it is beyond the scope of Infragistics support.

    Sincerely,

    Teodosia Hristodorova

    Associate Software Developer

     

    stackoverflow.com/.../how-to-get-an-arrow-functions-body-as-a-string

Children
No Data