From 0d294b2207c3dd80466b51f4ffdf799c960652bf Mon Sep 17 00:00:00 2001 From: Paul Maillardet Date: Mon, 22 Mar 2021 12:07:29 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Corrige=20l'initial=20loading=20et=20enl?= =?UTF-8?q?=C3=A8ve=20l'alignement=20des=20routes=20d'API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/App/ApiRouter.php | 138 +++++++++++++-------------- server/src/views/common/loading.twig | 12 ++- 2 files changed, 80 insertions(+), 70 deletions(-) diff --git a/server/src/App/ApiRouter.php b/server/src/App/ApiRouter.php index e13beac49..27ee38d70 100644 --- a/server/src/App/ApiRouter.php +++ b/server/src/App/ApiRouter.php @@ -7,85 +7,85 @@ class ApiRouter { private $_routes = [ 'get' => [ - '/session[/]' => 'AuthController:getSelf', - '/attributes[/]' => 'AttributeController:getAll', - '/users[/]' => 'UserController:getAll', - '/users/{id:[0-9]+}[/]' => 'UserController:getOne', - '/users/{id:[0-9]+}/settings[/]' => 'UserController:getSettings', - '/tags[/]' => 'TagController:getAll', - '/tags/{id:[0-9]+}/persons[/]' => 'TagController:getPersons', - '/tags/{id:[0-9]+}/materials[/]' => 'TagController:getMaterials', - '/categories[/]' => 'CategoryController:getAll', - '/categories/{id:[0-9]+}[/]' => 'CategoryController:getOne', - '/persons[/]' => 'PersonController:getAll', - '/persons/{id:[0-9]+}[/]' => 'PersonController:getOne', - '/persons/{id:[0-9]+}/tags[/]' => 'PersonController:getTags', - '/countries[/]' => 'CountryController:getAll', - '/countries/{id:[0-9]+}[/]' => 'CountryController:getOne', - '/companies[/]' => 'CompanyController:getAll', - '/companies/{id:[0-9]+}[/]' => 'CompanyController:getOne', - '/companies/{id:[0-9]+}/persons[/]' => 'CompanyController:getPersons', - '/parks[/]' => 'ParkController:getAll', - '/parks/{id:[0-9]+}[/]' => 'ParkController:getOne', - '/materials[/]' => 'MaterialController:getAll', - '/materials/{id:[0-9]+}[/]' => 'MaterialController:getOne', - '/materials/{id:[0-9]+}/tags[/]' => 'MaterialController:getTags', - '/materials/{id:[0-9]+}/documents[/]' => 'MaterialController:getAllDocuments', - '/events[/]' => 'EventController:getAll', - '/events/{id:[0-9]+}[/]' => 'EventController:getOne', + '/session[/]' => 'AuthController:getSelf', + '/attributes[/]' => 'AttributeController:getAll', + '/users[/]' => 'UserController:getAll', + '/users/{id:[0-9]+}[/]' => 'UserController:getOne', + '/users/{id:[0-9]+}/settings[/]' => 'UserController:getSettings', + '/tags[/]' => 'TagController:getAll', + '/tags/{id:[0-9]+}/persons[/]' => 'TagController:getPersons', + '/tags/{id:[0-9]+}/materials[/]' => 'TagController:getMaterials', + '/categories[/]' => 'CategoryController:getAll', + '/categories/{id:[0-9]+}[/]' => 'CategoryController:getOne', + '/persons[/]' => 'PersonController:getAll', + '/persons/{id:[0-9]+}[/]' => 'PersonController:getOne', + '/persons/{id:[0-9]+}/tags[/]' => 'PersonController:getTags', + '/countries[/]' => 'CountryController:getAll', + '/countries/{id:[0-9]+}[/]' => 'CountryController:getOne', + '/companies[/]' => 'CompanyController:getAll', + '/companies/{id:[0-9]+}[/]' => 'CompanyController:getOne', + '/companies/{id:[0-9]+}/persons[/]' => 'CompanyController:getPersons', + '/parks[/]' => 'ParkController:getAll', + '/parks/{id:[0-9]+}[/]' => 'ParkController:getOne', + '/materials[/]' => 'MaterialController:getAll', + '/materials/{id:[0-9]+}[/]' => 'MaterialController:getOne', + '/materials/{id:[0-9]+}/tags[/]' => 'MaterialController:getTags', + '/materials/{id:[0-9]+}/documents[/]' => 'MaterialController:getAllDocuments', + '/events[/]' => 'EventController:getAll', + '/events/{id:[0-9]+}[/]' => 'EventController:getOne', '/events/{id:[0-9]+}/missing-materials[/]' => 'EventController:getMissingMaterials', - '/bills/{id:[0-9]+}[/]' => 'BillController:getOne', + '/bills/{id:[0-9]+}[/]' => 'BillController:getOne', ], 'post' => [ - '/session[/]' => 'AuthController:loginWithForm', - '/users/signup[/]' => 'UserController:create', - '/categories[/]' => 'CategoryController:create', - '/subcategories[/]' => 'SubCategoryController:create', - '/tags[/]' => 'TagController:create', - '/persons[/]' => 'PersonController:create', - '/companies[/]' => 'CompanyController:create', - '/parks[/]' => 'ParkController:create', - '/materials[/]' => 'MaterialController:create', + '/session[/]' => 'AuthController:loginWithForm', + '/users/signup[/]' => 'UserController:create', + '/categories[/]' => 'CategoryController:create', + '/subcategories[/]' => 'SubCategoryController:create', + '/tags[/]' => 'TagController:create', + '/persons[/]' => 'PersonController:create', + '/companies[/]' => 'CompanyController:create', + '/parks[/]' => 'ParkController:create', + '/materials[/]' => 'MaterialController:create', '/materials/{id:[0-9]+}/documents[/]' => 'MaterialController:handleUploadDocuments', - '/attributes[/]' => 'AttributeController:create', - '/events[/]' => 'EventController:create', - '/events/{eventId:[0-9]+}/bill[/]' => 'BillController:create', + '/attributes[/]' => 'AttributeController:create', + '/events[/]' => 'EventController:create', + '/events/{eventId:[0-9]+}/bill[/]' => 'BillController:create', ], 'put' => [ - '/users/{id:[0-9]+}[/]' => 'UserController:update', - '/users/restore/{id:[0-9]+}[/]' => 'UserController:restore', - '/users/{id:[0-9]+}/settings[/]' => 'UserController:updateSettings', - '/categories/{id:[0-9]+}[/]' => 'CategoryController:update', - '/categories/restore/{id:[0-9]+}[/]' => 'CategoryController:restore', - '/subcategories/{id:[0-9]+}[/]' => 'SubCategoryController:update', + '/users/{id:[0-9]+}[/]' => 'UserController:update', + '/users/restore/{id:[0-9]+}[/]' => 'UserController:restore', + '/users/{id:[0-9]+}/settings[/]' => 'UserController:updateSettings', + '/categories/{id:[0-9]+}[/]' => 'CategoryController:update', + '/categories/restore/{id:[0-9]+}[/]' => 'CategoryController:restore', + '/subcategories/{id:[0-9]+}[/]' => 'SubCategoryController:update', '/subcategories/restore/{id:[0-9]+}[/]' => 'SubCategoryController:restore', - '/tags/{id:[0-9]+}[/]' => 'TagController:update', - '/tags/restore/{id:[0-9]+}[/]' => 'TagController:restore', - '/persons/{id:[0-9]+}[/]' => 'PersonController:update', - '/persons/restore/{id:[0-9]+}[/]' => 'PersonController:restore', - '/companies/{id:[0-9]+}[/]' => 'CompanyController:update', - '/companies/restore/{id:[0-9]+}[/]' => 'CompanyController:restore', - '/parks/{id:[0-9]+}[/]' => 'ParkController:update', - '/parks/restore/{id:[0-9]+}[/]' => 'ParkController:restore', - '/materials/{id:[0-9]+}[/]' => 'MaterialController:update', - '/materials/restore/{id:[0-9]+}[/]' => 'MaterialController:restore', - '/attributes/{id:[0-9]+}[/]' => 'AttributeController:update', - '/events/{id:[0-9]+}[/]' => 'EventController:update', - '/events/restore/{id:[0-9]+}[/]' => 'EventController:restore', + '/tags/{id:[0-9]+}[/]' => 'TagController:update', + '/tags/restore/{id:[0-9]+}[/]' => 'TagController:restore', + '/persons/{id:[0-9]+}[/]' => 'PersonController:update', + '/persons/restore/{id:[0-9]+}[/]' => 'PersonController:restore', + '/companies/{id:[0-9]+}[/]' => 'CompanyController:update', + '/companies/restore/{id:[0-9]+}[/]' => 'CompanyController:restore', + '/parks/{id:[0-9]+}[/]' => 'ParkController:update', + '/parks/restore/{id:[0-9]+}[/]' => 'ParkController:restore', + '/materials/{id:[0-9]+}[/]' => 'MaterialController:update', + '/materials/restore/{id:[0-9]+}[/]' => 'MaterialController:restore', + '/attributes/{id:[0-9]+}[/]' => 'AttributeController:update', + '/events/{id:[0-9]+}[/]' => 'EventController:update', + '/events/restore/{id:[0-9]+}[/]' => 'EventController:restore', ], 'delete' => [ - '/users/{id:[0-9]+}[/]' => 'UserController:delete', - '/categories/{id:[0-9]+}[/]' => 'CategoryController:delete', + '/users/{id:[0-9]+}[/]' => 'UserController:delete', + '/categories/{id:[0-9]+}[/]' => 'CategoryController:delete', '/subcategories/{id:[0-9]+}[/]' => 'SubCategoryController:delete', - '/tags/{id:[0-9]+}[/]' => 'TagController:delete', - '/persons/{id:[0-9]+}[/]' => 'PersonController:delete', - '/companies/{id:[0-9]+}[/]' => 'CompanyController:delete', - '/parks/{id:[0-9]+}[/]' => 'ParkController:delete', - '/materials/{id:[0-9]+}[/]' => 'MaterialController:delete', - '/attributes/{id:[0-9]+}[/]' => 'AttributeController:delete', - '/events/{id:[0-9]+}[/]' => 'EventController:delete', - '/bills/{id:[0-9]+}[/]' => 'BillController:delete', - '/documents/{id:[0-9]+}[/]' => 'DocumentController:delete', + '/tags/{id:[0-9]+}[/]' => 'TagController:delete', + '/persons/{id:[0-9]+}[/]' => 'PersonController:delete', + '/companies/{id:[0-9]+}[/]' => 'CompanyController:delete', + '/parks/{id:[0-9]+}[/]' => 'ParkController:delete', + '/materials/{id:[0-9]+}[/]' => 'MaterialController:delete', + '/attributes/{id:[0-9]+}[/]' => 'AttributeController:delete', + '/events/{id:[0-9]+}[/]' => 'EventController:delete', + '/bills/{id:[0-9]+}[/]' => 'BillController:delete', + '/documents/{id:[0-9]+}[/]' => 'DocumentController:delete', ], ]; diff --git a/server/src/views/common/loading.twig b/server/src/views/common/loading.twig index d055dda46..68c9cb436 100644 --- a/server/src/views/common/loading.twig +++ b/server/src/views/common/loading.twig @@ -1,4 +1,14 @@

