Add staff page with autofit grid
This commit is contained in:
@@ -242,7 +242,7 @@ function renderFamilies(grid) {
|
|||||||
return matches.length;
|
return matches.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderStaff(grid) {
|
function renderStaff(grid, autoFit) {
|
||||||
grid.className = '';
|
grid.className = '';
|
||||||
const staff = state.model.people.filter(p =>
|
const staff = state.model.people.filter(p =>
|
||||||
p.isStaff && `${p.fullName} ${p.jobTitle || ''}`.toLowerCase().includes(state.q));
|
p.isStaff && `${p.fullName} ${p.jobTitle || ''}`.toLowerCase().includes(state.q));
|
||||||
@@ -263,7 +263,7 @@ function renderStaff(grid) {
|
|||||||
let count = 0;
|
let count = 0;
|
||||||
for (const dept of ordered) {
|
for (const dept of ordered) {
|
||||||
grid.append(el('h2', 'staff-section', dept));
|
grid.append(el('h2', 'staff-section', dept));
|
||||||
const deptGrid = el('div', 'people-grid');
|
const deptGrid = el('div', 'people-grid' + (autoFit ? ' autofit' : ''));
|
||||||
for (const p of groups.get(dept)) {
|
for (const p of groups.get(dept)) {
|
||||||
const card = el('a', 'person-card');
|
const card = el('a', 'person-card');
|
||||||
card.href = personLink(p);
|
card.href = personLink(p);
|
||||||
@@ -363,6 +363,9 @@ function referrerCrumbs() {
|
|||||||
if (seg[0] === 'classrooms') {
|
if (seg[0] === 'classrooms') {
|
||||||
return [['Classrooms', '/classrooms']];
|
return [['Classrooms', '/classrooms']];
|
||||||
}
|
}
|
||||||
|
if (seg[0] === 'staff') {
|
||||||
|
return [['Staff', '/staff']];
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -869,6 +872,43 @@ function renderClassroomsPage() {
|
|||||||
renderList();
|
renderList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderStaffPage() {
|
||||||
|
const main = document.querySelector('#main');
|
||||||
|
main.replaceChildren();
|
||||||
|
|
||||||
|
const content = el('div', 'content container');
|
||||||
|
const header = el('div', 'content-header');
|
||||||
|
header.append(el('h1', '', 'Staff'));
|
||||||
|
const controls = el('div', 'controls');
|
||||||
|
const search = el('div', 'search');
|
||||||
|
search.append(svg('search'));
|
||||||
|
const input = el('input');
|
||||||
|
input.placeholder = 'Search';
|
||||||
|
input.value = state.q;
|
||||||
|
input.addEventListener('input', () => {
|
||||||
|
state.q = input.value.trim().toLowerCase();
|
||||||
|
renderList();
|
||||||
|
});
|
||||||
|
search.append(input);
|
||||||
|
const filter = el('button', 'filter-button');
|
||||||
|
filter.append(svg('filter'), el('span', '', 'Filter'), svg('chevron'));
|
||||||
|
controls.append(search, filter);
|
||||||
|
header.append(controls);
|
||||||
|
content.append(header);
|
||||||
|
|
||||||
|
const list = el('div');
|
||||||
|
content.append(list);
|
||||||
|
main.append(content);
|
||||||
|
|
||||||
|
function renderList() {
|
||||||
|
list.replaceChildren();
|
||||||
|
if (renderStaff(list, true) === 0) {
|
||||||
|
list.append(el('div', 'empty', 'No matches.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
renderList();
|
||||||
|
}
|
||||||
|
|
||||||
function parentsOf(students) {
|
function parentsOf(students) {
|
||||||
const seen = new Set();
|
const seen = new Set();
|
||||||
const parents = [];
|
const parents = [];
|
||||||
@@ -1036,6 +1076,9 @@ function render() {
|
|||||||
} else if (seg[0] === 'classrooms') {
|
} else if (seg[0] === 'classrooms') {
|
||||||
state.classTab = tabParam('by-classroom');
|
state.classTab = tabParam('by-classroom');
|
||||||
renderClassroomsPage();
|
renderClassroomsPage();
|
||||||
|
} else if (seg[0] === 'staff') {
|
||||||
|
state.q = '';
|
||||||
|
renderStaffPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,15 @@ main {
|
|||||||
gap: 32px 16px;
|
gap: 32px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.people-grid.autofit {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
.people-grid.autofit .person-photo {
|
||||||
|
width: 146px;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.person-card {
|
.person-card {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user