Skip to content

Commit 761a9dd

Browse files
committed
Improve selection for common tasks
If a user selects a task within a package, only task versions related to that task package should be used in the afterward select as options.
1 parent 5a44460 commit 761a9dd

File tree

1 file changed

+53
-15
lines changed

1 file changed

+53
-15
lines changed

src/lib/components/workflow/WorkflowTaskSelection.svelte

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
if (selectedOption.data.owner !== undefined) {
2727
selectedMapTaskVersions = selectedMapTaskVersions.filter(t => t.owner === selectedOption.data.owner);
2828
}
29+
if (selectedOption.data.package !== undefined) {
30+
selectedMapTaskVersions = selectedMapTaskVersions.filter(t => t.package === selectedOption.data.package);
31+
}
2932
selectedMapTaskVersions.sort(greatestVersionDesc);
3033
}
3134
}
@@ -42,24 +45,56 @@
4245
4346
if (group === 'common') {
4447
filteredTasks = tasks.filter(task => task.owner === null); // .filter((task, index, self) => self.findIndex(t => t.name === task.name) === index);
48+
filteredTasks.forEach(task => {
49+
let taskPackage = task.source.split(':')[1];
50+
if (!selectionTasks.has(task.name)) {
51+
selectionTasks.set(task.name, [{
52+
id: task.id,
53+
version: task.version,
54+
source: task.source,
55+
package: taskPackage
56+
}]);
57+
} else {
58+
const taskVersions = selectionTasks.get(task.name);
59+
60+
if (taskVersions.find(t => t.version === task.version && t.package === taskPackage)) {
61+
// Set the version to null of previous tasks within taskVersions
62+
taskVersions.forEach(t => {
63+
if (t.package === taskPackage) {
64+
t.version = null;
65+
}
66+
});
67+
68+
taskVersions.push({ id: task.id, version: null, source: task.source, package: taskPackage });
69+
} else {
70+
taskVersions.push({ id: task.id, version: task.version, source: task.source, package: taskPackage });
71+
}
72+
73+
}
74+
});
4575
}
4676
4777
if (group === 'user') {
4878
filteredTasks = tasks.filter(task => task.owner !== null);
49-
}
50-
51-
filteredTasks.forEach(task => {
52-
if (!selectionTasks.has(task.name)) {
53-
selectionTasks.set(task.name, [{ id: task.id, version: task.version, source: task.source, owner: task.owner }]);
54-
} else {
55-
const taskVersions = selectionTasks.get(task.name);
56-
if (!taskVersions.find(t => t.version === task.version)) {
57-
taskVersions.push({ id: task.id, version: task.version, source: task.source, owner: task.owner });
79+
filteredTasks.forEach(task => {
80+
if (!selectionTasks.has(task.name)) {
81+
selectionTasks.set(task.name, [{
82+
id: task.id,
83+
version: task.version,
84+
source: task.source,
85+
owner: task.owner
86+
}]);
5887
} else {
59-
taskVersions.push({ id: task.id, version: null, source: task.source, owner: task.owner });
88+
const taskVersions = selectionTasks.get(task.name);
89+
if (!taskVersions.find(t => t.version === task.version)) {
90+
taskVersions.push({ id: task.id, version: task.version, source: task.source, owner: task.owner });
91+
} else {
92+
taskVersions.push({ id: task.id, version: null, source: task.source, owner: task.owner });
93+
}
6094
}
61-
}
62-
});
95+
});
96+
}
97+
6398
6499
setSelectionControlData();
65100
}
@@ -70,10 +105,13 @@
70105
if (selectedTypeOfTask === 'common') {
71106
// Group filtered tasks by source
72107
optionsMap = filteredTasks.reduce((dataOptions, task) => {
73-
const source = task.source.split(':')[1]; // Package name
74-
const sourceIndex = dataOptions.findIndex(d => d.label === source);
108+
const taskPackage = task.source.split(':')[1]; // Package name
109+
const sourceIndex = dataOptions.findIndex(d => d.label === taskPackage);
75110
if (sourceIndex === -1) {
76-
dataOptions.push({ label: source, options: [{ text: task.name, value: task.name }] });
111+
dataOptions.push({
112+
label: taskPackage,
113+
options: [{ text: task.name, value: task.name, data: { package: taskPackage } }]
114+
});
77115
} else {
78116
// If task name already exists in options, don't add it again
79117
if (!dataOptions[sourceIndex].options.find(o => o.text === task.name))

0 commit comments

Comments
 (0)