Skip to content

Commit ca78418

Browse files
committed
first draft for fixing drag&drop issues
1 parent 0044589 commit ca78418

File tree

1 file changed

+49
-8
lines changed

1 file changed

+49
-8
lines changed

src/app/shared/directives/drop-group/drop-group.directive.ts

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ export class DropGroupDirective implements OnInit {
5252
} else {
5353
switch (event.container.id) {
5454
case 'Exclusion':
55-
this.moveCriterionInExclusion(event.previousIndex, event.currentIndex);
55+
this.moveCriterionInExclusion(droppedCriterion, event.previousIndex, event.currentIndex);
5656
break;
5757
case 'Inclusion':
58-
this.moveCriterionInInclusion(event.previousIndex, event.currentIndex);
58+
this.moveCriterionInInclusion(droppedCriterion, event.previousIndex, event.currentIndex);
5959
break;
6060
default:
6161
break;
@@ -70,12 +70,12 @@ export class DropGroupDirective implements OnInit {
7070
}
7171
private addToInclusion(droppedCriterion: string, currentIndex: number): void {
7272
this.criteria = this.feasibilityQuery.getInclusionCriteria();
73-
this.criteria.splice(currentIndex, 0, [droppedCriterion]);
73+
this.addCriterionToInnerArray(this.criteria, droppedCriterion, currentIndex);
7474
this.queryProviderService.setInclusionCriteria(this.criteria);
7575
}
7676
private addToExclusion(droppedCriterion: string, currentIndex: number): void {
7777
this.criteria = this.feasibilityQuery.getExclusionCriteria();
78-
this.criteria.splice(currentIndex, 0, [droppedCriterion]);
78+
this.addCriterionToInnerArray(this.criteria, droppedCriterion, currentIndex);
7979
this.queryProviderService.setExclusionCriteria(this.criteria);
8080
}
8181

@@ -104,14 +104,55 @@ export class DropGroupDirective implements OnInit {
104104
inexclusion = inexclusion.filter((item) => item.length > 0);
105105
return inexclusion;
106106
}
107-
private moveCriterionInInclusion(previousIndex: number, currentIndex: number): void {
107+
private moveCriterionInInclusion(
108+
criterionID: string,
109+
previousIndex: number,
110+
currentIndex: number
111+
): void {
108112
this.criteria = this.feasibilityQuery.getInclusionCriteria();
109-
moveItemInArray(this.criteria, previousIndex, currentIndex);
113+
this.criteria = this.deleteCriterion(this.criteria, criterionID);
114+
this.addCriterionToInnerArray(this.criteria, criterionID, currentIndex);
110115
this.queryProviderService.setInclusionCriteria(this.criteria);
111116
}
112-
private moveCriterionInExclusion(previousIndex: number, currentIndex: number): void {
117+
private moveCriterionInExclusion(
118+
criterionID: string,
119+
previousIndex: number,
120+
currentIndex: number
121+
): void {
113122
this.criteria = this.feasibilityQuery.getExclusionCriteria();
114-
moveItemInArray(this.criteria, previousIndex, currentIndex);
123+
this.criteria = this.deleteCriterion(this.criteria, criterionID);
124+
this.addCriterionToInnerArray(this.criteria, criterionID, currentIndex);
115125
this.queryProviderService.setExclusionCriteria(this.criteria);
116126
}
127+
128+
private addCriterionToInnerArray(
129+
criteria: string[][],
130+
criterionID: string,
131+
currentIndex: number
132+
): void {
133+
const position = this.getPosition(criteria, currentIndex);
134+
if (currentIndex >= criteria.length) {
135+
this.criteria.push([criterionID]);
136+
} else {
137+
if (criteria[position[0]]?.length > 1) {
138+
this.criteria[0].splice(position[1], 0, criterionID);
139+
} else {
140+
this.criteria.splice(position[0], 0, [criterionID]);
141+
}
142+
}
143+
}
144+
145+
private getPosition(criteria: string[][], currentIndex: number): [number, number] {
146+
let position: [number, number] = [0, 0];
147+
let count = 0;
148+
criteria.forEach((outer, outerIndex) => {
149+
outer.forEach((inner, innerIndex) => {
150+
if (count === currentIndex) {
151+
position = [outerIndex, innerIndex];
152+
}
153+
count++;
154+
});
155+
});
156+
return position;
157+
}
117158
}

0 commit comments

Comments
 (0)