@@ -92,6 +43,7 @@ exports[`Matches shallow shapshot 1 shapshot 1 1`] = `
setFilterState={[MockFunction]}
setSort={[MockFunction]}
sorts={Object {}}
+ userChallenges={Array []}
/>
diff --git a/__tests__/shared/containers/challenge-listing/FilterPanel.jsx b/__tests__/shared/containers/challenge-listing/FilterPanel.jsx
index dcbd1724d5..2abd66ddf0 100644
--- a/__tests__/shared/containers/challenge-listing/FilterPanel.jsx
+++ b/__tests__/shared/containers/challenge-listing/FilterPanel.jsx
@@ -21,9 +21,9 @@ describe('shallow render connnected component', () => {
communityFilters: [],
filter: {},
loadingChallengeTags: false,
- loadingChallengeSubtracks: false,
+ loadingChallengeTypes: false,
challengeTags: [],
- challengeSubtracks: [],
+ challengeTypes: [],
selectedCommunityId: '1',
},
auth: {
@@ -68,12 +68,12 @@ describe('full render pure component', () => {
filterState: {},
getAvailableFilterName: jest.fn(),
loadingKeywords: false,
- loadingSubtracks: false,
+ loadingTypes: false,
validKeywords: [],
- validSubtracks: [],
+ validTypes: [],
selectedCommunityId: '1',
tokenV2: 'tokenV2',
- getSubtracks: jest.fn(),
+ getTypes: jest.fn(),
getKeywords: jest.fn(),
saveFilter: jest.fn(),
selectBucket: jest.fn(),
@@ -109,7 +109,7 @@ describe('full render pure component', () => {
test('load data if not loading', () => {
instance = mount(
);
- expect(initialProps.getSubtracks).toHaveBeenCalledTimes(1);
+ expect(initialProps.getTypes).toHaveBeenCalledTimes(1);
expect(initialProps.getKeywords).toHaveBeenCalledTimes(1);
});
@@ -117,11 +117,11 @@ describe('full render pure component', () => {
instance = mount(
);
- expect(initialProps.getSubtracks).toHaveBeenCalledTimes(0);
+ expect(initialProps.getTypes).toHaveBeenCalledTimes(0);
expect(initialProps.getKeywords).toHaveBeenCalledTimes(0);
});
@@ -181,9 +181,9 @@ describe('full render connnected component and dispatch actions', () => {
communityFilters: [],
filter: {},
loadingChallengeTags: true,
- loadingChallengeSubtracks: true,
+ loadingChallengeTypes: true,
challengeTags: [],
- challengeSubtracks: [],
+ challengeTypes: [],
selectedCommunityId: '1',
},
auth: {
@@ -219,15 +219,15 @@ describe('full render connnected component and dispatch actions', () => {
filterPanel = instance.find(FilterPanel);
});
- test('getSubtracks', () => {
+ test('getTypes', () => {
global.fetch = () => Promise.resolve({
ok: true,
json: () => ([]),
});
- filterPanel.prop('getSubtracks')();
+ filterPanel.prop('getTypes')();
const actions = store.getActions();
- expect(actions[0].type).toEqual(cActions.challengeListing.getChallengeSubtracksInit.toString());
- expect(actions[1].type).toEqual(cActions.challengeListing.getChallengeSubtracksDone.toString());
+ expect(actions[0].type).toEqual(cActions.challengeListing.getChallengeTypesInit.toString());
+ expect(actions[1].type).toEqual(cActions.challengeListing.getChallengeTypesDone.toString());
});
test('getKeywords', () => {
diff --git a/__tests__/shared/containers/challenge-listing/Listing.jsx b/__tests__/shared/containers/challenge-listing/Listing.jsx
index 5410df2a17..571f11b5b6 100644
--- a/__tests__/shared/containers/challenge-listing/Listing.jsx
+++ b/__tests__/shared/containers/challenge-listing/Listing.jsx
@@ -40,7 +40,7 @@ describe('full render pure component', () => {
allDraftChallengesLoaded: false,
allPastChallengesLoaded: false,
challenges: [],
- challengeSubtracks: [],
+ challengeTypes: [],
challengeTags: [],
getCommunitiesList: () => {},
communityFilters: [{ communityId: '1', name: 'My Filter', filter: {} }],
@@ -177,7 +177,7 @@ describe('full render connnected component and dispatch actions', () => {
allDraftChallengesLoaded: false,
allPastChallengesLoaded: false,
challenges: [{ id: '1' }],
- challengeSubtracks: [],
+ challengeTypes: [],
challengeTags: [],
// communityFilters: [{ id: '1', name: 'My Filter', filter: {} }],
dropChallenges: jest.fn(),
diff --git a/__tests__/shared/reducers/challenge-listing/sidebar.js b/__tests__/shared/reducers/challenge-listing/sidebar.js
index 813c48c926..970d241b6a 100644
--- a/__tests__/shared/reducers/challenge-listing/sidebar.js
+++ b/__tests__/shared/reducers/challenge-listing/sidebar.js
@@ -169,6 +169,7 @@ function testReducer(reducer) {
expectedState = {
...expectedState,
activeBucket: 'all',
+ isBucketSwitching: true,
};
expect(state).toEqual(expectedState);
@@ -176,6 +177,7 @@ function testReducer(reducer) {
expectedState = {
...expectedState,
activeBucket: 'saved-filter',
+ isBucketSwitching: true,
};
expect(state).toEqual(expectedState);
@@ -183,6 +185,7 @@ function testReducer(reducer) {
expectedState = {
...expectedState,
activeBucket: 'upcoming',
+ isBucketSwitching: true,
};
expect(state).toEqual(expectedState);
});
@@ -193,6 +196,7 @@ function testReducer(reducer) {
...expectedState,
activeBucket: 'saved-filter',
activeSavedFilter: 1,
+ isBucketSwitching: true,
};
expect(state).toEqual(expectedState);
});
diff --git a/package-lock.json b/package-lock.json
index e74e82a77f..7ffac5e8f9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,28 +5,28 @@
"requires": true,
"dependencies": {
"@babel/code-frame": {
- "version": "7.0.0-beta.44",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
- "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"dev": true,
"requires": {
- "@babel/highlight": "7.0.0-beta.44"
+ "@babel/highlight": "^7.8.3"
}
},
"@babel/core": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
- "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz",
+ "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.0",
+ "@babel/generator": "^7.9.6",
"@babel/helper-module-transforms": "^7.9.0",
- "@babel/helpers": "^7.9.0",
- "@babel/parser": "^7.9.0",
+ "@babel/helpers": "^7.9.6",
+ "@babel/parser": "^7.9.6",
"@babel/template": "^7.8.6",
- "@babel/traverse": "^7.9.0",
- "@babel/types": "^7.9.0",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
@@ -37,22 +37,13 @@
"source-map": "^0.5.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
"@babel/generator": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
- "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+ "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.9.5",
+ "@babel/types": "^7.9.6",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
@@ -87,17 +78,6 @@
"@babel/types": "^7.8.3"
}
},
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/template": {
"version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@@ -110,26 +90,26 @@
}
},
"@babel/traverse": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
- "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+ "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.5",
+ "@babel/generator": "^7.9.6",
"@babel/helper-function-name": "^7.9.5",
"@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.0",
- "@babel/types": "^7.9.5",
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -137,26 +117,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -172,12 +132,6 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -199,15 +153,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -267,9 +212,9 @@
},
"dependencies": {
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -295,9 +240,9 @@
},
"dependencies": {
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -328,15 +273,6 @@
"lodash": "^4.17.13"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
"@babel/helper-split-export-declaration": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
@@ -346,17 +282,6 @@
"@babel/types": "^7.8.3"
}
},
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/template": {
"version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@@ -369,9 +294,9 @@
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -379,41 +304,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -432,9 +322,9 @@
},
"dependencies": {
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -451,33 +341,24 @@
}
},
"@babel/helper-replace-supers": {
- "version": "7.8.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
- "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz",
+ "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.8.3",
"@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/traverse": "^7.8.6",
- "@babel/types": "^7.8.6"
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
"@babel/generator": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
- "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+ "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.9.5",
+ "@babel/types": "^7.9.6",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
@@ -512,17 +393,6 @@
"@babel/types": "^7.8.3"
}
},
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/template": {
"version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@@ -535,26 +405,26 @@
}
},
"@babel/traverse": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
- "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+ "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.5",
+ "@babel/generator": "^7.9.6",
"@babel/helper-function-name": "^7.9.5",
"@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.0",
- "@babel/types": "^7.9.5",
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -562,26 +432,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -597,12 +447,6 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -615,15 +459,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -642,26 +477,6 @@
"@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/template": {
"version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@@ -674,9 +489,9 @@
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -684,41 +499,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -743,32 +523,23 @@
"dev": true
},
"@babel/helpers": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
- "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
+ "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
"dev": true,
"requires": {
"@babel/template": "^7.8.3",
- "@babel/traverse": "^7.9.0",
- "@babel/types": "^7.9.0"
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
"@babel/generator": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
- "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+ "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.9.5",
+ "@babel/types": "^7.9.6",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
@@ -803,17 +574,6 @@
"@babel/types": "^7.8.3"
}
},
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/template": {
"version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@@ -826,26 +586,26 @@
}
},
"@babel/traverse": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
- "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+ "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.5",
+ "@babel/generator": "^7.9.6",
"@babel/helper-function-name": "^7.9.5",
"@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.0",
- "@babel/types": "^7.9.5",
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+ "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.9.5",
@@ -853,26 +613,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -888,12 +628,6 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -906,15 +640,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -924,14 +649,14 @@
}
},
"@babel/highlight": {
- "version": "7.0.0-beta.44",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
- "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
"dev": true,
"requires": {
+ "@babel/helper-validator-identifier": "^7.9.0",
"chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.0"
+ "js-tokens": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
@@ -954,6 +679,12 @@
"supports-color": "^5.3.0"
}
},
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -966,9 +697,9 @@
}
},
"@babel/parser": {
- "version": "7.9.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
- "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
+ "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==",
"dev": true
},
"@babel/register": {
@@ -1000,9 +731,9 @@
}
},
"@babel/runtime": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
- "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
+ "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
"requires": {
"regenerator-runtime": "^0.13.4"
},
@@ -1015,9 +746,9 @@
}
},
"@babel/runtime-corejs3": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz",
- "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==",
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz",
+ "integrity": "sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==",
"dev": true,
"requires": {
"core-js-pure": "^3.0.0",
@@ -1044,11 +775,60 @@
"lodash": "^4.2.0"
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
"babylon": {
"version": "7.0.0-beta.44",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
"integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -1070,12 +850,52 @@
"lodash": "^4.2.0"
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
"babylon": {
"version": "7.0.0-beta.44",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
"integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -1096,6 +916,15 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -1554,11 +1383,12 @@
}
},
"@types/express-serve-static-core": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz",
- "integrity": "sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw==",
+ "version": "4.17.7",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz",
+ "integrity": "sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw==",
"requires": {
"@types/node": "*",
+ "@types/qs": "*",
"@types/range-parser": "*"
}
},
@@ -1582,9 +1412,9 @@
}
},
"@types/mime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
- "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw=="
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz",
+ "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q=="
},
"@types/minimatch": {
"version": "3.0.3",
@@ -1592,10 +1422,22 @@
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true
},
+ "@types/minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=",
+ "dev": true
+ },
"@types/node": {
- "version": "13.13.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
- "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA=="
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz",
+ "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA=="
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+ "dev": true
},
"@types/parse-json": {
"version": "4.0.0",
@@ -1604,9 +1446,9 @@
"dev": true
},
"@types/qs": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw=="
+ "version": "6.9.2",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.2.tgz",
+ "integrity": "sha512-a9bDi4Z3zCZf4Lv1X/vwnvbbDYSNz59h3i3KdyuYYN+YrLjSeJD0dnphdULDfySvUv6Exy/O0K6wX/kQpnPQ+A=="
},
"@types/range-parser": {
"version": "1.2.3",
@@ -2034,21 +1876,6 @@
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
},
- "angular-animate": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.8.0.tgz",
- "integrity": "sha512-ROFK3UIn1MSVpqAlay15ZxjPmVbvwaO3Zn/2vhmQdYeqxSbUVuOckcvtDLBpHPGPtOAreu35qfV7NQ7u2EgDcA=="
- },
- "angular-aria": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/angular-aria/-/angular-aria-1.8.0.tgz",
- "integrity": "sha512-eCQI6EwgY6bYHdzIUfDABHnZjoZ3bNYpCsnceQF4bLfbq1QtZ7raRPNca45sj6C9Pfjde6PNcEDvuLozFPYnrQ=="
- },
- "angular-material": {
- "version": "1.1.24",
- "resolved": "https://registry.npmjs.org/angular-material/-/angular-material-1.1.24.tgz",
- "integrity": "sha512-WlepLr+04g9g+Pd26t0G7vNRvF6XVCgRo7VZA1d/XGwpt5O0KafKujcaurFkYvgF5qaGGQXGPokX8sj6KaxDsw=="
- },
"ansi-colors": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
@@ -2253,9 +2080,9 @@
}
},
"arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true
},
"asap": {
@@ -2280,6 +2107,14 @@
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"assert": {
@@ -2367,7 +2202,8 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"async-foreach": {
"version": "0.1.3",
@@ -2531,11 +2367,60 @@
"eslint-visitor-keys": "^1.0.0"
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
"babylon": {
"version": "7.0.0-beta.44",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
"integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -3578,8 +3463,7 @@
"bail": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true
+ "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ=="
},
"balanced-match": {
"version": "1.0.0",
@@ -3638,12 +3522,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
}
}
},
@@ -3694,7 +3572,8 @@
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"bindings": {
"version": "1.5.0",
@@ -3740,9 +3619,9 @@
"dev": true
},
"bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==",
"dev": true
},
"body-parser": {
@@ -3775,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",
@@ -3893,21 +3762,56 @@
"requires": {
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
+ "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
"dev": true,
"requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.2",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
"browserify-zlib": {
@@ -4121,22 +4025,14 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- }
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
}
},
"camelize": {
@@ -4174,15 +4070,15 @@
}
},
"caniuse-db": {
- "version": "1.0.30001048",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001048.tgz",
- "integrity": "sha512-HqYsBIZlVARU5GDXPziXSFwFVpGx9KqCznr62iaey7bT2sqpx7/jI4B3PvbKguKi8kGeEannJ7WEPB5H71rjFQ==",
+ "version": "1.0.30001062",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001062.tgz",
+ "integrity": "sha512-Hj0PnEPaUVtOpTL//elsBJi7SlKZmjhdR9rkApME9BERfzqsUBy5G282FvfVh0xW3vCyRvVlLkRUJ075eoEgQg==",
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001048",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz",
- "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==",
+ "version": "1.0.30001061",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001061.tgz",
+ "integrity": "sha512-SMICCeiNvMZnyXpuoO+ot7FHpMVPlrsR+HmfByj6nY4xYDHXLqMTbgH7ecEkDNXWkH1vaip+ZS0D7VTXwM1KYQ==",
"dev": true
},
"capture-exit": {
@@ -4470,14 +4366,6 @@
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
}
},
"clone-regexp": {
@@ -4528,8 +4416,7 @@
"collapse-white-space": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true
+ "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ=="
},
"collect-all": {
"version": "1.0.3",
@@ -4792,9 +4679,9 @@
}
},
"compare-func": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
- "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz",
+ "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==",
"dev": true,
"requires": {
"array-ify": "^1.0.0",
@@ -4968,21 +4855,21 @@
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"contentful": {
- "version": "7.14.3",
- "resolved": "https://registry.npmjs.org/contentful/-/contentful-7.14.3.tgz",
- "integrity": "sha512-4ggdJkRUM+hi8D2kQEap/iT2OtJf6wTyj+zWOI6hCarPjfmEjYDSsZ7hMt9lxmnkEllPRgUww+e47uMiGgzcwQ==",
+ "version": "7.14.4",
+ "resolved": "https://registry.npmjs.org/contentful/-/contentful-7.14.4.tgz",
+ "integrity": "sha512-BY5mEr8DkPxVPot4aMurtuOqf9HxkXW6T9KRDUtJcxua/sAITjYu3YOeZG8PeNGYI40R5yqIvpJ6vMI+/lg4Fg==",
"requires": {
"axios": "^0.19.1",
"contentful-resolve-response": "^1.1.4",
- "contentful-sdk-core": "^6.4.0",
+ "contentful-sdk-core": "^6.4.5",
"json-stringify-safe": "^5.0.1",
"lodash": "^4.17.11"
}
},
"contentful-management": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/contentful-management/-/contentful-management-5.26.0.tgz",
- "integrity": "sha512-UzXa0H/qJsQly+NEPZfXJBgRawsU8Txgjk78Zm4TflKNmi4EqFLaAHO6038/oTxOAFNZTypVqR4+sFUCboCslw==",
+ "version": "5.26.2",
+ "resolved": "https://registry.npmjs.org/contentful-management/-/contentful-management-5.26.2.tgz",
+ "integrity": "sha512-blLmmj9PHzIN0CfwmsQxU+3LlbzcaIuf9oDIGbyQ/eSWkpRnETU+hA348/bTaS/E977WxK9IwRiFVdL0dSUzHQ==",
"requires": {
"axios": "^0.19.0",
"contentful-sdk-core": "^6.4.0",
@@ -5007,28 +4894,28 @@
}
},
"conventional-changelog": {
- "version": "3.1.18",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.18.tgz",
- "integrity": "sha512-aN6a3rjgV8qwAJj3sC/Lme2kvswWO7fFSGQc32gREcwIOsaiqBaO6f2p0NomFaPDnTqZ+mMZFLL3hlzvEnZ0mQ==",
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.21.tgz",
+ "integrity": "sha512-ZGecVZPEo3aC75VVE4nu85589dDhpMyqfqgUM5Myq6wfKWiNqhDJLSDMsc8qKXshZoY7dqs1hR0H/15kI/G2jQ==",
"dev": true,
"requires": {
- "conventional-changelog-angular": "^5.0.6",
- "conventional-changelog-atom": "^2.0.3",
- "conventional-changelog-codemirror": "^2.0.3",
- "conventional-changelog-conventionalcommits": "^4.2.3",
- "conventional-changelog-core": "^4.1.4",
- "conventional-changelog-ember": "^2.0.4",
- "conventional-changelog-eslint": "^3.0.4",
- "conventional-changelog-express": "^2.0.1",
- "conventional-changelog-jquery": "^3.0.6",
- "conventional-changelog-jshint": "^2.0.3",
- "conventional-changelog-preset-loader": "^2.3.0"
+ "conventional-changelog-angular": "^5.0.10",
+ "conventional-changelog-atom": "^2.0.7",
+ "conventional-changelog-codemirror": "^2.0.7",
+ "conventional-changelog-conventionalcommits": "^4.3.0",
+ "conventional-changelog-core": "^4.1.7",
+ "conventional-changelog-ember": "^2.0.8",
+ "conventional-changelog-eslint": "^3.0.8",
+ "conventional-changelog-express": "^2.0.5",
+ "conventional-changelog-jquery": "^3.0.10",
+ "conventional-changelog-jshint": "^2.0.7",
+ "conventional-changelog-preset-loader": "^2.3.4"
},
"dependencies": {
"conventional-changelog-angular": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz",
- "integrity": "sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==",
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.10.tgz",
+ "integrity": "sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
@@ -5036,9 +4923,9 @@
}
},
"conventional-changelog-conventionalcommits": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.3.tgz",
- "integrity": "sha512-atGa+R4vvEhb8N/8v3IoW59gCBJeeFiX6uIbPu876ENAmkMwsenyn0R21kdDHJFLQdy6zW4J6b4xN8KI3b9oww==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.3.0.tgz",
+ "integrity": "sha512-oYHydvZKU+bS8LnGqTMlNrrd7769EsuEHKy4fh1oMdvvDi7fem8U+nvfresJ1IDB8K00Mn4LpiA/lR+7Gs6rgg==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
@@ -5059,31 +4946,178 @@
}
},
"conventional-changelog-atom": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.3.tgz",
- "integrity": "sha512-szZe2ut97qNO6vCCMkm1I/tWu6ol4Rr8a9Lx0y/VlpDnpY0PNp+oGpFgU55lplhx+I3Lro9Iv4/gRj0knfgjzg==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.7.tgz",
+ "integrity": "sha512-7dOREZwzB+tCEMjRTDfen0OHwd7vPUdmU0llTy1eloZgtOP4iSLVzYIQqfmdRZEty+3w5Jz+AbhfTJKoKw1JeQ==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-cli": {
- "version": "2.0.31",
- "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.31.tgz",
- "integrity": "sha512-nMINylKAamBLM3OmD7/44d9TPZ3V58IDTXoGC/QtXxve+1Sj37BQTzIEW3TNaviZ2ZV/b5Dqg0eSk4DNP5fBdA==",
+ "version": "2.0.34",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.34.tgz",
+ "integrity": "sha512-HDDIhhpsMKiiAfH/mbj7wApgN7uA33Nk4hISY3/7ijlfqXc/bmP3v4o3Yialoxz0iTBibc94xi6kfTH7XIvwDw==",
"dev": true,
"requires": {
"add-stream": "^1.0.0",
- "conventional-changelog": "^3.1.18",
+ "conventional-changelog": "^3.1.21",
"lodash": "^4.17.15",
- "meow": "^5.0.0",
+ "meow": "^7.0.0",
"tempfile": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "meow": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
+ "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "arrify": "^2.0.1",
+ "camelcase": "^6.0.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
+ }
}
},
"conventional-changelog-codemirror": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.3.tgz",
- "integrity": "sha512-t2afackdgFV2yBdHhWPqrKbpaQeVnz2hSJKdWqjasPo5EpIB6TBL0er3cOP1mnGQmuzk9JSvimNSuqjWGDtU5Q==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.7.tgz",
+ "integrity": "sha512-Oralk1kiagn3Gb5cR5BffenWjVu59t/viE6UMD/mQa1hISMPkMYhJIqX+CMeA1zXgVBO+YHQhhokEj99GP5xcg==",
"dev": true,
"requires": {
"q": "^1.5.1"
@@ -5101,27 +5135,60 @@
}
},
"conventional-changelog-core": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.1.4.tgz",
- "integrity": "sha512-LO58ZbEpp1Ul+y/vOI8rJRsWkovsYkCFbOCVgi6UnVfU8WC0F8K8VQQwaBZWWUpb6JvEiN4GBR5baRP2txZ+Vg==",
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.1.7.tgz",
+ "integrity": "sha512-UBvSrQR2RdKbSQKh7RhueiiY4ZAIOW3+CSWdtKOwRv+KxIMNFKm1rOcGBFx0eA8AKhGkkmmacoTWJTqyz7Q0VA==",
"dev": true,
"requires": {
"add-stream": "^1.0.0",
- "conventional-changelog-writer": "^4.0.11",
- "conventional-commits-parser": "^3.0.8",
+ "conventional-changelog-writer": "^4.0.16",
+ "conventional-commits-parser": "^3.1.0",
"dateformat": "^3.0.0",
"get-pkg-repo": "^1.0.0",
"git-raw-commits": "2.0.0",
"git-remote-origin-url": "^2.0.0",
- "git-semver-tags": "^3.0.1",
+ "git-semver-tags": "^4.0.0",
"lodash": "^4.17.15",
"normalize-package-data": "^2.3.5",
"q": "^1.5.1",
"read-pkg": "^3.0.0",
"read-pkg-up": "^3.0.0",
+ "shelljs": "^0.8.3",
"through2": "^3.0.0"
},
"dependencies": {
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
"git-raw-commits": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz",
@@ -5147,6 +5214,18 @@
}
}
},
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
"meow": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
@@ -5163,49 +5242,87 @@
"redent": "^2.0.0",
"trim-newlines": "^2.0.0"
}
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
}
}
},
"conventional-changelog-ember": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.4.tgz",
- "integrity": "sha512-q1u73sO9uCnxN4TSw8xu6MRU8Y1h9kpwtcdJuNRwu/LSKI1IE/iuNSH5eQ6aLlQ3HTyrIpTfUuVybW4W0F17rA==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.8.tgz",
+ "integrity": "sha512-JEMEcUAMg4Q9yxD341OgWlESQ4gLqMWMXIWWUqoQU8yvTJlKnrvcui3wk9JvnZQyONwM2g1MKRZuAjKxr8hAXA==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-eslint": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.4.tgz",
- "integrity": "sha512-CPwTUENzhLGl3auunrJxiIEWncAGaby7gOFCdj2gslIuOFJ0KPJVOUhRz4Da/I53sdo/7UncUJkiLg94jEsjxg==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.8.tgz",
+ "integrity": "sha512-5rTRltgWG7TpU1PqgKHMA/2ivjhrB+E+S7OCTvj0zM/QGg4vmnVH67Vq/EzvSNYtejhWC+OwzvDrLk3tqPry8A==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-express": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz",
- "integrity": "sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.5.tgz",
+ "integrity": "sha512-pW2hsjKG+xNx/Qjof8wYlAX/P61hT5gQ/2rZ2NsTpG+PgV7Rc8RCfITvC/zN9K8fj0QmV6dWmUefCteD9baEAw==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-jquery": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.6.tgz",
- "integrity": "sha512-gHAABCXUNA/HjnZEm+vxAfFPJkgtrZvCDIlCKfdPVXtCIo/Q0lN5VKpx8aR5p8KdVRQFF3OuTlvv5kv6iPuRqA==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.10.tgz",
+ "integrity": "sha512-QCW6wF8QgPkq2ruPaxc83jZxoWQxLkt/pNxIDn/oYjMiVgrtqNdd7lWe3vsl0hw5ENHNf/ejXuzDHk6suKsRpg==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-jshint": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.3.tgz",
- "integrity": "sha512-Pc2PnMPcez634ckzr4EOWviwRSpZcURaK7bjyD9oK6N5fsC/a+3G7LW5m/JpcHPhA9ZxsfIbm7uqZ3ZDGsQ/sw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.7.tgz",
+ "integrity": "sha512-qHA8rmwUnLiIxANJbz650+NVzqDIwNtc0TcpIa0+uekbmKHttidvQ1dGximU3vEDdoJVKFgR3TXFqYuZmYy9ZQ==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
@@ -5213,41 +5330,186 @@
}
},
"conventional-changelog-preset-loader": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz",
- "integrity": "sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
+ "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==",
"dev": true
},
"conventional-changelog-writer": {
- "version": "4.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz",
- "integrity": "sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==",
+ "version": "4.0.16",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.16.tgz",
+ "integrity": "sha512-jmU1sDJDZpm/dkuFxBeRXvyNcJQeKhGtVcFFkwTphUAzyYWcwz2j36Wcv+Mv2hU3tpvLMkysOPXJTLO55AUrYQ==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
- "conventional-commits-filter": "^2.0.2",
+ "conventional-commits-filter": "^2.0.6",
"dateformat": "^3.0.0",
- "handlebars": "^4.4.0",
+ "handlebars": "^4.7.6",
"json-stringify-safe": "^5.0.1",
"lodash": "^4.17.15",
- "meow": "^5.0.0",
+ "meow": "^7.0.0",
"semver": "^6.0.0",
"split": "^1.0.0",
"through2": "^3.0.0"
},
"dependencies": {
+ "camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "meow": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
+ "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "arrify": "^2.0.1",
+ "camelcase": "^6.0.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
}
}
},
"conventional-commits-filter": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz",
- "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz",
+ "integrity": "sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw==",
"dev": true,
"requires": {
"lodash.ismatch": "^4.4.0",
@@ -5255,18 +5517,165 @@
}
},
"conventional-commits-parser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz",
- "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz",
+ "integrity": "sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==",
"dev": true,
"requires": {
"JSONStream": "^1.0.4",
"is-text-path": "^1.0.1",
"lodash": "^4.17.15",
- "meow": "^5.0.0",
+ "meow": "^7.0.0",
"split2": "^2.0.0",
"through2": "^3.0.0",
"trim-off-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "meow": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
+ "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "arrify": "^2.0.1",
+ "camelcase": "^6.0.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
+ }
}
},
"convert-source-map": {
@@ -5457,6 +5866,14 @@
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"create-hash": {
@@ -6005,13 +6422,10 @@
"dev": true
},
"dargs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
- "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
+ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
+ "dev": true
},
"dashdash": {
"version": "1.14.1",
@@ -6224,12 +6638,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
}
}
},
@@ -6323,6 +6731,14 @@
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"dir-glob": {
@@ -6405,9 +6821,9 @@
}
},
"dom-align": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.11.1.tgz",
- "integrity": "sha512-hN42DmUgtweBx0iBjDLO4WtKOMcK8yBmPx/fgdsgQadLuzPu/8co3oLdK5yMmeM/vnUd3yDyV6qV8/NzxBexQg=="
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
+ "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
},
"dom-css": {
"version": "2.1.0",
@@ -6442,9 +6858,9 @@
"integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
},
"entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
- "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz",
+ "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw=="
}
}
},
@@ -6657,9 +7073,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.3.419",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.419.tgz",
- "integrity": "sha512-tDHMDYMjIGEY7sPAP8W3rmeZzlGm1H8/sc6j8gKKaQCyBw87FZ7SvQpfKKtBu3wnGOgw3+niPPISarvItnMlIQ==",
+ "version": "1.3.442",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.442.tgz",
+ "integrity": "sha512-3OjmbnD9+LyWzh9o3rjC7LNIkcDHjKyHM6Xt0G/+7gHGCaEIwvWYi8TrNA8feNnuGmvI9WKu289PFMQGMLHAig==",
"dev": true
},
"elliptic": {
@@ -6675,6 +7091,14 @@
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"emoji-regex": {
@@ -7231,9 +7655,9 @@
}
},
"eslint-plugin-react": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz",
- "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz",
+ "integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==",
"dev": true,
"requires": {
"array-includes": "^3.1.1",
@@ -7245,17 +7669,8 @@
"object.values": "^1.1.1",
"prop-types": "^15.7.2",
"resolve": "^1.15.1",
- "semver": "^6.3.0",
"string.prototype.matchall": "^4.0.2",
"xregexp": "^4.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
}
},
"eslint-scope": {
@@ -7864,12 +8279,6 @@
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -8453,12 +8862,6 @@
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -8708,554 +9111,14 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
- "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
- "nan": "^2.12.1",
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
+ "nan": "^2.12.1"
}
},
"fstream": {
@@ -9607,16 +9470,163 @@
}
},
"git-raw-commits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.3.tgz",
- "integrity": "sha512-SoSsFL5lnixVzctGEi2uykjA7B5I0AhO9x6kdzvGRHbxsa6JSEgrgy1esRKsfOKE1cgyOJ/KDR2Trxu157sb8w==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.7.tgz",
+ "integrity": "sha512-SkwrTqrDxw8y0G1uGJ9Zw13F7qu3LF8V4BifyDeiJCxSnjRGZD9SaoMiMqUvvXMXh6S3sOQ1DsBN7L2fMUZW/g==",
"dev": true,
"requires": {
- "dargs": "^4.0.1",
+ "dargs": "^7.0.0",
"lodash.template": "^4.0.2",
- "meow": "^5.0.0",
+ "meow": "^7.0.0",
"split2": "^2.0.0",
"through2": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "meow": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
+ "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "arrify": "^2.0.1",
+ "camelcase": "^6.0.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
+ }
}
},
"git-remote-origin-url": {
@@ -9638,20 +9648,165 @@
}
},
"git-semver-tags": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-3.0.1.tgz",
- "integrity": "sha512-Hzd1MOHXouITfCasrpVJbRDg9uvW7LfABk3GQmXYZByerBDrfrEMP9HXpNT7RxAbieiocP6u+xq20DkvjwxnCA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.0.0.tgz",
+ "integrity": "sha512-LajaAWLYVBff+1NVircURJFL8TQ3EMIcLAfHisWYX/nPoMwnTYfWAznQDmMujlLqoD12VtLmoSrF1sQ5MhimEQ==",
"dev": true,
"requires": {
- "meow": "^5.0.0",
+ "meow": "^7.0.0",
"semver": "^6.0.0"
},
"dependencies": {
+ "camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "meow": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-7.0.1.tgz",
+ "integrity": "sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "arrify": "^2.0.1",
+ "camelcase": "^6.0.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
}
}
},
@@ -9753,14 +9908,6 @@
"ini": "^1.3.5",
"kind-of": "^6.0.2",
"which": "^1.3.1"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
}
},
"globals": {
@@ -9818,9 +9965,9 @@
}
},
"graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"growly": {
"version": "1.3.0",
@@ -9900,6 +10047,12 @@
"har-schema": "^2.0.0"
}
},
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true
+ },
"harmony-reflect": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
@@ -9990,13 +10143,39 @@
}
},
"hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
}
},
"hash.js": {
@@ -10201,6 +10380,58 @@
"integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
"dev": true
},
+ "html-to-react": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.2.tgz",
+ "integrity": "sha512-TdTfxd95sRCo6QL8admCkE7mvNNrXtGoVr1dyS+7uvc8XCqAymnf/6ckclvnVbQNUo2Nh21VPwtfEHd0khiV7g==",
+ "requires": {
+ "domhandler": "^3.0",
+ "htmlparser2": "^4.0",
+ "lodash.camelcase": "^4.3.0",
+ "ramda": "^0.26"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
+ },
+ "domhandler": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz",
+ "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==",
+ "requires": {
+ "domelementtype": "^2.0.1"
+ }
+ },
+ "domutils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz",
+ "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==",
+ "requires": {
+ "dom-serializer": "^0.2.1",
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0"
+ }
+ },
+ "entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz",
+ "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw=="
+ },
+ "htmlparser2": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
+ "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0",
+ "domutils": "^2.0.0",
+ "entities": "^2.0.0"
+ }
+ }
+ }
+ },
"html-to-text": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-5.1.1.tgz",
@@ -10305,78 +10536,6 @@
"which-pm-runs": "^1.0.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
@@ -10441,12 +10600,6 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -10711,9 +10864,9 @@
"dev": true
},
"indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true
},
"indexes-of": {
@@ -10891,6 +11044,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-alphabetical": {
@@ -10928,6 +11092,7 @@
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
+ "optional": true,
"requires": {
"binary-extensions": "^1.0.0"
}
@@ -10941,8 +11106,7 @@
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-callable": {
"version": "1.1.5",
@@ -10973,6 +11137,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-date-object": {
@@ -11083,6 +11258,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-number-object": {
@@ -11100,8 +11286,7 @@
"is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
},
"is-plain-object": {
"version": "2.0.4",
@@ -11216,8 +11401,7 @@
"is-whitespace-character": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true
+ "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w=="
},
"is-windows": {
"version": "1.0.2",
@@ -11228,8 +11412,7 @@
"is-word-character": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true
+ "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA=="
},
"is-wsl": {
"version": "1.1.0",
@@ -13029,13 +13212,10 @@
}
},
"kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
},
"klaw": {
"version": "2.0.0",
@@ -13655,9 +13835,9 @@
"dev": true
},
"map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz",
+ "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==",
"dev": true
},
"map-visit": {
@@ -13672,8 +13852,7 @@
"markdown-escapes": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true
+ "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg=="
},
"markdown-it": {
"version": "8.4.2",
@@ -13751,6 +13930,21 @@
"safe-buffer": "^5.1.2"
}
},
+ "mdast-add-list-metadata": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz",
+ "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==",
+ "requires": {
+ "unist-util-visit-parents": "1.1.2"
+ },
+ "dependencies": {
+ "unist-util-visit-parents": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz",
+ "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q=="
+ }
+ }
+ },
"mdast-util-compact": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz",
@@ -13816,12 +14010,79 @@
"yargs-parser": "^10.0.0"
},
"dependencies": {
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
"yargs-parser": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
@@ -13883,6 +14144,17 @@
"object.omit": "^2.0.0",
"parse-glob": "^3.0.4",
"regex-cache": "^0.4.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"miller-rabin": {
@@ -13893,6 +14165,14 @@
"requires": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"millisecond": {
@@ -13938,6 +14218,12 @@
"dom-walk": "^0.1.0"
}
},
+ "min-indent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
+ "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=",
+ "dev": true
+ },
"mini-css-extract-plugin": {
"version": "0.4.5",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz",
@@ -13988,13 +14274,22 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
"dev": true,
"requires": {
"arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "dependencies": {
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ }
}
},
"minipass": {
@@ -14110,9 +14405,9 @@
"integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
},
"moment": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
- "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ "version": "2.25.3",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
+ "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg=="
},
"moment-duration-format": {
"version": "2.3.2",
@@ -14120,9 +14415,9 @@
"integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ=="
},
"moment-timezone": {
- "version": "0.5.28",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz",
- "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==",
+ "version": "0.5.31",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz",
+ "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==",
"requires": {
"moment": ">= 2.9.0"
}
@@ -14268,12 +14563,6 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
}
}
},
@@ -14284,7 +14573,7 @@
"dev": true
},
"navigation-component": {
- "version": "github:topcoder-platform/navigation-component#4938269d5610f3f8bff65f23459a37d01121e6f6",
+ "version": "github:topcoder-platform/navigation-component#3ff9165a545ba6210ea4cd992d0dd26b52610055",
"from": "github:topcoder-platform/navigation-component#develop",
"requires": {
"classnames": "^2.2.6",
@@ -14396,9 +14685,9 @@
"optional": true
},
"nearley": {
- "version": "2.19.2",
- "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.2.tgz",
- "integrity": "sha512-h6lygT0BWAGErDvoE2LfI+tDeY2+UUrqG5dcBPdCmjnjud9z1wE0P7ljb85iNbE93YA+xJLpoSYGMuUqhnSSSA==",
+ "version": "2.19.3",
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.3.tgz",
+ "integrity": "sha512-FpAy1PmTsUpOtgxr23g4jRNvJHYzZEW2PixXeSzksLR/ykPfwKhAodc2+9wQhY+JneWLcvkDw6q7FJIsIdF/aQ==",
"dev": true,
"requires": {
"commander": "^2.19.0",
@@ -14437,14 +14726,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",
@@ -14583,15 +14864,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",
@@ -14606,15 +14878,15 @@
}
},
"node-releases": {
- "version": "1.1.53",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
- "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
+ "version": "1.1.55",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz",
+ "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==",
"dev": true
},
"node-sass": {
- "version": "4.14.0",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz",
- "integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==",
+ "version": "4.14.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
+ "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
"dev": true,
"requires": {
"async-foreach": "^0.1.3",
@@ -14631,7 +14903,7 @@
"node-gyp": "^3.8.0",
"npmlog": "^4.0.0",
"request": "^2.88.0",
- "sass-graph": "^2.2.4",
+ "sass-graph": "2.2.5",
"stdout-stream": "^1.4.0",
"true-case-path": "^1.0.2"
},
@@ -14984,6 +15256,15 @@
"requires": {
"is-descriptor": "^0.1.0"
}
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
}
}
},
@@ -15465,6 +15746,13 @@
"integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
"dev": true
},
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true,
+ "optional": true
+ },
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -16041,9 +16329,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16457,9 +16745,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16842,9 +17130,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16927,9 +17215,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16996,9 +17284,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -17355,9 +17643,9 @@
}
},
"property-information": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.4.0.tgz",
- "integrity": "sha512-nmMWAm/3vKFGmmOWOcdLjgq/Hlxa+hsuR/px1Lp/UGEyc5A22A6l78Shc2C0E71sPmAqglni+HrS7L7VJ7AUCA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.5.0.tgz",
+ "integrity": "sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==",
"requires": {
"xtend": "^4.0.0"
}
@@ -17404,6 +17692,14 @@
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ }
}
},
"pump": {
@@ -17442,9 +17738,9 @@
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
},
"qs": {
- "version": "6.9.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
- "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw=="
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
+ "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
},
"query-string": {
"version": "6.12.1",
@@ -17474,9 +17770,9 @@
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
},
"quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
"dev": true
},
"raf": {
@@ -17498,6 +17794,11 @@
"integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
"dev": true
},
+ "ramda": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
+ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
+ },
"randexp": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
@@ -17524,12 +17825,6 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
"dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
}
}
},
@@ -17684,9 +17979,9 @@
}
},
"react-color": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.18.0.tgz",
- "integrity": "sha512-FyVeU1kQiSokWc8NPz22azl1ezLpJdUyTbWL0LPUpcuuYDrZ/Y1veOk9rRK5B3pMlyDGvTk4f4KJhlkIQNRjEA==",
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.18.1.tgz",
+ "integrity": "sha512-X5XpyJS6ncplZs74ak0JJoqPi+33Nzpv5RYWWxn17bslih+X7OlgmfpmGC1fNvdkK7/SGWYf1JJdn7D2n5gSuQ==",
"requires": {
"@icons/material": "^0.2.4",
"lodash": "^4.17.11",
@@ -17823,9 +18118,9 @@
}
},
"react-hot-loader": {
- "version": "4.12.20",
- "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.20.tgz",
- "integrity": "sha512-lPlv1HVizi0lsi+UFACBJaydtRYILWkfHAC/lyCs6ZlAxlOZRQIfYHDqiGaRvL/GF7zyti+Qn9XpnDAUvdFA4A==",
+ "version": "4.12.21",
+ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz",
+ "integrity": "sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==",
"dev": true,
"requires": {
"fast-levenshtein": "^2.0.6",
@@ -17925,6 +18220,82 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
+ "react-markdown": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.3.1.tgz",
+ "integrity": "sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw==",
+ "requires": {
+ "html-to-react": "^1.3.4",
+ "mdast-add-list-metadata": "1.0.1",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.6",
+ "remark-parse": "^5.0.0",
+ "unified": "^6.1.5",
+ "unist-util-visit": "^1.3.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "remark-parse": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz",
+ "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==",
+ "requires": {
+ "collapse-white-space": "^1.0.2",
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "is-word-character": "^1.0.0",
+ "markdown-escapes": "^1.0.0",
+ "parse-entities": "^1.1.0",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "trim": "0.0.1",
+ "trim-trailing-lines": "^1.0.0",
+ "unherit": "^1.0.4",
+ "unist-util-remove-position": "^1.0.0",
+ "vfile-location": "^2.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unified": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+ "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
+ "requires": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "trough": "^1.0.0",
+ "vfile": "^2.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ=="
+ },
+ "vfile": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
+ "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-message": "^1.0.0"
+ }
+ },
+ "vfile-message": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
+ "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
+ "requires": {
+ "unist-util-stringify-position": "^1.1.1"
+ }
+ }
+ }
+ },
"react-moment-proptypes": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/react-moment-proptypes/-/react-moment-proptypes-1.7.0.tgz",
@@ -18330,6 +18701,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
+ "optional": true,
"requires": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@@ -18340,19 +18712,22 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "optional": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -18371,6 +18746,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -18382,6 +18758,7 @@
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
+ "optional": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -18397,6 +18774,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
+ "optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -18406,6 +18784,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -18415,6 +18794,7 @@
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -18424,6 +18804,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -18435,6 +18816,7 @@
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -18444,6 +18826,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -18455,6 +18838,7 @@
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
+ "optional": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
@@ -18465,7 +18849,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -18474,6 +18859,7 @@
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
+ "optional": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -18490,6 +18876,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
+ "optional": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -18499,6 +18886,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -18510,6 +18898,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
+ "optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -18522,6 +18911,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -18533,6 +18923,7 @@
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -18542,6 +18933,7 @@
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -18551,6 +18943,7 @@
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
+ "optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -18562,6 +18955,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -18571,23 +18965,19 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "optional": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -18633,6 +19023,15 @@
}
}
},
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
"reconnect-core": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz",
@@ -18642,13 +19041,13 @@
}
},
"redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
"requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
}
},
"reduce-css-calc": {
@@ -19068,8 +19467,7 @@
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"repeating": {
"version": "2.0.1",
@@ -19082,8 +19480,7 @@
"replace-ext": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
},
"request": {
"version": "2.88.2",
@@ -19755,12 +20152,6 @@
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -19785,208 +20176,118 @@
}
},
"sass-graph": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
- "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
+ "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
"dev": true,
"requires": {
"glob": "^7.0.0",
"lodash": "^4.0.0",
"scss-tokenizer": "^0.2.3",
- "yargs": "^7.0.0"
+ "yargs": "^13.3.2"
},
"dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
"find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "locate-path": "^3.0.0"
}
},
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
}
},
- "pify": {
+ "p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "p-try": "^2.0.0"
}
},
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
+ "p-limit": "^2.0.0"
}
},
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "is-utf8": "^0.2.0"
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
}
},
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
+ "ansi-regex": "^4.1.0"
}
},
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- },
"yargs": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
}
},
"yargs-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
- "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
- "camelcase": "^3.0.0"
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
}
}
}
@@ -20219,14 +20520,6 @@
"dev": true,
"requires": {
"kind-of": "^6.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
}
},
"shallow-equal": {
@@ -20269,6 +20562,17 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
+ "shelljs": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
+ "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
"shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
@@ -20463,12 +20767,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
}
}
},
@@ -20479,6 +20777,17 @@
"dev": true,
"requires": {
"kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"sort-array": {
@@ -20581,9 +20890,9 @@
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
},
"spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -20695,8 +21004,7 @@
"state-toggle": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true
+ "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ=="
},
"static-extend": {
"version": "0.1.2",
@@ -21006,10 +21314,13 @@
"dev": true
},
"strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
},
"strip-json-comments": {
"version": "2.0.1",
@@ -21115,24 +21426,24 @@
"dev": true
},
"autoprefixer": {
- "version": "9.7.6",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.6.tgz",
- "integrity": "sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ==",
+ "version": "9.8.0",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz",
+ "integrity": "sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==",
"dev": true,
"requires": {
- "browserslist": "^4.11.1",
- "caniuse-lite": "^1.0.30001039",
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001061",
"chalk": "^2.4.2",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
- "postcss": "^7.0.27",
- "postcss-value-parser": "^4.0.3"
+ "postcss": "^7.0.30",
+ "postcss-value-parser": "^4.1.0"
},
"dependencies": {
"postcss-value-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
- "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
}
}
@@ -21490,12 +21801,6 @@
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"dev": true
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -21530,9 +21835,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -21552,12 +21857,12 @@
}
},
"postcss-scss": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz",
- "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz",
+ "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==",
"dev": true,
"requires": {
- "postcss": "^7.0.0"
+ "postcss": "^7.0.6"
}
},
"postcss-selector-parser": {
@@ -21734,9 +22039,9 @@
}
},
"postcss": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
- "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -22064,7 +22369,7 @@
}
},
"tc-accounts": {
- "version": "git+https://github.com/appirio-tech/accounts-app.git#33f4aeb29d07dbe4e6d8206d718830fd54943f47",
+ "version": "git+https://github.com/appirio-tech/accounts-app.git#9d0daa189dbf5127ad6ca470ed1683eeb2495ac7",
"from": "git+https://github.com/appirio-tech/accounts-app.git#dev",
"requires": {
"@uirouter/angularjs": "^1.0.0",
@@ -22256,6 +22561,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",
@@ -22270,6 +22585,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",
@@ -22599,6 +22919,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",
@@ -22642,6 +23000,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",
@@ -22656,6 +23022,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",
@@ -23896,6 +24274,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",
@@ -28080,6 +28468,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",
@@ -28217,6 +28613,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",
@@ -32310,9 +32715,9 @@
}
},
"terser": {
- "version": "4.6.12",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz",
- "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz",
+ "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==",
"dev": true,
"requires": {
"commander": "^2.20.0",
@@ -32472,6 +32877,12 @@
"require-main-filename": "^1.0.1"
},
"dependencies": {
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
@@ -32716,6 +33127,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"to-regex": {
@@ -32748,6 +33170,15 @@
"requires": {
"kind-of": "^3.0.2"
}
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
}
}
},
@@ -32765,9 +33196,9 @@
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"topcoder-react-lib": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/topcoder-react-lib/-/topcoder-react-lib-0.17.2.tgz",
- "integrity": "sha512-jYuxoSAIKtGB0ql8O5w7xh1tfYnXTBoU0Fq/j/BBbQA+XOhFZcgtseRyOb8JH/3jiyZpKFMTTh0ZTEFOhhi2TQ==",
+ "version": "1000.19.44",
+ "resolved": "https://registry.npmjs.org/topcoder-react-lib/-/topcoder-react-lib-1000.19.44.tgz",
+ "integrity": "sha512-WoBJbt5w50Hdho9xCzUFwCL/JOQLE0mfMCY3Y0YMUNAToieDpE2RloOwHZpqez+QgE1sxehLGQxlf61M9NZ95A==",
"requires": {
"auth0-js": "^6.8.4",
"config": "^3.2.0",
@@ -32997,9 +33428,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.4",
+ "resolved": "https://registry.npmjs.org/topcoder-react-ui-kit/-/topcoder-react-ui-kit-1000.0.4.tgz",
+ "integrity": "sha512-VvVvrVPhcnaJYLNv3YJLIY+CI+4sLLrhdqfulngMmTcUZft01BUorhMYEBtwhODrfotnx48GXnxu1TQmI3L6dA==",
"requires": {
"prop-types": "^15.6.2",
"react": "^16.4.1",
@@ -33092,9 +33523,9 @@
"integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
},
"trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz",
+ "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==",
"dev": true
},
"trim-off-newlines": {
@@ -33111,14 +33542,12 @@
"trim-trailing-lines": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz",
- "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==",
- "dev": true
+ "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA=="
},
"trough": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true
+ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="
},
"true-case-path": {
"version": "1.0.3",
@@ -33130,9 +33559,9 @@
}
},
"tslib": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
- "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tty-browserify": {
"version": "0.0.0",
@@ -33169,6 +33598,12 @@
"prelude-ls": "~1.1.2"
}
},
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true
+ },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -33200,9 +33635,9 @@
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"uglify-js": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz",
- "integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.3.tgz",
+ "integrity": "sha512-r5ImcL6QyzQGVimQoov3aL2ZScywrOgBXGndbWrdehKoSvGe/RmiE5Jpw/v+GvxODt6l2tpBXwA7n+qZVlHBMA==",
"dev": true,
"optional": true,
"requires": {
@@ -33224,7 +33659,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
"integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
"requires": {
"inherits": "^2.0.0",
"xtend": "^4.0.0"
@@ -33333,14 +33767,12 @@
"unist-util-is": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
- "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
- "dev": true
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="
},
"unist-util-remove-position": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
"integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
- "dev": true,
"requires": {
"unist-util-visit": "^1.1.0"
}
@@ -33358,7 +33790,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
- "dev": true,
"requires": {
"unist-util-visit-parents": "^2.0.0"
}
@@ -33367,7 +33798,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
- "dev": true,
"requires": {
"unist-util-is": "^3.0.0"
}
@@ -33427,7 +33857,8 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"uri-js": {
"version": "4.2.2",
@@ -33641,8 +34072,7 @@
"vfile-location": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
- "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==",
- "dev": true
+ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA=="
},
"vfile-message": {
"version": "2.0.4",
@@ -33702,14 +34132,160 @@
}
},
"watchpack": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
- "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
+ "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
"dev": true,
"requires": {
- "chokidar": "^2.1.8",
+ "chokidar": "^3.4.0",
"graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
+ "dev": true,
+ "optional": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
+ "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "optional": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "optional": true
+ },
+ "readdirp": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+ "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
},
"dependencies": {
"anymatch": {
@@ -33717,6 +34293,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
+ "optional": true,
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@@ -33727,6 +34304,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
+ "optional": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -33737,19 +34315,22 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "optional": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -33768,6 +34349,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -33779,6 +34361,7 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
+ "optional": true,
"requires": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@@ -33799,6 +34382,7 @@
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
+ "optional": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -33814,6 +34398,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
+ "optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -33823,6 +34408,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -33832,6 +34418,7 @@
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -33841,6 +34428,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -33852,6 +34440,7 @@
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -33861,6 +34450,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -33872,6 +34462,7 @@
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
+ "optional": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
@@ -33882,7 +34473,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -33891,6 +34483,7 @@
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
+ "optional": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -33907,6 +34500,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
+ "optional": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -33916,6 +34510,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -33927,6 +34522,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
+ "optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -33939,6 +34535,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
+ "optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -33950,6 +34547,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
+ "optional": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -33960,6 +34558,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "^2.1.0"
}
@@ -33971,6 +34570,7 @@
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -33980,6 +34580,7 @@
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -33989,6 +34590,7 @@
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
+ "optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -33999,13 +34601,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -34015,6 +34619,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
+ "optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -34024,23 +34629,19 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
+ "optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "optional": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -34061,7 +34662,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -34353,12 +34955,6 @@
}
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -34608,9 +35204,9 @@
},
"dependencies": {
"mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
+ "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==",
"dev": true
}
}
@@ -35043,8 +35639,7 @@
"x-is-string": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
- "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
- "dev": true
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
},
"x-xss-protection": {
"version": "1.3.0",
@@ -35163,13 +35758,10 @@
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"yaml": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz",
- "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.9.2"
- }
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
+ "dev": true
},
"yargs": {
"version": "14.2.3",
diff --git a/package.json b/package.json
index 68988aba5b..042dc76db9 100644
--- a/package.json
+++ b/package.json
@@ -106,6 +106,7 @@
"react-image-filter": "^0.1.2",
"react-infinite-scroller": "^1.1.4",
"react-inlinesvg": "^0.8.4",
+ "react-markdown": "^4.3.1",
"react-player": "^0.24.1",
"react-redux": "^5.0.7",
"react-redux-toastr": "^7.2.6",
@@ -135,8 +136,8 @@
"tc-accounts": "git+https://github.com/appirio-tech/accounts-app.git#dev",
"tc-core-library-js": "github:appirio-tech/tc-core-library-js#v2.6.3",
"tc-ui": "^1.0.12",
- "topcoder-react-lib": "0.17.2",
- "topcoder-react-ui-kit": "^1.0.11",
+ "topcoder-react-lib": "1000.19.44",
+ "topcoder-react-ui-kit": "1000.0.4",
"topcoder-react-utils": "0.7.8",
"turndown": "^4.0.2",
"url-parse": "^1.4.1",
diff --git a/src/assets/images/arrow-down.svg b/src/assets/images/arrow-down.svg
index 1702e8c59d..d53eedd1a0 100644
--- a/src/assets/images/arrow-down.svg
+++ b/src/assets/images/arrow-down.svg
@@ -3,14 +3,11 @@
5D558F9B-43EB-41DF-905D-8862EFEE8959
Created with sketchtool.
-
-
-
-
+
diff --git a/src/server/index.js b/src/server/index.js
index 062cb1449c..38706d87ff 100644
--- a/src/server/index.js
+++ b/src/server/index.js
@@ -9,7 +9,7 @@ import Application from 'shared';
import config from 'config';
import express from 'express';
import fetch from 'isomorphic-fetch';
-import { logger } from 'topcoder-react-lib';
+import { logger, services } from 'topcoder-react-lib';
import fs from 'fs';
import moment from 'moment';
import path from 'path';
diff --git a/src/server/services/contentful.js b/src/server/services/contentful.js
index 431ceda155..fa42172b12 100644
--- a/src/server/services/contentful.js
+++ b/src/server/services/contentful.js
@@ -8,6 +8,7 @@ import config from 'config';
import { createClient } from 'contentful';
import { logger } from 'topcoder-react-lib';
import { isomorphy } from 'topcoder-react-utils';
+import { qs } from 'qs';
const contentful = require('contentful-management');
@@ -20,6 +21,8 @@ const PREVIEW_URL = 'https://preview.contentful.com/spaces';
export const ASSETS_DOMAIN = 'assets.ctfassets.net';
export const IMAGES_DOMAIN = 'images.ctfassets.net';
+const MAX_FETCH_RETRIES = 5;
+
/**
* Generic logger for errors and warnings
* from Contentful API calls
@@ -32,6 +35,14 @@ function logHandler(level, data) {
}
}
+/**
+ * Creates a promise that resolves two second after its creation.
+ * @return {Promise}
+ */
+function threeSecondDelay() {
+ return new Promise(resolve => setTimeout(resolve, 3000));
+}
+
/**
* Auxiliary class that handles communication with Contentful CDN and preview
* APIs in the same uniform manner.
@@ -59,6 +70,34 @@ class ApiService {
this.client = createClient(clientConf);
}
+ /**
+ * Gets data from the specified endpoing.
+ * @param {String} endpoint
+ * @param {Object} query Optional. URL query to append to the request.
+ * @return {Promise}
+ */
+ async fetch(endpoint, query) {
+ let url = `${this.private.baseUrl}${endpoint}`;
+ if (query) url += `?${qs.stringify(query)}`;
+ let res;
+ for (let i = 0; i < MAX_FETCH_RETRIES; i += 1) {
+ /* The loop is here to retry async operation multiple times in case of
+ * failures due to violation of Contentful API rate limits, which are
+ * 78 requests within 1 second. Thus, it is a valid use of await inside
+ * loop. */
+ /* eslint-disable no-await-in-loop */
+ res = await fetch(url, {
+ headers: { Authorization: `Bearer ${this.private.key}` },
+ });
+ /* 429 = "Too Many Requests" */
+ if (res.status !== 429) break;
+ await threeSecondDelay();
+ /* eslint-enable no-await-in-loop */
+ }
+ if (!res.ok) throw new Error(res.statusText);
+ return res.json();
+ }
+
/**
* Gets the specified asset.
* @param {String} id Asset ID.
diff --git a/src/server/sw.js b/src/server/sw.js
index b51f364bb6..13db884baa 100644
--- a/src/server/sw.js
+++ b/src/server/sw.js
@@ -87,7 +87,7 @@ workbox.routing.registerRoute(/\/challenges(\/)?(\?.*)?$/, async ({ event, url }
}, 'GET');
// Serve challenge details pages like: /challenges/12345678
-workbox.routing.registerRoute(/\/challenges\/\d+(\/)?(.*)/, async ({ event, url }) => {
+workbox.routing.registerRoute(/\/challenges\/((([\w]{4,12}-?){5}|\d{5,8}))(\/)?(.*)/, async ({ event, url }) => {
if (url.pathname.endsWith('/')) {
// Remove ending '/' char
url.pathname = url.pathname.substring(0, url.pathname.length - 1);
diff --git a/src/shared/actions/challenge-listing/index.js b/src/shared/actions/challenge-listing/index.js
index ab5fefd4f3..1971fead28 100644
--- a/src/shared/actions/challenge-listing/index.js
+++ b/src/shared/actions/challenge-listing/index.js
@@ -14,12 +14,9 @@ const { getService } = services.challenge;
const { getReviewOpportunitiesService } = services.reviewOpportunities;
/**
- * The maximum number of challenges to fetch in a single API call. Currently,
- * the backend never returns more than 50 challenges, even when a higher limit
- * was specified in the request. Thus, this constant should not be larger than
- * 50 (otherwise the frontend code will miss to load some challenges).
+ * The maximum number of challenges to fetch in a single API call.
*/
-const PAGE_SIZE = 50;
+const PAGE_SIZE = 99;
/**
* The maximum number of review opportunities to fetch in a single API call.
@@ -40,8 +37,8 @@ function getAll(getter, page = 0, prev) {
* explicitely required. */
return getter({
- limit: PAGE_SIZE,
- offset: page * PAGE_SIZE,
+ perPage: PAGE_SIZE,
+ page: page + 1,
}).then(({ challenges: chunk }) => {
if (!chunk.length) return prev || [];
return getAll(getter, 1 + page, prev ? prev.concat(chunk) : chunk);
@@ -49,12 +46,12 @@ function getAll(getter, page = 0, prev) {
}
/**
- * Gets possible challenge subtracks.
+ * Gets possible challenge types.
* @return {Promise}
*/
-function getChallengeSubtracksDone() {
+function getChallengeTypesDone() {
return getService()
- .getChallengeSubtracks()
+ .getChallengeTypes()
.then(res => res.sort((a, b) => a.name.localeCompare(b.name)));
}
@@ -94,10 +91,17 @@ function getAllActiveChallengesWithUsersDone(uuid, tokenV3, filter, page = 0) {
];
let user;
if (tokenV3) {
- user = decodeToken(tokenV3).handle;
+ user = decodeToken(tokenV3).userId;
+
+ const newFilter = _.mapKeys(filter, (value, key) => {
+ if (key === 'tag') return 'technologies';
+
+ return key;
+ });
+
// Handle any errors on this endpoint so that the non-user specific challenges
// will still be loaded.
- calls.push(getAll(params => service.getUserChallenges(user, filter, params)
+ calls.push(getAll(params => service.getUserChallenges(user, newFilter, params)
.catch(() => ({ challenges: [] }))), page);
}
return Promise.all(calls).then(([ch, uch]) => {
@@ -131,7 +135,17 @@ function getAllActiveChallengesInit(uuid) {
return uuid;
}
function getAllActiveChallengesDone(uuid, tokenV3) {
- const filter = { status: 'ACTIVE' };
+ const filter = { status: 'Active' };
+ return getAllActiveChallengesWithUsersDone(uuid, tokenV3, filter);
+}
+
+function getAllUserChallengesInit(uuid) {
+ return uuid;
+}
+
+function getAllUserChallengesDone(uuid, tokenV3) {
+ const memberId = decodeToken(tokenV3).userId;
+ const filter = { status: 'Active', memberId };
return getAllActiveChallengesWithUsersDone(uuid, tokenV3, filter);
}
@@ -153,52 +167,30 @@ function getAllActiveChallengesDone(uuid, tokenV3) {
function getActiveChallengesDone(uuid, page, backendFilter, tokenV3, frontFilter = {}) {
const filter = {
...backendFilter,
- status: 'ACTIVE',
+ status: 'Active',
};
const service = getService(tokenV3);
const calls = [
service.getChallenges(filter, {
- limit: PAGE_SIZE,
- offset: page * PAGE_SIZE,
+ perPage: PAGE_SIZE,
+ page: page + 1,
}),
];
let user;
if (tokenV3) {
- user = decodeToken(tokenV3).handle;
+ user = decodeToken(tokenV3).userId;
+
// Handle any errors on this endpoint so that the non-user specific challenges
// will still be loaded.
- calls.push(service.getUserChallenges(user, filter, {
- limit: PAGE_SIZE,
- offset: page * PAGE_SIZE,
- }).catch(() => ({ challenges: [] })));
+ calls.push(service.getUserChallenges(user, filter, {})
+ .catch(() => ({ challenges: [] })));
}
- return Promise.all(calls).then(([ch, uch]) => {
- /* uch array contains challenges where the user is participating in
- * some role. The same challenge are already listed in res array, but they
- * are not attributed to the user there. This block of code marks user
- * challenges in an efficient way. */
- if (uch) {
- const map = {};
- uch.challenges.forEach((item) => { map[item.id] = item; });
- ch.challenges.forEach((item) => {
- if (map[item.id]) {
- /* It is fine to reassing, as the array we modifying is created just
- * above within the same function. */
- /* eslint-disable no-param-reassign */
- item.users[user] = true;
- item.userDetails = map[item.id].userDetails;
- /* eslint-enable no-param-reassign */
- }
- });
- }
-
- return {
- uuid,
- challenges: ch.challenges,
- meta: ch.meta,
- frontFilter,
- };
- });
+ return Promise.all(calls).then(([ch]) => ({
+ uuid,
+ challenges: ch.challenges,
+ meta: ch.meta,
+ frontFilter,
+ }));
}
/**
@@ -214,9 +206,12 @@ function getRestActiveChallengesInit(uuid) {
* @param {String} uuid progress id
* @param {String} tokenV3 token v3
*/
-function getRestActiveChallengesDone(uuid, tokenV3) {
- const filter = { status: 'ACTIVE' };
- return getAllActiveChallengesWithUsersDone(uuid, tokenV3, filter, 1);
+function getRestActiveChallengesDone(uuid, tokenV3, filter) {
+ const mergedFilter = {
+ ...filter,
+ status: 'Active',
+ };
+ return getAllActiveChallengesWithUsersDone(uuid, tokenV3, mergedFilter, 1);
}
/**
@@ -230,12 +225,12 @@ function getAllRecommendedChallengesInit(uuid) {
* Get all recommended challenges
* @param {String} uuid progress id
* @param {String} tokenV3 token v3
- * @param {*} recommendedTechnology recommended technoloty
+ * @param {*} recommendedTags recommended tags
*/
-function getAllRecommendedChallengesDone(uuid, tokenV3, recommendedTechnology) {
+function getAllRecommendedChallengesDone(uuid, tokenV3, recommendedTags) {
const filter = {
- status: 'ACTIVE',
- technologies: recommendedTechnology,
+ status: 'Active',
+ ...(!_.isEmpty(recommendedTags) && { tag: recommendedTags }),
};
return getAllActiveChallengesWithUsersDone(uuid, tokenV3, filter);
}
@@ -264,10 +259,10 @@ function getPastChallengesDone(uuid, page, filter, tokenV3, frontFilter = {}) {
const service = getService(tokenV3);
return service.getChallenges({
...filter,
- status: 'COMPLETED',
+ status: 'Completed',
}, {
- limit: PAGE_SIZE,
- offset: page * PAGE_SIZE,
+ perPage: PAGE_SIZE,
+ page: page + 1,
}).then(({ challenges }) => ({ uuid, challenges, frontFilter }));
}
@@ -327,6 +322,31 @@ function getSrmsDone(uuid, handle, params, tokenV3) {
});
}
+/**
+ * Payload creator for the action that initialize user registered challenges.
+ * @param {String} uuid
+ * @return {String}
+ */
+function getUserChallengesInit(uuid) {
+ return { uuid };
+}
+
+/**
+ * Payload creator for the action that loads user registered challenges.
+ * @param {String} userId
+ * @return {String}
+ */
+function getUserChallengesDone(userId, tokenV3) {
+ const service = getService(tokenV3);
+
+ return service.getUserResources(userId)
+ .then(item => item)
+ .catch((error) => {
+ fireErrorMessage('Error Getting User Challenges', error.content || error);
+ return Promise.reject(error);
+ });
+}
+
export default createActions({
CHALLENGE_LISTING: {
DROP_CHALLENGES: _.noop,
@@ -334,6 +354,9 @@ export default createActions({
GET_ALL_ACTIVE_CHALLENGES_INIT: getAllActiveChallengesInit,
GET_ALL_ACTIVE_CHALLENGES_DONE: getAllActiveChallengesDone,
+ GET_ALL_USER_CHALLENGES_INIT: getAllUserChallengesInit,
+ GET_ALL_USER_CHALLENGES_DONE: getAllUserChallengesDone,
+
GET_ALL_RECOMMENDED_CHALLENGES_INIT: getAllRecommendedChallengesInit,
GET_ALL_RECOMMENDED_CHALLENGES_DONE: getAllRecommendedChallengesDone,
@@ -343,8 +366,8 @@ export default createActions({
GET_REST_ACTIVE_CHALLENGES_INIT: getRestActiveChallengesInit,
GET_REST_ACTIVE_CHALLENGES_DONE: getRestActiveChallengesDone,
- GET_CHALLENGE_SUBTRACKS_INIT: _.noop,
- GET_CHALLENGE_SUBTRACKS_DONE: getChallengeSubtracksDone,
+ GET_CHALLENGE_TYPES_INIT: _.noop,
+ GET_CHALLENGE_TYPES_DONE: getChallengeTypesDone,
GET_CHALLENGE_TAGS_INIT: _.noop,
GET_CHALLENGE_TAGS_DONE: getChallengeTagsDone,
@@ -358,6 +381,9 @@ export default createActions({
GET_SRMS_INIT: getSrmsInit,
GET_SRMS_DONE: getSrmsDone,
+ GET_USER_CHALLENGES_INIT: getUserChallengesInit,
+ GET_USER_CHALLENGES_DONE: getUserChallengesDone,
+
EXPAND_TAG: id => id,
/* Pass in community ID. */
diff --git a/src/shared/actions/challenge-listing/sidebar.js b/src/shared/actions/challenge-listing/sidebar.js
index 8c87008a0f..98fb81ce5e 100644
--- a/src/shared/actions/challenge-listing/sidebar.js
+++ b/src/shared/actions/challenge-listing/sidebar.js
@@ -143,6 +143,7 @@ export default createActions({
/* Pass in the bucket type. */
SELECT_BUCKET: _.identity,
+ SELECT_BUCKET_DONE: _.noop,
/* Pass in the index of filter inside savedFilters array. */
SELECT_SAVED_FILTER: _.identity,
diff --git a/src/shared/actions/contentful.js b/src/shared/actions/contentful.js
index 8f5b4d556d..0ae1983713 100644
--- a/src/shared/actions/contentful.js
+++ b/src/shared/actions/contentful.js
@@ -277,7 +277,7 @@ async function getChallengesBlockDone(blockProps) {
const challengesService = services.challenge.getService();
const filter = {};
if (!block.fields.completedChallenges) {
- filter.status = 'ACTIVE';
+ filter.status = 'Active';
}
if (block.fields.challengeTitleContains) {
filter.name = block.fields.challengeTitleContains;
diff --git a/src/shared/actions/tc-communities/index.js b/src/shared/actions/tc-communities/index.js
index 4b14591442..c2f30c6ea9 100644
--- a/src/shared/actions/tc-communities/index.js
+++ b/src/shared/actions/tc-communities/index.js
@@ -38,7 +38,7 @@ function getListInit(uuid) {
* @return {Promise}
*/
function getListDone(uuid, auth) {
- const groups = _.get(auth, 'profile.groups', []).map(g => g.id);
+ const groups = _.get(auth, 'profile.groups', []).map(g => g.oldId);
return getCommunitiesService(auth.tokenV3)
.getList(groups).then(list => ({ list, uuid }));
}
diff --git a/src/shared/actions/terms.js b/src/shared/actions/terms.js
index efa1008681..e34897391e 100644
--- a/src/shared/actions/terms.js
+++ b/src/shared/actions/terms.js
@@ -22,7 +22,7 @@ const { getService } = services.terms;
* @return {Promise}
*/
function getTermsDone(entity, tokens, mockAgreed) {
- const service = getService(tokens.tokenV2);
+ const service = getService(tokens.tokenV3);
let termsPromise;
// if mockAgreed=true passed, then we create an array of 10 true which we pass to the
@@ -34,7 +34,7 @@ function getTermsDone(entity, tokens, mockAgreed) {
switch (entity.type) {
case 'challenge': {
- termsPromise = service.getChallengeTerms(entity.id, mockAgreedArray);
+ termsPromise = service.getChallengeTerms(entity.terms, mockAgreedArray);
break;
}
case 'community': {
@@ -49,7 +49,7 @@ function getTermsDone(entity, tokens, mockAgreed) {
throw new Error(`Entity type '${entity.type}' is not supported by getTermsDone.`);
}
- return termsPromise.then(res => ({ entity, terms: res.terms }));
+ return termsPromise.then(res => ({ entity, terms: res }));
}
/**
@@ -68,11 +68,11 @@ function getTermDetailsInit(termId) {
* Payload creator for TERMS/GET_TERM_DETAILS_DONE action,
* which fetch details of the specified term.
* @param {Number|String} termId
- * @param {String} tokenV2
+ * @param {String} tokenV3
* @return {Promise}
*/
-function getTermDetailsDone(termId, tokenV2) {
- const service = getService(tokenV2);
+function getTermDetailsDone(termId, tokenV3) {
+ const service = getService(tokenV3);
return service.getTermDetails(termId).then(details => ({ termId, details }));
}
@@ -90,11 +90,11 @@ function getDocuSignUrlInit(templateId) {
* which generate the url of DoduSign term
* @param {Number|String} templateId id of document template to sign
* @param {String} returnUrl callback url after finishing singing
- * @param {String} tokenV2 auth token
+ * @param {String} tokenV3 auth token
* @return {Promise} promise of request result
*/
-function getDocuSignUrlDone(templateId, returnUrl, tokenV2) {
- const service = getService(tokenV2);
+function getDocuSignUrlDone(templateId, returnUrl, tokenV3) {
+ const service = getService(tokenV3);
return service.getDocuSignUrl(templateId, returnUrl)
.then(resp => ({ templateId, docuSignUrl: resp.recipientViewUrl }));
}
@@ -111,11 +111,11 @@ function agreeTermInit(termId) {
/**
* Payload creator for TERMS/AGREE_TERM_DONE
* @param {Number|String} termId id of term
- * @param {String} tokenV2 auth token
+ * @param {String} tokenV3 auth token
* @return {Promise} promise of request result
*/
-function agreeTermDone(termId, tokenV2) {
- const service = getService(tokenV2);
+function agreeTermDone(termId, tokenV3) {
+ const service = getService(tokenV3);
return service.agreeTerm(termId).then(resp => ({ termId, success: resp.success }));
}
diff --git a/src/shared/components/ChallengeTile/index.jsx b/src/shared/components/ChallengeTile/index.jsx
index ed5bbbff82..740439ca90 100644
--- a/src/shared/components/ChallengeTile/index.jsx
+++ b/src/shared/components/ChallengeTile/index.jsx
@@ -73,21 +73,23 @@ class ChallengeTile extends React.Component {
challenge,
} = this.props;
- const outStyleName = `challenge tile-view ${challenge.track}`;
+ const { track } = challenge.legacy;
+
+ const outStyleName = `challenge tile-view ${track}`;
const extraStyle = {
width: '285px',
padding: '15px',
margin: '10px 5px',
};
- const roundId = challenge.track === 'DATA_SCIENCE' ? _.get(challenge, 'rounds.0.id') : 0;
+ const roundId = track === 'DATA_SCIENCE' ? _.get(challenge, 'rounds.0.id') : 0;
return (
- { challenge.track === 'DATA_SCIENCE' && challenge.subTrack
+ { track === 'DATA_SCIENCE' && challenge.subTrack
&& (
@@ -134,7 +136,7 @@ class ChallengeTile extends React.Component {
) }
- { challenge.track === 'DEVELOP'
+ { track === 'DEVELOP'
&& (
@@ -191,7 +193,7 @@ class ChallengeTile extends React.Component {
)
}
{
- challenge.track === 'DESIGN' && !challenge.isPrivate
+ track === 'DESIGN' && !challenge.isPrivate
&& (
@@ -311,7 +313,7 @@ class ChallengeTile extends React.Component {
- { challenge.track !== 'DATA_SCIENCE'
+ { track !== 'DATA_SCIENCE'
&& (
diff --git a/src/shared/components/Contentful/ChallengesBlock/Card/index.jsx b/src/shared/components/Contentful/ChallengesBlock/Card/index.jsx
index 87f1bac187..3c51580da6 100644
--- a/src/shared/components/Contentful/ChallengesBlock/Card/index.jsx
+++ b/src/shared/components/Contentful/ChallengesBlock/Card/index.jsx
@@ -7,6 +7,7 @@ import {
DataScienceTrackTag,
DesignTrackTag,
DevelopmentTrackTag,
+ QATrackTag,
} from 'topcoder-react-ui-kit';
import { Link } from 'topcoder-react-utils';
@@ -22,12 +23,13 @@ export default function Card({
challenge,
}) {
const {
- subTrack,
+ type,
+ typeId,
+ track,
} = challenge;
let TrackTag;
- switch (challenge.track.toLowerCase()) {
- case 'datasci':
+ switch (track.toLowerCase()) {
case COMPETITION_TRACKS.DATA_SCIENCE:
TrackTag = DataScienceTrackTag;
break;
@@ -37,6 +39,9 @@ export default function Card({
case COMPETITION_TRACKS.DEVELOP:
TrackTag = DevelopmentTrackTag;
break;
+ case COMPETITION_TRACKS.QA:
+ TrackTag = QATrackTag;
+ break;
default:
throw new Error('Wrong competition track value');
}
@@ -54,10 +59,10 @@ export default function Card({
return (
- {_.capitalize(subTrack).replace(/_/g, ' ')}
+ {_.capitalize(type).replace(/_/g, ' ')}
x.eventName.match(/tco\d{2}/));
+ && challenge.events.find(x => x.key && x.key.match(/tco\d{2}/));
const roles = _.get(userDetails, 'roles') || [];
+ const role = _.find(userResources, { id }) || {};
const showDirectLink = _.intersection(roles, [
'Approver',
@@ -93,9 +87,9 @@ export default function ChallengeCard({
'Reviewer',
]).length;
- const submitter = roles.includes('Submitter');
+ const submitter = role.name === 'Submitter';
const submitted = _.get(userDetails, 'hasUserSubmittedForReview');
- const nextPhase = currentPhases && _.last(currentPhases);
+ const nextPhase = phases && _.last(phases);
const nextPhaseType = _.get(nextPhase, 'phaseType');
@@ -104,52 +98,30 @@ export default function ChallengeCard({
'Appeal Response',
]).length) showOrLink = true;
- const submissionOpen = nextPhaseType === 'Submission';
+ const isChallengeOpen = status === 'Active';
- let statusMsg;
- let deadlineMsg;
- let msgStyleModifier = '';
- const now = moment();
- if (nextPhase) {
- statusMsg = nextPhase.phaseType;
- const deadlineEnd = moment(nextPhase.scheduledEndTime);
- deadlineMsg = deadlineEnd.diff(now);
- const late = deadlineMsg <= 0;
- deadlineMsg = Math.abs(deadlineMsg);
-
- if (late) msgStyleModifier = ' alert';
- else if (deadlineMsg < ALERT_TIME) msgStyleModifier = ' warning';
+ const allPhases = phases || [];
+ let statusPhase = allPhases
+ .filter(p => p.name !== 'Registration' && p.isOpen)
+ .sort((a, b) => moment(a.scheduledEndDate).diff(b.scheduledEndDate))[0];
- let format;
- if (deadlineMsg > DAY_MS) format = 'D[d] H[h]';
- else if (deadlineMsg > HOUR_MS) format = 'H[h] m[min]';
- else format = 'm[min] s[s]';
-
- deadlineMsg = moment.duration(deadlineMsg).format(format);
- deadlineMsg = late ? `Late for ${deadlineMsg}` : `Ends in ${deadlineMsg}`;
- } else if (moment(registrationStartDate).isAfter(now)) {
- deadlineMsg = moment(registrationStartDate).diff(now);
- const late = deadlineMsg <= 0;
- deadlineMsg = Math.abs(deadlineMsg);
-
- if (late) msgStyleModifier = ' alert';
- else if (deadlineMsg < ALERT_TIME) msgStyleModifier = ' warning';
+ if (!statusPhase && type === 'First2Finish' && allPhases.length) {
+ statusPhase = _.clone(allPhases[0]);
+ statusPhase.name = 'Submission';
+ }
- let format;
- if (deadlineMsg > DAY_MS) format = 'D[d] H[h]';
- else if (deadlineMsg > HOUR_MS) format = 'H[h] m[min]';
- else format = 'm[min] s[s]';
+ let phaseMessage = STALLED_MSG;
+ if (statusPhase) phaseMessage = statusPhase.name;
+ else if (status === 'Draft') phaseMessage = DRAFT_MSG;
- deadlineMsg = moment.duration(deadlineMsg).format(format);
- deadlineMsg = late ? `Late by ${deadlineMsg}` : `Starts in ${deadlineMsg}`;
+ let msgStyleModifier = '';
+ const now = moment();
+ const deadlineEnd = moment(nextPhase.scheduledEndDate);
+ const late = deadlineEnd.diff(now) <= 0;
+ const statusMsg = phaseMessage;
+ const deadlineMsg = getTimeLeft(statusPhase, 'to go').text;
- statusMsg = 'Scheduled';
- } else if (status === 'COMPLETED') {
- statusMsg = 'Completed';
- } else {
- msgStyleModifier = ' alert';
- statusMsg = 'Stalled';
- }
+ if (late || phaseMessage === STALLED_MSG) msgStyleModifier = ' alert';
return (
@@ -159,14 +131,14 @@ export default function ChallengeCard({
setImmediate(
- () => setChallengeListingFilter({ subtracks: [subTrack] }),
+ () => setChallengeListingFilter({ types: [typeId] }),
)
}
theme={{ button: style.tag }}
- to={`/challenges?filter[subtracks][0]=${
- encodeURIComponent(subTrack)}`}
+ to={`/challenges?filter[types][0]=${
+ encodeURIComponent(typeId)}`}
>
- {normalizeSubTrackTagForRendering(challenge.subTrack)}
+ {type}
{
isTco ? (
@@ -240,7 +212,7 @@ export default function ChallengeCard({
) : null
}
{
- submitter && submissionOpen ? (
+ submitter && isChallengeOpen && phaseMessage !== STALLED_MSG ? (
);
}
+ChallengeCard.defaultProps = {
+ userResources: [],
+};
+
ChallengeCard.propTypes = {
challenge: PT.shape({
- forumId: PT.number.isRequired,
- id: PT.number.isRequired,
+ legacy: PT.shape({
+ forumId: PT.oneOfType([PT.number, PT.string]),
+ }).isRequired,
+ id: PT.oneOfType([PT.number, PT.string]).isRequired,
name: PT.string.isRequired,
- track: PT.oneOf(['DATA_SCIENCE', 'DESIGN', 'DEVELOP']).isRequired,
- currentPhases: PT.any,
+ phases: PT.any,
registrationStartDate: PT.any,
status: PT.any,
userDetails: PT.any,
events: PT.any,
- subTrack: PT.string.isRequired,
+ type: PT.string,
+ track: PT.string.isRequired,
}).isRequired,
selectChallengeDetailsTab: PT.func.isRequired,
setChallengeListingFilter: PT.func.isRequired,
// unregisterFromChallenge: PT.func.isRequired,
+ userResources: PT.arrayOf(PT.shape()),
+ challengeTypesMap: PT.shape().isRequired,
};
diff --git a/src/shared/components/Dashboard/CurrentActivity/Challenges/index.jsx b/src/shared/components/Dashboard/CurrentActivity/Challenges/index.jsx
index b35212098a..653d33a91c 100644
--- a/src/shared/components/Dashboard/CurrentActivity/Challenges/index.jsx
+++ b/src/shared/components/Dashboard/CurrentActivity/Challenges/index.jsx
@@ -27,6 +27,8 @@ export default function Challenges({
switchChallengeFilter,
switchShowChallengeFilter,
unregisterFromChallenge,
+ userResources,
+ challengeTypesMap,
}) {
if (challengesLoading) {
return (
@@ -51,11 +53,11 @@ export default function Challenges({
const ch = filteredChallenges[i];
const nextPhase = ch.currentPhases && _.last(ch.currentPhases);
if (nextPhase) {
- const deadlineEnd = moment(nextPhase.scheduledEndTime);
+ const deadlineEnd = moment(nextPhase.scheduledEndDate);
ch.dashboardPriority = deadlineEnd.diff(now);
} else if (moment(ch.registrationStartDate).isAfter(now)) {
ch.dashboardPriority = moment(ch.registrationStartDate).diff(now);
- } else if (ch.status === 'COMPLETED') {
+ } else if (ch.status === 'Completed') {
ch.dashboardPriority = Number.MAX_VALUE;
} else ch.dashboardPriority = -Number.MAX_VALUE;
}
@@ -74,6 +76,8 @@ export default function Challenges({
selectChallengeDetailsTab={selectChallengeDetailsTab}
setChallengeListingFilter={setChallengeListingFilter}
unregisterFromChallenge={unregisterFromChallenge}
+ userResources={userResources}
+ challengeTypesMap={challengeTypesMap}
/>
))
) : (
@@ -140,18 +144,14 @@ export default function Challenges({
/>
-
);
}
+Challenges.defaultProps = {
+ userResources: [],
+};
+
Challenges.propTypes = {
challengeFilter: PT.string.isRequired,
challenges: PT.arrayOf(PT.object).isRequired,
@@ -164,4 +164,6 @@ Challenges.propTypes = {
switchChallengeFilter: PT.func.isRequired,
switchShowChallengeFilter: PT.func.isRequired,
unregisterFromChallenge: PT.func.isRequired,
+ userResources: PT.arrayOf(PT.shape()),
+ challengeTypesMap: PT.shape().isRequired,
};
diff --git a/src/shared/components/Dashboard/CurrentActivity/Challenges/style.scss b/src/shared/components/Dashboard/CurrentActivity/Challenges/style.scss
index a3fe268622..771ce5b0f6 100644
--- a/src/shared/components/Dashboard/CurrentActivity/Challenges/style.scss
+++ b/src/shared/components/Dashboard/CurrentActivity/Challenges/style.scss
@@ -21,26 +21,6 @@
}
}
-.link {
- @include tc-body-md;
-
- &,
- &:active,
- &:focus,
- &:visited {
- color: $tc-dark-blue-110;
- }
-
- &:hover {
- color: $tc-dark-blue-70;
- }
-}
-
-.linksContainer {
- padding: 30px 20px 0;
- text-align: center;
-}
-
.loading {
margin: 40px 20px 30px;
}
diff --git a/src/shared/components/Dashboard/CurrentActivity/index.jsx b/src/shared/components/Dashboard/CurrentActivity/index.jsx
index c1b0cd1890..68bcb853ad 100644
--- a/src/shared/components/Dashboard/CurrentActivity/index.jsx
+++ b/src/shared/components/Dashboard/CurrentActivity/index.jsx
@@ -69,6 +69,8 @@ export default class MyChallenges extends React.Component {
tab,
unregisterFromChallenge,
userGroups,
+ userResources,
+ challengeTypesMap,
} = this.props;
const myCommunities = communities.filter(x => _.intersection(userGroups, x.groupIds).length)
@@ -105,6 +107,8 @@ export default class MyChallenges extends React.Component {
switchChallengeFilter={switchChallengeFilter}
switchShowChallengeFilter={switchShowChallengeFilter}
unregisterFromChallenge={unregisterFromChallenge}
+ userResources={userResources}
+ challengeTypesMap={challengeTypesMap}
/>
) : null
}
@@ -130,9 +134,14 @@ export default class MyChallenges extends React.Component {
}
}
+MyChallenges.defaultProps = {
+ challenges: [],
+ userResources: [],
+};
+
MyChallenges.propTypes = {
challengeFilter: PT.string.isRequired,
- challenges: PT.arrayOf(PT.object).isRequired,
+ challenges: PT.arrayOf(PT.object),
challengesLoading: PT.bool.isRequired,
communities: PT.arrayOf(PT.object).isRequired,
communitiesLoading: PT.bool.isRequired,
@@ -148,4 +157,6 @@ MyChallenges.propTypes = {
tab: PT.oneOf(_.values(TABS)).isRequired,
unregisterFromChallenge: PT.func.isRequired,
userGroups: PT.arrayOf(PT.string).isRequired,
+ userResources: PT.arrayOf(PT.shape()),
+ challengeTypesMap: PT.shape().isRequired,
};
diff --git a/src/shared/components/Dashboard/Program/IosCard.jsx b/src/shared/components/Dashboard/Program/IosCard.jsx
index c13dbd7d5d..f86f1989f9 100644
--- a/src/shared/components/Dashboard/Program/IosCard.jsx
+++ b/src/shared/components/Dashboard/Program/IosCard.jsx
@@ -8,12 +8,14 @@ import './IosCard.scss';
const IosCard = (props) => {
const { challenge } = props;
+ const { legacy } = challenge;
+ const { track, forumId } = legacy;
return (
-
+
diff --git a/src/shared/components/Dashboard/SRM/index.jsx b/src/shared/components/Dashboard/SRM/index.jsx
index d3bdeeb270..9c267ca2cf 100644
--- a/src/shared/components/Dashboard/SRM/index.jsx
+++ b/src/shared/components/Dashboard/SRM/index.jsx
@@ -43,9 +43,6 @@ const SRM = (props) => {
-
- View Past SRMS
-
Launch Arena
diff --git a/src/shared/components/Dashboard/index.jsx b/src/shared/components/Dashboard/index.jsx
index 4879945940..49d5ce8da1 100644
--- a/src/shared/components/Dashboard/index.jsx
+++ b/src/shared/components/Dashboard/index.jsx
@@ -41,6 +41,8 @@ export default function Dashboard({
userGroups,
xlBadge,
// errorLoadingRss,
+ userResources,
+ challengeTypesMap,
}) {
return (
@@ -81,6 +83,8 @@ export default function Dashboard({
tab={tab}
unregisterFromChallenge={unregisterFromChallenge}
userGroups={userGroups}
+ userResources={userResources}
+ challengeTypesMap={challengeTypesMap}
/>
{/* {!errorLoadingRss && (
@@ -92,6 +96,7 @@ export default function Dashboard({
Dashboard.defaultProps = {
announcementPreviewId: '',
+ userResources: [],
};
Dashboard.propTypes = {
@@ -126,4 +131,6 @@ Dashboard.propTypes = {
userGroups: PT.arrayOf(PT.string).isRequired,
xlBadge: PT.string.isRequired,
// errorLoadingRss: PT.bool.isRequired,
+ userResources: PT.arrayOf(PT.shape()),
+ challengeTypesMap: PT.shape().isRequired,
};
diff --git a/src/shared/components/Looker/index.jsx b/src/shared/components/Looker/index.jsx
index 382bc9df88..03e7ac6ec7 100644
--- a/src/shared/components/Looker/index.jsx
+++ b/src/shared/components/Looker/index.jsx
@@ -23,10 +23,8 @@ import React, { Component } from 'react';
import { fixStyle } from 'utils/contentful';
import cn from 'classnames';
import { Scrollbars } from 'react-custom-scrollbars';
-
import './style.scss';
-
export default class Looker extends Component {
constructor(props) {
super(props);
diff --git a/src/shared/components/ProfilePage/Stats/HistoryGraph/index.jsx b/src/shared/components/ProfilePage/Stats/HistoryGraph/index.jsx
index 9e7034c9a4..21112b3aa3 100644
--- a/src/shared/components/ProfilePage/Stats/HistoryGraph/index.jsx
+++ b/src/shared/components/ProfilePage/Stats/HistoryGraph/index.jsx
@@ -211,7 +211,7 @@ export default class HistoryGraph extends React.Component {
}
if (track === 'DATA_SCIENCE') {
if (subTrack === 'MARATHON_MATCH') {
- return `${config.URL.COMMUNITY}/tc?module=MatchDetails&rd=${challengeId}`;
+ return `/challenges/${challengeId}`;
}
if (subTrack === 'SRM') {
return `${config.URL.COMMUNITY}/stat?c=round_overview&rd=${challengeId}`;
diff --git a/src/shared/components/ProfilePage/Stats/SubTrackChallengeView/index.jsx b/src/shared/components/ProfilePage/Stats/SubTrackChallengeView/index.jsx
index f774b97029..1fadb2a65f 100644
--- a/src/shared/components/ProfilePage/Stats/SubTrackChallengeView/index.jsx
+++ b/src/shared/components/ProfilePage/Stats/SubTrackChallengeView/index.jsx
@@ -137,11 +137,20 @@ class SubTrackChallengeView extends React.Component {
loadSRM,
loadingMarathonUUID,
loadMarathon,
+ userId,
} = this.props;
if (track === 'DEVELOP' || track === 'DESIGN') {
if (!loadingSubTrackChallengesUUID) {
- loadSubtrackChallenges(handle, auth.tokenV3, track, subTrack, 0, CHALLENGE_PER_PAGE, true);
+ loadSubtrackChallenges(
+ handle,
+ auth.tokenV3,
+ track, subTrack,
+ 0,
+ CHALLENGE_PER_PAGE,
+ true,
+ userId,
+ );
}
} else if (track === 'DATA_SCIENCE') {
if (subTrack === 'SRM') {
@@ -168,6 +177,7 @@ class SubTrackChallengeView extends React.Component {
loadSRM,
loadingMarathonUUID,
loadMarathon,
+ userId,
} = this.props;
const {
@@ -184,6 +194,7 @@ class SubTrackChallengeView extends React.Component {
pageNum + 1,
CHALLENGE_PER_PAGE,
false,
+ userId,
);
this.setState({ pageNum: pageNum + 1 });
}
@@ -400,7 +411,16 @@ function mapDispatchToProps(dispatch) {
const action = actions.members;
return {
- loadSubtrackChallenges: (handle, tokenV3, track, subTrack, pageNum, pageSize, refresh) => {
+ loadSubtrackChallenges: (
+ handle,
+ tokenV3,
+ track,
+ subTrack,
+ pageNum,
+ pageSize,
+ refresh,
+ userId,
+ ) => {
const uuid = shortId();
dispatch(action.getSubtrackChallengesInit(handle, uuid));
dispatch(action.getSubtrackChallengesDone(
@@ -412,6 +432,7 @@ function mapDispatchToProps(dispatch) {
pageNum,
pageSize,
refresh,
+ userId,
));
},
loadSRM: (handle, tokenV3, pageNum, pageSize, refresh) => {
diff --git a/src/shared/components/ReviewOpportunityDetailsPage/Header/PhaseList/index.jsx b/src/shared/components/ReviewOpportunityDetailsPage/Header/PhaseList/index.jsx
index 10ca0339e2..c0a4db58c7 100644
--- a/src/shared/components/ReviewOpportunityDetailsPage/Header/PhaseList/index.jsx
+++ b/src/shared/components/ReviewOpportunityDetailsPage/Header/PhaseList/index.jsx
@@ -22,19 +22,19 @@ const { formatDuration } = time;
* @return {Object} The rendered React element
*/
const renderPhase = phase => (
-
- {details.challenge.subTrack}
+ {details.challenge.type}
diff --git a/src/shared/components/SubmissionManagement/Submission/index.jsx b/src/shared/components/SubmissionManagement/Submission/index.jsx
index 3cf517c545..dc248e1a05 100644
--- a/src/shared/components/SubmissionManagement/Submission/index.jsx
+++ b/src/shared/components/SubmissionManagement/Submission/index.jsx
@@ -29,7 +29,7 @@ export default function Submission(props) {
const {
submissionObject,
showScreeningDetails,
- type,
+ track,
onDelete,
onShowDetails,
status,
@@ -40,23 +40,23 @@ export default function Submission(props) {
return (
- {submissionObject.submissionId}
+ {submissionObject.id}
|
- {submissionObject.submissionType}
+ {submissionObject.type}
|
- {formatDate(submissionObject.submissionDate)}
+ {formatDate(submissionObject.created)}
|
{
- type === 'DESIGN' && (
+ track === 'Design' && (
{submissionObject.screening
&& (
)}
|
@@ -66,8 +66,8 @@ export default function Submission(props) {
@@ -80,14 +80,14 @@ export default function Submission(props) {
downloads. Then we'll use this commented out code or
remove it for good.
*/ }
{status !== 'COMPLETED'
&& (
- {currentPhase.phaseType}
+ {currentPhase.name}
{
challenge.status !== 'COMPLETED' ? (
@@ -110,7 +114,7 @@ export default function SubmissionManagement(props) {
isDesign && (
- {currentPhase.phaseType}
+ {currentPhase.name}
{' '}
Ends:
@@ -147,7 +151,7 @@ export default function SubmissionManagement(props) {
- {showDetails[subObject.submissionId]
+
+ {showDetails[subObject.id]
&& (
|
)}
@@ -101,7 +101,7 @@ export default function SubmissionsTable(props) {
Submission Date
|
- {type === 'DESIGN' && (
+ {track === 'Design' && (
Screening Status
|
@@ -126,7 +126,7 @@ const SubShape = PT.shape({
status: PT.string,
}),
submitted: PT.string,
- type: PT.string,
+ track: PT.string,
});
SubmissionsTable.defaultProps = {
@@ -141,7 +141,7 @@ SubmissionsTable.defaultProps = {
SubmissionsTable.propTypes = {
submissionObjects: PT.arrayOf(SubShape),
showDetails: PT.shape().isRequired,
- type: PT.string.isRequired,
+ track: PT.string.isRequired,
onDelete: PT.func,
onlineReviewUrl: PT.string,
helpPageUrl: PT.string,
diff --git a/src/shared/components/SubmissionPage/FilestackFilePicker/index.jsx b/src/shared/components/SubmissionPage/FilestackFilePicker/index.jsx
index 9eab962531..848d8fc69d 100644
--- a/src/shared/components/SubmissionPage/FilestackFilePicker/index.jsx
+++ b/src/shared/components/SubmissionPage/FilestackFilePicker/index.jsx
@@ -334,7 +334,7 @@ FilestackFilePicker.defaultProps = {
FilestackFilePicker.propTypes = {
error: PT.string,
userId: PT.string.isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
fileName: PT.string,
fileExtensions: PT.arrayOf(PT.string).isRequired,
title: PT.string.isRequired,
diff --git a/src/shared/components/SubmissionPage/Header/index.jsx b/src/shared/components/SubmissionPage/Header/index.jsx
index 96f427cddb..6196ac7427 100644
--- a/src/shared/components/SubmissionPage/Header/index.jsx
+++ b/src/shared/components/SubmissionPage/Header/index.jsx
@@ -37,7 +37,7 @@ const Header = ({
* Prop Validation
*/
Header.propTypes = {
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
challengesUrl: PT.string.isRequired,
title: PT.string.isRequired,
};
diff --git a/src/shared/components/SubmissionPage/Submit/index.jsx b/src/shared/components/SubmissionPage/Submit/index.jsx
index d325fe7b01..583ba86f32 100644
--- a/src/shared/components/SubmissionPage/Submit/index.jsx
+++ b/src/shared/components/SubmissionPage/Submit/index.jsx
@@ -46,14 +46,13 @@ class Submit extends React.Component {
userId,
} = this.props;
- const { subType, subPhaseId } = this.getSubDetails();
+ const subType = this.getSubDetails();
const formData = new FormData();
formData.append('url', sub.fileUrl);
formData.append('type', subType);
formData.append('memberId', userId);
formData.append('challengeId', challengeId);
- formData.append('submissionPhaseId', subPhaseId);
if (sub.fileType) {
formData.append('fileType', sub.fileType);
}
@@ -63,38 +62,31 @@ class Submit extends React.Component {
// returns both submission type and phase id
getSubDetails() {
const {
- currentPhases,
- allPhases,
+ phases,
} = this.props;
- const statusPhases = (currentPhases && currentPhases.length > 0 ? currentPhases : allPhases);
- const checkpoint = _.find(statusPhases, {
- phaseType: 'Checkpoint Submission',
+ const checkpoint = _.find(phases, {
+ name: 'Checkpoint Submission',
});
- const submission = _.find(statusPhases, {
- phaseType: 'Submission',
+ const submission = _.find(phases, {
+ name: 'Submission',
});
- const finalFix = _.find(statusPhases, {
- phaseType: 'Final Fix',
+ const finalFix = _.find(phases, {
+ name: 'Final Fix',
});
let subType;
- let subPhaseId;
// Submission type logic
- if (checkpoint && checkpoint.phaseStatus === 'Open') {
+ if (checkpoint && checkpoint.isOpen) {
subType = 'Checkpoint Submission';
- subPhaseId = checkpoint.id;
- } else if (checkpoint && checkpoint.phaseStatus === 'Close' && submission && submission.phaseStatus === 'Open') {
+ } else if (checkpoint && !checkpoint.isOpen && submission && submission.isOpen) {
subType = 'Contest Submission';
- subPhaseId = submission.id;
- } else if (finalFix && finalFix.phaseStatus === 'Open') {
+ } else if (finalFix && finalFix.isOpen) {
subType = 'Studio Final Fix Submission';
- subPhaseId = finalFix.id;
} else {
subType = 'Contest Submission';
- subPhaseId = submission.id;
}
- return { subType, subPhaseId };
+ return subType;
}
reset() {
@@ -358,7 +350,7 @@ const filestackDataProp = PT.shape({
size: PT.number.isRequired,
key: PT.string.isRequired,
container: PT.string.isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
fileUrl: PT.string.isRequired,
});
@@ -366,10 +358,9 @@ const filestackDataProp = PT.shape({
* Prop Validation
*/
Submit.propTypes = {
- currentPhases: PT.arrayOf(PT.object).isRequired,
- allPhases: PT.arrayOf(PT.object).isRequired,
+ phases: PT.arrayOf(PT.object).isRequired,
userId: PT.string.isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
challengeName: PT.string.isRequired,
challengesUrl: PT.string.isRequired,
communitiesList: PT.shape({
@@ -380,7 +371,7 @@ Submit.propTypes = {
loadingUuid: PT.string.isRequired,
timestamp: PT.number.isRequired,
}).isRequired,
- groups: PT.shape({}).isRequired,
+ groups: PT.arrayOf(PT.shape()).isRequired,
isSubmitting: PT.bool.isRequired,
submitDone: PT.bool.isRequired,
errorMsg: PT.string,
diff --git a/src/shared/components/SubmissionPage/Uploading/index.jsx b/src/shared/components/SubmissionPage/Uploading/index.jsx
index 4f4e0311e7..dac34c4b03 100644
--- a/src/shared/components/SubmissionPage/Uploading/index.jsx
+++ b/src/shared/components/SubmissionPage/Uploading/index.jsx
@@ -196,7 +196,7 @@ const Uploading = ({
* Prop Validation
*/
Uploading.propTypes = {
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
challengeName: PT.string.isRequired,
challengesUrl: PT.string.isRequired,
isSubmitting: PT.bool.isRequired,
diff --git a/src/shared/components/SubmissionPage/index.jsx b/src/shared/components/SubmissionPage/index.jsx
index 73742c13e2..fa4d339f5f 100644
--- a/src/shared/components/SubmissionPage/index.jsx
+++ b/src/shared/components/SubmissionPage/index.jsx
@@ -20,20 +20,20 @@ function SubmissionsPage(props) {
challengeName,
challengesUrl,
status,
- currentPhases,
+ phases,
winners,
handle,
} = props;
const submissionEnded = status === 'COMPLETED'
- || (!_.some(currentPhases, { phaseType: 'Submission', phaseStatus: 'Open' })
- && !_.some(currentPhases, { phaseType: 'Checkpoint Submission', phaseStatus: 'Open' }));
+ || (!_.some(phases, { name: 'Submission', isOpen: true })
+ && !_.some(phases, { name: 'Checkpoint Submission', isOpen: true }));
const hasFirstPlacement = !_.isEmpty(winners) && _.some(winners, { placement: 1, handle });
let canSubmitFinalFixes = false;
- if (hasFirstPlacement && !_.isEmpty(currentPhases)) {
- canSubmitFinalFixes = _.some(currentPhases, { phaseType: 'Final Fix', phaseStatus: 'Open' });
+ if (hasFirstPlacement && !_.isEmpty(phases)) {
+ canSubmitFinalFixes = _.some(phases, { phaseType: 'Final Fix', isOpen: true });
}
const submissionPermitted = !submissionEnded || canSubmitFinalFixes;
@@ -75,7 +75,7 @@ const filestackDataProp = PT.shape({
SubmissionsPage.propTypes = {
userId: PT.string.isRequired,
challengesUrl: PT.string.isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
challengeName: PT.string.isRequired,
communitiesList: PT.shape({
data: PT.arrayOf(PT.shape({
@@ -85,7 +85,7 @@ SubmissionsPage.propTypes = {
loadingUuid: PT.string.isRequired,
timestamp: PT.number.isRequired,
}).isRequired,
- groups: PT.shape({}).isRequired,
+ groups: PT.arrayOf(PT.shape()).isRequired,
track: PT.string.isRequired,
status: PT.string.isRequired,
submitForm: PT.func.isRequired,
@@ -108,8 +108,7 @@ SubmissionsPage.propTypes = {
submissionFilestackData: filestackDataProp.isRequired,
winners: PT.arrayOf(PT.object).isRequired,
handle: PT.string.isRequired,
- currentPhases: PT.arrayOf(PT.object).isRequired,
- allPhases: PT.arrayOf(PT.object).isRequired,
+ phases: PT.arrayOf(PT.object).isRequired,
};
export default SubmissionsPage;
diff --git a/src/shared/components/Terms/index.jsx b/src/shared/components/Terms/index.jsx
index 8f3a82621d..49ad395401 100644
--- a/src/shared/components/Terms/index.jsx
+++ b/src/shared/components/Terms/index.jsx
@@ -62,7 +62,7 @@ export default class Terms extends React.Component {
componentDidMount() {
const { loadDetails, selectedTerm } = this.props;
if (selectedTerm) {
- loadDetails(selectedTerm.termsOfUseId);
+ loadDetails(selectedTerm.id);
}
window.addEventListener('message', this.messageHandler, false);
window.addEventListener('resize', this.resizeHandler, false);
@@ -75,8 +75,8 @@ export default class Terms extends React.Component {
checkStatus, canRegister, onCancel, register,
} = this.props;
if (nextProps.selectedTerm && !_.isEqual(selectedTerm, nextProps.selectedTerm)
- && nextProps.loadingTermId !== _.toString(nextProps.selectedTerm.termsOfUseId)) {
- loadDetails(nextProps.selectedTerm.termsOfUseId);
+ && nextProps.loadingTermId !== _.toString(nextProps.selectedTerm.id)) {
+ loadDetails(nextProps.selectedTerm.id);
}
if (!_.every(terms, 'agreed') && _.every(nextProps.terms, 'agreed') && !nextProps.checkingStatus) {
checkStatus();
@@ -112,8 +112,8 @@ export default class Terms extends React.Component {
messageHandler(event) {
const { onCancel, selectedTerm, signDocu } = this.props;
if (event.data.type === 'DocuSign') {
- if (event.data.event === 'signing_complete') {
- signDocu(selectedTerm.termsOfUseId);
+ if (event.data.event === 'signing_complete' || event.data.event === 'viewing_complete') {
+ signDocu(selectedTerm.id);
} else {
onCancel();
}
@@ -159,7 +159,7 @@ export default class Terms extends React.Component {
};
return (
-
+
(
}
{
- loadingTermId !== _.toString(selectedTerm.termsOfUseId) && details
+ loadingTermId !== _.toString(selectedTerm.id) && details
&& (
{
@@ -303,9 +303,9 @@ export default class Terms extends React.Component {
: (
{
- agreeTerm(details.termsOfUseId);
+ agreeTerm(details.id);
if (this.vScrollArea) {
this.vScrollArea.scrollTop = 0;
}
diff --git a/src/shared/components/TrackIcon/Abbreviation.jsx b/src/shared/components/TrackIcon/Abbreviation.jsx
deleted file mode 100644
index 9364dcad85..0000000000
--- a/src/shared/components/TrackIcon/Abbreviation.jsx
+++ /dev/null
@@ -1,64 +0,0 @@
-const Abbreviation = {
- DEVELOP: {
- REVIEW_OPPORTUNITY: 'Rv', // TODO: [Review Opps] This is temporary
- DESIGN: 'Ds',
- DEVELOPMENT: 'Dv',
- SECURITY: 'Sc',
- PROCESS: 'Ps',
- TESTING_COMPETITION: 'Tg',
- SPECIFICATION: 'Sp',
- ARCHITECTURE: 'Ar',
- COMPONENT_PRODUCTION: 'Cp',
- BUG_HUNT: 'BH',
- DEPLOYMENT: 'Dp',
- TEST_SUITES: 'TS',
- ASSEMBLY_COMPETITION: 'As',
- UI_PROTOTYPE_COMPETITION: 'Pr',
- CONCEPTUALIZATION: 'Cn',
- RIA_BUILD_COMPETITION: 'RB',
- RIA_COMPONENT_COMPETITION: 'RC',
- TEST_SCENARIOS: 'Ts',
- SPEC_REVIEW: 'SR',
- COPILOT_POSTING: 'CP',
- CONTENT_CREATION: 'CC',
- REPORTING: 'Rp',
- FIRST2FINISH: 'F2F',
- FIRST_2_FINISH: 'F2F',
- CODE: 'Cd',
- },
- DESIGN: {
- BANNERS_OR_ICONS: 'BI',
- WEB_DESIGN: 'Wb',
- WIREFRAMES: 'Wf',
- LOGO_DESIGN: 'Lg',
- PRINT_OR_PRESENTATION: 'PP',
- WIDGET_OR_MOBILE_SCREEN_DESIGN: 'Wg',
- FRONT_END_FLASH: 'FL',
- APPLICATION_FRONT_END_DESIGN: 'FE',
- STUDIO_OTHER: 'D',
- IDEA_GENERATION: 'IG',
- DESIGN_FIRST2FINISH: 'DF2F',
- DESIGN_FIRST_2_FINISH: 'DF2F',
- WEB_DESIGNS: 'Wb',
- },
-
- // TODO: When data science challenges are returned by the API v2, they have
- // their track set to `data` instead of `data_science` and their sub-track set
- // to `marathon` rather than `marathon_match`. However, just renaming existing
- // fields crushes the code, thus, as a rapid fix, the alternative entry is added
- // below.
- DATA_SCIENCE: {
- SRM: 'SRM',
- MARATHON_MATCH: 'MM',
- DEVELOP_MARATHON_MATCH: 'MM',
- },
- DATA: {
- SRM: 'SRM',
- MARATHON: 'MM',
- },
- GENERIC: {
- GENERIC_SCORECARDS: 'G',
- },
-};
-
-export default Abbreviation;
diff --git a/src/shared/components/TrackIcon/index.jsx b/src/shared/components/TrackIcon/index.jsx
index e917913c6e..411c71bf60 100644
--- a/src/shared/components/TrackIcon/index.jsx
+++ b/src/shared/components/TrackIcon/index.jsx
@@ -3,37 +3,36 @@ import PT from 'prop-types';
import { config } from 'topcoder-react-utils';
-import Abbreviation from './Abbreviation';
import './style.scss';
export default function TrackIcon({
track,
- subTrack,
+ type,
tcoEligible,
- isDataScience,
MAIN_URL,
challengesUrl,
}) {
const TCO_URL = `${MAIN_URL}/tco`;
+ const trackStyle = track.replace(' ', '-').toLowerCase();
return (
{challengesUrl ? (
- {Abbreviation[track][subTrack]}
+ {type.abbreviation}
) : (
- {Abbreviation[track][subTrack]}
+ {type.abbreviation}
)}
-
+
TCO
@@ -42,17 +41,16 @@ export default function TrackIcon({
}
TrackIcon.defaultProps = {
- isDataScience: false,
MAIN_URL: config.URL.BASE,
tcoEligible: '',
challengesUrl: '',
+ track: 'Development',
};
TrackIcon.propTypes = {
- isDataScience: PT.bool,
tcoEligible: PT.string,
- track: PT.string.isRequired,
- subTrack: PT.string.isRequired,
+ track: PT.string,
+ type: PT.shape().isRequired,
MAIN_URL: PT.string,
challengesUrl: PT.string,
};
diff --git a/src/shared/components/TrackIcon/style.scss b/src/shared/components/TrackIcon/style.scss
index 52f47b60cf..96c861f9db 100644
--- a/src/shared/components/TrackIcon/style.scss
+++ b/src/shared/components/TrackIcon/style.scss
@@ -34,10 +34,16 @@ $track-radius-4: $corner-radius * 2;
background: $tc-light-blue-110;
}
- &.develop {
+ &.develop,
+ &.development {
background: $tc-green-110;
}
+ &.qa,
+ &.quality-assurance {
+ background: $tc-purple-120;
+ }
+
&.data_science,
&.data-science,
&.data {
@@ -62,11 +68,18 @@ $track-radius-4: $corner-radius * 2;
background: $tc-light-blue-10;
}
- &.develop {
+ &.develop,
+ &.development {
color: $tc-green-110;
background: $tc-green-10;
}
+ &.qa,
+ &.quality-assurance {
+ color: $tc-purple-120;
+ background: $tc-purple-20;
+ }
+
&.data_science,
&.data-science,
&.data {
diff --git a/src/shared/components/challenge-detail/Header/ChallengeTags.jsx b/src/shared/components/challenge-detail/Header/ChallengeTags.jsx
index c7c8037ee3..bbea412300 100644
--- a/src/shared/components/challenge-detail/Header/ChallengeTags.jsx
+++ b/src/shared/components/challenge-detail/Header/ChallengeTags.jsx
@@ -8,7 +8,6 @@
import React from 'react';
import PT from 'prop-types';
-import _ from 'lodash';
import {
Tag,
@@ -18,6 +17,8 @@ import {
DesignTrackEventTag,
DevelopmentTrackTag,
DevelopmentTrackEventTag,
+ QATrackTag,
+ QATrackEventTag,
} from 'topcoder-react-ui-kit';
import { COMPETITION_TRACKS } from 'utils/tc';
@@ -25,28 +26,16 @@ import { COMPETITION_TRACKS } from 'utils/tc';
export default function ChallengeTags(props) {
const {
challengesUrl,
- subTrack,
track,
+ challengeType,
events,
technPlatforms,
setChallengeListingFilter,
- challengeSubtracksMap,
} = props;
- /* TODO: Probably, we don't need this anymore, if we use correct data from
- * APIs (they should contain human-readable names, I believe). */
- const stylizedSubTrack = (t) => {
- if (challengeSubtracksMap[t]) {
- return challengeSubtracksMap[t].name;
- }
- return (t || '').replace(/_/g, ' ')
- .replace(/\w\S*/g, txt => _.capitalize(txt));
- };
-
let EventTag;
let TrackTag;
switch (track) {
- case 'datasci':
case COMPETITION_TRACKS.DATA_SCIENCE:
EventTag = DataScienceTrackEventTag;
TrackTag = DataScienceTrackTag;
@@ -57,7 +46,11 @@ export default function ChallengeTags(props) {
break;
case COMPETITION_TRACKS.DEVELOP:
EventTag = DevelopmentTrackEventTag;
- TrackTag = subTrack === 'DEVELOP_MARATHON_MATCH' ? DataScienceTrackTag : DevelopmentTrackTag;
+ TrackTag = DevelopmentTrackTag;
+ break;
+ case COMPETITION_TRACKS.QA:
+ EventTag = QATrackEventTag;
+ TrackTag = QATrackTag;
break;
default:
throw new Error('Wrong competition track value');
@@ -66,16 +59,15 @@ export default function ChallengeTags(props) {
return (
{
- subTrack
+ challengeType
&& (
- setImmediate(() => setChallengeListingFilter({ subtracks: [subTrack] }))
- }
- to={`${challengesUrl}?filter[subtracks][0]=${
- encodeURIComponent(subTrack)}`}
- >
- {stylizedSubTrack(subTrack)}
-
+ setImmediate(() => setChallengeListingFilter(challengeType.id))
+ }
+ to={`${challengesUrl}?filter[types][0]=${encodeURIComponent(challengeType.id)}`}
+ >
+ {challengeType.name}
+
)
}
{
@@ -109,17 +101,15 @@ export default function ChallengeTags(props) {
}
ChallengeTags.defaultProps = {
- subTrack: undefined,
events: [],
technPlatforms: [],
};
ChallengeTags.propTypes = {
challengesUrl: PT.string.isRequired,
- subTrack: PT.string,
track: PT.string.isRequired,
events: PT.arrayOf(PT.string),
technPlatforms: PT.arrayOf(PT.string),
setChallengeListingFilter: PT.func.isRequired,
- challengeSubtracksMap: PT.shape().isRequired,
+ challengeType: PT.shape().isRequired,
};
diff --git a/src/shared/components/challenge-detail/Header/DeadlinesPanel/index.jsx b/src/shared/components/challenge-detail/Header/DeadlinesPanel/index.jsx
index 9987f71223..fdf53200d5 100644
--- a/src/shared/components/challenge-detail/Header/DeadlinesPanel/index.jsx
+++ b/src/shared/components/challenge-detail/Header/DeadlinesPanel/index.jsx
@@ -12,7 +12,7 @@ import './style.scss';
export default function DeadlinesPanel({ deadlines }) {
/* Calculates challenge start time. */
let start = deadlines[0] || {};
- start = start.actualStartTime || start.scheduledStartTime;
+ start = start.actualStartDate || start.scheduledStartDate;
const started = moment(start).isBefore(moment());
return (
@@ -28,9 +28,9 @@ export default function DeadlinesPanel({ deadlines }) {
/>
{ deadlines.map((d, index) => (
))}
@@ -39,10 +39,9 @@ export default function DeadlinesPanel({ deadlines }) {
DeadlinesPanel.propTypes = {
deadlines: PT.arrayOf(PT.shape({
- actualEndTime: PT.string,
- actualStartTime: PT.string,
- phaseType: PT.string.isRequired,
- scheduledEndTime: PT.string.isRequired,
- scheduledStartTime: PT.string.isRequired,
+ actualEndDate: PT.string,
+ actualStartDate: PT.string,
+ scheduledEndDate: PT.string,
+ scheduledStartDate: PT.string,
})).isRequired,
};
diff --git a/src/shared/components/challenge-detail/Header/Prizes.jsx b/src/shared/components/challenge-detail/Header/Prizes.jsx
index 1c3ef0f9dc..d988f46069 100644
--- a/src/shared/components/challenge-detail/Header/Prizes.jsx
+++ b/src/shared/components/challenge-detail/Header/Prizes.jsx
@@ -21,7 +21,9 @@ export default function Prizes({ pointPrizes, prizes }) {
_.range(prizeLength).map((index) => {
const rank = index + 1;
const pair = [];
- if (!_.isUndefined(prizes[index])) pair.push(prizes[index].toLocaleString());
+ const isPrizeIndexNotUndefined = !_.isUndefined(prizes[index])
+ && !_.isUndefined(prizes[index].value);
+ if (isPrizeIndexNotUndefined) pair.push(prizes[index].value.toLocaleString());
if (!_.isUndefined(pointPrizes[index])) pair.push(`${pointPrizes[index]}pts`);
return (
{
- !_.isUndefined(prizes[index]) && (
+ isPrizeIndexNotUndefined && (
$
@@ -62,5 +64,5 @@ Prizes.defaultProps = {
Prizes.propTypes = {
pointPrizes: PT.arrayOf(PT.number),
- prizes: PT.arrayOf(PT.number),
+ prizes: PT.arrayOf(PT.shape()),
};
diff --git a/src/shared/components/challenge-detail/Header/TabSelector/index.jsx b/src/shared/components/challenge-detail/Header/TabSelector/index.jsx
index cead4ca2ae..10956b9151 100644
--- a/src/shared/components/challenge-detail/Header/TabSelector/index.jsx
+++ b/src/shared/components/challenge-detail/Header/TabSelector/index.jsx
@@ -19,10 +19,13 @@ function getSelectorStyle(selectedView, currentView) {
export default function ChallengeViewSelector(props) {
const {
+ isLoggedIn,
challenge,
+ isMM,
checkpointCount,
- numRegistrants,
- numSubmissions,
+ numOfRegistrants,
+ numOfCheckpointSubmissions,
+ numOfSubmissions,
numWinners,
onSelectorClicked,
selectedView,
@@ -31,11 +34,11 @@ export default function ChallengeViewSelector(props) {
mySubmissions,
} = props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
- const forumId = _.get(challenge, 'forumId') || 0;
+ const forumId = _.get(challenge, 'legacy.forumId') || 0;
const roles = _.get(challenge, 'userDetails.roles') || [];
+ const isDesign = trackLower === 'design';
- const forumEndpoint = trackLower === 'design'
+ const forumEndpoint = isDesign
? `/?module=ThreadList&forumID=${forumId}`
: `/?module=Category&categoryID=${forumId}`;
@@ -85,7 +88,7 @@ export default function ChallengeViewSelector(props) {
DETAILS
{
- numRegistrants ? (
+ numOfRegistrants ? (
REGISTRANTS (
- {numRegistrants}
+ {numOfRegistrants}
)
) : null
}
{
- trackLower === 'design' && checkpointCount > 0
+ isDesign && checkpointCount > 0
&& (
SUBMISSIONS (
- {numSubmissions}
+ {numOfSubmissions + (numOfCheckpointSubmissions || 0)}
)
) : null
@@ -185,26 +188,30 @@ export default function ChallengeViewSelector(props) {
}
ChallengeViewSelector.defaultProps = {
+ isLoggedIn: false,
challenge: {},
+ isMM: false,
checkpointCount: 0,
- numRegistrants: 0,
- numSubmissions: 0,
- // hasRegistered: false,
+ numOfRegistrants: 0,
+ numOfCheckpointSubmissions: 0,
+ numOfSubmissions: 0,
};
ChallengeViewSelector.propTypes = {
+ isLoggedIn: PT.bool,
challenge: PT.shape({
- subTrack: PT.any,
- details: PT.shape({
- forumId: PT.number.isRequired,
+ legacy: PT.shape({
+ forumId: PT.number,
}),
userDetails: PT.shape({
roles: PT.arrayOf(PT.string),
}),
}),
+ isMM: PT.bool,
checkpointCount: PT.number,
- numRegistrants: PT.number,
- numSubmissions: PT.number,
+ numOfRegistrants: PT.number,
+ numOfCheckpointSubmissions: PT.number,
+ numOfSubmissions: PT.number,
numWinners: PT.number.isRequired,
onSelectorClicked: PT.func.isRequired,
selectedView: PT.string.isRequired,
diff --git a/src/shared/components/challenge-detail/Header/index.jsx b/src/shared/components/challenge-detail/Header/index.jsx
index 00fa223924..28672781e1 100644
--- a/src/shared/components/challenge-detail/Header/index.jsx
+++ b/src/shared/components/challenge-detail/Header/index.jsx
@@ -8,6 +8,7 @@
import _ from 'lodash';
import moment from 'moment';
import 'moment-duration-format';
+import { isMM } from 'utils/challenge';
import PT from 'prop-types';
import React from 'react';
@@ -32,6 +33,7 @@ const DAY_MS = 24 * HOUR_MS;
export default function ChallengeHeader(props) {
const {
+ isLoggedIn,
challenge,
challengesUrl,
checkpoints,
@@ -44,7 +46,7 @@ export default function ChallengeHeader(props) {
setChallengeListingFilter,
unregisterFromChallenge,
unregistering,
- challengeSubtracksMap,
+ challengeTypesMap,
selectedView,
showDeadlineDetail,
hasFirstPlacement,
@@ -59,49 +61,51 @@ export default function ChallengeHeader(props) {
drPoints,
id: challengeId,
name,
- subTrack,
- track,
pointPrizes,
events,
- technologies,
- platforms,
- prizes,
- numberOfCheckpointsPrizes,
- topCheckPointPrize,
+ prizeSets,
reliabilityBonus,
- userDetails,
- currentPhases,
- numRegistrants,
- numSubmissions,
- allPhases,
+ numOfRegistrants,
+ numOfCheckpointSubmissions,
+ numOfSubmissions,
+ endDate,
status,
- appealsEndDate,
+ type,
+ track,
} = challenge;
+ const tags = challenge.tags || [];
+ const appealsEndDate = endDate;
+
+ const allPhases = challenge.phases || [];
+ const { prizes } = prizeSets && prizeSets.length ? prizeSets[0] : [];
+
+ const checkpointPrizes = _.find(prizeSets, { type: 'checkpoint' });
+ let numberOfCheckpointsPrizes = 0;
+ let topCheckPointPrize = 0;
+ if (!_.isEmpty(checkpointPrizes)) {
+ numberOfCheckpointsPrizes = checkpointPrizes.prizes.length;
+ topCheckPointPrize = checkpointPrizes.prizes[0].value;
+ }
+
const phases = {};
if (allPhases) {
allPhases.forEach((phase) => {
- phases[_.camelCase(phase.phaseType)] = phase;
+ phases[_.camelCase(phase.name)] = phase;
});
}
let registrationEnded = true;
- const regPhase = phases.registration;
- if (status !== 'COMPLETED' && regPhase) {
- registrationEnded = regPhase.phaseStatus !== 'Open';
+ const regPhase = phases && phases.registration;
+ if (status !== 'Completed' && regPhase) {
+ registrationEnded = !regPhase.isOpen;
}
- let trackLower = track ? track.toLowerCase() : 'design';
- if (technologies.includes('Data Science')) {
- trackLower = 'datasci';
- }
+ const trackLower = track ? track.replace(' ', '-').toLowerCase() : 'design';
const eventNames = (events || []).map((event => (event.eventName || '').toUpperCase()));
- const miscTags = _.union(
- _.isArray(technologies) ? technologies : (technologies || '').split(', '),
- _.isArray(platforms) ? platforms : (platforms || '').split(', '),
- );
+ const miscTags = _.uniq(_.isArray(tags) ? tags : (tags || '').split(', '));
let bonusType = '';
if (numberOfCheckpointsPrizes && topCheckPointPrize) {
@@ -115,15 +119,16 @@ export default function ChallengeHeader(props) {
* iterate through all their submissions and ensure that all of them
* are Deleted
*/
- const hasSubmissions = userDetails && (userDetails.submissions || []).reduce((acc, submission) => acc || submission.status !== 'Deleted', false);
+ const hasSubmissions = !_.isEmpty(mySubmissions);
- let nextPhase = (currentPhases && currentPhases[0]) || {};
- if (hasRegistered && nextPhase.phaseType === 'Registration') {
- nextPhase = currentPhases[1] || {};
+ let nextPhase = allPhases.filter(p => p.isOpen)
+ .sort((a, b) => moment(a.scheduledEndDate).diff(b.scheduledEndDate))[0];
+ if (hasRegistered && allPhases[0] && allPhases[0].name === 'Registration') {
+ nextPhase = allPhases[1] || {};
}
- const nextDeadline = nextPhase.phaseType;
+ const nextDeadline = nextPhase && nextPhase.name;
- const deadlineEnd = moment(nextPhase && nextPhase.scheduledEndTime);
+ const deadlineEnd = moment(nextPhase && nextPhase.scheduledEndDate);
const currentTime = moment();
let timeLeft = deadlineEnd.isAfter(currentTime)
@@ -140,11 +145,11 @@ export default function ChallengeHeader(props) {
if (showDeadlineDetail) {
relevantPhases = (allPhases || []).filter((phase) => {
- if (phase.phaseType === 'Iterative Review') {
- const end = phase.actualEndTime || phase.scheduledEndTime;
+ if (phase.name === 'Iterative Review') {
+ const end = phase.actualEndDate || phase.scheduledEndDate;
return moment(end).isAfter(moment());
}
- const phaseLowerCase = phase.phaseType.toLowerCase();
+ const phaseLowerCase = phase.name.toLowerCase();
if (phaseLowerCase.includes('screening') || phaseLowerCase.includes('specification')) {
return false;
}
@@ -156,36 +161,37 @@ export default function ChallengeHeader(props) {
});
relevantPhases.sort((a, b) => {
- if (a.phaseType.toLowerCase().includes('registration')) {
+ if (a.name.toLowerCase().includes('registration')) {
return -1;
}
- if (b.phaseType.toLowerCase().includes('registration')) {
+ if (b.name.toLowerCase().includes('registration')) {
return 1;
}
- return (new Date(a.actualEndTime || a.scheduledEndTime)).getTime()
- - (new Date(b.actualEndTime || b.scheduledEndTime)).getTime();
+ return (new Date(a.scheduledEndDate || a.actualEndDate)).getTime()
+ - (new Date(b.scheduledEndDate || b.actualEndDate)).getTime();
});
- if (subTrack === 'FIRST_2_FINISH' && status === 'COMPLETED') {
- const phases2 = allPhases.filter(p => p.phaseType === 'Iterative Review' && p.phaseStatus === 'Closed');
- const endPhaseDate = Math.max(...phases2.map(d => new Date(d.scheduledEndTime)));
- relevantPhases = _.filter(relevantPhases, p => (p.phaseType.toLowerCase().includes('registration')
- || new Date(p.scheduledEndTime).getTime() < endPhaseDate));
+ if (type === 'First2Finish' && status === 'Completed') {
+ const phases2 = allPhases.filter(p => p.name === 'Iterative Review' && !p.isOpen);
+ const endPhaseDate = Math.max(...phases2.map(d => new Date(d.scheduledEndDate)));
+ relevantPhases = _.filter(relevantPhases, p => (p.name.toLowerCase().includes('registration')
+ || new Date(p.scheduledEndDate).getTime() < endPhaseDate));
relevantPhases.push({
id: -1,
- phaseType: 'Winners',
- scheduledEndTime: endPhaseDate,
+ name: 'Winners',
+ scheduledEndDate: endPhaseDate,
});
- } else if (relevantPhases.length > 1 && appealsEndDate) {
+ } else if (relevantPhases.length > 1) {
const lastPhase = relevantPhases[relevantPhases.length - 1];
const lastPhaseTime = (
- new Date(lastPhase.actualEndTime || lastPhase.scheduledEndTime)
+ new Date(lastPhase.actualEndDate || lastPhase.scheduledEndDate)
).getTime();
+
const appealsEnd = (new Date(appealsEndDate).getTime());
- if (lastPhaseTime < appealsEnd) {
+ if (lastPhaseTime < appealsEnd && lastPhase.name !== 'Review') {
relevantPhases.push({
id: -1,
- phaseType: 'Winners',
- scheduledEndTime: appealsEndDate,
+ name: 'Winners',
+ scheduledEndDate: appealsEndDate,
});
}
}
@@ -230,10 +236,10 @@ export default function ChallengeHeader(props) {
// Legacy MMs have a roundId field, but new MMs do not.
// This is used to disable registration/submission for legacy MMs.
- const isLegacyMM = subTrack === 'MARATHON_MATCH' && Boolean(challenge.roundId);
+ const isLegacyMM = isMM(challenge) && Boolean(challenge.roundId);
- if (hasFirstPlacement && !_.isEmpty(currentPhases)) {
- _.some(currentPhases, { phaseType: 'Final Fix', phaseStatus: 'Open' });
+ if (hasFirstPlacement && !_.isEmpty(allPhases)) {
+ _.some(allPhases, { phaseType: 'Final Fix', phaseStatus: 'Open' });
}
return (
@@ -249,10 +255,9 @@ export default function ChallengeHeader(props) {
0}
- numSubmissions={numSubmissions}
+ numOfSubmissions={numOfSubmissions}
+ numOfCheckpointSubmissions={numOfCheckpointSubmissions}
hasRegistered={hasRegistered}
checkpointCount={checkpointCount}
mySubmissions={mySubmissions}
@@ -457,6 +465,7 @@ export default function ChallengeHeader(props) {
}
ChallengeHeader.defaultProps = {
+ isLoggedIn: false,
checkpoints: {},
isMenuOpened: false,
hasThriveArticles: false,
@@ -464,29 +473,31 @@ ChallengeHeader.defaultProps = {
};
ChallengeHeader.propTypes = {
+ isLoggedIn: PT.bool,
checkpoints: PT.shape(),
challenge: PT.shape({
- id: PT.number.isRequired,
+ id: PT.string.isRequired,
+ type: PT.any,
+ track: PT.string,
drPoints: PT.any,
name: PT.any,
- subTrack: PT.any,
pointPrizes: PT.any,
events: PT.any,
technologies: PT.any,
platforms: PT.any,
+ tags: PT.any,
prizes: PT.any,
- numberOfCheckpointsPrizes: PT.any,
- topCheckPointPrize: PT.any,
reliabilityBonus: PT.any,
userDetails: PT.any,
currentPhases: PT.any,
- numRegistrants: PT.any,
- numSubmissions: PT.any,
+ numOfRegistrants: PT.any,
+ numOfCheckpointSubmissions: PT.any,
+ numOfSubmissions: PT.any,
status: PT.any,
- appealsEndDate: PT.any,
- allPhases: PT.any,
- track: PT.any,
+ endDate: PT.any,
+ phases: PT.any,
roundId: PT.any,
+ prizeSets: PT.any,
}).isRequired,
challengesUrl: PT.string.isRequired,
hasRegistered: PT.bool.isRequired,
@@ -503,7 +514,7 @@ ChallengeHeader.propTypes = {
showDeadlineDetail: PT.bool.isRequired,
unregisterFromChallenge: PT.func.isRequired,
unregistering: PT.bool.isRequired,
- challengeSubtracksMap: PT.shape().isRequired,
+ challengeTypesMap: PT.shape().isRequired,
hasFirstPlacement: PT.bool.isRequired,
isMenuOpened: PT.bool,
mySubmissions: PT.arrayOf(PT.shape()).isRequired,
diff --git a/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx b/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx
index 25307930dc..e51f41bf8e 100644
--- a/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx
+++ b/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx
@@ -465,10 +465,7 @@ SubmissionsListView.propTypes = {
checkpoints: PT.arrayOf(PT.object),
submissions: PT.arrayOf(PT.object),
submissionViewable: PT.string,
- track: PT.string.isRequired,
registrants: PT.any,
- allPhases: PT.any,
- subTrack: PT.any,
}).isRequired,
hasRegistered: PT.bool.isRequired,
unregistering: PT.bool.isRequired,
diff --git a/src/shared/components/challenge-detail/MySubmissions/index.jsx b/src/shared/components/challenge-detail/MySubmissions/index.jsx
index 3424b33e78..3cc0c6536e 100644
--- a/src/shared/components/challenge-detail/MySubmissions/index.jsx
+++ b/src/shared/components/challenge-detail/MySubmissions/index.jsx
@@ -27,8 +27,12 @@ class MySubmissionsView extends React.Component {
}
componentDidMount() {
- const { challenge, loadMMSubmissions, auth } = this.props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const {
+ challenge,
+ isMM,
+ loadMMSubmissions,
+ auth,
+ } = this.props;
// Check auth token, go to login page if invalid
if (isMM && (_.isEmpty(auth) || _.isEmpty(auth.tokenV3) || isTokenExpired(auth.tokenV3))) {
@@ -45,6 +49,7 @@ class MySubmissionsView extends React.Component {
const {
challengesUrl,
challenge,
+ isMM,
hasRegistered,
unregistering,
submissionEnded,
@@ -81,6 +86,7 @@ class MySubmissionsView extends React.Component {
hasRegistered={hasRegistered}
unregistering={unregistering}
submissionEnded={submissionEnded}
+ isMM={isMM}
isLegacyMM={isLegacyMM}
mySubmissions={mySubmissions}
auth={auth}
@@ -105,14 +111,12 @@ MySubmissionsView.propTypes = {
checkpoints: PT.arrayOf(PT.object),
submissions: PT.arrayOf(PT.object),
submissionViewable: PT.string,
- track: PT.string.isRequired,
registrants: PT.any,
- allPhases: PT.any,
- subTrack: PT.any,
}).isRequired,
hasRegistered: PT.bool.isRequired,
unregistering: PT.bool.isRequired,
submissionEnded: PT.bool.isRequired,
+ isMM: PT.bool.isRequired,
isLegacyMM: PT.bool.isRequired,
loadingMMSubmissionsForChallengeId: PT.string.isRequired,
auth: PT.shape().isRequired,
diff --git a/src/shared/components/challenge-detail/RecommendedActiveChallenges/ChallengesCard/index.jsx b/src/shared/components/challenge-detail/RecommendedActiveChallenges/ChallengesCard/index.jsx
index e8a47c1703..bc380abe0a 100644
--- a/src/shared/components/challenge-detail/RecommendedActiveChallenges/ChallengesCard/index.jsx
+++ b/src/shared/components/challenge-detail/RecommendedActiveChallenges/ChallengesCard/index.jsx
@@ -1,14 +1,13 @@
import React from 'react';
import _ from 'lodash';
import PT from 'prop-types';
-import { config, Link } from 'topcoder-react-utils';
+import { Link } from 'topcoder-react-utils';
import moment from 'moment';
import { TABS as DETAIL_TABS } from 'actions/page/challenge-details';
import {
getEndDate,
PRIZE_MODE,
getPrizePurseUI,
- getPrizePointsUI,
getTimeLeft,
} from 'utils/challenge-detail/helper';
@@ -21,6 +20,7 @@ import styles from './style.scss';
export default function ChallengesCard({
challenge,
+ challengeType,
className,
challengesUrl,
selectChallengeDetailsTab,
@@ -28,32 +28,25 @@ export default function ChallengesCard({
userHandle,
expandedTags,
expandTag,
+ isLoggedIn,
}) {
const {
id,
- subTrack,
+ phases,
track,
- status,
- allPhases,
- currentPhases,
} = challenge;
- let challengeDetailLink = `${challengesUrl}/${id}`;
- if (track === 'DATA_SCIENCE' && subTrack === 'MARATHON_MATCH' && status === 'ACTIVE') {
- challengeDetailLink = `${config.URL.COMMUNITY}/tc?module=MatchDetails&rd=${id}`;
- }
+ const challengeDetailLink = `${challengesUrl}/${id}`;
- const checkPhases = (currentPhases && currentPhases.length > 0 ? currentPhases : allPhases);
- const statusPhase = checkPhases
- .filter(p => p.phaseType !== 'Registration')
- .sort((a, b) => moment(a.scheduledEndTime).diff(b.scheduledEndTime))[0];
+ const statusPhase = phases
+ .filter(p => p.name !== 'Registration')
+ .sort((a, b) => moment(a.scheduledEndDate).diff(b.scheduledEndDate))[0];
return (
expandTag(challenge.id)}
challengesUrl={challengesUrl}
@@ -61,14 +54,14 @@ export default function ChallengesCard({
0 ? challenge.events[0].key : ''}
isDataScience={challenge.isDataScience}
challengesUrl={challengesUrl}
/>
@@ -86,12 +79,11 @@ export default function ChallengesCard({
- {challenge.status === 'ACTIVE' ? 'Ends ' : 'Ended '}
+ {challenge.status === 'Active' ? 'Ends ' : 'Ended '}
{getEndDate(challenge)}
{getPrizePurseUI(challenge, prizeMode, true, 'Prize Purse')}
- {getPrizePointsUI(challenge)}
@@ -124,7 +117,8 @@ ChallengesCard.defaultProps = {
};
ChallengesCard.propTypes = {
- challenge: PT.arrayOf(PT.object).isRequired,
+ challenge: PT.shape().isRequired,
+ challengeType: PT.shape().isRequired,
className: PT.string,
challengesUrl: PT.string.isRequired,
selectChallengeDetailsTab: PT.func.isRequired,
@@ -132,4 +126,5 @@ ChallengesCard.propTypes = {
userHandle: PT.string,
expandedTags: PT.arrayOf(PT.number),
expandTag: PT.func,
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/challenge-detail/RecommendedActiveChallenges/index.jsx b/src/shared/components/challenge-detail/RecommendedActiveChallenges/index.jsx
index 8106abf60c..6113f62ec4 100644
--- a/src/shared/components/challenge-detail/RecommendedActiveChallenges/index.jsx
+++ b/src/shared/components/challenge-detail/RecommendedActiveChallenges/index.jsx
@@ -7,12 +7,14 @@ import styles from './style.scss';
export default function RecommendedActiveChallenges({
challenges,
+ challengeTypes,
challengesUrl,
selectChallengeDetailsTab,
prizeMode,
auth,
expandedTags,
expandTag,
+ isLoggedIn,
}) {
const items = _.map(challenges, (c, idx) => (
));
@@ -50,10 +54,12 @@ RecommendedActiveChallenges.defaultProps = {
prizeMode: 'money-usd',
expandedTags: [],
expandTag: null,
+ challengeTypes: [],
};
RecommendedActiveChallenges.propTypes = {
challenges: PT.arrayOf(PT.object),
+ challengeTypes: PT.arrayOf(PT.shape()),
challengesUrl: PT.string.isRequired,
selectChallengeDetailsTab: PT.func.isRequired,
prizeMode: PT.string,
@@ -65,4 +71,5 @@ RecommendedActiveChallenges.propTypes = {
}).isRequired,
expandedTags: PT.arrayOf(PT.number),
expandTag: PT.func,
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/challenge-detail/Registrants/index.jsx b/src/shared/components/challenge-detail/Registrants/index.jsx
index 6fbf28e4ad..5722c029a8 100644
--- a/src/shared/components/challenge-detail/Registrants/index.jsx
+++ b/src/shared/components/challenge-detail/Registrants/index.jsx
@@ -8,6 +8,7 @@ import PT from 'prop-types';
import moment from 'moment';
import _ from 'lodash';
import cn from 'classnames';
+import { getRatingLevel } from 'utils/tc';
import sortList from 'utils/challenge-detail/sort';
import CheckMark from '../icons/check-mark.svg';
@@ -16,23 +17,23 @@ import './style.scss';
function formatDate(date) {
if (!date) return '-';
- return moment(date).format('MMM DD, YYYY HH:mm');
+ return moment(date).local().format('MMM DD, YYYY HH:mm');
}
function getDate(arr, handle) {
- const results = arr.filter(a => _.toString(a.submitter || a.handle) === _.toString(handle))
+ const results = arr.filter(a => _.toString(a.createdBy || a.memberHandle) === _.toString(handle))
.sort((a, b) => new Date(b.submissionTime || b.submissionDate).getTime()
- new Date(a.submissionTime || a.submissionDate).getTime());
return results[0] ? (results[0].submissionTime || results[0].submissionDate) : '';
}
function passedCheckpoint(checkpoints, handle, results) {
- const mine = checkpoints.filter(c => _.toString(c.submitter) === _.toString(handle));
+ const mine = checkpoints.filter(c => _.toString(c.createdBy) === _.toString(handle));
return _.some(mine, m => _.find(results, r => r.submissionId === m.submissionId));
}
function getPlace(results, handle, places) {
- const found = _.find(results, w => _.toString(w.handle) === _.toString(handle)
+ const found = _.find(results, w => _.toString(w.memberHandle) === _.toString(handle)
&& w.placement <= places && w.submissionStatus !== 'Failed Review');
if (found) {
@@ -78,9 +79,9 @@ export default class Registrants extends React.Component {
const {
challenge,
} = this.props;
- const checkpointPhase = challenge.allPhases.find(x => x.phaseType === 'Checkpoint Submission');
+ const checkpointPhase = (challenge.phases || []).find(x => x.name === 'Checkpoint Submission');
return moment(checkpointPhase
- ? checkpointPhase.actualEndTime || checkpointPhase.scheduledEndTime : 0);
+ ? checkpointPhase.actualEndDate || checkpointPhase.scheduledEndDate : 0);
}
/**
@@ -99,7 +100,7 @@ export default class Registrants extends React.Component {
let checkpoint;
if (twoRounds) {
- checkpoint = getDate(checkpoints, registrant.handle);
+ checkpoint = getDate(checkpoints, registrant.memberHandle);
if (!checkpoint
&& moment(registrant.submissionDate).isBefore(checkpointDate)) {
checkpoint = registrant.submissionDate;
@@ -188,14 +189,14 @@ export default class Registrants extends React.Component {
break;
}
case 'Username': {
- valueA = `${a.handle}`.toLowerCase();
- valueB = `${b.handle}`.toLowerCase();
+ valueA = `${a.memberHandle}`.toLowerCase();
+ valueB = `${b.memberHandle}`.toLowerCase();
valueIsString = true;
break;
}
case 'Registration Date': {
- valueA = new Date(a.registrationDate);
- valueB = new Date(b.registrationDate);
+ valueA = new Date(a.created);
+ valueB = new Date(b.created);
break;
}
case 'Round 1 Submitted Date': {
@@ -239,14 +240,17 @@ export default class Registrants extends React.Component {
onSortChange,
} = this.props;
const {
- prizes,
+ prizeSets,
+ track,
} = challenge;
+
const { sortedRegistrants } = this.state;
const { field, sort } = this.getRegistrantsSortParam();
const revertSort = (sort === 'desc') ? 'asc' : 'desc';
- const isDesign = challenge.track.toLowerCase() === 'design';
- const isF2F = challenge.subTrack.indexOf('FIRST_2_FINISH') > -1;
- const isBugHunt = challenge.subTrack.indexOf('BUG_HUNT') > -1;
+ const isDesign = track.toLowerCase() === 'design';
+
+ const placementPrizes = _.find(prizeSets, { type: 'placement' });
+ const { prizes } = placementPrizes || [];
const checkpoints = challenge.checkpoints || [];
@@ -257,7 +261,7 @@ export default class Registrants extends React.Component {
{
- !isDesign && !isF2F && !isBugHunt && (
+ !isDesign && (
{
@@ -377,30 +381,27 @@ export default class Registrants extends React.Component {
{
sortedRegistrants.map((r) => {
- const placement = getPlace(results, r.handle, places);
- const colorStyle = JSON.parse(r.colorStyle.replace(/(\w+):\s*([^;]*)/g, '{"$1": "$2"}'));
+ const placement = getPlace(results, r.memberHandle, places);
let checkpoint = this.getCheckPoint(r);
if (checkpoint) {
checkpoint = formatDate(checkpoint);
}
- let final = this.getFinal(r);
- if (final) {
- final = formatDate(final);
- } else {
- final = '-';
- }
+ const final = this.getFinal(r);
return (
-
+
{
- !isDesign && !isF2F && !isBugHunt && (
+ !isDesign && (
Rating
-
- { !_.isNil(r.rating) ? r.rating : '-'}
+
+ { (!_.isNil(r.rating) && r.rating !== 0) ? r.rating : '-'}
@@ -409,11 +410,11 @@ export default class Registrants extends React.Component {
@@ -421,7 +422,7 @@ export default class Registrants extends React.Component {
Registration Date
-
{formatDate(r.registrationDate)}
+
{formatDate(r.created)}
{
twoRounds
@@ -435,7 +436,7 @@ export default class Registrants extends React.Component {
{checkpoint}
{
- passedCheckpoint(checkpoints, r.handle, checkpointResults)
+ passedCheckpoint(checkpoints, r.memberHandle, checkpointResults)
&&
}
@@ -449,7 +450,7 @@ export default class Registrants extends React.Component {
- {final}
+ {formatDate(final)}
{placement > 0 && (
@@ -478,18 +479,19 @@ Registrants.defaultProps = {
Registrants.propTypes = {
challenge: PT.shape({
- allPhases: PT.arrayOf(PT.shape({
- actualEndTime: PT.string,
- phaseType: PT.string.isRequired,
- scheduledEndTime: PT.string,
+ phases: PT.arrayOf(PT.shape({
+ actualEndDate: PT.string,
+ name: PT.string.isRequired,
+ scheduledEndDate: PT.string,
})).isRequired,
checkpoints: PT.arrayOf(PT.shape()),
- track: PT.any,
subTrack: PT.any,
- prizes: PT.arrayOf(PT.number).isRequired,
+ prizeSets: PT.arrayOf(PT.shape()).isRequired,
registrants: PT.arrayOf(PT.shape()).isRequired,
round1Introduction: PT.string,
round2Introduction: PT.string,
+ type: PT.string,
+ track: PT.string,
}).isRequired,
results: PT.arrayOf(PT.shape()),
checkpointResults: PT.shape(),
diff --git a/src/shared/components/challenge-detail/Registrants/style.scss b/src/shared/components/challenge-detail/Registrants/style.scss
index 8336b291a4..b2e79d259a 100644
--- a/src/shared/components/challenge-detail/Registrants/style.scss
+++ b/src/shared/components/challenge-detail/Registrants/style.scss
@@ -163,8 +163,6 @@
a,
a:hover,
a:visited {
- color: $tc-dark-blue-110;
-
&:hover {
text-decoration: underline;
}
@@ -281,3 +279,23 @@
margin: 10px 10px 0 10px;
padding-top: 5px;
}
+
+.level-1 {
+ color: $member-gray !important;
+}
+
+.level-2 {
+ color: $member-green !important;
+}
+
+.level-3 {
+ color: $member-blue !important;
+}
+
+.level-4 {
+ color: $member-yellow !important;
+}
+
+.level-5 {
+ color: $member-red !important;
+}
diff --git a/src/shared/components/challenge-detail/Specification/SideBar/index.jsx b/src/shared/components/challenge-detail/Specification/SideBar/index.jsx
index bd75aa544e..c945832dbb 100644
--- a/src/shared/components/challenge-detail/Specification/SideBar/index.jsx
+++ b/src/shared/components/challenge-detail/Specification/SideBar/index.jsx
@@ -2,6 +2,7 @@
import React from 'react';
import PT from 'prop-types';
+import _ from 'lodash';
import Tooltip from 'components/Tooltip';
import { Link } from 'react-router-dom';
@@ -15,15 +16,12 @@ import styles from './styles.scss';
export default function SideBar({
challengesUrl,
+ legacyId,
documents,
eventDetail,
- reviewScorecardId,
- screeningScorecardId,
shareable,
forumLink,
- submissionLimit,
hasRegistered,
- fileTypes,
reviewType,
isDesign,
terms,
@@ -31,14 +29,22 @@ export default function SideBar({
environment,
codeRepo,
isMM,
+ metadata,
+ reviewScorecardId,
+ screeningScorecardId,
}) {
const scorecardURL = `${config.URL.ONLINE_REVIEW}/review/actions/ViewScorecard?scid=`;
const faqURL = config.URL.INFO.DESIGN_CHALLENGE_SUBMISSION;
let submissionLimitDisplay = 'Unlimited';
- if (submissionLimit === 1) {
- submissionLimitDisplay = '1 submission';
- } else if (submissionLimit > 1) {
- submissionLimitDisplay = `${submissionLimit} submissions`;
+ const submissionLimit = _.find(metadata, { type: 'submissionLimit' });
+ const fileTypes = _.find(metadata, { name: 'fileTypes' });
+
+ if (submissionLimit) {
+ if (submissionLimit.value === 1) {
+ submissionLimitDisplay = '1 submission';
+ } else if (submissionLimit > 1) {
+ submissionLimitDisplay = `${submissionLimit.value} submissions`;
+ }
}
const reviewTypeTitle = reviewType === 'PEER' ? 'Peer Review' : 'Community Review Board';
@@ -179,7 +185,7 @@ export default function SideBar({
{
reviewScorecardId > 0 && !isDesign
&& (
-
+
Review Scorecard
@@ -188,7 +194,7 @@ export default function SideBar({
?
-
+
)
}
@@ -267,17 +273,22 @@ export default function SideBar({
SOURCE FILES:
-
- {
- fileTypes && fileTypes.length > 0
- ? fileTypes.map(fileT => (
- -
- {fileT}
-
- ))
- : undefined
- }
-
+ {
+ fileTypes
+ && (
+
+ {
+ fileTypes.value && fileTypes.value.length > 0
+ ? JSON.parse(fileTypes.value).map(fileT => (
+ -
+ {fileT}
+
+ ))
+ : undefined
+ }
+
+ )
+ }
You must include all source files with your submission.
@@ -307,9 +318,9 @@ export default function SideBar({
{
terms.map(t => (
-
+
{t.title}
@@ -328,6 +339,11 @@ export default function SideBar({
)}
+ { legacyId && (
+
+
ID: {legacyId}
+
+ )}
);
@@ -336,10 +352,6 @@ export default function SideBar({
SideBar.defaultProps = {
eventDetail: null,
documents: undefined,
- screeningScorecardId: 0,
- reviewScorecardId: 0,
- submissionLimit: 0,
- fileTypes: [],
hasRegistered: false,
reviewType: 'COMMUNITY',
isDesign: false,
@@ -348,21 +360,22 @@ SideBar.defaultProps = {
environment: '',
codeRepo: '',
isMM: false,
+ metadata: {},
+ reviewScorecardId: '',
+ screeningScorecardId: '',
+ legacyId: '',
};
SideBar.propTypes = {
challengesUrl: PT.string.isRequired,
+ legacyId: PT.string,
eventDetail: PT.shape({
eventName: PT.string.isRequired,
description: PT.string.isRequired,
}),
documents: PT.arrayOf(PT.shape()),
- screeningScorecardId: PT.number,
shareable: PT.bool.isRequired,
- reviewScorecardId: PT.number,
forumLink: PT.string.isRequired,
- submissionLimit: PT.number,
- fileTypes: PT.arrayOf(PT.string),
hasRegistered: PT.bool,
reviewType: PT.string,
isDesign: PT.bool,
@@ -371,4 +384,7 @@ SideBar.propTypes = {
environment: PT.string,
codeRepo: PT.string,
isMM: PT.bool,
+ metadata: PT.shape(),
+ reviewScorecardId: PT.string,
+ screeningScorecardId: PT.string,
};
diff --git a/src/shared/components/challenge-detail/Specification/SideBar/styles.scss b/src/shared/components/challenge-detail/Specification/SideBar/styles.scss
index 3dd89ef03e..f306f370e9 100644
--- a/src/shared/components/challenge-detail/Specification/SideBar/styles.scss
+++ b/src/shared/components/challenge-detail/Specification/SideBar/styles.scss
@@ -117,6 +117,15 @@
@include linkLikeParagraph;
}
+ .legacy-challenge-id {
+ h3 {
+ color: $tc-gray-10;
+ font-style: italic;
+ }
+
+ text-align: left;
+ }
+
ol {
@include roboto-regular;
diff --git a/src/shared/components/challenge-detail/Specification/SpecificationComponent/index.jsx b/src/shared/components/challenge-detail/Specification/SpecificationComponent/index.jsx
new file mode 100644
index 0000000000..01d9ac2c9c
--- /dev/null
+++ b/src/shared/components/challenge-detail/Specification/SpecificationComponent/index.jsx
@@ -0,0 +1,32 @@
+import PT from 'prop-types';
+import React from 'react';
+import Markdown from 'react-markdown';
+
+export default function SpecificationComponent({
+ bodyText,
+ format,
+}) {
+ if (format === 'markdown') {
+ return (
);
+ }
+ return (
+
+ );
+}
+
+SpecificationComponent.defaultProps = {
+ bodyText: '',
+ format: 'HTML',
+};
+
+SpecificationComponent.propTypes = {
+ bodyText: PT.string,
+ format: PT.string,
+};
diff --git a/src/shared/components/challenge-detail/Specification/index.jsx b/src/shared/components/challenge-detail/Specification/index.jsx
index 5c9af5d04a..cbe1c9c619 100644
--- a/src/shared/components/challenge-detail/Specification/index.jsx
+++ b/src/shared/components/challenge-detail/Specification/index.jsx
@@ -11,10 +11,12 @@ import ToolbarConnector from 'components/Editor/Connector';
import React from 'react';
import Sticky from 'react-stickynode';
import { config } from 'topcoder-react-utils';
+import { isMM } from 'utils/challenge';
import PT from 'prop-types';
import { DangerButton } from 'topcoder-react-ui-kit';
import { SPECS_TAB_STATES } from 'actions/page/challenge-details';
+import SpecificationComponent from './SpecificationComponent';
// import { editorStateToHTML } from 'utils/editor';
import SaveConfirmationModal from './SaveConfirmationModal';
@@ -36,28 +38,39 @@ export default function ChallengeDetailsView(props) {
} = props;
const {
- forumId,
groups,
- introduction,
- detailedRequirements,
- track,
- screeningScorecardId,
- reviewScorecardId,
- submissionLimit,
- mainEvent,
+ description,
+ privateDescription,
+ descriptionFormat,
+ legacy,
+ legacyId,
documents,
- technologies,
- fileTypes,
- round1Introduction,
- round2Introduction,
- allowStockArt,
finalSubmissionGuidelines,
- environment,
- codeRepo,
userDetails,
+ metadata,
+ events,
+ track,
} = challenge;
const roles = (userDetails || {}).roles || [];
+ const {
+ reviewScorecardId,
+ screeningScorecardId,
+ forumId,
+ } = legacy;
+
+ const allowStockArt = _.find(metadata, { type: 'allowStockArt' });
+ let environment = '';
+ const environmentData = _.find(metadata, { name: 'environment' });
+ if (environmentData) {
+ environment = environmentData.value;
+ }
+
+ let codeRepo = '';
+ const codeRepoData = _.find(metadata, { name: 'codeRepo' });
+ if (codeRepoData) {
+ codeRepo = codeRepoData.value;
+ }
let forumLink = track.toLowerCase() === 'design'
? `/?module=ThreadList&forumID=${forumId}`
@@ -70,10 +83,19 @@ export default function ChallengeDetailsView(props) {
isWipro = wiproCommunity.groupIds.some(id => groups[id]);
}
- const isDataScience = technologies.includes('Data Science');
- let accentedStyle = 'challenge-specs-design';
- if (track.toLowerCase() === 'develop') {
- accentedStyle = isDataScience ? 'challenge-specs-datasci' : 'challenge-specs-develop';
+ let accentedStyle = '';
+ switch (track.toLowerCase()) {
+ case 'design':
+ accentedStyle = 'challenge-specs-design';
+ break;
+
+ case 'data science':
+ accentedStyle = 'challenge-specs-datasci';
+ break;
+
+ default:
+ accentedStyle = 'challenge-specs-develop';
+ break;
}
const canEdit = roles.some(x => x === 'Copilot' || x === 'Manager');
@@ -145,7 +167,7 @@ export default function ChallengeDetailsView(props) {
? (
{
- detailedRequirements
+ description
&& (
@@ -155,18 +177,14 @@ export default function ChallengeDetailsView(props) {
editMode ? (
n && n.setHtml(detailedRequirements)}
+ ref={n => n && n.setHtml(description)}
/>
) : (
-
)
}
@@ -207,7 +225,7 @@ export default function ChallengeDetailsView(props) {
: (
{
- introduction
+ description
&& (
@@ -217,18 +235,14 @@ export default function ChallengeDetailsView(props) {
editMode ? (
n && n.setHtml(introduction)}
+ ref={n => n && n.setHtml(privateDescription)}
/>
) : (
-
)
}
@@ -244,134 +258,6 @@ export default function ChallengeDetailsView(props) {
)
}
- {
- round1Introduction || round2Introduction ? (
-
-
- Challenge Format
-
-
- This competition will be run as a two-round challenge.
-
- {
- round1Introduction ? (
-
-
- Round 1
-
- {
- editMode ? (
-
n.setHtml(round1Introduction)}
- />
- ) : (
-
- )
- }
-
- ) : null
- }
- {
- round2Introduction ? (
-
-
- Round 2
-
- {
- editMode ? (
-
n.setHtml(round2Introduction)}
- />
- ) : (
-
- )
- }
-
- ) : null
- }
-
-
- Regarding the Rounds:
-
-
- -
- To be eligible for Round 1 prizes and design feedback,
- you must submit before the Checkpoint deadline.
-
- -
- A day or two after the Checkpoint deadline, the challenge holder
- will announce Round 1 winners and provide design feedback to those
- winners in the “Checkpoints” tab above.
-
- -
- You must submit to Round 1 to be eligible to compete in Round 2.
- If your submission fails screening for a small mistake in Round 1,
- you may still be eligible to submit to Round 2.
-
- -
- Every competitor with a passing Round 1 submission can submit to
- Round 2, even if they didn't win a Checkpoint prize.
-
- -
-
- Learn more here
-
- .
-
-
-
-
- ) : null
- }
- {
- detailedRequirements
- && (
-
-
- Full Description & Project Guide
-
- {
- editMode ? (
- n && n.setHtml(detailedRequirements)}
- />
- ) : (
-
- )
- }
-
- )
- }
Stock Photography
@@ -488,21 +374,21 @@ export default function ChallengeDetailsView(props) {
-1}
+ isDevelop={track.toLowerCase() === 'development'}
+ eventDetail={_.isEmpty(events) ? null : events[0]}
+ isMM={isMM(challenge)}
terms={terms}
shareable={_.isEmpty(groups)}
environment={environment}
codeRepo={codeRepo}
+ metadata={metadata}
+ reviewScorecardId={reviewScorecardId}
+ screeningScorecardId={screeningScorecardId}
/>
@@ -512,23 +398,19 @@ export default function ChallengeDetailsView(props) {
ChallengeDetailsView.defaultProps = {
terms: [],
challenge: {
- introduction: undefined,
- detailedRequirements: undefined,
+ description: undefined,
+ privateDescription: undefined,
track: 'design',
- screeningScorecardId: undefined,
- reviewScorecardId: undefined,
- submissionLimit: 0,
- mainEvent: undefined,
reviewType: undefined,
- technologies: '',
- fileTypes: [],
numberOfCheckpointsPrizes: 0,
- round1Introduction: '',
- round2Introduction: '',
- allowStockArt: false,
finalSubmissionGuidelines: '',
environment: '',
+ descriptionFormat: 'HTML',
codeRepo: '',
+ metadata: {},
+ events: [],
+ reviewScorecardId: '',
+ screeningScorecardId: '',
},
};
@@ -536,31 +418,29 @@ ChallengeDetailsView.propTypes = {
terms: PT.arrayOf(PT.shape()),
hasRegistered: PT.bool.isRequired,
challenge: PT.shape({
- introduction: PT.string,
+ description: PT.string,
+ descriptionFormat: PT.string,
documents: PT.any,
id: PT.any,
- subTrack: PT.any,
- detailedRequirements: PT.string,
+ privateDescription: PT.string,
+ legacy: PT.shape({
+ reviewScorecardId: PT.string,
+ screeningScorecardId: PT.string,
+ forumId: PT.number,
+ }),
track: PT.string.isRequired,
- groups: PT.shape().isRequired,
- screeningScorecardId: PT.number,
- reviewScorecardId: PT.number,
- forumId: PT.number.isRequired,
- submissionLimit: PT.number,
- mainEvent: PT.shape(),
+ legacyId: PT.string,
+ groups: PT.any,
reviewType: PT.string,
- technologies: PT.arrayOf(PT.string),
- fileTypes: PT.arrayOf(PT.string),
numberOfCheckpointsPrizes: PT.number,
- round1Introduction: PT.string,
- round2Introduction: PT.string,
- allowStockArt: PT.bool,
finalSubmissionGuidelines: PT.string,
environment: PT.string,
codeRepo: PT.string,
userDetails: PT.shape({
roles: PT.arrayOf(PT.string).isRequired,
}),
+ metadata: PT.shape(),
+ events: PT.arrayOf(PT.string),
}),
challengesUrl: PT.string.isRequired,
communitiesList: PT.arrayOf(PT.shape({
diff --git a/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx b/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx
index dd86579aba..d58147effb 100644
--- a/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx
+++ b/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx
@@ -97,9 +97,15 @@ SubmissionHistoryRow.propTypes = {
member: PT.string.isRequired,
isMM: PT.bool.isRequired,
submission: PT.number.isRequired,
- finalScore: PT.number,
+ finalScore: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
status: PT.string.isRequired,
- provisionalScore: PT.number,
+ provisionalScore: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
submissionTime: PT.string.isRequired,
isReviewPhaseComplete: PT.bool,
submissionId: PT.string.isRequired,
diff --git a/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx b/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx
index 57c9900da1..81a3081e20 100644
--- a/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx
+++ b/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx
@@ -6,6 +6,7 @@
import React from 'react';
import PT from 'prop-types';
import _ from 'lodash';
+import { getRatingLevel } from 'utils/tc';
import moment from 'moment';
import ArrowNext from '../../../../../assets/images/arrow-next.svg';
@@ -17,7 +18,7 @@ import SubmissionHistoryRow from './SubmissionHistoryRow';
import './style.scss';
export default function SubmissionRow({
- isMM, openHistory, member, submissions, score, toggleHistory, colorStyle,
+ isMM, openHistory, member, submissions, score, toggleHistory,
isReviewPhaseComplete, finalRank, provisionalRank, onShowPopup, rating,
}) {
const {
@@ -74,15 +75,14 @@ export default function SubmissionRow({
) : null
}
-
+
{rating || '-'}
{member || '-'}
@@ -164,7 +164,6 @@ export default function SubmissionRow({
SubmissionRow.defaultProps = {
toggleHistory: () => {},
- colorStyle: {},
score: {},
isReviewPhaseComplete: false,
finalRank: null,
@@ -177,20 +176,34 @@ SubmissionRow.propTypes = {
openHistory: PT.bool.isRequired,
member: PT.string.isRequired,
submissions: PT.arrayOf(PT.shape({
- provisionalScore: PT.number,
- finalScore: PT.number,
- initialScore: PT.number,
+ provisionalScore: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
+ finalScore: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
+ initialScore: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
status: PT.string.isRequired,
submissionId: PT.string.isRequired,
submissionTime: PT.string.isRequired,
})).isRequired,
score: PT.shape({
- final: PT.number,
- provisional: PT.number,
+ final: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
+ provisional: PT.oneOfType([
+ PT.number,
+ PT.string,
+ ]),
}),
rating: PT.number,
toggleHistory: PT.func,
- colorStyle: PT.shape(),
isReviewPhaseComplete: PT.bool,
finalRank: PT.number,
provisionalRank: PT.number,
diff --git a/src/shared/components/challenge-detail/Submissions/SubmissionRow/style.scss b/src/shared/components/challenge-detail/Submissions/SubmissionRow/style.scss
index 0186d002ae..4f6023b3f1 100644
--- a/src/shared/components/challenge-detail/Submissions/SubmissionRow/style.scss
+++ b/src/shared/components/challenge-detail/Submissions/SubmissionRow/style.scss
@@ -193,3 +193,23 @@
margin: 10px 10px 0 10px;
padding-top: 5px;
}
+
+.level-1 {
+ color: $member-gray !important;
+}
+
+.level-2 {
+ color: $member-green !important;
+}
+
+.level-3 {
+ color: $member-blue !important;
+}
+
+.level-4 {
+ color: $member-yellow !important;
+}
+
+.level-5 {
+ color: $member-red !important;
+}
diff --git a/src/shared/components/challenge-detail/Submissions/index.jsx b/src/shared/components/challenge-detail/Submissions/index.jsx
index 8aa2e3f923..4f54b38aff 100644
--- a/src/shared/components/challenge-detail/Submissions/index.jsx
+++ b/src/shared/components/challenge-detail/Submissions/index.jsx
@@ -6,6 +6,7 @@
import React from 'react';
import PT from 'prop-types';
import moment from 'moment';
+import { isMM as checkIsMM } from 'utils/challenge';
import _ from 'lodash';
import { connect } from 'react-redux';
import { config } from 'topcoder-react-utils';
@@ -17,7 +18,7 @@ import { PrimaryButton } from 'topcoder-react-ui-kit';
import sortList from 'utils/challenge-detail/sort';
import challengeDetailsActions from 'actions/page/challenge-details';
import LoadingIndicator from 'components/LoadingIndicator';
-import { goToLogin } from 'utils/tc';
+import { goToLogin, getRatingLevel } from 'utils/tc';
import Lock from '../icons/lock.svg';
import SubmissionRow from './SubmissionRow';
import SubmissionInformationModal from './SubmissionInformationModal';
@@ -44,7 +45,7 @@ class SubmissionsComponent extends React.Component {
componentDidMount() {
const { challenge, loadMMSubmissions, auth } = this.props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const isMM = checkIsMM(challenge);
// Check auth token, go to login page if invalid
if (isMM && (_.isEmpty(auth) || _.isEmpty(auth.tokenV3) || isTokenExpired(auth.tokenV3))) {
@@ -60,7 +61,7 @@ class SubmissionsComponent extends React.Component {
componentDidUpdate(prevProps) {
const { challenge } = this.props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const isMM = checkIsMM(challenge);
const { submissions, mmSubmissions, submissionsSort } = this.props;
if (
@@ -131,7 +132,7 @@ class SubmissionsComponent extends React.Component {
*/
updateSortedSubmissions() {
const { challenge } = this.props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const isMM = checkIsMM(challenge);
const { submissions, mmSubmissions } = this.props;
const sortedSubmissions = _.cloneDeep(isMM ? mmSubmissions : submissions);
this.sortSubmissions(sortedSubmissions);
@@ -144,12 +145,14 @@ class SubmissionsComponent extends React.Component {
*/
sortSubmissions(submissions) {
const { challenge } = this.props;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const isMM = checkIsMM(challenge);
const isReviewPhaseComplete = this.checkIsReviewPhaseComplete();
const { field, sort } = this.getSubmissionsSortParam(isMM, isReviewPhaseComplete);
let isHaveFinalScore = false;
if (field === 'Initial / Final Score') {
- isHaveFinalScore = _.some(submissions, s => !_.isNil(s.submissions[0].finalScore));
+ isHaveFinalScore = _.some(submissions, s => !_.isNil(
+ s.reviewSummation && s.reviewSummation[0].aggregateScore,
+ ));
}
return sortList(submissions, field, sort, (a, b) => {
let valueA = 0;
@@ -172,16 +175,16 @@ class SubmissionsComponent extends React.Component {
valueA = `${a.member || ''}`.toLowerCase();
valueB = `${b.member || ''}`.toLowerCase();
} else {
- valueA = `${a.submitter}`.toLowerCase();
- valueB = `${b.submitter}`.toLowerCase();
+ valueA = `${a.createdBy}`.toLowerCase();
+ valueB = `${b.createdBy}`.toLowerCase();
}
valueIsString = true;
break;
}
case 'Time':
case 'Submission Date': {
- valueA = new Date(a.submissions && a.submissions[0].submissionTime);
- valueB = new Date(b.submissions && b.submissions[0].submissionTime);
+ valueA = new Date(a.created);
+ valueB = new Date(b.created);
break;
}
case 'Initial / Final Score': {
@@ -189,8 +192,8 @@ class SubmissionsComponent extends React.Component {
valueA = getFinalScore(a);
valueB = getFinalScore(b);
} else {
- valueA = a.submissions[0].initialScore;
- valueB = b.submissions[0].initialScore;
+ valueA = !_.isEmpty(a.review) && a.review[0].score;
+ valueB = !_.isEmpty(b.review) && b.review[0].score;
}
break;
}
@@ -240,13 +243,11 @@ class SubmissionsComponent extends React.Component {
challenge,
} = this.props;
- const {
- allPhases,
- } = challenge;
+ const allPhases = challenge.phases || [];
let isReviewPhaseComplete = false;
_.forEach(allPhases, (phase) => {
- if (phase.phaseType === 'Review' && phase.phaseStatus === 'Closed') {
+ if (phase.name === 'Review' && !phase.isOpen) {
isReviewPhaseComplete = true;
}
});
@@ -275,9 +276,12 @@ class SubmissionsComponent extends React.Component {
const {
checkpoints,
id: challengeId,
+ track,
+ type,
+ tags,
} = challenge;
- const isMM = challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const isMM = checkIsMM(challenge);
const isReviewPhaseComplete = this.checkIsReviewPhaseComplete();
const { field, sort } = this.getSubmissionsSortParam(isMM, isReviewPhaseComplete);
@@ -289,33 +293,33 @@ class SubmissionsComponent extends React.Component {
item => item.member === memberOfModal);
const renderSubmission = s => (
-
+
@@ -326,8 +330,8 @@ class SubmissionsComponent extends React.Component {
);
- const isF2F = challenge.subTrack.indexOf('FIRST_2_FINISH') > -1;
- const isBugHunt = challenge.subTrack.indexOf('BUG_HUNT') > -1;
+ const isF2F = type === 'First2Finish';
+ const isBugHunt = _.includes(tags, 'Bug Hunt');
// copy colorStyle from registrants to submissions
_.forEach(sortedSubmissions, (s) => {
@@ -346,7 +350,7 @@ class SubmissionsComponent extends React.Component {
}
});
- if (challenge.track.toLowerCase() === 'design') {
+ if (track.toLowerCase() === 'design') {
return challenge.submissionViewable === 'true' ? (
@@ -701,34 +705,41 @@ class SubmissionsComponent extends React.Component {
{
!isMM && (
sortedSubmissions.map(s => (
-
+
{
!isF2F && !isBugHunt && (
-
+
{ (s.registrant && !_.isNil(s.registrant.rating)) ? s.registrant.rating : '-'}
)
}
- {moment(s.submissions[0].submissionTime).format('MMM DD, YYYY HH:mm')}
+ {moment(s.created).format('MMM DD, YYYY HH:mm')}
- {s.submissions[0].initialScore ? s.submissions[0].initialScore.toFixed(2) : 'N/A'}
+ {
+ (!_.isEmpty(s.review) && s.review[0].score)
+ ? s.review[0].score.toFixed(2)
+ : 'N/A'
+ }
/
- {s.submissions[0].finalScore ? s.submissions[0].finalScore.toFixed(2) : 'N/A'}
+ {
+ (s.reviewSummation && s.reviewSummation[0].aggregateScore)
+ ? s.reviewSummation[0].aggregateScore.toFixed(2)
+ : 'N/A'
+ }
))
@@ -779,9 +790,10 @@ SubmissionsComponent.propTypes = {
submissions: PT.arrayOf(PT.object),
submissionViewable: PT.string,
track: PT.string.isRequired,
+ type: PT.string.isRequired,
+ tags: PT.arrayOf(PT.string),
registrants: PT.any,
- allPhases: PT.any,
- subTrack: PT.any,
+ phases: PT.any,
}).isRequired,
toggleSubmissionHistory: PT.func.isRequired,
submissionHistoryOpen: PT.shape({}).isRequired,
diff --git a/src/shared/components/challenge-detail/Submissions/style.scss b/src/shared/components/challenge-detail/Submissions/style.scss
index 54ae3d4ea2..85a3c7b5e8 100644
--- a/src/shared/components/challenge-detail/Submissions/style.scss
+++ b/src/shared/components/challenge-detail/Submissions/style.scss
@@ -355,3 +355,23 @@
margin-top: 25px !important;
align-self: center;
}
+
+.level-1 {
+ color: $member-gray !important;
+}
+
+.level-2 {
+ color: $member-green !important;
+}
+
+.level-3 {
+ color: $member-blue !important;
+}
+
+.level-4 {
+ color: $member-yellow !important;
+}
+
+.level-5 {
+ color: $member-red !important;
+}
diff --git a/src/shared/components/challenge-detail/Winners/Winner/index.jsx b/src/shared/components/challenge-detail/Winners/Winner/index.jsx
index c4c8f9e614..1a28490688 100644
--- a/src/shared/components/challenge-detail/Winners/Winner/index.jsx
+++ b/src/shared/components/challenge-detail/Winners/Winner/index.jsx
@@ -15,7 +15,6 @@ function getId(submissions, placement) {
export default function Winner({
isDesign,
last,
- pointPrizes,
prizes,
submissions,
viewable,
@@ -32,12 +31,9 @@ export default function Winner({
encodeURIComponent(avatarUrl)}?size=65`;
}
- const pair = [];
- const prizeIndex = winner.placement - 1;
- if (prizes[prizeIndex]) pair.push(prizes[prizeIndex].toLocaleString());
- if (pointPrizes[prizeIndex]) pair.push(`${pointPrizes[prizeIndex]}pts`);
-
- const prize = pair.join(' + ') || 'N/A';
+ let prize = 'N/A';
+ const prizeIndex = parseInt(winner.placement, 10) - 1;
+ if (prizes[prizeIndex]) prize = prizes[prizeIndex].value;
return (
@@ -125,14 +121,12 @@ export default function Winner({
}
Winner.defaultProps = {
- pointPrizes: [],
prizes: [],
};
Winner.propTypes = {
isDesign: PT.bool.isRequired,
last: PT.bool.isRequired,
- pointPrizes: PT.arrayOf(PT.number),
prizes: PT.arrayOf(PT.number),
submissions: PT.arrayOf(PT.object).isRequired,
viewable: PT.bool.isRequired,
diff --git a/src/shared/components/challenge-detail/Winners/index.jsx b/src/shared/components/challenge-detail/Winners/index.jsx
index db274f0a0a..0bc8f9759a 100644
--- a/src/shared/components/challenge-detail/Winners/index.jsx
+++ b/src/shared/components/challenge-detail/Winners/index.jsx
@@ -10,7 +10,6 @@ import './style.scss';
export default function Winners({
winners,
- pointPrizes,
prizes,
submissions,
viewable,
@@ -24,7 +23,6 @@ export default function Winners({
isDesign={isDesign}
key={`${w.handle}-${w.placement}`}
last={index === winners.length - 1}
- pointPrizes={pointPrizes}
prizes={prizes}
submissions={submissions}
viewable={viewable}
@@ -38,7 +36,6 @@ export default function Winners({
Winners.defaultProps = {
winners: [],
- pointPrizes: [],
prizes: [],
submissions: [],
viewable: false,
@@ -47,7 +44,6 @@ Winners.defaultProps = {
Winners.propTypes = {
winners: PT.arrayOf(PT.shape()),
- pointPrizes: PT.arrayOf(PT.number),
prizes: PT.arrayOf(PT.number),
submissions: PT.arrayOf(PT.shape()),
viewable: PT.bool,
diff --git a/src/shared/components/challenge-listing/ChallengeCard/NumRegistrants/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/NumRegistrants/index.jsx
index 84505c1bfc..4cd58eee4b 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/NumRegistrants/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/NumRegistrants/index.jsx
@@ -17,7 +17,7 @@ import './style.scss';
export default function NumRegistrants({
challenge: {
- id, numRegistrants, track,
+ id, numOfRegistrants, track,
},
challengesUrl,
newChallengeDetails,
@@ -25,14 +25,15 @@ export default function NumRegistrants({
openChallengesInNewTabs,
}) {
let tip;
- switch (numRegistrants) {
+ const numOfReg = numOfRegistrants || 0;
+ switch (numOfReg) {
case 0: tip = 'No registrants'; break;
case 1: tip = '1 total registrant'; break;
- default: tip = `${numRegistrants} total registrants`;
+ default: tip = `${numOfReg} total registrants`;
}
- const query = numRegistrants ? `?tab=${DETAIL_TABS.REGISTRANTS}` : '';
+ const query = numOfReg ? `?tab=${DETAIL_TABS.REGISTRANTS}` : '';
let link = `${challengesUrl}/${id}${query}`;
- if (!newChallengeDetails && track !== 'DATA_SCIENCE') {
+ if (!newChallengeDetails && track !== 'Data Science') {
link = `${config.URL.BASE}/challenge-details/${id}/?type=develop#viewRegistrant`;
}
return (
@@ -45,19 +46,19 @@ export default function NumRegistrants({
)}
>
(
- selectChallengeDetailsTab(numRegistrants
+ selectChallengeDetailsTab(numOfReg
? DETAIL_TABS.REGISTRANTS : DETAIL_TABS.DETAILS)
)}
styleName="link"
to={link}
openNewTab={openChallengesInNewTabs}
- aria-label={`Number of registrants ${numRegistrants}`}
+ aria-label={`Number of registrants ${numOfReg}`}
>
- {numRegistrants}
+ {numOfReg}
@@ -72,7 +73,7 @@ NumRegistrants.defaultProps = {
NumRegistrants.propTypes = {
challenge: PT.shape({
id: PT.oneOfType([PT.number, PT.string]).isRequired,
- numRegistrants: PT.number.isRequired,
+ numOfRegistrants: PT.number,
track: PT.string.isRequired,
}).isRequired,
challengesUrl: PT.string.isRequired,
diff --git a/src/shared/components/challenge-listing/ChallengeCard/NumSubmissions/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/NumSubmissions/index.jsx
index 4bca535e91..9ec4d28c62 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/NumSubmissions/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/NumSubmissions/index.jsx
@@ -17,22 +17,28 @@ import './style.scss';
export default function NumSubmissions({
challenge: {
- id, numSubmissions, track,
+ id,
+ numOfSubmissions,
+ numOfCheckpointSubmissions,
+ track,
},
challengesUrl,
newChallengeDetails,
selectChallengeDetailsTab,
openChallengesInNewTabs,
+ isLoggedIn,
}) {
let tip;
- switch (numSubmissions) {
+ const numOfSub = numOfSubmissions + (numOfCheckpointSubmissions || 0);
+ switch (numOfSub) {
case 0: tip = 'No submissions'; break;
case 1: tip = '1 total submission'; break;
- default: tip = `${numSubmissions} total submissions`;
+ default: tip = `${numOfSub} total submissions`;
}
- const query = numSubmissions ? `?tab=${DETAIL_TABS.SUBMISSIONS}` : '';
+
+ const query = (numOfSub && isLoggedIn) ? `?tab=${DETAIL_TABS.SUBMISSIONS}` : '';
let link = `${challengesUrl}/${id}${query}`;
- if (!newChallengeDetails && track !== 'DATA_SCIENCE') {
+ if (!newChallengeDetails && track !== 'Data Science') {
link = `${config.URL.BASE}/challenge-details/${id}/?type=develop#viewRegistrant`;
}
return (
@@ -46,7 +52,7 @@ export default function NumSubmissions({
>
(
- selectChallengeDetailsTab(numSubmissions
+ selectChallengeDetailsTab((numOfSub && isLoggedIn)
? DETAIL_TABS.SUBMISSIONS : DETAIL_TABS.DETAILS)
)}
styleName="link"
@@ -55,7 +61,7 @@ export default function NumSubmissions({
>
- {numSubmissions}
+ {numOfSub}
@@ -69,7 +75,8 @@ NumSubmissions.defaultProps = {
NumSubmissions.propTypes = {
challenge: PT.shape({
id: PT.oneOfType([PT.number, PT.string]).isRequired,
- numSubmissions: PT.number.isRequired,
+ numOfSubmissions: PT.number,
+ numOfCheckpointSubmissions: PT.number,
status: PT.string.isRequired,
track: PT.string.isRequired,
}).isRequired,
@@ -77,4 +84,5 @@ NumSubmissions.propTypes = {
newChallengeDetails: PT.bool.isRequired,
selectChallengeDetailsTab: PT.func.isRequired,
openChallengesInNewTabs: PT.bool,
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/challenge-listing/ChallengeCard/Prize/Tip/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/Prize/Tip/index.jsx
index a513d369e2..57bf780c88 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/Prize/Tip/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/Prize/Tip/index.jsx
@@ -16,7 +16,7 @@ export default function Tip({
);
@@ -71,6 +71,6 @@ Tip.defaultProps = {
Tip.propTypes = {
bonuses: PT.arrayOf(PT.object).isRequired,
points: PT.number,
- prizes: PT.arrayOf(PT.number).isRequired,
+ prizes: PT.arrayOf(PT.shape()).isRequired,
prizeUnitSymbol: PT.string.isRequired,
};
diff --git a/src/shared/components/challenge-listing/ChallengeCard/Prize/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/Prize/index.jsx
index 818bc12e09..93ab6e034c 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/Prize/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/Prize/index.jsx
@@ -72,7 +72,7 @@ Prize.defaultProps = {
Prize.propTypes = {
bonuses: PT.arrayOf(PT.object),
label: PT.string.isRequired,
- prizes: PT.arrayOf(PT.number),
+ prizes: PT.arrayOf(PT.shape()),
prizeUnitSymbol: PT.string.isRequired,
totalPrize: PT.number.isRequired,
withoutTooltip: PT.bool,
diff --git a/src/shared/components/challenge-listing/ChallengeCard/Status/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/Status/index.jsx
index 72a6227d7e..96dac65598 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/Status/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/Status/index.jsx
@@ -30,8 +30,8 @@ const DRAFT_MSG = 'In Draft';
* @return {Number}
*/
function getPhaseProgress(phase) {
- const end = moment(phase.scheduledEndTime);
- const start = moment(phase.actualStartTime);
+ const end = moment(phase.scheduledEndDate);
+ const start = moment(phase.actualStartDate);
return 100 * (moment().diff(start) / end.diff(start));
}
@@ -59,8 +59,9 @@ export default function ChallengeStatus(props) {
challengesUrl,
newChallengeDetails,
selectChallengeDetailsTab,
- userHandle,
openChallengesInNewTabs,
+ userId,
+ isLoggedIn,
} = props;
/* TODO: Split into a separate ReactJS component! */
@@ -131,7 +132,7 @@ export default function ChallengeStatus(props) {
challenge,
detailLink,
} = props;
- const timeDiff = getTimeLeft(challenge.allPhases.find(p => p.phaseType === 'Registration'));
+ const timeDiff = getTimeLeft((challenge.phases || []).find(p => p.name === 'Registration'), 'to go');
let timeNote = timeDiff.text;
/* TODO: This is goofy, makes the trick, but should be improved. The idea
* here is that the standard "getTimeLeft" method, for positive times,
@@ -163,6 +164,7 @@ export default function ChallengeStatus(props) {
* the common code being used in both places. */
function completedChallenge() {
const { challenge } = props;
+ const forumId = _.get(challenge, 'legacy.forumId') || 0;
return (
{renderLeaderboard()}
@@ -183,13 +185,14 @@ export default function ChallengeStatus(props) {
newChallengeDetails={newChallengeDetails}
selectChallengeDetailsTab={selectChallengeDetailsTab}
openChallengesInNewTabs={openChallengesInNewTabs}
+ isLoggedIn={isLoggedIn}
/>
{
challenge.myChallenge
&& (
@@ -203,34 +206,27 @@ export default function ChallengeStatus(props) {
function activeChallenge() {
const { challenge } = props;
const {
- allPhases,
- currentPhases,
- forumId,
myChallenge,
status,
subTrack,
} = challenge;
+ const allPhases = challenge.phases || [];
+ const forumId = _.get(challenge, 'legacy.forumId') || 0;
- const checkPhases = (currentPhases && currentPhases.length > 0 ? currentPhases : allPhases);
- let statusPhase = checkPhases
- .filter(p => p.phaseType !== 'Registration')
- .sort((a, b) => moment(a.scheduledEndTime).diff(b.scheduledEndTime))[0];
+ let statusPhase = allPhases
+ .filter(p => p.name !== 'Registration' && p.isOpen)
+ .sort((a, b) => moment(a.scheduledEndDate).diff(b.scheduledEndDate))[0];
- if (!statusPhase && (subTrack === 'FIRST_2_FINISH' || subTrack === 'CODE') && checkPhases.length) {
- statusPhase = _.clone(checkPhases[0]);
- statusPhase.phaseType = 'Submission';
+ if (!statusPhase && subTrack === 'FIRST_2_FINISH' && allPhases.length) {
+ statusPhase = _.clone(allPhases[0]);
+ statusPhase.name = 'Submission';
}
- const registrationPhase = allPhases
- .find(p => p.phaseType === 'Registration');
- const isRegistrationOpen = registrationPhase
- && (registrationPhase.phaseStatus === 'Open' || moment(registrationPhase.scheduledEndTime).diff(new Date()) > 0);
-
let phaseMessage = STALLED_MSG;
- if (statusPhase) phaseMessage = statusPhase.phaseType;
- else if (status === 'DRAFT') phaseMessage = DRAFT_MSG;
+ if (statusPhase) phaseMessage = statusPhase.name;
+ else if (status === 'Draft') phaseMessage = DRAFT_MSG;
- const showRegisterInfo = isRegistrationOpen && !challenge.users[userHandle];
+ const showRegisterInfo = challenge.registrationOpen === 'Yes' && !challenge.users[userId];
return (
@@ -254,6 +250,7 @@ export default function ChallengeStatus(props) {
newChallengeDetails={newChallengeDetails}
selectChallengeDetailsTab={selectChallengeDetailsTab}
openChallengesInNewTabs={openChallengesInNewTabs}
+ isLoggedIn={isLoggedIn}
/>
{
@@ -269,15 +266,15 @@ export default function ChallengeStatus(props) {
{
- status === 'ACTIVE' && statusPhase ? (
+ status === 'Active' && statusPhase ? (
- {getTimeLeft(statusPhase).text}
+ {getTimeLeft(statusPhase, 'to go').text}
) :
@@ -289,7 +286,7 @@ export default function ChallengeStatus(props) {
}
const { challenge, className } = props;
- const completed = challenge.status === 'COMPLETED';
+ const completed = challenge.status === 'Completed';
const status = completed ? 'completed' : '';
return (
@@ -302,8 +299,8 @@ ChallengeStatus.defaultProps = {
challenge: {},
detailLink: '',
openChallengesInNewTabs: false,
- userHandle: '',
className: '',
+ userId: '',
};
ChallengeStatus.propTypes = {
@@ -313,6 +310,7 @@ ChallengeStatus.propTypes = {
newChallengeDetails: PT.bool.isRequired,
openChallengesInNewTabs: PT.bool, // eslint-disable-line react/no-unused-prop-types
selectChallengeDetailsTab: PT.func.isRequired,
- userHandle: PT.string,
className: PT.string,
+ userId: PT.string,
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/challenge-listing/ChallengeCard/index.jsx b/src/shared/components/challenge-listing/ChallengeCard/index.jsx
index 19c3608794..ab1dec84e4 100644
--- a/src/shared/components/challenge-listing/ChallengeCard/index.jsx
+++ b/src/shared/components/challenge-listing/ChallengeCard/index.jsx
@@ -3,11 +3,9 @@ import React from 'react';
import PT from 'prop-types';
import TrackIcon from 'components/TrackIcon';
import { TABS as DETAIL_TABS } from 'actions/page/challenge-details';
-import { config, Link } from 'topcoder-react-utils';
+import { Link } from 'topcoder-react-utils';
import {
getEndDate,
- PRIZE_MODE,
- getPrizePurseUI,
getPrizePointsUI,
} from 'utils/challenge-detail/helper';
@@ -17,7 +15,6 @@ import ChallengeStatus from './Status';
import TrackAbbreviationTooltip from '../Tooltips/TrackAbbreviationTooltip';
import './style.scss';
-
/* TODO: Note that this component uses a dirty trick to cheat linter and to be
* able to modify an argument: it aliases challenge prop, then mutates it in
* the way it wants. Not good at all! If necessary, modification of challenge
@@ -25,51 +22,45 @@ import './style.scss';
function ChallengeCard({
challenge: passedInChallenge,
+ challengeType,
challengesUrl,
expandedTags,
expandTag,
newChallengeDetails,
onTechTagClicked,
openChallengesInNewTabs,
- prizeMode,
sampleWinnerProfile,
selectChallengeDetailsTab,
- userHandle,
+ userId,
domRef,
+ isLoggedIn,
}) {
const challenge = passedInChallenge;
const {
id,
- subTrack,
track,
- status,
} = challenge;
- challenge.isDataScience = false;
- if (challenge.technologies.includes('Data Science') || subTrack === 'DEVELOP_MARATHON_MATCH') {
- challenge.isDataScience = true;
- }
challenge.prize = challenge.prizes || [];
- let challengeDetailLink = `${challengesUrl}/${id}`;
- if (track === 'DATA_SCIENCE' && subTrack === 'MARATHON_MATCH' && status === 'ACTIVE') {
- challengeDetailLink = `${config.URL.COMMUNITY}/tc?module=MatchDetails&rd=${id}`;
- }
+ const challengeDetailLink = `${challengesUrl}/${id}`;
- const registrationPhase = challenge.allPhases.filter(phase => phase.phaseType === 'Registration')[0];
- const isRegistrationOpen = registrationPhase ? registrationPhase.phaseStatus === 'Open' : false;
+ const registrationPhase = (challenge.phases || []).filter(phase => phase.name === 'Registration')[0];
+ const isRegistrationOpen = registrationPhase ? registrationPhase.isOpen : false;
return (
-
+
0 ? challenge.events[0].key : ''}
/>
@@ -85,22 +76,23 @@ function ChallengeCard({
- {challenge.status === 'ACTIVE' ? 'Ends ' : 'Ended '}
+ {challenge.status === 'Active' ? 'Ends ' : 'Ended '}
{getEndDate(challenge)}
- expandTag(challenge.id)}
- />
+ { challenge.tags.length > 0
+ && (
+ expandTag(challenge.id)}
+ />
+ ) }
- {getPrizePurseUI(challenge, prizeMode)}
{getPrizePointsUI(challenge)}
@@ -112,7 +104,8 @@ function ChallengeCard({
openChallengesInNewTabs={openChallengesInNewTabs}
sampleWinnerProfile={sampleWinnerProfile}
selectChallengeDetailsTab={selectChallengeDetailsTab}
- userHandle={userHandle}
+ userId={userId}
+ isLoggedIn={isLoggedIn}
/>
@@ -124,9 +117,8 @@ ChallengeCard.defaultProps = {
newChallengeDetails: false,
onTechTagClicked: _.noop,
openChallengesInNewTabs: false,
- prizeMode: PRIZE_MODE.MONEY_USD,
sampleWinnerProfile: undefined,
- userHandle: '',
+ userId: '',
expandedTags: [],
expandTag: null,
domRef: null,
@@ -134,17 +126,18 @@ ChallengeCard.defaultProps = {
ChallengeCard.propTypes = {
challenge: PT.shape(),
+ challengeType: PT.shape().isRequired,
challengesUrl: PT.string.isRequired,
newChallengeDetails: PT.bool,
onTechTagClicked: PT.func,
openChallengesInNewTabs: PT.bool,
- prizeMode: PT.oneOf(_.toArray(PRIZE_MODE)),
sampleWinnerProfile: PT.shape(),
selectChallengeDetailsTab: PT.func.isRequired,
- userHandle: PT.string,
+ userId: PT.string,
expandedTags: PT.arrayOf(PT.number),
expandTag: PT.func,
domRef: PT.func,
+ isLoggedIn: PT.bool.isRequired,
};
export default ChallengeCard;
diff --git a/src/shared/components/challenge-listing/Filters/ChallengeFilters.jsx b/src/shared/components/challenge-listing/Filters/ChallengeFilters.jsx
index 521441e08d..2ed2b5684d 100644
--- a/src/shared/components/challenge-listing/Filters/ChallengeFilters.jsx
+++ b/src/shared/components/challenge-listing/Filters/ChallengeFilters.jsx
@@ -6,6 +6,7 @@ import PT from 'prop-types';
import SwitchWithLabel from 'components/SwitchWithLabel';
import { challenge as challengeUtils } from 'topcoder-react-lib';
import { COMPETITION_TRACKS as TRACKS } from 'utils/tc';
+import _ from 'lodash';
import localStorage from 'localStorage';
import ChallengeSearchBar from './ChallengeSearchBar';
@@ -39,12 +40,12 @@ export default function ChallengeFilters({
showTrackModal,
trackModalShown,
validKeywords,
- validSubtracks,
+ validTypes,
isSavingFilter,
}) {
let filterRulesCount = 0;
if (filterState.tags) filterRulesCount += 1;
- if (filterState.subtracks) filterRulesCount += 1;
+ if (filterState.types) filterRulesCount += 1;
if (filterState.endDate || filterState.startDate) filterRulesCount += 1;
if (isReviewOpportunitiesBucket && filterState.reviewOpportunityType) filterRulesCount += 1;
if (selectedCommunityId !== '') filterRulesCount += 1;
@@ -53,7 +54,8 @@ export default function ChallengeFilters({
const switchTrack = (track, on) => {
const act = on ? Filter.addTrack : Filter.removeTrack;
const filterObj = act(filterState, track);
- localStorage.setItem('trackStatus', JSON.stringify(filterObj));
+ const newFilterObj = _.pick(filterObj, 'tracks');
+ localStorage.setItem('trackStatus', JSON.stringify(newFilterObj));
setFilterState(filterObj);
};
@@ -98,6 +100,13 @@ export default function ChallengeFilters({
onSwitch={on => switchTrack(TRACKS.DATA_SCIENCE, on)}
/>
+
+ switchTrack(TRACKS.QA, on)}
+ />
+
) : ''
}
@@ -163,7 +172,7 @@ export default function ChallengeFilters({
setFilterState={setFilterState}
setSearchText={setSearchText}
validKeywords={validKeywords}
- validSubtracks={validSubtracks}
+ validTypes={validTypes}
isSavingFilter={isSavingFilter}
/>
@@ -176,6 +185,8 @@ export default function ChallengeFilters({
switchDev={on => switchTrack(TRACKS.DEVELOP, on)}
dataScienceEnabled={isTrackOn(TRACKS.DATA_SCIENCE)}
switchDataScience={on => switchTrack(TRACKS.DATA_SCIENCE, on)}
+ qaEnabled={isTrackOn(TRACKS.QA)}
+ switchQA={on => switchTrack(TRACKS.QA, on)}
/>
);
@@ -212,5 +223,5 @@ ChallengeFilters.propTypes = {
showTrackModal: PT.func.isRequired,
trackModalShown: PT.bool.isRequired,
validKeywords: PT.arrayOf(PT.string).isRequired,
- validSubtracks: PT.arrayOf(PT.object).isRequired,
+ validTypes: PT.arrayOf(PT.object).isRequired,
};
diff --git a/src/shared/components/challenge-listing/Filters/ChallengeSearchBar/style.scss b/src/shared/components/challenge-listing/Filters/ChallengeSearchBar/style.scss
index 08cfe39428..bcf05d0753 100644
--- a/src/shared/components/challenge-listing/Filters/ChallengeSearchBar/style.scss
+++ b/src/shared/components/challenge-listing/Filters/ChallengeSearchBar/style.scss
@@ -10,7 +10,7 @@ $challenge-radius-4: $corner-radius * 2;
/* -100px is necessary to compensate for the temporarly added `Alpha preview`
* banner. Should be modified / removed together with banner. */
-$search-bar-width: '100% - 475px';
+$search-bar-width: '100% - 536px';
$search-input-width: '100% - 56px';
.ChallengeSearchBar {
diff --git a/src/shared/components/challenge-listing/Filters/DateRangePicker.jsx b/src/shared/components/challenge-listing/Filters/DateRangePicker.jsx
index 5ad10b0a52..c510e2d7c9 100644
--- a/src/shared/components/challenge-listing/Filters/DateRangePicker.jsx
+++ b/src/shared/components/challenge-listing/Filters/DateRangePicker.jsx
@@ -14,6 +14,7 @@
import React from 'react';
import PT from 'prop-types';
import 'react-dates/initialize';
+import shortId from 'shortid';
import { DateRangePicker as WrappedDateRangePicker } from 'react-dates';
import 'react-dates/lib/css/_datepicker.css';
import './_fix_DateInput__input.css';
@@ -53,7 +54,9 @@ class DateRangePicker extends React.Component {
this.setState({ focusedInput: newFocusedInput });
}}
startDate={startDate}
+ startDateId={shortId()}
endDate={endDate}
+ endDateId={shortId()}
anchorDirection="right"
displayFormat="MMM DD, YYYY"
readOnly={readOnly}
diff --git a/src/shared/components/challenge-listing/Filters/EditTrackPanel/index.jsx b/src/shared/components/challenge-listing/Filters/EditTrackPanel/index.jsx
index ed9bac85d1..12ee5f8ba5 100644
--- a/src/shared/components/challenge-listing/Filters/EditTrackPanel/index.jsx
+++ b/src/shared/components/challenge-listing/Filters/EditTrackPanel/index.jsx
@@ -16,6 +16,8 @@
* switchDev={enable => this.setTracks(DEVELOP_TRACK, enable)}
* dataScienceEnabled={this.state.filter.tracks.has(DATA_SCIENCE_TRACK)}
* switchDataScience={enable => this.setTracks(DATA_SCIENCE_TRACK, enable)}
+ * qaEnabled={this.state.filter.tracks.has(QA_TRACK)}
+ * switchQA={enable => this.setTracks(QA_TRACK, enable)}
* />
*/
import React from 'react';
@@ -28,11 +30,13 @@ function EditTrackPanel({
dataScienceEnabled,
designEnabled,
devEnabled,
+ qaEnabled,
onClose,
opened,
switchDataScience,
switchDesign,
switchDev,
+ switchQA,
}) {
return (
@@ -75,6 +79,15 @@ function EditTrackPanel({
onSwitch={switchDataScience}
/>
+
+
+ QA
+
+
+
);
}
@@ -92,6 +105,8 @@ EditTrackPanel.propTypes = {
switchDev: PT.func.isRequired,
dataScienceEnabled: PT.bool.isRequired,
switchDataScience: PT.func.isRequired,
+ qaEnabled: PT.bool.isRequired,
+ switchQA: PT.func.isRequired,
};
export default EditTrackPanel;
diff --git a/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx b/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
index 80995e2fdd..a3320e0735 100644
--- a/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
+++ b/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
@@ -55,7 +55,7 @@ export default function FiltersPanel({
setFilterState,
setSearchText,
validKeywords,
- validSubtracks,
+ validTypes,
isSavingFilter,
}) {
let className = 'FiltersPanel';
@@ -75,7 +75,8 @@ export default function FiltersPanel({
);
}
- const visitorGroupIds = auth.profile ? auth.profile.groups.map(g => g.id) : [];
+ // eslint-disable-next-line max-len
+ const visitorGroupIds = (auth.profile && auth.profile.groups) ? auth.profile.groups.map(g => g.id) : [];
const visitorRegisteredToCommunity = isVisitorRegisteredToCommunity(
visitorGroupIds,
community.groupIds,
@@ -192,7 +193,7 @@ export default function FiltersPanel({
);
const mapOps = item => ({ label: item, value: item });
- const mapSubtracks = item => ({ label: item.name, value: item.subTrack });
+ const mapTypes = item => ({ label: item.name, value: item.id });
return (
@@ -250,23 +251,24 @@ export default function FiltersPanel({
-
{/* Only shown when the Review Opportunity bucket is selected */}
@@ -347,6 +349,7 @@ export default function FiltersPanel({
setFilterState({});
selectCommunity(defaultCommunityId);
setSearchText('');
+ localStorage.setItem('trackStatus', JSON.stringify({}));
}}
size="sm"
theme={{ button: style.button }}
@@ -396,6 +399,6 @@ FiltersPanel.propTypes = {
setFilterState: PT.func.isRequired,
setSearchText: PT.func.isRequired,
validKeywords: PT.arrayOf(PT.string).isRequired,
- validSubtracks: PT.arrayOf(PT.shape()).isRequired,
+ validTypes: PT.arrayOf(PT.shape()).isRequired,
onClose: PT.func,
};
diff --git a/src/shared/components/challenge-listing/Filters/FiltersPanel/style.scss b/src/shared/components/challenge-listing/Filters/FiltersPanel/style.scss
index 6c1a1f086c..21c13a907a 100644
--- a/src/shared/components/challenge-listing/Filters/FiltersPanel/style.scss
+++ b/src/shared/components/challenge-listing/Filters/FiltersPanel/style.scss
@@ -462,7 +462,7 @@ $panel-radius-4: $corner-radius * 2;
.filter.review-type {
// margin - (.date.input width + .date.text width) * 2 - filters.label width
- @include calc(width, '50% - 30px - (14px + 114px) * 2 - 96px');
+ @include calc(width, '50% - 45px - (12px + 112px) * 2 - 96px');
order: 3; // Show after Date Picker when in lg screen mode
diff --git a/src/shared/components/challenge-listing/LeaderboardAvatar/style.scss b/src/shared/components/challenge-listing/LeaderboardAvatar/style.scss
index 6078373aaa..98a2c1a8ce 100644
--- a/src/shared/components/challenge-listing/LeaderboardAvatar/style.scss
+++ b/src/shared/components/challenge-listing/LeaderboardAvatar/style.scss
@@ -68,6 +68,16 @@ $leader-radius-4: $corner-radius * 2;
background: $tc-dark-blue-30;
color: $tc-dark-blue-100;
}
+
+ &.placement-5 {
+ background: $tc-dark-blue-30;
+ color: $tc-dark-blue-100;
+ }
+
+ &.placement-6 {
+ background: $tc-dark-blue-30;
+ color: $tc-dark-blue-100;
+ }
}
.hidden {
diff --git a/src/shared/components/challenge-listing/Listing/Bucket/index.jsx b/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
index ae794d0aab..d58a3c0681 100644
--- a/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
@@ -26,6 +26,7 @@ export default function Bucket({
bucket,
bucketId,
challenges,
+ challengeTypes,
challengesUrl,
expanded,
expand,
@@ -41,11 +42,12 @@ export default function Bucket({
setFilterState,
setSort,
sort,
- userHandle,
+ userId,
expandedTags,
expandTag,
activeBucket,
searchTimestamp,
+ isLoggedIn,
}) {
const refs = useRef([]);
refs.current = [];
@@ -97,20 +99,22 @@ export default function Bucket({
);
}
- const cards = filteredChallenges.map(item => (
+ const cards = filteredChallenges.map(challenge => (
setFilterState({ tags: [tag] })}
openChallengesInNewTabs={openChallengesInNewTabs}
prizeMode={prizeMode}
- key={item.id}
+ key={challenge.id}
selectChallengeDetailsTab={selectChallengeDetailsTab}
- userHandle={userHandle}
+ userId={userId}
expandedTags={expandedTags}
expandTag={expandTag}
domRef={addToRefs}
+ isLoggedIn={isLoggedIn}
/>
));
@@ -178,13 +182,14 @@ export default function Bucket({
Bucket.defaultProps = {
expanded: false,
expand: _.noop,
+ challengeTypes: [],
keepPlaceholders: false,
loading: false,
loadMore: null,
newChallengeDetails: false,
openChallengesInNewTabs: false,
sort: null,
- userHandle: '',
+ userId: '',
expandedTags: [],
expandTag: null,
activeBucket: '',
@@ -197,6 +202,7 @@ Bucket.propTypes = {
expanded: PT.bool,
expand: PT.func,
challenges: PT.arrayOf(PT.shape()).isRequired,
+ challengeTypes: PT.arrayOf(PT.shape()),
challengesUrl: PT.string.isRequired,
filterState: PT.shape().isRequired,
keepPlaceholders: PT.bool,
@@ -210,9 +216,10 @@ Bucket.propTypes = {
setFilterState: PT.func.isRequired,
setSort: PT.func.isRequired,
sort: PT.string,
- userHandle: PT.string,
+ userId: PT.string,
expandedTags: PT.arrayOf(PT.number),
expandTag: PT.func,
activeBucket: PT.string,
searchTimestamp: PT.number,
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx b/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
index 87cb5eef0a..b7b47dd371 100644
--- a/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
@@ -30,6 +30,7 @@ export default function ReviewOpportunityBucket({
opportunities,
setFilterState,
setSort,
+ challengeTypes,
sort,
}) {
if (!opportunities.length && !loadMore) return null;
@@ -47,12 +48,13 @@ export default function ReviewOpportunityBucket({
Filter.getReviewOpportunitiesFilterFunction({
...bucket.filter, // Default bucket filters from utils/buckets.js
...filterState, // User selected filters
- }),
+ }, challengeTypes),
);
const cards = filteredOpportunities.map(item => (
setFilterState({ tags: [tag] })}
@@ -126,4 +128,5 @@ ReviewOpportunityBucket.propTypes = {
setFilterState: PT.func.isRequired,
setSort: PT.func.isRequired,
sort: PT.string,
+ challengeTypes: PT.arrayOf(PT.shape()).isRequired,
};
diff --git a/src/shared/components/challenge-listing/Listing/index.jsx b/src/shared/components/challenge-listing/Listing/index.jsx
index 0534920309..12e29b1b91 100644
--- a/src/shared/components/challenge-listing/Listing/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/index.jsx
@@ -20,6 +20,8 @@ function Listing({
activeBucket,
auth,
challenges,
+ challengeTypes,
+ userChallenges,
challengesUrl,
communityName,
extraBucket,
@@ -43,8 +45,9 @@ function Listing({
expandedTags,
expandTag,
pastSearchTimestamp,
+ isLoggedIn,
}) {
- const buckets = getBuckets(_.get(auth.user, 'handle'));
+ const buckets = getBuckets(userChallenges);
const isChallengesAvailable = (bucket) => {
const filter = Filter.getFilterFunction(buckets[bucket].filter);
const clonedChallenges = _.clone(challenges);
@@ -89,6 +92,8 @@ function Listing({
setFilterState={setFilterState}
setSort={sort => setSort(bucket, sort)}
sort={sorts[bucket]}
+ challengeTypes={challengeTypes}
+ isLoggedIn={isLoggedIn}
/>
)
: (
@@ -96,6 +101,7 @@ function Listing({
bucket={buckets[bucket]}
bucketId={bucket}
challenges={challenges}
+ challengeTypes={challengeTypes}
challengesUrl={challengesUrl}
communityName={communityName}
expand={() => selectBucket(bucket)}
@@ -114,9 +120,10 @@ function Listing({
setFilterState={setFilterState}
setSort={sort => setSort(bucket, sort)}
sort={sorts[bucket]}
- userHandle={_.get(auth, 'user.handle')}
+ userId={_.get(auth, 'user.userId')}
activeBucket={activeBucket}
searchTimestamp={searchTimestamp}
+ isLoggedIn={isLoggedIn}
/>
)
);
@@ -158,6 +165,7 @@ function Listing({
Listing.defaultProps = {
challenges: [],
+ challengeTypes: [],
communityName: null,
// currentFilterName: '',
// expanded: false,
@@ -172,6 +180,7 @@ Listing.defaultProps = {
// onExpandFilterResult: _.noop,
openChallengesInNewTabs: false,
pastSearchTimestamp: 0,
+ userChallenges: [],
};
Listing.propTypes = {
@@ -179,10 +188,11 @@ Listing.propTypes = {
auth: PT.shape({
tokenV3: PT.string,
user: PT.shape({
- handle: PT.string,
+ userId: PT.string,
}),
}).isRequired,
challenges: PT.arrayOf(PT.shape()),
+ challengeTypes: PT.arrayOf(PT.shape()),
challengesUrl: PT.string.isRequired,
communityName: PT.string,
expandedTags: PT.arrayOf(PT.number),
@@ -206,6 +216,8 @@ Listing.propTypes = {
setSort: PT.func.isRequired,
sorts: PT.shape().isRequired,
pastSearchTimestamp: PT.number,
+ userChallenges: PT.arrayOf(PT.string),
+ isLoggedIn: PT.bool.isRequired,
};
const mapStateToProps = (state) => {
@@ -213,6 +225,7 @@ const mapStateToProps = (state) => {
return {
allActiveChallengesLoaded: cl.allActiveChallengesLoaded,
pastSearchTimestamp: cl.pastSearchTimestamp,
+ challengeTypes: cl.challengeTypes,
};
};
diff --git a/src/shared/components/challenge-listing/ReviewOpportunityCard/index.jsx b/src/shared/components/challenge-listing/ReviewOpportunityCard/index.jsx
index f6d5898561..a22ca72ae9 100644
--- a/src/shared/components/challenge-listing/ReviewOpportunityCard/index.jsx
+++ b/src/shared/components/challenge-listing/ReviewOpportunityCard/index.jsx
@@ -45,27 +45,34 @@ function ReviewOpportunityCard({
expandTag,
onTechTagClicked,
opportunity,
+ challengeType,
}) {
const { challenge } = opportunity;
+ let tags = challenge.tags || challenge.technologies;
+ tags = tags.filter(tag => tag.trim().length);
+ const { track } = challenge.track;
const start = moment(opportunity.startDate);
-
return (
+ { /* START - DISABLED UNTIL REVIEW OPPORTUNITY RECEIVE UPDATE TO API V5 */
+ false
+ && (
+ ) /* END - DISABLED UNTIL REVIEW OPPORTUNITY RECEIVE UPDATE TO API V5 */ }
- expandTag(challenge.id)}
- onTechTagClicked={onTechTagClicked}
- />
+ { tags.length > 0
+ && (
+ expandTag(challenge.id)}
+ onTechTagClicked={onTechTagClicked}
+ />
+ ) }
@@ -143,7 +152,7 @@ function ReviewOpportunityCard({
@@ -172,6 +181,7 @@ ReviewOpportunityCard.propTypes = {
challengesUrl: PT.string.isRequired,
onTechTagClicked: PT.func,
opportunity: PT.shape().isRequired,
+ challengeType: PT.shape().isRequired,
};
export default ReviewOpportunityCard;
diff --git a/src/shared/components/challenge-listing/SRMCard/PastSRMCard.jsx b/src/shared/components/challenge-listing/SRMCard/PastSRMCard.jsx
index 7791d43876..10625503cc 100644
--- a/src/shared/components/challenge-listing/SRMCard/PastSRMCard.jsx
+++ b/src/shared/components/challenge-listing/SRMCard/PastSRMCard.jsx
@@ -29,13 +29,19 @@ function numSubmissionsTipText(number) {
/*
* Past SRMCard
*/
+const track = 'Data Science';
+const type = {
+ name: 'Single Round Match',
+ abbreviation: 'SRM',
+};
+
const PastSRMCard = () => (
-
-
+
+
diff --git a/src/shared/components/challenge-listing/SRMCard/index.jsx b/src/shared/components/challenge-listing/SRMCard/index.jsx
index 9736730a05..1485e6a026 100644
--- a/src/shared/components/challenge-listing/SRMCard/index.jsx
+++ b/src/shared/components/challenge-listing/SRMCard/index.jsx
@@ -58,13 +58,18 @@ const renderLeaderboard = MOCK_REGISTRANTS.map((winner, index) => (
));
-// Happening now
+const track = 'Data Science';
+const type = {
+ name: 'Single Round Match',
+ abbreviation: 'SRM',
+};
+
const HappeningNow = () => (
-
-
+
+
@@ -99,8 +104,8 @@ const UpcomingSRMs = ({ srmChallenge }) => (
-
-
+
+
diff --git a/src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/index.jsx b/src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/index.jsx
index 065bc71752..83984b338b 100644
--- a/src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/index.jsx
+++ b/src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/index.jsx
@@ -23,6 +23,13 @@ function Bucket({
let countEl;
if (!bucket.hideCount && !disabled) {
const filter = Filter.getFilterFunction(bucket.filter);
+ const clonedChallenges = _.clone(challenges);
+ const filteredChallenges = [];
+ for (let i = 0; i < clonedChallenges.length; i += 1) {
+ if (filter(clonedChallenges[i])) {
+ filteredChallenges.push(clonedChallenges[i]);
+ }
+ }
let count;
if (allActiveChallengesLoaded) {
count = challenges.filter(filter).length;
@@ -32,7 +39,7 @@ function Bucket({
count = meta.allChallengesCount;
break;
case 'My Challenges':
- count = meta.myChallengesCount;
+ count = filteredChallenges.length;
break;
case 'Open for registration':
count = meta.openChallengesCount;
diff --git a/src/shared/components/challenge-listing/Sidebar/BucketSelector/index.jsx b/src/shared/components/challenge-listing/Sidebar/BucketSelector/index.jsx
index d0ab37c753..3f267d87c3 100644
--- a/src/shared/components/challenge-listing/Sidebar/BucketSelector/index.jsx
+++ b/src/shared/components/challenge-listing/Sidebar/BucketSelector/index.jsx
@@ -130,7 +130,6 @@ BucketSelector.propTypes = {
activeSavedFilter: PT.number.isRequired,
buckets: PT.shape().isRequired,
challenges: PT.arrayOf(PT.shape({
- registrationOpen: PT.string.isRequired,
})).isRequired,
communityFilter: PT.shape(),
disabled: PT.bool,
diff --git a/src/shared/components/challenge-listing/Sidebar/index.jsx b/src/shared/components/challenge-listing/Sidebar/index.jsx
index a21f0ac70d..a96ed88860 100644
--- a/src/shared/components/challenge-listing/Sidebar/index.jsx
+++ b/src/shared/components/challenge-listing/Sidebar/index.jsx
@@ -101,7 +101,6 @@ SideBarFilters.propTypes = {
activeSavedFilter: PT.number.isRequired,
buckets: PT.shape().isRequired,
challenges: PT.arrayOf(PT.shape({
- registrationOpen: PT.string.isRequired,
})).isRequired,
changeFilterName: PT.func.isRequired,
communityFilter: PT.shape(),
diff --git a/src/shared/components/challenge-listing/Tags.jsx b/src/shared/components/challenge-listing/Tags.jsx
index 4b79b0ef4f..428244938e 100644
--- a/src/shared/components/challenge-listing/Tags.jsx
+++ b/src/shared/components/challenge-listing/Tags.jsx
@@ -1,24 +1,19 @@
/**
- * Renders the Technology/Platform Tags for ChallengeCard and ReviewOpportunityCard
+ * Renders the Tags for ChallengeCard and ReviewOpportunityCard
*/
import _ from 'lodash';
import React from 'react';
import PT from 'prop-types';
import { Tag } from 'topcoder-react-ui-kit';
-// The number of technologies to be shown without requiring expanding
-const VISIBLE_TECHNOLOGIES = 3;
+// The number of tags to be shown without requiring expanding
+const VISIBLE_TAGS = 3;
/**
* Implements
component
*/
export default function Tags({
- expand,
- isExpanded,
- technologies,
- platforms,
- onTechTagClicked,
- challengesUrl,
+ expand, isExpanded, tags, onTechTagClicked, challengesUrl,
}) {
const onClick = (item) => {
// resolved conflict with c++ tag
@@ -29,17 +24,15 @@ export default function Tags({
}
};
- const renderTechnologies = () => {
- const combined = _.union(technologies, platforms);
-
- if (combined.length) {
- let display = combined;
- // If the number of tags to display is larger than VISIBLE_TECHNOLOGIES
+ const renderTags = () => {
+ if (tags.length) {
+ let display = [...new Set(tags)];
+ // If the number of tags to display is larger than VISIBLE_TAGS
// the last tag shown will be +num and when clicked
// will expand the Tags component to show all of the tags
- if (combined.length > VISIBLE_TECHNOLOGIES && !isExpanded) {
- const expandItem = `+${display.length - VISIBLE_TECHNOLOGIES}`;
- display = combined.slice(0, VISIBLE_TECHNOLOGIES);
+ if (tags.length > VISIBLE_TAGS && !isExpanded) {
+ const expandItem = `+${display.length - VISIBLE_TAGS}`;
+ display = tags.slice(0, VISIBLE_TAGS);
display.push(expandItem);
}
return display.map(item => (
@@ -59,7 +52,7 @@ export default function Tags({
return (
- { renderTechnologies() }
+ { renderTags() }
);
}
@@ -67,8 +60,7 @@ export default function Tags({
// Default Props
Tags.defaultProps = {
onTechTagClicked: _.noop,
- technologies: [],
- platforms: [],
+ tags: [],
isExpanded: false,
expand: null,
challengesUrl: null,
@@ -77,8 +69,7 @@ Tags.defaultProps = {
// Prop validation
Tags.propTypes = {
onTechTagClicked: PT.func,
- technologies: PT.arrayOf(PT.string),
- platforms: PT.arrayOf(PT.string),
+ tags: PT.arrayOf(PT.string),
isExpanded: PT.bool,
expand: PT.func,
challengesUrl: PT.string,
diff --git a/src/shared/components/challenge-listing/Tooltips/ProgressBarTooltip/index.jsx b/src/shared/components/challenge-listing/Tooltips/ProgressBarTooltip/index.jsx
index 113f426663..675e181bc4 100644
--- a/src/shared/components/challenge-listing/Tooltips/ProgressBarTooltip/index.jsx
+++ b/src/shared/components/challenge-listing/Tooltips/ProgressBarTooltip/index.jsx
@@ -93,32 +93,33 @@ function Tip(props) {
const { challenge: c } = props;
const { isLoaded } = props;
if (!c || _.isEmpty(c)) return ;
- // TC API v2 does not provide detailed information on challenge phases,
- // it just includes some deadlines into the challenge details. The code below,
- // sorts these deadlines by their dates, and then generates the challenge timeline.
- // The result should be fine for simple dev challenges, but will be strange for
- // such as Assembly, etc.
- // Component is updated with TC API v3
- const endPhaseDate = Math.max(...c.allPhases.map(d => new Date(d.scheduledEndTime)));
- steps.push({
- date: new Date(c.registrationStartDate),
- name: 'Start',
- });
+
+ const allPhases = c.phases || [];
+ const endPhaseDate = Math.max(...allPhases.map(d => new Date(d.scheduledEndDate)));
+ const registrationPhase = allPhases.find(phase => phase.name === 'Registration');
+ const submissionPhase = allPhases.find(phase => phase.name === 'Submission');
+
+ if (registrationPhase) {
+ steps.push({
+ date: new Date(registrationPhase.scheduledStartDate),
+ name: 'Start',
+ });
+ }
if (c.checkpointSubmissionEndDate) {
steps.push({
date: new Date(c.checkpointSubmissionEndDate),
name: 'Checkpoint',
});
}
- const iterativeReviewPhase = c.currentPhases.find(phase => phase.phaseStatus === 'Open' && phase.phaseType === 'Iterative Review');
+ const iterativeReviewPhase = allPhases.find(phase => phase.isOpen && phase.name === 'Iterative Review');
if (iterativeReviewPhase) {
steps.push({
- date: new Date(iterativeReviewPhase.scheduledEndTime),
+ date: new Date(iterativeReviewPhase.scheduledEndDate),
name: 'Iterative Review',
});
- } else {
+ } else if (submissionPhase) {
steps.push({
- date: new Date(c.submissionEndDate),
+ date: new Date(submissionPhase.scheduledEndDate),
name: 'Submission',
});
}
diff --git a/src/shared/components/challenge-listing/Tooltips/TrackAbbreviationTooltip/index.jsx b/src/shared/components/challenge-listing/Tooltips/TrackAbbreviationTooltip/index.jsx
index 5c57262ca2..51d2ed9f9a 100644
--- a/src/shared/components/challenge-listing/Tooltips/TrackAbbreviationTooltip/index.jsx
+++ b/src/shared/components/challenge-listing/Tooltips/TrackAbbreviationTooltip/index.jsx
@@ -11,79 +11,33 @@ import PT from 'prop-types';
import Tooltip from 'components/Tooltip';
import './style.scss';
-const DESCRIPTION = {
- // TODO: [Review Opps] This is temporary
- REVIEW_OPPORTUNITY: 'As a topcoder member, you can participate in review boards that review work submitted into challenges by other members.',
- APPLICATION_FRONT_END_DESIGN: 'Design UI and front end experiences for apps',
- ARCHITECTURE: 'Architect modules, components, or full applications',
- ASSEMBLY_COMPETITION: 'Develop code for a variety of use cases. Rigorous review and final fix process is included.',
- BANNERS_OR_ICONS: 'Design UI assets for use in web, mobile, print, and other digital formats',
- BUG_HUNT: 'Quickly find Bugs in apps, websites',
- CODE: 'Develop code for apps, services, etc. Final fixes are not included',
- CONCEPTUALIZATION: 'Discover and define user stories and requirements',
- DESIGN_FIRST_2_FINISH: 'Be the first to deliver the design solution',
- FIRST_2_FINISH: 'Be the first to deliver the development solution',
- LOGO_DESIGN: 'Logo Design',
- MARATHON_MATCH: 'Write algorythms to solve complex problems, often for real world issues',
- PRINT_OR_PRESENTATION: 'Design print and presentation assets',
- SRM: 'Single Round Match - quickly write code to solve algorythm problems head to head against other competitors',
- STUDIO_OTHER: 'Studio other',
- UI_PROTOTYPE_COMPETITION: 'Develop the front end of a UX',
- WEB_DESIGNS: 'Design UI and front end experiences for web experiences',
- WIDGET_OR_MOBILE_SCREEN_DESIGN: 'Design UI and front end experiences for mobile',
- WIREFRAMES: 'Produce the information architecture for user experiences',
-};
-
-const HEADER = {
- REVIEW_OPPORTUNITY: 'Review Opportunity', // TODO: [Review Opps] this is temporary
- APPLICATION_FRONT_END_DESIGN: 'Application Front-End Design (AFED)',
- ARCHITECTURE: 'Architecture (Ar)',
- ASSEMBLY_COMPETITION: 'Assembly (As)',
- BANNERS_OR_ICONS: 'Banners/Icons (BI)',
- BUG_HUNT: 'Bug Hunt (BH)',
- CODE: 'Code (Cd)',
- CONCEPTUALIZATION: 'Conceptualization (Cn)',
- DESIGN_FIRST_2_FINISH: 'Design First2Finish(DF2F)',
- FIRST_2_FINISH: 'First2Finish (F2F)',
- LOGO_DESIGN: 'Logo Design (Lg)',
- MARATHON_MATCH: 'Marathon Match',
- PRINT_OR_PRESENTATION: 'Print/Presentation (PP)',
- SRM: 'Single Round Match (SRM)',
- UI_PROTOTYPE_COMPETITION: 'UI Prototype (Pr)',
- WEB_DESIGNS: 'Web Design (Wb)',
- WIDGET_OR_MOBILE_SCREEN_DESIGN: 'Widget or Mobile Screen Design (Wg)',
- STUDIO_OTHER: 'Generic design challenge (D)',
- WIREFRAMES: 'Wireframe (Wf)',
-};
-
-const TRACK_COLOR_CLASS = {
- DESIGN: 'blue',
- DEVELOP: 'green',
- DATA_SCIENCE: 'orange',
-};
-
/**
* Renders the tooltip's content.
*/
function Tip({
- subTrack,
track,
+ type,
}) {
+ const trackStyle = track.replace(' ', '-').toLowerCase();
return (
-
- {HEADER[subTrack]}
+
+ {type.name}
- {DESCRIPTION[subTrack]}
+ {type.description}
);
}
+Tip.defaultProps = {
+ track: 'Development',
+};
+
Tip.propTypes = {
- subTrack: PT.string.isRequired,
- track: PT.string.isRequired,
+ track: PT.string,
+ type: PT.shape().isRequired,
};
function placeArrow(TooltipNode) {
@@ -96,10 +50,10 @@ function placeArrow(TooltipNode) {
*/
function TrackAbbreviationTooltip({
children,
- subTrack,
track,
+ type,
}) {
- const tip =
;
+ const tip =
;
return (
);
challengeCardContainer = (
@@ -111,6 +115,8 @@ export default function ChallengeListing(props) {
sorts={props.sorts}
loadMoreActive={props.loadMoreActive}
loadingActiveChallenges={props.loadingChallenges}
+ userChallenges={props.userChallenges}
+ isLoggedIn={isLoggedIn}
/>
);
}
@@ -126,40 +132,8 @@ export default function ChallengeListing(props) {
isCardTypeSet="Challenges"
isAuth={Boolean(auth.user)}
/>
-
-
- {/* */}
-
-
-
- {/* happening now */}
-
-
-
- {/* upcoming SRMs */}
-
-
- Upcoming SRMs
-
- { /* UpcomingSrm */ }
-
- {/* past SRMs */}
-
-
-
-
-
- {/* */}
-
-
-
-
+
@@ -195,6 +169,8 @@ ChallengeListing.defaultProps = {
expandedTags: [],
expandTag: null,
loadMoreActive: null,
+ isBucketSwitching: false,
+ userChallenges: [],
};
ChallengeListing.propTypes = {
@@ -230,4 +206,7 @@ ChallengeListing.propTypes = {
sorts: PT.shape().isRequired,
auth: PT.shape(),
loadMoreActive: PT.func,
+ isBucketSwitching: PT.bool,
+ userChallenges: PT.arrayOf(PT.string),
+ isLoggedIn: PT.bool.isRequired,
};
diff --git a/src/shared/components/examples/ColorMixins/Color/style.scss b/src/shared/components/examples/ColorMixins/Color/style.scss
index c44289aa0a..9db9ce4512 100644
--- a/src/shared/components/examples/ColorMixins/Color/style.scss
+++ b/src/shared/components/examples/ColorMixins/Color/style.scss
@@ -81,10 +81,12 @@
.tc-green-30 { @include color($tc-green-30); }
.tc-green-10 { @include color($tc-green-10); }
+.tc-purple-120 { @include color($tc-purple-110); }
.tc-purple-110 { @include color($tc-purple-110); }
.tc-purple-100 { @include color($tc-purple-100); }
.tc-purple-70 { @include color($tc-purple-70); }
.tc-purple-30 { @include color($tc-purple-30); }
+.tc-purple-20 { @include color($tc-purple-20); }
.tc-purple-10 { @include color($tc-purple-10); }
.tc-gold { @include color($tc-gold); }
diff --git a/src/shared/components/tc-communities/ChallengesBlock/Card/index.jsx b/src/shared/components/tc-communities/ChallengesBlock/Card/index.jsx
index a8620ee95f..5c3e4e4b65 100644
--- a/src/shared/components/tc-communities/ChallengesBlock/Card/index.jsx
+++ b/src/shared/components/tc-communities/ChallengesBlock/Card/index.jsx
@@ -7,6 +7,7 @@ import {
DataScienceTrackTag,
DesignTrackTag,
DevelopmentTrackTag,
+ QATrackTag,
} from 'topcoder-react-ui-kit';
import { Link } from 'topcoder-react-utils';
@@ -24,10 +25,11 @@ export default function Card({
}) {
const {
subTrack,
+ track,
} = challenge;
let TrackTag;
- switch (challenge.track.toLowerCase()) {
+ switch (track.toLowerCase()) {
case 'datasci':
case COMPETITION_TRACKS.DATA_SCIENCE:
TrackTag = DataScienceTrackTag;
@@ -38,6 +40,9 @@ export default function Card({
case COMPETITION_TRACKS.DEVELOP:
TrackTag = DevelopmentTrackTag;
break;
+ case COMPETITION_TRACKS.QA:
+ TrackTag = QATrackTag;
+ break;
default:
throw new Error('Wrong competition track value');
}
@@ -98,8 +103,8 @@ Card.propTypes = {
technologies: PT.string.isRequired,
registrationStartDate: PT.string.isRequired,
submissionEndDate: PT.string.isRequired,
- track: PT.string.isRequired,
subTrack: PT.string.isRequired,
+ track: PT.string.isRequired,
}).isRequired,
setChallengeListingFilter: PT.func.isRequired,
};
diff --git a/src/shared/containers/Dashboard/index.jsx b/src/shared/containers/Dashboard/index.jsx
index 5ce7653776..866cc83742 100644
--- a/src/shared/containers/Dashboard/index.jsx
+++ b/src/shared/containers/Dashboard/index.jsx
@@ -20,11 +20,12 @@ import shortId from 'shortid';
import { connect } from 'react-redux';
import { BUCKETS } from 'utils/challenge-listing/buckets';
+import { updateChallengeType } from 'utils/challenge';
import challengeListingActions from 'actions/challenge-listing';
import communityActions from 'actions/tc-communities';
-import { isTokenExpired } from 'tc-accounts';
+import { isTokenExpired, decodeToken } from 'tc-accounts';
import { config, isomorphy } from 'topcoder-react-utils';
import './styles.scss';
@@ -61,11 +62,16 @@ export class DashboardPageContainer extends React.Component {
const {
challengeFilter,
switchChallengeFilter,
+ getMemberResources,
+ tokenV3,
} = this.props;
this.updateData(this.props);
if (challengeFilter) switchChallengeFilter('');
+
+ const user = decodeToken(tokenV3);
+ getMemberResources(user.userId, tokenV3);
}
componentWillReceiveProps(nextProps) {
@@ -163,7 +169,6 @@ export class DashboardPageContainer extends React.Component {
communityStats,
finances,
financesLoading,
- handle,
selectChallengeDetailsTab,
setChallengeListingFilter,
showChallengeFilter,
@@ -187,8 +192,13 @@ export class DashboardPageContainer extends React.Component {
userGroups,
xlBadge,
errorLoadingRss,
+ userResources,
+ challengeTypesMap,
+ getTypes,
} = this.props;
+ // console.log('r', userResources);
+
if (authenticating) return
;
let announcementPreviewId;
@@ -196,13 +206,17 @@ export class DashboardPageContainer extends React.Component {
({ announcementPreviewId } = qs.parse(urlQuery));
}
+ if (_.isEmpty(challengeTypesMap)) {
+ getTypes();
+ }
+
return (
x.users[handle])}
+ challenges={activeChallenges}
challengesLoading={activeChallengesLoading}
communities={communities}
communitiesLoading={communitiesLoading}
@@ -229,6 +243,8 @@ export class DashboardPageContainer extends React.Component {
userGroups={userGroups.map(x => x.id)}
xlBadge={xlBadge}
errorLoadingRss={errorLoadingRss}
+ userResources={userResources ? userResources.resources : []}
+ challengeTypesMap={challengeTypesMap}
/>
);
}
@@ -239,7 +255,6 @@ DashboardPageContainer.defaultProps = {
achievementsTimestamp: 0,
finances: [],
financesTimestamp: 0,
- handle: '',
profile: null,
showEarnings:
isomorphy.isClientSide() ? cookies.get('showEarningsInDashboard') !== 'false' : true,
@@ -250,6 +265,7 @@ DashboardPageContainer.defaultProps = {
tokenV2: null,
tokenV3: null,
errorLoadingRss: false,
+ userResources: {},
};
DashboardPageContainer.propTypes = {
@@ -276,7 +292,6 @@ DashboardPageContainer.propTypes = {
getMemberStats: PT.func.isRequired, // eslint-disable-line react/no-unused-prop-types
getSrms: PT.func.isRequired, // eslint-disable-line react/no-unused-prop-types
getTopcoderBlogFeed: PT.func.isRequired, // eslint-disable-line react/no-unused-prop-types
- handle: PT.string,
profile: PT.shape(), // eslint-disable-line react/no-unused-prop-types
selectChallengeDetailsTab: PT.func.isRequired,
setChallengeListingFilter: PT.func.isRequired,
@@ -304,6 +319,10 @@ DashboardPageContainer.propTypes = {
userGroups: PT.arrayOf(PT.object).isRequired,
xlBadge: PT.string.isRequired,
errorLoadingRss: PT.bool,
+ getMemberResources: PT.func.isRequired,
+ userResources: PT.shape(),
+ challengeTypesMap: PT.shape().isRequired,
+ getTypes: PT.func.isRequired,
};
function mapStateToProps(state, props) {
@@ -318,6 +337,9 @@ function mapStateToProps(state, props) {
const dash = state.page.dashboard;
const tcBlog = state.rss ? (state.rss[TOPCODER_BLOG_ID] || {}) : {};
+ updateChallengeType(
+ state.challengeListing.challenges, state.challengeListing.challengeTypesMap,
+ );
return {
achievements: achievements.data,
achievementsLoading: Boolean(achievements.loadingUuid),
@@ -356,6 +378,8 @@ function mapStateToProps(state, props) {
userGroups: _.get(state.auth.profile, 'groups', []),
xlBadge: dash.xlBadge,
errorLoadingRss: state.rss.errorLoadingRss,
+ userResources: state.members.userResources,
+ challengeTypesMap: state.challengeListing.challengeTypesMap,
};
}
@@ -365,8 +389,8 @@ function mapDispatchToProps(dispatch) {
return {
getAllActiveChallenges: (tokenV3) => {
const uuid = shortId();
- dispatch(challengeListingActions.challengeListing.getAllActiveChallengesInit(uuid));
- dispatch(challengeListingActions.challengeListing.getAllActiveChallengesDone(uuid, tokenV3));
+ dispatch(challengeListingActions.challengeListing.getAllUserChallengesInit(uuid));
+ dispatch(challengeListingActions.challengeListing.getAllUserChallengesDone(uuid, tokenV3));
},
getCommunityList: (auth) => {
const uuid = shortId();
@@ -394,6 +418,11 @@ function mapDispatchToProps(dispatch) {
dispatch(members.getStatsInit(handle, uuid));
dispatch(members.getStatsDone(handle, uuid, tokenV3));
},
+ getMemberResources: (memberId, tokenV3) => {
+ const uuid = shortId();
+ dispatch(members.getUserResourcesInit(memberId, uuid));
+ dispatch(members.getUserResourcesDone(memberId, tokenV3, uuid));
+ },
getSrms: (handle, tokenV3) => {
const uuid = shortId();
const a = challengeListingActions.challengeListing;
@@ -429,6 +458,11 @@ function mapDispatchToProps(dispatch) {
dispatch(a.unregisterInit());
dispatch(a.unregisterDone(auth, challengeId));
},
+ getTypes: () => {
+ const cl = challengeListingActions.challengeListing;
+ dispatch(cl.getChallengeTypesInit());
+ dispatch(cl.getChallengeTypesDone());
+ },
};
}
diff --git a/src/shared/containers/ReviewOpportunityDetails.jsx b/src/shared/containers/ReviewOpportunityDetails.jsx
index 57785c5ab3..bb40d2f79e 100644
--- a/src/shared/containers/ReviewOpportunityDetails.jsx
+++ b/src/shared/containers/ReviewOpportunityDetails.jsx
@@ -139,7 +139,7 @@ ReviewOpportunityDetailsContainer.propTypes = {
applyModalOpened: PT.bool,
authError: PT.bool,
cancelApplications: PT.func.isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
details: PT.shape(),
handle: PT.string.isRequired,
isLoadingDetails: PT.bool,
@@ -173,7 +173,7 @@ const mapStateToProps = (state, ownProps) => {
return {
authError: api.authError,
applyModalOpened: page.applyModalOpened,
- challengeId: Number(ownProps.match.params.challengeId),
+ challengeId: String(ownProps.match.params.challengeId),
details: api.details,
handle: state.auth.user ? state.auth.user.handle : '',
isLoadingDetails: api.isLoadingDetails,
diff --git a/src/shared/containers/SubmissionManagement/index.jsx b/src/shared/containers/SubmissionManagement/index.jsx
index 0886ed8f4e..383c2d1050 100644
--- a/src/shared/containers/SubmissionManagement/index.jsx
+++ b/src/shared/containers/SubmissionManagement/index.jsx
@@ -27,7 +27,6 @@ class SubmissionManagementPageContainer extends React.Component {
authTokens,
challenge,
challengeId,
- mySubmissions,
loadChallengeDetails,
loadingSubmissionsForChallengeId,
loadMySubmissions,
@@ -38,7 +37,7 @@ class SubmissionManagementPageContainer extends React.Component {
loadChallengeDetails(authTokens, challengeId);
}
- if (!mySubmissions && challengeId !== loadingSubmissionsForChallengeId) {
+ if (challengeId !== loadingSubmissionsForChallengeId) {
loadMySubmissions(authTokens, challengeId);
}
}
@@ -52,7 +51,6 @@ class SubmissionManagementPageContainer extends React.Component {
deleting,
loadingSubmissionsForChallengeId,
submissionPhaseStartDate,
- handle,
isLoadingChallenge,
mySubmissions,
onCancelSubmissionDelete,
@@ -60,13 +58,11 @@ class SubmissionManagementPageContainer extends React.Component {
onShowDetails,
onSubmissionDelete,
onSubmissionDeleteConfirmed,
- registrants,
showDetails,
showModal,
toBeDeletedId,
} = this.props;
- const isRegistered = registrants.find(r => _.toString(r.handle) === _.toString(handle));
- if (!isRegistered) return ;
+ if (!challenge.isRegistered) return ;
const isEmpty = _.isEmpty(challenge);
const smConfig = {
@@ -165,7 +161,7 @@ SubmissionManagementPageContainer.defaultProps = {
mySubmissions: [],
// isLoadingSubmissions: false,
showModal: false,
- toBeDeletedId: 0,
+ toBeDeletedId: '',
challenge: null,
};
@@ -176,7 +172,7 @@ SubmissionManagementPageContainer.propTypes = {
isLoadingChallenge: PT.bool,
loadChallengeDetails: PT.func.isRequired,
authTokens: PT.shape().isRequired,
- challengeId: PT.number.isRequired,
+ challengeId: PT.string.isRequired,
mySubmissions: PT.arrayOf(PT.shape()),
loadingSubmissionsForChallengeId: PT.string.isRequired,
loadMySubmissions: PT.func.isRequired,
@@ -186,11 +182,9 @@ SubmissionManagementPageContainer.propTypes = {
showDetails: PT.shape().isRequired,
showModal: PT.bool,
onCancelSubmissionDelete: PT.func.isRequired,
- toBeDeletedId: PT.number,
+ toBeDeletedId: PT.string,
onSubmissionDeleteConfirmed: PT.func.isRequired,
submissionPhaseStartDate: PT.string.isRequired,
- registrants: PT.arrayOf(PT.object).isRequired,
- handle: PT.string.isRequired,
};
function mapStateToProps(state, props) {
@@ -200,10 +194,11 @@ function mapStateToProps(state, props) {
mySubmissions = challengeId === mySubmissions.challengeId
? mySubmissions.v2 : null;
- const submissionPhase = state.challenge.details.allPhases.find(phase => ['Submission', 'Checkpoint Submission'].includes(phase.phaseType) && phase.phaseStatus === 'Open') || {};
+ const allPhases = state.challenge.details.phases || [];
+ const submissionPhase = allPhases.find(phase => ['Submission', 'Checkpoint Submission'].includes(phase.name) && phase.isOpen) || {};
return {
- challengeId: Number(challengeId),
+ challengeId: String(challengeId),
challenge: state.challenge.details,
challengesUrl: props.challengesUrl,
@@ -215,7 +210,7 @@ function mapStateToProps(state, props) {
state.challenge.loadingSubmissionsForChallengeId || '',
mySubmissions,
- submissionPhaseStartDate: submissionPhase.actualStartTime || submissionPhase.scheduledStartTime || '',
+ submissionPhaseStartDate: submissionPhase.actualStartDate || submissionPhase.scheduledStartDate || '',
showDetails: state.page.submissionManagement.showDetails,
@@ -259,7 +254,7 @@ const mapDispatchToProps = dispatch => ({
loadMySubmissions: (tokens, challengeId) => {
const a = actions.challenge;
dispatch(a.getSubmissionsInit(challengeId));
- dispatch(a.getSubmissionsDone(challengeId, tokens.tokenV2));
+ dispatch(a.getSubmissionsDone(challengeId, tokens.tokenV3));
},
});
diff --git a/src/shared/containers/SubmissionPage.jsx b/src/shared/containers/SubmissionPage.jsx
index 6051bdc0f0..9fdfe47a78 100644
--- a/src/shared/containers/SubmissionPage.jsx
+++ b/src/shared/containers/SubmissionPage.jsx
@@ -7,15 +7,17 @@
* Passes the relevent state and setters as properties to the UI components.
*/
import actions from 'actions/page/submission';
+import { actions as api } from 'topcoder-react-lib';
+import { isMM } from 'utils/challenge';
import communityActions from 'actions/tc-communities';
import { PrimaryButton } from 'topcoder-react-ui-kit';
import shortId from 'shortid';
import React from 'react';
import PT from 'prop-types';
-import _ from 'lodash';
import { connect } from 'react-redux';
import SubmissionsPage from 'components/SubmissionPage';
import AccessDenied, { CAUSE as ACCESS_DENIED_REASON } from 'components/tc-communities/AccessDenied';
+import LoadingIndicator from 'components/LoadingIndicator';
/**
* SubmissionsPage Container
@@ -30,8 +32,11 @@ class SubmissionsPageContainer extends React.Component {
const {
auth,
getCommunitiesList,
+ challengeId,
+ loadChallengeDetails,
} = this.props;
+ loadChallengeDetails(auth, challengeId);
getCommunitiesList(auth);
}
@@ -43,17 +48,25 @@ class SubmissionsPageContainer extends React.Component {
tokenV3,
submit,
challengeId,
- subTrack,
+ challenge,
track,
} = this.props;
- submit(tokenV3, tokenV2, challengeId, body, subTrack === 'MARATHON_MATCH' ? 'DEVELOP' : track);
+ submit(tokenV3, tokenV2, challengeId, body, isMM(challenge) ? 'DEVELOP' : track);
}
render() {
- const { registrants, handle, challengeId } = this.props;
- const isRegistered = registrants.find(r => _.toString(r.handle) === _.toString(handle));
- if (!isRegistered) {
+ const {
+ isRegistered,
+ challengeId,
+ challengeName,
+ } = this.props;
+
+ if (!challengeName) {
+ return ;
+ }
+
+ if (!isRegistered && challengeName) {
return (
@@ -62,6 +75,7 @@ class SubmissionsPageContainer extends React.Component {
);
}
+
return (
{
const { submission } = state.page;
+ const details = state.challenge.details || {};
return {
auth: state.auth,
- currentPhases: state.challenge.details.currentPhases,
- allPhases: state.challenge.details.allPhases,
+ phases: details.phases || [],
communitiesList: state.tcCommunities.list,
/* Older stuff below. */
userId: state.auth.user ? state.auth.user.userId : '',
- challengeId: state.challenge.details.id,
- challengeName: state.challenge.details.name,
+ handle: state.auth.user ? state.auth.user.handle : '',
+ challengeId: String(ownProps.match.params.challengeId),
+ challengeName: details.name,
challengesUrl: ownProps.challengesUrl,
tokenV2: state.auth.tokenV2,
tokenV3: state.auth.tokenV3,
- track: state.challenge.details.track,
- subTrack: state.challenge.details.subTrack,
- status: state.challenge.details.status,
- groups: state.challenge.details.groups,
+ track: details.legacy ? details.legacy.track : '',
+ challenge: state.challenge,
+ status: details.status,
+ isRegistered: details.isRegistered,
+ groups: details.groups,
isSubmitting: submission.isSubmitting,
submitDone: submission.submitDone,
errorMsg: submission.submitErrorMsg,
@@ -171,9 +187,7 @@ const mapStateToProps = (state, ownProps) => {
filePickers: submission.filePickers,
notesLength: submission.notesLength,
submissionFilestackData: submission.submissionFilestackData,
- registrants: state.challenge.details.registrants,
- winners: state.challenge.details.winners,
- handle: state.auth.user ? state.auth.user.handle : '',
+ winners: details.winners,
};
};
@@ -208,6 +222,11 @@ function mapDispatchToProps(dispatch) {
setFilePickerUploadProgress: (id, p) => dispatch(a.setFilePickerUploadProgress(id, p)),
updateNotesLength: length => dispatch(a.updateNotesLength(length)),
setSubmissionFilestackData: (id, data) => dispatch(a.setSubmissionFilestackData(id, data)),
+ loadChallengeDetails: (tokens, challengeId) => {
+ const challengeAction = api.challenge;
+ dispatch(challengeAction.getDetailsInit(challengeId));
+ dispatch(challengeAction.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2));
+ },
};
}
diff --git a/src/shared/containers/Terms.jsx b/src/shared/containers/Terms.jsx
index 5a6c1f7f28..195536d0a4 100644
--- a/src/shared/containers/Terms.jsx
+++ b/src/shared/containers/Terms.jsx
@@ -211,15 +211,15 @@ function mapDispatchToProps(dispatch) {
},
loadTermDetails: (tokens, termId) => {
dispatch(actions.terms.getTermDetailsInit(termId));
- dispatch(actions.terms.getTermDetailsDone(termId, tokens.tokenV2));
+ dispatch(actions.terms.getTermDetailsDone(termId, tokens.tokenV3));
},
getDocuSignUrl: (tokens, templateId, returnUrl) => {
dispatch(actions.terms.getDocuSignUrlInit(templateId));
- dispatch(actions.terms.getDocuSignUrlDone(templateId, returnUrl, tokens.tokenV2));
+ dispatch(actions.terms.getDocuSignUrlDone(templateId, returnUrl, tokens.tokenV3));
},
agreeTerm: (tokens, termId) => {
dispatch(actions.terms.agreeTermInit(termId));
- dispatch(actions.terms.agreeTermDone(termId, tokens.tokenV2));
+ dispatch(actions.terms.agreeTermDone(termId, tokens.tokenV3));
},
signDocu: (id) => {
dispatch(termsActions.terms.signDocu(id));
diff --git a/src/shared/containers/challenge-detail/index.jsx b/src/shared/containers/challenge-detail/index.jsx
index 44942bb27a..dab60b189f 100644
--- a/src/shared/containers/challenge-detail/index.jsx
+++ b/src/shared/containers/challenge-detail/index.jsx
@@ -8,6 +8,7 @@
import _ from 'lodash';
import communityActions from 'actions/tc-communities';
+import { isMM as checkIsMM } from 'utils/challenge';
import LoadingPagePlaceholder from 'components/LoadingPagePlaceholder';
import pageActions from 'actions/page';
import ChallengeHeader from 'components/challenge-detail/Header';
@@ -37,7 +38,7 @@ import { actions } from 'topcoder-react-lib';
import { getService } from 'services/contentful';
import {
getDisplayRecommendedChallenges,
- getRecommendedTechnology,
+ getRecommendedTags,
} from 'utils/challenge-detail/helper';
import ogWireframe from
@@ -78,17 +79,20 @@ const DAY = 24 * 60 * MIN;
* @return {String}
*/
function getOgImage(challenge) {
+ const { legacy } = challenge;
+ const { track, subTrack } = legacy;
if (challenge.name.startsWith('LUX -')) return ogLuxChallenge;
if (challenge.name.startsWith('RUX -')) return ogRuxChallenge;
if (challenge.prizes) {
const totalPrize = challenge.prizes.reduce((p, sum) => p + sum, 0);
if (totalPrize > 2500) return ogBigPrizesChallenge;
}
- switch (challenge.subTrack) {
+
+ switch (subTrack) {
case SUBTRACKS.FIRST_2_FINISH: return ogFirst2Finish;
case SUBTRACKS.UI_PROTOTYPE_COMPETITION: {
- const submission = challenge.allPhases
- .find(p => p.phaseType === CHALLENGE_PHASE_TYPES.SUBMISSION);
+ const submission = (challenge.phases || [])
+ .find(p => p.name === CHALLENGE_PHASE_TYPES.SUBMISSION);
if (submission) {
if (submission.duration < 1.1 * DAY) return og24hUiPrototype;
if (submission.duration < 2.1 * DAY) return og48hUiPrototype;
@@ -98,23 +102,13 @@ function getOgImage(challenge) {
case SUBTRACKS.WIREFRAMES: return ogWireframe;
default:
}
- switch (challenge.track) {
+ switch (track) {
case COMPETITION_TRACKS_V3.DEVELOP: return ogDevelopment;
case COMPETITION_TRACKS_V3.DESIGN: return ogUiDesign;
default: return ogImage;
}
}
-function isRegistered(details, registrants, handle) {
- if (details && details.roles && details.roles.includes('Submitter')) {
- return true;
- }
- if (_.find(registrants, r => _.toString(r.handle) === _.toString(handle))) {
- return true;
- }
- return false;
-}
-
// The container component
class ChallengeDetailPageContainer extends React.Component {
constructor(props, context) {
@@ -153,8 +147,8 @@ class ChallengeDetailPageContainer extends React.Component {
getCommunitiesList,
loadChallengeDetails,
challengeId,
- challengeSubtracksMap,
- getSubtracks,
+ challengeTypesMap,
+ getTypes,
allCountries,
reviewTypes,
getAllCountries,
@@ -193,8 +187,8 @@ class ChallengeDetailPageContainer extends React.Component {
getCommunitiesList(auth);
- if (_.isEmpty(challengeSubtracksMap)) {
- getSubtracks();
+ if (_.isEmpty(challengeTypesMap)) {
+ getTypes();
}
if (!reviewTypes.length) {
@@ -211,9 +205,15 @@ class ChallengeDetailPageContainer extends React.Component {
auth,
challenge,
loadingRecommendedChallengesUUID,
+ history,
} = this.props;
- const recommendedTechnology = getRecommendedTechnology(challenge);
+ if (challenge.isLegacyChallenge && !history.location.pathname.includes(challenge.id)) {
+ history.location.pathname = `/challenges/${challenge.id}`; // eslint-disable-line no-param-reassign
+ history.push(history.location.pathname, history.state);
+ }
+
+ const recommendedTechnology = getRecommendedTags(challenge);
if (
challenge
&& challenge.id === challengeId
@@ -229,24 +229,24 @@ class ChallengeDetailPageContainer extends React.Component {
getAllRecommendedChallenges(auth.tokenV3, recommendedTechnology);
}
-
- const {
- thriveArticles,
- } = this.state;
+ const { thriveArticles } = this.state;
const userId = _.get(this, 'props.auth.user.userId');
const nextUserId = _.get(nextProps, 'auth.user.userId');
+
if (userId !== nextUserId) {
nextProps.getCommunitiesList(nextProps.auth);
reloadChallengeDetails(nextProps.auth, challengeId);
}
- if (nextProps.challenge.track && nextProps.challenge.track.toLowerCase() !== 'design'
- && thriveArticles.length === 0) {
- const { technologies } = nextProps.challenge;
- if (technologies.length > 0 && !(technologies.length === 1 && technologies[0] === 'Other')) {
- // for technologies = ['Other', ...], if 'Other' is first, use second value
+
+ const { legacy } = nextProps.challenge;
+ const track = legacy ? legacy.track : nextProps.challenge.track;
+ if (track && track.toLowerCase() !== 'design' && thriveArticles.length === 0) {
+ // filter all tags with value 'Other'
+ const tags = _.filter(nextProps.challenge.tags, tag => tag !== 'Other');
+ if (tags.length > 0) {
this.apiService.getEDUContent({
limit: 3,
- phrase: technologies[0] === 'Other' ? technologies[1] : technologies[0],
+ phrase: tags[0],
types: ['Article'],
}).then((content) => {
// format image file data
@@ -294,8 +294,9 @@ class ChallengeDetailPageContainer extends React.Component {
const {
auth,
challenge,
+ challengeTypes,
challengeId,
- challengeSubtracksMap,
+ challengeTypesMap,
challengesUrl,
checkpointResults,
checkpointResultsUi,
@@ -350,11 +351,18 @@ class ChallengeDetailPageContainer extends React.Component {
} = this.state;
const {
+ legacy,
+ legacyId,
status,
- allPhases,
+ phases,
+ metadata,
} = challenge;
- const isMM = challenge.subTrack && challenge.subTrack.indexOf('MARATHON_MATCH') > -1;
+ const { track } = legacy || {};
+
+ const submissionsViewable = _.find(metadata, { type: 'submissionsViewable' });
+
+ const isLoggedIn = !_.isEmpty(auth.tokenV3);
/* Generation of data for SEO meta-tags. */
let prizesStr;
@@ -364,7 +372,7 @@ class ChallengeDetailPageContainer extends React.Component {
}
const title = challenge.name;
- let description = challenge.introduction || challenge.detailedRequirements;
+ let description = challenge.description || challenge.detailedRequirements;
description = description ? description.slice(0, 256) : '';
description = htmlToText.fromString(description, {
singleNewLineParagraphs: true,
@@ -376,13 +384,8 @@ class ChallengeDetailPageContainer extends React.Component {
? results : null;
const isEmpty = _.isEmpty(challenge);
- const isLegacyMM = challenge.subTrack === 'MARATHON_MATCH' && Boolean(challenge.roundId);
-
- const hasRegistered = isRegistered(
- challenge.userDetails,
- challenge.registrants,
- (auth.user || {}).handle,
- );
+ const isMM = checkIsMM(challenge);
+ const isLegacyMM = isMM && Boolean(challenge.roundId);
if (isLoadingChallenge || isLoadingTerms) {
return ;
@@ -398,15 +401,15 @@ class ChallengeDetailPageContainer extends React.Component {
}
- const phases = {};
- if (allPhases) {
- allPhases.forEach((phase) => {
- phases[_.camelCase(phase.phaseType)] = phase;
- });
- }
const submissionEnded = status === 'COMPLETED'
- || (_.get(phases, 'submission.phaseStatus') !== 'Open'
- && _.get(phases, 'checkpointSubmission.phaseStatus') !== 'Open');
+ || (!_.some(phases, { name: 'Submission', isOpen: true })
+ && !_.some(phases, { name: 'Checkpoint Submission', isOpen: true }));
+
+ const { prizeSets } = challenge;
+ let challengePrizes = [];
+ if (prizeSets && prizeSets[0] && prizeSets[0].type === 'placement') {
+ challengePrizes = prizeSets[0].prizes;
+ }
return (
@@ -436,8 +439,10 @@ class ChallengeDetailPageContainer extends React.Component {
!isEmpty
&& (
)
}
@@ -469,10 +474,10 @@ class ChallengeDetailPageContainer extends React.Component {
challenge={challenge}
challengesUrl={challengesUrl}
communitiesList={communitiesList.data}
- introduction={challenge.introduction}
- detailedRequirements={challenge.detailedRequirements}
+ description={challenge.name}
+ detailedRequirements={challenge.description}
terms={terms}
- hasRegistered={hasRegistered}
+ hasRegistered={challenge.isRegistered}
savingChallenge={savingChallenge}
setSpecsTabState={setSpecsTabState}
specsTabState={specsTabState}
@@ -513,7 +518,7 @@ class ChallengeDetailPageContainer extends React.Component {
)
}
{
- !isEmpty && selectedTab === DETAIL_TABS.SUBMISSIONS
+ !isEmpty && isLoggedIn && selectedTab === DETAIL_TABS.SUBMISSIONS
&& (
this.setState({ submissionsSort: sort })}
- hasRegistered={hasRegistered}
+ hasRegistered={challenge.isRegistered}
unregistering={unregistering}
isLegacyMM={isLegacyMM}
submissionEnded={submissionEnded}
@@ -546,14 +551,15 @@ class ChallengeDetailPageContainer extends React.Component {
this.setState({ mySubmissionsSort: sort })}
@@ -565,34 +571,37 @@ class ChallengeDetailPageContainer extends React.Component {
&& (
)
}
- {
- registerForChallenge(auth, challengeId);
- }}
- />
+ {legacyId && (
+ {
+ registerForChallenge(auth, challengeId);
+ }}
+ />
+ )}
{
!isEmpty && displayRecommendedChallenges.length ? (
) : null
}
@@ -609,6 +618,7 @@ class ChallengeDetailPageContainer extends React.Component {
ChallengeDetailPageContainer.defaultProps = {
challengesUrl: '/challenges',
+ challengeTypes: [],
checkpointResults: null,
checkpoints: {},
communityId: null,
@@ -631,8 +641,9 @@ ChallengeDetailPageContainer.defaultProps = {
ChallengeDetailPageContainer.propTypes = {
auth: PT.shape().isRequired,
challenge: PT.shape().isRequired,
- challengeId: PT.number.isRequired,
- challengeSubtracksMap: PT.shape().isRequired,
+ challengeTypes: PT.arrayOf(PT.shape()),
+ challengeId: PT.string.isRequired,
+ challengeTypesMap: PT.shape().isRequired,
challengesUrl: PT.string,
checkpointResults: PT.arrayOf(PT.shape()),
checkpointResultsUi: PT.shape().isRequired,
@@ -645,7 +656,7 @@ ChallengeDetailPageContainer.propTypes = {
timestamp: PT.number.isRequired,
}).isRequired,
getCommunitiesList: PT.func.isRequired,
- getSubtracks: PT.func.isRequired,
+ getTypes: PT.func.isRequired,
isLoadingChallenge: PT.bool,
isLoadingTerms: PT.bool,
loadChallengeDetails: PT.func.isRequired,
@@ -687,6 +698,7 @@ ChallengeDetailPageContainer.propTypes = {
expandedTags: PT.arrayOf(PT.number).isRequired,
expandTag: PT.func.isRequired,
loadingRecommendedChallengesUUID: PT.string.isRequired,
+ history: PT.shape().isRequired,
};
function mapStateToProps(state, props) {
@@ -705,30 +717,28 @@ function mapStateToProps(state, props) {
if (challenge.submissions) {
challenge.submissions = challenge.submissions.map(submission => ({
...submission,
- registrant: _.find(challenge.registrants, { handle: submission.submitter }),
+ registrant: _.find(challenge.registrants, { memberHandle: submission.createdBy }),
}));
}
- if (mmSubmissions) {
+ if (!_.isEmpty(mmSubmissions)) {
mmSubmissions = mmSubmissions.map((submission) => {
let registrant;
let { member } = submission;
if (auth.user.handle === submission.member) {
mySubmissions = submission.submissions || [];
- mySubmissions = mySubmissions.map((mySubmission, index) => {
- // eslint-disable-next-line no-param-reassign
- mySubmission.id = mySubmissions.length - index;
- return mySubmission;
+ mySubmissions.forEach((mySubmission, index) => {
+ mySubmissions[index].id = mySubmissions.length - index;
});
}
- let submissionDetail = _.find(challenge.submissions, { submitter: submission.member });
+ let submissionDetail = _.find(challenge.submissions, { createdBy: submission.createdBy });
if (!submissionDetail) {
// get submission detail from submissions challenge detail
- submissionDetail = _.find(challenge.submissions, s => (`${s.submitterId}` === `${submission.member}`));
+ submissionDetail = _.find(challenge.submissions, s => (`${s.memberId}` === `${submission.memberId}`));
}
if (submissionDetail) {
- member = submissionDetail.submitter;
+ member = submissionDetail.createdBy;
({ registrant } = submissionDetail);
}
@@ -747,18 +757,20 @@ function mapStateToProps(state, props) {
member,
});
});
+ } else {
+ mySubmissions = _.filter(challenge.submissions, s => (`${s.memberId}` === `${auth.user.userId}`));
}
}
-
return {
auth: state.auth,
challenge,
+ challengeTypes: cl.challengeTypes,
recommendedChallenges: cl.recommendedChallenges,
loadingRecommendedChallengesUUID: cl.loadingRecommendedChallengesUUID,
expandedTags: cl.expandedTags,
- challengeId: Number(props.match.params.challengeId),
+ challengeId: String(props.match.params.challengeId),
challengesUrl: props.challengesUrl,
- challengeSubtracksMap: state.challengeListing.challengeSubtracksMap,
+ challengeTypesMap: state.challengeListing.challengeTypesMap,
checkpointResults: (state.challenge.checkpoints || {}).checkpointResults,
checkpointResultsUi: state.page.challengeDetails.checkpoints,
checkpoints: state.challenge.checkpoints || {},
@@ -828,12 +840,12 @@ const mapDispatchToProps = (dispatch) => {
dispatch(a.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2))
.then((res) => {
const ch = res.payload;
- if (ch.track === 'DESIGN') {
- const p = ch.allPhases
- .filter(x => x.phaseType === 'Checkpoint Review');
- if (p.length && p[0].phaseStatus === 'Closed') {
+ if (ch.legacy.track === 'DESIGN') {
+ const p = ch.phases || []
+ .filter(x => x.name === 'Checkpoint Review');
+ if (p.length && !p[0].isOpen) {
dispatch(a.fetchCheckpointsInit());
- dispatch(a.fetchCheckpointsDone(tokens.tokenV2, challengeId));
+ dispatch(a.fetchCheckpointsDone(tokens.tokenV2, ch.legacyId));
} else dispatch(a.dropCheckpoints());
} else dispatch(a.dropCheckpoints());
if (ch.status === 'COMPLETED') {
@@ -852,11 +864,11 @@ const mapDispatchToProps = (dispatch) => {
const a = actions.challenge;
dispatch(a.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2))
.then((challengeDetails) => {
- if (challengeDetails.track === 'DESIGN') {
- const p = challengeDetails.allPhases
- .filter(x => x.phaseType === 'Checkpoint Review');
- if (p.length && p[0].phaseStatus === 'Closed') {
- dispatch(a.fetchCheckpointsDone(tokens.tokenV2, challengeId));
+ if (challengeDetails.legacy.track === 'DESIGN') {
+ const p = challengeDetails.phases || []
+ .filter(x => x.name === 'Checkpoint Review');
+ if (p.length && !p[0].isOpen) {
+ dispatch(a.fetchCheckpointsDone(tokens.tokenV2, challengeDetails.legacyId));
}
}
return challengeDetails;
@@ -896,10 +908,10 @@ const mapDispatchToProps = (dispatch) => {
},
selectChallengeDetailsTab:
tab => dispatch(challengeDetailsActions.page.challengeDetails.selectTab(tab)),
- getSubtracks: () => {
+ getTypes: () => {
const cl = challengeListingActions.challengeListing;
- dispatch(cl.getChallengeSubtracksInit());
- dispatch(cl.getChallengeSubtracksDone());
+ dispatch(cl.getChallengeTypesInit());
+ dispatch(cl.getChallengeTypesDone());
},
openTermsModal: (term) => {
dispatch(termsActions.terms.openTermsModal('ANY', term));
diff --git a/src/shared/containers/challenge-listing/FilterPanel.jsx b/src/shared/containers/challenge-listing/FilterPanel.jsx
index 9a4f820dba..7fe064ce44 100644
--- a/src/shared/containers/challenge-listing/FilterPanel.jsx
+++ b/src/shared/containers/challenge-listing/FilterPanel.jsx
@@ -43,9 +43,9 @@ export class Container extends React.Component {
componentDidMount() {
const {
getKeywords,
- getSubtracks,
+ getTypes,
loadingKeywords,
- loadingSubtracks,
+ loadingTypes,
setFilterState,
filterState,
communityList,
@@ -57,7 +57,7 @@ export class Container extends React.Component {
&& (Date.now() - communityList.timestamp > 5 * MIN)) {
getCommunityList(auth);
}
- if (!loadingSubtracks) getSubtracks();
+ if (!loadingTypes) getTypes();
if (!loadingKeywords) getKeywords();
@@ -150,11 +150,11 @@ Container.propTypes = {
challenges: PT.arrayOf(PT.shape()),
selectedCommunityId: PT.string.isRequired,
getKeywords: PT.func.isRequired,
- getSubtracks: PT.func.isRequired,
+ getTypes: PT.func.isRequired,
isSavingFilter: PT.bool,
savedFilters: PT.arrayOf(PT.shape()).isRequired,
loadingKeywords: PT.bool.isRequired,
- loadingSubtracks: PT.bool.isRequired,
+ loadingTypes: PT.bool.isRequired,
saveFilter: PT.func.isRequired,
selectBucket: PT.func.isRequired,
setFilterState: PT.func.isRequired,
@@ -168,9 +168,9 @@ function mapDispatchToProps(dispatch) {
const sa = sidebarActions.challengeListing.sidebar;
return {
...bindActionCreators(a, dispatch),
- getSubtracks: () => {
- dispatch(cla.getChallengeSubtracksInit());
- dispatch(cla.getChallengeSubtracksDone());
+ getTypes: () => {
+ dispatch(cla.getChallengeTypesInit());
+ dispatch(cla.getChallengeTypesDone());
},
getCommunityList: (auth) => {
const uuid = shortId();
@@ -203,9 +203,9 @@ function mapStateToProps(state, ownProps) {
defaultCommunityId: ownProps.defaultCommunityId,
filterState: cl.filter,
loadingKeywords: cl.loadingChallengeTags,
- loadingSubtracks: cl.loadingChallengeSubtracks,
+ loadingTypes: cl.loadingChallengeTypes,
validKeywords: cl.challengeTags,
- validSubtracks: cl.challengeSubtracks,
+ validTypes: cl.challengeTypes,
selectedCommunityId: cl.selectedCommunityId,
auth: state.auth,
tokenV2: state.auth.tokenV2,
diff --git a/src/shared/containers/challenge-listing/Listing/index.jsx b/src/shared/containers/challenge-listing/Listing/index.jsx
index 907c345368..8b27e52269 100644
--- a/src/shared/containers/challenge-listing/Listing/index.jsx
+++ b/src/shared/containers/challenge-listing/Listing/index.jsx
@@ -26,6 +26,7 @@ import communityActions from 'actions/tc-communities';
import { BUCKETS } from 'utils/challenge-listing/buckets';
import { MetaTags } from 'topcoder-react-utils';
import { USER_GROUP_MAXAGE } from 'config';
+import { updateChallengeType } from 'utils/challenge';
import ogImage from '../../../../assets/images/og_image.jpg';
import style from './styles.scss';
@@ -82,6 +83,7 @@ export class ListingContainer extends React.Component {
getRestActiveChallenges,
meta,
loadingActiveChallengesUUID,
+ selectBucketDone,
} = this.props;
const oldUserId = _.get(prevProps, 'auth.user.userId');
const userId = _.get(this.props, 'auth.user.userId');
@@ -101,8 +103,13 @@ export class ListingContainer extends React.Component {
if (!loadingActiveChallengesUUID && !_.isEmpty(meta) && !allActiveChallengesLoaded
&& BUCKETS.PAST !== activeBucket) {
- getRestActiveChallenges(auth.tokenV3);
+ const f = this.getBackendFilter();
+ getRestActiveChallenges(auth.tokenV3, f.back);
}
+
+ setTimeout(() => {
+ selectBucketDone();
+ }, 10);
}
componentWillUnmount() {
@@ -128,8 +135,8 @@ export class ListingContainer extends React.Component {
);
if (communityFilter) communityFilter = communityFilter.challengeFilter;
if (communityFilter) filter = combine(filter, communityFilter);
- if (communityId && groupIds.length > 0) {
- filter.groupIds = groupIds;
+ if (communityId && !_.isEmpty(groupIds)) {
+ filter.groups = groupIds;
}
return {
back: mapToBackend(filter),
@@ -142,6 +149,7 @@ export class ListingContainer extends React.Component {
auth,
getActiveChallenges,
lastRequestedPageOfActiveChallenges,
+ getUserChallenges,
} = this.props;
const f = this.getBackendFilter();
getActiveChallenges(
@@ -150,6 +158,10 @@ export class ListingContainer extends React.Component {
auth.tokenV3,
f.front,
);
+ if (auth.tokenV3) {
+ const userId = _.get(auth.user, 'userId');
+ getUserChallenges(userId, auth.tokenV3);
+ }
}
render() {
@@ -160,8 +172,8 @@ export class ListingContainer extends React.Component {
activeBucket,
ChallengeListingBanner,
challenges,
+ challengeTypes,
challengesUrl,
- challengeSubtracks,
challengeTags,
communityFilters,
communityId,
@@ -196,10 +208,14 @@ export class ListingContainer extends React.Component {
setSort,
sorts,
hideTcLinksInSidebarFooter,
+ isBucketSwitching,
+ userChallenges,
} = this.props;
const { tokenV3 } = auth;
+ const isLoggedIn = !_.isEmpty(auth.tokenV3);
+
let loadMorePast;
if (!allPastChallengesLoaded) {
loadMorePast = () => {
@@ -255,7 +271,7 @@ export class ListingContainer extends React.Component {
);
@@ -303,6 +322,7 @@ export class ListingContainer extends React.Component {
ListingContainer.defaultProps = {
ChallengeListingBanner: null,
+ challengeTypes: [],
defaultCommunityId: '',
extraBucket: null,
hideSrm: false,
@@ -319,6 +339,8 @@ ListingContainer.defaultProps = {
prizeMode: 'money-usd',
queryBucket: BUCKETS.ALL,
meta: {},
+ isBucketSwitching: false,
+ userChallenges: [],
};
ListingContainer.propTypes = {
@@ -332,8 +354,8 @@ ListingContainer.propTypes = {
allReviewOpportunitiesLoaded: PT.bool.isRequired,
ChallengeListingBanner: PT.node,
challenges: PT.arrayOf(PT.shape({})).isRequired,
+ challengeTypes: PT.arrayOf(PT.shape()),
challengesUrl: PT.string,
- challengeSubtracks: PT.arrayOf(PT.shape()).isRequired,
challengeTags: PT.arrayOf(PT.string).isRequired,
communitiesList: PT.shape({
data: PT.arrayOf(PT.shape({
@@ -386,11 +408,18 @@ ListingContainer.propTypes = {
expandTag: PT.func.isRequired,
queryBucket: PT.string,
meta: PT.shape(),
+ isBucketSwitching: PT.bool,
+ selectBucketDone: PT.func.isRequired,
+ userChallenges: PT.arrayOf(PT.string),
+ getUserChallenges: PT.func.isRequired,
};
const mapStateToProps = (state, ownProps) => {
const cl = state.challengeListing;
const tc = state.tcCommunities;
+ updateChallengeType(
+ state.challengeListing.challenges, state.challengeListing.challengeTypesMap,
+ );
return {
auth: state.auth,
allActiveChallengesLoaded: cl.allActiveChallengesLoaded,
@@ -398,7 +427,7 @@ const mapStateToProps = (state, ownProps) => {
allReviewOpportunitiesLoaded: cl.allReviewOpportunitiesLoaded,
filter: cl.filter,
challenges: cl.challenges,
- challengeSubtracks: cl.challengeSubtracks,
+ challengeTypes: cl.challengeTypes,
challengeTags: cl.challengeTags,
communitiesList: tc.list,
communityFilters: tc.list.data,
@@ -413,7 +442,7 @@ const mapStateToProps = (state, ownProps) => {
loadingActiveChallengesUUID: cl.loadingActiveChallengesUUID,
loadingPastChallengesUUID: cl.loadingPastChallengesUUID,
loadingReviewOpportunitiesUUID: cl.loadingReviewOpportunitiesUUID,
- loadingChallengeSubtracks: cl.loadingChallengeSubtracks,
+ loadingChallengeTypes: cl.loadingChallengeTypes,
loadingChallengeTags: cl.loadingChallengeTags,
newChallengeDetails: ownProps.newChallengeDetails,
openChallengesInNewTabs: ownProps.openChallengesInNewTabs,
@@ -423,8 +452,10 @@ const mapStateToProps = (state, ownProps) => {
selectedCommunityId: cl.selectedCommunityId,
sorts: cl.sorts,
activeBucket: cl.sidebar.activeBucket,
+ isBucketSwitching: cl.sidebar.isBucketSwitching,
expandedTags: cl.expandedTags,
meta: cl.meta,
+ userChallenges: cl.userChallenges,
};
};
@@ -441,10 +472,10 @@ function mapDispatchToProps(dispatch) {
dispatch(a.getActiveChallengesInit(uuid, page, frontFilter));
dispatch(a.getActiveChallengesDone(uuid, page, filter, token, frontFilter));
},
- getRestActiveChallenges: (token) => {
+ getRestActiveChallenges: (token, filter) => {
const uuid = shortId();
dispatch(a.getRestActiveChallengesInit(uuid));
- dispatch(a.getRestActiveChallengesDone(uuid, token));
+ dispatch(a.getRestActiveChallengesDone(uuid, token, filter));
},
getCommunitiesList: (auth) => {
const uuid = shortId();
@@ -462,6 +493,7 @@ function mapDispatchToProps(dispatch) {
dispatch(a.getReviewOpportunitiesDone(uuid, page, token));
},
selectBucket: bucket => dispatch(sa.selectBucket(bucket)),
+ selectBucketDone: () => dispatch(sa.selectBucketDone()),
selectChallengeDetailsTab:
tab => dispatch(challengeDetailsActions.page.challengeDetails.selectTab(tab)),
selectCommunity: id => dispatch(a.selectCommunity(id)),
@@ -470,6 +502,11 @@ function mapDispatchToProps(dispatch) {
setSort: (bucket, sort) => dispatch(a.setSort(bucket, sort)),
markHeaderMenu: () => dispatch(ah.setCurrentNav('Compete', 'All Challenges')),
expandTag: id => dispatch(a.expandTag(id)),
+ getUserChallenges: (userId, tokenV3) => {
+ const uuid = shortId();
+ dispatch(a.getUserChallengesInit(uuid));
+ dispatch(a.getUserChallengesDone(userId, tokenV3));
+ },
};
}
diff --git a/src/shared/containers/challenge-listing/Sidebar.jsx b/src/shared/containers/challenge-listing/Sidebar.jsx
index 847a648b52..dd89d7795b 100644
--- a/src/shared/containers/challenge-listing/Sidebar.jsx
+++ b/src/shared/containers/challenge-listing/Sidebar.jsx
@@ -13,6 +13,7 @@ import Sidebar from 'components/challenge-listing/Sidebar';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { BUCKETS, getBuckets } from 'utils/challenge-listing/buckets';
+import { updateChallengeType } from 'utils/challenge';
export const SidebarPureComponent = Sidebar;
@@ -58,10 +59,10 @@ export class SidebarContainer extends React.Component {
tokenV2,
updateAllSavedFilters,
updateSavedFilter,
- user,
+ userChallenges,
} = this.props;
- const buckets = getBuckets(user && user.handle);
+ const buckets = getBuckets(userChallenges);
if (extraBucket) {
buckets[extraBucket.name] = extraBucket;
@@ -114,6 +115,7 @@ SidebarContainer.defaultProps = {
selectedCommunityId: '',
tokenV2: null,
user: null,
+ userChallenges: [],
};
SidebarContainer.propTypes = {
@@ -134,6 +136,7 @@ SidebarContainer.propTypes = {
updateAllSavedFilters: PT.func.isRequired,
updateSavedFilter: PT.func.isRequired,
user: PT.shape(),
+ userChallenges: PT.arrayOf(PT.string),
};
function mapDispatchToProps(dispatch) {
@@ -151,6 +154,9 @@ function mapDispatchToProps(dispatch) {
function mapStateToProps(state, ownProps) {
const { activeBucket } = state.challengeListing.sidebar;
const pending = _.keys(state.challengeListing.pendingRequests);
+ updateChallengeType(
+ state.challengeListing.challenges, state.challengeListing.challengeTypesMap,
+ );
return {
...state.challengeListing.sidebar,
challenges: state.challengeListing.challenges,
@@ -163,6 +169,7 @@ function mapStateToProps(state, ownProps) {
selectedCommunityId: state.challengeListing.selectedCommunityId,
tokenV2: state.auth.tokenV2,
user: state.auth.user,
+ userChallenges: state.challengeListing.userChallenges,
};
}
diff --git a/src/shared/containers/tc-communities/cognitive/home.jsx b/src/shared/containers/tc-communities/cognitive/home.jsx
index 747d65a918..aa817e8b7a 100644
--- a/src/shared/containers/tc-communities/cognitive/home.jsx
+++ b/src/shared/containers/tc-communities/cognitive/home.jsx
@@ -8,6 +8,7 @@ import React from 'react';
import resourcesActions from 'actions/page/communities/cognitive/resources';
import shortId from 'shortid';
import { USER_GROUP_MAXAGE } from 'config';
+import { updateChallengeType } from 'utils/challenge';
import { connect } from 'react-redux';
import { challenge as challengeUtils } from 'topcoder-react-lib';
@@ -53,7 +54,7 @@ class HomeContainer extends React.Component {
if (filter) {
filter = Filter.getFilterFunction(filter.challengeFilter);
challenges = activeChallenges
- .filter(x => x.status === 'ACTIVE')
+ .filter(x => x.status === 'Active')
.filter(filter)
.sort((a, b) => moment(a.registrationStartDate).diff(b.registrationStartDate));
}
@@ -96,6 +97,9 @@ HomeContainer.propTypes = {
};
function mapStateToProps(state) {
+ updateChallengeType(
+ state.challengeListing.challenges, state.challengeListing.challengeTypesMap,
+ );
return {
auth: state.auth,
activeChallenges: state.challengeListing.challenges,
diff --git a/src/shared/containers/tco/scoreboard/index.jsx b/src/shared/containers/tco/scoreboard/index.jsx
index 9e275b0d1c..88f4bf7934 100644
--- a/src/shared/containers/tco/scoreboard/index.jsx
+++ b/src/shared/containers/tco/scoreboard/index.jsx
@@ -58,14 +58,14 @@ class ScoreboardPageContainer extends React.Component {
}
ScoreboardPageContainer.defaultProps = {
- challengeId: 0,
+ challengeId: '',
scoreboard: null,
loading: false,
loadScoreboard: _.noop,
};
ScoreboardPageContainer.propTypes = {
- challengeId: PT.number,
+ challengeId: PT.string,
scoreboard: PT.shape({
details: PT.any,
}),
@@ -76,7 +76,7 @@ ScoreboardPageContainer.propTypes = {
function mapStateToProps(state, props) {
return {
scoreboard: state.scoreboard,
- challengeId: Number(props.match.params.challengeId),
+ challengeId: String(props.match.params.challengeId),
};
}
diff --git a/src/shared/containers/terms-detail/index.jsx b/src/shared/containers/terms-detail/index.jsx
index 28539fc95e..0f79a1a904 100644
--- a/src/shared/containers/terms-detail/index.jsx
+++ b/src/shared/containers/terms-detail/index.jsx
@@ -216,15 +216,15 @@ function mapDispatchToProps(dispatch) {
return {
loadTermDetails: (tokens, termId) => {
dispatch(actions.terms.getTermDetailsInit(termId));
- dispatch(actions.terms.getTermDetailsDone(termId, tokens.tokenV2, false));
+ dispatch(actions.terms.getTermDetailsDone(termId, tokens.tokenV3, false));
},
getDocuSignUrl: (tokens, templateId, returnUrl) => {
dispatch(actions.terms.getDocuSignUrlInit(templateId));
- dispatch(actions.terms.getDocuSignUrlDone(templateId, returnUrl, tokens.tokenV2));
+ dispatch(actions.terms.getDocuSignUrlDone(templateId, returnUrl, tokens.tokenV3));
},
agreeTerms: (tokens, termId) => {
dispatch(actions.terms.agreeTermInit(termId));
- dispatch(actions.terms.agreeTermDone(termId, tokens.tokenV2));
+ dispatch(actions.terms.agreeTermDone(termId, tokens.tokenV3));
},
};
}
diff --git a/src/shared/reducers/challenge-listing/index.js b/src/shared/reducers/challenge-listing/index.js
index 522c1e6724..6e83a9d969 100644
--- a/src/shared/reducers/challenge-listing/index.js
+++ b/src/shared/reducers/challenge-listing/index.js
@@ -41,7 +41,7 @@ function onGetAllActiveChallengesDone(state, { error, payload }) {
const ids = new Set();
loaded.forEach(item => ids.add(item.id));
const challenges = state.challenges
- .filter(item => item.status !== 'ACTIVE' && !ids.has(item.id))
+ .filter(item => item.status !== 'Active' && !ids.has(item.id))
.concat(loaded);
return {
@@ -52,6 +52,24 @@ function onGetAllActiveChallengesDone(state, { error, payload }) {
};
}
+function onGetAllUserChallengesInit(state, { payload }) {
+ return { ...state, loadingActiveChallengesUUID: payload };
+}
+function onGetAllUserChallengesDone(state, { error, payload }) {
+ if (error) {
+ logger.error(payload);
+ return state;
+ }
+ const { challenges } = payload || [];
+
+ return {
+ ...state,
+ challenges,
+ lastUpdateOfActiveChallenges: Date.now(),
+ loadingActiveChallengesUUID: '',
+ };
+}
+
/**
* Called when 1st page of ative challenges is loaded from `/challenges` api
* @param {*} state
@@ -75,7 +93,7 @@ function onGetActiveChallengesDone(state, { error, payload }) {
* loaded to the state before. */
const filter = state.lastRequestedPageOfActiveChallenges
? item => !ids.has(item.id)
- : item => !ids.has(item.id) && item.status !== 'ACTIVE';
+ : item => !ids.has(item.id) && item.status !== 'Active';
const challenges = state.challenges
.filter(filter)
@@ -165,21 +183,17 @@ function onGetAllRecommendedChallengesDone(state, { error, payload }) {
logger.error(payload);
return state;
}
- const {
- uuid,
- challenges,
- technologies,
- } = payload;
+ const { uuid, challenges, tag } = payload;
if (uuid !== state.loadingRecommendedChallengesUUID) return state;
const { recommendedChallenges } = state;
- recommendedChallenges[technologies] = {
+ recommendedChallenges[tag] = {
challenges,
lastUpdateOfActiveChallenges: Date.now(),
};
return {
...state,
recommendedChallenges,
- loadingRecommendedChallengesTechnologies: technologies,
+ loadingRecommendedChallengesTechnologies: tag,
loadingRecommendedChallengesUUID: '',
};
}
@@ -244,13 +258,13 @@ function onUnregisterDone(state, { error, payload }) {
* @param {Object} action
* @return {Object}
*/
-function onGetChallengeSubtracksDone(state, action) {
+function onGetChallengeTypesDone(state, action) {
if (action.error) logger.error(action.payload);
return {
...state,
- challengeSubtracks: action.error ? [] : action.payload,
- challengeSubtracksMap: action.error ? {} : _.keyBy(action.payload, 'subTrack'),
- loadingChallengeSubtracks: false,
+ challengeTypes: action.error ? [] : action.payload,
+ challengeTypesMap: action.error ? {} : _.keyBy(action.payload, 'id'),
+ loadingChallengeTypes: false,
};
}
@@ -465,6 +479,31 @@ function onGetSrmsDone(state, { error, payload }) {
};
}
+/**
+ * Handles CHALLENGE_LISTING/GET_USER_CHALLENGES_INIT action
+ * @param {Object} state
+ * @return {Object} New state.
+ */
+function onGetUserChallengesInit(state) {
+ return {
+ ...state,
+ userChallenges: [],
+ };
+}
+
+/**
+ * Handles CHALLENGE_LISTING/GET_USER_CHALLENGES_DONE action
+ * @param {Object} state
+ * @param {Object} payload
+ * @return {Object} New state.
+ */
+function onGetUserChallengesDone(state, { payload }) {
+ return {
+ ...state,
+ userChallenges: payload,
+ };
+}
+
/**
* Creates a new Challenge Listing reducer with the specified initial state.
* @param {Object} initialState Optional. Initial state.
@@ -506,6 +545,9 @@ function create(initialState) {
[a.getAllActiveChallengesInit]: onGetAllActiveChallengesInit,
[a.getAllActiveChallengesDone]: onGetAllActiveChallengesDone,
+ [a.getAllUserChallengesInit]: onGetAllUserChallengesInit,
+ [a.getAllUserChallengesDone]: onGetAllUserChallengesDone,
+
[a.getAllRecommendedChallengesInit]: onGetAllRecommendedChallengesInit,
[a.getAllRecommendedChallengesDone]: onGetAllRecommendedChallengesDone,
@@ -518,11 +560,11 @@ function create(initialState) {
[a.getRestActiveChallengesInit]: onGetRestActiveChallengesInit,
[a.getRestActiveChallengesDone]: onGetRestActiveChallengesDone,
- [a.getChallengeSubtracksInit]: state => ({
+ [a.getChallengeTypesInit]: state => ({
...state,
- loadingChallengeSubtracks: true,
+ loadingChallengetypes: true,
}),
- [a.getChallengeSubtracksDone]: onGetChallengeSubtracksDone,
+ [a.getChallengeTypesDone]: onGetChallengeTypesDone,
[a.getChallengeTagsInit]: state => ({
...state,
@@ -539,6 +581,9 @@ function create(initialState) {
[a.getSrmsInit]: onGetSrmsInit,
[a.getSrmsDone]: onGetSrmsDone,
+ [a.getUserChallengesInit]: onGetUserChallengesInit,
+ [a.getUserChallengesDone]: onGetUserChallengesDone,
+
[a.selectCommunity]: onSelectCommunity,
[a.setFilter]: onSetFilter,
@@ -556,8 +601,8 @@ function create(initialState) {
challenges: [],
recommendedChallenges: {},
- challengeSubtracks: [],
- challengeSubtracksMap: {},
+ challengeTypes: [],
+ challengeTypesMap: {},
challengeTags: [],
expandedTags: [],
@@ -578,7 +623,7 @@ function create(initialState) {
loadingPastChallengesUUID: '',
loadingReviewOpportunitiesUUID: '',
- loadingChallengeSubtracks: false,
+ loadingChallengeTypes: false,
loadingChallengeTags: false,
reviewOpportunities: [],
diff --git a/src/shared/reducers/challenge-listing/sidebar.js b/src/shared/reducers/challenge-listing/sidebar.js
index 9114eeab5f..3c9edfb758 100644
--- a/src/shared/reducers/challenge-listing/sidebar.js
+++ b/src/shared/reducers/challenge-listing/sidebar.js
@@ -129,7 +129,18 @@ function onSelectBucket(state, { payload }) {
updateQuery({ bucket: payload });
break;
}
- return { ...state, activeBucket: payload };
+ return {
+ ...state,
+ activeBucket: payload,
+ isBucketSwitching: true,
+ };
+}
+
+function onSelectBucketDone(state) {
+ return {
+ ...state,
+ isBucketSwitching: false,
+ };
}
function onSelectSavedFilter(state, { payload }) {
@@ -181,6 +192,7 @@ function create(initialState = {}) {
isSavingFilter: true,
}),
[a.selectBucket]: onSelectBucket,
+ [a.selectBucketDone]: onSelectBucketDone,
[a.selectSavedFilter]: onSelectSavedFilter,
[a.setEditSavedFiltersMode]: (state, { payload }) => ({
...state,
diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js
index e457d88e62..dac86033f4 100644
--- a/src/shared/reducers/index.js
+++ b/src/shared/reducers/index.js
@@ -47,12 +47,12 @@ function generateSsrOptions(req) {
const res = {
auth: getAuthTokens(req),
};
- if (req.url.match(/^\/challenges\/\d+\/my-submissions/)) {
- const challengeId = req.url.match(/\d+/)[0];
+ if (req.url.match(/^\/challenges\/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})\/my-submissions/)) {
+ const challengeId = req.url.match(/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})/)[0];
_.set(res, 'challenge.challengeDetails.id', challengeId);
_.set(res, 'challenge.challengeDetails.mySubmission', true);
- } else if (req.url.match(/\/challenges\/\d+([?/].*)?$/)) {
- const challengeId = req.url.match(/\d+/)[0];
+ } else if (req.url.match(/\/challenges\/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})([?/].*)?$/)) {
+ const challengeId = req.url.match(/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})/)[0];
_.set(res, 'challenge.challengeDetails.id', challengeId);
}
@@ -64,8 +64,8 @@ function generateSsrOptions(req) {
let entity;
// if it's challenge details page
- if (req.url.match(/^\/challenges\/\d+/)) {
- const challengeId = req.url.match(/\d+/)[0];
+ if (req.url.match(/^\/challenges\/((([\w]{4,12}-?){5}|\d{5,8}))/)) {
+ const challengeId = req.url.match(/((([\w]{4,12}-?){5}|\d{5,8}))/)[0];
entity = { type: 'challenge', id: challengeId };
}
diff --git a/src/shared/reducers/page/submission/index.js b/src/shared/reducers/page/submission/index.js
index 4bfed414f3..7f9c598f9d 100644
--- a/src/shared/reducers/page/submission/index.js
+++ b/src/shared/reducers/page/submission/index.js
@@ -179,7 +179,7 @@ function create(initialState) {
uploadProgress: 0,
filePickers: [],
submissionFilestackData: {
- challengeId: 0,
+ challengeId: '',
fileUrl: '',
filename: '',
mimetype: '',
diff --git a/src/shared/reducers/page/submission_management.js b/src/shared/reducers/page/submission_management.js
index bdb8fcd2b4..3d4aaa3f09 100644
--- a/src/shared/reducers/page/submission_management.js
+++ b/src/shared/reducers/page/submission_management.js
@@ -28,20 +28,20 @@ function create(initialState = {}) {
[a.cancelDelete]: state => ({
...state,
showModal: false,
- toBeDeletedId: 0,
+ toBeDeletedId: '',
}),
'SMP/DELETE_SUBMISSION_DONE': state => ({
...state,
deletingSubmission: false,
showModal: false,
- toBeDeletedId: 0,
+ toBeDeletedId: '',
}),
}, _.defaults(initialState, {
showDetails: {},
showModal: false,
- toBeDeletedId: 0,
+ toBeDeletedId: '',
}));
}
diff --git a/src/shared/reducers/reviewOpportunity.js b/src/shared/reducers/reviewOpportunity.js
index b193e00bf6..5ae971a350 100644
--- a/src/shared/reducers/reviewOpportunity.js
+++ b/src/shared/reducers/reviewOpportunity.js
@@ -15,10 +15,9 @@ import { reducers } from 'topcoder-react-lib';
*/
export function factory(req) {
const options = {};
-
- if (req && req.url.match(/^\/challenges\/\d{8}\/review-opportunities/)) {
+ if (req && req.url.match(/^\/challenges\/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})\/review-opportunities/)) {
options.auth = getAuthTokens(req);
- const challengeId = req.url.match(/\d+/)[0];
+ const challengeId = req.url.match(/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})/)[0];
_.set(options, 'reviewOpportunity.challenge.id', challengeId);
}
diff --git a/src/shared/reducers/terms.js b/src/shared/reducers/terms.js
index 13c1f54a61..9af66a28f5 100644
--- a/src/shared/reducers/terms.js
+++ b/src/shared/reducers/terms.js
@@ -154,7 +154,7 @@ function onAgreeTermDone(state, action) {
}
if (action.payload.success) {
const terms = _.cloneDeep(state.terms);
- const term = _.find(terms, ['termsOfUseId', action.payload.termId]);
+ const term = _.find(terms, ['id', action.payload.termId]);
term.agreed = true;
const selectedTerm = _.find(terms, t => !t.agreed);
return {
@@ -216,7 +216,7 @@ function onCloseTermsModal(state, { payload }) {
*/
function onSignDocu(state, action) {
const terms = _.cloneDeep(state.terms);
- const term = _.find(terms, ['termsOfUseId', action.payload]);
+ const term = _.find(terms, ['id', action.payload]);
term.agreed = true;
const selectedTerm = _.find(terms, t => !t.agreed);
return {
@@ -322,8 +322,8 @@ export function factory(req) {
let entity;
// if it's challenge details page
- if (req.url.match(/^\/challenges\/\d+/)) {
- const challengeId = req.url.match(/\d+/)[0];
+ if (req.url.match(/^\/challenges\/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})/)) {
+ const challengeId = req.url.match(/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})/)[0];
entity = { type: 'challenge', id: challengeId };
}
diff --git a/src/shared/routes/Communities/Blockchain/Routes.jsx b/src/shared/routes/Communities/Blockchain/Routes.jsx
index c9a88ebdef..bcf49f27bf 100644
--- a/src/shared/routes/Communities/Blockchain/Routes.jsx
+++ b/src/shared/routes/Communities/Blockchain/Routes.jsx
@@ -93,7 +93,7 @@ export default function Blockchain({ base, member, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -101,7 +101,7 @@ export default function Blockchain({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
}
diff --git a/src/shared/routes/Communities/CS/Routes.jsx b/src/shared/routes/Communities/CS/Routes.jsx
index eba6367e08..51b6e4368e 100644
--- a/src/shared/routes/Communities/CS/Routes.jsx
+++ b/src/shared/routes/Communities/CS/Routes.jsx
@@ -55,7 +55,7 @@ export default function CS({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
SubmissionManagement({
@@ -76,7 +76,7 @@ export default function CS({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -83,7 +83,7 @@ export default function Cognitive({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -91,7 +91,7 @@ export default function Cognitive({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -56,7 +56,7 @@ export default function CS({ base, meta }) {
challengesUrl: `${base}/work`,
})}
exact
- path={`${base}/work/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/work/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -64,7 +64,7 @@ export default function CS({ base, meta }) {
challengesUrl: `${base}/work`,
})}
exact
- path={`${base}/work/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/work/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -62,7 +62,7 @@ export default function Community2({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/DemoExpert/Routes.jsx b/src/shared/routes/Communities/DemoExpert/Routes.jsx
index 8bec1b6a4f..e843938075 100644
--- a/src/shared/routes/Communities/DemoExpert/Routes.jsx
+++ b/src/shared/routes/Communities/DemoExpert/Routes.jsx
@@ -54,7 +54,7 @@ export default function DemoExpert({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -62,7 +62,7 @@ export default function DemoExpert({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/Mobile/Routes.jsx b/src/shared/routes/Communities/Mobile/Routes.jsx
index b01b84a89e..92a94cb724 100644
--- a/src/shared/routes/Communities/Mobile/Routes.jsx
+++ b/src/shared/routes/Communities/Mobile/Routes.jsx
@@ -67,7 +67,7 @@ export default function Mobile({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -75,7 +75,7 @@ export default function Mobile({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -83,7 +83,7 @@ export default function Mobile({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -62,7 +62,7 @@ export default function QA({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/SRMx/Routes.jsx b/src/shared/routes/Communities/SRMx/Routes.jsx
index d7b8867084..cc658a9606 100644
--- a/src/shared/routes/Communities/SRMx/Routes.jsx
+++ b/src/shared/routes/Communities/SRMx/Routes.jsx
@@ -54,7 +54,7 @@ export default function SRMx({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -62,7 +62,7 @@ export default function SRMx({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/TaskForce/Routes.jsx b/src/shared/routes/Communities/TaskForce/Routes.jsx
index fb4ccc8db3..28a718e003 100644
--- a/src/shared/routes/Communities/TaskForce/Routes.jsx
+++ b/src/shared/routes/Communities/TaskForce/Routes.jsx
@@ -53,7 +53,7 @@ export default function TaskForce({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -61,7 +61,7 @@ export default function TaskForce({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -69,7 +69,7 @@ export default function TaskForce({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -63,7 +63,7 @@ export default function TcProdDev({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/Veterans/Routes.jsx b/src/shared/routes/Communities/Veterans/Routes.jsx
index f33789e818..d3defe66c3 100644
--- a/src/shared/routes/Communities/Veterans/Routes.jsx
+++ b/src/shared/routes/Communities/Veterans/Routes.jsx
@@ -33,7 +33,7 @@ export default function Veterans({ base, member, meta }) {
registerBucket(ID, {
filter: {
...meta.challengeFilter,
- status: 'ACTIVE',
+ status: 'Active',
},
hideCount: false,
name: 'Active Veterans Challenges',
@@ -82,7 +82,7 @@ export default function Veterans({ base, member, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -90,7 +90,7 @@ export default function Veterans({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -98,7 +98,7 @@ export default function Veterans({ base, member, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
/>
Submission({
@@ -59,7 +59,7 @@ export default function Wipro({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -67,7 +67,21 @@ export default function Wipro({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
+ />
+ }
+ path={`${base}/settings`}
/>
}
diff --git a/src/shared/routes/Communities/Zurich/Routes.jsx b/src/shared/routes/Communities/Zurich/Routes.jsx
index 9e606ede11..3f9214456a 100644
--- a/src/shared/routes/Communities/Zurich/Routes.jsx
+++ b/src/shared/routes/Communities/Zurich/Routes.jsx
@@ -95,7 +95,7 @@ function Zurich({ base, meta, userGroups }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -103,7 +103,7 @@ function Zurich({ base, meta, userGroups }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
SubmissionManagement({
@@ -111,7 +111,17 @@ function Zurich({ base, meta, userGroups }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/my-submissions`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/my-submissions`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Communities/iot/Routes.jsx b/src/shared/routes/Communities/iot/Routes.jsx
index 9e2c994abb..aaf8166071 100644
--- a/src/shared/routes/Communities/iot/Routes.jsx
+++ b/src/shared/routes/Communities/iot/Routes.jsx
@@ -67,7 +67,7 @@ export default function IoT({ base, meta }) {
communityId: meta.communityId,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})`}
/>
Submission({
@@ -75,7 +75,7 @@ export default function IoT({ base, meta }) {
challengesUrl: `${base}/challenges`,
})}
exact
- path={`${base}/challenges/:challengeId(\\d{8}|\\d{5})/submit`}
+ path={`${base}/challenges/:challengeId([\\w]{8}-[\\w]{4}-[\\w]{4}-[\\w]{4}-[\\w]{12}|\\d{5,8})/submit`}
/>
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})`}
+ />
+ }
+ exact
+ path={`${base}/members/:handle([\\w\\-\\[\\].{}]{2,15})/details`}
/>
}
diff --git a/src/shared/routes/Topcoder/Routes.jsx b/src/shared/routes/Topcoder/Routes.jsx
index 46fa2b6331..91904b8d53 100644
--- a/src/shared/routes/Topcoder/Routes.jsx
+++ b/src/shared/routes/Topcoder/Routes.jsx
@@ -59,7 +59,7 @@ export default function Topcoder() {
@@ -67,18 +67,18 @@ export default function Topcoder() {
-
+
import(/* webpackChunkName: "scoreboard/chunk" */ 'containers/tco/scoreboard')
.then(({ default: Scoreboard }) => (
diff --git a/src/shared/utils/challenge-detail/helper.jsx b/src/shared/utils/challenge-detail/helper.jsx
index eef41aefba..2a6fb4b8be 100644
--- a/src/shared/utils/challenge-detail/helper.jsx
+++ b/src/shared/utils/challenge-detail/helper.jsx
@@ -12,7 +12,6 @@ import { BUCKETS, getBuckets } from 'utils/challenge-listing/buckets';
const Filter = challengeUtils.filter;
-
// Constants
export const PRIZE_MODE = {
HIDDEN: 'hidden',
@@ -21,16 +20,29 @@ export const PRIZE_MODE = {
MONEY_USD: 'money-usd',
};
+/**
+ * Get challenge type abbreviation
+ * @param {Object} challenge challenge info
+ */
+export function getChallengeTypeAbbr(track, challengeTypes) {
+ const type = _.find(challengeTypes, { name: track });
+ if (type) {
+ return type.abbreviation;
+ }
+ return null;
+}
+
/**
* Get end date
* @param {Object} challenge challenge info
*/
export function getEndDate(challenge) {
- let phases = challenge.allPhases;
- if (challenge.subTrack === 'FIRST_2_FINISH' && challenge.status === 'COMPLETED') {
- phases = challenge.allPhases.filter(p => p.phaseType === 'Iterative Review' && p.phaseStatus === 'Closed');
+ const { type } = challenge;
+ let phases = challenge.phases || [];
+ if (type === 'First2Finish' && challenge.status === 'Completed') {
+ phases = challenge.phases.filter(p => p.phaseType === 'Iterative Review' && p.phaseStatus === 'Closed');
}
- const endPhaseDate = Math.max(...phases.map(d => new Date(d.scheduledEndTime)));
+ const endPhaseDate = Math.max(...phases.map(d => new Date(d.scheduledEndDate)));
return moment(endPhaseDate).format('MMM DD');
}
@@ -53,7 +65,7 @@ export function getTimeLeft(
return { late: false, text: FF_TIME_LEFT_MSG };
}
- let time = moment(phase.scheduledEndTime).diff();
+ let time = moment(phase.scheduledEndDate).diff();
const late = time < 0;
if (late) time = -time;
@@ -137,13 +149,14 @@ export function getPrizePurseUI(
* @param {Object} challenge challenge info
*/
export function getPrizePointsUI(challenge) {
- if (challenge.pointPrizes && challenge.pointPrizes.length > 0) {
+ if (challenge.prizeSets && challenge.prizeSets.length > 0 && challenge.prizeSets[0].prizes) {
+ const { prizes } = challenge.prizeSets[0];
return (
acc + points, 0)}
+ label="Purse"
+ prizes={prizes}
+ prizeUnitSymbol="$"
+ totalPrize={prizes.reduce((acc, prize) => acc + prize.value, 0)}
/>
);
}
@@ -151,17 +164,17 @@ export function getPrizePointsUI(challenge) {
}
/**
- * Get recommended technologies for challenge
+ * Get recommended tags for challenge
* @param {Object} challenge challenge info
*/
-export function getRecommendedTechnology(challenge) {
- let recommendedTechnology = '';
- _.forEach(challenge.technologies, (technology) => {
- if (!recommendedTechnology && technology.toLowerCase() !== 'other') {
- recommendedTechnology = technology;
+export function getRecommendedTags(challenge) {
+ let recommendedTag = '';
+ _.forEach(challenge.tags, (tag) => {
+ if (!recommendedTag && tag.toLowerCase() !== 'other') {
+ recommendedTag = tag;
}
});
- return recommendedTechnology;
+ return recommendedTag;
}
/**
@@ -185,17 +198,17 @@ export function getDisplayRecommendedChallenges(
return array.slice(0, n);
};
- const recommendedTechnology = getRecommendedTechnology(challenge);
- const displayRecommendedChallenges = recommendedChallenges[recommendedTechnology]
- ? recommendedChallenges[recommendedTechnology].challenges : [];
+ const recommendedTag = getRecommendedTags(challenge);
+ const displayRecommendedChallenges = recommendedChallenges[recommendedTag]
+ ? recommendedChallenges[recommendedTag].challenges : [];
const filterParams = getBuckets(null)[BUCKETS.OPEN_FOR_REGISTRATION].filter;
- const userHandle = _.get(auth.user, 'handle');
+ const userId = _.get(auth.user, 'userId');
const filter = Filter.getFilterFunction(filterParams);
let results = _.filter(displayRecommendedChallenges, (c) => {
let isValid = filter(c);
- if (isValid && userHandle) {
- isValid = !c.users[userHandle] && c.id !== challenge.id;
+ if (isValid && userId) {
+ isValid = c.id !== challenge.id && !c.users[userId];
}
return isValid;
});
diff --git a/src/shared/utils/challenge-listing/buckets.js b/src/shared/utils/challenge-listing/buckets.js
index cdff2b30ea..225203bc7b 100644
--- a/src/shared/utils/challenge-listing/buckets.js
+++ b/src/shared/utils/challenge-listing/buckets.js
@@ -21,7 +21,7 @@ const BUCKET_DATA = {
[BUCKETS.ALL]: {
filter: {
started: true,
- status: ['ACTIVE'],
+ status: ['Active'],
},
hideCount: false,
name: 'All Challenges',
@@ -29,8 +29,7 @@ const BUCKET_DATA = {
},
[BUCKETS.MY]: {
filter: {
- started: true,
- status: ['ACTIVE'],
+ status: ['Active'],
// users: [userHandle],
},
hideCount: false,
@@ -48,7 +47,7 @@ const BUCKET_DATA = {
filter: {
registrationOpen: true,
started: true,
- status: ['ACTIVE'],
+ status: ['Active'],
},
hideCount: false,
name: 'Open for registration',
@@ -66,7 +65,8 @@ const BUCKET_DATA = {
filter: {
registrationOpen: false,
started: true,
- status: ['ACTIVE'],
+ ongoing: true,
+ status: ['Active'],
},
hideCount: false,
name: 'Ongoing challenges',
@@ -90,7 +90,7 @@ const BUCKET_DATA = {
],
},
[BUCKETS.PAST]: {
- filter: { status: ['COMPLETED', 'PAST'] },
+ filter: { status: ['Completed', 'PAST'] },
hideCount: true,
name: 'Past challenges',
sorts: [
@@ -131,12 +131,12 @@ export const NO_LIVE_CHALLENGES_CONFIG = {
/**
* Returns configuration of all possible challenge buckets.
- * @param {String} userHandle Handle of the authenticated
+ * @param {String} userId id of the authenticated
* user to filter out My Challenges.
*/
-export function getBuckets(userHandle) {
+export function getBuckets(userChallenges) {
const res = _.cloneDeep(BUCKET_DATA);
- res[BUCKETS.MY].filter.users = [userHandle];
+ res[BUCKETS.MY].filter.userChallenges = userChallenges;
return res;
}
diff --git a/src/shared/utils/challenge-listing/sort.js b/src/shared/utils/challenge-listing/sort.js
index 407ef05672..8588f29048 100644
--- a/src/shared/utils/challenge-listing/sort.js
+++ b/src/shared/utils/challenge-listing/sort.js
@@ -29,11 +29,11 @@ export default {
name: 'Most recent',
},
[SORTS.NUM_REGISTRANTS]: {
- func: (a, b) => b.numRegistrants - a.numRegistrants,
+ func: (a, b) => b.numOfRegistrants - a.numOfRegistrants,
name: '# of registrants',
},
[SORTS.NUM_SUBMISSIONS]: {
- func: (a, b) => b.numSubmissions - a.numSubmissions,
+ func: (a, b) => b.numOfSubmissions - a.numOfSubmissions,
name: '# of submissions',
},
[SORTS.PRIZE_HIGH_TO_LOW]: {
@@ -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',
},
diff --git a/src/shared/utils/challenge.js b/src/shared/utils/challenge.js
new file mode 100644
index 0000000000..22dce73260
--- /dev/null
+++ b/src/shared/utils/challenge.js
@@ -0,0 +1,32 @@
+/**
+ * Provides misc settings page helper functions.
+ */
+import _ from 'lodash';
+
+/**
+ * check if is marathon match challenge
+ * @param {Object} challenge challenge object
+ */
+export function isMM(challenge) {
+ const tags = _.get(challenge, 'tags') || [];
+ return tags.includes('Marathon Match');
+}
+
+/**
+ * Set challenge type to challenge
+ * @param {Object} challenges challenge object
+ * @param {Object} challengeTypeMap all challenge type object
+ */
+export function updateChallengeType(challenges, challengeTypeMap) {
+ if (challengeTypeMap) {
+ _.each(challenges, (challenge) => {
+ // eslint-disable-next-line no-param-reassign
+ challenge.challengeType = challengeTypeMap[challenge.typeId] || {};
+ });
+ }
+}
+
+export default {
+ isMM,
+ updateChallengeType,
+};
diff --git a/src/styles/_mixins/_variables.scss b/src/styles/_mixins/_variables.scss
index 441c0b04c2..f3c494fc02 100644
--- a/src/styles/_mixins/_variables.scss
+++ b/src/styles/_mixins/_variables.scss
@@ -3,3 +3,10 @@ $tco-black: #2a2a2a;
/* @media */
$screen-sm: 768px;
+
+/* member rating colors */
+$member-gray: #555;
+$member-green: #258205;
+$member-blue: #4c50d9;
+$member-yellow: #f2c900;
+$member-red: #ea1900;