mirror of
https://github.com/TronoSfera/Law.git
synced 2026-05-18 18:13:46 +03:00
141 lines
4.7 KiB
JavaScript
141 lines
4.7 KiB
JavaScript
import {
|
|
OPERATOR_LABELS,
|
|
SERVICE_REQUEST_STATUS_LABELS,
|
|
SERVICE_REQUEST_TYPE_LABELS,
|
|
TABLE_SERVER_CONFIG,
|
|
} from "../../shared/constants.js";
|
|
import { fmtDate } from "../../shared/utils.js";
|
|
|
|
function serviceRequestTypeLabel(value) {
|
|
const code = String(value || "").toUpperCase();
|
|
return SERVICE_REQUEST_TYPE_LABELS[code] || code || "-";
|
|
}
|
|
|
|
function serviceRequestStatusLabel(value) {
|
|
const code = String(value || "").toUpperCase();
|
|
return SERVICE_REQUEST_STATUS_LABELS[code] || code || "-";
|
|
}
|
|
|
|
function unreadLabel(row, role) {
|
|
if (String(role || "").toUpperCase() === "LAWYER") {
|
|
return row?.lawyer_unread ? "Да" : "Нет";
|
|
}
|
|
return row?.admin_unread ? "Да" : "Нет";
|
|
}
|
|
|
|
export function ServiceRequestsSection({
|
|
role,
|
|
tables,
|
|
status,
|
|
getStatus,
|
|
getFieldDef,
|
|
getFilterValuePreview,
|
|
onRefresh,
|
|
onOpenFilter,
|
|
onRemoveFilter,
|
|
onEditFilter,
|
|
onSort,
|
|
onPrev,
|
|
onNext,
|
|
onLoadAll,
|
|
onOpenRequest,
|
|
onMarkRead,
|
|
onEditRecord,
|
|
onDeleteRecord,
|
|
FilterToolbarComponent,
|
|
DataTableComponent,
|
|
TablePagerComponent,
|
|
StatusLineComponent,
|
|
IconButtonComponent,
|
|
}) {
|
|
const tableState = tables?.serviceRequests || { rows: [], filters: [], sort: [] };
|
|
const FilterToolbar = FilterToolbarComponent;
|
|
const DataTable = DataTableComponent;
|
|
const TablePager = TablePagerComponent;
|
|
const StatusLine = StatusLineComponent;
|
|
const IconButton = IconButtonComponent;
|
|
const roleCode = String(role || "").toUpperCase();
|
|
|
|
return (
|
|
<>
|
|
<div className="section-head">
|
|
<div>
|
|
<h2>Запросы</h2>
|
|
<p className="muted">Запросы клиента к куратору и обращения на смену юриста.</p>
|
|
</div>
|
|
</div>
|
|
<FilterToolbar
|
|
filters={tableState.filters}
|
|
onOpen={onOpenFilter}
|
|
onRemove={onRemoveFilter}
|
|
onEdit={onEditFilter}
|
|
hideAction
|
|
getChipLabel={(clause) => {
|
|
const fieldDef = getFieldDef("serviceRequests", clause.field);
|
|
return (
|
|
(fieldDef ? fieldDef.label : clause.field) +
|
|
" " +
|
|
OPERATOR_LABELS[clause.op] +
|
|
" " +
|
|
getFilterValuePreview("serviceRequests", clause)
|
|
);
|
|
}}
|
|
/>
|
|
<DataTable
|
|
headers={[
|
|
{ key: "type", label: "Тип", sortable: true, field: "type" },
|
|
{ key: "status", label: "Статус", sortable: true, field: "status" },
|
|
{ key: "body", label: "Обращение", sortable: false },
|
|
{ key: "request_id", label: "Заявка", sortable: true, field: "request_id" },
|
|
{ key: "unread", label: "Непрочитано", sortable: true, field: roleCode === "LAWYER" ? "lawyer_unread" : "admin_unread" },
|
|
{ key: "created_at", label: "Создан", sortable: true, field: "created_at" },
|
|
{ key: "actions", label: "Действия" },
|
|
]}
|
|
rows={tableState.rows}
|
|
emptyColspan={7}
|
|
onSort={onSort}
|
|
sortClause={(tableState.sort && tableState.sort[0]) || TABLE_SERVER_CONFIG.serviceRequests.sort[0]}
|
|
renderRow={(row) => (
|
|
<tr key={row.id}>
|
|
<td>{serviceRequestTypeLabel(row.type)}</td>
|
|
<td>{serviceRequestStatusLabel(row.status)}</td>
|
|
<td>{row.body || "-"}</td>
|
|
<td>
|
|
{row.request_id ? (
|
|
<button type="button" className="request-track-link" onClick={(event) => onOpenRequest(row.request_id, event)} title="Открыть заявку">
|
|
<code>{row.request_id}</code>
|
|
</button>
|
|
) : (
|
|
"-"
|
|
)}
|
|
</td>
|
|
<td>{unreadLabel(row, roleCode)}</td>
|
|
<td>{fmtDate(row.created_at)}</td>
|
|
<td>
|
|
<div className="table-actions">
|
|
<IconButton icon="✓" tooltip="Отметить прочитанным" onClick={() => onMarkRead(row.id)} />
|
|
{roleCode === "ADMIN" ? (
|
|
<>
|
|
<IconButton icon="✎" tooltip="Редактировать запрос" onClick={() => onEditRecord(row)} />
|
|
<IconButton icon="🗑" tooltip="Удалить запрос" onClick={() => onDeleteRecord(row.id)} tone="danger" />
|
|
</>
|
|
) : null}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
)}
|
|
/>
|
|
<TablePager
|
|
tableState={tableState}
|
|
onPrev={onPrev}
|
|
onNext={onNext}
|
|
onLoadAll={onLoadAll}
|
|
onRefresh={onRefresh}
|
|
onOpenFilter={onOpenFilter}
|
|
/>
|
|
<StatusLine status={status || (typeof getStatus === "function" ? getStatus("serviceRequests") : null)} />
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default ServiceRequestsSection;
|