Here is a my bicycle for table, where i have ‘load more’ and ‘add’ options:
def setup_callbacks_for_rows_adding(self):
inputs = []
if self.can_add_rows:
inputs.append(Input(self.add_button_id(), 'n_clicks'))
if self.display_rows_count != None:
inputs.append(Input(self.load_more_button_id(), 'n_clicks'))
@app.callback(
[
Output({'type': 'table-data-cells-body', 'component_id': self.id, 'udid': self.id}, 'children'),
Output(self.adding_rows_id(), 'children'),
],
inputs,
[State(self.adding_rows_id(), 'children')]
)
def on_add_or_load_row_button_clicked(*args):
ctx = dash.callback_context
if not ctx.triggered:
raise PreventUpdate('Cancel the callback')
trigger_id_raw = dash.callback_context.triggered[0]['prop_id']
id_end_location = trigger_id_raw.find('.')
trigger_id = trigger_id_raw[:id_end_location]
adding_rows = args[-1]
if trigger_id == str(self.add_button_id()):
input_result = [util.generate_udid(),]
if self.__has_checkmarks():
input_result.append(True)
parse_res = self.parse_data_from_adding_rows(adding_rows=adding_rows)
input_result += parse_res
self.add_data_row(data_list=input_result)
adding_cells = self.adding_cells()
else:
self.display_rows_count = None
adding_cells = adding_rows
data_rows = self.data_cells()
return data_rows, adding_cells