From e0666f941ced80d5d513981417a3e78973c86188 Mon Sep 17 00:00:00 2001 From: Daveed Date: Mon, 7 Oct 2024 17:50:58 -0400 Subject: [PATCH 1/4] Created Worflows for test --- .github/workflows/test_build.yml | 42 +++++++++++++++++++ README.md | 67 ++++++++++++++++++++++++------ src/App.css | 38 +++++++++++++++++ src/assets/sanar-logo-160x160.png | Bin 0 -> 48188 bytes src/components/Logo.tsx | 28 ++++++++++--- 5 files changed, 158 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/test_build.yml create mode 100644 src/assets/sanar-logo-160x160.png diff --git a/.github/workflows/test_build.yml b/.github/workflows/test_build.yml new file mode 100644 index 0000000..53cad24 --- /dev/null +++ b/.github/workflows/test_build.yml @@ -0,0 +1,42 @@ +name: Jest & Build Tests + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Runs on any open or reopened pull request + pull_request: + types: [opened, reopened, synchronize] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: "20" + cache: npm + - name: Restore cache + uses: actions/cache@v3 + with: + path: | + .next/cache + # Generate a new cache whenever packages or source files change. + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/package.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} + # If source files changed but packages didn't, rebuild from a prior cache. + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/package.json') }}- + - name: Install dependencies + run: npm ci + - name: Test + run: npm run test + - name: Build Test + run: npm run build diff --git a/README.md b/README.md index 71a0064..6dac62a 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,71 @@ -# Calima EHR +# Calima Sanar EHR - Medplum Dashboard Fork -The following project is a medplum interface. +Welcome to the **Calima Sanar EHR** project! -![Sanar logo](./static/img/sanar.calima.png) +This repository is a **fork of the Medplum dashboard** that we've customized to make it even more adaptable, user-friendly, and ready to deploy on any cloud provider. -Supports the [medplum api](https://api.medplum.com/), in the enterprise plans and self-hosted versions. +## 🌟 Features -Using Vite to create a static dashboard, for a quick look into medplum. +- **Custom Branding**: Change logos and other visual elements to match your needs. +- **Cloud Ready**: Easily deployable on any cloud provider. +- **Extended Functionality**: Additional features and enhancements for seamless healthcare operations. +- **Environment Config**: Connect effortlessly to your existing Medplum dashboard using the `.env` file. -## Open source. +We build with: +- **Vite** +- **Jest** +- **Babel** +- **Typescript** +- **Mantine 7** +- **Medplum 3** -Released under (TSL). +## ❤️ Open Source Interoperability -Read [LICENSE](./LICENSE). +At **Calima Sanar**, we believe in the power of **open source** and **interoperability**. We're passionate about creating a **healthtech ecosystem** that thrives on collaboration and innovation. -Explore some features in our demo version [sanar.calimania.org](https://sanar.calimania.org). +We love **Medplum** and all the work they've done to advance healthcare solutions. Our goal is to build tools that expand upon their great foundation to create a more connected, flexible, and powerful EHR solution. -Contact our team for support, custom integrations and enterprise plans. +## Links -This project was forked from [medplum/app](https://app.medplum.com) +> A curar a la curanderia + +[Kalima Health Homepage](https://kalima.health/) + +[Calima EHR](https://ehr.caliman.org) + +[Medplum Docs](https://www.medplum.com/docs) + +[HIPAA with Digital Ocean](https://www.digitalocean.com/trust/hipaa-at-do) + +[HIPAA Compliance with AWS](https://aws.amazon.com/compliance/hipaa-compliance/) + +# Medplum App + +This is the code for [https://app.medplum.com](https://app.medplum.com) + +## Deployment + +Medplum publishes the app package with placeholders for configuration settings. You can use the Medplum CLI to deploy the app, which will automatically replace the placeholders with your settings. + +For example: + +```bash +# Deploy the latest version of the app to your Medplum AWS environment named "staging" +medplum aws deploy-app staging +``` ## Config Settings +When deploying from the Medplum CLI, config settings are loaded from the corresponding JSON config file. + When building and running the app from source, config settings are loaded from environment variables or the `.env` file. | Name | Description | Required | | -------------------------- | ------------------------------------------------------------------------------------------ | -------- | | `MEDPLUM_BASE_URL` | The base URL of the API server for all API calls. For example, "https://api.medplum.com/". | yes | -| `CALIMA_BASE_URL` | The base URL of the API server for all API calls. For example, "https://api.medplum.com/". | no | | `MEDPLUM_CLIENT_ID` | Optional Medplum client application ID. | no | +| `GOOGLE_CLIENT_ID` | Optional Google client application ID for Google Auth. | no | +| `RECAPTCHA_SITE_KEY` | Optional reCAPTCHA site key for reCAPTCHA user verification. | no | | `MEDPLUM_REGISTER_ENABLED` | Optional flag to enable or disable open registration for new projects. | no | ## Developing @@ -44,3 +81,9 @@ Production build: ```bash npm run build ``` + +For more information, refer to the [Developer Instructions](https://www.medplum.com/docs/contributing/run-the-stack). + +# LICENSE + +Available under the [TSL](./LICENSE) license. diff --git a/src/App.css b/src/App.css index 193d74f..6de36ba 100644 --- a/src/App.css +++ b/src/App.css @@ -10,3 +10,41 @@ body, .grecaptcha-badge { visibility: hidden; } + +a.Navbar_link { + padding: 8px 12px; + border-radius: var(--mantine-radius-sm); + font-weight: 500; + display: flex; + align-items: center; + text-decoration: none; + font-size: var(--mantine-font-size-sm); + color: var(--mantine-color-gray-7); +} + +a.Navbar_link svg { + margin-right: var(--mantine-spacing-sm); + stroke-width: 1.5; + width: 18px; + height: 18px; +} + +.Header_logoButton:hover { + background-color: var(--mantine-color-blue-6); + border-radius: var(--mantine-radius-sm); +} + +a.Navbar_link:hover { + background-color: var(--mantine-color-blue-6); + color: var(--mantine-color-white); + text-decoration: none; +} + +a.Navbar_linkActive { + color: var(--mantine-color-blue-6); +} + +.Panel_paper { + margin: var(--mantine-spacing-xl) auto; + padding: 1em; +} \ No newline at end of file diff --git a/src/assets/sanar-logo-160x160.png b/src/assets/sanar-logo-160x160.png new file mode 100644 index 0000000000000000000000000000000000000000..c267e40d3e43bf26c80489737f1aefb4714f4593 GIT binary patch literal 48188 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

