module Anubis
module Core
module Data
##
# Module sets default parameters for {DataController}.
module Defaults
##
# Sets hash of defined tabs. Every tab consists of next attributes:
#
# *Attributes:*
# - *:title* (String) --- title of the tab
# - *:where* (Hash | Array) --- hash or array of where parameters for ActiveRecord request. If doesn't present
# then there are no additional where statements for current tab
#
# @return [Hash] returns hash of assigned tabs.
#
# @example Sets custom tabs
# def tabs
# {
# :all => {
# title: 'All IDs'
# },
# :id_1 => {
# title: 'Only ID 1',
# where: { id: 1 }
# },
# :other_id => {
# title: 'Other IDs',
# where: ['id > ?', 1]
# }
# }
# end
def tabs
{
:default => {
title: I18n.t('anubis.default_tab'),
tips: I18n.t('anubis.default_tab_hint')
}
}
end
##
# Sets frame buttons for every using tab.
# Key of the button is an action for frontend application. Every button consists of next attributes:
#
# *Attributes:*
# - *:type* (String) (defaults to: 'default') --- type of the button ('primary', 'danger', 'default')
# - *:mode* (String) (defaults to: 'single') --- button action object ('single', 'multiple')
#
# By default system defines two buttons: 'New' (for create new element in table) and 'Delete' (for
# delete multiple element)
#
# @param [Hash] args additional parameters are used for define frame buttons.
# @option args [String] :tab current tab is used for generation
#
# @return [Hash] returns hash of assigned buttons.
#
# @example Sets no buttons
# def frame_buttons(args = {})
# {
# }
# end
#
# @example Sets only 'New' button
# def frame_buttons(args = {})
# {
# new: { type: 'primary' }
# }
# end
def frame_buttons(args = {})
{
new: { type: 'primary' },
delete: { mode: 'multiple', type: 'danger' }
}
end
##
# Returns model that is used for controller actions. By default it's not defined.
# This is primary model and it must be defined in customer conroller. Different models may be defined according
# by {Anubis::Etc::Base#action self.etc.action} attribute.
# @return [Anubis::ApplicationRecord, nil, any] returns model
def model
nil
end
##
# Returns defined select fields. If returns nil, then return default select fields
def select
nil
end
##
# Returns eager load parameters that are used for controller actions. By default it's set to \[\].
# This procedure could be redefined in cusomer controller. Different eager loads may be defined according
# by {Anubis::Etc::Base#action self.etc.action} attribute.
def eager_load
[]
end
##
# Returns fields that is used for controller actions in defined {#model}. By default it's defined for id field.
# This is primary definition and it must be defined in customer conroller. Different fields may be defined according
# by {Anubis::Etc::Base#action self.etc.action} attribute.
# @return [Hash] returns defined fields for current model
def fields
{
id: { type: 'number', precision: 0 }
}
end
##
# Get array of field's identifiers in desired order. By default it's current defined order of all fields.
def fields_order
result = []
self.etc.data.fields.each_key do |key|
result.push key.to_s
end
result
end
##
# Get array of field's identifiers in desired order for filter form. By default it's current defined order of all fields.
def filter_order
self.fields_order
end
##
# Returns parent model that is used for controller actions. By default it's defined as nil.
# This procedure could be redefined in customer controller. Different models may be defined according
# by {Anubis::Etc::Base#action self.etc.action} attribute.
# @return [Anubis::ApplicationRecord, nil] returns model
def parent_model
nil
end
##
# Returns eager load parameters for parent model that are used for controller actions. By default it's set to \[\].
# This procedure could be redefined in customer controller. Different eager loads may be defined according
# by {Anubis::Etc::Base#action self.etc.action} attribute.
def parent_eager_load
[]
end
##
# Returns parent model id. By default it's set to 0.
# This procedure could be rewrote in customer controller.
def parent_id
return 0
end
##
# @!group Block of default controller table actions
##
# Sets default table actions for every row
# @return [Array] return string array of action identifiers
def table_actions
%w[edit delete]
end
##
# Returns possibility of 'edit' action for current row
# @param row [ActiveRecord] single model's data row
def table_action_edit(row)
row.can_edit({ controller: params[:controller], tab: self.etc.tab })
end
##
# Returns possibility of 'delete' action for current row
# @param row [ActiveRecord] single model's data row
def table_action_delete(row)
row.can_delete({ controller: params[:controller], tab: self.etc.tab })
end
##
# Returns default where condition
# @return [Hash, Array] default where condition
def where
[]
end
#@!endgroup
##
# Returns export format for current action. Procedure is rewrote for change default export format.
def export_format
'xls'
end
##
# Returns filter possibility for defined options. It's rewrote for custom controllers.
# @param [Hash] args additional parameters.
# @option args [String] :tab current tab is used for generation
# @return [Boolean] Possibility of filter table data. Default: true
def is_filter(args = {})
true
end
##
# Returns export possibility for defined options. It's rewrote for custom controllers.
# @param [Hash] args additional parameters.
# @option args [String] :tab current tab is used for generation
# @return [Boolean] Possibility of export table data. Default: true
def is_export(args = {})
true
end
##
# Returns field name for manual table order or nil if table can't be sorted manually.
# @return [String] Field name for manual table order
def is_sortable
nil
end
end
end
end
end