From 10fd96d2e3ee4dde09c7824e0a37824806b049af Mon Sep 17 00:00:00 2001 From: Elena Date: Wed, 2 Nov 2022 15:39:11 +0100 Subject: [PATCH 1/2] fetch all stemmingen and ensure positions of stemmingen stay correct --- app/components/treatment/voting/modal.js | 60 ++++++++++++++++++------ app/models/behandeling-van-agendapunt.js | 2 +- app/models/stemming.js | 4 +- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/app/components/treatment/voting/modal.js b/app/components/treatment/voting/modal.js index f720d3623..e90e862e9 100644 --- a/app/components/treatment/voting/modal.js +++ b/app/components/treatment/voting/modal.js @@ -1,6 +1,6 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; -import { tracked } from '@glimmer/tracking'; +import { tracked } from 'tracked-built-ins'; import Component from '@glimmer/component'; import { task, restartableTask } from 'ember-concurrency'; /** @typedef {import("../../../models/behandeling-van-agendapunt").default} Behandeling*/ @@ -17,7 +17,7 @@ import { task, restartableTask } from 'ember-concurrency'; /** @extends {Component} */ export default class TreatmentVotingModalComponent extends Component { - @tracked stemmingen; + @tracked stemmingen = tracked([]); @tracked create = false; @tracked edit = false; @tracked editMode = false; @@ -33,9 +33,33 @@ export default class TreatmentVotingModalComponent extends Component { @restartableTask /** @type {import("ember-concurrency").Task} */ *fetchStemmingen() { - this.stemmingen = (yield this.args.behandeling.stemmingen).sortBy( - 'position' - ); + const stemmingen = []; + const pageSize = 20; + + const firstPage = yield this.store.query('stemming', { + 'filter[behandeling-van-agendapunt][:id:]': this.args.behandeling.id, + sort: 'position', + page: { + size: pageSize, + } + }) + const count = firstPage.meta.count; + firstPage.forEach((result) => stemmingen.push(result)); + let pageNumber = 1; + + while (pageNumber * pageSize < count) { + const pageResults = yield this.store.query('stemming', { + 'filter[behandeling-van-agendapunt][:id:]': this.args.behandeling.id, + sort: 'position', + page: { + size: pageSize, + number: pageNumber + } + }) + pageResults.forEach((result) => stemmingen.push(result)); + pageNumber++; + } + this.stemmingen = tracked(stemmingen); } @task @@ -45,16 +69,11 @@ export default class TreatmentVotingModalComponent extends Component { if (isNew) { this.editStemming.stemming.position = - this.args.behandeling.stemmingen.length; + this.stemmingen.length; + this.editStemming.stemming.behandelingVanAgendapunt = this.args.behandeling; + this.stemmingen.push(this.editStemming.stemming); } yield this.editStemming.saveTask.perform(); - - if (isNew) { - this.args.behandeling.stemmingen.pushObject(this.editStemming.stemming); - this.args.behandeling.save(); - } - yield this.fetchStemmingen.perform(); - this.onCancelEdit(); } @@ -81,6 +100,17 @@ export default class TreatmentVotingModalComponent extends Component { this.editStemming.stemming = stemmingToEdit; } + + @task + *fixPositions(){ + for (const [i, stemming] of this.stemmingen.entries()) { + if(i !== stemming.position){ + stemming.position = i; + yield stemming.save(); + } + } + } + @action toggleEditStemming(stemming) { this.editStemming.stemming = stemming; @@ -90,7 +120,9 @@ export default class TreatmentVotingModalComponent extends Component { @task *removeStemming(stemming) { yield stemming.destroyRecord(); - this.stemmingen = this.stemmingen.reject((x) => x === stemming); + const index = this.stemmingen.indexOf(stemming); + this.stemmingen.splice(index, 1); + yield this.fixPositions.perform(); } @action diff --git a/app/models/behandeling-van-agendapunt.js b/app/models/behandeling-van-agendapunt.js index 86a62aeb5..d15926baf 100644 --- a/app/models/behandeling-van-agendapunt.js +++ b/app/models/behandeling-van-agendapunt.js @@ -16,7 +16,7 @@ export default class BehandelingVanAgendapunt extends Model { besluiten; @hasMany('mandataris', { inverse: null }) aanwezigen; @hasMany('mandataris', { inverse: null }) afwezigen; - @hasMany('stemming', { inverse: null }) stemmingen; + @hasMany('stemming', { inverse: 'behandelingVanAgendapunt' }) stemmingen; @belongsTo('document-container') documentContainer; @belongsTo('versioned-behandeling') versionedBehandeling; diff --git a/app/models/stemming.js b/app/models/stemming.js index 9a4b2fa48..701a09150 100644 --- a/app/models/stemming.js +++ b/app/models/stemming.js @@ -1,4 +1,4 @@ -import Model, { attr, hasMany } from '@ember-data/model'; +import Model, { attr, hasMany, belongsTo } from '@ember-data/model'; export default class StemmingModel extends Model { @attr('number') position; @@ -15,4 +15,6 @@ export default class StemmingModel extends Model { @hasMany('mandataris', { inverse: null }) stemmers; @hasMany('mandataris', { inverse: null }) tegenstanders; @hasMany('mandataris', { inverse: null }) voorstanders; + + @belongsTo('behandeling-van-agendapunt', { inverse: 'stemmingen' }) behandelingVanAgendapunt; } From e7d2a5116b204d46967c43d9dffe09b68fa3eebd Mon Sep 17 00:00:00 2001 From: Elena Date: Wed, 2 Nov 2022 15:46:07 +0100 Subject: [PATCH 2/2] linting --- app/components/treatment/voting/modal.js | 21 ++++++++++----------- app/models/stemming.js | 3 ++- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/components/treatment/voting/modal.js b/app/components/treatment/voting/modal.js index e90e862e9..ecd5c971e 100644 --- a/app/components/treatment/voting/modal.js +++ b/app/components/treatment/voting/modal.js @@ -41,8 +41,8 @@ export default class TreatmentVotingModalComponent extends Component { sort: 'position', page: { size: pageSize, - } - }) + }, + }); const count = firstPage.meta.count; firstPage.forEach((result) => stemmingen.push(result)); let pageNumber = 1; @@ -53,9 +53,9 @@ export default class TreatmentVotingModalComponent extends Component { sort: 'position', page: { size: pageSize, - number: pageNumber - } - }) + number: pageNumber, + }, + }); pageResults.forEach((result) => stemmingen.push(result)); pageNumber++; } @@ -68,9 +68,9 @@ export default class TreatmentVotingModalComponent extends Component { const isNew = this.editStemming.stemming.isNew; if (isNew) { - this.editStemming.stemming.position = - this.stemmingen.length; - this.editStemming.stemming.behandelingVanAgendapunt = this.args.behandeling; + this.editStemming.stemming.position = this.stemmingen.length; + this.editStemming.stemming.behandelingVanAgendapunt = + this.args.behandeling; this.stemmingen.push(this.editStemming.stemming); } yield this.editStemming.saveTask.perform(); @@ -100,11 +100,10 @@ export default class TreatmentVotingModalComponent extends Component { this.editStemming.stemming = stemmingToEdit; } - @task - *fixPositions(){ + *fixPositions() { for (const [i, stemming] of this.stemmingen.entries()) { - if(i !== stemming.position){ + if (i !== stemming.position) { stemming.position = i; yield stemming.save(); } diff --git a/app/models/stemming.js b/app/models/stemming.js index 701a09150..40abfb05f 100644 --- a/app/models/stemming.js +++ b/app/models/stemming.js @@ -16,5 +16,6 @@ export default class StemmingModel extends Model { @hasMany('mandataris', { inverse: null }) tegenstanders; @hasMany('mandataris', { inverse: null }) voorstanders; - @belongsTo('behandeling-van-agendapunt', { inverse: 'stemmingen' }) behandelingVanAgendapunt; + @belongsTo('behandeling-van-agendapunt', { inverse: 'stemmingen' }) + behandelingVanAgendapunt; }