1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-08 23:15:24 +02:00

front end for /claim #131

This commit is contained in:
Brian Skinner 2024-01-19 11:38:07 -08:00
parent be27bddb4c
commit b4918cbd9b
8 changed files with 72 additions and 42295 deletions

View file

@ -1,22 +1,42 @@
import type { AccountClassification } from '@prisma/client'
import type { AccountClassification, AccountCategory } from '@prisma/client'
import { Controller } from 'react-hook-form'
import { InputCurrency, DatePicker } from '@maybe-finance/design-system'
import { Input, InputCurrency, DatePicker } from '@maybe-finance/design-system'
import { BrowserUtil } from '@maybe-finance/client/shared'
export type AccountValuationFieldProps = {
control: any
classification?: AccountClassification
category?: AccountCategory
currentBalanceEditable?: boolean
}
export function AccountValuationFormFields({
control,
classification = 'asset',
category = 'investment',
currentBalanceEditable = true,
}: AccountValuationFieldProps) {
return (
<>
{category === 'stock' && (
<Controller
control={control}
name="stockSymbol"
shouldUnregister
render={({ field, fieldState: { error } }) => (
<Input
{...field}
type="text"
className="mb-4"
label="Symbol"
placeholder="e.g. MCD"
error={error && 'Symbol is required'}
/>
)}
/>
)}
<Controller
control={control}
name="startDate"
@ -39,14 +59,38 @@ export function AccountValuationFormFields({
render={({ field, fieldState: { error } }) => (
<InputCurrency
{...field}
label={`${classification === 'liability' ? 'Start' : 'Purchase'} value`}
label={`${
classification === 'liability'
? 'Start'
: category === 'stock'
? 'Total purchase'
: 'Purchase'
} value`}
placeholder="0"
error={error && 'Positive value is required'}
/>
)}
/>
{currentBalanceEditable && (
{category === 'stock' && (
<Controller
control={control}
name="numberShares"
rules={{ required: true, validate: (val) => val >= 0 }}
shouldUnregister
render={({ field, fieldState: { error } }) => (
<Input
{...field}
type="text"
label="Number of shares"
placeholder="0"
error={error && 'Number of shares is required'}
/>
)}
/>
)}
{category !== 'stock' && currentBalanceEditable && (
<Controller
control={control}
name="currentBalance"

View file

@ -31,11 +31,12 @@ export default function AssetForm({ mode, defaultValues, onSubmit, accountType }
const { errors, isSubmitting, isValid } = formState
const [startDate] = watch(['startDate'])
const currentBalanceEditable = !startDate || !DateUtil.isToday(startDate)
const [categoryValue] = watch(['categoryUser'])
const categoryList = useMemo(() => {
const { cash, investment, crypto, valuable, other } = AccountUtil.CATEGORIES
const { stock, cash, investment, crypto, valuable, other } = AccountUtil.CATEGORIES
if (mode === 'create') {
return [cash, investment, crypto, valuable, other]
return [stock, cash, investment, crypto, valuable, other]
} else {
return AccountUtil.CATEGORY_MAP[accountType!]
}
@ -89,6 +90,7 @@ export default function AssetForm({ mode, defaultValues, onSubmit, accountType }
<div>
<AccountValuationFormFields
control={control}
category={categoryValue}
currentBalanceEditable={currentBalanceEditable}
/>
</div>

View file

@ -6,9 +6,11 @@ import { DateTime } from 'luxon'
import type { AccountCategory } from '@prisma/client'
export type AccountValuationFields = {
stockSymbol: string | null
startDate: string | null
originalBalance: number | null
currentBalance: number | null
numberShares: number | null
}
// Property

View file

@ -56,6 +56,11 @@ export const CATEGORIES: Record<AccountCategory, SharedType.NormalizedCategory>
singular: 'Vehicle',
plural: 'Vehicles',
},
stock: {
value: 'stock',
singular: 'Stock',
plural: 'Stocks',
},
other: {
value: 'other',
singular: 'Other',
@ -81,7 +86,7 @@ export const CATEGORY_MAP_SIMPLE: Record<AccountType, AccountCategory[]> = {
LOAN: ['loan'],
PROPERTY: ['property'],
VEHICLE: ['vehicle'],
OTHER_ASSET: ['cash', 'investment', 'crypto', 'valuable', 'other'],
OTHER_ASSET: ['stock', 'cash', 'investment', 'crypto', 'valuable', 'other'],
OTHER_LIABILITY: ['other'],
}

42279
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "AccountCategory" ADD VALUE 'stock';

View file

@ -94,6 +94,7 @@ enum AccountType {
}
enum AccountCategory {
stock
cash
investment
crypto

View file

@ -4614,9 +4614,9 @@
"@types/node" "*"
"@types/node@*", "@types/node@>=8.1.0":
version "20.11.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.3.tgz#ac29fba7aeadc74046b02e50758156f4850f1296"
integrity sha512-nrlmbvGPNGaj84IJZXMPhQuCMEVTT/hXZMJJG/aIqVL9fKxqk814sGGtJA4GI6hpJSLQjpi6cn0Qx9eOf9SDVg==
version "20.11.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.4.tgz#c724a5d6723182af758b91b994209336f4439cb7"
integrity sha512-6I0fMH8Aoy2lOejL3s4LhyIYX34DPwY8bl5xlNjBvUEk8OHrcuzsFt+Ied4LvJihbtXPM+8zUqdydfIti86v9g==
dependencies:
undici-types "~5.26.4"
@ -7202,9 +7202,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565:
version "1.0.30001576"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4"
integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==
version "1.0.30001577"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001577.tgz#a24991eb4ad67324ba8b96716340d53151f2f6f8"
integrity sha512-rs2ZygrG1PNXMfmncM0B5H1hndY5ZCC9b5TkFaVNfZ+AUlyqcMyVIQtc3fsezi0NUCk5XZfDf9WS6WxMxnfdrg==
capture-exit@^2.0.0:
version "2.0.0"
@ -8906,9 +8906,9 @@ ejs@^3.1.7, ejs@^3.1.8:
jake "^10.8.5"
electron-to-chromium@^1.4.601:
version "1.4.631"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.631.tgz#db2de2e1ce90fc1785b5c3f49fde594413270e05"
integrity sha512-g73CJB/rMPjdxpiNJYmV1homV7mLVUNe/R0z/HhqMfpjkt58FpYmkTjbtuv3zymdbTTJ+VOEqe1c+lkTjSOhmQ==
version "1.4.632"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.632.tgz#df6253483b802eb83eee2fdc0e5067bd46f36f11"
integrity sha512-JGmudTwg7yxMYvR/gWbalqqQiyu7WTFv2Xu3vw4cJHXPFxNgAk0oy8UHaer8nLF4lZJa+rNoj6GsrKIVJTV6Tw==
elliptic@^6.5.3, elliptic@^6.5.4:
version "6.5.4"