Custom components

Add your custom components via druid.register

local druid = require("druid.druid")
local my_component = require("my.amazing.component")

local function init(self)
    druid.register("my_component", my_component)
end

Basic custom component template looks like this:

local const = require("druid.const")

local M = {}
M.interest = { const.ON_INPUT }

function M.init(self, ...)
    -- Component constructor
end

-- Call only if exist interest: const.ON_UPDATE
function M.update(self, dt)

end

-- Call only if exist interest: const.ON_INPUT or const.ON_SWIPE
function M.on_input(self, action_id, action)

end

-- Call only if exist interest: const.ON_MESSAGE
function M.on_message(self, message_id, message, sender)

end

-- Call only if swipe was started on another component (ex. scroll)
function M.on_swipe(self)

end

return M

Best practice on custom components

On each component recomended describe component schema in next way:

-- Component module
local helper = require("druid.helper")

local M = {}

local SCHEME = {
    ROOT = "/root",
    ITEM = "/item",
    TITLE = "/title"
}

-- TODO: Rework self.template/self.nodes
-- Make self._inner_data? { component_name, template, nodes }
function M.init(self, template_name, node_table)
    -- If component use template, setup it:
 self.template = template_name

    -- If component was cloned with gui.clone_tree, pass his nodes
 self.nodes = node_table

    -- helper can get node from gui/template/table
 local root = helper.node(self, SCHEME.ROOT)

    -- This component can spawn another druid components:
 local druid = helper.get_druid(self)
    -- Button self on callback is self of _this_ component
 local button = druid:new_button(...)

    -- helper can return you the component style
 local my_style = helper.get_style(self, "component_name")
end
generated by LDoc 1.4.6 Last updated 2020-03-21 22:00:04