diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
index f387698bce..3f0aaab286 100644
--- a/.github/workflows/pull-request.yml
+++ b/.github/workflows/pull-request.yml
@@ -449,3 +449,91 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
GITHUB_REPOSITORY: ${{ github.repository }}
+
+ generate-docs:
+ name: Generate Auto Documentation
+ permissions:
+ contents: write
+
+ runs-on: ubuntu-latest
+ needs: [Code-Quality-Checks, Test-Application, Start-App-Without-Docker, Docker-Start-Check]
+
+ steps:
+ # Step 1: Checkout the code
+ - name: Checkout Code
+ uses: actions/checkout@v4
+ with:
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+ ref: ${{ github.event.pull_request.head.ref }}
+ fetch-depth: 0
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ # Step 2: Setup Node.js environment
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '22.x'
+ cache: 'npm'
+
+ # Step 3: Install dependencies
+ - name: Install Dependencies
+ run: |
+ npm ci
+ npm install -g typedoc typedoc-plugin-markdown
+
+ # Step 4: Generate Documentation
+ - name: Generate Documentation
+ run: |
+ typedoc \
+ --out docs/docs/auto-docs \
+ --plugin typedoc-plugin-markdown \
+ --theme markdown \
+ --tsconfig tsconfig.json \
+ --excludePrivate \
+ --excludeProtected \
+ --excludeExternals \
+ --hideGenerator \
+ --categorizeByGroup true \
+ --entryPointStrategy expand \
+ --entryPoints "src/**/*.ts" "src/**/*.tsx" \
+ --exclude "**/*.{test,spec,stories}.{ts,tsx}" \
+ --exclude "**/__tests__/**" \
+ --exclude "**/__mocks__/**" \
+ --exclude "**/node_modules/**" \
+ --cleanOutputDir true
+
+ # Step 5: Create placeholder documentation (only if not present)
+ - name: Create Placeholder Documentation
+ run: |
+ mkdir -p docs/docs/user-guide
+ mkdir -p docs/docs/developer-guide/reference
+ if [ ! -f docs/docs/user-guide/intro.md ]; then
+ echo "# User Guide\n\nThis section contains the user guide for Talawa Admin." > docs/docs/user-guide/intro.md
+ fi
+ if [ ! -f docs/docs/developer-guide/intro.md ]; then
+ echo "# Developer Guide\n\nThis section contains the developer guide for Talawa Admin." > docs/docs/developer-guide/intro.md
+ fi
+ if [ ! -f docs/docs/developer-guide/reference/README.md ]; then
+ echo "# API Reference\n\nThis section contains the auto-generated API documentation for Talawa Admin." > docs/docs/developer-guide/reference/README.md
+ fi
+
+ # Step 6: Commit Documentation Changes
+ - name: Commit Documentation Changes
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.event.pull_request.head.repo.full_name }}.git"
+ git fetch origin ${{ github.event.pull_request.head.ref }}
+ git checkout ${{ github.event.pull_request.head.ref }}
+ git add docs/docs/auto-docs/
+ git add docs/docs/developer-guide/
+ git add docs/docs/user-guide/
+ if [ -n "$(git status --porcelain)" ]; then
+ git commit -m "docs: update auto-generated documentation [skip ci]"
+ git push origin HEAD:${{ github.event.pull_request.head.ref }}
+ else
+ echo "No changes to commit."
+ fi
+
diff --git a/docs/docs/auto-docs/.gitignore b/docs/docs/auto-docs/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/docs/developer-guide/.gitignore b/docs/docs/developer-guide/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/docs/intro.md b/docs/docs/intro.md
index 45e8604c8b..7534844312 100644
--- a/docs/docs/intro.md
+++ b/docs/docs/intro.md
@@ -10,11 +10,11 @@ Let's discover **Docusaurus in less than 5 minutes**.
Get started by **creating a new site**.
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
+Or **try Docusaurus immediately** with **[docusaurus.new]**.
### What you'll need
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
+- version 18.0 or above:
- When installing Node.js, you are recommended to check all checkboxes related to dependencies.
## Generate a new site
diff --git a/docs/docs/tutorial-basics/_category_.json b/docs/docs/tutorial-basics/_category_.json
deleted file mode 100644
index 2e6db55b1e..0000000000
--- a/docs/docs/tutorial-basics/_category_.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "label": "Tutorial - Basics",
- "position": 2,
- "link": {
- "type": "generated-index",
- "description": "5 minutes to learn the most important Docusaurus concepts."
- }
-}
diff --git a/docs/docs/tutorial-basics/congratulations.md b/docs/docs/tutorial-basics/congratulations.md
deleted file mode 100644
index 04771a00b7..0000000000
--- a/docs/docs/tutorial-basics/congratulations.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-sidebar_position: 6
----
-
-# Congratulations!
-
-You have just learned the **basics of Docusaurus** and made some changes to the **initial template**.
-
-Docusaurus has **much more to offer**!
-
-Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**.
-
-Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610)
-
-## What's next?
-
-- Read the [official documentation](https://docusaurus.io/)
-- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config)
-- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration)
-- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout)
-- Add a [search bar](https://docusaurus.io/docs/search)
-- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase)
-- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support)
diff --git a/docs/docs/tutorial-basics/create-a-blog-post.md b/docs/docs/tutorial-basics/create-a-blog-post.md
deleted file mode 100644
index 550ae17ee1..0000000000
--- a/docs/docs/tutorial-basics/create-a-blog-post.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-sidebar_position: 3
----
-
-# Create a Blog Post
-
-Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed...
-
-## Create your first Post
-
-Create a file at `blog/2021-02-28-greetings.md`:
-
-```md title="blog/2021-02-28-greetings.md"
----
-slug: greetings
-title: Greetings!
-authors:
- - name: Joel Marcey
- title: Co-creator of Docusaurus 1
- url: https://github.com/JoelMarcey
- image_url: https://github.com/JoelMarcey.png
- - name: Sébastien Lorber
- title: Docusaurus maintainer
- url: https://sebastienlorber.com
- image_url: https://github.com/slorber.png
-tags: [greetings]
----
-
-Congratulations, you have made your first post!
-
-Feel free to play around and edit this post as much as you like.
-```
-
-A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings).
diff --git a/docs/docs/tutorial-basics/create-a-document.md b/docs/docs/tutorial-basics/create-a-document.md
deleted file mode 100644
index c22fe29446..0000000000
--- a/docs/docs/tutorial-basics/create-a-document.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-sidebar_position: 2
----
-
-# Create a Document
-
-Documents are **groups of pages** connected through:
-
-- a **sidebar**
-- **previous/next navigation**
-- **versioning**
-
-## Create your first Doc
-
-Create a Markdown file at `docs/hello.md`:
-
-```md title="docs/hello.md"
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello).
-
-## Configure the Sidebar
-
-Docusaurus automatically **creates a sidebar** from the `docs` folder.
-
-Add metadata to customize the sidebar label and position:
-
-```md title="docs/hello.md" {1-4}
----
-sidebar_label: 'Hi!'
-sidebar_position: 3
----
-
-# Hello
-
-This is my **first Docusaurus document**!
-```
-
-It is also possible to create your sidebar explicitly in `sidebars.js`:
-
-```js title="sidebars.js"
-export default {
- tutorialSidebar: [
- 'intro',
- // highlight-next-line
- 'hello',
- {
- type: 'category',
- label: 'Tutorial',
- items: ['tutorial-basics/create-a-document'],
- },
- ],
-};
-```
diff --git a/docs/docs/tutorial-basics/create-a-page.md b/docs/docs/tutorial-basics/create-a-page.md
deleted file mode 100644
index 20e2ac3005..0000000000
--- a/docs/docs/tutorial-basics/create-a-page.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-sidebar_position: 1
----
-
-# Create a Page
-
-Add **Markdown or React** files to `src/pages` to create a **standalone page**:
-
-- `src/pages/index.js` → `localhost:3000/`
-- `src/pages/foo.md` → `localhost:3000/foo`
-- `src/pages/foo/bar.js` → `localhost:3000/foo/bar`
-
-## Create your first React Page
-
-Create a file at `src/pages/my-react-page.js`:
-
-```jsx title="src/pages/my-react-page.js"
-import React from 'react';
-import Layout from '@theme/Layout';
-
-export default function MyReactPage() {
- return (
-
- My React page
- This is a React page
-
- );
-}
-```
-
-A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page).
-
-## Create your first Markdown Page
-
-Create a file at `src/pages/my-markdown-page.md`:
-
-```mdx title="src/pages/my-markdown-page.md"
-# My Markdown page
-
-This is a Markdown page
-```
-
-A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page).
diff --git a/docs/docs/tutorial-basics/deploy-your-site.md b/docs/docs/tutorial-basics/deploy-your-site.md
deleted file mode 100644
index 1c50ee063e..0000000000
--- a/docs/docs/tutorial-basics/deploy-your-site.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-sidebar_position: 5
----
-
-# Deploy your site
-
-Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**).
-
-It builds your site as simple **static HTML, JavaScript and CSS files**.
-
-## Build your site
-
-Build your site **for production**:
-
-```bash
-npm run build
-```
-
-The static files are generated in the `build` folder.
-
-## Deploy your site
-
-Test your production build locally:
-
-```bash
-npm run serve
-```
-
-The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/).
-
-You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**).
diff --git a/docs/docs/tutorial-basics/markdown-features.mdx b/docs/docs/tutorial-basics/markdown-features.mdx
deleted file mode 100644
index 35e00825ed..0000000000
--- a/docs/docs/tutorial-basics/markdown-features.mdx
+++ /dev/null
@@ -1,152 +0,0 @@
----
-sidebar_position: 4
----
-
-# Markdown Features
-
-Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**.
-
-## Front Matter
-
-Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/):
-
-```text title="my-doc.md"
-// highlight-start
----
-id: my-doc-id
-title: My document title
-description: My document description
-slug: /my-custom-url
----
-// highlight-end
-
-## Markdown heading
-
-Markdown text with [links](./hello.md)
-```
-
-## Links
-
-Regular Markdown links are supported, using url paths or relative file paths.
-
-```md
-Let's see how to [Create a page](/create-a-page).
-```
-
-```md
-Let's see how to [Create a page](./create-a-page.md).
-```
-
-**Result:** Let's see how to [Create a page](./create-a-page.md).
-
-## Images
-
-Regular Markdown images are supported.
-
-You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`):
-
-```md
-![Docusaurus logo](/img/docusaurus.png)
-```
-
-![Docusaurus logo](/img/docusaurus.png)
-
-You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:
-
-```md
-![Docusaurus logo](./img/docusaurus.png)
-```
-
-## Code Blocks
-
-Markdown code blocks are supported with Syntax highlighting.
-
-````md
-```jsx title="src/components/HelloDocusaurus.js"
-function HelloDocusaurus() {
- return
Hello, Docusaurus!
;
-}
-```
-````
-
-```jsx title="src/components/HelloDocusaurus.js"
-function HelloDocusaurus() {
- return Hello, Docusaurus!
;
-}
-```
-
-## Admonitions
-
-Docusaurus has a special syntax to create admonitions and callouts:
-
-```md
-:::tip My tip
-
-Use this awesome feature option
-
-:::
-
-:::danger Take care
-
-This action is dangerous
-
-:::
-```
-
-:::tip My tip
-
-Use this awesome feature option
-
-:::
-
-:::danger Take care
-
-This action is dangerous
-
-:::
-
-## MDX and React Components
-
-[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**:
-
-```jsx
-export const Highlight = ({children, color}) => (
- {
- alert(`You clicked the color ${color} with label ${children}`)
- }}>
- {children}
-
-);
-
-This is Docusaurus green !
-
-This is Facebook blue !
-```
-
-export const Highlight = ({children, color}) => (
- {
- alert(`You clicked the color ${color} with label ${children}`);
- }}>
- {children}
-
-);
-
-This is Docusaurus green !
-
-This is Facebook blue !
diff --git a/docs/docs/tutorial-extras/_category_.json b/docs/docs/tutorial-extras/_category_.json
deleted file mode 100644
index a8ffcc1930..0000000000
--- a/docs/docs/tutorial-extras/_category_.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "label": "Tutorial - Extras",
- "position": 3,
- "link": {
- "type": "generated-index"
- }
-}
diff --git a/docs/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/docs/tutorial-extras/img/docsVersionDropdown.png
deleted file mode 100644
index 97e4164618..0000000000
Binary files a/docs/docs/tutorial-extras/img/docsVersionDropdown.png and /dev/null differ
diff --git a/docs/docs/tutorial-extras/img/localeDropdown.png b/docs/docs/tutorial-extras/img/localeDropdown.png
deleted file mode 100644
index e257edc1f9..0000000000
Binary files a/docs/docs/tutorial-extras/img/localeDropdown.png and /dev/null differ
diff --git a/docs/docs/tutorial-extras/manage-docs-versions.md b/docs/docs/tutorial-extras/manage-docs-versions.md
deleted file mode 100644
index ccda0b9076..0000000000
--- a/docs/docs/tutorial-extras/manage-docs-versions.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-sidebar_position: 1
----
-
-# Manage Docs Versions
-
-Docusaurus can manage multiple versions of your docs.
-
-## Create a docs version
-
-Release a version 1.0 of your project:
-
-```bash
-npm run docusaurus docs:version 1.0
-```
-
-The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created.
-
-Your docs now have 2 versions:
-
-- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs
-- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs**
-
-## Add a Version Dropdown
-
-To navigate seamlessly across versions, add a version dropdown.
-
-Modify the `docusaurus.config.js` file:
-
-```js title="docusaurus.config.js"
-export default {
- themeConfig: {
- navbar: {
- items: [
- // highlight-start
- {
- type: 'docsVersionDropdown',
- },
- // highlight-end
- ],
- },
- },
-};
-```
-
-The docs version dropdown appears in your navbar:
-
-![Docs Version Dropdown](./img/docsVersionDropdown.png)
-
-## Update an existing version
-
-It is possible to edit versioned docs in their respective folder:
-
-- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello`
-- `docs/hello.md` updates `http://localhost:3000/docs/next/hello`
diff --git a/docs/docs/tutorial-extras/translate-your-site.md b/docs/docs/tutorial-extras/translate-your-site.md
deleted file mode 100644
index b5a644abdf..0000000000
--- a/docs/docs/tutorial-extras/translate-your-site.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-sidebar_position: 2
----
-
-# Translate your site
-
-Let's translate `docs/intro.md` to French.
-
-## Configure i18n
-
-Modify `docusaurus.config.js` to add support for the `fr` locale:
-
-```js title="docusaurus.config.js"
-export default {
- i18n: {
- defaultLocale: 'en',
- locales: ['en', 'fr'],
- },
-};
-```
-
-## Translate a doc
-
-Copy the `docs/intro.md` file to the `i18n/fr` folder:
-
-```bash
-mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/
-
-cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md
-```
-
-Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French.
-
-## Start your localized site
-
-Start your site on the French locale:
-
-```bash
-npm run start -- --locale fr
-```
-
-Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated.
-
-:::caution
-
-In development, you can only use one locale at a time.
-
-:::
-
-## Add a Locale Dropdown
-
-To navigate seamlessly across languages, add a locale dropdown.
-
-Modify the `docusaurus.config.js` file:
-
-```js title="docusaurus.config.js"
-export default {
- themeConfig: {
- navbar: {
- items: [
- // highlight-start
- {
- type: 'localeDropdown',
- },
- // highlight-end
- ],
- },
- },
-};
-```
-
-The locale dropdown now appears in your navbar:
-
-![Locale Dropdown](./img/localeDropdown.png)
-
-## Build your localized site
-
-Build your site for a specific locale:
-
-```bash
-npm run build -- --locale fr
-```
-
-Or build your site to include all the locales at once:
-
-```bash
-npm run build
-```
diff --git a/docs/docs/user-guide/.gitignore b/docs/docs/user-guide/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/components/CheckIn/TableRow.tsx b/src/components/CheckIn/TableRow.tsx
index b2bd6e11cb..6c0e6a4ff3 100644
--- a/src/components/CheckIn/TableRow.tsx
+++ b/src/components/CheckIn/TableRow.tsx
@@ -72,13 +72,12 @@ export const TableRow = ({
}
inputs.push({ name: data.name.trim() });
const pdf = await generate({ template: tagTemplate, inputs });
- // istanbul ignore next
- const blob = new Blob([pdf.buffer], { type: 'application/pdf' });
- // istanbul ignore next
+
+ // Convert ArrayBuffer to Uint8Array before creating Blob
+ const uint8Array = new Uint8Array(pdf.buffer);
+ const blob = new Blob([uint8Array], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
- // istanbul ignore next
window.open(url);
- // istanbul ignore next
toast.success('PDF generated successfully!');
} catch (error: unknown) {
const errorMessage =
diff --git a/src/screens/OrganizationVenues/OrganizationVenues.spec.tsx b/src/screens/OrganizationVenues/OrganizationVenues.spec.tsx
index 0f257b3710..0365c50e03 100644
--- a/src/screens/OrganizationVenues/OrganizationVenues.spec.tsx
+++ b/src/screens/OrganizationVenues/OrganizationVenues.spec.tsx
@@ -33,6 +33,44 @@ import { DELETE_VENUE_MUTATION } from 'GraphQl/Mutations/VenueMutations';
import { vi } from 'vitest';
import { errorHandler } from 'utils/errorHandler';
+type MutationCallback = (
+ mutations: MutationRecord[],
+ observer: MutationObserver,
+) => void;
+
+type MutationRecord = {
+ type: string;
+ target: Node;
+ addedNodes: NodeList;
+ removedNodes: NodeList;
+ previousSibling: Node | null;
+ nextSibling: Node | null;
+ attributeName: string | null;
+ attributeNamespace: string | null;
+ oldValue: string | null;
+};
+// Mock MutationObserver
+class MockMutationObserver {
+ private _callback: MutationCallback;
+
+ constructor(callback: MutationCallback) {
+ this._callback = callback;
+ }
+
+ observe(target: Node, options?: MutationObserverInit): void {
+ // Store parameters for future use
+ console.debug('Observing:', { target, options });
+ }
+
+ disconnect(): void {
+ // Mock implementation
+ }
+
+ takeRecords(): MutationRecord[] {
+ return [];
+ }
+}
+
const MOCKS = [
{
request: {
@@ -245,8 +283,8 @@ const MOCKS = [
const link = new StaticMockLink(MOCKS, true);
async function wait(ms = 100): Promise {
- await act(() => {
- return new Promise((resolve) => {
+ await act(async () => {
+ await new Promise((resolve) => {
setTimeout(resolve, ms);
});
});
@@ -260,6 +298,15 @@ vi.mock('react-toastify', () => ({
},
}));
+beforeAll(() => {
+ global.MutationObserver =
+ MockMutationObserver as unknown as typeof MutationObserver;
+});
+
+afterAll(() => {
+ vi.restoreAllMocks();
+});
+
const renderOrganizationVenue = (link: ApolloLink): RenderResult => {
return render(
@@ -494,16 +541,24 @@ describe('Organisation Venues', () => {
test('renders without crashing', async () => {
renderOrganizationVenue(link);
- waitFor(() => {
- expect(screen.findByTestId('orgvenueslist')).toBeInTheDocument();
+ await waitFor(async () => {
+ const element = await screen.findByTestId('orgvenueslist');
+ expect(element).toBeInTheDocument();
});
});
test('renders the venue list correctly', async () => {
renderOrganizationVenue(link);
- waitFor(() => {
- expect(screen.getByTestId('venueRow2')).toBeInTheDocument();
- expect(screen.getByTestId('venueRow1')).toBeInTheDocument();
+
+ // First wait for the list container to be present
+ await waitFor(() => {
+ expect(screen.getByTestId('orgvenueslist')).toBeInTheDocument();
+ });
+
+ // Then check for individual venue items
+ await waitFor(() => {
+ expect(screen.getByTestId('venue-item2')).toBeInTheDocument();
+ expect(screen.getByTestId('venue-item1')).toBeInTheDocument();
});
});
});