@accounter/client
Version:
Accounter client application
1 lines • 10.1 kB
JavaScript
import{$ as e,$u as t,An as n,B as r,Dn as i,En as a,Fc as o,G as s,H as c,Ii as l,K as u,Kl as d,Kt as f,Li as p,Ml as m,Nd as h,Ni as g,On as _,Pi as v,Pl as y,Ra as b,Rd as x,Ri as S,Tu as ee,U as C,V as w,W as T,Xn as E,Y as D,_i as O,fs as k,gd as A,ji as te,jl as j,kn as M,md as N,q as P,tr as F,vi as I,xd as L,xs as R,ya as z,zi as B}from"./index-BdWApCqi.js";var V=L(`banknote-arrow-up`,[[`path`,{d:`M12 18H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5`,key:`x6cv4u`}],[`path`,{d:`M18 12h.01`,key:`yjnet6`}],[`path`,{d:`M19 22v-6`,key:`qhmiwi`}],[`path`,{d:`m22 19-3-3-3 3`,key:`rn6bg2`}],[`path`,{d:`M6 12h.01`,key:`c2rlol`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),H=L(`banknote-arrow-down`,[[`path`,{d:`M12 18H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5`,key:`x6cv4u`}],[`path`,{d:`m16 19 3 3 3-3`,key:`1ibux0`}],[`path`,{d:`M18 12h.01`,key:`yjnet6`}],[`path`,{d:`M19 16v6`,key:`tddt3s`}],[`path`,{d:`M6 12h.01`,key:`c2rlol`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),U=x(h(),1),W=ee();function G({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center`,children:e.eventDate?y(new Date(e.eventDate),`dd/MM/yyyy`):`-`})}function K({transaction:e}){let{isInterest:t,amount:n}=e,r=(0,U.useMemo)(()=>Number(n.raw)<0,[n.raw]);return(0,W.jsx)(`div`,{className:`flex items-center gap-2`,children:t?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(H,{className:`size-4 text-red-600`}),(0,W.jsx)(f,{variant:`outline`,className:`bg-red-50 text-red-700`,children:`Interest`})]}):r?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(V,{className:`size-4 text-green-600`}),(0,W.jsx)(f,{variant:`outline`,className:`bg-green-50 text-green-700`,children:`Deposit`})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(H,{className:`size-4 text-red-600`}),(0,W.jsx)(f,{variant:`outline`,className:`bg-red-50 text-red-700`,children:`Withdrawal`})]})})}function q({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center font-mono ${Number(e.amount.raw)<0?`text-green-700`:`text-red-500`}`,children:e.amount.formatted})}function J({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center font-mono font-semibold`,children:(0,U.useMemo)(()=>{let{currency:t}=e.amount;return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t,minimumFractionDigits:2,maximumFractionDigits:2}).format(e.cumulativeBalance)},[e.cumulativeBalance,e.amount])})}function Y({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center font-mono font-semibold`,children:(0,U.useMemo)(()=>{let{currency:t}=e.amount;return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t,minimumFractionDigits:2,maximumFractionDigits:2}).format(e.totalInterest)},[e.totalInterest,e.amount])})}function X({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center font-mono text-muted-foreground`,children:(0,U.useMemo)(()=>new Intl.NumberFormat(`en-US`,{style:`currency`,currency:e.localCurrency,minimumFractionDigits:2,maximumFractionDigits:2}).format(e.localAmount),[e.localAmount,e.localCurrency])})}function Z({transaction:e}){return(0,W.jsx)(`div`,{className:`flex flex-col justify-center font-mono font-semibold text-muted-foreground`,children:(0,U.useMemo)(()=>new Intl.NumberFormat(`en-US`,{style:`currency`,currency:e.localCurrency,minimumFractionDigits:2,maximumFractionDigits:2}).format(e.localCumulativeBalance),[e.localCumulativeBalance,e.localCurrency])})}var Q=[{id:`date`,accessorKey:`eventDate`,sortingFn:e=>e.original.eventDate?new Date(e.original.eventDate).getTime():0,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Date`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(G,{transaction:e.original})},{id:`indicator`,accessorKey:`amount.raw`,header:`Type`,cell:({row:e})=>(0,W.jsx)(K,{transaction:e.original})},{id:`amount`,accessorKey:`amount.raw`,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Origin Amount`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(q,{transaction:e.original})},{id:`cumulativeBalance`,accessorKey:`cumulativeBalance`,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Origin Balance`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(J,{transaction:e.original})},{id:`totalInterest`,accessorKey:`totalInterest`,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Interest`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(Y,{transaction:e.original})},{id:`localAmount`,accessorKey:`localAmount`,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Local Amount`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(X,{transaction:e.original})},{id:`localCumulativeBalance`,accessorKey:`localCumulativeBalance`,header:({column:e})=>(0,W.jsxs)(d,{variant:`ghost`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Local Balance`,e.getIsSorted()&&(e.getIsSorted()===`asc`?(0,W.jsx)(N,{className:`ml-2 h-4 w-4`}):(0,W.jsx)(A,{className:`ml-2 h-4 w-4`}))]}),cell:({row:e})=>(0,W.jsx)(Z,{transaction:e.original})}],ne=`assignChargeToDeposit`,$=()=>{let[{fetching:e},t]=j(b);return{assigning:e,assignChargeToDeposit:(0,U.useCallback)(async e=>{let n=`Error assigning charge ${e.chargeId} to deposit ${e.depositId}`,r=`${ne}-${e.chargeId}`;I.loading(`Assigning to deposit`,{id:r});try{let i=O(await t(e),n,r);i&&I.success(`Success`,{id:r,description:`Charge assigned to deposit ${i.assignChargeToDeposit.id}`})}catch(e){console.error(`${n}: ${e}`),I.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}},[t])}};function re({depositId:e,chargeId:t,refetch:r}){let[o,s]=(0,U.useState)(!1),[c,u]=(0,U.useState)(void 0),[{data:f}]=m({query:z,pause:!o}),{assigning:h,assignChargeToDeposit:y}=$(),b=(0,U.useMemo)(()=>(f?.allDeposits??[]).filter(t=>t.isOpen&&t.id!==e),[f?.allDeposits,e]),x=(0,U.useCallback)(async()=>{c&&(await y({chargeId:t,depositId:c}),s(!1),u(void 0),r?.())},[y,c,r,t]);return(0,U.useEffect)(()=>{o&&u(void 0)},[o]),(0,W.jsxs)(g,{open:o,onOpenChange:s,children:[(0,W.jsx)(B,{children:(0,W.jsx)(d,{variant:`ghost`,size:`sm`,children:`Reassign`})}),(0,W.jsxs)(v,{children:[(0,W.jsx)(p,{children:(0,W.jsx)(S,{children:`Reassign Transaction`})}),(0,W.jsx)(`div`,{className:`space-y-4`,children:(0,W.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,W.jsx)(te,{htmlFor:`target-deposit-select`,children:`Target Deposit`}),(0,W.jsxs)(a,{value:c,onValueChange:e=>u(e),children:[(0,W.jsx)(M,{className:`min-w-[220px]`,children:(0,W.jsx)(n,{id:`target-deposit-select`,placeholder:b.length?`Select deposit`:`No open deposits`})}),(0,W.jsx)(i,{children:b.map(e=>(0,W.jsxs)(_,{value:e.id,children:[e.id,` (`,e.currency,`)`]},e.id))})]})]})}),(0,W.jsx)(l,{children:(0,W.jsx)(d,{variant:`secondary`,disabled:!c||h,onClick:x,children:h?`Reassigning…`:`Reassign`})})]})]})}function ie(e,t){let{getId:n,getChargeId:r,getAmount:i}=t,a=new Map;for(let t of e){let e=r(t);if(!e)continue;let n=a.get(e)??[];n.push(t),a.has(e)||a.set(e,n)}let o=new Set;for(let[,e]of a)if(e.length>1){let t=[...e].sort((e,t)=>Math.abs(i(t))-Math.abs(i(e)));for(let e=1;e<t.length;e++)o.add(n(t[e]))}return o}var ae={[k.Eur]:`eur`,[k.Gbp]:`gbp`,[k.Cad]:`cad`,[k.Jpy]:`jpy`,[k.Aud]:`aud`,[k.Sek]:`sek`,[k.Usd]:`usd`};function oe({depositId:n,enableReassign:i=!1,refetch:a}){let{userContext:l}=(0,U.useContext)(F),[d,f]=(0,U.useState)([{id:`date`,desc:!1}]),[{data:p,fetching:h}]=m({query:o,variables:{depositId:n}}),g=(0,U.useMemo)(()=>{if(!p?.deposit?.metadata.transactions)return[];let e=p.deposit.metadata.transactions.map(e=>E(R,e)),t=ie(e,{getId:e=>e.id,getChargeId:e=>e.chargeId,getAmount:e=>Number(e.amount.raw??0)}),n=[...e].sort((e,t)=>(e.eventDate?new Date(e.eventDate).getTime():0)-(t.eventDate?new Date(t.eventDate).getTime():0)),r=0,i=0,a=0;return n.map(e=>{let n=null,o=ae[e.amount.currency];o&&(n=e.debitExchangeRates?.[o]??e.eventExchangeRates?.[o]??null);let s=Number(e.amount.raw),c=s*(n??1),u=l?.context.defaultLocalCurrency??k.Ils,d=t.has(e.id);return d?i+=s:(r+=s,a+=c),{...e,cumulativeBalance:r,localCumulativeBalance:a,localAmount:c,localCurrency:u,totalInterest:i,isInterest:d}})},[p?.deposit,l]),_=(0,U.useMemo)(()=>{let e=l?.context.defaultLocalCurrency??k.Ils,t=p?.deposit?.currency&&p.deposit.currency===e?Q.filter(e=>e.id!==`amount`&&e.id!==`cumulativeBalance`):Q,r=i?[{id:`actions`,header:`Actions`,cell:({row:e})=>(0,W.jsx)(re,{depositId:n,chargeId:e.original.chargeId,refetch:a})}]:[];return[...t,...r]},[i,n,a,p?.deposit?.currency,l?.context.defaultLocalCurrency]),v=P({data:g,columns:_,getCoreRowModel:D(),onSortingChange:f,getSortedRowModel:e(),state:{sorting:d}});return h?(0,W.jsx)(`div`,{className:`flex h-64 w-full items-center justify-center`,children:(0,W.jsx)(t,{className:`size-10 animate-spin`})}):(0,W.jsxs)(r,{children:[(0,W.jsx)(T,{children:v.getHeaderGroups().map(e=>(0,W.jsx)(s,{children:e.headers.map(e=>(0,W.jsx)(C,{colSpan:e.colSpan,children:e.isPlaceholder?null:u(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,W.jsx)(w,{children:v.getRowModel().rows?.length?v.getRowModel().rows.map(e=>(0,W.jsx)(s,{children:e.getVisibleCells().map(e=>(0,W.jsx)(c,{children:u(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,W.jsx)(s,{children:(0,W.jsx)(c,{colSpan:_.length,className:`h-24 text-center`,children:`No transactions in this deposit.`})})})]})}export{$ as n,oe as t};