UNPKG

@accounter/client

Version:
1 lines • 10.1 kB
import{s as e}from"./dist-BmACi7k_.js";import{i as t,o as n}from"./utils-BxkqV8PM.js";import{An as r,D as i,In as a,Ro as o,qa as s,r as c,t as l,zo as u}from"./error-handling-sQ-z99nE.js";import{a as d,c as f,d as p,f as m,i as h,l as g,mt as _,n as v,p as y,pt as b,r as x,s as S,t as ee,ut as C}from"./select-KYQbDWZT.js";import{i as w,r as te,t as T}from"./bank-deposits-NwOAxSV0.js";import{t as E}from"./pencil-CuUSlUpr.js";import{t as D}from"./button-BZ6z_NAl.js";import{$c as O,$n as k,Bn as A,Fl as j,Il as ne,Jc as M,Pt as N,Rl as P,Uc as F,Wc as I,Xc as L,Yc as R,a as z,c as B,d as V,h as H,i as U,m as W,n as G,o as K,qc as q,r as J,s as Y,t as X,u as re}from"./table-D4eAFW7G.js";var Z=e(n(),1),ie=`createDeposit`,ae=()=>{let[{fetching:e},t]=o(r);return{creating:e,createDeposit:(0,Z.useCallback)(async e=>{let n=`Error creating new deposit ${e.name}`,r=`${ie}-${e.name}-${e.currency}-${e.openDate}-${e.accountId??`noAccount`}`;c.loading(`Creating deposit`,{id:r});try{let i=l(await t(e),n,r);if(i)return c.success(`Deposit created`,{id:r,description:`Deposit ${i.createDeposit.id} (${i.createDeposit.currency}) created successfully`}),i.createDeposit.id}catch(e){console.error(`${n}: ${e}`),c.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}return null},[t])}},oe=`updateDeposit`,se=()=>{let[{fetching:e},t]=o(s);return{updating:e,updateDeposit:(0,Z.useCallback)(async e=>{let n=`Error updating deposit`,r=`${oe}-${e.id}`;c.loading(`Updating deposit…`,{id:r});try{if(l(await t(e),n,r))return c.success(`Deposit updated`,{id:r}),!0}catch(e){console.error(`${n}: ${e}`),c.error(`Error`,{id:r,description:n,duration:1e5,closeButton:!0})}return!1},[t])}},Q=t(),ce=A({name:k().min(1,`Name is required`),currency:N(Object.values(a),{error:`Currency is required`}),openDate:k().min(1,`Open date is required`)}),le=A({name:k().min(1,`Name is required`),openDate:k().min(1,`Open date is required`),closeDate:k().optional()});function ue({onSuccess:e,onClose:t}){let{creating:n,createDeposit:r}=ae(),i=O({resolver:H(ce),defaultValues:{name:``,currency:``,openDate:``}}),o=async n=>{await r({name:n.name,currency:n.currency,openDate:n.openDate})&&(e?.(),t())};return(0,Q.jsx)(I,{...i,children:(0,Q.jsxs)(`form`,{onSubmit:i.handleSubmit(o),className:`space-y-4`,children:[(0,Q.jsx)(q,{control:i.control,name:`name`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Name`}),(0,Q.jsx)(S,{...e,placeholder:`e.g. High-Yield Savings 2025`,disabled:n}),(0,Q.jsx)(L,{})]})}),(0,Q.jsx)(q,{control:i.control,name:`currency`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Currency`}),(0,Q.jsxs)(ee,{onValueChange:e.onChange,value:e.value,disabled:n,children:[(0,Q.jsx)(h,{children:(0,Q.jsx)(d,{placeholder:`Select currency`})}),(0,Q.jsx)(v,{children:Object.values(a).map(e=>(0,Q.jsx)(x,{value:e,children:e},e))})]}),(0,Q.jsx)(L,{})]})}),(0,Q.jsx)(q,{control:i.control,name:`openDate`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Open Date`}),(0,Q.jsx)(S,{...e,type:`date`,disabled:n}),(0,Q.jsx)(L,{})]})}),(0,Q.jsxs)(p,{children:[(0,Q.jsx)(D,{type:`button`,variant:`outline`,onClick:t,disabled:n,children:`Cancel`}),(0,Q.jsx)(D,{type:`submit`,disabled:n,children:n?`Creating…`:`Create Deposit`})]})]})})}function de({deposit:e,onSuccess:t,onClose:n}){let{updating:r,updateDeposit:i}=se(),a=O({resolver:H(le),defaultValues:{name:e.name,openDate:e.openDate??``,closeDate:e.closeDate??``}});(0,Z.useEffect)(()=>{a.reset({name:e.name,openDate:e.openDate??``,closeDate:e.closeDate??``})},[e,a]);let o=async r=>{await i({id:e.id,name:r.name,openDate:r.openDate,closeDate:r.closeDate||null})&&(t?.(),n())},s=async()=>{let r=w(new Date);a.setValue(`closeDate`,r),await i({id:e.id,name:a.getValues(`name`),openDate:a.getValues(`openDate`),closeDate:r})&&(t?.(),n())},c=async()=>{a.setValue(`closeDate`,``),await i({id:e.id,name:a.getValues(`name`),openDate:a.getValues(`openDate`),closeDate:null})&&(t?.(),n())};return(0,Q.jsx)(I,{...a,children:(0,Q.jsxs)(`form`,{onSubmit:a.handleSubmit(o),className:`space-y-4`,children:[(0,Q.jsx)(q,{control:a.control,name:`name`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Name`}),(0,Q.jsx)(S,{...e,disabled:r}),(0,Q.jsx)(L,{})]})}),(0,Q.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,Q.jsx)(q,{control:a.control,name:`openDate`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Open Date`}),(0,Q.jsx)(S,{...e,type:`date`,disabled:r}),(0,Q.jsx)(L,{})]})}),(0,Q.jsx)(q,{control:a.control,name:`closeDate`,render:({field:e})=>(0,Q.jsxs)(M,{children:[(0,Q.jsx)(R,{children:`Close Date`}),(0,Q.jsx)(S,{...e,type:`date`,disabled:r}),(0,Q.jsx)(L,{})]})})]}),(0,Q.jsxs)(`div`,{className:`flex items-center justify-between pt-2 border-t`,children:[e.isOpen?(0,Q.jsx)(D,{type:`button`,variant:`destructive`,size:`sm`,onClick:s,disabled:r,children:`Close Deposit`}):(0,Q.jsx)(D,{type:`button`,variant:`outline`,size:`sm`,onClick:c,disabled:r,children:`Re-open Deposit`}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(D,{type:`button`,variant:`outline`,onClick:n,disabled:r,children:`Cancel`}),(0,Q.jsx)(D,{type:`submit`,disabled:r,children:r?`Saving…`:`Save Changes`})]})]})]})})}function $({open:e,onOpenChange:t,deposit:n,onSuccess:r}){let i=!!n;return(0,Q.jsx)(f,{open:e,onOpenChange:t,children:(0,Q.jsxs)(g,{className:`max-w-md`,children:[(0,Q.jsx)(m,{children:(0,Q.jsx)(y,{children:i?`Edit Deposit`:`New Deposit`})}),i?(0,Q.jsx)(de,{deposit:n,onSuccess:r,onClose:()=>t(!1)}):(0,Q.jsx)(ue,{onSuccess:r,onClose:()=>t(!1)})]})})}function fe(){let[{data:e,fetching:t},n]=u({query:i}),[r,a]=(0,Z.useState)([{id:`openDate`,desc:!1}]),[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(null),[d,f]=(0,Z.useState)(0),p=(0,Z.useCallback)(()=>{f(e=>e+1),n({requestPolicy:`network-only`})},[n]),m=te((0,Z.useMemo)(()=>(e?.allDeposits??[]).map(e=>({id:e.id,name:e.name,currency:e.currency??null,openDate:e.openDate??null,closeDate:e.closeDate??null,isOpen:e.isOpen,currentBalanceRaw:e.metadata.currentBalance?.raw??0,currentBalanceFormatted:e.metadata.currentBalance?.formatted??``,totalDepositRaw:e.metadata.totalDeposit?.raw??0,totalDepositFormatted:e.metadata.totalDeposit?.formatted??``,totalInterestRaw:e.metadata.totalInterest?.raw??0,totalInterestFormatted:e.metadata.totalInterest?.formatted??``})),[e])),h=(0,Z.useRef)([{id:`expander`,header:()=>null,cell:({row:e})=>(0,Q.jsx)(D,{variant:`ghost`,size:`icon`,onClick:()=>e.toggleExpanded(),"aria-label":e.getIsExpanded()?`Collapse`:`Expand`,children:e.getIsExpanded()?(0,Q.jsx)(_,{}):(0,Q.jsx)(b,{})}),enableSorting:!1},{accessorKey:`name`,header:`Deposit Name`,cell:e=>(0,Q.jsx)(`span`,{className:`font-mono text-xs`,children:e.getValue()})},{accessorKey:`currency`,header:`Currency`},{accessorKey:`isOpen`,header:`Status`,cell:e=>e.getValue()?(0,Q.jsx)(F,{className:`bg-green-600 text-white`,variant:`secondary`,children:`Open`}):(0,Q.jsx)(F,{variant:`secondary`,children:`Closed`}),sortingFn:(e,t)=>Number(e.original.isOpen)-Number(t.original.isOpen)},{accessorKey:`openDate`,header:`Open Date`,cell:e=>(0,Q.jsx)(`span`,{children:e.getValue()})},{accessorKey:`closeDate`,header:`Close Date`,cell:e=>(0,Q.jsx)(`span`,{children:e.getValue()??`-`}),sortingFn:(e,t)=>{let n=e.original.closeDate??``,r=t.original.closeDate??``;return n.localeCompare(r)}},{id:`totalDeposit`,header:`Total Deposit`,accessorFn:e=>e.totalDepositRaw,cell:e=>(0,Q.jsx)(`span`,{className:`tabular-nums`,children:e.row.original.totalDepositFormatted}),sortingFn:(e,t)=>e.original.totalDepositRaw-t.original.totalDepositRaw},{id:`currentBalance`,header:`Current Balance`,accessorFn:e=>e.currentBalanceRaw,cell:e=>(0,Q.jsx)(`span`,{className:`tabular-nums`,children:e.row.original.currentBalanceFormatted}),sortingFn:(e,t)=>e.original.currentBalanceRaw-t.original.currentBalanceRaw},{id:`totalInterest`,header:`Total Interest`,accessorFn:e=>e.totalInterestRaw,cell:e=>(0,Q.jsx)(`span`,{className:`tabular-nums`,children:e.row.original.totalInterestFormatted}),sortingFn:(e,t)=>e.original.totalInterestRaw-t.original.totalInterestRaw},{id:`actions`,header:()=>null,cell:({row:e})=>(0,Q.jsxs)(j,{children:[(0,Q.jsx)(P,{asChild:!0,children:(0,Q.jsx)(D,{variant:`ghost`,size:`icon`,onClick:t=>{t.stopPropagation(),l(e.original)},"aria-label":`Edit deposit`,children:(0,Q.jsx)(E,{className:`h-4 w-4`})})}),(0,Q.jsx)(ne,{children:`Edit deposit`})]}),enableSorting:!1}]).current,g=B({data:m,columns:h,state:{sorting:r},onSortingChange:a,getCoreRowModel:re(),getSortedRowModel:W(),getExpandedRowModel:V(),getRowCanExpand:()=>!0});return(0,Q.jsxs)(`div`,{className:`max-w-[95vw]`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Bank Deposits`}),(0,Q.jsxs)(D,{onClick:()=>s(!0),children:[(0,Q.jsx)(C,{className:`mr-2 h-4 w-4`}),`New Deposit`]})]}),(0,Q.jsx)(`div`,{className:`mt-6 overflow-hidden rounded-md border`,children:(0,Q.jsxs)(X,{children:[(0,Q.jsx)(z,{children:g.getHeaderGroups().map(e=>(0,Q.jsx)(K,{children:e.headers.map(e=>(0,Q.jsx)(U,{colSpan:e.colSpan,children:e.isPlaceholder?null:Y(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,Q.jsx)(G,{children:t&&!e?(0,Q.jsx)(K,{children:(0,Q.jsx)(J,{colSpan:h.length,className:`h-24 text-center`,children:`Loading...`})}):g.getRowModel().rows?.length?g.getRowModel().rows.map(e=>(0,Q.jsxs)(Z.Fragment,{children:[(0,Q.jsx)(K,{"data-state":e.getIsSelected()&&`selected`,children:e.getVisibleCells().map(e=>(0,Q.jsx)(J,{children:Y(e.column.columnDef.cell,e.getContext())},e.id))}),e.getIsExpanded()?(0,Q.jsx)(K,{children:(0,Q.jsx)(J,{colSpan:h.length,children:(0,Q.jsx)(T,{depositId:e.original.id,enableReassign:!0,refetch:p,reassignToken:d})})}):null]},e.id)):(0,Q.jsx)(K,{children:(0,Q.jsx)(J,{colSpan:h.length,className:`h-24 text-center`,children:`No results.`})})})]})}),(0,Q.jsx)($,{open:o,onOpenChange:s,onSuccess:()=>n({requestPolicy:`network-only`})}),(0,Q.jsx)($,{open:!!c,onOpenChange:e=>{e||l(null)},deposit:c??void 0,onSuccess:()=>n({requestPolicy:`network-only`})})]})}export{fe as DepositsScreen};