From 376aa82d4a450af666acd4f51be19cd5a11d76d3 Mon Sep 17 00:00:00 2001 From: Kiril Kartunov Date: Fri, 28 Aug 2020 10:58:33 +0300 Subject: [PATCH 01/10] Gig work fixes #4826 --- src/assets/images/icon-skills-blue.png | Bin 0 -> 912 bytes src/assets/images/icon-skills.png | Bin 0 -> 479 bytes src/assets/images/icon-skills.svg | 31 -------------- src/assets/images/l1.png | Bin 0 -> 1849 bytes src/assets/images/l2.png | Bin 0 -> 2041 bytes src/assets/images/l3.png | Bin 0 -> 2146 bytes src/assets/images/l4.png | Bin 0 -> 1902 bytes src/server/services/recruitCRM.js | 25 +++++++----- .../components/GUIKit/JobListCard/index.jsx | 4 +- .../components/GUIKit/JobListCard/style.scss | 3 +- .../components/GUIKit/SearchCombo/index.jsx | 7 +++- .../components/GUIKit/SearchCombo/style.scss | 10 ++++- src/shared/components/Gigs/GigDetails.jsx | 34 ++++++++++++---- src/shared/components/Gigs/style.scss | 38 +++++++++++++++++- src/shared/containers/Gigs/RecruitCRMJobs.jsx | 9 ++++- .../containers/Gigs/jobLisingStyles.scss | 5 +++ src/shared/containers/GigsPages.jsx | 3 +- 17 files changed, 112 insertions(+), 57 deletions(-) create mode 100644 src/assets/images/icon-skills-blue.png create mode 100644 src/assets/images/icon-skills.png delete mode 100644 src/assets/images/icon-skills.svg create mode 100644 src/assets/images/l1.png create mode 100644 src/assets/images/l2.png create mode 100644 src/assets/images/l3.png create mode 100644 src/assets/images/l4.png diff --git a/src/assets/images/icon-skills-blue.png b/src/assets/images/icon-skills-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..658369b2d2ca974c9c116146df99895b47fdcd4a GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv_!3-oPUsrw1z`!^uz$e5N$YuEdpP}JD!>Uyd z`}Z54IitPms>1&LGOLd1E!wHKbEo#I{puT!sBAl-wEK+mx}%C4PiXEqq_+7OP(*pd zLCvj4)i)hf+j3ZA>tUdv>Xzdw8xE;&JfX7jn9AnkYMYLN1h*bm*?d%e<8igkN7S|) z0g9+?Ij*tgnChlu>RXPeZvk?Ts&6?8Q4Ca|x(R3|P}xz{%|Kb0I9LRz5-12VVKYdX zD$rP<_KiTRfy$0Rq|`Tqj0I^2i5yi2N`cHd0yG~e0yF`n7^n+mK2#RS2I>Nd!?i%| zg(wD@1~v!e9iTZdHb@p|2uLHyQy>OR3Zw-S!DO*WK@|W0|6jFCH2@eXEhRyI!3>N{ z%q*;I9Gu+TJiL7TV&an0GP3fDN@^OKT6%^?re@}r);6}zF77^lp%F2$aq$VssTrAB z*@Z>Lr4^OcHMI>5jZJM`-M#%2CQg|#bLq0>D_5;vvu^#SE!%hO+_m@6;Uh~S41#dVm33Lx*lDE4{tLXKt=RmfM zr;B5Vge2=hPG@cg2DS^^Gh6RGJu!8LOy@~KPD`h}iN;PE-+hy_qVMy6mvcD(`qh;% zhJ;enliQy%Bv@>|ZTC#UVPUrNdZP@J?;_XB6W;oKO5Swy#g)moCf`4~xa|Aqe7lnp zYLl+a+L@sDblaziaS@yH6Wmwo2j6?fwMJrBk}+dEh5TOM8Y-E*0DjBl;@^2;}p zROX-ie-zaQ;z`d{O_Y0Q;rO1(c-u76bU%vF58rgCCU{hge$SDv{= zdX>9)Was*%U&uHnYM#qrFvtA%{w4AZYgViM+$F+r!}jy@O7REw`Kv;v>3$!-w MUHx3vIVCg!0PcapqW}N^ literal 0 HcmV?d00001 diff --git a/src/assets/images/icon-skills.png b/src/assets/images/icon-skills.png new file mode 100644 index 0000000000000000000000000000000000000000..9708ba945f82fe14d43140128505f39aa7bd4cc5 GIT binary patch literal 479 zcmV<50U-W~P)G?G}@AOCb?(McfPsjobQYfMQg4?&Ef`Gm71#%<(8U+ zo7-xtED0I7aug$^o&FCs$RQa;HCh>bhBxZN3tTHqBqFV(pA^}rA?|NHGR=y - - - 52CD6D74-4265-497A-89D8-FF91F35564F8 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/images/l1.png b/src/assets/images/l1.png new file mode 100644 index 0000000000000000000000000000000000000000..be745ce393fd4e0e3f0a0f1c40dc6dc73b0eb777 GIT binary patch literal 1849 zcmV-92gdk`P)kkcVp0>QvTjzDn$zzl?cQpK)~k6-li z@$MtXbMvED?;C#m@a#GQ*HdIY$q@)Zvm^pLx3%J$%3la>cT0!v|Jozx9s0ik{MGe) zN00t%{%#>|^uUK8&0`*no9BQ;1Qc|@+I`~Wpb~d{{jm#v`GEmWUb^Q>@9TRh7;l~s z5Dd{u#|)N=@BDfMX@CU~?1oe~-S(TcuO2tRZI|v@IiR1U@bg5VPQoL?xJd^P3236) zoXY7gqN+Ma;fC8EIe+JS1~~b}sWk)EPmzAPh=O1Q5rJK0}Y+6Fjl3!oFMzkr6fv(k+IV7RB?e{6&5b4m%w__s$2-dDAed9o&D# z-W8twZ7n>}3qTc61zrVS0Xhxeww{jZ(x1<-Ie`}-*~{z-qkUVWlamL!a9lv`H)^}bwm)jD6BA0)6C((+ko^}GjoZ`9aez{$DjT8YwG|!QEj<)>XL!yIgN+fiJXtx zmq#@@BTjJLrZX|VdNfZReB@(G;QxF$ZQjdD*?}5|n>7!76~GhK0CFYOBDR=b1!*uN zneio~8o><~JgOm$QSsVJ7nF7j>B*u=5r}gA_wIUitfKN_Vi67NqqU`tvvVFh9(oi1 z*guOUqYhvG#+l)H0IC55%d`LxyA#+H3iH4K6bv6-kad+;SzU(P0Q5&Qh-%a@K=8tI zhX4Uqp1m|uOcB&-3}{COJDM4CG%p@cuBp6}rC`>wLN2x|m_;6@R+TE7G2$`mPAwWB znu22n)*_u!OHySwpwF$SSfD}A@}iy0*3uffZIcX)G-`r+0Zi$5~5BJ6h0>xkvCmomU$GrrJvADm0Dz9sZ%W;S zla|b+`${l{qoLZ{`!!C>t_lD!q&w;TRS1<>CNW#oYpmEj;c2;>0i^30??pP*94kDg zLl_#IK2rgJbNb|;u5&iRo2? z`TDPYn;Z4*7T6s^^SmruX3@rCAMUg^Tl>!BZD)Mb7zY6SU}DuYEB&LDe|$$UYNRbe zf?7JV(5%^C-#dy?8`qdp$q8zQ7fv2K;fIk}l%K6s`Ba-qO3UlQ`*K7oUkzG=YR*c$ zCSlwMsCa$EEnWZPuPi$fvmr-!(zjOq8kO!f4NEOd<6B)GMK6fricH9J2CTU17Asy% zxJ{^aM%?hatv4_GXO5`=I3eNz-5h(a_1{PpB8{nfo64+P4%q9f^<-uhZ}*r}sASvl zX(yb&?dIj3ACaWJ006gqfBzOw-rAX}GfGn*F6TJ_QS*8yXHx_f3b+H#{p5j-D|Yqa zSQOv{sc+qL;4y$3dgr!$R06X146Ed_8(DsesHbp`Dt5xjgWGQypI!{uy8;A&TYk!s zdf~ub9^6dGNUro<4Qu|{oEUzl^Hlr|#7l7UvJg`;gx%Y382`_)K)ok`_Sv}QjkC!5 zRsfd(avp`6v=Ix09w7X*sLlYKhPY|xbY}UfAKgE3jm#epnD+%R|7_ZR@T9}@gE6ms nXY|zi$i3H$AN`;Jj`jH;s98J`aUjmJ00000NkvXXu0mjf2Hked literal 0 HcmV?d00001 diff --git a/src/assets/images/l2.png b/src/assets/images/l2.png new file mode 100644 index 0000000000000000000000000000000000000000..fd3e0c91c46b60317802b4736e8504538852b179 GIT binary patch literal 2041 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 YKkn;dyc@gH1 zG{npw5!}XzGPh`gnL|OtvL$5x*jUM|hy=%CwiPS`IxKDJ`yBtc_qq3Z?)%n(`XtT0 zz4tlie4q34dtc$dTo2#!!tALr*K2Cm8n)b^TabAOtq4;N`4`GD;3#6xs`Au^Utas- z#oCdJ+5GseLoH`U$NCIzH<2}FHUk0knnXarc>(qB#J~TWVGky4wQYCqTzcyN25`si z2WOrenf#hKKI?=zNG9g60+F2)k*pfpR4e-bP2j)+i+iKW{y#W9d0kOg>HVq&mz*2bA zKQCld$H8v7Yv-~(7YuOg&4Y{UR^RK)y+iWwd4L7j;<+IrS>9E>h7rn#auS4JRL4za z?LChy+54sdf4F9FrIV@MK!=4MAvO?)vIG`;tC>f`1C;WnIxg^$P1~3Jc3OZxSa;xh zbNtG%OJfktl=|>C9-s(g==G|+=AMmmR7O*&UA5_TkAv^kBDh_Vc>frB1+9 zFcq8%PQen*uYx7{vwV-KM9=F2u8^le-X%i4V#8D*Vb)Y~{(GU*3V`RV{*$`WnHkeu zv0yon@_#7+_-9U`uHX+wQUY^Y0(Y8$^ZP;@!NJyjbHmWuD8vtZ?1fwFW{-yYka~&IYol|NfEY?YgW%;=ByNe!Dn7)V$!lu7sVpk-X=xo9pDO^*}f^^lfV<{ z6tdpbhawlORB$F3G-m+SV$`kd?F67cW&B~^N$Q%*c@VjGV)^pG9(>ruMQzRIdk=M_ zrnb_%IUM*FwvJG7q)d3vvUWP=%>ZENxigH8*0Dr#fK{)7Xq<0GUd@GL#5eVpbLXWm zbt+d_9^Nnq!#?Qq!}q%|!B^ch7r*xZZX~PN+?YQ|7*gjwmdiIDyxdzy7N;(ewh~YP zAar?AD0#8u3c44x(X*fpfTM@ba(s9a1ZH>5;JO>;0Px5Cr#Ue^QOH{$A2s!$kP!7S zu1ZZg@BDCVGRzyML!N&Ct8VNly|?dV)~tc zDxVY58eH?>C^z-bh;*jU=BZqJD7 zMDcx5oGJqrS6ud2YfT~$t*r^ut(F$0v$K}X-=IB7C4EYerF}%k1mM1nhkk=tZ+x<# zaaZz36ngvSQfrYSJOr{`T`erUJge?wFQ4PN!BKwy{Ak>$y*~BfY_ugRyHfy5_?ba( z<3KOlOLS6T_nwicJ%k5Xv8=rSc;L@(@a%y%GVg`cqd6a}0(?pVlG%%Pn(8YBEfNAQ z81lh@_esnLBU%-N*rdWI^L+&$%=w|GX`XsnBG?SwrvL*3GHI!8DU627JjwL@E|HA; zB{3f?4wgvy*-2T&*?TGEGGL8-&^y3HPR;%D{J|pATiQB)M4Fs(!3jdox!{DQ*8+uF zdiLyi>BF<*j!l`YhE`Sswaa3Gyw-C6|wcem_IZv zK!ESuxA1vO?M72M?J5=PE3HU;^({wn36a6NR0__25mx1kJ+e2|?#&^Vh8zsn#%~>4 z?!-L`T-oeLq6QjP$-lVa(}W#GLt$6@Wj!B%pkF2~7$CsF!!KQOd_?X?_^O#pq5=rn zM-#Bq7DG6Dl_4>{zJ0@GyPDa5Q-FTmx#gv04*9$@yA6@{W_&IL8;{Klq==k#VuwZa zF9-)z<<}2=`kjaWlidpj=+|94hG(8WJ+U6_eIjzD!4)Pl&#b%7 literal 0 HcmV?d00001 diff --git a/src/server/services/recruitCRM.js b/src/server/services/recruitCRM.js index 4f7fb95189..b8659ae824 100644 --- a/src/server/services/recruitCRM.js +++ b/src/server/services/recruitCRM.js @@ -114,20 +114,27 @@ export default class RecruitCRMService { const data = await response.json(); if (data.current_page < data.last_page) { const pages = _.range(2, data.last_page + 1); - // eslint-disable-next-line no-restricted-syntax - for (const page of pages) { - // eslint-disable-next-line no-await-in-loop - const pageDataRsp = await fetch(`${this.private.baseUrl}/v1/jobs/search?${qs.stringify(req.query)}&page=${page}`, { + return Promise.all( + pages.map(page => fetch(`${this.private.baseUrl}/v1/jobs/search?${qs.stringify(req.query)}&page=${page}`, { method: 'GET', headers: { 'Content-Type': req.headers['content-type'], Authorization: this.private.authorization, }, - }); - // eslint-disable-next-line no-await-in-loop - const pageData = await pageDataRsp.json(); - data.data = _.flatten(data.data.concat(pageData.data)); - } + })), + ) + .then(async (allPages) => { + // eslint-disable-next-line no-restricted-syntax + for (const pageDataRsp of allPages) { + // eslint-disable-next-line no-await-in-loop + const pageData = await pageDataRsp.json(); + data.data = _.flatten(data.data.concat(pageData.data)); + } + return res.send(data.data); + }) + .catch(e => res.send({ + error: e, + })); } return res.send(data.data); } catch (err) { diff --git a/src/shared/components/GUIKit/JobListCard/index.jsx b/src/shared/components/GUIKit/JobListCard/index.jsx index d94f4dc175..f2801de3b0 100644 --- a/src/shared/components/GUIKit/JobListCard/index.jsx +++ b/src/shared/components/GUIKit/JobListCard/index.jsx @@ -10,7 +10,7 @@ import './style.scss'; import IconBlackDuration from 'assets/images/icon-black-duration.svg'; import IconBlackLocation from 'assets/images/icon-black-location.svg'; import IconBlackPayment from 'assets/images/icon-black-payment.svg'; -import IconBlackSkills from 'assets/images/icon-skills.svg'; +import iconBlackSkills from 'assets/images/icon-skills.png'; export default function JobListCard({ job, @@ -30,7 +30,7 @@ export default function JobListCard({ {job.name}
- {skills} + skills-icon {skills}
{job.country} diff --git a/src/shared/components/GUIKit/JobListCard/style.scss b/src/shared/components/GUIKit/JobListCard/style.scss index 1cff03c199..d25dc60fd5 100644 --- a/src/shared/components/GUIKit/JobListCard/style.scss +++ b/src/shared/components/GUIKit/JobListCard/style.scss @@ -69,7 +69,8 @@ width: 141px; } - svg { + svg, + img { margin-right: 7px; } } diff --git a/src/shared/components/GUIKit/SearchCombo/index.jsx b/src/shared/components/GUIKit/SearchCombo/index.jsx index 29400e9cb0..c94b4e0480 100644 --- a/src/shared/components/GUIKit/SearchCombo/index.jsx +++ b/src/shared/components/GUIKit/SearchCombo/index.jsx @@ -17,6 +17,11 @@ function SearchCombo({ setVal(''); onSearch(''); }; + const onKeyDown = (e) => { + if (e.which === 13) { + onSearch(inputVal); + } + }; return (
@@ -24,7 +29,7 @@ function SearchCombo({ { !inputVal ? {placeholder} : null } - setVal(event.target.value)} /> + setVal(event.target.value)} onKeyDown={onKeyDown} /> { inputVal ? : null } diff --git a/src/shared/components/GUIKit/SearchCombo/style.scss b/src/shared/components/GUIKit/SearchCombo/style.scss index a47b4940ec..30d0928547 100644 --- a/src/shared/components/GUIKit/SearchCombo/style.scss +++ b/src/shared/components/GUIKit/SearchCombo/style.scss @@ -9,7 +9,6 @@ width: 100%; position: relative; margin-right: 10px; - z-index: 1; input.input { background: transparent; @@ -17,6 +16,8 @@ border-radius: 6px; height: 39px; margin: 0; + position: relative; + z-index: 1; } .search-placeholder { @@ -29,6 +30,12 @@ z-index: 0; top: 8px; left: 15px; + + @include xs-to-sm { + max-width: 250px; + overflow: hidden; + white-space: nowrap; + } } .clear-search { @@ -36,6 +43,7 @@ top: calc(50% - 5px); right: 15px; cursor: pointer; + z-index: 2; } } diff --git a/src/shared/components/Gigs/GigDetails.jsx b/src/shared/components/Gigs/GigDetails.jsx index cbf3602331..9f83e9198e 100644 --- a/src/shared/components/Gigs/GigDetails.jsx +++ b/src/shared/components/Gigs/GigDetails.jsx @@ -17,6 +17,11 @@ import IconMoney from 'assets/images/icon-payment.svg'; import IconDuration from 'assets/images/icon-calendar-gig.svg'; import IconHours from 'assets/images/icon-duration.svg'; import IconTimezone from 'assets/images/icon-timezone.svg'; +import iconSkills from 'assets/images/icon-skills-blue.png'; +import iconLabel1 from 'assets/images/l1.png'; +import iconLabel2 from 'assets/images/l2.png'; +import iconLabel3 from 'assets/images/l3.png'; +import iconLabel4 from 'assets/images/l4.png'; // Cleanup HTML from style tags // so it won't affect other parts of the UI @@ -41,11 +46,11 @@ export default function GigDetails(props) { return (
{ - job.error ? ( + job.error || job.enable_job_application_form !== 1 ? (

Gig does not exist.

- VIEW OTHER JOBS + VIEW OTHER GIGS
) : ( @@ -90,8 +95,8 @@ export default function GigDetails(props) {
-

Required Tech Skills

-

{skills}

+

Skills

+

skills-icon {skills}

Description

{ReactHtmlParser(job.job_description_text, ReactHtmlParserOptions)}

@@ -126,12 +131,25 @@ export default function GigDetails(props) {

Thank you for checking out our latest gig at Topcoder. Gig work through us is simple and effective for those that would like traditional freelance work. To learn more about how Gigs work with us, go here.

At Topcoder, we pride ourselves in bringing our customers the very best candidates to help fill their needs. Want to improve your chances? You can do a few things:

    -
  • Check out our Topcoder challenges and participate. Challenges showing your technology skills make you a “qualified” candidate so we know you’re good. The proof is in the pudding!
  • -
  • Make sure your Topcoder profile says it all. Fill out your profile to the best of your ability. Your skills, your location, your devices, etc, all help you improve your chances of being selected for a gig
  • -
  • Let us know you’re here! Check in on our Gig Work forum and tell us you’re looking for a gig. It’s great visibility for the Gig team
  • -
  • Subscribe to our Gig notifications email. We’ll send you a weekly update on gigs available so you don’t miss a beat. Find the button at the top of this page.
  • +
  • + label 1 +
    Make sure your Topcoder profile says it all. Fill out your profile to the best of your ability. Your skills, your location, your devices, etc, all help you improve your chances of being selected for a gig.
    +
  • +
  • + label 2 +
    Subscribe to our Gig notifications email.. We’ll send you a weekly update on gigs available so you don’t miss a beat.
    +
  • +
  • + label 3 +
    Let us know you’re here! Check in on our Gig Work forum and tell us you’re looking for a gig. It’s great visibility for the Gig team.
    +
  • +
  • + label 4 +
    Check out our Topcoder challenges and participate. Challenges showing your technology skills make you a “qualified” candidate so we know you’re good. The proof is in the pudding!
    +
+
If you have any questions or doubts, don’t hesitate to email support@topcoder.com.
diff --git a/src/shared/components/Gigs/style.scss b/src/shared/components/Gigs/style.scss index 03756963e1..840e6508a2 100644 --- a/src/shared/components/Gigs/style.scss +++ b/src/shared/components/Gigs/style.scss @@ -23,6 +23,11 @@ height: 80vh; } + .wrap .content .right .support a { + font-weight: 600; + text-decoration: none; + } + .wrap { h2 { color: #26b3c5; @@ -118,15 +123,26 @@ li { font-size: 14px; line-height: 26px; - } + strong { + font-weight: bold; + } + } /* stylelint-enable */ ul { margin-bottom: 0; + list-style: none; + padding: 0; li { margin-bottom: 15px; + display: flex; + align-items: flex-start; + + img { + margin-right: 16px; + } &:last-child { margin-bottom: 0; @@ -138,6 +154,16 @@ .gig-skills { display: flex; } + + .support { + background-color: #eaf6fd; + border-radius: 10px; + padding: 20px; + text-transform: uppercase; + font-weight: 600; + font-family: Barlow, sans-serif; + margin-top: 20px; + } } .left { @@ -159,6 +185,16 @@ margin-top: 0; } } + + .skills { + display: flex; + align-items: center; + /* stylelint-disable */ + img { + margin-right: 8px; + } + /* stylelint-enable */ + } } } } diff --git a/src/shared/containers/Gigs/RecruitCRMJobs.jsx b/src/shared/containers/Gigs/RecruitCRMJobs.jsx index eacff10bde..e9ffd09d65 100644 --- a/src/shared/containers/Gigs/RecruitCRMJobs.jsx +++ b/src/shared/containers/Gigs/RecruitCRMJobs.jsx @@ -118,10 +118,15 @@ class RecruitCRMJobsContainer extends React.Component {
{ - jobsToDisplay.map(job => ) + jobsToDisplay.length + ? jobsToDisplay.map(job => ) + : No Results }
- + { + jobsToDisplay.length + ? : null + } ); } diff --git a/src/shared/containers/Gigs/jobLisingStyles.scss b/src/shared/containers/Gigs/jobLisingStyles.scss index ef403335ee..4edc9b7c5b 100644 --- a/src/shared/containers/Gigs/jobLisingStyles.scss +++ b/src/shared/containers/Gigs/jobLisingStyles.scss @@ -16,5 +16,10 @@ display: flex; flex-direction: column; margin: 20px 0 50px 0; + + .no-results { + display: flex; + justify-content: center; + } } } diff --git a/src/shared/containers/GigsPages.jsx b/src/shared/containers/GigsPages.jsx index 65b18b48a8..f0406e7259 100644 --- a/src/shared/containers/GigsPages.jsx +++ b/src/shared/containers/GigsPages.jsx @@ -6,7 +6,7 @@ import PT from 'prop-types'; import Header from 'containers/TopcoderHeader'; import Footer from 'components/TopcoderFooter'; import Viewport from 'components/Contentful/Viewport'; -import { config } from 'topcoder-react-utils'; +import { config, MetaTags } from 'topcoder-react-utils'; import RecruitCRMJobDetails from 'containers/Gigs/RecruitCRMJobDetails'; @@ -15,6 +15,7 @@ export default function GigsPagesContainer(props) { const { id } = match.params; return (
+
{ id ? ( From a74683fb7124c4087439a2cbd8ae7dcefaf5dc6f Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Thu, 27 Aug 2020 17:14:44 +0530 Subject: [PATCH 02/10] Merge pull request #4808 from cagdas001/fix-4747 refactor(challenge-detail): remove `finalSubmissionGuidelines` usages --- .../ChallengeSpecTab/index.jsx | 18 ----------- .../challenge-detail/Specification/index.jsx | 32 ------------------- 2 files changed, 50 deletions(-) diff --git a/src/shared/components/ReviewOpportunityDetailsPage/ChallengeSpecTab/index.jsx b/src/shared/components/ReviewOpportunityDetailsPage/ChallengeSpecTab/index.jsx index 829d428032..37c0d832c5 100644 --- a/src/shared/components/ReviewOpportunityDetailsPage/ChallengeSpecTab/index.jsx +++ b/src/shared/components/ReviewOpportunityDetailsPage/ChallengeSpecTab/index.jsx @@ -29,24 +29,6 @@ const ChallengeSpecTab = ({ challenge }) => ( ) } - { - challenge.finalSubmissionGuidelines - && ( -
-

- Final Submission Guidelines -

-
-
- ) - }
); diff --git a/src/shared/components/challenge-detail/Specification/index.jsx b/src/shared/components/challenge-detail/Specification/index.jsx index b6d3566c53..bb2b7b7817 100644 --- a/src/shared/components/challenge-detail/Specification/index.jsx +++ b/src/shared/components/challenge-detail/Specification/index.jsx @@ -45,7 +45,6 @@ export default function ChallengeDetailsView(props) { legacy, legacyId, documents, - finalSubmissionGuidelines, userDetails, metadata, events, @@ -196,35 +195,6 @@ export default function ChallengeDetailsView(props) { ) } - { - finalSubmissionGuidelines - && ( -
-

- Final Submission Guidelines -

- { - editMode ? ( - n && n.setHtml(finalSubmissionGuidelines)} - /> - ) : ( -
- ) - } -
- ) - } ) : ( @@ -408,7 +378,6 @@ ChallengeDetailsView.defaultProps = { track: 'design', reviewType: undefined, numberOfCheckpointsPrizes: 0, - finalSubmissionGuidelines: '', environment: '', descriptionFormat: 'HTML', codeRepo: '', @@ -438,7 +407,6 @@ ChallengeDetailsView.propTypes = { groups: PT.any, reviewType: PT.string, numberOfCheckpointsPrizes: PT.number, - finalSubmissionGuidelines: PT.string, environment: PT.string, codeRepo: PT.string, userDetails: PT.shape({ From dc26a4d10f2af96653596874e1002df68d9fa350 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Thu, 27 Aug 2020 19:30:18 +0530 Subject: [PATCH 03/10] Merge pull request #4823 from topcoder-platform/issue-4575-hotfix Challenge Listing - Fix TCO19 filter --- src/server/tc-communities/tco19/metadata.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/server/tc-communities/tco19/metadata.json b/src/server/tc-communities/tco19/metadata.json index 423235140a..d3e84c70ea 100644 --- a/src/server/tc-communities/tco19/metadata.json +++ b/src/server/tc-communities/tco19/metadata.json @@ -1,9 +1,6 @@ { "challengeFilter": { - "groupIds": ["20000078"], - "or": [{ - "tags": ["TCO", "TCO19"] - }] + "events": ["tco19"] }, "communityId": "tco19", "communityName": "TCO19", From 9c1aa4baa63132b0add9d6ea153ef011a7a789b6 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Mon, 31 Aug 2020 12:55:00 +0530 Subject: [PATCH 04/10] Merge pull request #4832 from topcoder-platform/issue-4730 Issue#4730 : Fix MM submissions --- .../challenge-detail/MySubmissions/index.jsx | 2 +- .../challenge-detail/Submissions/index.jsx | 11 ++++++---- .../containers/challenge-detail/index.jsx | 22 ++++++++----------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/shared/components/challenge-detail/MySubmissions/index.jsx b/src/shared/components/challenge-detail/MySubmissions/index.jsx index 3cc0c6536e..8687914a85 100644 --- a/src/shared/components/challenge-detail/MySubmissions/index.jsx +++ b/src/shared/components/challenge-detail/MySubmissions/index.jsx @@ -41,7 +41,7 @@ class MySubmissionsView extends React.Component { } if (isMM) { - loadMMSubmissions(challenge.id, challenge.registrants, auth.tokenV3); + loadMMSubmissions(challenge.id, auth.tokenV3); } } diff --git a/src/shared/components/challenge-detail/Submissions/index.jsx b/src/shared/components/challenge-detail/Submissions/index.jsx index b8e2e61c02..bf0beda012 100644 --- a/src/shared/components/challenge-detail/Submissions/index.jsx +++ b/src/shared/components/challenge-detail/Submissions/index.jsx @@ -54,7 +54,7 @@ class SubmissionsComponent extends React.Component { } if (isMM) { - loadMMSubmissions(challenge.id, challenge.registrants, auth.tokenV3); + loadMMSubmissions(challenge.id, auth.tokenV3); } this.updateSortedSubmissions(); } @@ -175,13 +175,16 @@ class SubmissionsComponent extends React.Component { valueA = `${a.member || ''}`.toLowerCase(); valueB = `${b.member || ''}`.toLowerCase(); } else { - valueA = _.get(a.registrant, 'memberHandle', ''); - valueB = _.get(b.registrant, 'memberHandle', ''); + valueA = _.get(a.registrant, 'memberHandle', '').toLowerCase(); + valueB = _.get(b.registrant, 'memberHandle', '').toLowerCase(); } valueIsString = true; break; } case 'Time': + valueA = new Date(a.submissions && a.submissions[0].submissionTime); + valueB = new Date(b.submissions && b.submissions[0].submissionTime); + break; case 'Submission Date': { valueA = new Date(a.created); valueB = new Date(b.created); @@ -247,7 +250,7 @@ class SubmissionsComponent extends React.Component { let isReviewPhaseComplete = false; _.forEach(allPhases, (phase) => { - if (phase.name === 'Review' && !phase.isOpen) { + if (phase.name === 'Review' && !phase.isOpen && moment(phase.scheduledStartDate).isBefore()) { isReviewPhaseComplete = true; } }); diff --git a/src/shared/containers/challenge-detail/index.jsx b/src/shared/containers/challenge-detail/index.jsx index 334758cd55..3bb14e4c1b 100644 --- a/src/shared/containers/challenge-detail/index.jsx +++ b/src/shared/containers/challenge-detail/index.jsx @@ -728,18 +728,15 @@ function mapStateToProps(state, props) { if (!_.isEmpty(mmSubmissions)) { mmSubmissions = mmSubmissions.map((submission) => { let registrant; - let { member } = submission; - if (auth.user.handle === submission.member) { + const { memberId } = submission; + let member = memberId; + if (`${auth.user.userId}` === `${memberId}`) { mySubmissions = submission.submissions || []; mySubmissions.forEach((mySubmission, index) => { mySubmissions[index].id = mySubmissions.length - index; }); } - let submissionDetail = _.find(challenge.submissions, { createdBy: submission.createdBy }); - if (!submissionDetail) { - // get submission detail from submissions challenge detail - submissionDetail = _.find(challenge.submissions, s => (`${s.memberId}` === `${submission.memberId}`)); - } + const submissionDetail = _.find(challenge.submissions, s => (`${s.memberId}` === `${submission.memberId}`)); if (submissionDetail) { member = submissionDetail.createdBy; @@ -747,12 +744,11 @@ function mapStateToProps(state, props) { } if (!registrant) { - registrant = _.find(challenge.registrants, { handle: submission.member }); + registrant = _.find(challenge.registrants, r => `${r.memberId}` === `${memberId}`); } - if (!submissionDetail && registrant) { - // sometime member is member id, do this to make sure it's alway member handle - member = registrant.handle; + if (registrant) { + member = registrant.memberHandle; } return ({ @@ -926,10 +922,10 @@ const mapDispatchToProps = (dispatch) => { dispatch(a.updateChallengeInit(uuid)); dispatch(a.updateChallengeDone(uuid, challenge, tokenV3)); }, - loadMMSubmissions: (challengeId, registrants, tokenV3) => { + loadMMSubmissions: (challengeId, tokenV3) => { const a = actions.challenge; dispatch(a.getMmSubmissionsInit(challengeId)); - dispatch(a.getMmSubmissionsDone(challengeId, registrants, tokenV3)); + dispatch(a.getMmSubmissionsDone(challengeId, tokenV3)); }, loadSubmissionInformation: (challengeId, submissionId, tokenV3) => { const a = actions.challenge; From 6325e10168545b188ccf46cc95249bacd5840370 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Tue, 1 Sep 2020 13:25:18 +0530 Subject: [PATCH 05/10] fix: release v1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c9ed33fbe..1667d3c8f6 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "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": "1.0.0", + "topcoder-react-lib": "1000.21.4", "topcoder-react-ui-kit": "2.0.0", "topcoder-react-utils": "0.7.8", "turndown": "^4.0.2", From e85e4a0e1be10aa141b9e6242ca69aae1f9356c4 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Thu, 27 Aug 2020 19:30:18 +0530 Subject: [PATCH 06/10] Merge pull request #4823 from topcoder-platform/issue-4575-hotfix Challenge Listing - Fix TCO19 filter From 850b2efc2bcb640fe00ea98c1f3804de62b9d31a Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Tue, 1 Sep 2020 15:06:59 +0530 Subject: [PATCH 07/10] fix: v5 release v1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1667d3c8f6..8a0d8872c9 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "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": "1000.21.4", + "topcoder-react-lib": "1000.21.5", "topcoder-react-ui-kit": "2.0.0", "topcoder-react-utils": "0.7.8", "turndown": "^4.0.2", From 25508b6425c77346ff7177c809cf86939928e5da Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Mon, 31 Aug 2020 12:42:59 +0530 Subject: [PATCH 08/10] ci: set env var COMMUNITY_APP_URL --- Dockerfile | 3 +++ build.sh | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 49e686a794..59d39c94bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,6 +64,8 @@ ARG TC_M2M_AUTH0_PROXY_SERVER_URL ARG TC_M2M_AUTH0_URL ARG AUTH_SECRET +ARG COMMUNITY_APP_URL + ################################################################################ # Setting of environment variables in the Docker image. @@ -117,6 +119,7 @@ ENV CONTENTFUL_EDU_SPACE_ID=$CONTENTFUL_EDU_SPACE_ID ENV CONTENTFUL_EDU_CDN_API_KEY=$CONTENTFUL_EDU_CDN_API_KEY ENV CONTENTFUL_EDU_PREVIEW_API_KEY=$CONTENTFUL_EDU_PREVIEW_API_KEY ENV RECRUITCRM_API_KEY=$RECRUITCRM_API_KEY +ENV COMMUNITY_APP_URL=$COMMUNITY_APP_URL ################################################################################ # Testing and build of the application inside the container. diff --git a/build.sh b/build.sh index 64affb8170..8c4660937b 100755 --- a/build.sh +++ b/build.sh @@ -43,7 +43,8 @@ docker build -t $TAG \ --build-arg CONTENTFUL_COMCAST_SPACE_ID=$CONTENTFUL_COMCAST_SPACE_ID \ --build-arg CONTENTFUL_COMCAST_CDN_API_KEY=$CONTENTFUL_COMCAST_CDN_API_KEY \ --build-arg CONTENTFUL_COMCAST_PREVIEW_API_KEY=$CONTENTFUL_COMCAST_PREVIEW_API_KEY \ - --build-arg RECRUITCRM_API_KEY=$RECRUITCRM_API_KEY . + --build-arg RECRUITCRM_API_KEY=$RECRUITCRM_API_KEY \ + --build-arg COMMUNITY_APP_URL=$COMMUNITY_APP_URL . # Copies "node_modules" from the created image, if necessary for caching. docker create --name app $TAG From 8b4f13d2b45554210b36da8faeee91ffab900dfe Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Thu, 27 Aug 2020 19:30:18 +0530 Subject: [PATCH 09/10] Merge pull request #4823 from topcoder-platform/issue-4575-hotfix Challenge Listing - Fix TCO19 filter From 7cca047c244a090aa90c4e2e331be4372fefa1c6 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Tue, 1 Sep 2020 16:12:50 +0530 Subject: [PATCH 10/10] ci: fixed missing files from the cherry pick --- src/server/tc-communities/tco20/metadata.json | 2 +- src/server/tc-communities/tco21/metadata.json | 2 +- src/shared/containers/challenge-listing/Listing/index.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/tc-communities/tco20/metadata.json b/src/server/tc-communities/tco20/metadata.json index 12ba613f5f..4b5a8e9cd7 100644 --- a/src/server/tc-communities/tco20/metadata.json +++ b/src/server/tc-communities/tco20/metadata.json @@ -1,6 +1,6 @@ { "challengeFilter": { - "tags": ["TCO", "TCO20"] + "events": ["tco20"] }, "communityId": "tco20", "communityName": "TCO20", diff --git a/src/server/tc-communities/tco21/metadata.json b/src/server/tc-communities/tco21/metadata.json index fa22f3f373..0e3f2ec708 100644 --- a/src/server/tc-communities/tco21/metadata.json +++ b/src/server/tc-communities/tco21/metadata.json @@ -1,6 +1,6 @@ { "challengeFilter": { - "tags": ["TCO", "TCO21"] + "events": ["tco21"] }, "communityId": "tco21", "communityName": "TCO21", diff --git a/src/shared/containers/challenge-listing/Listing/index.jsx b/src/shared/containers/challenge-listing/Listing/index.jsx index 8b27e52269..5d8a6b09fb 100644 --- a/src/shared/containers/challenge-listing/Listing/index.jsx +++ b/src/shared/containers/challenge-listing/Listing/index.jsx @@ -136,7 +136,7 @@ export class ListingContainer extends React.Component { if (communityFilter) communityFilter = communityFilter.challengeFilter; if (communityFilter) filter = combine(filter, communityFilter); if (communityId && !_.isEmpty(groupIds)) { - filter.groups = groupIds; + filter.groupIds = groupIds; } return { back: mapToBackend(filter),