Skip to content

Commit

Permalink
custom field monetary
Browse files Browse the repository at this point in the history
  • Loading branch information
ciur committed Oct 9, 2024
1 parent ed42a6a commit 0e6671e
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import {useContext, useEffect, useState} from "react"

import PanelContext from "@/contexts/PanelContext"
import {useGetDocumentQuery} from "@/features/document/apiSlice"
import {CustomFieldDate} from "@/features/document/components/customFields"
import {
CustomFieldDate,
CustomFieldMonetary
} from "@/features/document/components/customFields"
import {skipToken} from "@reduxjs/toolkit/query"

import {
Expand Down Expand Up @@ -237,6 +240,10 @@ function GenericCustomField({
return <CustomFieldDate customField={customField} onChange={onChange} />
}

if (customField.data_type == "monetary") {
return <CustomFieldMonetary customField={customField} onChange={onChange} />
}

return (
<TextInput
label={customField.name}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,14 @@
import type {DocumentCustomFieldValue} from "@/types"
import {rem} from "@mantine/core"
import {DatePickerInput, DateValue} from "@mantine/dates"
import {IconCalendar} from "@tabler/icons-react"
import dayjs from "dayjs"
import {useEffect, useState} from "react"
import {CustomFieldArgs} from "./types"

type onChangeArgs = {
customField: DocumentCustomFieldValue
value: string
}

type onChangeType = ({customField, value}: onChangeArgs) => void

interface Args {
customField: DocumentCustomFieldValue
onChange: onChangeType
}

export default function CustomFieldDate({customField, onChange}: Args) {
export default function CustomFieldDate({
customField,
onChange
}: CustomFieldArgs) {
const [value, setValue] = useState<Date | null>(null)
const icon = (
<IconCalendar style={{width: rem(18), height: rem(18)}} stroke={1.5} />
Expand Down
45 changes: 45 additions & 0 deletions ui2/src/features/document/components/customFields/Monetary.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {NumberInput} from "@mantine/core"
import {useState} from "react"
import {CustomFieldArgs} from "./types"

type MonetaryExtraDataType = {
currency: string
}

function getCurrency(extraData?: string): string | undefined {
if (!extraData) {
return
}

const extra_data = JSON.parse(extraData) as MonetaryExtraDataType

if (extra_data) {
return extra_data.currency
}

return
}

export default function CustomFieldMonetary({
customField,
onChange
}: CustomFieldArgs) {
const [value, setValue] = useState<string | number>(customField.value)
const currency = getCurrency(customField.extra_data)

const onLocalChange = (v: number | string) => {
setValue(v)
onChange({customField, value: v.toString()})
}

return (
<NumberInput
label={customField.name}
decimalScale={2}
fixedDecimalScale
suffix={` ${currency}`} // one space
onChange={onLocalChange}
value={value}
/>
)
}
5 changes: 3 additions & 2 deletions ui2/src/features/document/components/customFields/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import CustomFieldDate from "./CustomFieldDate"
import CustomFieldDate from "./Date"
import CustomFieldMonetary from "./Monetary"

export {CustomFieldDate}
export {CustomFieldDate, CustomFieldMonetary}
13 changes: 13 additions & 0 deletions ui2/src/features/document/components/customFields/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import type {DocumentCustomFieldValue} from "@/types"

export type onChangeArgs = {
customField: DocumentCustomFieldValue
value: string
}

export type onChangeType = ({customField, value}: onChangeArgs) => void

export interface CustomFieldArgs {
customField: DocumentCustomFieldValue
onChange: onChangeType
}

0 comments on commit 0e6671e

Please sign in to comment.