Description
An integrated drag & drop KANBAN board for table views which changes status and modified by/on columns of records just by dropping into a different slot.
Showcase
Example
Table calculations
contains a column named state_id
which is a lookup, referencing states
-table. There are four different states in states
-table. Every state has been rendered as slot and therefore is available as drop-target. Additional states can be added, of course.
When dropping an item into a different slot, there is an AJAX call from client (browser) to server. The serverside PHP script validates the passed data and checks for edit-permission on calculations
-table. Then the script updates status_id
, modified_by
and modified_on
fields. If this was successful, the serverside PHP script returns some JSON back to the client and the client updates the table view at the top of the page. So you can immediately see the change in the table view.
Implementation
Once again I have encapsulated all functionality into a simple to use code fragment for my hooks-file:
function calculations_footer($contentType, $memberInfo, &$args) { $footer = ''; switch ($contentType) { case 'tableview': $kanban = AppGiniHelperKanbanBoard::create("calculations", "name", "status_id", "calculation_states", "name"); $kanban->title = "Integrated KANBAN Board"; $kanban->setModifiedByColumn("modified_by"); $kanban->setModifiedOnColumn("modified_on"); $footer .= $kanban; break; // [...]
Next Steps
There are a few ideas now:
- Integration of before_update and after_update hooks (if any)
- Show icon or color inside the slot-headers
- Show additional data inside the items
- Standalone custom page instead of integrated into TV
- Highlightig item while dragging
- Highlighting slot when item enters panel while dragging
- Disabled (hidden) slots
- ✔️
Different sort order of slots - Rules for transitions:
- conditionally allow/deny drag of records
- conditionally allow/deny drop into slots
- Actions
- before_drag
- before_drop
- after_drop
- Optimize flickering which is a result of reloading the table view above, not caused by the board
Summary
For the moment I'm quite happy with this implementation. There is a tasks
table in this project and I'm pretty sure I am going to enable I did the same drag & drop feature for tasks
and task_states
, too.
I have added max-height and scroll-bar option and also the slots can be sorted by any column. There is a position
-column in task_states
table which I am using here. So, this is quite flexible for my purposes.