From 3a6deeba913b895bc956052938b23aebb3fa62f8 Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Fri, 3 Jun 2022 23:06:04 +0100 Subject: [PATCH] Ordered form inputs --- app/http/endpoints/api/forms/swapinputs.go | 77 +++++++++++++++++++ app/http/server.go | 1 + .../src/components/manage/FormInputRow.svelte | 36 ++++++++- frontend/src/views/Forms.svelte | 43 +++++++++-- go.mod | 4 + 5 files changed, 154 insertions(+), 7 deletions(-) create mode 100644 app/http/endpoints/api/forms/swapinputs.go diff --git a/app/http/endpoints/api/forms/swapinputs.go b/app/http/endpoints/api/forms/swapinputs.go new file mode 100644 index 0000000..5b37bad --- /dev/null +++ b/app/http/endpoints/api/forms/swapinputs.go @@ -0,0 +1,77 @@ +package forms + +import ( + dbclient "github.com/TicketsBot/GoPanel/database" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/database" + "github.com/gin-gonic/gin" + "strconv" +) + +func SwapInput(ctx *gin.Context) { + guildId := ctx.Keys["guildid"].(uint64) + + formId, err := strconv.Atoi(ctx.Param("form_id")) + if err != nil { + ctx.JSON(400, utils.ErrorStr("Invalid form ID")) + return + } + + inputId, err := strconv.Atoi(ctx.Param("input_id")) + if err != nil { + ctx.JSON(400, utils.ErrorStr("Invalid form ID")) + return + } + + form, ok, err := dbclient.Client.Forms.Get(formId) + if err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + if !ok { + ctx.JSON(404, utils.ErrorStr("Form not found")) + return + } + + if form.GuildId != guildId { + ctx.JSON(403, utils.ErrorStr("Form does not belong to this guild")) + return + } + + input, ok, err := dbclient.Client.FormInput.Get(inputId) + if err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + if !ok { + ctx.JSON(404, utils.ErrorStr("Input not found")) + return + } + + if input.FormId != formId { + ctx.JSON(403, utils.ErrorStr("Input does not belong to this form")) + return + } + + var direction database.InputSwapDirection + { + directionRaw := ctx.Param("direction") + if directionRaw == "up" { + direction = database.SwapDirectionUp + } else if directionRaw == "down" { + direction = database.SwapDirectionDown + } else { + ctx.JSON(400, utils.ErrorStr("Invalid swap direction")) + return + } + } + + if err := dbclient.Client.FormInput.SwapDirection(inputId, formId, direction); err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + ctx.JSON(200, utils.SuccessResponse) +} diff --git a/app/http/server.go b/app/http/server.go index 6504b67..9dffacc 100644 --- a/app/http/server.go +++ b/app/http/server.go @@ -110,6 +110,7 @@ func StartServer() { guildAuthApiAdmin.DELETE("/forms/:form_id", api_forms.DeleteForm) guildAuthApiAdmin.POST("/forms/:form_id", api_forms.CreateInput) guildAuthApiAdmin.PATCH("/forms/:form_id/:input_id", api_forms.UpdateInput) + guildAuthApiAdmin.PATCH("/forms/:form_id/:input_id/:direction", api_forms.SwapInput) guildAuthApiAdmin.DELETE("/forms/:form_id/:input_id", api_forms.DeleteInput) // Should be a GET, but easier to take a body for development purposes diff --git a/frontend/src/components/manage/FormInputRow.svelte b/frontend/src/components/manage/FormInputRow.svelte index 3cb8b59..c6d7541 100644 --- a/frontend/src/components/manage/FormInputRow.svelte +++ b/frontend/src/components/manage/FormInputRow.svelte @@ -1,10 +1,22 @@
- +
{#if windowWidth > 950} + {#if withDirectionButtons} + forwardMove("down")} class="button-form"> + + +
forwardMove("up")} class="button-form"> + +
+ {/if} {#if withSaveButton}
@@ -36,6 +48,18 @@ {#if windowWidth <= 950}
+ {#if withDirectionButtons} +
+ forwardMove("down")} class="button-form"> +
+
+
forwardMove("up")} class="button-form"> +
+ {/if} {#if withSaveButton}
@@ -71,6 +95,10 @@ export let withCreateButton = false; export let withSaveButton = false; export let withDeleteButton = false; + export let withDirectionButtons = false; + + export let index; + export let formLength; export let data = {}; @@ -87,6 +115,10 @@ function forwardDelete() { dispatch('delete', {}); } + + function forwardMove(direction) { + dispatch('move', {direction: direction}); + }