feat: enhance loading skeleton for tickets list with improved styling and structure
This commit is contained in:
@@ -27,8 +27,31 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@if (isLoading()) {
|
@if (isLoading()) {
|
||||||
|
<header class="tickets-list__skeleton-header" aria-hidden="true">
|
||||||
|
<div class="tickets-list__skeleton-selection">
|
||||||
|
<span class="tickets-list__skeleton-check"></span>
|
||||||
|
<span class="tickets-list__skeleton-line tickets-list__skeleton-line--section"></span>
|
||||||
|
</div>
|
||||||
|
<div class="tickets-list__skeleton-bulk-actions">
|
||||||
|
<span class="tickets-list__skeleton-icon"></span>
|
||||||
|
<span class="tickets-list__skeleton-icon"></span>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
@for (item of [1, 2, 3, 4]; track item) {
|
@for (item of [1, 2, 3, 4]; track item) {
|
||||||
<div class="tickets-list__skeleton" aria-hidden="true"></div>
|
<div class="tickets-list__skeleton" aria-hidden="true">
|
||||||
|
<span class="tickets-list__skeleton-check"></span>
|
||||||
|
<div class="tickets-list__skeleton-details">
|
||||||
|
<span class="tickets-list__skeleton-line tickets-list__skeleton-line--title"></span>
|
||||||
|
<span class="tickets-list__skeleton-line tickets-list__skeleton-line--id"></span>
|
||||||
|
</div>
|
||||||
|
<span class="tickets-list__skeleton-line tickets-list__skeleton-line--date"></span>
|
||||||
|
<div class="tickets-list__skeleton-actions">
|
||||||
|
<span class="tickets-list__skeleton-button"></span>
|
||||||
|
<span class="tickets-list__skeleton-icon"></span>
|
||||||
|
<span class="tickets-list__skeleton-icon"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
} @else if (tickets().length) {
|
} @else if (tickets().length) {
|
||||||
@for (ticket of activeTickets(); track ticket.id) {
|
@for (ticket of activeTickets(); track ticket.id) {
|
||||||
|
|||||||
@@ -75,15 +75,96 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tickets-list__skeleton {
|
.tickets-list__skeleton-header {
|
||||||
height: 77px;
|
display: flex;
|
||||||
|
min-height: 58px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-bottom: 12px;
|
||||||
border-bottom: 1px solid #dddddd;
|
border-bottom: 1px solid #dddddd;
|
||||||
background: linear-gradient(90deg, transparent, #f3f3f3, transparent);
|
|
||||||
background-size: 200% 100%;
|
|
||||||
animation: loading 1.4s infinite;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes loading {
|
.tickets-list__skeleton-selection,
|
||||||
|
.tickets-list__skeleton-bulk-actions,
|
||||||
|
.tickets-list__skeleton-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-selection {
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-bulk-actions,
|
||||||
|
.tickets-list__skeleton-actions {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto minmax(0, 1fr) 78px auto;
|
||||||
|
min-height: 76px;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
padding: 16px 0;
|
||||||
|
border-bottom: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-check,
|
||||||
|
.tickets-list__skeleton-line,
|
||||||
|
.tickets-list__skeleton-icon,
|
||||||
|
.tickets-list__skeleton-button {
|
||||||
|
display: block;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: linear-gradient(90deg, #eeeeee 20%, #f7f7f7 50%, #eeeeee 80%);
|
||||||
|
background-size: 200% 100%;
|
||||||
|
animation: tickets-loading 1.4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-check {
|
||||||
|
width: 21px;
|
||||||
|
height: 21px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-details {
|
||||||
|
display: grid;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-line--section {
|
||||||
|
width: 120px;
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-line--title {
|
||||||
|
width: min(240px, 75%);
|
||||||
|
height: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-line--id {
|
||||||
|
width: 86px;
|
||||||
|
height: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-line--date {
|
||||||
|
width: 64px;
|
||||||
|
height: 11px;
|
||||||
|
justify-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-button {
|
||||||
|
width: 115px;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-icon {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes tickets-loading {
|
||||||
to {
|
to {
|
||||||
background-position: -200% 0;
|
background-position: -200% 0;
|
||||||
}
|
}
|
||||||
@@ -93,4 +174,23 @@
|
|||||||
.tickets-page__title {
|
.tickets-page__title {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton {
|
||||||
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-line--date {
|
||||||
|
grid-column: 2;
|
||||||
|
justify-self: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-actions {
|
||||||
|
grid-column: 3;
|
||||||
|
grid-row: 1 / span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tickets-list__skeleton-actions .tickets-list__skeleton-icon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user