diff --git a/app/http/endpoints/api/settings/updatesettings.go b/app/http/endpoints/api/settings/updatesettings.go index 9a4df7b..6dc35bf 100644 --- a/app/http/endpoints/api/settings/updatesettings.go +++ b/app/http/endpoints/api/settings/updatesettings.go @@ -3,6 +3,7 @@ package api import ( "context" "errors" + "fmt" "github.com/TicketsBot/GoPanel/botcontext" dbclient "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/rpc/cache" @@ -54,6 +55,10 @@ func UpdateSettingsHandler(ctx *gin.Context) { } func (s *Settings) updateSettings(guildId uint64) error { + if err := s.Validate(guildId); err != nil { + return err + } + group, _ := errgroup.WithContext(context.Background()) group.Go(func() error { @@ -67,6 +72,30 @@ func (s *Settings) updateSettings(guildId uint64) error { return group.Wait() } +func (s *Settings) Validate(guildId uint64) error { + group, _ := errgroup.WithContext(context.Background()) + + // Validate panel from same guild + group.Go(func() error { + if s.ContextMenuPanel != nil { + panelId := *s.ContextMenuPanel + + panel, err := dbclient.Client.Panel.GetById(panelId) + if err != nil { + return err + } + + if guildId != panel.GuildId { + return fmt.Errorf("guild ID doesn't match") + } + } + + return nil + }) + + return group.Wait() +} + func setOpenCommandPermissions(guildId uint64, disabled bool) error { ctx, err := botcontext.ContextForGuild(guildId) if err != nil { diff --git a/frontend/src/components/PanelDropdown.svelte b/frontend/src/components/PanelDropdown.svelte index 9fd7698..2db6893 100644 --- a/frontend/src/components/PanelDropdown.svelte +++ b/frontend/src/components/PanelDropdown.svelte @@ -14,7 +14,7 @@ export let selected; export let isMulti = true; - let selectedRaw; + let selectedRaw = isMulti ? panels.filter((p) => selected.includes(p.panel_id)) : selected; function labelMapper(panel) { return panel.title || ""; @@ -53,6 +53,10 @@ selectedRaw = selectedRaw.panel_id; } } + + + console.log(selectedRaw) + console.log(selected) } onMount(() => { diff --git a/frontend/src/components/SimplePanelDropdown.svelte b/frontend/src/components/SimplePanelDropdown.svelte new file mode 100644 index 0000000..8bbee25 --- /dev/null +++ b/frontend/src/components/SimplePanelDropdown.svelte @@ -0,0 +1,20 @@ + + {#each panels as panel} + + {/each} + + + \ No newline at end of file diff --git a/frontend/src/components/manage/SettingsCard.svelte b/frontend/src/components/manage/SettingsCard.svelte index 9167461..7d85d07 100644 --- a/frontend/src/components/manage/SettingsCard.svelte +++ b/frontend/src/components/manage/SettingsCard.svelte @@ -25,12 +25,18 @@ -
- - - - - +
+

Start Ticket From Message Settings

+
+ + + + + + + + +
@@ -57,12 +63,25 @@ import Button from "../Button.svelte"; import NamingScheme from "../NamingScheme.svelte"; import Dropdown from "../form/Dropdown.svelte"; + import PanelDropdown from "../PanelDropdown.svelte"; + import SimplePanelDropdown from "../SimplePanelDropdown.svelte"; export let guildId; setDefaultHeaders(); let channels = []; + let panels = []; + + async function loadPanels() { + const res = await axios.get(`${API_URL}/api/${guildId}/panels`); + if (res.status !== 200) { + notifyError(res.data.error); + return; + } + + panels = res.data; + } async function loadChannels() { const res = await axios.get(`${API_URL}/api/${guildId}/channels`); @@ -156,6 +175,7 @@ } withLoadingScreen(async () => { + await loadPanels(); await loadChannels(); await loadData(); }); @@ -183,6 +203,10 @@ height: 100%; } + .from-message-settings { + border-top: 1px solid rgba(0, 0, 0, .25); + } + @media only screen and (max-width: 950px) { .row { flex-direction: column; diff --git a/go.mod b/go.mod index 0f92d29..46bf373 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/BurntSushi/toml v0.3.1 github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb github.com/TicketsBot/common v0.0.0-20210903095620-eb02b87cb4ca - github.com/TicketsBot/database v0.0.0-20210902205640-76b8973364e8 + github.com/TicketsBot/database v0.0.0-20210903140813-152a2383314c github.com/TicketsBot/worker v0.0.0-20210903100019-6e6eab3a3196 github.com/apex/log v1.1.2 github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect