Merge pull request 'summary-skills' (#1) from summary-skills into main
Reviewed-on: #1
This commit is contained in:
@ -43,7 +43,7 @@ const Home = () => {
|
||||
const tempTags = values.map((value, index) =>
|
||||
value.map((val) => {
|
||||
return { id: val.id, value: val.tags, name: keys[index] };
|
||||
}),
|
||||
})
|
||||
);
|
||||
dispatch(tags(tempTags));
|
||||
});
|
||||
|
@ -40,11 +40,11 @@ export const PartnerAddRequest = () => {
|
||||
const [editRequest, setEditRequest] = useState(false);
|
||||
const [selectedSkills, setSelectedSkills] = useState([]);
|
||||
const [selectedSpecialization, setSelectedSpecialization] = useState(
|
||||
"Выберите специализацию",
|
||||
"Выберите специализацию"
|
||||
);
|
||||
const [selectedLevel, setSelectedLevel] = useState("Выберите уровень");
|
||||
const [selectedCount, setSelectedCount] = useState(
|
||||
"Выберите кол-во сотрудников",
|
||||
"Выберите кол-во сотрудников"
|
||||
);
|
||||
const [inputs, setInputs] = useState({ title: "", description: "" });
|
||||
|
||||
@ -57,7 +57,7 @@ export const PartnerAddRequest = () => {
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(`/profile/positions-list`).then((el) =>
|
||||
setSpecializationList(el),
|
||||
setSpecializationList(el)
|
||||
);
|
||||
apiRequest(`/profile/level-list`).then((el) => setLevelList(el));
|
||||
apiRequest(`/skills/get-skills-list`).then((el) => {
|
||||
@ -247,7 +247,7 @@ export const PartnerAddRequest = () => {
|
||||
setSelectedSkills(
|
||||
selectedSkills.filter((skill, indexSkill) => {
|
||||
return indexSkill !== index;
|
||||
}),
|
||||
})
|
||||
);
|
||||
}}
|
||||
/>
|
||||
@ -263,7 +263,7 @@ export const PartnerAddRequest = () => {
|
||||
return skill.name
|
||||
.toLowerCase()
|
||||
.includes(e.target.value.toLowerCase());
|
||||
}),
|
||||
})
|
||||
);
|
||||
}}
|
||||
/>
|
||||
@ -282,12 +282,12 @@ export const PartnerAddRequest = () => {
|
||||
setFilteredSkills(
|
||||
filteredSkills.filter((skill, skillIndex) => {
|
||||
return skillIndex !== index;
|
||||
}),
|
||||
})
|
||||
);
|
||||
setSkills(
|
||||
skills.filter((initSkill) => {
|
||||
return initSkill.id !== skill.id;
|
||||
}),
|
||||
})
|
||||
);
|
||||
setOpenSkillsSelect(false);
|
||||
}}
|
||||
|
@ -140,8 +140,8 @@ export const PartnerBid = () => {
|
||||
partnerRequests[
|
||||
partnerRequests.findIndex((el) => el.id === requestId) -
|
||||
1
|
||||
].id,
|
||||
),
|
||||
].id
|
||||
)
|
||||
);
|
||||
}}
|
||||
>
|
||||
@ -162,8 +162,8 @@ export const PartnerBid = () => {
|
||||
partnerRequests[
|
||||
partnerRequests.findIndex((el) => el.id === requestId) +
|
||||
1
|
||||
].id,
|
||||
),
|
||||
].id
|
||||
)
|
||||
);
|
||||
}}
|
||||
>
|
||||
|
@ -33,8 +33,8 @@ export const PartnerRequests = () => {
|
||||
useEffect(() => {
|
||||
apiRequest(
|
||||
`/request/get-request-list?user_id=${localStorage.getItem(
|
||||
"id",
|
||||
)}&search_depth=3`,
|
||||
"id"
|
||||
)}&search_depth=3`
|
||||
).then((el) => {
|
||||
setRequests(el);
|
||||
setLoader(false);
|
||||
|
@ -23,7 +23,7 @@ import "./profile.scss";
|
||||
export const Profile = () => {
|
||||
const profileInfo = useSelector(getProfileInfo);
|
||||
const [user] = useState(
|
||||
localStorage.getItem("role_status") === "18" ? "partner" : "developer",
|
||||
localStorage.getItem("role_status") === "18" ? "partner" : "developer"
|
||||
);
|
||||
const [profileItemsInfo] = useState({
|
||||
developer: [
|
||||
|
@ -169,7 +169,7 @@ export const ProjectTracker = () => {
|
||||
startTask: startWrapperIndexTest.current.task,
|
||||
finishTask: task,
|
||||
finishIndex: finishTask,
|
||||
}),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@ -207,7 +207,7 @@ export const ProjectTracker = () => {
|
||||
moveProjectTask({
|
||||
startWrapperIndex: startWrapperIndexTest.current,
|
||||
columnId,
|
||||
}),
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -382,7 +382,7 @@ export const ProjectTracker = () => {
|
||||
(div) =>
|
||||
div.classList &&
|
||||
(div.classList.contains("addPerson") ||
|
||||
div.classList.contains("persons__list")),
|
||||
div.classList.contains("persons__list"))
|
||||
)
|
||||
) {
|
||||
setPersonListOpen(false);
|
||||
@ -394,7 +394,7 @@ export const ProjectTracker = () => {
|
||||
(div) =>
|
||||
div.classList &&
|
||||
(div.classList.contains("tasks__head__executor") ||
|
||||
div.classList.contains("tasks__head__executorDropdown")),
|
||||
div.classList.contains("tasks__head__executorDropdown"))
|
||||
)
|
||||
) {
|
||||
setSelectedExecutorOpen(false);
|
||||
@ -406,7 +406,7 @@ export const ProjectTracker = () => {
|
||||
(div) =>
|
||||
div.classList &&
|
||||
(div.classList.contains("tasks__head__tags") ||
|
||||
div.classList.contains("tags__list")),
|
||||
div.classList.contains("tags__list"))
|
||||
)
|
||||
) {
|
||||
setTags({
|
||||
@ -427,7 +427,7 @@ export const ProjectTracker = () => {
|
||||
(div) =>
|
||||
div.classList &&
|
||||
(div.classList.contains("board__head__more") ||
|
||||
div.classList.contains("column__select")),
|
||||
div.classList.contains("column__select"))
|
||||
)
|
||||
) {
|
||||
setOpenColumnSelect((prevState) => {
|
||||
@ -577,7 +577,7 @@ export const ProjectTracker = () => {
|
||||
<span>{projectBoard.projectUsers?.length}</span>
|
||||
{caseOfNum(
|
||||
projectBoard.projectUsers?.length,
|
||||
"persons",
|
||||
"persons"
|
||||
)}
|
||||
</div>
|
||||
<div className="persons__list__info">
|
||||
@ -880,7 +880,7 @@ export const ProjectTracker = () => {
|
||||
column.id,
|
||||
projectBoard?.columns && column.tasks.length
|
||||
? column.tasks[0].priority - 1
|
||||
: 1,
|
||||
: 1
|
||||
);
|
||||
}}
|
||||
>
|
||||
@ -959,7 +959,7 @@ export const ProjectTracker = () => {
|
||||
onClick={() => {
|
||||
if (window.innerWidth < 985) {
|
||||
window.location.replace(
|
||||
`/tracker/task/${task.id}`,
|
||||
`/tracker/task/${task.id}`
|
||||
);
|
||||
}
|
||||
}}
|
||||
@ -1037,7 +1037,7 @@ export const ProjectTracker = () => {
|
||||
{task.comment_count}{" "}
|
||||
{caseOfNum(
|
||||
task.comment_count,
|
||||
"comments",
|
||||
"comments"
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
@ -1051,7 +1051,7 @@ export const ProjectTracker = () => {
|
||||
</div>
|
||||
<TrackerSelectColumn
|
||||
columns={projectBoard.columns.filter(
|
||||
(item) => item.id !== column.id,
|
||||
(item) => item.id !== column.id
|
||||
)}
|
||||
currentColumn={column}
|
||||
task={task}
|
||||
|
@ -17,6 +17,8 @@ import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
||||
|
||||
import rightArrow from "assets/icons/arrows/arrowRight.svg";
|
||||
import arrow from "assets/icons/arrows/left-arrow.png";
|
||||
import arrowDown from "assets/icons/arrows/selectArrow.png";
|
||||
import deleteIcon from "assets/icons/closeProjectPersons.svg";
|
||||
import gitImgItem from "assets/icons/gitItemImg.svg";
|
||||
import avatarMok from "assets/images/avatarMok.png";
|
||||
|
||||
@ -30,18 +32,40 @@ export const Summary = () => {
|
||||
const [openGit, setOpenGit] = useState(false);
|
||||
const [gitInfo, setGitInfo] = useState([]);
|
||||
const [editSummeryOpen, setEditSummeryOpen] = useState(false);
|
||||
const [editSkills, setEditSkills] = useState(false);
|
||||
const [summery, setSummery] = useState("");
|
||||
const [selectedSkills, setSelectedSkills] = useState([]);
|
||||
const [selectSkillsOpen, setSelectSkillsOpen] = useState(false);
|
||||
const [skillsList, seSkillsList] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(
|
||||
`/profile/portfolio-projects?card_id=${localStorage.getItem("cardId")}`,
|
||||
`/profile/portfolio-projects?card_id=${localStorage.getItem("cardId")}`
|
||||
).then((responseGit) => setGitInfo(responseGit));
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
setSummery(profileInfo.vc_text);
|
||||
setSelectedSkills(profileInfo.skillValues);
|
||||
}, [profileInfo]);
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(`/skills/get-skills-list`).then((el) => {
|
||||
seSkillsList(el);
|
||||
});
|
||||
}, []);
|
||||
|
||||
function setSkills() {
|
||||
apiRequest("/resume/edit-skills", {
|
||||
method: "PUT",
|
||||
data: {
|
||||
UserCard: {
|
||||
skill: selectedSkills.map((item) => item.skill_id),
|
||||
},
|
||||
},
|
||||
}).then(() => {});
|
||||
}
|
||||
|
||||
function editSummery() {
|
||||
apiRequest("/resume/edit-text", {
|
||||
method: "PUT",
|
||||
@ -98,18 +122,84 @@ export const Summary = () => {
|
||||
<div className="summary__skills skills__section">
|
||||
<div className="summary__sections__head">
|
||||
<h3>Основной стек</h3>
|
||||
<button>Редактировать</button>
|
||||
<button
|
||||
className={editSkills ? "edit" : ""}
|
||||
onClick={() => {
|
||||
if (editSkills) {
|
||||
setSkills();
|
||||
}
|
||||
setEditSkills(!editSkills);
|
||||
}}
|
||||
>
|
||||
{editSkills ? "Сохранить" : "Редактировать"}
|
||||
</button>
|
||||
</div>
|
||||
<div className="skills__section__items">
|
||||
<div className="skills__section__items__wrapper">
|
||||
{profileInfo.skillValues &&
|
||||
profileInfo.skillValues.map((skill, index) => (
|
||||
<span key={skill.id} className="skill_item">
|
||||
{skill.skill.name}
|
||||
{profileInfo.skillValues.length > index + 1 && ","}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
{editSkills ? (
|
||||
<div className="editSkills">
|
||||
{selectedSkills &&
|
||||
selectedSkills.map((skill) => {
|
||||
return (
|
||||
<span key={skill.skill_id}>
|
||||
{skill.skill.name}
|
||||
<img
|
||||
src={deleteIcon}
|
||||
alt="deleteIcon"
|
||||
onClick={() =>
|
||||
setSelectedSkills((prevValue) =>
|
||||
prevValue.filter(
|
||||
(item) => item.skill_id !== skill.skill_id
|
||||
)
|
||||
)
|
||||
}
|
||||
/>
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
<div className="selectSkills">
|
||||
<div
|
||||
className="selectSkills__name"
|
||||
onClick={() => setSelectSkillsOpen(!selectSkillsOpen)}
|
||||
>
|
||||
Выберите скилл
|
||||
<img
|
||||
className={selectSkillsOpen ? "open" : ""}
|
||||
src={arrowDown}
|
||||
/>
|
||||
</div>
|
||||
{selectSkillsOpen && (
|
||||
<div className="selectSkills__dropDown">
|
||||
{skillsList.map((skill) => {
|
||||
return (
|
||||
<p
|
||||
onClick={() =>
|
||||
setSelectedSkills((prevValue) => [
|
||||
...prevValue,
|
||||
{ skill: skill, skill_id: skill.id },
|
||||
])
|
||||
}
|
||||
key={skill.id}
|
||||
className="selectSkills__item"
|
||||
>
|
||||
{skill.name}
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div className="skills__section__items__wrapper">
|
||||
{selectedSkills &&
|
||||
selectedSkills.map((skill, index) => (
|
||||
<span key={skill.id} className="skill_item">
|
||||
{skill.skill.name}
|
||||
{selectedSkills.length > index + 1 && ","}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
@ -249,6 +249,89 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.editSkills {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 14px;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
display: flex;
|
||||
column-gap: 8px;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 15px;
|
||||
padding: 3px 10px 3px 10px;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
line-height: 32px;
|
||||
white-space: nowrap;
|
||||
text-transform: uppercase;
|
||||
|
||||
img {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.selectSkills {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
|
||||
&__name {
|
||||
display: flex;
|
||||
column-gap: 12px;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 15px;
|
||||
padding: 3px 10px 3px 10px;
|
||||
|
||||
img {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.open {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
&__dropDown {
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
border-radius: 12px;
|
||||
max-height: 300px;
|
||||
overflow-y: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 5px;
|
||||
align-items: center;
|
||||
padding: 7px;
|
||||
top: 35px;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #cbd9f9;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #c5c0c6;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
p {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__experience {
|
||||
|
@ -57,8 +57,8 @@ export const Tracker = () => {
|
||||
setLoader(true);
|
||||
apiRequest(
|
||||
`/project/project-list?user_id=${localStorage.getItem(
|
||||
"id",
|
||||
)}&expand=columns`,
|
||||
"id"
|
||||
)}&expand=columns`
|
||||
).then((el) => {
|
||||
dispatch(setAllProjects(el.projects));
|
||||
setLoader(false);
|
||||
@ -74,9 +74,7 @@ export const Tracker = () => {
|
||||
// }, []))
|
||||
});
|
||||
apiRequest(
|
||||
`/task/get-user-tasks?user_id=${localStorage.getItem(
|
||||
"id",
|
||||
)}&expand=timers`,
|
||||
`/task/get-user-tasks?user_id=${localStorage.getItem("id")}&expand=timers`
|
||||
).then((el) => {
|
||||
const allTasks = el ? el.filter((item) => item.status !== 0) : [];
|
||||
const completedTasks = el ? el.filter((item) => item.status === 0) : [];
|
||||
@ -105,7 +103,7 @@ export const Tracker = () => {
|
||||
) {
|
||||
return item;
|
||||
}
|
||||
}),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@ -123,7 +121,7 @@ export const Tracker = () => {
|
||||
) {
|
||||
return item;
|
||||
}
|
||||
}),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@ -207,7 +205,7 @@ export const Tracker = () => {
|
||||
{typeof projects === "object" &&
|
||||
(!Boolean(projects.length) ||
|
||||
!Boolean(
|
||||
projects.filter((project) => project.status !== 10).length,
|
||||
projects.filter((project) => project.status !== 10).length
|
||||
)) &&
|
||||
!loader && (
|
||||
<div className="no-projects">
|
||||
@ -473,7 +471,7 @@ export const Tracker = () => {
|
||||
? "-"
|
||||
: task.timers.map((item) => {
|
||||
let time = new Date(
|
||||
item.deltaSeconds * 1000,
|
||||
item.deltaSeconds * 1000
|
||||
)
|
||||
.toISOString()
|
||||
.slice(11, 19);
|
||||
@ -509,13 +507,13 @@ export const Tracker = () => {
|
||||
${caseOfNum(
|
||||
projects.filter((project) => project.status === 10)
|
||||
.length,
|
||||
"projects",
|
||||
"projects"
|
||||
)}`}
|
||||
</p>
|
||||
</div>
|
||||
<div className="archive__tasksWrapper">
|
||||
{Boolean(
|
||||
projects.filter((project) => project.status === 10).length,
|
||||
projects.filter((project) => project.status === 10).length
|
||||
) ? (
|
||||
projects.map((project, index) => {
|
||||
return project.status === 10 ? (
|
||||
|
@ -42,8 +42,8 @@ export const ViewReport = () => {
|
||||
setTomorrowTask([]);
|
||||
apiRequest(
|
||||
`reports/find-by-date?user_card_id=${localStorage.getItem(
|
||||
"cardId",
|
||||
)}&date=${day}`,
|
||||
"cardId"
|
||||
)}&date=${day}`
|
||||
).then((res) => {
|
||||
let spendTime = 0;
|
||||
for (const item of res) {
|
||||
|
@ -103,7 +103,7 @@ export const QuizPage = () => {
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(
|
||||
`/user-questionnaire/questionnaires-list?user_id=${userId}`,
|
||||
`/user-questionnaire/questionnaires-list?user_id=${userId}`
|
||||
).then((res) => dispatch(setQuestionnaires(res)));
|
||||
}, []);
|
||||
|
||||
|
Reference in New Issue
Block a user