From 4eea46b26ba667c1b78b698cea3ecf20fdf2bb39 Mon Sep 17 00:00:00 2001 From: Ewen Date: Tue, 19 Sep 2023 17:56:27 +0200 Subject: [PATCH] wip --- .../src/routes/ma_chaeliou/[id]/+page.svelte | 68 ++++++++++++++++++- frontend/src/routes/ma_geriou/+page.svelte | 3 +- ...0005_alter_grid_height_alter_grid_width.py | 22 ++++++ ...0006_alter_grid_height_alter_grid_width.py | 22 ++++++ grids/models.py | 8 ++- grids/serializers.py | 2 +- grids/views.py | 11 +++ 7 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 grids/migrations/0005_alter_grid_height_alter_grid_width.py create mode 100644 grids/migrations/0006_alter_grid_height_alter_grid_width.py diff --git a/frontend/src/routes/ma_chaeliou/[id]/+page.svelte b/frontend/src/routes/ma_chaeliou/[id]/+page.svelte index d10f367..4076581 100644 --- a/frontend/src/routes/ma_chaeliou/[id]/+page.svelte +++ b/frontend/src/routes/ma_chaeliou/[id]/+page.svelte @@ -5,10 +5,27 @@ import { onMount } from "svelte"; import type { Grid } from "$lib/types"; import { snakeToCamelCase } from "$lib/case"; + import { createForm } from "svelte-forms-lib"; + import * as yup from "yup"; let grid: Grid | null; $: grid = null; + // form + const { form, errors, state, handleChange, handleSubmit } = createForm({ + initialValues: { + width: "", + height: "", + }, + validationSchema: yup.object().shape({ + width: yup.number().positive().moreThan(0), + heigt: yup.number().positive().moreThan(0), + }), + onSubmit: (values) => { + submitPopulate(values); + }, + }); + function fetchData() { try { axios.get("grids/" + $page.params.id + "/").then((data) => { @@ -19,6 +36,17 @@ } } + function submitPopulate(values) { + try { + axios.patch("grids/" + $page.params.id + "/", { + width: values.width, + height: values.height, + }); + } catch (e) { + console.log(e); + } + } + onMount(() => { fetchData(); }); @@ -26,6 +54,44 @@
{#if grid} - id : {grid.id}, width: {grid.width}, height: {grid.height} + {#if grid.words.length == 0} +
+
+
+ + + {#if $errors.width} + {$errors.width} + {/if} +
+
+ + + {#if $errors.height} + {$errors.height} + {/if} +
+
+ +
+ {/if} {/if}
diff --git a/frontend/src/routes/ma_geriou/+page.svelte b/frontend/src/routes/ma_geriou/+page.svelte index 2d2256b..df6fa5f 100644 --- a/frontend/src/routes/ma_geriou/+page.svelte +++ b/frontend/src/routes/ma_geriou/+page.svelte @@ -7,8 +7,7 @@ import { deleteFromArray } from "$lib/arrays"; import { snakeToCamelCase } from "$lib/case"; - import { onMount, tick } from "svelte"; - import type { AxiosResponse } from "axios"; + import { onMount } from "svelte"; import { createForm } from "svelte-forms-lib"; import * as yup from "yup"; diff --git a/grids/migrations/0005_alter_grid_height_alter_grid_width.py b/grids/migrations/0005_alter_grid_height_alter_grid_width.py new file mode 100644 index 0000000..b720895 --- /dev/null +++ b/grids/migrations/0005_alter_grid_height_alter_grid_width.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2023-09-19 14:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("grids", "0004_grid_height_grid_width"), + ] + + operations = [ + migrations.AlterField( + model_name="grid", + name="height", + field=models.IntegerField(default=0), + ), + migrations.AlterField( + model_name="grid", + name="width", + field=models.IntegerField(default=0), + ), + ] diff --git a/grids/migrations/0006_alter_grid_height_alter_grid_width.py b/grids/migrations/0006_alter_grid_height_alter_grid_width.py new file mode 100644 index 0000000..d28040e --- /dev/null +++ b/grids/migrations/0006_alter_grid_height_alter_grid_width.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2023-09-19 14:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("grids", "0005_alter_grid_height_alter_grid_width"), + ] + + operations = [ + migrations.AlterField( + model_name="grid", + name="height", + field=models.IntegerField(default=1), + ), + migrations.AlterField( + model_name="grid", + name="width", + field=models.IntegerField(default=1), + ), + ] diff --git a/grids/models.py b/grids/models.py index 55a3b10..ba2f6d4 100644 --- a/grids/models.py +++ b/grids/models.py @@ -15,14 +15,18 @@ class Word(models.Model): class Grid(models.Model): level = models.ForeignKey(Level, on_delete=models.CASCADE, related_name="grids") words = models.ManyToManyField(Word, through="Placement") - width = models.IntegerField() - height = models.IntegerField() + width = models.IntegerField(default=1) + height = models.IntegerField(default=1) def save(self, *args, **kwargs): if not hasattr(self, "level") or self.level is None: self.level = Level.objects.first() super(Grid, self).save(*args, **kwargs) + def populate(self): + print(self.width) + print(self.height) + class Direction: RIGHT = 1 diff --git a/grids/serializers.py b/grids/serializers.py index b622ebb..a27cf6e 100644 --- a/grids/serializers.py +++ b/grids/serializers.py @@ -31,7 +31,7 @@ class WordSerializer(serializers.ModelSerializer): class GridSerializer(serializers.ModelSerializer): class Meta: model = Grid - fields = ["id", "words"] + fields = ["id", "words", "width", "height", "words"] class PlacementSerializer(serializers.ModelSerializer): diff --git a/grids/views.py b/grids/views.py index 1ba2f0f..4b135cc 100644 --- a/grids/views.py +++ b/grids/views.py @@ -27,6 +27,17 @@ class GridViewSet(viewsets.ModelViewSet): queryset = Grid.objects.all() serializer_class = GridSerializer + def partial_update(self, request, pk=None): + instance = self.get_object() + print(request.data) + serializer = self.get_serializer(instance, data=request.data, partial=True) + serializer.is_valid(raise_exception=True) + self.perform_update(serializer) + + instance.populate() + serializer = self.get_serializer(instance) + return Response(serializer.data) + class PlacementViewSet(viewsets.ModelViewSet): queryset = Placement.objects.all()