diff --git a/src/routes/[id]/+page.server.ts b/src/routes/[id]/+page.server.ts
index bfe1516..d5b4903 100644
--- a/src/routes/[id]/+page.server.ts
+++ b/src/routes/[id]/+page.server.ts
@@ -8,6 +8,7 @@ export interface EmployeeRecord {
id: string;
First_Name: string;
Last_Name: string;
+ Type?: string;
Phone_Number: string;
Email_Address: string;
Voxer_ID: string;
diff --git a/src/routes/[id]/+page.svelte b/src/routes/[id]/+page.svelte
index ba51b16..610aea8 100644
--- a/src/routes/[id]/+page.svelte
+++ b/src/routes/[id]/+page.svelte
@@ -6,7 +6,7 @@
import { Label } from '$lib/components/ui/label/index.js';
import * as Dialog from '$lib/components/ui/dialog/index.js';
import * as Card from '$lib/components/ui/card/index.js';
- import { badgeVariants } from '$lib/components/ui/badge/index.js';
+ import { Badge, badgeVariants } from '$lib/components/ui/badge/index.js';
import type {
EmployeeRecord,
EmployeeReportRecord,
@@ -270,8 +270,11 @@
+
{employee?.First_Name} {employee?.Last_Name}
+ {#if employee?.Type}
+ {employee.Type}
+ {/if}
{#if employee}
@@ -325,6 +328,38 @@
{employee.Last_Name || '—'}
{/if}
+
+
+ {#if editMode}
+ {
+ employee = { ...employee!, Type: v ?? undefined };
+ if (v !== undefined) patchField('Type', v ?? '');
+ }}
+ disabled={patchSaving}
+ >
+
+ {employee.Type || 'Select type…'}
+
+
+ (none)
+ {#each ['Employee', 'Sub-Contractor', 'Former-Employee', 'Applicant', 'Blacklisted'] as opt}
+ {opt}
+ {/each}
+
+
+ {:else}
+
+ {#if employee.Type}
+ {employee.Type}
+ {:else}
+ —
+ {/if}
+
+ {/if}
+
{#if editMode}
diff --git a/src/routes/api/employees/+server.ts b/src/routes/api/employees/+server.ts
index 963d1b2..9f9fb54 100644
--- a/src/routes/api/employees/+server.ts
+++ b/src/routes/api/employees/+server.ts
@@ -5,6 +5,7 @@ export interface EmployeeRecord {
id: string;
First_Name: string;
Last_Name: string;
+ Type?: string;
Phone_Number: string;
Email_Address: string;
Voxer_ID: string;
@@ -21,21 +22,26 @@ function escapeFilterValue(s: string): string {
export const GET: RequestHandler = async ({ locals, url }) => {
const search = url.searchParams.get('search')?.trim() ?? '';
+ const typeFilter = url.searchParams.get('type')?.trim() ?? '';
const page = Math.max(1, parseInt(url.searchParams.get('page') ?? '1', 10));
const perPage = Math.min(500, Math.max(1, parseInt(url.searchParams.get('perPage') ?? '200', 10)));
- let filter = 'delete != true';
+ const typeClause =
+ typeFilter === 'Employee' || typeFilter === 'Sub-Contractor'
+ ? `(Type = "${escapeFilterValue(typeFilter)}") && `
+ : '';
+ let filter = `${typeClause}delete != true`;
if (search.length > 0) {
const escaped = escapeFilterValue(search);
- // Search across main text fields (PocketBase ~ is "contains")
- filter = `(${[
+ const searchFilter = `(${[
`First_Name ~ "${escaped}"`,
`Last_Name ~ "${escaped}"`,
`Email_Address ~ "${escaped}"`,
`Phone_Number ~ "${escaped}"`,
`Voxer_ID ~ "${escaped}"`,
`Status ~ "${escaped}"`
- ].join(' || ')}) && delete != true`;
+ ].join(' || ')})`;
+ filter = `${typeClause}${searchFilter} && delete != true`;
}
const { items, totalItems } = await locals.pb
@@ -50,9 +56,10 @@ export const GET: RequestHandler = async ({ locals, url }) => {
export const POST: RequestHandler = async ({ request, locals }) => {
const body = await request.json();
- const record = await locals.pb.collection(COLLECTION).create({
+ const record = await locals.pb.collection(COLLECTION).create({
First_Name: body.First_Name ?? '',
Last_Name: body.Last_Name ?? '',
+ Type: body.Type ?? undefined,
Phone_Number: body.Phone_Number ?? '',
Email_Address: body.Email_Address ?? '',
Voxer_ID: body.Voxer_ID ?? '',
diff --git a/src/routes/api/employees/[id]/+server.ts b/src/routes/api/employees/[id]/+server.ts
index c5ff514..89aca0a 100644
--- a/src/routes/api/employees/[id]/+server.ts
+++ b/src/routes/api/employees/[id]/+server.ts
@@ -30,6 +30,7 @@ export const PATCH: RequestHandler = async ({ params, request, locals }) => {
const record = await locals.pb.collection(COLLECTION).update(id, {
...(body.First_Name !== undefined && { First_Name: body.First_Name }),
...(body.Last_Name !== undefined && { Last_Name: body.Last_Name }),
+ ...(body.Type !== undefined && { Type: body.Type }),
...(body.Phone_Number !== undefined && { Phone_Number: body.Phone_Number }),
...(body.Email_Address !== undefined && { Email_Address: body.Email_Address }),
...(body.Voxer_ID !== undefined && { Voxer_ID: body.Voxer_ID }),