* Allow negative amount for expenses to be entered
- an expense becomes an income
- this does not affect calculations, i.e. an income can be split just like an expense
* Incomes should not be reimbursements
when entering a negative number
- deselect 'isReimbursement'
- hide reimbursement checkbox
* Change captions when entering a negative number
- "expense" becomes "income"
- "paid" becomes "received"
* Format incomes on expense list
- replace "paid by" with "received by"
* Format incomes on "Stats" tab
- a group's or participants balance might be negative
- in this case "spendings" will be "earnings" (display accordingly)
- always display positive numbers
- for active user: highlight spendings/earnings in red/green
* Fix typo
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* change onClick to onFocus, with a slight delay for safari
* typo
* fix variable name
* Fix style
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* 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
* add production build
* add back updates and use slim image
* udpate command
* ignore scripts
* add workdir
* fix workdirs
* docker image improvements
* use .example instead
* use dummy data instead
* remove unused env var and add comment
* fix entrypoints
* change name of script and add possibility for different commands
* change to safer default for volume
* add instructions for the dev docker container
* update copy
* add empty lines under topics to keep uniformity
* most RUN's in a single command
* add comment about volumes for dev target
* remove dev workflow
* remove dev workflow from readme
* Prettify README
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* 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