New options

This commit is contained in:
rxdn 2021-09-03 16:37:02 +01:00
parent 35423e03d9
commit e26400da78
5 changed files with 85 additions and 8 deletions

View File

@ -3,6 +3,7 @@ package api
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"github.com/TicketsBot/GoPanel/botcontext" "github.com/TicketsBot/GoPanel/botcontext"
dbclient "github.com/TicketsBot/GoPanel/database" dbclient "github.com/TicketsBot/GoPanel/database"
"github.com/TicketsBot/GoPanel/rpc/cache" "github.com/TicketsBot/GoPanel/rpc/cache"
@ -54,6 +55,10 @@ func UpdateSettingsHandler(ctx *gin.Context) {
} }
func (s *Settings) updateSettings(guildId uint64) error { func (s *Settings) updateSettings(guildId uint64) error {
if err := s.Validate(guildId); err != nil {
return err
}
group, _ := errgroup.WithContext(context.Background()) group, _ := errgroup.WithContext(context.Background())
group.Go(func() error { group.Go(func() error {
@ -67,6 +72,30 @@ func (s *Settings) updateSettings(guildId uint64) error {
return group.Wait() 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 { func setOpenCommandPermissions(guildId uint64, disabled bool) error {
ctx, err := botcontext.ContextForGuild(guildId) ctx, err := botcontext.ContextForGuild(guildId)
if err != nil { if err != nil {

View File

@ -14,7 +14,7 @@
export let selected; export let selected;
export let isMulti = true; export let isMulti = true;
let selectedRaw; let selectedRaw = isMulti ? panels.filter((p) => selected.includes(p.panel_id)) : selected;
function labelMapper(panel) { function labelMapper(panel) {
return panel.title || ""; return panel.title || "";
@ -53,6 +53,10 @@
selectedRaw = selectedRaw.panel_id; selectedRaw = selectedRaw.panel_id;
} }
} }
console.log(selectedRaw)
console.log(selected)
} }
onMount(() => { onMount(() => {

View File

@ -0,0 +1,20 @@
<Dropdown {col1} {col2} {col3} {col4} bind:value label={label}>
{#each panels as panel}
<option value="{panel.panel_id}">
{panel.title}
</option>
{/each}
</Dropdown>
<script>
import Dropdown from "./form/Dropdown.svelte"
export let value;
export let label;
export let panels = [];
export let col1 = false;
export let col2 = false;
export let col3 = false;
export let col4 = false;
</script>

View File

@ -25,12 +25,18 @@
<Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/> <Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/>
<Checkbox label="Disable /open Command" col4=true bind:value={data.disable_open_command}/> <Checkbox label="Disable /open Command" col4=true bind:value={data.disable_open_command}/>
</div> </div>
<div class="from-message-settings">
<h3>Start Ticket From Message Settings</h3>
<div class="row"> <div class="row">
<Dropdown col3={true} label="Context Menu Permission Level" bind:value={data.context_menu_permission_level}> <Dropdown col3={true} label="Required Permission Level" bind:value={data.context_menu_permission_level}>
<option value="0">Everyone</option> <option value="0">Everyone</option>
<option value="1">Support Representative</option> <option value="1">Support Representative</option>
<option value="2">Administrator</option> <option value="2">Administrator</option>
</Dropdown> </Dropdown>
<Checkbox label="Add Message Sender To Ticket" col3={true} bind:value={data.context_menu_add_sender} />
<SimplePanelDropdown label="Use Settings From Panel" col3={true} bind:panels bind:value={data.context_menu_panel} />
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-1"> <div class="col-1">
@ -57,12 +63,25 @@
import Button from "../Button.svelte"; import Button from "../Button.svelte";
import NamingScheme from "../NamingScheme.svelte"; import NamingScheme from "../NamingScheme.svelte";
import Dropdown from "../form/Dropdown.svelte"; import Dropdown from "../form/Dropdown.svelte";
import PanelDropdown from "../PanelDropdown.svelte";
import SimplePanelDropdown from "../SimplePanelDropdown.svelte";
export let guildId; export let guildId;
setDefaultHeaders(); setDefaultHeaders();
let channels = []; 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() { async function loadChannels() {
const res = await axios.get(`${API_URL}/api/${guildId}/channels`); const res = await axios.get(`${API_URL}/api/${guildId}/channels`);
@ -156,6 +175,7 @@
} }
withLoadingScreen(async () => { withLoadingScreen(async () => {
await loadPanels();
await loadChannels(); await loadChannels();
await loadData(); await loadData();
}); });
@ -183,6 +203,10 @@
height: 100%; height: 100%;
} }
.from-message-settings {
border-top: 1px solid rgba(0, 0, 0, .25);
}
@media only screen and (max-width: 950px) { @media only screen and (max-width: 950px) {
.row { .row {
flex-direction: column; flex-direction: column;

2
go.mod
View File

@ -6,7 +6,7 @@ require (
github.com/BurntSushi/toml v0.3.1 github.com/BurntSushi/toml v0.3.1
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
github.com/TicketsBot/common v0.0.0-20210903095620-eb02b87cb4ca 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/TicketsBot/worker v0.0.0-20210903100019-6e6eab3a3196
github.com/apex/log v1.1.2 github.com/apex/log v1.1.2
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect