From f5f00627b772013e0f04b901330ee05516ecc04b Mon Sep 17 00:00:00 2001 From: nursoltan-s Date: Sat, 9 Jan 2021 19:00:37 +0800 Subject: [PATCH 01/19] add favicon --- public/favicon.ico | Bin 0 -> 15767 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/favicon.ico diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..74a5210073f9e140b0ee3e4e95ee37f9a8634441 GIT binary patch literal 15767 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 literal 0 HcmV?d00001 From 20aff2a32afcdd5315410129e64aae2b21908c07 Mon Sep 17 00:00:00 2001 From: nursoltan-s Date: Sat, 9 Jan 2021 19:42:29 +0800 Subject: [PATCH 02/19] added assign to me button --- .../AssignedMember-Field.module.scss | 4 ++++ .../AssignedMember-Field/index.js | 14 +++++++++++-- src/components/ChallengeEditor/index.js | 21 ++++++++++++++++++- src/containers/ChallengeEditor/index.js | 4 +++- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/components/ChallengeEditor/AssignedMember-Field/AssignedMember-Field.module.scss b/src/components/ChallengeEditor/AssignedMember-Field/AssignedMember-Field.module.scss index 4f22fc27..d31dff9e 100644 --- a/src/components/ChallengeEditor/AssignedMember-Field/AssignedMember-Field.module.scss +++ b/src/components/ChallengeEditor/AssignedMember-Field/AssignedMember-Field.module.scss @@ -45,5 +45,9 @@ .readOnlyValue { margin-bottom: 0.5rem; // the same like `label` to be aligned } + + .assignSelfField { + margin-left: 20px; + } } diff --git a/src/components/ChallengeEditor/AssignedMember-Field/index.js b/src/components/ChallengeEditor/AssignedMember-Field/index.js index 4731518d..5a15b8f6 100644 --- a/src/components/ChallengeEditor/AssignedMember-Field/index.js +++ b/src/components/ChallengeEditor/AssignedMember-Field/index.js @@ -6,13 +6,15 @@ import PropTypes from 'prop-types' import cn from 'classnames' import styles from './AssignedMember-Field.module.scss' import SelectUserAutocomplete from '../../SelectUserAutocomplete' +import { PrimaryButton } from '../../Buttons' -const AssignedMemberField = ({ challenge, onChange, assignedMemberDetails, readOnly }) => { +const AssignedMemberField = ({ challenge, onAssignSelf, onChange, assignedMemberDetails, readOnly }) => { const value = assignedMemberDetails ? { // if we know assigned member details, then show user `handle`, otherwise fallback to `userId` label: assignedMemberDetails.handle, value: assignedMemberDetails.userId + '' } : null + return (
@@ -28,6 +30,13 @@ const AssignedMemberField = ({ challenge, onChange, assignedMemberDetails, readO /> )}
+
+ +
) } @@ -41,7 +50,8 @@ AssignedMemberField.propTypes = { challenge: PropTypes.shape().isRequired, onChange: PropTypes.func, assignedMemberDetails: PropTypes.shape(), - readOnly: PropTypes.bool + readOnly: PropTypes.bool, + onAssignSelf: PropTypes.func } export default AssignedMemberField diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index 935b65ad..82281cc0 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -90,6 +90,7 @@ class ChallengeEditor extends Component { this.onUpdateOthers = this.onUpdateOthers.bind(this) this.onUpdateCheckbox = this.onUpdateCheckbox.bind(this) this.onUpdateAssignedMember = this.onUpdateAssignedMember.bind(this) + this.onAssignSelf = this.onAssignSelf.bind(this) this.addFileType = this.addFileType.bind(this) this.removeFileType = this.removeFileType.bind(this) this.updateFileTypesMetadata = this.updateFileTypesMetadata.bind(this) @@ -335,6 +336,22 @@ class ChallengeEditor extends Component { }) } + /** + * Update Assigned Member to Current User + */ + onAssignSelf () { + const { loggedInUser } = this.props + + const assignedMemberDetails = { + handle: loggedInUser.handle, + userId: loggedInUser.userId + } + + this.setState({ + assignedMemberDetails + }) + } + /** * Update Single Select * @param option The select option @@ -1326,6 +1343,7 @@ class ChallengeEditor extends Component { challenge={challenge} onChange={this.onUpdateAssignedMember} assignedMemberDetails={assignedMemberDetails} + onAssignSelf={this.onAssignSelf} /> )} @@ -1469,7 +1487,8 @@ ChallengeEditor.propTypes = { updateChallengeDetails: PropTypes.func.isRequired, createChallenge: PropTypes.func, replaceResourceInRole: PropTypes.func, - partiallyUpdateChallengeDetails: PropTypes.func.isRequired + partiallyUpdateChallengeDetails: PropTypes.func.isRequired, + loggedInUser: PropTypes.shape().isRequired } export default withRouter(ChallengeEditor) diff --git a/src/containers/ChallengeEditor/index.js b/src/containers/ChallengeEditor/index.js index ab0c4796..a7bba88a 100644 --- a/src/containers/ChallengeEditor/index.js +++ b/src/containers/ChallengeEditor/index.js @@ -229,7 +229,8 @@ class ChallengeEditor extends Component { updateChallengeDetails, partiallyUpdateChallengeDetails, createChallenge, - replaceResourceInRole + replaceResourceInRole, + loggedInUser // members } = this.props const { @@ -335,6 +336,7 @@ class ChallengeEditor extends Component { updateChallengeDetails={updateChallengeDetails} replaceResourceInRole={replaceResourceInRole} partiallyUpdateChallengeDetails={partiallyUpdateChallengeDetails} + loggedInUser={loggedInUser} /> )) } /> From b9ae916114b39811d9b51ca492fdb310da70db3d Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Sat, 9 Jan 2021 18:42:23 +0530 Subject: [PATCH 03/19] add Iterative Reviewer for First2Finish and Task type challenges --- src/components/ChallengeEditor/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index 935b65ad..4ba5274c 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -955,7 +955,7 @@ class ChallengeEditor extends Component { try { const challengeId = this.getCurrentChallengeId() // state can have updated assigned member (in cases where user changes assignments without refreshing the page) - const { challenge: { copilot, reviewer }, assignedMemberDetails: assignedMember } = this.state + const { challenge: { copilot, reviewer, type }, assignedMemberDetails: assignedMember } = this.state const oldMemberHandle = _.get(oldAssignedMember, 'handle') const assignedMemberHandle = _.get(assignedMember, 'handle') // assigned member has been updated @@ -965,8 +965,11 @@ class ChallengeEditor extends Component { const action = await updateChallengeDetails(challengeId, challenge) const { copilot: previousCopilot, reviewer: previousReviewer } = this.state.draftChallenge.data if (copilot !== previousCopilot) await this.updateResource(challengeId, 'Copilot', copilot, previousCopilot) - if (reviewer !== previousReviewer) await this.updateResource(challengeId, 'Reviewer', reviewer, previousReviewer) - + if (type === 'First2Finish' || type === 'Task') { + await this.updateResource(challengeId, 'Iterative Reviewer', reviewer) + } else { + if (reviewer !== previousReviewer) await this.updateResource(challengeId, 'Reviewer', reviewer, previousReviewer) + } const draftChallenge = { data: action.challengeDetails } draftChallenge.data.copilot = copilot draftChallenge.data.reviewer = reviewer From 2b5f8c2d337df4b279db8545b8747523a687534e Mon Sep 17 00:00:00 2001 From: Nowshad Date: Sat, 9 Jan 2021 20:07:02 +0600 Subject: [PATCH 04/19] Fixed issue #1007 --- .../ChallengeEditor/ReviewType-Field/index.js | 5 +++-- src/components/ChallengeEditor/index.js | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/components/ChallengeEditor/ReviewType-Field/index.js b/src/components/ChallengeEditor/ReviewType-Field/index.js index 139ea0a3..01fffd30 100644 --- a/src/components/ChallengeEditor/ReviewType-Field/index.js +++ b/src/components/ChallengeEditor/ReviewType-Field/index.js @@ -9,10 +9,11 @@ import { DES_TRACK_ID, REVIEW_TYPES, MESSAGE, QA_TRACK_ID } from '../../../confi const ReviewTypeField = ({ reviewers, challenge, onUpdateOthers, onUpdateSelect }) => { const isDesignChallenge = challenge.trackId === DES_TRACK_ID const isQAChallenge = challenge.trackId === QA_TRACK_ID + const isTask = challenge.type === 'Task' const defaultReviewType = isDesignChallenge ? REVIEW_TYPES.INTERNAL : REVIEW_TYPES.COMMUNITY const reviewType = challenge.reviewType ? challenge.reviewType.toUpperCase() : defaultReviewType const isCommunity = reviewType === REVIEW_TYPES.COMMUNITY - const isInternal = reviewType === REVIEW_TYPES.INTERNAL + const isInternal = reviewType === REVIEW_TYPES.INTERNAL || isTask const communityOption = (disabled) => (
} - { !isDesignChallenge && + { !isDesignChallenge && !isTask && communityOption() }
diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index 935b65ad..56165486 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -63,6 +63,8 @@ const getTitle = (isNew) => { return 'Set-Up Work' } +const checkTaskType = (type) => type === 'Task' + class ChallengeEditor extends Component { constructor (props) { super(props) @@ -167,7 +169,8 @@ class ChallengeEditor extends Component { reviewer = challenge.reviewer } challengeData.copilot = copilot || copilotFromResources - challengeData.reviewer = reviewer || reviewerFromResources + challengeData.reviewer = reviewer || reviewerFromResources || (checkTaskType(challengeData.type) ? challengeData.createdBy : '') + challengeData.startDate = (checkTaskType(challengeData.type) ? moment().format() : challengeData.startDate) const challengeDetail = { ...challengeData } const isOpenAdvanceSettings = challengeDetail.groups.length > 0 setState({ @@ -1100,6 +1103,7 @@ class ChallengeEditor extends Component { if (_.isEmpty(challenge)) { return
Error loading challenge
} + const isTaskType = checkTaskType(challenge.type) const isTask = _.get(challenge, 'task.isTask', false) const { assignedMemberDetails, error } = this.state let isActive = false @@ -1357,7 +1361,7 @@ class ChallengeEditor extends Component { )} - { + {!isTaskType && (
- } + )} { showTimeline && ( Date: Sat, 9 Jan 2021 22:06:57 +0530 Subject: [PATCH 05/19] groups filter from api --- package-lock.json | 166 ++++++++++++++++-- package.json | 2 +- .../ChallengeEditor/Groups-Field/index.js | 42 +++-- src/components/ChallengeEditor/index.js | 2 +- src/components/Select/AsyncSelect.js | 71 ++++++++ src/components/Select/Select.module.scss | 118 ------------- src/components/Select/index.js | 61 ++++++- src/config/constants.js | 3 +- 8 files changed, 315 insertions(+), 150 deletions(-) create mode 100644 src/components/Select/AsyncSelect.js delete mode 100644 src/components/Select/Select.module.scss diff --git a/package-lock.json b/package-lock.json index b0c37594..57be0c21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1018,6 +1018,87 @@ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, + "@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "requires": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "@emotion/core": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.1.1.tgz", + "integrity": "sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==", + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "requires": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, "@fortawesome/fontawesome-common-types": { "version": "0.2.28", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz", @@ -2157,6 +2238,23 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-emotion": { + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, "babel-plugin-istanbul": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", @@ -2187,6 +2285,11 @@ "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", @@ -4165,6 +4268,11 @@ } } }, + "csstype": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.14.tgz", + "integrity": "sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A==" + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -4542,6 +4650,22 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", + "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" + } + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -5923,8 +6047,7 @@ "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { "version": "2.1.0", @@ -9342,6 +9465,11 @@ } } }, + "memoize-one": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -14723,13 +14851,18 @@ } }, "react-select": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.3.0.tgz", - "integrity": "sha512-g/QAU1HZrzSfxkwMAo/wzi6/ezdWye302RGZevsATec07hI/iSxcpB1hejFIp7V63DJ8mwuign6KmB3VjdlinQ==", - "requires": { - "classnames": "^2.2.4", - "prop-types": "^15.5.8", - "react-input-autosize": "^2.1.2" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.1.1.tgz", + "integrity": "sha512-HjC6jT2BhUxbIbxMZWqVcDibrEpdUJCfGicN0MMV+BQyKtCaPTgFekKWiOizSCy4jdsLMGjLqcFGJMhVGWB0Dg==", + "requires": { + "@babel/runtime": "^7.4.4", + "@emotion/cache": "^10.0.9", + "@emotion/core": "^10.0.9", + "@emotion/css": "^10.0.9", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-input-autosize": "^2.2.2", + "react-transition-group": "^4.3.0" } }, "react-side-effect": { @@ -14768,6 +14901,17 @@ "prop-types": "^15.5.0" } }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -17127,8 +17271,8 @@ } }, "tc-auth-lib": { - "version": "github:topcoder-platform/tc-auth-lib#fbd62f7c65f0e7eecccf2c131b07e84104505754", - "from": "github:topcoder-platform/tc-auth-lib#1.0.1", + "version": "github:topcoder-platform/tc-auth-lib#68fdc22464810c51b703a33e529cdbd6d09437de", + "from": "github:topcoder-platform/tc-auth-lib#1.0.4", "requires": { "lodash": "^4.17.19" }, diff --git a/package.json b/package.json index 1f0c041e..a4b659bd 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "react-redux": "^6.0.0", "react-redux-toastr": "^7.5.1", "react-router-dom": "^4.3.1", - "react-select": "^1.2.0", + "react-select": "^3.1.1", "react-stickynode": "^2.1.1", "react-svg": "^4.1.1", "react-tabs": "^3.0.0", diff --git a/src/components/ChallengeEditor/Groups-Field/index.js b/src/components/ChallengeEditor/Groups-Field/index.js index f9624450..4e4f3264 100644 --- a/src/components/ChallengeEditor/Groups-Field/index.js +++ b/src/components/ChallengeEditor/Groups-Field/index.js @@ -1,20 +1,47 @@ import React from 'react' import PropTypes from 'prop-types' -import Select from '../../Select' +import AsyncSelect from '../../Select/AsyncSelect' import cn from 'classnames' import styles from './Groups-Field.module.scss' +import _ from 'lodash' +import { axiosInstance } from '../../../services/axiosWithAuth' +import { AUTOCOMPLETE_MIN_LENGTH, AUTOCOMPLETE_DEBOUNCE_TIME_MS, GROUPS_API_URL } from '../../../config/constants' + +const GroupsField = ({ onUpdateMultiSelect, challenge }) => { + async function fetchGroups (name) { + if (!name) return [] + console.log('url') + console.log(GROUPS_API_URL) + const url = `${GROUPS_API_URL}?name=${name}` + return axiosInstance.get(url) + } + + const onInputChange = React.useCallback(_.debounce(async (inputValue, callback) => { + if (!inputValue) return + const preparedValue = inputValue.trim() + if (preparedValue.length < AUTOCOMPLETE_MIN_LENGTH) { + return [] + } + const { data } = await fetchGroups(inputValue) + const suggestions = data.map(suggestion => ({ + label: suggestion.name, + value: suggestion.id + })) + callback && callback(suggestions) + }, AUTOCOMPLETE_DEBOUNCE_TIME_MS), []) -const GroupsField = ({ groups, onUpdateMultiSelect, challenge }) => { return (
- ({ label: account.name, value: account.name, name: account.name }))} + value={{ label: challenge.billingAccount, value: challenge.billingAccount }} placeholder='Select an existing account' - labelKey='name' - valueKey='name' - clearable={false} + isClearable={false} onChange={(e) => onUpdateSelect(e)} - disabled={false} + isDisabled={false} />
diff --git a/src/components/ChallengeEditor/ChallengeSchedule-Field/index.js b/src/components/ChallengeEditor/ChallengeSchedule-Field/index.js index d0a4e5c8..8fca8678 100644 --- a/src/components/ChallengeEditor/ChallengeSchedule-Field/index.js +++ b/src/components/ChallengeEditor/ChallengeSchedule-Field/index.js @@ -331,12 +331,10 @@ class ChallengeScheduleField extends Component { ) : ( ({ label: handle, value: handle }))} placeholder='Select Reviewer' - labelKey='handle' - valueKey='handle' - clearable={false} - value={challenge.reviewer} - onChange={(e) => onUpdateSelect(e.handle, false, 'reviewer')} - disabled={false} + value={{ label: challenge.reviewer, value: challenge.reviewer }} + isClearable={false} + onChange={(e) => onUpdateSelect(e.value, false, 'reviewer')} + isDisabled={false} /> ) } diff --git a/src/components/ChallengeEditor/TagsField/index.js b/src/components/ChallengeEditor/TagsField/index.js index 68ff0910..9678cefc 100644 --- a/src/components/ChallengeEditor/TagsField/index.js +++ b/src/components/ChallengeEditor/TagsField/index.js @@ -19,10 +19,10 @@ const TagsField = ({ challengeTags, challenge, onUpdateMultiSelect, readOnly }) {existingTags} ) : ( t.isActive)} - value={challenge.typeId} + options={_.filter(types, t => t.isActive).map(type => ({ label: type.name, value: type.id }))} placeholder='Work Format' - labelKey='name' - valueKey='id' - clearable={false} - onChange={(e) => onUpdateSelect(e.id, false, 'typeId')} - disabled={disabled} + isClearable={false} + onChange={(e) => onUpdateSelect(e.value, false, 'typeId')} + isDisabled={disabled} /> diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index c398ccad..3febcf69 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -708,7 +708,7 @@ class ChallengeEditor extends Component { onUpdateMultiSelect (options, field) { const { challenge } = this.state let newChallenge = { ...challenge } - newChallenge[field] = options ? options.split(',') : [] + newChallenge[field] = options ? options.map(option => option.value) : [] this.setState({ challenge: newChallenge }, () => { this.validateChallenge() diff --git a/src/components/PhaseInput/index.js b/src/components/PhaseInput/index.js index 1e4b4e4a..2a87c6a6 100644 --- a/src/components/PhaseInput/index.js +++ b/src/components/PhaseInput/index.js @@ -77,11 +77,9 @@ class PhaseInput extends Component {