feat(helpdesk): add domain linking, bulk actions, and revision polish to handovers
Adds domain selection (cascaded from debitor) to handover creation and edit, bulk delete with confirmation dialog, and various UI improvements to the handover wizard and list page. Includes migration for domain columns, domain-select AJAX endpoint, and updated tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1448,8 +1448,6 @@
|
||||
overflow-x: clip;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#app-details-aside-section .helpdesk-comm-aside {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -1513,7 +1511,7 @@
|
||||
|
||||
.helpdesk-ticket-meta dd {
|
||||
margin: 0.15rem 0 0;
|
||||
font-size: var(--text-sm);
|
||||
font-size: var(--text-base);
|
||||
line-height: 1.4;
|
||||
color: var(--app-contrast, #1f2937);
|
||||
word-break: break-word;
|
||||
@@ -2429,7 +2427,11 @@
|
||||
}
|
||||
|
||||
.handover-schema-preview-highlight {
|
||||
background-color: color-mix(in srgb, var(--app-primary, #635bff) 5%, transparent);
|
||||
background-color: color-mix(
|
||||
in srgb,
|
||||
var(--app-primary, #635bff) 5%,
|
||||
transparent
|
||||
);
|
||||
border-left-color: var(--app-primary, #635bff);
|
||||
}
|
||||
|
||||
@@ -2614,7 +2616,9 @@
|
||||
border-radius: var(--app-border-radius);
|
||||
color: var(--app-muted-color);
|
||||
text-decoration: none;
|
||||
transition: background 0.15s ease, color 0.15s ease;
|
||||
transition:
|
||||
background 0.15s ease,
|
||||
color 0.15s ease;
|
||||
}
|
||||
|
||||
.app-wizard-back:hover {
|
||||
@@ -2653,7 +2657,10 @@
|
||||
border: 2px solid var(--app-border);
|
||||
color: var(--app-muted-color);
|
||||
background: transparent;
|
||||
transition: border-color 0.2s ease, background 0.2s ease, color 0.2s ease;
|
||||
transition:
|
||||
border-color 0.2s ease,
|
||||
background 0.2s ease,
|
||||
color 0.2s ease;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -2798,12 +2805,12 @@
|
||||
|
||||
/* Vertical line */
|
||||
.handover-revision-timeline::before {
|
||||
content: '';
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0.4375rem;
|
||||
left: 2.9px;
|
||||
top: 0.5rem;
|
||||
bottom: 0.5rem;
|
||||
width: 2px;
|
||||
width: 1px;
|
||||
background: var(--app-border);
|
||||
}
|
||||
|
||||
@@ -2817,7 +2824,7 @@
|
||||
|
||||
/* Circle node */
|
||||
.handover-revision-item::before {
|
||||
content: '';
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: -1.25rem;
|
||||
top: calc(var(--app-spacing) * 0.4 + 0.35rem);
|
||||
@@ -2869,11 +2876,14 @@
|
||||
color: var(--app-muted-color);
|
||||
text-decoration: none;
|
||||
border-radius: var(--app-border-radius);
|
||||
opacity: 0;
|
||||
transition: opacity 0.15s ease, color 0.15s ease;
|
||||
opacity: 0.55;
|
||||
transition:
|
||||
opacity 0.15s ease,
|
||||
color 0.15s ease;
|
||||
}
|
||||
|
||||
.handover-revision-item:hover .handover-revision-compare {
|
||||
.handover-revision-item:hover .handover-revision-compare,
|
||||
.handover-revision-compare:focus-visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@@ -2881,6 +2891,11 @@
|
||||
color: var(--app-primary);
|
||||
}
|
||||
|
||||
.handover-revision-compare:focus-visible {
|
||||
outline: 2px solid color-mix(in srgb, var(--app-primary) 45%, transparent);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.handover-revision-number {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -2985,18 +3000,113 @@
|
||||
}
|
||||
|
||||
.handover-diff-indicator::before {
|
||||
content: '±';
|
||||
content: "±";
|
||||
font-weight: var(--font-semibold, 600);
|
||||
color: hsl(40 70% 45%);
|
||||
}
|
||||
|
||||
.handover-diff-added .handover-diff-indicator::before {
|
||||
content: '+';
|
||||
content: "+";
|
||||
color: hsl(145 60% 38%);
|
||||
}
|
||||
|
||||
.handover-diff-removed .handover-diff-indicator::before {
|
||||
content: '−';
|
||||
content: "−";
|
||||
color: hsl(0 70% 50%);
|
||||
}
|
||||
|
||||
/* Domain detail page */
|
||||
.helpdesk-domain-url-prominent {
|
||||
font-size: var(--text-lg);
|
||||
font-weight: var(--font-semibold);
|
||||
word-break: break-all;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.helpdesk-domain-url-prominent:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.helpdesk-domain-overview-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: calc(var(--app-spacing) * 1.25);
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
@media (max-width: 760px) {
|
||||
.helpdesk-domain-overview-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Related domains — compact aside list */
|
||||
.helpdesk-domain-related-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: calc(var(--app-spacing) * 0.35);
|
||||
padding: calc(var(--app-spacing) * 0.4) 0;
|
||||
border-bottom: 1px solid var(--app-border-subtle, #f0f0f0);
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
font-size: var(--text-sm);
|
||||
}
|
||||
|
||||
.helpdesk-domain-related-item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.helpdesk-domain-related-item:hover .helpdesk-domain-related-item-url {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.helpdesk-domain-related-item-url {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* Handover list — Stripe-style compact clickable rows */
|
||||
.helpdesk-domain-handover-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1px;
|
||||
background: var(--app-border-subtle, #f0f0f0);
|
||||
border-radius: var(--app-border-radius);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.helpdesk-domain-handover-item {
|
||||
display: block;
|
||||
padding: calc(var(--app-spacing) * 0.65) calc(var(--app-spacing) * 0.75);
|
||||
background: var(--app-card-background-color, #fff);
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
transition: background-color 0.15s ease;
|
||||
}
|
||||
|
||||
.helpdesk-domain-handover-item:hover {
|
||||
background: var(--app-card-sectioning-background-color, #fafafa);
|
||||
}
|
||||
|
||||
.helpdesk-domain-handover-item-main {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: calc(var(--app-spacing) * 0.5);
|
||||
}
|
||||
|
||||
.helpdesk-domain-handover-item-product {
|
||||
font-size: var(--text-sm);
|
||||
font-weight: var(--font-semibold);
|
||||
color: var(--app-contrast, #1f2937);
|
||||
}
|
||||
|
||||
.helpdesk-domain-handover-item-meta {
|
||||
margin-top: 0.15rem;
|
||||
font-size: var(--text-xs);
|
||||
color: var(--app-muted, #6c757d);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user