Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions medcat-trainer/webapp/frontend/src/components/admin/DatasetForm.vue
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
<template>
<div class="form-section">
<div class="form-section admin-form-panel">
<div class="form-header">
<button class="btn btn-back" @click="$emit('close')">
<font-awesome-icon icon="arrow-left"></font-awesome-icon>
<span>Back</span>
</button>
<h3>{{ editing ? 'Edit Dataset' : 'Add Dataset' }}</h3>
<div class="form-header-actions">
<button type="submit" form="dataset-form" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save Dataset' }}</span>
</button>
</div>
</div>
<div class="form-content">
<form @submit.prevent="handleSubmit" class="admin-form">
<form id="dataset-form" @submit.prevent="handleSubmit" class="admin-form">
<div class="form-sections-wrapper">
<div class="form-section form-section-horizontal">
<div class="form-group">
Expand Down Expand Up @@ -70,13 +76,6 @@
</div>
</div>
</div>
<div class="form-actions">
<button type="button" class="btn btn-secondary" @click="$emit('close')">Cancel</button>
<button type="submit" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save' }}</span>
</button>
</div>
</form>
</div>
</div>
Expand Down Expand Up @@ -215,10 +214,20 @@ export default {
@import '@/styles/admin.scss';

// Component-specific styles
.form-section {
max-height: calc(100vh - 270px);
}
.admin-form-panel {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
max-height: none;

> .form-content {
padding: 0;
flex: 1;
min-height: 0;
}
}

.form-group {
textarea.form-control {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<template>
<div class="list-section">
<div class="section-header">
<h3>Datasets <span class="item-count">({{ datasets.length }})</span></h3>
</div>
<div v-if="datasets.length > 0" class="table-container">
<v-data-table
:items="datasets"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@
<span>Back</span>
</button>
<h3>{{ editing ? 'Edit Model Pack' : 'Add Model Pack' }}</h3>
<div class="form-header-actions">
<button type="submit" form="model-pack-form" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save Model Pack' }}</span>
</button>
</div>
</div>
<div class="form-content">
<form @submit.prevent="handleSubmit" class="admin-form">
<form id="model-pack-form" @submit.prevent="handleSubmit" class="admin-form">
<div class="form-sections-wrapper">
<div class="form-section form-section-horizontal">
<div class="form-group">
Expand Down Expand Up @@ -86,13 +92,6 @@
</div>
</div>
</div>
<div class="form-actions">
<button type="button" class="btn btn-secondary" @click="$emit('close')">Cancel</button>
<button type="submit" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save' }}</span>
</button>
</div>
</form>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<template>
<div class="list-section">
<div class="section-header">
<h3>Model Packs <span class="item-count">({{ modelPacks.length }})</span></h3>
</div>
<div v-if="modelPacks.length > 0" class="table-container">
<v-data-table
:items="modelPacks"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
<template>
<div class="project-list-section">
<div class="section-header">
<h3>
Your Projects
<span class="project-count">({{ projects.length }})</span>
</h3>
</div>

<div v-if="projects.length > 0" class="projects-table-container">
<div class="list-section">
<div v-if="projects.length > 0" class="table-container">
<v-data-table
:items="projects"
:headers="tableHeaders"
:hover="true"
@click:row="handleRowClick"
hide-default-footer
:items-per-page="-1"
class="projects-table"
item-class="project-row"
class="admin-table"
dense>
<template #item.name="{ item }">
<div class="project-name-cell">
Expand All @@ -29,7 +21,7 @@
</span>
</template>
<template #item.dataset="{ item }">
<span class="dataset-name">{{ getDatasetName(item.dataset) }}</span>
<span>{{ getDatasetName(item.dataset) }}</span>
</template>
<template #item.actions="{ item }">
<div class="action-buttons" @click.stop>
Expand All @@ -56,15 +48,13 @@
</v-data-table>
</div>

<div v-else class="no-projects">
<div class="empty-state">
<h4>No Projects Yet</h4>
<p>You don't have any projects yet. Create one to get started!</p>
<button class="btn btn-primary btn-create-empty" @click="$emit('create-project')">
<font-awesome-icon icon="plus"></font-awesome-icon>
<span>Create Your First Project</span>
</button>
</div>
<div v-else class="empty-state">
<h4>No Projects Yet</h4>
<p>You don't have any projects yet. Create one to get started!</p>
<button class="btn btn-primary btn-create-empty" @click="$emit('create-project')">
<font-awesome-icon icon="plus"></font-awesome-icon>
<span>Create Your First Project</span>
</button>
</div>
</div>
</template>
Expand Down Expand Up @@ -126,62 +116,16 @@ export default {
<style scoped lang="scss">
@import '@/styles/admin.scss';

// Component-specific styles
.project-list-section {
background: white;
border-radius: 8px;
padding: 24px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);

.section-header {
padding-bottom: 12px;
border-bottom: 1px solid var(--color-border);

h3 {
font-size: 1.3rem;
}
}

.projects-table-container {
overflow-x: auto;
}

.projects-table {
:deep(.project-row) {
.list-section {
.admin-table {
:deep(tbody tr) {
cursor: pointer;
transition: background-color 0.2s ease;

&:hover {
background-color: #f8f9fa;
}
}
}

.project-name-cell {
display: flex;
flex-direction: column;
gap: 4px;
}

.project-name {
font-size: 0.95rem;
color: var(--color-heading);
}

.project-description {
font-size: 0.85rem;
color: var(--color-text-secondary);
opacity: 0.8;
}

.dataset-name {
font-size: 0.9rem;
color: var(--color-text);
}

.no-projects {
padding: 60px 20px;
text-align: center;
}
}
</style>
15 changes: 7 additions & 8 deletions medcat-trainer/webapp/frontend/src/components/admin/UserForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@
<span>Back</span>
</button>
<h3>{{ editing ? 'Edit User' : 'Add User' }}</h3>
<div class="form-header-actions">
<button type="submit" form="user-form" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save User' }}</span>
</button>
</div>
</div>
<div class="form-content">
<form @submit.prevent="handleSubmit" class="admin-form">
<form id="user-form" @submit.prevent="handleSubmit" class="admin-form">
<div class="form-sections-wrapper">
<div class="form-section form-section-horizontal">
<div class="form-group">
Expand Down Expand Up @@ -53,13 +59,6 @@
</div>
</div>
</div>
<div class="form-actions">
<button type="button" class="btn btn-secondary" @click="$emit('close')">Cancel</button>
<button type="submit" class="btn btn-primary" :disabled="saving">
<font-awesome-icon v-if="saving" icon="spinner" spin></font-awesome-icon>
<span>{{ saving ? 'Saving...' : 'Save' }}</span>
</button>
</div>
</form>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<template>
<div class="list-section">
<div class="section-header">
<h3>Users <span class="item-count">({{ users.length }})</span></h3>
</div>
<div v-if="users.length > 0" class="table-container">
<v-data-table
:items="users"
Expand Down
50 changes: 34 additions & 16 deletions medcat-trainer/webapp/frontend/src/styles/_admin.scss
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
overflow: hidden;
display: flex;
flex-direction: column;
max-height: calc(100vh - 270px);
min-height: auto;
flex: 1;
min-height: 0;
max-height: none;
}

.form-header {
Expand Down Expand Up @@ -45,18 +46,48 @@
}

h3 {
flex: 1;
min-width: 0;
margin: 0;
font-size: 1.1rem;
font-weight: 600;
color: white;
}

.form-header-actions {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;

.btn {
padding: 6px 14px;
font-size: 0.875rem;
font-weight: 500;
border-radius: 6px;
white-space: nowrap;
}

.btn-primary {
background: white;
color: $primary;
border: none;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);

&:hover:not(:disabled) {
background: #f0f7ff;
}
}
}
}

.form-content {
flex: 1;
overflow: hidden;
padding: 16px 20px;
padding: 0;
display: flex;
flex-direction: column;
min-height: 0;
}

.admin-form {
Expand All @@ -73,24 +104,12 @@
padding: 20px;
background: #f8f9fa;
}

.form-actions {
margin-top: auto;
flex-shrink: 0;
padding: 20px;
border-top: 1px solid var(--color-border);
display: flex;
gap: 12px;
justify-content: flex-end;
background: var(--color-background-light);
}
}

// ============================================
// Form and modal action buttons (consistent styling)
// ============================================

.admin-form .form-actions,
.project-form .form-actions,
.confirm-modal .form-actions {
.btn {
Expand Down Expand Up @@ -547,7 +566,6 @@ input[type="file"].form-control,

// Action buttons styles - apply to all list sections
.list-section .action-buttons,
.project-list-section .action-buttons,
.action-buttons {
display: flex;
gap: 6px;
Expand Down
Loading