diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index 2068074..cfb1654 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -45,6 +45,7 @@ type panelBody struct { Disabled bool `json:"disabled"` ExitSurveyFormId *int `json:"exit_survey_form_id"` AccessControlList []database.PanelAccessControlRule `json:"access_control_list"` + PendingCategory *uint64 `json:"pending_category,string"` } func (p *panelBody) IntoPanelMessageData(customId string, isPremium bool) panelMessageData { @@ -230,6 +231,7 @@ func CreatePanel(c *gin.Context) { ForceDisabled: false, Disabled: data.Disabled, ExitSurveyFormId: data.ExitSurveyFormId, + PendingCategory: data.PendingCategory, } createOptions := panelCreateOptions{ diff --git a/app/http/endpoints/api/panel/panelupdate.go b/app/http/endpoints/api/panel/panelupdate.go index 9fa5821..a605fc3 100644 --- a/app/http/endpoints/api/panel/panelupdate.go +++ b/app/http/endpoints/api/panel/panelupdate.go @@ -232,6 +232,7 @@ func UpdatePanel(c *gin.Context) { ForceDisabled: existing.ForceDisabled, Disabled: data.Disabled, ExitSurveyFormId: data.ExitSurveyFormId, + PendingCategory: data.PendingCategory, } // insert mention data diff --git a/app/http/endpoints/api/panel/validation.go b/app/http/endpoints/api/panel/validation.go index 2053dac..1a1a3c2 100644 --- a/app/http/endpoints/api/panel/validation.go +++ b/app/http/endpoints/api/panel/validation.go @@ -73,6 +73,7 @@ func panelValidators() []validation.Validator[PanelValidationContext] { validateNamingScheme, validateWelcomeMessage, validateAccessControlList, + validatePendingCategory, } } @@ -237,6 +238,26 @@ func validateExitSurveyFormId(ctx PanelValidationContext) validation.ValidationF return validatedNullableFormId(ctx.GuildId, ctx.Data.ExitSurveyFormId) } +func validatePendingCategory(ctx PanelValidationContext) validation.ValidationFunc { + return func() error { + if ctx.Data.PendingCategory == nil { + return nil + } + + if !ctx.IsPremium { + return validation.NewInvalidInputError("Awaiting response category is a premium feature") + } + + for _, ch := range ctx.Channels { + if ch.Id == *ctx.Data.PendingCategory && ch.Type == channel.ChannelTypeGuildCategory { + return nil + } + } + + return validation.NewInvalidInputError("Invalid awaiting response category") + } +} + func validateTeams(ctx PanelValidationContext) validation.ValidationFunc { return func() error { // Query does not work nicely if there are no teams created in the guild, but if the user submits no teams, diff --git a/frontend/src/components/manage/PanelCreationForm.svelte b/frontend/src/components/manage/PanelCreationForm.svelte index eb0a48b..58a3f4e 100644 --- a/frontend/src/components/manage/PanelCreationForm.svelte +++ b/frontend/src/components/manage/PanelCreationForm.svelte @@ -68,6 +68,14 @@ {/each} + + + {#each channels as channel} + {#if channel.type === 4} + + {/if} + {/each} + @@ -138,7 +146,6 @@ -
@@ -175,7 +182,7 @@ import Colour from "../form/Colour.svelte"; import ChannelDropdown from "../ChannelDropdown.svelte"; - import {createEventDispatcher, onMount} from 'svelte'; + import {onMount} from 'svelte'; import {colourToInt, intToColour} from "../../js/util"; import CategoryDropdown from "../CategoryDropdown.svelte"; import EmojiInput from "../form/EmojiInput.svelte"; @@ -190,8 +197,6 @@ export let guildId; export let seedDefault = true; - const dispatch = createEventDispatcher(); - let tempColour = '#2ECC71'; export let data = {}; @@ -203,9 +208,6 @@ export let forms = []; export let isPremium = false; - let advancedSettings = false; - let overflowShow = false; - let teamsWithDefault = []; let mentionItems = []; @@ -250,17 +252,6 @@ } } - function toggleAdvancedSettings() { - advancedSettings = !advancedSettings; - if (advancedSettings) { - setTimeout(() => { - overflowShow = true; - }, 300); - } else { - overflowShow = false; - } - } - function handleEmojiTypeChange(e) { let isCustomEmoji = e.detail; if (isCustomEmoji) { @@ -307,6 +298,10 @@ .forEach((mention) => selectedMentions.push(mention)); } + if (!data.pending_category) { + data.pending_category = ""; + } + data.emote = data.emote; if (!data.colour) { diff --git a/go.mod b/go.mod index 6548b55..e45e1c0 100644 --- a/go.mod +++ b/go.mod @@ -7,10 +7,10 @@ toolchain go1.22.4 require ( github.com/BurntSushi/toml v1.2.1 github.com/TicketsBot/archiverclient v0.0.0-20241012221057-16a920bfb454 - github.com/TicketsBot/common v0.0.0-20241104184641-e39c64bdcf3e - github.com/TicketsBot/database v0.0.0-20241116202646-1741ded5d50f + github.com/TicketsBot/common v0.0.0-20241117150316-ff54c97b45c1 + github.com/TicketsBot/database v0.0.0-20241116234225-cdf216a9ffca github.com/TicketsBot/logarchiver v0.0.0-20241012220745-5f3ba17a5138 - github.com/TicketsBot/worker v0.0.0-20241110222533-ba74e19de868 + github.com/TicketsBot/worker v0.0.0-20241117155137-89dec1fd9a11 github.com/apex/log v1.1.2 github.com/caarlos0/env/v11 v11.2.2 github.com/getsentry/sentry-go v0.24.0 diff --git a/go.sum b/go.sum index d3b1735..d125ef5 100644 --- a/go.sum +++ b/go.sum @@ -45,16 +45,16 @@ github.com/TicketsBot/analytics-client v0.0.0-20240724103359-30f5dac821e6 h1:Jig github.com/TicketsBot/analytics-client v0.0.0-20240724103359-30f5dac821e6/go.mod h1:9Z9qP/yovb6DUe1KlzgN2wicc+8ey6MMoxfynFbMyRg= github.com/TicketsBot/archiverclient v0.0.0-20241012221057-16a920bfb454 h1:u77mqvmLdljjircnvgikSWNOSyc2uSLLybPOQP8moK8= github.com/TicketsBot/archiverclient v0.0.0-20241012221057-16a920bfb454/go.mod h1:ZJ+b5JzRBQqywD7/oTsqJSB34VwzQ8eExHslaGRLOVQ= -github.com/TicketsBot/common v0.0.0-20241104184641-e39c64bdcf3e h1:cYfBjPX/FhD/MCViBI2Wz2YlC2esLiTbDE65Qku2WVg= -github.com/TicketsBot/common v0.0.0-20241104184641-e39c64bdcf3e/go.mod h1:N7zwetwx8B3RK/ZajWwMroJSyv2ZJ+bIOZWv/z8DhaM= -github.com/TicketsBot/database v0.0.0-20241116202646-1741ded5d50f h1:CdYauI7Vkg0O9a/j8eZTFue2payodBblXkS6jqjrss4= -github.com/TicketsBot/database v0.0.0-20241116202646-1741ded5d50f/go.mod h1:mpVkDO8tnnWn1pMGEphVg6YSeGIhDwLAN43lBTkpGmU= +github.com/TicketsBot/common v0.0.0-20241117150316-ff54c97b45c1 h1:FqC1KGOsmB+ikvbmDkyNQU6bGUWyfYq8Ip9r4KxTveY= +github.com/TicketsBot/common v0.0.0-20241117150316-ff54c97b45c1/go.mod h1:N7zwetwx8B3RK/ZajWwMroJSyv2ZJ+bIOZWv/z8DhaM= +github.com/TicketsBot/database v0.0.0-20241116234225-cdf216a9ffca h1:dWFpbKflrHgkoNOI6e44GMMCwt8YWD614SmsCzwUAZY= +github.com/TicketsBot/database v0.0.0-20241116234225-cdf216a9ffca/go.mod h1:mpVkDO8tnnWn1pMGEphVg6YSeGIhDwLAN43lBTkpGmU= github.com/TicketsBot/logarchiver v0.0.0-20241012220745-5f3ba17a5138 h1:wsR5ESeaQKo122qsmzPcblxlJdE0GIQbp2B/7/uX+TA= github.com/TicketsBot/logarchiver v0.0.0-20241012220745-5f3ba17a5138/go.mod h1:4Rq0CgSCgXVW6uEyEUvWzxOmFp+L57rFfCjPDFPHFiw= github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261 h1:NHD5GB6cjlkpZFjC76Yli2S63/J2nhr8MuE6KlYJpQM= github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261/go.mod h1:2zPxDAN2TAPpxUPjxszjs3QFKreKrQh5al/R3cMXmYk= -github.com/TicketsBot/worker v0.0.0-20241110222533-ba74e19de868 h1:EzmxFrwx17GBCdiosZ+lSxBoH3djVZPKgQ/eMDGp7JI= -github.com/TicketsBot/worker v0.0.0-20241110222533-ba74e19de868/go.mod h1:TlW/vJQ7OFooFxocENC5qFSZre+znlYsIVQ0pG8u+0U= +github.com/TicketsBot/worker v0.0.0-20241117155137-89dec1fd9a11 h1:dhlsB50GXL0GaUvzGBYtcmLp7bVAjzFXj1EYXVPBjis= +github.com/TicketsBot/worker v0.0.0-20241117155137-89dec1fd9a11/go.mod h1:UjYX/xEJ7WsqmdxOL7B+jk4LC5Ejv8bLVdkdolIVjxA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=