обработка обновлений последовательно для каждого юзера благодаря mutex
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"example.com/m/bot"
|
||||
"example.com/m/ui"
|
||||
"github.com/NicoNex/echotron/v3"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
@@ -75,62 +76,40 @@ func (s *MyPlacements) renderPlacements(b *bot.Bot, mode bot.RenderMode, jwt str
|
||||
|
||||
Размещения создаются автоматически при создании закупа`
|
||||
} else {
|
||||
pageInfo := ""
|
||||
if page.Pages > 1 {
|
||||
pageInfo = fmt.Sprintf(" <i>(стр. %d/%d)</i>", s.CurrentPage+1, page.Pages)
|
||||
}
|
||||
text += fmt.Sprintf("Выберите размещение для деталей%s\n\n", pageInfo)
|
||||
text += fmt.Sprintf("Выберите размещение для деталей%s\n\n", ui.FormatPageInfo(s.CurrentPage, page.Pages))
|
||||
|
||||
// Размещения по 2 в ряду
|
||||
for i := 0; i < len(page.Items); i += 2 {
|
||||
var row []echotron.InlineKeyboardButton
|
||||
|
||||
// Первый placement в ряду
|
||||
placement := page.Items[i]
|
||||
var slots []echotron.InlineKeyboardButton
|
||||
for _, placement := range page.Items {
|
||||
placementName := placement.CreativeName
|
||||
if placement.PlacementChannelTitle != nil && *placement.PlacementChannelTitle != "" {
|
||||
placementName = fmt.Sprintf("%s → %s", placement.CreativeName, *placement.PlacementChannelTitle)
|
||||
}
|
||||
row = append(row, bot.Button(placementName, fmt.Sprintf("placement:%s", placement.ID)))
|
||||
|
||||
// Второй placement в ряду (если есть)
|
||||
if i+1 < len(page.Items) {
|
||||
placement = page.Items[i+1]
|
||||
placementName = placement.CreativeName
|
||||
if placement.PlacementChannelTitle != nil && *placement.PlacementChannelTitle != "" {
|
||||
placementName = fmt.Sprintf("%s → %s", placement.CreativeName, *placement.PlacementChannelTitle)
|
||||
}
|
||||
row = append(row, bot.Button(placementName, fmt.Sprintf("placement:%s", placement.ID)))
|
||||
slots = append(slots, bot.Button(placementName, fmt.Sprintf("placement:%s", placement.ID)))
|
||||
}
|
||||
if page.Pages >= 2 {
|
||||
for len(slots) < placementsPerPage {
|
||||
slots = append(slots, bot.Button(" ", "empty"))
|
||||
}
|
||||
}
|
||||
for i := 0; i < len(slots); i += 2 {
|
||||
row := []echotron.InlineKeyboardButton{slots[i]}
|
||||
if i+1 < len(slots) {
|
||||
row = append(row, slots[i+1])
|
||||
} else {
|
||||
// Добавляем пустую кнопку для выравнивания
|
||||
row = append(row, bot.Button(" ", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, row)
|
||||
}
|
||||
|
||||
// Кнопки пагинации с номером страницы посередине (только если есть закупы)
|
||||
var navRow []echotron.InlineKeyboardButton
|
||||
|
||||
// Левая стрелка (активная или неактивная)
|
||||
if s.CurrentPage > 0 {
|
||||
navRow = append(navRow, bot.Button("←", "prev"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button("·", "empty"))
|
||||
if navRow := ui.BuildNavigationRow(ui.PaginationConfig{
|
||||
CurrentPage: s.CurrentPage,
|
||||
TotalPages: page.Pages,
|
||||
MiddleButtons: []echotron.InlineKeyboardButton{bot.Button(fmt.Sprintf("• %d/%d •", s.CurrentPage+1, page.Pages), "page_info")},
|
||||
}); navRow != nil {
|
||||
buttons = append(buttons, navRow)
|
||||
}
|
||||
|
||||
// Кнопка с номером страницы (неактивная)
|
||||
pageButton := bot.Button(fmt.Sprintf("• %d/%d •", s.CurrentPage+1, page.Pages), "page_info")
|
||||
navRow = append(navRow, pageButton)
|
||||
|
||||
// Правая стрелка (активная или неактивная)
|
||||
if s.CurrentPage+1 < page.Pages {
|
||||
navRow = append(navRow, bot.Button("→", "next"))
|
||||
} else {
|
||||
navRow = append(navRow, bot.Button("·", "empty"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, navRow)
|
||||
}
|
||||
|
||||
// Кнопки управления
|
||||
|
||||
Reference in New Issue
Block a user