fix(ui): make exchange table fill page height with vertical scroll
This commit is contained in:
@@ -268,7 +268,7 @@ function LayoutContent() {
|
|||||||
<ContentTabs active={scope.tab} onChange={setTab} scope={scope} />
|
<ContentTabs active={scope.tab} onChange={setTab} scope={scope} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<main style={{ flex: 1, overflow: 'auto', padding: isAdminPage ? '1.5rem' : 0 }}>
|
<main style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden', padding: isAdminPage ? '1.5rem' : 0 }}>
|
||||||
<Outlet />
|
<Outlet />
|
||||||
</main>
|
</main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,23 +1,36 @@
|
|||||||
/* Scrollable content area */
|
/* Scrollable content area — fills remaining height */
|
||||||
.content {
|
.content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow-y: auto;
|
min-height: 0;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
background: var(--bg-body);
|
background: var(--bg-body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Table section — stretches to fill and scrolls internally */
|
||||||
|
|
||||||
|
|
||||||
/* Filter bar spacing */
|
/* Filter bar spacing */
|
||||||
.filterBar {
|
.filterBar {
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Table section */
|
|
||||||
.tableSection {
|
.tableSection {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
background: var(--bg-surface);
|
background: var(--bg-surface);
|
||||||
border-bottom: 1px solid var(--border-subtle);
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tableScroll {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.tableHeader {
|
.tableHeader {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -267,27 +267,29 @@ export default function Dashboard() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DataTable
|
<div className={styles.tableScroll}>
|
||||||
columns={columns}
|
<DataTable
|
||||||
data={rows}
|
columns={columns}
|
||||||
onRowClick={handleRowClick}
|
data={rows}
|
||||||
selectedId={selectedId}
|
onRowClick={handleRowClick}
|
||||||
sortable
|
selectedId={selectedId}
|
||||||
flush
|
sortable
|
||||||
onSortChange={handleSortChange}
|
flush
|
||||||
rowAccent={handleRowAccent}
|
onSortChange={handleSortChange}
|
||||||
expandedContent={(row: Row) =>
|
rowAccent={handleRowAccent}
|
||||||
row.errorMessage ? (
|
expandedContent={(row: Row) =>
|
||||||
<div className={styles.inlineError}>
|
row.errorMessage ? (
|
||||||
<span className={styles.inlineErrorIcon}><AlertTriangle size={14} /></span>
|
<div className={styles.inlineError}>
|
||||||
<div>
|
<span className={styles.inlineErrorIcon}><AlertTriangle size={14} /></span>
|
||||||
<div className={styles.inlineErrorText}>{row.errorMessage}</div>
|
<div>
|
||||||
<div className={styles.inlineErrorHint}>Click to view full stack trace</div>
|
<div className={styles.inlineErrorText}>{row.errorMessage}</div>
|
||||||
|
<div className={styles.inlineErrorHint}>Click to view full stack trace</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
) : null
|
||||||
) : null
|
}
|
||||||
}
|
/>
|
||||||
/>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user