Module:Widget/Squad/Core
From Liquipedia Commons Wiki
---
-- @Liquipedia
-- page=Module:Widget/Squad/Core
--
-- Please see https://github.com/Liquipedia/Lua-Modules to contribute
--
local Lua = require('Module:Lua')
local Class = Lua.import('Module:Class')
local Logic = Lua.import('Module:Logic')
local String = Lua.import('Module:StringUtils')
local SquadUtils = Lua.import('Module:Squad/Utils')
local Widgets = Lua.import('Module:Widget/All')
local Widget = Lua.import('Module:Widget')
local WidgetUtil = Lua.import('Module:Widget/Util')
local SquadContexts = Lua.import('Module:Widget/Contexts/Squad')
local DataTable, Tr, Th = Widgets.DataTable, Widgets.Tr, Widgets.Th
---@class SquadWidget: Widget
---@operator call(table): SquadWidget
local Squad = Class.new(Widget)
Squad.defaultProps = {
status = SquadUtils.SquadStatus.ACTIVE,
type = SquadUtils.SquadType.PLAYER,
}
local SquadStatusToDisplay = {
[SquadUtils.SquadStatus.ACTIVE] = '',
[SquadUtils.SquadStatus.INACTIVE] = 'Inactive',
[SquadUtils.SquadStatus.FORMER] = 'Former',
[SquadUtils.SquadStatus.FORMER_INACTIVE] = 'Former',
}
local SquadTypeToDisplay = {
[SquadUtils.SquadType.PLAYER] = 'Players',
[SquadUtils.SquadType.STAFF] = 'Organization',
}
---@return WidgetDataTable
function Squad:render()
local title = self:_title(self.props.status, self.props.title, self.props.type)
local header = self:_header(self.props.status)
local allChildren = WidgetUtil.collect(title, header, unpack(self.props.children))
return DataTable{
classes = {'wikitable-striped', 'roster-card'},
wrapperClasses = {'roster-card-wrapper'},
children = allChildren,
}
end
---@param squadStatus SquadStatus
---@param title string?
---@param squadType SquadType
---@return Widget?
function Squad:_title(squadStatus, title, squadType)
local defaultTitle
-- TODO: Work away this special case
if squadType == SquadUtils.SquadType.PLAYER and
(squadStatus == SquadUtils.SquadStatus.FORMER or squadStatus == SquadUtils.SquadStatus.FORMER_INACTIVE) then
defaultTitle = 'Former Squad'
-- No default title for Active tables
elseif squadStatus ~= SquadUtils.SquadStatus.ACTIVE then
defaultTitle = SquadStatusToDisplay[squadStatus] .. ' ' .. SquadTypeToDisplay[squadType]
end
local titleText = Logic.emptyOr(title, defaultTitle)
if String.isEmpty(titleText) then
return
end
return Tr{
children = {Th{children = {titleText}, attributes={colspan = 10}}}
}
end
---@param status SquadStatus
---@return Widget
function Squad:_header(status)
local isInactive = status == SquadUtils.SquadStatus.INACTIVE or status == SquadUtils.SquadStatus.FORMER_INACTIVE
local isFormer = status == SquadUtils.SquadStatus.FORMER or status == SquadUtils.SquadStatus.FORMER_INACTIVE
local name = self:useContext(SquadContexts.NameSection, {Th{children = {'Name'}}})
local inactive = isInactive and self:useContext(SquadContexts.InactiveSection, {
Th{children = {'Inactive Date'}}
}) or nil
local former = isFormer and self:useContext(SquadContexts.FormerSection, {
Th{children = {'Leave Date'}},
Th{children = {'New Team'}},
}) or nil
local role = {Th{children = {self:useContext(SquadContexts.RoleTitle)}}}
return Tr{
classes = {'HeaderRow'},
children = WidgetUtil.collect(
Th{children = {'ID'}},
Th{}, -- "Team Icon" (most commmonly used for loans)
name,
role,
Th{children = {'Join Date'}},
inactive,
former
)
}
end
return Squad