Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-24 15:08:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-24 15:08:07 +0300
commitb4e7d9d8392d80b20acd29959c51e488220fd1e2 (patch)
treecd29e5a568646dd0bee8140325b79ce6bde674b7 /app/assets/javascripts/milestones
parent23b60ed2c1e1dc5598fe5d44425f2aac11024d01 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/milestones')
-rw-r--r--app/assets/javascripts/milestones/milestone_utils.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/assets/javascripts/milestones/milestone_utils.js b/app/assets/javascripts/milestones/milestone_utils.js
new file mode 100644
index 00000000000..3ae5e676138
--- /dev/null
+++ b/app/assets/javascripts/milestones/milestone_utils.js
@@ -0,0 +1,32 @@
+import { parsePikadayDate } from '~/lib/utils/datetime_utility';
+
+/**
+ * This method is to be used with `Array.prototype.sort` function
+ * where array contains milestones with `due_date`/`dueDate` and/or
+ * `expired` properties.
+ * This method sorts given milestone params based on their expiration
+ * status by putting expired milestones at the bottom and upcoming
+ * milestones at the top of the list.
+ *
+ * @param {object} milestoneA
+ * @param {object} milestoneB
+ */
+export function sortMilestonesByDueDate(milestoneA, milestoneB) {
+ const rawDueDateA = milestoneA.due_date || milestoneA.dueDate;
+ const rawDueDateB = milestoneB.due_date || milestoneB.dueDate;
+ const dueDateA = rawDueDateA ? parsePikadayDate(rawDueDateA) : null;
+ const dueDateB = rawDueDateB ? parsePikadayDate(rawDueDateB) : null;
+ const expiredA = milestoneA.expired || Date.now() > dueDateA?.getTime();
+ const expiredB = milestoneB.expired || Date.now() > dueDateB?.getTime();
+
+ // Move all expired milestones to the bottom.
+ if (expiredA) return 1;
+ if (expiredB) return -1;
+
+ // Move milestones without due dates just above expired milestones.
+ if (!dueDateA) return 1;
+ if (!dueDateB) return -1;
+
+ // Sort by due date in ascending order.
+ return dueDateA - dueDateB;
+}