Tabulator - How to set page from code

Hi I’m trying to set page number from code.

“table.page = (index_no.value // 10) + 1” is not working. I though this one (Tabulator local pagination rendering bug [1.1.1] · Issue #5186 · holoviz/panel · GitHub) is fixed. Maybe issue is about another problem. I upgraded panel to 1.22. But it didn’t fix problem. Please help me to find solution. Thanks in advance.

bokeh_formatters = {
    'selected': BooleanFormatter(),
}

table = pn.widgets.Tabulator(
    data_pd, formatters=bokeh_formatters, header_filters=False, show_index=True, disabled = False , width=450,
     page_size = 10, pagination = "local",widths={'index':15,'project': 30, 'title': 100, 'doc': 50, 'response': 100,
                                                   'selected': 40,'docs_train_revised':40,'answer_finetune':40}
)

text_area_input_questions = pn.widgets.input.TextAreaInput(name='Question', color="red", placeholder='',height=400)
text_area_input_document = pn.widgets.input.TextAreaInput(name='Document', placeholder='',height=400)
text_area_input_docs_train_revised = pn.widgets.input.TextAreaInput(name='Doc_Train Revise', color="red", placeholder='',height=400)
text_area_input_answer_finetune = pn.widgets.input.TextAreaInput(name='Answer Finetune', placeholder='',height=400)
index_no = pn.widgets.StaticText(name='Table Index No', value='')

save_button = pn.widgets.Button(name='Save Data', button_type='primary',width=200)

def click(event):
    text_area_input_questions.value = data_pd.iloc[event.row].response
    text_area_input_document.value = data_pd.iloc[event.row].doc
    text_area_input_docs_train_revised.value = "a"
    text_area_input_answer_finetune.value = "a"
    text_area_input_docs_train_revised.value = data_pd.iloc[event.row].docs_train_revised  if data_pd.iloc[event.row].docs_train_revised is not None else ""
    text_area_input_answer_finetune.value = data_pd.iloc[event.row].answer_finetune if data_pd.iloc[event.row].answer_finetune is not None else ""
    index_no.value = event.row
    
table.on_click(click) 

def save(event):
    try:
        table._updating = True
        table.param.trigger('value')
    finally:
        table._updating = False
    table.value.iloc[index_no.value].docs_train_revised = text_area_input_docs_train_revised.value
    table.value.iloc[index_no.value].answer_finetune = text_area_input_answer_finetune.value
    table.patch({
    'docs_train_revised': [(index_no.value, text_area_input_docs_train_revised.value)],
    'answer_finetune': [(index_no.value, text_area_input_answer_finetune.value)]}, as_index=False)
    table.value.to_parquet("saved_data.parquet")
    table.page = (index_no.value // 10) + 1


    
save_button.on_click(save)

dom = pn.Column(pn.Row(table, pn.Column(pn.Row(text_area_input_document,text_area_input_questions),
                                        pn.Row(text_area_input_docs_train_revised,text_area_input_answer_finetune),
                                        index_no)
                        ),save_button)
pn.serve(dom,port=8002)

I also generate a data to test it.

Please run following script. Click page 4 and enter some values to VAL_C and VAL_D textarea widgets. Click save. Page will go to page 1. But I expect that page will be set to page 4 again.

import pandas as pd
import polars as pl
import numpy as np
from bokeh.models.widgets.tables import NumberFormatter, BooleanFormatter


import panel as pn
pn.extension('tabulator', sizing_mode="stretch_width")

data_pd = pd.concat([pd.util.testing.makeDataFrame() for i in range(100)])
data_pd = data_pd.astype("str")

bokeh_formatters = {
    'selected': BooleanFormatter(),
}

table = pn.widgets.Tabulator(
    data_pd, formatters=bokeh_formatters, header_filters=False, show_index=True, disabled = False , width=450,
     page_size = 10, pagination = "local",widths={'index':15,'project': 30, 'title': 100, 'doc': 50, 'response': 100,
                                                   'selected': 40,'docs_train_revised':40,'answer_finetune':40}
)

text_area_input_A = pn.widgets.input.TextAreaInput(name='Val_A', color="red", placeholder='',height=400)
text_area_input_B = pn.widgets.input.TextAreaInput(name='Val_B', placeholder='',height=400)
text_area_input_C = pn.widgets.input.TextAreaInput(name='Val_C', color="red", placeholder='',height=400)
text_area_input_D = pn.widgets.input.TextAreaInput(name='Val_D', placeholder='',height=400)
index_no = pn.widgets.StaticText(name='Table Index No', value='')

save_button = pn.widgets.Button(name='Save Data', button_type='primary',width=200)

def click(event):
    text_area_input_A.value = data_pd.iloc[event.row].A
    text_area_input_B.value = data_pd.iloc[event.row].B
    text_area_input_C.value = "a"
    text_area_input_D.value = "a"
    text_area_input_C.value = data_pd.iloc[event.row].C  if data_pd.iloc[event.row].C is not None else ""
    text_area_input_D.value = data_pd.iloc[event.row].D if data_pd.iloc[event.row].D is not None else ""
    index_no.value = event.row
    
table.on_click(click) 

def test_page(event):
    try:
        table._updating = True
        table.param.trigger('value')
    finally:
        table._updating = False
    table.value.iloc[index_no.value].C = text_area_input_C.value
    table.value.iloc[index_no.value].D = text_area_input_D.value
    table.patch({
    'C': [(index_no.value, text_area_input_C.value)],
    'D': [(index_no.value, text_area_input_D.value)]}, as_index=False)

    table.page = (index_no.value // 10) + 1

    
save_button.on_click(test_page)

dom = pn.Column(pn.Row(table, pn.Column(pn.Row(text_area_input_A,text_area_input_B),
                                        pn.Row(text_area_input_C,text_area_input_D),
                                        index_no)
                        ),save_button)
pn.serve(dom,port=8002)