diff --git a/app/http/endpoints/api/forms/getforms.go b/app/http/endpoints/api/forms/getforms.go index 79191f3..3f78252 100644 --- a/app/http/endpoints/api/forms/getforms.go +++ b/app/http/endpoints/api/forms/getforms.go @@ -3,9 +3,15 @@ package forms import ( dbclient "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/database" "github.com/gin-gonic/gin" ) +type embeddedForm struct { + database.Form + Inputs []database.FormInput `json:"inputs"` +} + func GetForms(ctx *gin.Context) { guildId := ctx.Keys["guildid"].(uint64) @@ -17,12 +23,22 @@ func GetForms(ctx *gin.Context) { inputs, err := dbclient.Client.FormInput.GetInputsForGuild(guildId) if err != nil { - ctx.JSON(500, utils.ErrorJson(err)) - return - } + ctx.JSON(500, utils.ErrorJson(err)) + return + } - ctx.JSON(200, gin.H{ - "forms": forms, - "inputs": inputs, - }) + data := make([]embeddedForm, len(forms)) + for i, form := range forms { + formInputs, ok := inputs[form.Id] + if !ok { + formInputs = make([]database.FormInput, 0) + } + + data[i] = embeddedForm{ + Form: form, + Inputs: formInputs, + } + } + + ctx.JSON(200, data) } diff --git a/frontend/src/views/Forms.svelte b/frontend/src/views/Forms.svelte index 795ded1..464d93c 100644 --- a/frontend/src/views/Forms.svelte +++ b/frontend/src/views/Forms.svelte @@ -39,8 +39,8 @@
- {#if activeFormId !== null && inputs[activeFormId.toString()]} - {#each inputs[activeFormId.toString()] as input} + {#if activeFormId !== null} + {#each forms.find(form => form.form_id === activeFormId).inputs as input} editInput(activeFormId, input.id, e.detail)} on:delete={() => deleteInput(activeFormId, input.id)}/> @@ -78,12 +78,15 @@ let newTitle; let forms = []; - let inputs = {}; let activeFormId = null; let inputCreationData = {}; $: windowWidth = 0; + function getForm(formId) { + return forms.find(form => form.form_id === formId); + } + async function createForm() { let data = { title: newTitle, @@ -97,7 +100,6 @@ notifySuccess(`Form ${newTitle} has been created`); newTitle = ''; - inputs[res.data.form_id] = {}; forms = [...forms, res.data]; activeFormId = res.data.form_id; } @@ -112,7 +114,6 @@ notifySuccess(`Form deleted successfully`); forms = forms.filter(form => form.form_id !== id); - delete inputs[id.toString()]; if (forms.length > 0) { activeFormId = forms[0].form_id; } else { @@ -129,8 +130,11 @@ return; } - inputs[res.data.form_id] = [...inputs[res.data.form_id], res.data]; + let form = getForm(res.data.form_id); + form.inputs = [...form.inputs, res.data]; + forms = forms; inputCreationData = {}; + notifySuccess('Form input created successfully'); } @@ -143,8 +147,10 @@ return; } - inputs[res.data.form_id] = inputs[res.data.form_id].filter(input => input.id !== inputId); - inputs[res.data.form_id] = [...inputs[res.data.form_id], res.data]; + let form = getForm(formId); + form.inputs = form.inputs.filter(input => input.id !== inputId); + form.inputs = [...form.inputs, res.data]; + notifySuccess('Form input updated successfully'); } @@ -155,7 +161,11 @@ return; } - inputs[formId] = inputs[formId].filter(input => input.id !== inputId); + // TODO: delete keyword? + let form = getForm(formId); + form.inputs = form.inputs.filter(input => input.id !== inputId); + forms = forms; + notifySuccess('Form input deleted successfully'); } @@ -166,22 +176,10 @@ return; } - forms = res.data.forms || []; - for (const form of forms) { - inputs[form.form_id] = {}; - } - - for (const [key, value] of Object.entries(res.data.inputs)) { - inputs[key] = value.map(input => ({...input, style: input.style.toString()})); - } - - if (forms.length > 0) { - activeFormId = forms[0].form_id; - } + forms = res.data || []; } function getActiveFormTitle() { - console.log(forms); return activeFormId !== null ? forms.find(f => f.form_id === activeFormId).title : 'Unknown'; }