Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 3a25e96

Browse files
authored
Merge pull request #384 from topcoder-platform/dev
[PROD] Next Release
2 parents ea75ce5 + a791e9a commit 3a25e96

File tree

47 files changed

+1252
-325
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1252
-325
lines changed

package-lock.json

+25-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@
8787
"redux-logger": "^3.0.6",
8888
"redux-promise-middleware": "^6.1.2",
8989
"redux-thunk": "^2.3.0",
90-
"tc-auth-lib": "topcoder-platform/tc-auth-lib#1.0.4"
90+
"tc-auth-lib": "topcoder-platform/tc-auth-lib#1.0.4",
91+
"uuid": "^8.3.2"
9192
},
9293
"browserslist": [
9394
"last 1 version",

src/assets/images/customer-logos.svg

+139
Loading
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import React from "react";
2+
import "./styles.module.scss";
3+
4+
function CustomerScroll() {
5+
return (
6+
<div>
7+
<h6 styleName="title">Trusted By</h6>
8+
<div styleName="scrolling-logos" />
9+
</div>
10+
);
11+
}
12+
13+
export default CustomerScroll;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
@import "styles/include";
2+
3+
.title {
4+
@include font-barlow;
5+
font-weight: 600;
6+
font-size: 22px;
7+
color: #7f7f7f;
8+
text-align: center;
9+
text-transform: uppercase;
10+
margin-bottom: 30px;
11+
}
12+
13+
@keyframes scroll {
14+
from {background-position: 0 0;}
15+
to {background-position: -7701px 0;}
16+
}
17+
18+
.scrolling-logos {
19+
background-image: url("../../assets/images/customer-logos.svg");
20+
background-size: cover;
21+
height: 60px;
22+
width: 100%;
23+
animation: scroll 300s linear infinite;
24+
position: relative;
25+
26+
&:before {
27+
background: linear-gradient(to right, #F4F5F6 0%, rgba(255, 255, 255, 0) 100%);
28+
content: '';
29+
height: 60px;
30+
left: 0;
31+
position: absolute;
32+
top: 0;
33+
width: 60px;
34+
z-index: 2;
35+
}
36+
&:after {
37+
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #F4F5F6 100%);
38+
content: '';
39+
height: 60px;
40+
position: absolute;
41+
right: 0;
42+
top: 0;
43+
width: 60px;
44+
z-index: 2;
45+
}
46+
}
47+
48+
@media only screen and (max-height: 859px) {
49+
.scrolling-logos {
50+
height: 30px;
51+
}
52+
.title {
53+
font-size: 16px;
54+
margin-bottom: 15px;
55+
}
56+
}

src/constants/index.js

+12
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export const CANDIDATE_STATUS = {
111111
TOPCODER_REJECTED: "topcoder-rejected",
112112
JOB_CLOSED: "job-closed",
113113
OFFERED: "offered",
114+
WITHDRAWN: "withdrawn",
114115
};
115116

116117
/**
@@ -133,20 +134,23 @@ export const CANDIDATE_STATUS_FILTERS = [
133134
title: "Candidates to Review",
134135
noCandidateMessage: "No Candidates To Review",
135136
statuses: [CANDIDATE_STATUS.OPEN],
137+
urlParam: "to-review",
136138
},
137139
{
138140
key: CANDIDATE_STATUS_FILTER_KEY.INTERESTED,
139141
buttonText: "Interviews",
140142
title: "Interviews",
141143
noCandidateMessage: "No Interviews",
142144
statuses: [CANDIDATE_STATUS.INTERVIEW],
145+
urlParam: "interviews",
143146
},
144147
{
145148
key: CANDIDATE_STATUS_FILTER_KEY.SELECTED,
146149
buttonText: "Selected",
147150
title: "Selected",
148151
noCandidateMessage: "No Selected Candidates",
149152
statuses: [CANDIDATE_STATUS.SELECTED, CANDIDATE_STATUS.OFFERED],
153+
urlParam: "selected",
150154
},
151155
{
152156
key: CANDIDATE_STATUS_FILTER_KEY.NOT_INTERESTED,
@@ -159,7 +163,9 @@ export const CANDIDATE_STATUS_FILTERS = [
159163
CANDIDATE_STATUS.REJECTED_OTHER,
160164
CANDIDATE_STATUS.TOPCODER_REJECTED,
161165
CANDIDATE_STATUS.JOB_CLOSED,
166+
CANDIDATE_STATUS.WITHDRAWN,
162167
],
168+
urlParam: "declined",
163169
},
164170
];
165171

@@ -264,6 +270,7 @@ export const ACTION_TYPE = {
264270
*/
265271
ADD_MATCHING_ROLE: "ADD_MATCHING_ROLE",
266272
DELETE_MATCHING_ROLE: "DELETE_MATCHING_ROLE",
273+
EDIT_MATCHING_ROLE: "EDIT_MATCHING_ROLE",
267274
};
268275

269276
/**
@@ -366,3 +373,8 @@ export const MAX_ALLOWED_INTERVIEWS = 3;
366373
* Custom role names to remove from RoleList component
367374
*/
368375
export const CUSTOM_ROLE_NAMES = ["custom", "niche"];
376+
377+
/**
378+
* Minimal Resource Booking duration (weeks)
379+
*/
380+
export const MIN_DURATION = 4;

src/root.component.jsx

+8-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import JobDetails from "./routes/JobDetails";
1010
import JobForm from "./routes/JobForm";
1111
import TeamAccess from "./routes/TeamAccess";
1212
import CreateNewTeam from "./routes/CreateNewTeam";
13+
import CreateTeamLanding from "./routes/CreateNewTeam/pages/CreateTeamLanding";
1314
import InputSkills from "./routes/CreateNewTeam/pages/InputSkills";
1415
import InputJobDescription from "./routes/CreateNewTeam/pages/InputJobDescription";
1516
import SelectRole from "./routes/CreateNewTeam/pages/SelectRole";
@@ -25,18 +26,20 @@ export default function Root() {
2526
<Router>
2627
<Redirect from="/taas" to="/taas/myteams" exact />
2728
<MyTeamsList path="/taas/myteams" />
28-
<CreateNewTeam path="/taas/createnewteam" />
2929
<MyTeamsDetails path="/taas/myteams/:teamId" />
3030
<JobDetails path="/taas/myteams/:teamId/positions/:jobId" />
3131
<JobForm path="/taas/myteams/:teamId/positions/:jobId/edit" />
3232
<JobForm path="/taas/myteams/:teamId/positions/new" />
3333
<ResourceBookingDetails path="/taas/myteams/:teamId/rb/:resourceBookingId" />
3434
<ResourceBookingForm path="/taas/myteams/:teamId/rb/:resourceBookingId/edit" />
35-
<PositionDetails path="/taas/myteams/:teamId/positions/:positionId/candidates" />
35+
<PositionDetails path="/taas/myteams/:teamId/positions/:positionId/candidates/*candidateStatus" />
3636
<TeamAccess path="/taas/myteams/:teamId/access" />
37-
<InputJobDescription path="/taas/createnewteam/jd/*" />
38-
<InputSkills path="/taas/createnewteam/skills/*" />
39-
<SelectRole path="/taas/createnewteam/role/*" />
37+
<CreateNewTeam path="/taas/createnewteam">
38+
<CreateTeamLanding path="/" />
39+
<InputJobDescription path="jd/*" />
40+
<InputSkills path="skills/*" />
41+
<SelectRole path="role/*" />
42+
</CreateNewTeam>
4043
</Router>
4144

4245
{/* Global config for Toastr popups */}

src/routes/CreateNewTeam/actions/index.js

+10
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ const deleteMatchingRole = () => ({
3636
type: ACTION_TYPE.DELETE_MATCHING_ROLE,
3737
});
3838

39+
const editMatchingRole = (role) => ({
40+
type: ACTION_TYPE.EDIT_MATCHING_ROLE,
41+
payload: role,
42+
});
43+
3944
export const clearSearchedRoles = () => (dispatch, getState) => {
4045
dispatch(clearRoles());
4146
updateLocalStorage(getState().searchedRoles);
@@ -51,6 +56,11 @@ export const addRoleSearchId = (id) => (dispatch, getState) => {
5156
updateLocalStorage(getState().searchedRoles);
5257
};
5358

59+
export const editRoleAction = (role) => (dispatch, getState) => {
60+
dispatch(editMatchingRole(role));
61+
updateLocalStorage(getState().searchedRoles);
62+
};
63+
5464
export const deleteSearchedRole = (id) => (dispatch, getState) => {
5565
dispatch(deleteRole(id));
5666
updateLocalStorage(getState().searchedRoles);

0 commit comments

Comments
 (0)