Loading... From 815b14bfd35e9b30fba8c825520bbf861c9f1806 Mon Sep 17 00:00:00 2001 From: Paul Maillardet Date: Mon, 22 Mar 2021 19:56:55 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Supprime=20la=20pagination=20du=20mat=C3=A9?= =?UTF-8?q?riel=20pour=20l'=C3=A9dition=20d'=C3=A9v=C3=A9nement=20(#115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../EventMaterials/EventMaterials.scss | 9 +- .../EventMaterials/EventMaterials.vue | 3 + .../src/components/MaterialsFilters/index.js | 11 +- client/src/locale/en/pages.js | 2 + client/src/locale/fr/pages.js | 2 + .../Step4/MaterialsList/MaterialsList.scss | 5 + .../Step4/MaterialsList/MaterialsList.vue | 33 ++- .../Step4/MaterialsList/MaterialsStore.js | 6 +- .../Step4/MaterialsList/Quantity/Quantity.vue | 4 + .../pages/Event/Step4/MaterialsList/index.js | 136 +++++---- server/src/App/ApiRouter.php | 1 + .../App/Controllers/MaterialController.php | 53 ++-- server/tests/endpoints/MaterialsTest.php | 271 +++++++++++++++++- 14 files changed, 443 insertions(+), 94 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56ee613e5..7a7e19ce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ Ce projet adhère au principe du [Semantic Versioning](https://semver.org/spec/v - Dans le listing du matériel, ajoute un lien vers la gestion des caractéristiques spéciales. - Ajoute la possibilité de modifier le nom des caractéristiques spéciales (#107). - Améliore la disposition des filtres dans les pages de listing du matériel (#114). +- Supprime la pagination côté serveur pour le matériel à l'étape 4 de l'édition d'événement, et améliore l'UX (#115). ## 0.11.0 (2021-01-14) diff --git a/client/src/components/EventMaterials/EventMaterials.scss b/client/src/components/EventMaterials/EventMaterials.scss index 41faa2f96..d40c6ddb9 100644 --- a/client/src/components/EventMaterials/EventMaterials.scss +++ b/client/src/components/EventMaterials/EventMaterials.scss @@ -41,11 +41,18 @@ margin-bottom: .35rem; border-bottom: 1px dashed $list-left-border-color; + &__quantity-first { + flex: 0 0 35px; + color: $text-light-color; + padding-right: $content-padding-large-horizontal; + text-align: right; + } + &__quantity { flex: 0 0 3rem; margin: 0 .8rem 0 .8rem; - .fas { + .fa-times { margin-right: .2rem; color: $text-light-color; font-size: .8rem; diff --git a/client/src/components/EventMaterials/EventMaterials.vue b/client/src/components/EventMaterials/EventMaterials.vue index 8ffe7f886..0bd106189 100644 --- a/client/src/components/EventMaterials/EventMaterials.vue +++ b/client/src/components/EventMaterials/EventMaterials.vue @@ -27,6 +27,9 @@ :key="material.id" class="EventMaterials__item" > +

+ {{ material.pivot.quantity }} +
{{ material.name }}
diff --git a/client/src/components/MaterialsFilters/index.js b/client/src/components/MaterialsFilters/index.js index 9be1d9b9f..0e8f55712 100644 --- a/client/src/components/MaterialsFilters/index.js +++ b/client/src/components/MaterialsFilters/index.js @@ -88,7 +88,6 @@ export default { }, setQueryFilters() { - const query = {}; const { park, category, @@ -96,6 +95,14 @@ export default { tags, } = this.filters; + const filters = { + park: park || null, + category: category || null, + subCategory: subCategory || null, + tags: tags.map((tag) => tag.label), + }; + + const query = {}; if (park) { query.park = park; } @@ -110,7 +117,7 @@ export default { } this.$router.push({ path: this.baseRoute, query }); - this.$emit('change'); + this.$emit('change', filters); }, }, }; diff --git a/client/src/locale/en/pages.js b/client/src/locale/en/pages.js index 9925fe776..1f7265894 100644 --- a/client/src/locale/en/pages.js +++ b/client/src/locale/en/pages.js @@ -87,6 +87,8 @@ export default { 'saved': "Event saved.", 'not-saved': "Event has not saved modifications", 'display-only-selected-materials': "Display event's selected materials only?", + 'display-all-materials-to-add-some': "Display all materials to add some", + 'display-only-event-materials': "Display only event's materials", 'event-not-confirmed-help': "The event is not confirmed yet. It is subject to change at any time.", 'event-confirmed-help': "The event is confirmed: its information should no longer change.", 'event-missing-materials': "Missing materials", diff --git a/client/src/locale/fr/pages.js b/client/src/locale/fr/pages.js index 5b1da9863..0ce4670a5 100644 --- a/client/src/locale/fr/pages.js +++ b/client/src/locale/fr/pages.js @@ -87,6 +87,8 @@ export default { 'saved': "Événement sauvegardé.", 'not-saved': "L'événement comporte des modifications non sauvegardées", 'display-only-selected-materials': "Afficher uniquement le matériel de l'événement\u00a0?", + 'display-all-materials-to-add-some': "Afficher tout le matériel pour en ajouter", + 'display-only-event-materials': "Afficher uniquement le matériel de l'événement", 'event-not-confirmed-help': "L'événement n'est pas encore confirmé, il est susceptible de changer à tout moment.", 'event-confirmed-help': "L'événement est confirmé\u00a0: Ses informations ne devraient plus changer.", 'event-missing-materials': "Matériel manquant", diff --git a/client/src/pages/Event/Step4/MaterialsList/MaterialsList.scss b/client/src/pages/Event/Step4/MaterialsList/MaterialsList.scss index d2a9b9a4c..01859fde3 100644 --- a/client/src/pages/Event/Step4/MaterialsList/MaterialsList.scss +++ b/client/src/pages/Event/Step4/MaterialsList/MaterialsList.scss @@ -133,4 +133,9 @@ padding: 6px 8px; } } + + &__add-more { + text-align: center; + margin: $content-padding-small-vertical 0 50px; + } } diff --git a/client/src/pages/Event/Step4/MaterialsList/MaterialsList.vue b/client/src/pages/Event/Step4/MaterialsList/MaterialsList.vue index fb8cddde9..56515bb98 100644 --- a/client/src/pages/Event/Step4/MaterialsList/MaterialsList.vue +++ b/client/src/pages/Event/Step4/MaterialsList/MaterialsList.vue @@ -3,10 +3,10 @@
-
+
{{ $t('page-events.display-only-selected-materials') }} {{ $t('help-loading') }}
-
@@ -70,13 +71,35 @@
-
+ +
+ + +
diff --git a/client/src/pages/Event/Step4/MaterialsList/MaterialsStore.js b/client/src/pages/Event/Step4/MaterialsList/MaterialsStore.js index 9f3760b88..4ba483ffb 100644 --- a/client/src/pages/Event/Step4/MaterialsList/MaterialsStore.js +++ b/client/src/pages/Event/Step4/MaterialsList/MaterialsStore.js @@ -16,7 +16,7 @@ export default new Vuex.Store({ setQuantity(state, { id, quantity }) { state.quantities[id] = quantity; - if (!state.quantities[id]) { + if (state.quantities[id] === 0) { delete state.quantities[id]; } }, @@ -34,6 +34,10 @@ export default new Vuex.Store({ return; } state.quantities[id] -= 1; + + if (state.quantities[id] === 0) { + delete state.quantities[id]; + } }, }, getters: { diff --git a/client/src/pages/Event/Step4/MaterialsList/Quantity/Quantity.vue b/client/src/pages/Event/Step4/MaterialsList/Quantity/Quantity.vue index 3a8a2a526..30abe3695 100644 --- a/client/src/pages/Event/Step4/MaterialsList/Quantity/Quantity.vue +++ b/client/src/pages/Event/Step4/MaterialsList/Quantity/Quantity.vue @@ -1,6 +1,8 @@