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
66 changes: 65 additions & 1 deletion src/app/components/scheduling/scheduling.html
Original file line number Diff line number Diff line change
@@ -1 +1,65 @@
<p>scheduling works!</p>
<div class="schedule-management-container">

<h2>Schedule Management</h2>

<div class="action-bar">

<div class="tabs">
<span class="tab active">Upcoming</span>
<span class="tab">History</span>
</div>

<div class="controls-right">
<select class="filter-dropdown">
<option>Filter by Hospital</option>
</select>
<select class="filter-dropdown">
<option>Filter by Attendees</option>
</select>
<button class="new-meeting-btn">+ New Meeting</button>
</div>

</div>

<div class="table-container">
<table>
<thead>
<tr>
<th>Subject</th>
<th>Hospital</th>
<th>Scheduled Date</th>
<th>Duration</th>
<th>Time Zone</th>
<th>Attendees</th>
<th></th> </tr>
</thead>
<tbody>
@for (meeting of meetings; track meeting.subject) {
<tr>
<td class="subject">{{ meeting.subject }}</td>
<td class="hospital">{{ meeting.hospital }}</td>
<td class="date">
<i class="fa fa-clock-o" aria-hidden="true" style="margin-right: 5px; color: #9ca3af;"></i>
{{ meeting.date }}
</td>
<td><span class="duration-badge">{{ meeting.duration }}</span></td>
<td class="timezone">{{ meeting.timezone }}</td>
<td class="attendees">{{ meeting.attendees }}</td>
<td class="action">

<button class="go-to-meeting-btn">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="btn-icon">
<path d="M23 7l-7 5 7 5V7z"></path>
<rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect>
</svg>
Go to meeting
</button>

</td>
</tr>
}
</tbody>
</table>
</div>

</div>
225 changes: 225 additions & 0 deletions src/app/components/scheduling/scheduling.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
// Variables
$primary-teal: #0f9d89;
$bg-light: #f9fafb;
$text-dark: #111827;
$text-gray: #6b7280;
$border-color: #e5e7eb;
$teams-blue: #0065b8;

.schedule-management-container {
padding: 24px 40px;
background-color: $bg-light;
min-height: 100vh;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

// 1. Title Style
h2 {
color: $text-dark;
font-size: 24px;
margin: 0 0 25px 0;
font-weight: 600;
}

// 2. Action Bar (Tabs Left, Controls Right)
.action-bar {
display: flex;
justify-content: space-between; // This pushes items to edges
align-items: center;
margin-bottom: 20px;
border-bottom: 1px solid $border-color; // Gray line across width
padding-bottom: 0;

// Left Side
.tabs {
display: flex;
gap: 30px;

.tab {
color: $text-gray;
cursor: pointer;
font-weight: 500;
font-size: 15px;
position: relative;
padding-bottom: 12px; // Space for the border

&:hover {
color: $text-dark;
}

&.active {
color: $primary-teal;

// The green underline
&::after {
content: '';
position: absolute;
bottom: -1px; // Sits on top of the gray border
left: 0;
width: 100%;
height: 3px;
background-color: $primary-teal;
}
}
}
}

// Right Side
.controls-right {
display: flex;
gap: 15px;
align-items: center;
padding-bottom: 12px; // Align vertically with tabs

.filter-dropdown {
padding: 8px 12px;
border: 1px solid $border-color;
border-radius: 4px;
background-color: #fff;
color: $text-gray;
min-width: 160px;
font-size: 14px;
outline: none;
height: 36px;

&:focus {
border-color: $primary-teal;
}
}

.new-meeting-btn {
background-color: $primary-teal;
color: #fff;
border: none;
padding: 0 20px;
height: 36px; // Same height as inputs
border-radius: 4px;
font-weight: 600;
font-size: 14px;
cursor: pointer;
transition: background-color 0.2s;

&:hover {
background-color: darken($primary-teal, 5%);
}
}
}
}

// 3. Table Section
.table-container {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
width: 100%;
overflow: hidden;

table {
width: 100%;
border-collapse: collapse;
table-layout: fixed; // Forces columns to respect width %

// Column Width Definitions
th:nth-child(1) { width: 18%; } // Subject
th:nth-child(2) { width: 18%; } // Hospital
th:nth-child(3) { width: 14%; } // Date
th:nth-child(4) { width: 8%; } // Duration
th:nth-child(5) { width: 14%; } // Time Zone
th:nth-child(6) { width: 14%; } // Attendees
th:nth-child(7) { width: 14%; } // Action Button

thead {
tr {
border-bottom: 1px solid $border-color;
th {
text-align: left;
padding: 16px 15px;
color: $text-dark;
font-weight: 600;
font-size: 14px;
white-space: nowrap;
}
}
}

tbody {
tr {
border-bottom: 1px solid $border-color;

&:last-child {
border-bottom: none;
}

td {
padding: 16px 15px;
color: $text-dark;
vertical-align: middle;
font-size: 13px;
line-height: 1.4;
word-wrap: break-word; // Allows text wrapping

&.subject, &.hospital {
font-weight: 600;
}

&.date {
color: $text-gray;
white-space: nowrap;
}

&.timezone, &.attendees {
color: $text-gray;
}

&.attendees {
color: $text-dark;
}

.duration-badge {
display: inline-block;
padding: 4px 10px;
background-color: #fff;
color: $text-gray;
border: 1px solid $border-color;
border-radius: 4px;
font-size: 12px;
white-space: nowrap;
text-align: center;
}

&.action {
text-align: right;
}

// Blue Button Style
.go-to-meeting-btn {
background-color: $teams-blue;
color: #fff;
border: none;
padding: 8px 12px;
border-radius: 4px;
font-size: 13px;
font-weight: 500;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
max-width: 140px;
transition: background-color 0.2s;

&:hover {
background-color: darken($teams-blue, 10%);
}

svg {
width: 16px;
height: 16px;
}
}
}
}
}
}
}
}
65 changes: 57 additions & 8 deletions src/app/components/scheduling/scheduling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,64 @@

// }
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';

@Component({
selector: 'app-scheduling',
standalone: true,
template: `
<div style="padding: 20px;">
<h2>Scheduling</h2>
<p>This is the placeholder page for Scheduling.</p>
</div>
`
templateUrl: './scheduling.html',
styleUrls: ['./scheduling.scss'],
imports: [CommonModule],
})
export class SchedulingComponent {}
export class SchedulingComponent {
// Mock data to populate the table
meetings = [
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - Canton - Roaring',
date: '10/05/2025 | 3:00 pm',
duration: '30 min',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / Bianca Briga'
},
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - Chester - Chester',
date: '10/18/2025 | 1:00 pm',
duration: '1 hr',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / Lisa Mullin'
},
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - East Hartford - East Hartford',
date: '10/21/2025 | 1:30 pm',
duration: '1 hr',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / Emily Davies'
},
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - Kensington - Berlin',
date: '10/29/2025 | 9:00 am',
duration: '30 min',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / Sarah Smith'
},
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - New Fairfield - New Fairfield',
date: '11/09/2025 | 3:00 pm',
duration: '30 min',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / Meredith Rivers'
},
{
subject: 'Leadership Toolkit Meeting',
hospital: 'CT - Norwalk - A Cat\'s Place',
date: '11/16/2025 | 1:00 pm',
duration: '30 min',
timezone: 'Central Time (US & Canada)',
attendees: 'Victoria Brown / John Smith'
}
];
}