wisesplit/components/ReceiptItem.tsx

45 lines
984 B
TypeScript
Raw Normal View History

2022-10-24 07:10:52 +00:00
import { Atom, useAtom } from "jotai";
import EditBox from "./EditBox";
2022-10-24 07:40:14 +00:00
import Person, { IPerson } from "./Person";
2022-10-24 07:10:52 +00:00
export interface IReceiptItem {
name: string;
price: Atom<number>;
2022-10-24 07:40:14 +00:00
splitBetween: Atom<Atom<IPerson>[]>;
2022-10-24 07:10:52 +00:00
}
export interface Props {
itemAtom: Atom<IReceiptItem>;
}
function SplitBetween({ splitBetweenAtom }) {
const [splitBetween, _] = useAtom(splitBetweenAtom);
return splitBetween.length > 0 ? (
<div>
Split between ({splitBetween.length}):
{splitBetween.map((a, i) => (
<Person personAtom={a} key={`split-${i}`} />
))}
</div>
) : (
<></>
);
}
function Price({ priceAtom }) {
return <EditBox valueAtom={priceAtom} />;
}
export default function ReceiptItem({ itemAtom }: Props) {
const [item, _] = useAtom(itemAtom);
return (
<>
<span>
<b>{item.name}</b>
</span>
(<Price priceAtom={item.price} />)
<SplitBetween splitBetweenAtom={item.splitBetween} />
</>
);
}