{l0P^!@py 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 literal 0 HcmV?d00001 diff --git a/src/components/Logo.tsx b/src/components/Logo.tsx index aaef3d8..dca91ca 100644 --- a/src/components/Logo.tsx +++ b/src/components/Logo.tsx @@ -1,7 +1,25 @@ -const Logo = (props: { size?: number; }): JSX.Element => { +import SanarLogo from '../assets/sanar-logo-160x160.png'; + +export interface LogoProps { + children?: React.ReactNode; + size?: number; +} + +/** + * Logo component - renders the Calima Sanar logo + * TODO: Customize logo using .env or remote configuration from an endpoint + * + * @param props - {LogoProps} - size? children? + * @returns Logo component + */ +export default function Logo(props: LogoProps): JSX.Element { + return ( - + Calima Sanar logo ); -}; - -export default Logo; +} From b1e65dcd7c99a93f94a774c4b207052c9b97bfa7 Mon Sep 17 00:00:00 2001 From: Daveed Date: Mon, 7 Oct 2024 17:52:35 -0400 Subject: [PATCH 2/4] allow to config app name --- src/RegisterPage.tsx | 3 ++- src/SignInPage.tsx | 2 +- src/config.ts | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/RegisterPage.tsx b/src/RegisterPage.tsx index e5da182..5a6288d 100644 --- a/src/RegisterPage.tsx +++ b/src/RegisterPage.tsx @@ -36,7 +36,8 @@ export function RegisterPage(): JSX.Element | null { recaptchaSiteKey={config.recaptchaSiteKey} > - Create a new account + {config.appName} + Create a new account ); } diff --git a/src/SignInPage.tsx b/src/SignInPage.tsx index 07aaa1f..e16016b 100644 --- a/src/SignInPage.tsx +++ b/src/SignInPage.tsx @@ -34,7 +34,7 @@ export function SignInPage(): JSX.Element { projectId={searchParams.get('project') || undefined} > - Sign in to Calima EHR + Sign in to {config.appName} {searchParams.get('project') === 'new' &&

Sign in again to create a new project
} ); diff --git a/src/config.ts b/src/config.ts index 347e63f..25ab0a2 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,6 +5,7 @@ export interface MedplumAppConfig { recaptchaSiteKey?: string; registerEnabled?: boolean | string; awsTextractEnabled?: boolean | string; + appName?: string; } const config: MedplumAppConfig = { @@ -14,6 +15,7 @@ const config: MedplumAppConfig = { recaptchaSiteKey: import.meta.env?.RECAPTCHA_SITE_KEY, registerEnabled: import.meta.env?.MEDPLUM_REGISTER_ENABLED, awsTextractEnabled: import.meta.env?.MEDPLUM_AWS_TEXTRACT_ENABLED, + appName: import.meta.env?.APP_NAME || 'Calima EHR', }; export function getConfig(): MedplumAppConfig { From dde3e55a6ea086b3d700c8b12d682ba1838b3ca7 Mon Sep 17 00:00:00 2001 From: Daveed Date: Mon, 7 Oct 2024 18:00:28 -0400 Subject: [PATCH 3/4] fixed broken tests --- jest.config.json | 1 + mocks/fileMock.js | 1 + src/App.test.tsx | 2 +- src/SignInPage.test.tsx | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 mocks/fileMock.js diff --git a/jest.config.json b/jest.config.json index 67c4889..fc99809 100644 --- a/jest.config.json +++ b/jest.config.json @@ -6,6 +6,7 @@ }, "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], "moduleNameMapper": { + "\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/mocks/fileMock.js", "\\.css$": "identity-obj-proxy" }, "testMatch": ["**/src/**/*.test.ts", "**/src/**/*.test.tsx"], diff --git a/mocks/fileMock.js b/mocks/fileMock.js new file mode 100644 index 0000000..9dc5fc1 --- /dev/null +++ b/mocks/fileMock.js @@ -0,0 +1 @@ +module.exports = ''; diff --git a/src/App.test.tsx b/src/App.test.tsx index 3298c2b..3efe3f0 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -119,7 +119,7 @@ function isNavOpen(): boolean { async function openNav(): Promise { if (!isNavOpen()) { await act(async () => { - fireEvent.click(screen.getByTitle('Calima Logo')); + fireEvent.click(screen.getByTitle('Calima Sanar logo')); }); } } diff --git a/src/SignInPage.test.tsx b/src/SignInPage.test.tsx index e3aa8ca..7380d35 100644 --- a/src/SignInPage.test.tsx +++ b/src/SignInPage.test.tsx @@ -33,7 +33,7 @@ describe('SignInPage', () => { }); function expectSigninPageRendered(): void { - expect(screen.getByText('Sign in to Medplum')).toBeInTheDocument(); + expect(screen.getByText('Sign in to Calima EHR')).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Next' })).toBeInTheDocument(); } From d7caf129cae95872965881cd930e21550d0ef8ab Mon Sep 17 00:00:00 2001 From: Daveed Date: Mon, 7 Oct 2024 18:03:32 -0400 Subject: [PATCH 4/4] added logo to readme --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dac62a..fdc4049 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,21 @@ Welcome to the **Calima Sanar EHR** project! -This repository is a **fork of the Medplum dashboard** that we've customized to make it even more adaptable, user-friendly, and ready to deploy on any cloud provider. +The following project is a medplum interface. + +![Sanar logo](./static/img/sanar.calima.png) + +Supports the [medplum api](https://api.medplum.com/), in the enterprise plans and self-hosted versions. + +Using Vite to create a static dashboard, for a quick look into medplum. + +## Open source. + +Released under (TSL). + +Read [LICENSE](./LICENSE). + +Explore some features in our demo version [sanar.calimania.org](https://sanar.calimania.org). ## 🌟 Features