фиксы
This commit is contained in:
@@ -12,15 +12,14 @@ import (
|
||||
)
|
||||
|
||||
type ProjectDetails struct {
|
||||
Project *backend.Project
|
||||
BackState bot.State
|
||||
confirmingLinkTypeChange bool // Флаг для двухшагового подтверждения смены типа ссылки
|
||||
Project *backend.Project
|
||||
BackState bot.State
|
||||
}
|
||||
|
||||
func (s *ProjectDetails) Enter(b *bot.Bot, mode bot.RenderMode) {
|
||||
if s.Project == nil {
|
||||
b.SendNew("❌ Проект не найден", Keyboard(
|
||||
Row(Button("← Назад", "back_to_projects")),
|
||||
Row(Button("← Назад", "back")),
|
||||
))
|
||||
return
|
||||
}
|
||||
@@ -40,32 +39,25 @@ func (s *ProjectDetails) formatProjectDetails() string {
|
||||
|
||||
text := fmt.Sprintf("<b>%s</b>\n\n", p.Title)
|
||||
|
||||
// Информация о канале
|
||||
if p.Username != nil && *p.Username != "" {
|
||||
text += fmt.Sprintf("▸ Telegram: @%s\n", *p.Username)
|
||||
text += fmt.Sprintf("▸ Tg username: @%s\n", *p.Username)
|
||||
} else {
|
||||
text += "▸ Telegram: <i>не привязан</i>\n"
|
||||
text += "▸ Tg username: <i>не привязан</i>\n"
|
||||
}
|
||||
|
||||
// Статус проекта
|
||||
var statusSymbol string
|
||||
var statusText string
|
||||
var statusSymbol, statusText string
|
||||
switch p.Status {
|
||||
case "active":
|
||||
statusSymbol = "●"
|
||||
statusText = "Активный"
|
||||
statusSymbol, statusText = "●", "Активный"
|
||||
case "inactive":
|
||||
statusSymbol = "○"
|
||||
statusText = "Неактивен"
|
||||
statusSymbol, statusText = "○", "Неактивен"
|
||||
case "archived":
|
||||
statusSymbol = "■"
|
||||
statusText = "Архивный"
|
||||
statusSymbol, statusText = "■", "Архивный"
|
||||
case "paused":
|
||||
statusSymbol = "◐"
|
||||
statusText = "Приостановлен"
|
||||
statusSymbol, statusText = "◐", "Приостановлен"
|
||||
default:
|
||||
statusSymbol = "○"
|
||||
statusText = p.Status
|
||||
statusSymbol, statusText = "○", p.Status
|
||||
}
|
||||
text += fmt.Sprintf("▸ Статус: %s %s\n", statusSymbol, statusText)
|
||||
|
||||
@@ -82,34 +74,20 @@ func (s *ProjectDetails) buildKeyboard() echotron.InlineKeyboardMarkup {
|
||||
Button("Размещения", fmt.Sprintf("placements:%s", s.Project.ID)),
|
||||
))
|
||||
|
||||
// Второй ряд: Тип вступления по умолчанию для закупов (с подтверждением)
|
||||
var linkTypeButtonText string
|
||||
if s.confirmingLinkTypeChange {
|
||||
// Показываем подтверждение
|
||||
var newType string
|
||||
if s.Project.PurchaseInviteTypeDefault == "public" {
|
||||
newType = "По заявке"
|
||||
} else {
|
||||
newType = "Свободное"
|
||||
}
|
||||
linkTypeButtonText = fmt.Sprintf("Изменить → %s", newType)
|
||||
// Второй ряд: Тип вступления по умолчанию для закупов
|
||||
var currentType string
|
||||
if s.Project.PurchaseInviteTypeDefault == "public" {
|
||||
currentType = "открытая"
|
||||
} else {
|
||||
// Показываем текущий тип вступления
|
||||
var currentType string
|
||||
if s.Project.PurchaseInviteTypeDefault == "public" {
|
||||
currentType = "Свободное"
|
||||
} else {
|
||||
currentType = "По заявке"
|
||||
}
|
||||
linkTypeButtonText = fmt.Sprintf("Вступление: %s", currentType)
|
||||
currentType = "с заявками"
|
||||
}
|
||||
buttons = append(buttons, Row(
|
||||
Button(linkTypeButtonText, fmt.Sprintf("link_type:%s", s.Project.ID)),
|
||||
Button(fmt.Sprintf("Ссылка: %s", currentType), fmt.Sprintf("link_type:%s", s.Project.ID)),
|
||||
))
|
||||
|
||||
// Нижний ряд: Назад и Архивировать
|
||||
buttons = append(buttons, Row(
|
||||
Button("← Назад", "back_to_projects"),
|
||||
Button("← Назад", "back"),
|
||||
Button("≡ Архивировать", fmt.Sprintf("archive:%s", s.Project.ID)),
|
||||
))
|
||||
|
||||
@@ -124,14 +102,12 @@ func (s *ProjectDetails) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
||||
data := u.CallbackQuery.Data
|
||||
|
||||
switch {
|
||||
case data == "back_to_projects", data == "back":
|
||||
s.confirmingLinkTypeChange = false // Сбрасываем флаг подтверждения
|
||||
case data == "back":
|
||||
if s.BackState != nil {
|
||||
s.transitionWithNewMessage(b, s.BackState)
|
||||
}
|
||||
|
||||
case strings.HasPrefix(data, "creatives:"):
|
||||
s.confirmingLinkTypeChange = false // Сбрасываем флаг подтверждения
|
||||
b.SetState(&Creatives{
|
||||
ProjectID: s.Project.ID,
|
||||
ProjectTitle: s.Project.Title,
|
||||
@@ -142,7 +118,6 @@ func (s *ProjectDetails) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
||||
}, bot.EditMessage)
|
||||
|
||||
case strings.HasPrefix(data, "placements:"):
|
||||
s.confirmingLinkTypeChange = false // Сбрасываем флаг подтверждения
|
||||
b.SetState(&Placements{
|
||||
ProjectID: s.Project.ID,
|
||||
ProjectTitle: s.Project.Title,
|
||||
@@ -153,38 +128,28 @@ func (s *ProjectDetails) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
||||
}, bot.EditMessage)
|
||||
|
||||
case data == "back_to_project":
|
||||
s.confirmingLinkTypeChange = false // Сбрасываем флаг подтверждения
|
||||
s.Enter(b, bot.EditMessage)
|
||||
|
||||
case strings.HasPrefix(data, "link_type:"):
|
||||
if !s.confirmingLinkTypeChange {
|
||||
// Первое нажатие - включаем режим подтверждения
|
||||
s.confirmingLinkTypeChange = true
|
||||
s.Enter(b, bot.EditMessage)
|
||||
var newType string
|
||||
if s.Project.PurchaseInviteTypeDefault == "public" {
|
||||
newType = "approval"
|
||||
} else {
|
||||
// Второе нажатие - меняем тип ссылки
|
||||
var newType string
|
||||
if s.Project.PurchaseInviteTypeDefault == "public" {
|
||||
newType = "approval"
|
||||
} else {
|
||||
newType = "public"
|
||||
}
|
||||
|
||||
updatedProject, err := b.Backend.UpdateProjectInviteLinkType(context.Background(), b.Session.JWT, b.Session.WorkspaceID, s.Project.ID, newType)
|
||||
|
||||
if err != nil {
|
||||
b.SendNew(fmt.Sprintf("❌ Ошибка при изменении типа ссылки: %v", err), Keyboard(
|
||||
Row(Button("← Назад", "back_to_project")),
|
||||
))
|
||||
return
|
||||
}
|
||||
|
||||
// Обновляем проект и сбрасываем флаг подтверждения
|
||||
s.Project = updatedProject
|
||||
s.confirmingLinkTypeChange = false
|
||||
s.Enter(b, bot.EditMessage)
|
||||
newType = "public"
|
||||
}
|
||||
|
||||
updatedProject, err := b.Backend.UpdateProjectInviteLinkType(context.Background(), b.Session.JWT, b.Session.WorkspaceID, s.Project.ID, newType)
|
||||
|
||||
if err != nil {
|
||||
b.SendNew(fmt.Sprintf("❌ Ошибка при изменении типа ссылки: %v", err), Keyboard(
|
||||
Row(Button("← Назад", "back_to_project")),
|
||||
))
|
||||
return
|
||||
}
|
||||
|
||||
s.Project = updatedProject
|
||||
s.Enter(b, bot.EditMessage)
|
||||
|
||||
default:
|
||||
// Для остальных кнопок показываем заглушку
|
||||
b.Edit(fmt.Sprintf("🚧 Функция в разработке\n\nCallback: %s", data), Keyboard(
|
||||
|
||||
Reference in New Issue
Block a user