Skip to content

Commit

Permalink
Merge pull request #1227 from AletheiaFact/filter-tasks-by-cross-chec…
Browse files Browse the repository at this point in the history
…king-and-reviews

Implemented kanban filter to visualize assigned cross-checkings and assigned reviewers
  • Loading branch information
thesocialdev committed Jun 8, 2024
2 parents 1e32cf2 + be531d7 commit a205865
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 21 deletions.
4 changes: 3 additions & 1 deletion public/locales/en/kanban.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{
"claimBy": "Claim by",
"assignedTo": "Fact-checkers",
"myTasks": "My tasks only"
"myTasks": "My tasks only",
"myCrossChecks": "My cross-checks only",
"myReviews": "My reviews only"
}
4 changes: 3 additions & 1 deletion public/locales/pt/kanban.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{
"claimBy": "Afirmação de",
"assignedTo": "Checadores",
"myTasks": "Apenas minhas tarefas"
"myTasks": "Apenas minhas tarefas",
"myCrossChecks": "Apenas meus cross-checkings",
"myReviews": "Minhas revisões"
}
35 changes: 25 additions & 10 deletions server/claim-review-task/claim-review-task.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,19 @@ export class ClaimReviewTaskService {
_buildPipeline(value, filterUser, nameSpace) {
const pipeline = [];
const query = getQueryMatchForMachineValue(value);
const fieldMap = {
assigned: "machine.context.reviewData.usersId",
crossChecked: "machine.context.reviewData.crossCheckerId",
reviewed: "machine.context.reviewData.reviewerId",
};

if (filterUser === true) {
query["machine.context.reviewData.usersId"] = Types.ObjectId(
this.req.user._id
);
}
Object.keys(filterUser).forEach((key) => {
const value = filterUser[key];
if (value === true || value === "true") {
const queryPath = fieldMap[key];
query[queryPath] = Types.ObjectId(this.req.user._id);
}
});

pipeline.push(
{ $match: query },
Expand Down Expand Up @@ -511,11 +518,19 @@ export class ClaimReviewTaskService {

async countReviewTasksNotDeleted(query, filterUser, nameSpace) {
try {
if (filterUser === true) {
query["machine.context.reviewData.usersId"] = Types.ObjectId(
this.req.user._id
);
}
const fieldMap = {
assigned: "machine.context.reviewData.usersId",
crossChecked: "machine.context.reviewData.crossCheckerId",
reviewed: "machine.context.reviewData.reviewerId",
};

Object.keys(filterUser).forEach((key) => {
const value = filterUser[key];
if (value === true || value === "true") {
const queryPath = fieldMap[key];
query[queryPath] = Types.ObjectId(this.req.user._id);
}
});

const pipeline = [
{ $match: query },
Expand Down
10 changes: 7 additions & 3 deletions server/claim-review-task/dto/get-tasks.dto.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
IsBoolean,
IsInt,
IsNumber,
IsObject,
IsOptional,
IsString,
Min,
Expand All @@ -23,9 +23,13 @@ export class GetTasksDTO {
@IsString()
value: string;

@IsBoolean()
@IsObject()
@IsOptional()
filterUser?: boolean;
filterUser?: {
assigned: boolean;
crossChecked: boolean;
reviewerd: boolean;
};

@IsString()
@IsOptional()
Expand Down
2 changes: 1 addition & 1 deletion src/api/ClaimReviewTaskApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const getClaimReviewTasks = (options) => {
order: options.order || "asc",
pageSize: options.pageSize ? options.pageSize : 5,
value: options.value,
filterUser: options.filterUser ? true : null,
filterUser: options.filterUser,
nameSpace: options.nameSpace ? options.nameSpace : NameSpaceEnum.Main,
};
return request
Expand Down
6 changes: 5 additions & 1 deletion src/components/Kanban/KanbanCol.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ const StyledColumn = styled.div`
interface KanbanColProps {
nameSpace: string;
state: ReviewTaskStates;
filterUser: boolean;
filterUser: {
assigned: boolean;
crossChecked: boolean;
reviewed: boolean;
};
}

const KanbanCol = ({ nameSpace, state, filterUser }: KanbanColProps) => {
Expand Down
48 changes: 44 additions & 4 deletions src/components/Kanban/KanbanView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ const KanbanView = () => {
state !== ReviewTaskStates.addCommentCrossChecking &&
state !== ReviewTaskStates.rejected
);
const [filterUser, setFilterUser] = useState(false);
const [filterUserTasks, setFilterUserTasks] = useState({
assigned: false,
crossChecked: false,
reviewed: false,
});

return (
<Row justify="center" style={{ padding: "3vh 0", height: "100%" }}>
Expand All @@ -36,12 +40,48 @@ const KanbanView = () => {
<FormControlLabel
control={
<Switch
checked={filterUser}
onChange={() => setFilterUser(!filterUser)}
checked={filterUserTasks.assigned}
onChange={() =>
setFilterUserTasks((prev) => ({
reviewed: false,
crossChecked: false,
assigned: !prev.assigned,
}))
}
/>
}
label={t("kanban:myTasks")}
/>
<FormControlLabel
control={
<Switch
checked={filterUserTasks.crossChecked}
onChange={() =>
setFilterUserTasks((prev) => ({
assigned: false,
reviewed: false,
crossChecked: !prev.crossChecked,
}))
}
/>
}
label={t("kanban:myCrossChecks")}
/>
<FormControlLabel
control={
<Switch
checked={filterUserTasks.reviewed}
onChange={() =>
setFilterUserTasks((prev) => ({
assigned: false,
crossChecked: false,
reviewed: !prev.reviewed,
}))
}
/>
}
label={t("kanban:myReviews")}
/>
</Col>
<Col
span={23}
Expand All @@ -59,7 +99,7 @@ const KanbanView = () => {
key={state}
nameSpace={nameSpace}
state={ReviewTaskStates[state]}
filterUser={filterUser}
filterUser={filterUserTasks}
/>
);
})}
Expand Down

0 comments on commit a205865

Please sign in to comment.