From 76529d7da897f879d074045f7b0a9f763d3ba4e8 Mon Sep 17 00:00:00 2001 From: Cagdas U Date: Fri, 7 Aug 2020 15:28:24 +0300 Subject: [PATCH] fix(challenge-listing): sorting functions Fix/rewrite TIME_TO_REGISTER and TIME_TO_SUBMIT sorting functions. Addresses topcoder-platform/community-app#4715 --- package-lock.json | 148 ++++++++++++++++----- src/shared/utils/challenge-listing/sort.js | 23 +++- 2 files changed, 128 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa252ca38d..7fbf39d9bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3654,16 +3654,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "bourbon": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-4.3.4.tgz", - "integrity": "sha1-TaOAAp6SwMj5dkx3lFGhNLEefMM=" - }, - "bourbon-neat": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/bourbon-neat/-/bourbon-neat-1.7.2.tgz", - "integrity": "sha1-oiixJ0R53iR20yszFTEHylBTzz0=" - }, "bowser": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", @@ -14718,14 +14708,6 @@ "semver": "^5.4.1" } }, - "node-bourbon": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/node-bourbon/-/node-bourbon-4.2.8.tgz", - "integrity": "sha1-5ETx8JQ0q3ZQ6jGMKOLhA9P5Qs0=", - "requires": { - "bourbon": "^4.2.6" - } - }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -14864,15 +14846,6 @@ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, - "node-neat": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-neat/-/node-neat-1.7.2.tgz", - "integrity": "sha1-OEcpELgV4mG4sbmbpRmZRGWhXCE=", - "requires": { - "bourbon-neat": "1.7.2", - "node-bourbon": "^4.2.3" - } - }, "node-notifier": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", @@ -22368,8 +22341,11 @@ "@uirouter/angularjs": "^1.0.0", "angucomplete-alt": "^2.1.0", "angular": "^1.4.8", + "angular-animate": "^1.7.9", + "angular-aria": "^1.7.9", "angular-auth0": "^3.0.0", "angular-cookies": "^1.5.1", + "angular-material": "^1.1.21", "angular-messages": "^1.5.2", "appirio-tech-ng-iso-constants": "github:appirio-tech/ng-iso-constants#v1.0.7", "appirio-tech-ng-ui-components": "^2.2.4", @@ -22551,6 +22527,16 @@ "resolved": "https://registry.npmjs.org/angular/-/angular-1.7.2.tgz", "integrity": "sha512-JcKKJbBdybUsmQ6x1M3xWyTYQ/ioVKJhSByEAjqrhmlOfvMFdhfMqAx5KIo8rLGk4DFolYPcCSgssjgTVjCtRQ==" }, + "angular-animate": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.7.9.tgz", + "integrity": "sha512-fV+AISy/HTzurQH2ngsJg+lLIvfu0ahc1h4AYKauaXVw97rZc2k4iUA1bMstiEyClsdayQX568kjQc1NK+oYhw==" + }, + "angular-aria": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/angular-aria/-/angular-aria-1.7.9.tgz", + "integrity": "sha512-luI3Jemd1AbOQW0krdzfEG3fM0IFtLY0bSSqIDEx3POE0XjKIC1MkrO8Csyq9PPgueLphyAPofzUwZ8YeZ88SA==" + }, "angular-auth0": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/angular-auth0/-/angular-auth0-3.0.0.tgz", @@ -22565,6 +22551,11 @@ "resolved": "https://registry.npmjs.org/angular-cookies/-/angular-cookies-1.7.2.tgz", "integrity": "sha512-5+B6ypV51aRPbQaqC2R5pr96q946C662dQC8QC1UL+cAlLkgkKZXXXzFRhiaEnhntkSnURWVCPasLVHQdZ3YgA==" }, + "angular-material": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/angular-material/-/angular-material-1.1.21.tgz", + "integrity": "sha512-BiqvEu82dqQ4Sb4OjJHdVp/YJvFEMrtr7K2eS+6qlWPWUiF9K2K6IkX2H3p0wD7QlscjTz8n9W8uKL46PQjlCQ==" + }, "angular-messages": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/angular-messages/-/angular-messages-1.7.2.tgz", @@ -22894,6 +22885,44 @@ "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==" }, + "fbjs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz", + "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=", + "requires": { + "core-js": "^1.0.0", + "loose-envify": "^1.0.0", + "promise": "^7.0.3", + "ua-parser-js": "^0.7.9", + "whatwg-fetch": "^0.9.0" + } + }, + "history": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz", + "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=", + "requires": { + "deep-equal": "^1.0.0", + "invariant": "^2.0.0", + "query-string": "^3.0.0", + "warning": "^2.0.0" + }, + "dependencies": { + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + }, "libphonenumber-js": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.4.6.tgz", @@ -22937,6 +22966,14 @@ "react-is": "^16.8.1" } }, + "query-string": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz", + "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=", + "requires": { + "strict-uri-encode": "^1.0.0" + } + }, "rc-slider": { "version": "8.6.4", "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.4.tgz", @@ -22951,6 +22988,18 @@ "warning": "^3.0.0" } }, + "react-router": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz", + "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=", + "requires": { + "history": "^2.1.2", + "hoist-non-react-statics": "^1.2.0", + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "warning": "^3.0.0" + } + }, "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", @@ -24191,6 +24240,16 @@ "hoek": "2.x.x" } }, + "bourbon": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-4.3.4.tgz", + "integrity": "sha1-TaOAAp6SwMj5dkx3lFGhNLEefMM=" + }, + "bourbon-neat": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/bourbon-neat/-/bourbon-neat-1.7.2.tgz", + "integrity": "sha1-oiixJ0R53iR20yszFTEHylBTzz0=" + }, "bowser": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", @@ -28375,6 +28434,14 @@ "lower-case": "^1.1.1" } }, + "node-bourbon": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/node-bourbon/-/node-bourbon-4.2.8.tgz", + "integrity": "sha1-5ETx8JQ0q3ZQ6jGMKOLhA9P5Qs0=", + "requires": { + "bourbon": "^4.2.6" + } + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -28512,6 +28579,15 @@ } } }, + "node-neat": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-neat/-/node-neat-1.7.2.tgz", + "integrity": "sha1-OEcpELgV4mG4sbmbpRmZRGWhXCE=", + "requires": { + "bourbon-neat": "1.7.2", + "node-bourbon": "^4.2.3" + } + }, "node-sass": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz", @@ -31542,9 +31618,9 @@ "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" }, "moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "query-string": { "version": "3.0.3", @@ -33086,9 +33162,9 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "topcoder-react-lib": { - "version": "1000.19.35", - "resolved": "https://registry.npmjs.org/topcoder-react-lib/-/topcoder-react-lib-1000.19.35.tgz", - "integrity": "sha512-oic46dl2f5FeJp2BPacWj6xgFmvvP07P8t/L/rHjn0SvmIc977TDSHrHD3yrZisd3NiAnd6YfNJnfj4zS/mfRA==", + "version": "1000.19.42", + "resolved": "https://registry.npmjs.org/topcoder-react-lib/-/topcoder-react-lib-1000.19.42.tgz", + "integrity": "sha512-+3VB+fEX4nVMxj8ZzpxH63WRkfOATyEdWqALfkPfah+494nGXYZfRESr11GWZzlMrHIP4ne2Ve3jslNY9Pax7w==", "requires": { "auth0-js": "^6.8.4", "config": "^3.2.0", @@ -33318,9 +33394,9 @@ } }, "topcoder-react-ui-kit": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/topcoder-react-ui-kit/-/topcoder-react-ui-kit-1.0.12.tgz", - "integrity": "sha512-Juut2uuvYQqP1vrLCDPIhIQnFAj0MEsKYxbZ4dbG1jQeDxFyXlaSyY0TPXGvXrVddxdkMamfHkOh8i11XAZHlQ==", + "version": "1000.0.2", + "resolved": "https://registry.npmjs.org/topcoder-react-ui-kit/-/topcoder-react-ui-kit-1000.0.2.tgz", + "integrity": "sha512-IjKGiMuKLBsXvhGzMSzqRja6PiWBH2SojWFhc65mS5A7RLiwPL6wmi3cYY2DCiP+43HzStYp+9OnF7zifdck5Q==", "requires": { "prop-types": "^15.6.2", "react": "^16.4.1", diff --git a/src/shared/utils/challenge-listing/sort.js b/src/shared/utils/challenge-listing/sort.js index b06dc4698e..8588f29048 100644 --- a/src/shared/utils/challenge-listing/sort.js +++ b/src/shared/utils/challenge-listing/sort.js @@ -41,26 +41,35 @@ export default { name: 'Prize high to low', }, [SORTS.TIME_TO_REGISTER]: { - func: (a, b) => moment(a.registrationEndDate || a.submissionEndDate) - .diff(b.registrationEndDate || b.submissionEndDate), + func: (a, b) => { + const aDate = moment(a.registrationEndDate || a.submissionEndTimestamp); + const bDate = moment(b.registrationEndDate || b.submissionEndTimestamp); + + if (aDate.isBefore() && bDate.isAfter()) return 1; + if (aDate.isAfter() && bDate.isBefore()) return -1; + if (aDate.isBefore() && bDate.isBefore()) return bDate.diff(aDate); + + return aDate.diff(bDate); + }, name: 'Time to register', }, [SORTS.TIME_TO_SUBMIT]: { func: (a, b) => { function nextSubEndDate(o) { if (o.checkpointSubmissionEndDate && moment(o.checkpointSubmissionEndDate).isAfter()) { - return o.checkpointSubmissionEndDate; + return moment(o.checkpointSubmissionEndDate); } - return o.submissionEndDate; + return moment(o.submissionEndTimestamp); } const aDate = nextSubEndDate(a); const bDate = nextSubEndDate(b); - if (moment(aDate).isBefore()) return 1; - if (moment(bDate).isBefore()) return -1; + if (aDate.isBefore() && bDate.isAfter()) return 1; + if (aDate.isAfter() && bDate.isBefore()) return -1; + if (aDate.isBefore() && bDate.isBefore()) return bDate.diff(aDate); - return moment(aDate).diff(bDate); + return aDate.diff(bDate); }, name: 'Time to submit', },