UI - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: актуализация списка внешних контуров по исполнителям и обновлениям
This commit is contained in:
parent
da7351d19a
commit
6d67571b27
|
|
@ -95,6 +95,8 @@
|
||||||
- source-side список `Открытые / Завершенные`
|
- source-side список `Открытые / Завершенные`
|
||||||
- status pill по фактическому state целевой задачи
|
- status pill по фактическому state целевой задачи
|
||||||
- отображение целевого проекта
|
- отображение целевого проекта
|
||||||
|
- отображение исполнителей целевого контура
|
||||||
|
- отображение фактической даты последнего изменения
|
||||||
- открытие source-side detail экрана
|
- открытие source-side detail экрана
|
||||||
|
|
||||||
Что еще остается на следующие этапы:
|
Что еще остается на следующие этапы:
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,9 @@ export const ExternalContoursListItem = observer(function ExternalContoursListIt
|
||||||
|
|
||||||
if (!request || !issue) return <></>;
|
if (!request || !issue) return <></>;
|
||||||
|
|
||||||
const createdByDetails = issue.created_by_detail;
|
const assigneeDetails = issue.assignee_details?.slice(0, 2) ?? [];
|
||||||
const visibleLabels = issue.label_details?.slice(0, 3) ?? [];
|
const visibleLabels = issue.label_details?.slice(0, 3) ?? [];
|
||||||
|
const lastUpdatedAt = issue.updated_at || request.updated_at;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
|
|
@ -73,11 +74,11 @@ export const ExternalContoursListItem = observer(function ExternalContoursListIt
|
||||||
<div className="flex items-center justify-between gap-2">
|
<div className="flex items-center justify-between gap-2">
|
||||||
<div className="flex flex-wrap items-center gap-2">
|
<div className="flex flex-wrap items-center gap-2">
|
||||||
<Tooltip
|
<Tooltip
|
||||||
tooltipHeading={t("issues.properties.created_on")}
|
tooltipHeading={t("external_contours_page.list.last_updated")}
|
||||||
tooltipContent={`${renderFormattedDate(issue.created_at ?? "")}`}
|
tooltipContent={`${renderFormattedDate(lastUpdatedAt ?? "")}`}
|
||||||
isMobile={isMobile}
|
isMobile={isMobile}
|
||||||
>
|
>
|
||||||
<div className="text-11 text-secondary">{renderFormattedDate(issue.created_at ?? "")}</div>
|
<div className="text-11 text-secondary">{renderFormattedDate(lastUpdatedAt ?? "")}</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
||||||
{issue.priority && issue.priority !== "none" && (
|
{issue.priority && issue.priority !== "none" && (
|
||||||
|
|
@ -93,9 +94,25 @@ export const ExternalContoursListItem = observer(function ExternalContoursListIt
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
{createdByDetails ? (
|
<div className="flex items-center gap-1">
|
||||||
<Avatar src={createdByDetails.avatar_url || ""} name={createdByDetails.display_name || "NODE.DC"} size="md" showTooltip />
|
{assigneeDetails.length > 0 ? (
|
||||||
) : null}
|
<>
|
||||||
|
{assigneeDetails.map((assignee) => (
|
||||||
|
<Avatar
|
||||||
|
key={assignee.id}
|
||||||
|
src={assignee.avatar_url || ""}
|
||||||
|
name={assignee.display_name || "NODE.DC"}
|
||||||
|
size="md"
|
||||||
|
showTooltip
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<Tooltip tooltipHeading={t("assignee")} tooltipContent={t("external_contours_page.list.unassigned")} isMobile={isMobile}>
|
||||||
|
<div className="text-11 text-placeholder">{t("external_contours_page.list.unassigned")}</div>
|
||||||
|
</Tooltip>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Row>
|
</Row>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ export const ExternalContoursRequestTraceability = observer(function ExternalCon
|
||||||
const issue = contourRequest.issue;
|
const issue = contourRequest.issue;
|
||||||
const requestedByName = contourRequest.requested_by_name || issue.created_by_detail?.display_name || t("common.none");
|
const requestedByName = contourRequest.requested_by_name || issue.created_by_detail?.display_name || t("common.none");
|
||||||
const requestedAt = contourRequest.requested_at || contourRequest.created_at;
|
const requestedAt = contourRequest.requested_at || contourRequest.created_at;
|
||||||
|
const lastUpdatedAt = issue.updated_at || contourRequest.updated_at;
|
||||||
const targetProjectName = contourRequest.target_project_name || issue.project_detail?.name || t("common.none");
|
const targetProjectName = contourRequest.target_project_name || issue.project_detail?.name || t("common.none");
|
||||||
const targetIssueKey =
|
const targetIssueKey =
|
||||||
issue.project_detail?.identifier && issue.sequence_id
|
issue.project_detail?.identifier && issue.sequence_id
|
||||||
|
|
@ -80,6 +81,13 @@ export const ExternalContoursRequestTraceability = observer(function ExternalCon
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="rounded-md border border-subtle bg-surface-1 p-3">
|
||||||
|
<div className="text-11 font-medium text-tertiary">{t("external_contours_page.traceability.last_updated")}</div>
|
||||||
|
<div className="mt-1 text-13 font-medium text-secondary">
|
||||||
|
{lastUpdatedAt ? renderFormattedDate(lastUpdatedAt) : t("common.none")}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="rounded-md border border-subtle bg-surface-1 p-3">
|
<div className="rounded-md border border-subtle bg-surface-1 p-3">
|
||||||
<div className="text-11 font-medium text-tertiary">{t("external_contours_page.traceability.linked_item")}</div>
|
<div className="text-11 font-medium text-tertiary">{t("external_contours_page.traceability.linked_item")}</div>
|
||||||
<div className="mt-1 flex items-center gap-2">
|
<div className="mt-1 flex items-center gap-2">
|
||||||
|
|
|
||||||
|
|
@ -296,6 +296,10 @@ export default {
|
||||||
open: "Open",
|
open: "Open",
|
||||||
closed: "Closed",
|
closed: "Closed",
|
||||||
},
|
},
|
||||||
|
list: {
|
||||||
|
last_updated: "Last updated",
|
||||||
|
unassigned: "Unassigned",
|
||||||
|
},
|
||||||
empty_state: {
|
empty_state: {
|
||||||
title: "External contours module is ready for the next stage",
|
title: "External contours module is ready for the next stage",
|
||||||
description:
|
description:
|
||||||
|
|
@ -340,6 +344,7 @@ export default {
|
||||||
status: "Current status",
|
status: "Current status",
|
||||||
requested_by: "Requested by",
|
requested_by: "Requested by",
|
||||||
requested_at: "Sent at",
|
requested_at: "Sent at",
|
||||||
|
last_updated: "Last updated",
|
||||||
linked_item: "Linked work item",
|
linked_item: "Linked work item",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
|
|
||||||
|
|
@ -453,6 +453,10 @@ export default {
|
||||||
open: "Открытые",
|
open: "Открытые",
|
||||||
closed: "Закрытые",
|
closed: "Закрытые",
|
||||||
},
|
},
|
||||||
|
list: {
|
||||||
|
last_updated: "Последнее изменение",
|
||||||
|
unassigned: "Не назначено",
|
||||||
|
},
|
||||||
empty_state: {
|
empty_state: {
|
||||||
title: "Модуль внешних контуров подготовлен",
|
title: "Модуль внешних контуров подготовлен",
|
||||||
description:
|
description:
|
||||||
|
|
@ -496,6 +500,7 @@ export default {
|
||||||
status: "Текущий статус",
|
status: "Текущий статус",
|
||||||
requested_by: "Отправитель",
|
requested_by: "Отправитель",
|
||||||
requested_at: "Отправлено",
|
requested_at: "Отправлено",
|
||||||
|
last_updated: "Последнее изменение",
|
||||||
linked_item: "Связанная задача",
|
linked_item: "Связанная задача",
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue