Query and Forms are provided by the query.mi and the form.mi components.

Initially all the code for each object was inside a single component, but later on I decided to separate it into two parts.

The first half just loads the object definition (query, or form) from the Sentosa database using the Objects.pm library:

my ($obj, $columns) = Sentosa::Objects::get_recordSource({
    app => $._app,
    obj => $._id,
    type => 'query',
    userid => $m->session->{auth_id}
if (!$obj) { $m->not_found(); }; # form not found

and then calls the query-widget.mi component which renders the actual data (the JSON output of the query in this case):

      app => $._app,
      id => $._id,
      description => $obj->{description},
      pk => $obj->{pk},
      columns => $columns,
      params => {
        'table_link'  => $.table_link,
        'hide_title'  => $.hide_title,
        'hide_top'    => $.hide_top,
        'hide_bottom' => $.hide_bottom

the reason is that I like a lot the components that render the data, but I don’t like to read Sentosa components from a DB. I’m still undecided if the problem is just the database structure that’s not too intuitive, or if it’s just quicker to define objects in the filesystem (but maybe I need to hack Mason somehow…).

Anyway this also helps Sentosa be more flexible (I’m using it at work for some new projects!).

What I’ve noticed is that I have never documented the $columns format yet. That’s definitely going to be the subject of my next post!