Skip to content

Commit ef3ef3b

Browse files
committed
Initial commit
0 parents  commit ef3ef3b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+8018
-0
lines changed

.gitignore

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?
25+
26+
.env

CHANGELOG.md

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
## [Unreleased]
6+
7+
### Added
8+
- Initial setup of the project with Vite, React, and TypeScript.
9+
- Configured ESLint with TypeScript and React plugins.
10+
- Added Tailwind CSS for styling.
11+
- Implemented dark/light theme support using `next-themes`.
12+
- Created `LicenseMapping` component for displaying license data.
13+
- Added `FileUpload` component for uploading CSV files.
14+
- Implemented `SearchBar` component for filtering license data.
15+
- Created `ActionButtons` component for exporting data in various formats (PDF, CSV, Excel, HTML).
16+
- Added `LicenseMappingTable` component for displaying license data in a table format.
17+
- Implemented `useLicenseData` hook for managing license data state.
18+
- Added `useSorting` hook for handling table sorting.
19+
- Created utility functions for filtering and sorting data.
20+
- Implemented export helpers for generating PDF, CSV, Excel, and HTML files.
21+
- Added error handling with `ErrorBoundary` component.
22+
- Configured Tailwind CSS with custom themes and plugins.
23+
- Added initial documentation in `README.md`.
24+
25+
### Changed
26+
- N/A
27+
28+
### Fixed
29+
- N/A
30+
31+
### Removed
32+
- N/A
33+
34+
## [0.1.0] - 2024-10-01
35+
36+
### Added
37+
- Initial release of the SJA Office 365 License Mapping application.

LICENSE

+705
Large diffs are not rendered by default.

README.md

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# SJA Office 365 License Mapping
2+
3+
A React-based application for managing and analyzing Microsoft 365 license assignments across St John Ambulance Canada.
4+
5+
## Features
6+
7+
- 📊 License usage analysis and cost tracking
8+
- 🌓 Dark/Light theme support
9+
- 📱 Responsive design
10+
- 📤 Multiple export formats (PDF, CSV, Excel, HTML)
11+
- 🔍 Advanced search and filtering
12+
- 📈 Cost analysis and summaries
13+
- 🎯 Department-based grouping
14+
- 💾 Drag-and-drop file upload
15+
16+
## Getting Started
17+
18+
### Prerequisites
19+
20+
- Node.js (v16 or later)
21+
- npm or yarn
22+
- A modern web browser
23+
24+
### Installation
25+
26+
```bash
27+
# Clone the repository
28+
git clone [repository-url]
29+
30+
# Navigate to project directory
31+
cd reconciliation
32+
33+
# Install dependencies
34+
npm install
35+
36+
# Start development server
37+
npm run dev
38+
```
39+
40+
### Building for Production
41+
42+
```bash
43+
# Create production build
44+
npm run build
45+
46+
# Preview production build
47+
npm run preview
48+
```
49+
50+
## Usage
51+
52+
1. Launch the application
53+
2. Upload a CSV file containing license data
54+
3. Use filters to analyze specific departments or license types
55+
4. Export data in your preferred format
56+
57+
### CSV File Format
58+
59+
The application expects CSV files with the following columns:
60+
- Display Name
61+
- User Principal Name
62+
- Department
63+
- License Information
64+
65+
## Technology Stack
66+
67+
- React 18
68+
- TypeScript
69+
- Tailwind CSS
70+
- Vite
71+
- next-themes (Dark mode)
72+
- Papa Parse (CSV parsing)
73+
- lucide-react (Icons)
74+
75+
## Project Structure
76+
77+
```
78+
src/
79+
├── components/ # React components
80+
│ ├── ui/ # Reusable UI components
81+
│ └── ...
82+
├── hooks/ # Custom React hooks
83+
├── lib/ # Utility functions and constants
84+
├── providers/ # Context providers
85+
├── types/ # TypeScript type definitions
86+
└── helpers/ # Helper functions
87+
```
88+
89+
## Contributing
90+
91+
1. Fork the repository
92+
2. Create a feature branch
93+
3. Commit your changes
94+
4. Push to the branch
95+
5. Open a Pull Request
96+
97+
## License
98+
99+
This software is licensed under the GNU General Public License v3.0 (GPL-3.0) with additional terms:
100+
101+
### Open Source Components
102+
- Source code is available under GPL-3.0
103+
- Modifications must be shared under the same license
104+
- See LICENSE file for complete GPL-3.0 terms
105+
106+
### Proprietary Components (Not Licensed)
107+
The following components are proprietary and not included in the GPL license:
108+
109+
1. **St. John Ambulance Canada Assets**
110+
- Trademarks and logos
111+
- Brand names and service marks
112+
- Corporate identity materials
113+
114+
2. **Organizational Data**
115+
- User information and contact data
116+
- Department structures
117+
- License assignments
118+
- Pricing and cost information
119+
120+
For permissions regarding proprietary components, contact:
121+
gabriel.girouard@sja.ca
122+
123+
### Third-Party Components
124+
This project includes third-party software under their respective licenses:
125+
- React - MIT License
126+
- Tailwind CSS - MIT License
127+
- Other dependencies - See package.json
128+
129+
© 2024 St John Ambulance Canada / Gabriel Girouard. All rights reserved.
130+
131+
## Acknowledgments
132+
133+
- Built with [React](https://reactjs.org/)
134+
- Styled with [Tailwind CSS](https://tailwindcss.com/)
135+
- Icons by [Lucide](https://lucide.dev/)

eslint.config.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import js from '@eslint/js'
2+
import globals from 'globals'
3+
import reactHooks from 'eslint-plugin-react-hooks'
4+
import reactRefresh from 'eslint-plugin-react-refresh'
5+
import tseslint from 'typescript-eslint'
6+
7+
export default tseslint.config(
8+
{ ignores: ['dist'] },
9+
{
10+
extends: [js.configs.recommended, ...tseslint.configs.recommended],
11+
files: ['**/*.{ts,tsx}'],
12+
languageOptions: {
13+
ecmaVersion: 2020,
14+
globals: globals.browser,
15+
},
16+
plugins: {
17+
'react-hooks': reactHooks,
18+
'react-refresh': reactRefresh,
19+
},
20+
rules: {
21+
...reactHooks.configs.recommended.rules,
22+
'react-refresh/only-export-components': [
23+
'warn',
24+
{ allowConstantExport: true },
25+
],
26+
},
27+
},
28+
)

index.html

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link rel="icon" type="image/svg+xml" href="./sjalogo.svg" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>SJA Office 365 License Mapping</title>
8+
<link rel="preconnect" href="https://fonts.googleapis.com">
9+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10+
<link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&display=swap" rel="stylesheet">
11+
</head>
12+
<body>
13+
<div id="root"></div>
14+
<script type="module" src="/src/main.tsx"></script>
15+
</body>
16+
</html>

next.config.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/** @type {import('next').NextConfig} */
2+
const nextConfig = {
3+
output: 'export',
4+
images: {
5+
unoptimized: true,
6+
},
7+
// Since this is a single-page application
8+
trailingSlash: true,
9+
}
10+
11+
module.exports = nextConfig

0 commit comments

Comments
 (0)