* Extract ExpenseCard vom ExpenseList
* Implement simple pagination of expenses (see #30)
- display only this year's entries by default
- a "Show more" button reveals all expenses
* Turn getPrisma() into constant "prisma"
- getPrisma() is not async and doesn't need to be awaited
- turn getPrisma() into exported constant "prisma"
* Select fields to be returned by getGroupExpenses()
- make JSON more concise and less redundant
- some properties were removed (i.e.instead of "expense.paidById" use "expense.paidBy.id")
* Remove "participants" from ExpenseCard
- no need to search for participant by id to get it's name
- name property is already present in expense
* Add option to fetch a slice of group expenses
- specify offset and length to get expenses for [offset, offset+length[
- add function to get total number of group expenses
* Add api route for client to fetch group expenses
* Remove "Show more" button from expense list
* Implement infinite scroll
- in server component Page
- only load first 200 expenses max
- pass preloaded expenses and total count
- in client component ExpenseList, if there are more expenses to show
- test if there are more expenses
- append preloading "skeletons" to end of list
- fetch more expenses when last item in list comes into view
- after each fetch increase fetch-length by factor 1.5
- rationale: db fetch usually is not the issue here, the longer the list gets, the longer react needs to redraw
* Use server action instead of api endpoint
* Fixes
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* Add devcontainer configuration for codespace support
* Show the impact of an expense on the active user's balance
* Run prettier
* Put the balance on a different line
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* feat: added a popup asking for confirmation to delete an expense
* fix: changed cancel option as a button and formatting issues
* fix: removed unnecessary tags and replaced generic tags with proper components
* Small fix to avoid warning in console
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* feat: initialise a new totals tab with basic UI
* fix: update group tabs and add stats page
* fix: styling within the new elements
* Prettier
* Display active user expenses only if active user is set
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* Move prisma to runtime dependencies
* Optimize Dockerfile and build script
* Fix: remove mention of generated next-env.d.ts in Dockerfile
* Add missing reset.d.ts file to Dockerfile
* Remove compression steps from Dockerfile and entrypoint script
* Add an env file with mocked env vars added for Docker production builds
* Use server actions to get runtime env vars
* Refactor types and names
* Rollback serverActions, use parsed Zod object for runtime env
* Reintroduce featureFlags object to avoid passing secret envs to the frontend
* Improve string to boolean coercion
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* Run prettier autoformat
* Fix type issue, rename function to match behaviour better
---------
Co-authored-by: Lauri Vuorela <lauri.vuorela@gmail.com>
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* do balance rounding only on full balances rather than on every expense
* use "public balances" calculated from reimbursements to show on balance page
* fixes for totals that did not work as expected
* prettier
* environment variable
* random category draft
* get category from ai
* input limit and documentation
* use watch
* use field.name
* prettier
* presigned upload, readme warning, category to string util
* prettier
* check whether feature is enabled
* use process.env
* improved prompt to return id only
* remove console.debug
* show loader
* share class name
* prettier
* use template literals
* rename format util
* prettier
* Improve README instructions for local setup
* Fix search functionality #61
- use 'includes' for expense filtering
* Ensure expense groups with no matching expenses are hidden after filtering
* Improve README instructions for local setup