From 8877426f5c9ef3e56a5646ce0f58ca69e2410ae8 Mon Sep 17 00:00:00 2001
From: Owen Stepan <106773727+ostepan8@users.noreply.github.com>
Date: Tue, 27 Jan 2026 13:28:02 -0500
Subject: [PATCH 1/5] implemented the frontend ticket with bodie
added search bar
added next and previous buttons
added filtering with search bar
added dummy data to simulate searching
---
apps/frontend/src/components/PageCounter.tsx | 87 ++++++++
.../src/components/PageTransitionButton.tsx | 41 ++++
apps/frontend/src/components/Searchbar.tsx | 52 +++++
apps/frontend/src/containers/root.tsx | 200 +++++++++++++++++-
4 files changed, 375 insertions(+), 5 deletions(-)
create mode 100644 apps/frontend/src/components/PageCounter.tsx
create mode 100644 apps/frontend/src/components/PageTransitionButton.tsx
create mode 100644 apps/frontend/src/components/Searchbar.tsx
diff --git a/apps/frontend/src/components/PageCounter.tsx b/apps/frontend/src/components/PageCounter.tsx
new file mode 100644
index 000000000..d5d84d27c
--- /dev/null
+++ b/apps/frontend/src/components/PageCounter.tsx
@@ -0,0 +1,87 @@
+interface PageCounterProps {
+ page: number;
+ setPage: (page: number) => void;
+ maxPages: number;
+}
+
+function PageCounter({ page, setPage, maxPages }: PageCounterProps) {
+ const getPageNumbers = () => {
+ const pages: (number | string)[] = [];
+
+ if (maxPages <= 4) {
+ // Show all pages if 4 or fewer
+ for (let i = 1; i <= maxPages; i++) {
+ pages.push(i);
+ }
+ } else {
+ // Always show first 3 pages when near the start
+ if (page <= 3) {
+ pages.push(1, 2, 3);
+ pages.push('...');
+ pages.push(maxPages);
+ }
+ // Show last 3 pages when near the end
+ else if (page >= maxPages - 2) {
+ pages.push(1);
+ pages.push('...');
+ pages.push(maxPages - 2, maxPages - 1, maxPages);
+ }
+ // Show current page with neighbors in the middle
+ else {
+ pages.push(1);
+ pages.push('...');
+ pages.push(page - 1, page, page + 1);
+ pages.push('...');
+ pages.push(maxPages);
+ }
+ }
+
+ return pages;
+ };
+
+ return (
+
+ {getPageNumbers().map((p, index) =>
+ typeof p === 'string' ? (
+
+ {p}
+
+ ) : (
+
+ ),
+ )}
+
+ );
+}
+
+export default PageCounter;
diff --git a/apps/frontend/src/components/PageTransitionButton.tsx b/apps/frontend/src/components/PageTransitionButton.tsx
new file mode 100644
index 000000000..bc847112f
--- /dev/null
+++ b/apps/frontend/src/components/PageTransitionButton.tsx
@@ -0,0 +1,41 @@
+import { IoChevronBack, IoChevronForward } from 'react-icons/io5';
+
+function PageTransitionButton({
+ buttonType,
+ onClick,
+}: {
+ buttonType: 'previous' | 'next';
+ onClick: () => void;
+}) {
+ return (
+
+ );
+}
+
+export default PageTransitionButton;
diff --git a/apps/frontend/src/components/Searchbar.tsx b/apps/frontend/src/components/Searchbar.tsx
new file mode 100644
index 000000000..0bbe1e366
--- /dev/null
+++ b/apps/frontend/src/components/Searchbar.tsx
@@ -0,0 +1,52 @@
+import { IoSearch } from 'react-icons/io5';
+
+interface SearchbarProps {
+ value: string;
+ onChange: (e: React.ChangeEvent) => void;
+}
+
+function Searchbar({ value, onChange }: SearchbarProps) {
+ return (
+
+
+
+
+ );
+}
+
+export default Searchbar;
diff --git a/apps/frontend/src/containers/root.tsx b/apps/frontend/src/containers/root.tsx
index 4f55def13..c36040f35 100644
--- a/apps/frontend/src/containers/root.tsx
+++ b/apps/frontend/src/containers/root.tsx
@@ -6,14 +6,160 @@ import clockIcon from '../assets/icons/clock.svg';
import crossIcon from '../assets/icons/cross.svg';
import checkmarkIcon from '../assets/icons/checkmark.svg';
import { Box } from '@chakra-ui/react';
-import ApplicationTable from '@components/ApplicationTable';
+import { useState } from 'react';
+import PageTransitionButton from '@components/PageTransitionButton';
+import Searchbar from '@components/Searchbar';
+import PageCounter from '@components/PageCounter';
+
+interface UserData {
+ id: number;
+ name: string;
+ email: string;
+}
const Root: React.FC = () => {
+ const [searchQuery, setSearchQuery] = useState('');
+ const pageSize = 25;
+ const data = [
+ { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
+ { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
+ { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
+ { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
+ { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
+ { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
+ { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
+ { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
+ { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
+ { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
+ { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
+ { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
+ { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
+ { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
+ { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
+ { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
+ { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
+ { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
+ { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
+ { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
+ { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
+ { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
+ { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
+ { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
+ { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
+ { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
+ { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
+ { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
+ { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
+ { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
+ { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
+ { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
+ { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
+ { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
+ { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
+ { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
+ { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
+ { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
+ { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
+ { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
+ { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
+ { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
+ { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
+ { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
+ { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
+ { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
+ { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
+ { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
+ { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
+ { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
+ { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
+ { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
+ { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
+ { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
+ { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
+ { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
+ { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
+ { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
+ { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
+ { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
+ { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
+ { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
+ { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
+ { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
+ { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
+ { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
+ { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
+ { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
+ { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
+ { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
+ { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
+ { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
+ { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
+ { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
+ { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
+ { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
+ { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
+ { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
+ { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
+ { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
+ { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
+ { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
+ { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
+ { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
+ { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
+ { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
+ { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
+ { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
+ { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
+ { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
+ { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
+ { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
+ { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
+ { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
+ { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
+ { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
+ { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
+ { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
+ { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
+ { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
+ { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
+ { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
+ { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
+ { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
+ { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
+ { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
+ { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
+ { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
+ { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
+ { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
+ { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
+ { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
+ { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
+ { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
+ { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
+ { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
+ { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
+ { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
+ { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
+ { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
+ ];
+ const [userData] = useState(data);
+ const [page, setPage] = useState(1);
+
+ function onChange(e: React.ChangeEvent) {
+ setSearchQuery(e.target.value);
+ }
return (
-
+
-
-
+
+
{
icon={checkmarkIcon}
/>
-
+
+
+
+
+ {userData
+ .filter((item) =>
+ item.name.toLowerCase().includes(searchQuery.toLowerCase()),
+ )
+ .slice((page - 1) * pageSize, page * pageSize)
+ .map((item) => (
+
+
+ {item.name} - {item.email}
+
+
+ ))}
+
+
+
+
setPage(page - 1)}
+ />
+
+ setPage(page + 1)}
+ />
+
);
From 3bcfa528976b59307d6aa70399e3c3d748097801 Mon Sep 17 00:00:00 2001
From: bodhiYG
Date: Wed, 4 Feb 2026 19:44:06 -0500
Subject: [PATCH 2/5] Searchbar integration with application table
---
.github/workflows/ci-cd.yml | 113 ++++++++++++
.../src/disciplines/discplines.constants.ts | 13 ++
apps/frontend/src/app.spec.tsx | 15 ++
.../src/components/ApplicationTable.tsx | 23 ++-
apps/frontend/src/components/ApprovedCard.tsx | 64 +++++++
apps/frontend/src/containers/root.tsx | 161 ++----------------
apps/frontend/src/containers/test.tsx | 12 ++
yarn.lock | 87 +---------
8 files changed, 253 insertions(+), 235 deletions(-)
create mode 100644 .github/workflows/ci-cd.yml
create mode 100644 apps/backend/src/disciplines/discplines.constants.ts
create mode 100644 apps/frontend/src/app.spec.tsx
create mode 100644 apps/frontend/src/components/ApprovedCard.tsx
create mode 100644 apps/frontend/src/containers/test.tsx
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
new file mode 100644
index 000000000..bf0fcbef9
--- /dev/null
+++ b/.github/workflows/ci-cd.yml
@@ -0,0 +1,113 @@
+name: CI/CD
+
+# First runs linter and tests all affected projects
+# Then, for each project that requires deployment, deploy-- is added
+# Environment variables are labelled _SHORT_DESCRIPTION
+
+on:
+ push:
+ branches: ['main']
+ pull_request:
+ branches: ['main']
+ workflow_dispatch:
+ inputs:
+ manual-deploy:
+ description: 'App to Deploy'
+ required: false
+ default: ''
+
+concurrency:
+ # Never have two deployments happening at the same time (potential race condition)
+ group: '{{ github.head_ref || github.ref }}'
+
+jobs:
+ pre-deploy:
+ runs-on: ubuntu-latest
+ outputs:
+ affected: ${{ steps.should-deploy.outputs.affected }}
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ # We need to fetch all branches and commits so that Nx affected has a base to compare against.
+ fetch-depth: 0
+ - name: Use Node.js 20
+ uses: actions/setup-node@v3
+ with:
+ node-version: 20.x
+ cache: 'yarn'
+
+ - name: Install Dependencies
+ run: yarn install
+
+ # In any subsequent steps within this job (myjob) we can reference the resolved SHAs
+ # using either the step outputs or environment variables:
+ - name: Derive appropriate SHAs for base and head for `nx affected` commands
+ uses: nrwl/nx-set-shas@v3
+
+ - run: |
+ echo "BASE: ${{ env.NX_BASE }}"
+ echo "HEAD: ${{ env.NX_HEAD }}"
+
+ - name: Nx Affected Lint
+ run: npx nx affected -t lint
+
+ # - name: Nx Affected Test
+ # run: npx nx affected -t test
+
+ - name: Nx Affected Build
+ run: npx nx affected -t build
+
+ - name: Determine who needs to be deployed
+ id: should-deploy
+ run: |
+ echo "The following projects have been affected: [$(npx nx print-affected -t build --select=tasks.target.project)]";
+ echo "affected=$(npx nx print-affected -t build --select=tasks.target.project)" >> "$GITHUB_OUTPUT"
+
+ deploy-debug:
+ needs: pre-deploy
+ runs-on: ubuntu-latest
+ steps:
+ - name: Debug logs
+ run: |
+ echo "Manual Deploy: ${{github.event.inputs.manual-deploy}}";
+ echo "Affected Names: ${{needs.pre-deploy.outputs.affected}}";
+ echo "Event: ${{github.event_name}}";
+ echo "Ref: ${{github.ref}}";
+ echo "Will deploy?: ${{(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'}}";
+
+ deploy-frontend:
+ needs: pre-deploy
+ if: (contains(github.event.inputs.manual-deploy, 'c4c-ops-frontend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-frontend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+ # For "simplicity", deployment settings are configured in the AWS Amplify Console
+ # This just posts to a webhook telling Amplify to redeploy the main branch
+ steps:
+ - name: Tell Amplify to rebuild
+ run: curl -X POST -d {} ${C4C_OPS_WEBHOOK_DEPLOY} -H "Content-Type:application/json"
+ env:
+ C4C_OPS_WEBHOOK_DEPLOY: ${{ secrets.C4C_OPS_WEBHOOK_DEPLOY }}
+
+ deploy-backend:
+ needs: pre-deploy
+ if: (contains(github.event.inputs.manual-deploy, 'c4c-ops-backend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-backend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Node.js 16
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16.x
+ cache: 'yarn'
+
+ - name: Install Dependencies
+ run: yarn install
+
+ - run: npx nx build c4c-ops-backend --configuration production
+ - name: default deploy
+ uses: appleboy/lambda-action@master
+ with:
+ aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws_region: ${{ secrets.AWS_REGION }}
+ function_name: c4c-ops-monolith-lambda
+ source: dist/apps/c4c-ops/c4c-ops-backend/main.js
diff --git a/apps/backend/src/disciplines/discplines.constants.ts b/apps/backend/src/disciplines/discplines.constants.ts
new file mode 100644
index 000000000..70ec97feb
--- /dev/null
+++ b/apps/backend/src/disciplines/discplines.constants.ts
@@ -0,0 +1,13 @@
+export enum DISCIPLINE_VALUES {
+ Volunteers = 'Volunteers',
+ Nursing = 'Nursing',
+ PublicHealth = 'Public Health',
+ MD = 'MD',
+ PA = 'PA',
+ NP = 'NP',
+ Research = 'Research',
+ SocialWork = 'Social Work',
+ Psychiatry = 'Psychiatry',
+ Pharmacy = 'Pharmacy',
+ IT = 'IT',
+}
diff --git a/apps/frontend/src/app.spec.tsx b/apps/frontend/src/app.spec.tsx
new file mode 100644
index 000000000..95caf44df
--- /dev/null
+++ b/apps/frontend/src/app.spec.tsx
@@ -0,0 +1,15 @@
+import { render } from '@testing-library/react';
+
+import App from './app';
+
+describe('App', () => {
+ it('should render successfully', () => {
+ const { baseElement } = render();
+ expect(baseElement).toBeTruthy();
+ });
+
+ it('should have a greeting as the title', () => {
+ const { getByText } = render();
+ expect(getByText(/Welcome frontend/gi)).toBeTruthy();
+ });
+});
diff --git a/apps/frontend/src/components/ApplicationTable.tsx b/apps/frontend/src/components/ApplicationTable.tsx
index 182a197c9..81aa803f6 100644
--- a/apps/frontend/src/components/ApplicationTable.tsx
+++ b/apps/frontend/src/components/ApplicationTable.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { Table } from '@chakra-ui/react';
const COLUMNS = [
@@ -57,7 +58,25 @@ const APPLICATIONS = [
},
];
-export const ApplicationTable: React.FC = () => {
+interface ApplicationTableProps {
+ searchQuery?: string;
+}
+
+export const ApplicationTable: React.FC = ({
+ searchQuery = '',
+}) => {
+ const filteredApplications = APPLICATIONS.filter((application) => {
+ if (!searchQuery) return true;
+ const query = searchQuery.toLowerCase();
+ return (
+ application.name.toLowerCase().includes(query) ||
+ application.discipline.toLowerCase().includes(query) ||
+ application.disciplineAdminName.toLowerCase().includes(query) ||
+ application.status.toLowerCase().includes(query) ||
+ application.experienceType.toLowerCase().includes(query)
+ );
+ });
+
return (
@@ -74,7 +93,7 @@ export const ApplicationTable: React.FC = () => {
- {APPLICATIONS.map((application) => (
+ {filteredApplications.map((application) => (
{application.name}
{application.startDate}
diff --git a/apps/frontend/src/components/ApprovedCard.tsx b/apps/frontend/src/components/ApprovedCard.tsx
new file mode 100644
index 000000000..396214d77
--- /dev/null
+++ b/apps/frontend/src/components/ApprovedCard.tsx
@@ -0,0 +1,64 @@
+import React from 'react';
+import { Box, Heading, Text, Flex } from '@chakra-ui/react';
+
+interface ApprovedCardProps {
+ title: string;
+ count: number;
+ description: string;
+ icon: React.ReactNode;
+}
+
+export const ApprovedCard: React.FC = ({
+ title,
+ count,
+ description,
+ icon,
+}) => {
+ return (
+
+
+
+ {title}
+
+
+ {icon}
+
+
+
+ {count}
+
+
+ {description}
+
+
+ );
+};
diff --git a/apps/frontend/src/containers/root.tsx b/apps/frontend/src/containers/root.tsx
index c36040f35..6c633c4b9 100644
--- a/apps/frontend/src/containers/root.tsx
+++ b/apps/frontend/src/containers/root.tsx
@@ -10,139 +10,10 @@ import { useState } from 'react';
import PageTransitionButton from '@components/PageTransitionButton';
import Searchbar from '@components/Searchbar';
import PageCounter from '@components/PageCounter';
-
-interface UserData {
- id: number;
- name: string;
- email: string;
-}
+import ApplicationTable from '@components/ApplicationTable';
const Root: React.FC = () => {
const [searchQuery, setSearchQuery] = useState('');
- const pageSize = 25;
- const data = [
- { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
- { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
- { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
- { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
- { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
- { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
- { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
- { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
- { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
- { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
- { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
- { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
- { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
- { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
- { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
- { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
- { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
- { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
- { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
- { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
- { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
- { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
- { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
- { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
- { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
- { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
- { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
- { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
- { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
- { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
- { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
- { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
- { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
- { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
- { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
- { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
- { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
- { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
- { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
- { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
- { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
- { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
- { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
- { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
- { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
- { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
- { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
- { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
- { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
- { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
- { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
- { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
- { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
- { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
- { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
- { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
- { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
- { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
- { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
- { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
- { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
- { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
- { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
- { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
- { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
- { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
- { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
- { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
- { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
- { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
- { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
- { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
- { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
- { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
- { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
- { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
- { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
- { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
- { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
- { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
- { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
- { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
- { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
- { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
- { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
- { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
- { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
- { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
- { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
- { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
- { id: 1, name: 'Alice Johnson', email: 'alice.johnson@email.com' },
- { id: 2, name: 'Bob Martinez', email: 'bob.martinez@email.com' },
- { id: 3, name: 'Carol Williams', email: 'carol.williams@email.com' },
- { id: 4, name: 'David Chen', email: 'david.chen@email.com' },
- { id: 5, name: 'Emma Thompson', email: 'emma.thompson@email.com' },
- { id: 6, name: 'Frank Garcia', email: 'frank.garcia@email.com' },
- { id: 7, name: 'Grace Lee', email: 'grace.lee@email.com' },
- { id: 8, name: 'Henry Wilson', email: 'henry.wilson@email.com' },
- { id: 9, name: 'Ivy Patel', email: 'ivy.patel@email.com' },
- { id: 10, name: 'Jack Robinson', email: 'jack.robinson@email.com' },
- { id: 11, name: 'Karen Davis', email: 'karen.davis@email.com' },
- { id: 12, name: 'Liam Brown', email: 'liam.brown@email.com' },
- { id: 13, name: 'Mia Anderson', email: 'mia.anderson@email.com' },
- { id: 14, name: 'Noah Taylor', email: 'noah.taylor@email.com' },
- { id: 15, name: 'Olivia Thomas', email: 'olivia.thomas@email.com' },
- { id: 16, name: 'Peter Jackson', email: 'peter.jackson@email.com' },
- { id: 17, name: 'Quinn White', email: 'quinn.white@email.com' },
- { id: 18, name: 'Rachel Harris', email: 'rachel.harris@email.com' },
- { id: 19, name: 'Sam Martin', email: 'sam.martin@email.com' },
- { id: 20, name: 'Tina Clark', email: 'tina.clark@email.com' },
- { id: 21, name: 'Uma Rodriguez', email: 'uma.rodriguez@email.com' },
- { id: 22, name: 'Victor Lewis', email: 'victor.lewis@email.com' },
- { id: 23, name: 'Wendy Walker', email: 'wendy.walker@email.com' },
- { id: 24, name: 'Xavier Hall', email: 'xavier.hall@email.com' },
- { id: 25, name: 'Yara Allen', email: 'yara.allen@email.com' },
- { id: 26, name: 'Zach Young', email: 'zach.young@email.com' },
- { id: 27, name: 'Amber King', email: 'amber.king@email.com' },
- { id: 28, name: 'Brian Scott', email: 'brian.scott@email.com' },
- { id: 29, name: 'Chloe Green', email: 'chloe.green@email.com' },
- { id: 30, name: 'Derek Adams', email: 'derek.adams@email.com' },
- ];
- const [userData] = useState(data);
const [page, setPage] = useState(1);
function onChange(e: React.ChangeEvent) {
@@ -207,31 +78,23 @@ const Root: React.FC = () => {
-
- {userData
- .filter((item) =>
- item.name.toLowerCase().includes(searchQuery.toLowerCase()),
- )
- .slice((page - 1) * pageSize, page * pageSize)
- .map((item) => (
-
-
- {item.name} - {item.email}
-
-
- ))}
-
+
+
+
setPage(page - 1)}
/>
-
+
setPage(page + 1)}
diff --git a/apps/frontend/src/containers/test.tsx b/apps/frontend/src/containers/test.tsx
new file mode 100644
index 000000000..28d480422
--- /dev/null
+++ b/apps/frontend/src/containers/test.tsx
@@ -0,0 +1,12 @@
+// import { Button } from '@shared/src/components/button';
+
+const Test: React.FC = () => {
+ return (
+ <>
+ I am test page
+ {/* */}
+ >
+ );
+};
+
+export default Test;
diff --git a/yarn.lock b/yarn.lock
index 9b8f06c18..10cbd23b1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3872,13 +3872,6 @@
dependencies:
"@nx/linter" "16.10.0"
-"@nrwl/nx-cloud@16.5.2":
- version "16.5.2"
- resolved "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-16.5.2.tgz"
- integrity sha512-oHO5T1HRJsR9mbRd8eUqMBPCgqVZLSbAh3zJoPFmhEmjbM4YB9ePRpgYFT8dRNeZUOUd/8Yt7Pb6EVWOHvpD/w==
- dependencies:
- nx-cloud "16.5.2"
-
"@nrwl/react@16.10.0":
version "16.10.0"
resolved "https://registry.npmjs.org/@nrwl/react/-/react-16.10.0.tgz"
@@ -7515,15 +7508,6 @@ axe-core@^4.6.2:
resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz"
integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==
-axios@1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz"
- integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==
- dependencies:
- follow-redirects "^1.15.0"
- form-data "^4.0.0"
- proxy-from-env "^1.1.0"
-
axios@^1.0.0, axios@^1.5.0:
version "1.6.0"
resolved "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz"
@@ -8106,11 +8090,6 @@ chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
@@ -9052,11 +9031,6 @@ dotenv@^17.2.2:
resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz"
integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==
-dotenv@~10.0.0:
- version "10.0.0"
- resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz"
- integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
-
dotenv@~16.3.1:
version "16.3.2"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz"
@@ -10084,13 +10058,6 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
fs-monkey@^1.0.4:
version "1.0.5"
resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz"
@@ -12783,13 +12750,6 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8:
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
minipass@^4.2.4:
version "4.2.8"
resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz"
@@ -12805,14 +12765,6 @@ minipass@^7.1.2:
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-minizlib@^2.1.1:
- version "2.1.2"
- resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
mkdirp@^0.5.4, mkdirp@^0.5.6:
version "0.5.6"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz"
@@ -12820,11 +12772,6 @@ mkdirp@^0.5.4, mkdirp@^0.5.6:
dependencies:
minimist "^1.2.6"
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
mkdirp@^2.1.3:
version "2.1.6"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz"
@@ -13004,7 +12951,7 @@ node-int64@^0.4.0:
resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-node-machine-id@1.1.12, node-machine-id@^1.1.12:
+node-machine-id@1.1.12:
version "1.1.12"
resolved "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz"
integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==
@@ -13060,22 +13007,6 @@ nwsapi@^2.2.4:
resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz"
integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
-nx-cloud@16.5.2, nx-cloud@^16.4.0:
- version "16.5.2"
- resolved "https://registry.npmjs.org/nx-cloud/-/nx-cloud-16.5.2.tgz"
- integrity sha512-1t1Ii9gojl8r/8hFGaZ/ZyYR0Cb0hzvXLCsaFuvg+EJEFdvua3P4cfNya/0bdRrm+7Eb/ITUOskbvYq4TSlyGg==
- dependencies:
- "@nrwl/nx-cloud" "16.5.2"
- axios "1.1.3"
- chalk "^4.1.0"
- dotenv "~10.0.0"
- fs-extra "^11.1.0"
- node-machine-id "^1.1.12"
- open "~8.4.0"
- strip-json-comments "^3.1.1"
- tar "6.1.11"
- yargs-parser ">=21.1.1"
-
nx@16.10.0, nx@^16.8.1:
version "16.10.0"
resolved "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz"
@@ -13250,7 +13181,7 @@ onetime@^6.0.0:
dependencies:
mimic-fn "^4.0.0"
-open@^8.0.9, open@^8.4.0, open@~8.4.0:
+open@^8.0.9, open@^8.4.0:
version "8.4.2"
resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz"
integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
@@ -15319,18 +15250,6 @@ tar-stream@~2.2.0:
inherits "^2.0.3"
readable-stream "^3.1.1"
-tar@6.1.11:
- version "6.1.11"
- resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz"
- integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^3.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7:
version "5.3.9"
resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz"
@@ -16430,7 +16349,7 @@ yaml@^1.10.0, yaml@^1.7.2:
resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-yargs-parser@21.1.1, yargs-parser@>=21.1.1, yargs-parser@^21.1.1:
+yargs-parser@21.1.1, yargs-parser@^21.1.1:
version "21.1.1"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
From af2454321f6f2512051137a61827ea68e9757e21 Mon Sep 17 00:00:00 2001
From: bodhiYG
Date: Sun, 15 Feb 2026 19:26:17 -0500
Subject: [PATCH 3/5] Renamed TableSearchBar component and got rid of React.FC
---
apps/frontend/src/components/ApplicationTable.tsx | 6 ++----
apps/frontend/src/components/ApprovedCard.tsx | 6 +++---
.../components/{Searchbar.tsx => TableSearchBar.tsx} | 0
apps/frontend/src/containers/root.tsx | 2 +-
apps/frontend/src/containers/test.tsx | 12 ------------
5 files changed, 6 insertions(+), 20 deletions(-)
rename apps/frontend/src/components/{Searchbar.tsx => TableSearchBar.tsx} (100%)
delete mode 100644 apps/frontend/src/containers/test.tsx
diff --git a/apps/frontend/src/components/ApplicationTable.tsx b/apps/frontend/src/components/ApplicationTable.tsx
index 81aa803f6..d08307617 100644
--- a/apps/frontend/src/components/ApplicationTable.tsx
+++ b/apps/frontend/src/components/ApplicationTable.tsx
@@ -62,9 +62,7 @@ interface ApplicationTableProps {
searchQuery?: string;
}
-export const ApplicationTable: React.FC = ({
- searchQuery = '',
-}) => {
+export function ApplicationTable({ searchQuery = '' }: ApplicationTableProps) {
const filteredApplications = APPLICATIONS.filter((application) => {
if (!searchQuery) return true;
const query = searchQuery.toLowerCase();
@@ -106,6 +104,6 @@ export const ApplicationTable: React.FC = ({
);
-};
+}
export default ApplicationTable;
diff --git a/apps/frontend/src/components/ApprovedCard.tsx b/apps/frontend/src/components/ApprovedCard.tsx
index 396214d77..87d59bac7 100644
--- a/apps/frontend/src/components/ApprovedCard.tsx
+++ b/apps/frontend/src/components/ApprovedCard.tsx
@@ -8,12 +8,12 @@ interface ApprovedCardProps {
icon: React.ReactNode;
}
-export const ApprovedCard: React.FC = ({
+export function ApprovedCard({
title,
count,
description,
icon,
-}) => {
+}: ApprovedCardProps) {
return (
= ({
);
-};
+}
diff --git a/apps/frontend/src/components/Searchbar.tsx b/apps/frontend/src/components/TableSearchBar.tsx
similarity index 100%
rename from apps/frontend/src/components/Searchbar.tsx
rename to apps/frontend/src/components/TableSearchBar.tsx
diff --git a/apps/frontend/src/containers/root.tsx b/apps/frontend/src/containers/root.tsx
index 6c633c4b9..7bd4f80cb 100644
--- a/apps/frontend/src/containers/root.tsx
+++ b/apps/frontend/src/containers/root.tsx
@@ -8,7 +8,7 @@ import checkmarkIcon from '../assets/icons/checkmark.svg';
import { Box } from '@chakra-ui/react';
import { useState } from 'react';
import PageTransitionButton from '@components/PageTransitionButton';
-import Searchbar from '@components/Searchbar';
+import Searchbar from '@components/TableSearchBar';
import PageCounter from '@components/PageCounter';
import ApplicationTable from '@components/ApplicationTable';
diff --git a/apps/frontend/src/containers/test.tsx b/apps/frontend/src/containers/test.tsx
deleted file mode 100644
index 28d480422..000000000
--- a/apps/frontend/src/containers/test.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-// import { Button } from '@shared/src/components/button';
-
-const Test: React.FC = () => {
- return (
- <>
- I am test page
- {/* */}
- >
- );
-};
-
-export default Test;
From 2a4e77ff0a85e4e184278d6945671c7a2b1edbd0 Mon Sep 17 00:00:00 2001
From: bodhiYG
Date: Wed, 11 Mar 2026 18:53:45 -0400
Subject: [PATCH 4/5] Removed Unnecessary Files Fix
---
.github/workflows/ci-cd.yml | 113 ------------------
.../src/disciplines/disciplines.constants.ts | 14 +--
2 files changed, 5 insertions(+), 122 deletions(-)
delete mode 100644 .github/workflows/ci-cd.yml
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
deleted file mode 100644
index bf0fcbef9..000000000
--- a/.github/workflows/ci-cd.yml
+++ /dev/null
@@ -1,113 +0,0 @@
-name: CI/CD
-
-# First runs linter and tests all affected projects
-# Then, for each project that requires deployment, deploy-- is added
-# Environment variables are labelled _SHORT_DESCRIPTION
-
-on:
- push:
- branches: ['main']
- pull_request:
- branches: ['main']
- workflow_dispatch:
- inputs:
- manual-deploy:
- description: 'App to Deploy'
- required: false
- default: ''
-
-concurrency:
- # Never have two deployments happening at the same time (potential race condition)
- group: '{{ github.head_ref || github.ref }}'
-
-jobs:
- pre-deploy:
- runs-on: ubuntu-latest
- outputs:
- affected: ${{ steps.should-deploy.outputs.affected }}
- steps:
- - uses: actions/checkout@v3
- with:
- # We need to fetch all branches and commits so that Nx affected has a base to compare against.
- fetch-depth: 0
- - name: Use Node.js 20
- uses: actions/setup-node@v3
- with:
- node-version: 20.x
- cache: 'yarn'
-
- - name: Install Dependencies
- run: yarn install
-
- # In any subsequent steps within this job (myjob) we can reference the resolved SHAs
- # using either the step outputs or environment variables:
- - name: Derive appropriate SHAs for base and head for `nx affected` commands
- uses: nrwl/nx-set-shas@v3
-
- - run: |
- echo "BASE: ${{ env.NX_BASE }}"
- echo "HEAD: ${{ env.NX_HEAD }}"
-
- - name: Nx Affected Lint
- run: npx nx affected -t lint
-
- # - name: Nx Affected Test
- # run: npx nx affected -t test
-
- - name: Nx Affected Build
- run: npx nx affected -t build
-
- - name: Determine who needs to be deployed
- id: should-deploy
- run: |
- echo "The following projects have been affected: [$(npx nx print-affected -t build --select=tasks.target.project)]";
- echo "affected=$(npx nx print-affected -t build --select=tasks.target.project)" >> "$GITHUB_OUTPUT"
-
- deploy-debug:
- needs: pre-deploy
- runs-on: ubuntu-latest
- steps:
- - name: Debug logs
- run: |
- echo "Manual Deploy: ${{github.event.inputs.manual-deploy}}";
- echo "Affected Names: ${{needs.pre-deploy.outputs.affected}}";
- echo "Event: ${{github.event_name}}";
- echo "Ref: ${{github.ref}}";
- echo "Will deploy?: ${{(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'}}";
-
- deploy-frontend:
- needs: pre-deploy
- if: (contains(github.event.inputs.manual-deploy, 'c4c-ops-frontend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-frontend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
- runs-on: ubuntu-latest
- # For "simplicity", deployment settings are configured in the AWS Amplify Console
- # This just posts to a webhook telling Amplify to redeploy the main branch
- steps:
- - name: Tell Amplify to rebuild
- run: curl -X POST -d {} ${C4C_OPS_WEBHOOK_DEPLOY} -H "Content-Type:application/json"
- env:
- C4C_OPS_WEBHOOK_DEPLOY: ${{ secrets.C4C_OPS_WEBHOOK_DEPLOY }}
-
- deploy-backend:
- needs: pre-deploy
- if: (contains(github.event.inputs.manual-deploy, 'c4c-ops-backend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-backend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Use Node.js 16
- uses: actions/setup-node@v3
- with:
- node-version: 16.x
- cache: 'yarn'
-
- - name: Install Dependencies
- run: yarn install
-
- - run: npx nx build c4c-ops-backend --configuration production
- - name: default deploy
- uses: appleboy/lambda-action@master
- with:
- aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
- aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- aws_region: ${{ secrets.AWS_REGION }}
- function_name: c4c-ops-monolith-lambda
- source: dist/apps/c4c-ops/c4c-ops-backend/main.js
diff --git a/apps/backend/src/disciplines/disciplines.constants.ts b/apps/backend/src/disciplines/disciplines.constants.ts
index a79ac840a..6c2759128 100644
--- a/apps/backend/src/disciplines/disciplines.constants.ts
+++ b/apps/backend/src/disciplines/disciplines.constants.ts
@@ -2,15 +2,11 @@
* The applicant's discipline of expertise.
*/
export enum DISCIPLINE_VALUES {
- Volunteers = 'Volunteers',
- Nursing = 'Nursing',
+ MD_MedicalStudent_PreMed = 'MD/Medical Student/Pre-Med',
+ Medical_NP_PA = 'Medical NP/PA',
+ Psychiatry_or_Psychiatric_NP_PA = 'Psychiatry or Psychiatric NP/PA',
PublicHealth = 'Public Health',
- MD = 'MD',
- PA = 'PA',
- NP = 'NP',
- Research = 'Research',
+ RN = 'RN',
SocialWork = 'Social Work',
- Psychiatry = 'Psychiatry',
- Pharmacy = 'Pharmacy',
- IT = 'IT',
+ Other = 'Other',
}
From 1b267c4210f11360907597211e08c1a400719c96 Mon Sep 17 00:00:00 2001
From: Sam Nie <147653722+SamNie2027@users.noreply.github.com>
Date: Sun, 15 Mar 2026 16:31:24 -0400
Subject: [PATCH 5/5] Delete discplines.constants.ts
---
.../backend/src/disciplines/discplines.constants.ts | 13 -------------
1 file changed, 13 deletions(-)
delete mode 100644 apps/backend/src/disciplines/discplines.constants.ts
diff --git a/apps/backend/src/disciplines/discplines.constants.ts b/apps/backend/src/disciplines/discplines.constants.ts
deleted file mode 100644
index 70ec97feb..000000000
--- a/apps/backend/src/disciplines/discplines.constants.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-export enum DISCIPLINE_VALUES {
- Volunteers = 'Volunteers',
- Nursing = 'Nursing',
- PublicHealth = 'Public Health',
- MD = 'MD',
- PA = 'PA',
- NP = 'NP',
- Research = 'Research',
- SocialWork = 'Social Work',
- Psychiatry = 'Psychiatry',
- Pharmacy = 'Pharmacy',
- IT = 'IT',
-}