Renamed. The legacy DataTableObject renderer DTO has been retired with Data Storage 2.0. Filters and code that used to receive a DataTableObject now receive a DataTable model (TS\WonderfulRelations\System\DataTable\Models\DataTable). The runtime render path goes through DataTableRuntimeRenderer and, for cached plans, through the HotRenderer in System\DataStorage\Render\.

What you can still do from a filter

Most filter code that used to mutate a DataTableObject still works on the DataTable model — the most common operations remain:

  • add_script_object( ScriptObject $script ) — attach a JS module that runs when the table boots.
  • add_button( … ), add_column( … ), add_new_action( … ) — extend the table programmatically.
  • get_settings() — read the configured options bag.

Building a DataTable Programmatically

The recommended path is to let DataTableFactory build the instance and then mutate it through filters or direct calls:

use TS\WonderfulRelations\System\DataTable\Factories\Models\DataTableFactory;
 
$factory   = new DataTableFactory( /* injected dependencies */ );
$datatable = $factory->build( $dto );

For most child plugins you do not construct a DataTableFactory yourself — pick the existing DataTable up via Executor::get_results() of the underlying query, or hook into the filter shown above.