import {Button, Card, Space, Switch, Table} from "antd";
import queryString from "query-string";
import React, {useCallback, useState} from "react";
import {useTranslation} from "react-i18next";
import {Link, useLocation, useNavigate} from "react-router-dom";
import {pageLimit} from "../../utils/config";
import dayjs from "../../utils/day";
import {
CheckCircleFilled,
CheckCircleOutlined,
DeleteFilled,
DeleteOutlined,
EditFilled,
ExclamationCircleFilled,
PlusCircleFilled,
SyncOutlined
} from "@ant-design/icons";
import {DateFormatter} from "../../utils/DateFormatter.jsx";
import {connect} from 'react-redux';
import {setModalContext} from '../../redux/modals/modals.actions';
/**
* Task List Component
* @param dueDate
* @returns {Element}
* @constructor
*/
const DueDateRecord = ({dueDate}) => {
if (dueDate) {
const dueDateDayjs = dayjs(dueDate);
const relativeDueDate = dueDateDayjs.fromNow();
const today = dayjs();
if (dueDateDayjs.isAfter(today)) {
return
{dueDate}
;
} else {
return {dueDate}
;
}
} else {
return N/A
;
}
}
/**
* Priority Label Component
* @param priority
* @returns {Element}
* @constructor
*/
const PriorityLabel = ({priority}) => {
switch(priority) {
case 1:
return
High
;
case 2:
return
Medium
;
case 3:
return
Low
;
default:
return
None
;
}
}
const mapDispatchToProps = (dispatch) => ({
// Existing dispatch props...
setTaskUpsertContext: (context) => dispatch(setModalContext({context, modal: 'taskUpsert'})),
});
const mapStateToProps = (state) => ({
// Existing state props...
});
export default connect(mapStateToProps, mapDispatchToProps)(TaskListComponent);
function TaskListComponent({
loading,
tasks,
total,
refetch,
toggleCompletedStatus,
setTaskUpsertContext,
}) {
const {t} = useTranslation();
const search = queryString.parse(useLocation().search);
// Extract Query Params
const {
page,
sortcolumn,
sortorder,
deleted,
completed
} = search;
const history = useNavigate();
const columns = [
{
title: t("tasks.fields.job.ro_number"),
dataIndex: ["job", "ro_number"],
key: "job.ro_number",
width: '5%',
render: (text, record) => (
{record.job.ro_number}
),
},
{
title: t("tasks.fields.title"),
dataIndex: "title",
key: "title",
sorter: true,
sortOrder: sortcolumn === "title" && sortorder,
},
{
title: t("tasks.fields.description"),
dataIndex: "description",
key: "description",
sorter: true,
sortOrder: sortcolumn === "description" && sortorder,
},
{
title: t("tasks.fields.due_date"),
dataIndex: "due_date",
key: "due_date",
sorter: true,
sortOrder: sortcolumn === "due_date" && sortorder,
width: '5%',
render: (text, record) => ,
},
{
title: t("tasks.fields.priority"),
dataIndex: "priority",
key: "priority",
sorter: true,
sortOrder: sortcolumn === "priority" && sortorder,
width: '5%',
render: (text, record) =>
},
{
title: t("tasks.fields.actions"),
key: "toggleCompleted",
width: '5%',
render: (text, record) => (
),
},
];
const [state, setState] = useState({
sortedInfo: {},
filteredInfo: {text: ""},
});
const handleCreateTask = () => {
setTaskUpsertContext({
actions: {},
context: {},
});
};
const handleTableChange = (pagination, filters, sorter) => {
setState({...state, filteredInfo: filters, sortedInfo: sorter});
search.page = pagination.current;
search.sortcolumn = sorter.columnKey;
search.sortorder = sorter.order;
history({search: queryString.stringify(search)});
};
const handleSwitchChange = (param, value) => {
if (value) {
search[param] = "true";
} else {
delete search[param];
}
history({search: queryString.stringify(search)});
};
/**
* Extra actions for the tasks
* @type {Function}
*/
const tasksExtra = useCallback(() => {
return (
}
unCheckedChildren={}
title={t('tasks.titles.completed')}
checked={completed === "true"}
onChange={(value) => handleSwitchChange('completed', value)}
/>
}
unCheckedChildren={}
title={t('tasks.titles.deleted')}
checked={deleted === "true"}
onChange={(value) => handleSwitchChange('deleted', value)}
/>
);
}, [refetch, deleted, completed]);
return (
);
}