diff --git a/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua b/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua index 382aaa0e53a..b0c26746b25 100644 --- a/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua +++ b/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua @@ -23,7 +23,7 @@ local TeamParticipantsWikiParser = {} ---@alias TeamParticipant {opponent: standardOpponent, notes: {text: string, highlighted: boolean}[], aliases: string[], ---qualification: QualificationStructure?, shouldImportFromDb: boolean, date: integer, ----potentialQualifiers: standardOpponent[]?, warnings: string[]?} +---potentialQualifiers: standardOpponent[]?, warnings: string[]?, participantGroup: string} ---@alias QualificationMethod 'invite'|'qual' ---@alias QualificationType 'tournament'|'external'|'other' @@ -183,6 +183,7 @@ function TeamParticipantsWikiParser.parseParticipant(input, defaultDate) potentialQualifiers = potentialQualifiers, warnings = warnings, shouldImportFromDb = Logic.readBool(input.import), + participantGroup = input.group or '', date = date, } end diff --git a/lua/wikis/commons/Widget/Participants/Team/CardsGroup.lua b/lua/wikis/commons/Widget/Participants/Team/CardsGroup.lua index cbcde9019ca..924fa5cbf61 100644 --- a/lua/wikis/commons/Widget/Participants/Team/CardsGroup.lua +++ b/lua/wikis/commons/Widget/Participants/Team/CardsGroup.lua @@ -9,6 +9,9 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') local Class = Lua.import('Module:Class') +local Logic = Lua.import('Module:Logic') +local Operator = Lua.import('Module:Operator') +local Tabs = Lua.import('Module:Tabs') local Widget = Lua.import('Module:Widget') local AnalyticsWidget = Lua.import('Module:Widget/Analytics') @@ -19,6 +22,7 @@ local Switch = Lua.import('Module:Widget/Switch') ---@class ParticipantsTeamCardsGroup: Widget ---@operator call(table): ParticipantsTeamCardsGroup +---@field props {participants: TeamParticipant[]} local ParticipantsTeamCardsGroup = Class.new(Widget) ---@return Widget? @@ -28,6 +32,16 @@ function ParticipantsTeamCardsGroup:render() return end + local participantGroups = Array.groupBy(participants, Operator.property('participantGroup')) + + local tabArgs = {} + + Array.forEach(participantGroups, function (group, groupIndex) + tabArgs['name' .. groupIndex] = Logic.emptyOr(group[1].participantGroup, 'Unnamed') + tabArgs['content' .. groupIndex] = ParticipantsTeamCardsGroup._createParticipantGroup(group) + end) + tabArgs.suppressHeader = true + return Div{ classes = { 'team-participant' }, children = { @@ -59,17 +73,23 @@ function ParticipantsTeamCardsGroup:render() } } }, - AnalyticsWidget{ - analyticsName = 'Team participants card', - children = Div{ - classes = { 'team-participant__grid' }, - children = Array.map(participants, function(participant) - return ParticipantsTeamCard{ - participant = participant, - } - end), + Tabs.dynamic(tabArgs) + } + } +end + +---@private +---@param participantGroup TeamParticipant[] +function ParticipantsTeamCardsGroup._createParticipantGroup(participantGroup) + return AnalyticsWidget{ + analyticsName = 'Team participants card', + children = Div{ + classes = { 'team-participant__grid' }, + children = Array.map(participantGroup, function(participant) + return ParticipantsTeamCard{ + participant = participant, } - } + end), } } end