@accounter/client 0.0.8-alpha-20251027170934-006cd73f08bdddc55a4caff263dcfa5e2b8b63ec → 0.0.8-alpha-20251028103841-7bfcc6a48108b285963cd18e3cc0548f0dd19dd8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/assets/{Checkbox-BZ680-Kk.js → Checkbox-D8vMngET.js} +2 -2
  3. package/dist/assets/MultiSelect-DyHLxout.js +1 -0
  4. package/dist/assets/Pagination-J219P8nB.js +1 -0
  5. package/dist/assets/{Progress-DembKoIO.js → Progress-CtbG-tgE.js} +1 -1
  6. package/dist/assets/Table-DiM_oZiR.js +1 -0
  7. package/dist/assets/Typography-Cci39G2t.js +1 -0
  8. package/dist/assets/YearPickerInput-fBHzo-9n.js +1 -0
  9. package/dist/assets/accordion-CIgxze9K.js +1 -0
  10. package/dist/assets/accountant-approvals-Da-Rhpn-.js +1 -0
  11. package/dist/assets/accounter-table-CVAmEnx0.js +1 -0
  12. package/dist/assets/addDays-CkP1VB0c.js +1 -0
  13. package/dist/assets/all-charges-DBThy56x.js +1 -0
  14. package/dist/assets/{arrow-up-down-J9wnXx-h.js → arrow-up-down-DuRFov-X.js} +1 -1
  15. package/dist/assets/{building-2-1saARtmG.js → building-2-CSNfw8ff.js} +1 -1
  16. package/dist/assets/business-BwlprQsj.js +32 -0
  17. package/dist/assets/business-extended-info-CaNS8hMv.js +13 -0
  18. package/dist/assets/{business-header-SAnNK6FP.js → business-header-BwPwvICE.js} +1 -1
  19. package/dist/assets/business-transactions-filters-Dc2oWHEf.js +1 -0
  20. package/dist/assets/business-transactions-single-CPfIuNhV.js +1 -0
  21. package/dist/assets/business-trip-ChARfpOB.js +1 -0
  22. package/dist/assets/charge-DVi7MgMm.js +1 -0
  23. package/dist/assets/charges-filters-qR84DcIb.js +1 -0
  24. package/dist/assets/charges-ledger-validation-DtbFDZzl.js +1 -0
  25. package/dist/assets/charges-table-acSB8S00.js +62 -0
  26. package/dist/assets/{chart-Dq5fMHeT.js → chart-DtI3g0Q5.js} +6 -6
  27. package/dist/assets/create-event-handler-BiA-1lGu.js +1 -0
  28. package/dist/assets/{data-table-pagination-4YqSgXqX.js → data-table-pagination-Cv19AH6N.js} +1 -1
  29. package/dist/assets/download-csv-button-CBfb0Niq.js +1 -0
  30. package/dist/assets/editable-business-trip-BSVnyXpu.js +16 -0
  31. package/dist/assets/funnel-BjNIVF6D.js +6 -0
  32. package/dist/assets/{index-CBQNwu37.js → index-BBP2jL6K.js} +2 -2
  33. package/dist/assets/index-BcYldCey.js +1 -0
  34. package/dist/assets/index-C0gmUFjA.css +1 -0
  35. package/dist/assets/{index-AxUq37Ea.js → index-C1syq_qI.js} +2 -2
  36. package/dist/assets/index-C4ONlwvw.js +6 -0
  37. package/dist/assets/index-C5CNHfZr.js +1 -0
  38. package/dist/assets/index-CB2VcZw_.js +768 -0
  39. package/dist/assets/index-CHBmUMgX.js +1 -0
  40. package/dist/assets/index-CJmuVRwK.js +1 -0
  41. package/dist/assets/{index-sA_45leD.js → index-CRPI_Ng7.js} +3 -3
  42. package/dist/assets/index-CXbdg8VR.js +1 -0
  43. package/dist/assets/index-CaGyGe4W.js +9 -0
  44. package/dist/assets/index-CeKRCUfE.js +1 -0
  45. package/dist/assets/{index-BYoh_mMo.js → index-Cm34goSF.js} +3 -3
  46. package/dist/assets/index-CrszoO0T.js +1 -0
  47. package/dist/assets/index-Cwocz_5B.js +1 -0
  48. package/dist/assets/index-DFacP-84.js +1 -0
  49. package/dist/assets/index-DGwGMNjJ.js +2 -0
  50. package/dist/assets/index-DHPND3oV.js +1 -0
  51. package/dist/assets/index-DUpo5A07.js +1 -0
  52. package/dist/assets/index-DoiB6EIi.js +1 -0
  53. package/dist/assets/index-DrYwq6CI.js +1 -0
  54. package/dist/assets/index-QZZ5Nw4M.js +1 -0
  55. package/dist/assets/{index-B4-_AJ5N.js → index-bdZbvws5.js} +16 -16
  56. package/dist/assets/index-dYyPNFFk.js +2 -0
  57. package/dist/assets/index-zeuBKIVA.js +6 -0
  58. package/dist/assets/{index.es-Dwfw0glc.js → index.es-Ddqnt5kx.js} +1 -1
  59. package/dist/assets/insert-business-trip-modal-5QaUlEPB.js +6 -0
  60. package/dist/assets/issue-document-n_B8vFIC.js +1 -0
  61. package/dist/assets/list-plus-CdX74KkH.js +6 -0
  62. package/dist/assets/login-page-C7kjnYWZ.js +1 -0
  63. package/dist/assets/match-document-modal-BhJxxCwh.js +16 -0
  64. package/dist/assets/missing-info-charges-CogpD4pD.js +1 -0
  65. package/dist/assets/modal-CWL2uL48.js +1 -0
  66. package/dist/assets/page-layout-Di4aGcKz.js +1 -0
  67. package/dist/assets/page-not-found-BzIsL96K.js +1 -0
  68. package/dist/assets/panel-top-open-QFGcJlh7.js +11 -0
  69. package/dist/assets/{pencil-CYypGy_s.js → pencil-MpkgghkS.js} +1 -1
  70. package/dist/assets/report-commentary-row-DVBtcPLr.js +1 -0
  71. package/dist/assets/{save-BE7zhMeq.js → save-C550A2xp.js} +1 -1
  72. package/dist/assets/similar-transactions-modal-CuhHSiYp.js +1 -0
  73. package/dist/assets/sub-BJ17PU-y.js +1 -0
  74. package/dist/assets/subMonths-ClZ3ESsy.js +1 -0
  75. package/dist/assets/summary-Boa5uC3b.js +1 -0
  76. package/dist/assets/switch-DXxPikE7.js +1 -0
  77. package/dist/assets/toggle-expansion-button-DmgIHP4k.js +1 -0
  78. package/dist/assets/tooltip-B387WRNk.js +1 -0
  79. package/dist/assets/use-url-query-BPBYbbPQ.js +1 -0
  80. package/dist/index.html +2 -2
  81. package/package.json +1 -1
  82. package/src/components/business/contracts-section.tsx +0 -7
  83. package/src/components/business-transactions/business-extended-info.tsx +56 -53
  84. package/src/components/business-transactions/index.tsx +1 -28
  85. package/src/components/businesses/index.tsx +6 -2
  86. package/src/components/charges/cells/business-trip.tsx +6 -1
  87. package/src/components/charges/cells/counterparty.tsx +4 -28
  88. package/src/components/clients/contracts/modify-contract-dialog.tsx +3 -7
  89. package/src/components/common/business-trip-report/parts/core-expense-row.tsx +2 -2
  90. package/src/components/common/business-trip-report/parts/report-header.tsx +2 -1
  91. package/src/components/common/business-trip-report/parts/uncategorized-transactions.tsx +2 -2
  92. package/src/components/common/buttons/charge-navigate-button.tsx +12 -11
  93. package/src/components/common/modals/edit-charge-modal.tsx +2 -2
  94. package/src/components/common/modals/insert-document-modal.tsx +2 -2
  95. package/src/components/common/modals/match-document-modal.tsx +2 -2
  96. package/src/components/common/new-documents-list.tsx +2 -2
  97. package/src/components/documents-table/cells/creditor.tsx +2 -11
  98. package/src/components/documents-table/cells/debtor.tsx +2 -11
  99. package/src/components/ledger-table/counterparty-cell.tsx +4 -33
  100. package/src/components/reports/conto/index.tsx +1 -18
  101. package/src/components/reports/trial-balance-report/index.tsx +1 -17
  102. package/src/components/screens/businesses/business.tsx +0 -4
  103. package/src/components/screens/charges/all-charges.tsx +1 -17
  104. package/src/components/screens/charges/charge.tsx +0 -4
  105. package/src/components/screens/reports/balance-report/index.tsx +0 -14
  106. package/src/components/screens/reports/depreciation-report/index.tsx +0 -14
  107. package/src/components/transactions-table/cells/counterparty.tsx +2 -23
  108. package/src/components/transactions-table/cells-legacy/counterparty.tsx +3 -26
  109. package/src/gql/gql.ts +3 -3
  110. package/src/gql/graphql.ts +2 -5
  111. package/src/providers/urql.tsx +2 -2
  112. package/dist/assets/Typography-DPXB3hIS.js +0 -1
  113. package/dist/assets/accordion-UZwiz3fM.js +0 -1
  114. package/dist/assets/accountant-approvals-DDxSuMql.js +0 -1
  115. package/dist/assets/all-charges-BCP7OG1d.js +0 -1
  116. package/dist/assets/business-CBRlGy9p.js +0 -32
  117. package/dist/assets/business-transactions-single-DvPZFvmH.js +0 -1
  118. package/dist/assets/business-trip-g2hB76cn.js +0 -1
  119. package/dist/assets/charges-filters-T9c4RGLH.js +0 -1
  120. package/dist/assets/charges-ledger-validation-DaD8DCN4.js +0 -1
  121. package/dist/assets/editable-business-trip-B95j7iAh.js +0 -16
  122. package/dist/assets/index-5Fl36gjg.js +0 -1
  123. package/dist/assets/index-BDKAR_k1.js +0 -1
  124. package/dist/assets/index-BKXeyD9a.js +0 -1
  125. package/dist/assets/index-BPSZWRv9.js +0 -9
  126. package/dist/assets/index-BVetJA6_.js +0 -6
  127. package/dist/assets/index-BXp9NrWt.js +0 -1
  128. package/dist/assets/index-Br0-IMSG.js +0 -1
  129. package/dist/assets/index-Bw6OrQ7c.js +0 -1
  130. package/dist/assets/index-C3bFFbEz.js +0 -1
  131. package/dist/assets/index-CDIzaROV.js +0 -2
  132. package/dist/assets/index-CgQ4Qjvh.js +0 -886
  133. package/dist/assets/index-D4O5HA1y.js +0 -1
  134. package/dist/assets/index-DAbvR7_s.js +0 -1
  135. package/dist/assets/index-DkwmPZgt.js +0 -1
  136. package/dist/assets/index-DpsNoHLd.js +0 -2
  137. package/dist/assets/index-DtE5Y1ZB.css +0 -1
  138. package/dist/assets/index-k-cHMsFi.js +0 -1
  139. package/dist/assets/index-vkYxo-Uq.js +0 -1
  140. package/dist/assets/index-vstSRm8a.js +0 -1
  141. package/dist/assets/issue-document-umUFIxCu.js +0 -1
  142. package/dist/assets/login-page-Ck61EC35.js +0 -1
  143. package/dist/assets/missing-info-charges-aak-KkPt.js +0 -1
  144. package/dist/assets/page-not-found-Dzg-czJK.js +0 -1
  145. package/dist/assets/report-commentary-row-B479zk-x.js +0 -1
  146. package/dist/assets/sub-BxFupCKS.js +0 -1
  147. package/dist/assets/subMonths-DskeQPiN.js +0 -1
  148. package/src/components/charges/helpers.ts +0 -15
@@ -1,6 +1,7 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import { AlertCircle } from 'lucide-react';
3
3
  import { Link } from 'react-router-dom';
4
+ import { ROUTES } from '@/router/routes.js';
4
5
  import { Popover, Table, Text } from '@mantine/core';
5
6
  import { useDisclosure } from '@mantine/hooks';
6
7
  import {
@@ -10,7 +11,6 @@ import {
10
11
  } from '../../../../gql/graphql.js';
11
12
  import { getFragmentData, type FragmentType } from '../../../../gql/index.js';
12
13
  import { formatStringifyAmount } from '../../../../helpers/index.js';
13
- import { getChargeHref } from '../../../screens/charges/charge.js';
14
14
  import {
15
15
  Account,
16
16
  Counterparty,
@@ -94,7 +94,7 @@ export const UncategorizedTransactions = ({ data, onChange }: Props): ReactEleme
94
94
  <Amount data={uncategorizedTransaction} />
95
95
  <td>
96
96
  <Link
97
- to={getChargeHref(uncategorizedTransaction.transaction.chargeId)}
97
+ to={ROUTES.CHARGES.DETAIL(uncategorizedTransaction.transaction.chargeId)}
98
98
  target="_blank"
99
99
  rel="noreferrer"
100
100
  onClick={event => event.stopPropagation()}
@@ -1,8 +1,9 @@
1
1
  import type { ComponentProps, ReactElement } from 'react';
2
2
  import { ExternalLink } from 'lucide-react';
3
+ import { Link } from 'react-router-dom';
3
4
  import { Tooltip } from '@mantine/core';
4
5
  import { cn } from '../../../lib/utils.js';
5
- import { getChargeHref } from '../../screens/charges/charge.js';
6
+ import { ROUTES } from '../../../router/routes.js';
6
7
  import { Button } from '../../ui/button.js';
7
8
 
8
9
  export function ChargeNavigateButton(
@@ -10,17 +11,17 @@ export function ChargeNavigateButton(
10
11
  ): ReactElement {
11
12
  return (
12
13
  <Tooltip label="To Charge">
13
- <Button
14
- onClick={event => {
15
- event.stopPropagation();
16
- window.open(getChargeHref(props.chargeId), '_blank', 'noreferrer');
17
- }}
18
- {...props}
19
- className={cn('size-7.5', props.className)}
20
- variant="ghost"
14
+ <Link
15
+ to={ROUTES.CHARGES.DETAIL(props.chargeId)}
16
+ target="_blank"
17
+ rel="noreferrer"
18
+ onClick={event => event.stopPropagation()}
19
+ className="inline-block"
21
20
  >
22
- <ExternalLink className="size-5" />
23
- </Button>
21
+ <Button {...props} className={cn('size-7.5', props.className)} variant="ghost">
22
+ <ExternalLink className="size-5" />
23
+ </Button>
24
+ </Link>
24
25
  </Tooltip>
25
26
  );
26
27
  }
@@ -1,8 +1,8 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import { useQuery } from 'urql';
3
+ import { ROUTES } from '@/router/routes.js';
3
4
  import { Loader } from '@mantine/core';
4
5
  import { EditChargeDocument } from '../../../gql/graphql.js';
5
- import { getChargeHref } from '../../screens/charges/charge.js';
6
6
  import { CopyToClipboardButton, EditCharge, PopUpDrawer } from '../index.js';
7
7
 
8
8
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen
@@ -89,7 +89,7 @@ export const EditChargeModalContent = ({
89
89
  ID: {chargeId}
90
90
  <CopyToClipboardButton
91
91
  isLink
92
- content={`${window.location.origin}${getChargeHref(chargeId)}`}
92
+ content={`${window.location.origin}${ROUTES.CHARGES.DETAIL(chargeId)}`}
93
93
  />
94
94
  </div>
95
95
  </div>
@@ -1,5 +1,5 @@
1
1
  import type { ReactElement } from 'react';
2
- import { getChargeHref } from '../../screens/charges/charge.js';
2
+ import { ROUTES } from '@/router/routes.js';
3
3
  import { CopyToClipboardButton, InsertDocument, PopUpDrawer } from '../index.js';
4
4
 
5
5
  interface Props {
@@ -24,7 +24,7 @@ export const InsertDocumentModal = ({
24
24
  Charge ID: {chargeId}
25
25
  <CopyToClipboardButton
26
26
  isLink
27
- content={`${window.location.origin}${getChargeHref(chargeId)}`}
27
+ content={`${window.location.origin}${ROUTES.CHARGES.DETAIL(chargeId)}`}
28
28
  />
29
29
  </div>
30
30
  </div>
@@ -1,5 +1,5 @@
1
1
  import type { ReactElement } from 'react';
2
- import { getChargeHref } from '../../screens/charges/charge.js';
2
+ import { ROUTES } from '@/router/routes.js';
3
3
  import { DocumentsToChargeMatcher } from '../documents-to-charge-matcher/index.js';
4
4
  import { CopyToClipboardButton, PopUpDrawer } from '../index.js';
5
5
 
@@ -25,7 +25,7 @@ export const MatchDocumentModal = ({
25
25
  Charge ID: {chargeId}
26
26
  <CopyToClipboardButton
27
27
  isLink
28
- content={`${window.location.origin}${getChargeHref(chargeId)}`}
28
+ content={`${window.location.origin}${ROUTES.CHARGES.DETAIL(chargeId)}`}
29
29
  />
30
30
  </div>
31
31
  </div>
@@ -1,8 +1,8 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import { Link } from 'react-router-dom';
3
+ import { ROUTES } from '@/router/routes.js';
3
4
  import { NewFetchedDocumentFieldsFragmentDoc } from '../../gql/graphql.js';
4
5
  import { getFragmentData, type FragmentType } from '../../gql/index.js';
5
- import { getChargeHref } from '../screens/charges/charge.js';
6
6
 
7
7
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen
8
8
  /* GraphQL */ `
@@ -34,7 +34,7 @@ export const NewDocumentsList = ({ data }: Props): ReactElement => {
34
34
  .map(doc => (
35
35
  <Link
36
36
  key={doc.id}
37
- to={getChargeHref(doc.charge!.id)}
37
+ to={ROUTES.CHARGES.DETAIL(doc.charge!.id)}
38
38
  target="_blank"
39
39
  rel="noreferrer"
40
40
  onClick={event => event.stopPropagation()}
@@ -3,9 +3,8 @@ import { Link } from 'react-router-dom';
3
3
  import { DocumentType } from '@/gql/graphql.js';
4
4
  import { useGetBusinesses } from '@/hooks/use-get-businesses.js';
5
5
  import { useUpdateDocument } from '@/hooks/use-update-document.js';
6
- import { useUrlQuery } from '@/hooks/use-url-query.js';
6
+ import { ROUTES } from '@/router/routes.js';
7
7
  import { Indicator } from '@mantine/core';
8
- import { getBusinessHref } from '../../charges/helpers.js';
9
8
  import { ConfirmMiniButton, InsertBusiness, SelectWithSearch } from '../../common/index.js';
10
9
  import type { DocumentsTableRowType } from '../columns.js';
11
10
 
@@ -20,7 +19,6 @@ type Props = {
20
19
  };
21
20
 
22
21
  export const Creditor = ({ document, onChange }: Props): ReactElement => {
23
- const { get } = useUrlQuery();
24
22
  const dbCreditor = 'creditor' in document ? document.creditor : undefined;
25
23
 
26
24
  const shouldHaveCreditor =
@@ -30,13 +28,6 @@ export const Creditor = ({ document, onChange }: Props): ReactElement => {
30
28
 
31
29
  const { selectableBusinesses, refresh: refreshBusinesses } = useGetBusinesses();
32
30
 
33
- const encodedFilters = get('chargesFilters');
34
-
35
- const getHref = useCallback(
36
- (businessId: string) => getBusinessHref(businessId, encodedFilters as string),
37
- [encodedFilters],
38
- );
39
-
40
31
  const suggestedCreditor = useMemo(() => {
41
32
  if (dbCreditor || !('missingInfoSuggestions' in document) || !document.missingInfoSuggestions) {
42
33
  // case when creditor is already set or no suggestions
@@ -106,7 +97,7 @@ export const Creditor = ({ document, onChange }: Props): ReactElement => {
106
97
  {shouldHaveCreditor &&
107
98
  (id ? (
108
99
  <Link
109
- to={getHref(id)}
100
+ to={ROUTES.BUSINESSES.DETAIL(id)}
110
101
  target="_blank"
111
102
  rel="noreferrer"
112
103
  onClick={event => event.stopPropagation()}
@@ -1,11 +1,10 @@
1
1
  import { useCallback, useMemo, useState, type ReactElement } from 'react';
2
2
  import { Link } from 'react-router-dom';
3
3
  import { useGetBusinesses } from '@/hooks/use-get-businesses.js';
4
+ import { ROUTES } from '@/router/routes.js';
4
5
  import { Indicator } from '@mantine/core';
5
6
  import { DocumentType } from '../../../gql/graphql.js';
6
7
  import { useUpdateDocument } from '../../../hooks/use-update-document.js';
7
- import { useUrlQuery } from '../../../hooks/use-url-query.js';
8
- import { getBusinessHref } from '../../charges/helpers.js';
9
8
  import { ConfirmMiniButton, InsertBusiness, SelectWithSearch } from '../../common/index.js';
10
9
  import type { DocumentsTableRowType } from '../columns.js';
11
10
  import { COUNTERPARTIES_LESS_DOCUMENT_TYPES } from './index.js';
@@ -16,7 +15,6 @@ type Props = {
16
15
  };
17
16
 
18
17
  export const Debtor = ({ document, onChange }: Props): ReactElement => {
19
- const { get } = useUrlQuery();
20
18
  const dbDebtor = 'debtor' in document ? document.debtor : undefined;
21
19
 
22
20
  const shouldHaveDebtor =
@@ -26,13 +24,6 @@ export const Debtor = ({ document, onChange }: Props): ReactElement => {
26
24
 
27
25
  const { selectableBusinesses, refresh: refreshBusinesses } = useGetBusinesses();
28
26
 
29
- const encodedFilters = get('chargesFilters');
30
-
31
- const getHref = useCallback(
32
- (businessId: string) => getBusinessHref(businessId, encodedFilters as string),
33
- [encodedFilters],
34
- );
35
-
36
27
  const suggestedDebtor = useMemo(() => {
37
28
  if (dbDebtor || !('missingInfoSuggestions' in document) || !document.missingInfoSuggestions) {
38
29
  // case when creditor is already set or no suggestions
@@ -102,7 +93,7 @@ export const Debtor = ({ document, onChange }: Props): ReactElement => {
102
93
  {shouldHaveDebtor &&
103
94
  (id ? (
104
95
  <Link
105
- to={getHref(id)}
96
+ to={ROUTES.BUSINESSES.DETAIL(id)}
106
97
  target="_blank"
107
98
  rel="noreferrer"
108
99
  onClick={event => event.stopPropagation()}
@@ -1,8 +1,6 @@
1
- import { useCallback, type ReactElement } from 'react';
1
+ import { type ReactElement } from 'react';
2
2
  import { Link } from 'react-router-dom';
3
- import type { ChargeFilter } from '../../gql/graphql.js';
4
- import { useUrlQuery } from '../../hooks/use-url-query.js';
5
- import { getBusinessTransactionsHref } from '../business-transactions/index.js';
3
+ import { ROUTES } from '@/router/routes.js';
6
4
 
7
5
  type Props = {
8
6
  account?: {
@@ -16,33 +14,6 @@ type Props = {
16
14
  };
17
15
 
18
16
  export const CounterpartyCell = ({ account, diffAccount }: Props): ReactElement => {
19
- const { get } = useUrlQuery();
20
-
21
- const encodedFilters = get('chargesFilters');
22
-
23
- const getHref = useCallback(
24
- (businessID: string) => {
25
- let currentFilters: ChargeFilter = {};
26
- if (encodedFilters) {
27
- try {
28
- const decoded = decodeURIComponent(encodedFilters);
29
- const parsed = JSON.parse(decoded);
30
- currentFilters = parsed as ChargeFilter;
31
- } catch (error) {
32
- console.error('Failed to parse filters from URL:', error);
33
- }
34
- }
35
-
36
- return getBusinessTransactionsHref({
37
- ownerIds: currentFilters.byOwners || [],
38
- businessIDs: [businessID],
39
- ...(currentFilters.fromDate && { fromDate: currentFilters.fromDate }),
40
- ...(currentFilters.toDate && { toDate: currentFilters.toDate }),
41
- });
42
- },
43
- [encodedFilters],
44
- );
45
-
46
17
  const isAccountDiff = diffAccount && diffAccount?.id !== account?.id;
47
18
 
48
19
  return (
@@ -51,7 +22,7 @@ export const CounterpartyCell = ({ account, diffAccount }: Props): ReactElement
51
22
  <>
52
23
  {account && (
53
24
  <Link
54
- to={getHref(account.id)}
25
+ to={ROUTES.BUSINESSES.DETAIL(account.id)}
55
26
  target="_blank"
56
27
  rel="noreferrer"
57
28
  onClick={event => event.stopPropagation()}
@@ -63,7 +34,7 @@ export const CounterpartyCell = ({ account, diffAccount }: Props): ReactElement
63
34
  {isAccountDiff && diffAccount && (
64
35
  <div className="border-2 border-yellow-500 rounded-md">
65
36
  <Link
66
- to={getHref(diffAccount.id)}
37
+ to={ROUTES.BUSINESSES.DETAIL(diffAccount.id)}
67
38
  target="_blank"
68
39
  rel="noreferrer"
69
40
  onClick={event => event.stopPropagation()}
@@ -19,11 +19,7 @@ import { Tooltip } from '../../common/index.js';
19
19
  import { Button } from '../../ui/button.js';
20
20
  import { Label } from '../../ui/label.js';
21
21
  import { Switch } from '../../ui/switch.js';
22
- import {
23
- ContoReportFilters,
24
- encodeContoReportFilters,
25
- type ContoReportFiltersType,
26
- } from './conto-report-filters.js';
22
+ import { ContoReportFilters, type ContoReportFiltersType } from './conto-report-filters.js';
27
23
  import { ManageTemplates } from './conto-report-manage-templates.js';
28
24
  import { SaveTemplate } from './conto-report-save-template.js';
29
25
  import { DownloadCSV } from './download-csv.js';
@@ -93,19 +89,6 @@ const BANK_TREE_ROOT_ID = 'bank';
93
89
  export const REPORT_TREE_ROOT_ID = 'report';
94
90
  export const CONTO_REPORT_FILTERS_KEY = 'contoReportFilters';
95
91
 
96
- export function getContoReportHref(filter?: ContoReportFiltersType | null): string {
97
- const params = new URLSearchParams();
98
-
99
- const contoReportFilters = encodeContoReportFilters(filter);
100
- if (contoReportFilters) {
101
- // Add it as a single encoded parameter
102
- params.append(CONTO_REPORT_FILTERS_KEY, contoReportFilters);
103
- }
104
-
105
- const queryParams = params.size > 0 ? `?${params}` : '';
106
- return `/reports/conto${queryParams}`;
107
- }
108
-
109
92
  function buildSortCodeFinancialEntitiesMaps(tree: NodeModel<CustomData>[]) {
110
93
  const sortCodeMap = new Map<number, string | number>();
111
94
  const financialEntitiesMap = new Map<string, string | number>();
@@ -7,10 +7,7 @@ import { useUrlQuery } from '../../../hooks/use-url-query.js';
7
7
  import { FiltersContext } from '../../../providers/filters-context.js';
8
8
  import { PageLayout } from '../../layout/page-layout.js';
9
9
  import { Button } from '../../ui/button.js';
10
- import {
11
- encodeTrialBalanceReportFilters,
12
- TrialBalanceReportFilters,
13
- } from './trial-balance-report-filters.js';
10
+ import { TrialBalanceReportFilters } from './trial-balance-report-filters.js';
14
11
  import { TrialBalanceTable } from './trial-balance-table.js';
15
12
 
16
13
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen
@@ -27,19 +24,6 @@ import { TrialBalanceTable } from './trial-balance-table.js';
27
24
  }
28
25
  `;
29
26
 
30
- export function getTrialBalanceReportHref(filter?: TrialBalanceReportFilters | null): string {
31
- const params = new URLSearchParams();
32
-
33
- const trialBalanceReportFilters = encodeTrialBalanceReportFilters(filter);
34
- if (trialBalanceReportFilters) {
35
- // Add it as a single encoded parameter
36
- params.append('trialBalanceReportFilters', trialBalanceReportFilters);
37
- }
38
-
39
- const queryParams = params.size > 0 ? `?${params}` : '';
40
- return `/reports/trial-balance${queryParams}`;
41
- }
42
-
43
27
  export const TrialBalanceReport = (): ReactElement => {
44
28
  const [isAllOpened, setIsAllOpened] = useState(false);
45
29
  const { get } = useUrlQuery();
@@ -15,10 +15,6 @@ import { AccounterLoader } from '../../common/index.js';
15
15
  }
16
16
  `;
17
17
 
18
- export function getBusinessHref(businessId: string): string {
19
- return `/businesses/${businessId}`;
20
- }
21
-
22
18
  export const BusinessScreen = (): ReactElement => {
23
19
  const { businessId } = useParams<{ businessId: string }>();
24
20
 
@@ -5,7 +5,7 @@ import { Tooltip } from '@mantine/core';
5
5
  import { AllChargesDocument, type ChargeFilter } from '../../../gql/graphql.js';
6
6
  import { useUrlQuery } from '../../../hooks/use-url-query.js';
7
7
  import { FiltersContext } from '../../../providers/filters-context.js';
8
- import { ChargesFilters, encodeChargesFilters } from '../../charges/charges-filters.js';
8
+ import { ChargesFilters } from '../../charges/charges-filters.js';
9
9
  import { ChargesTable } from '../../charges/charges-table.js';
10
10
  import {
11
11
  EditChargeModal,
@@ -31,22 +31,6 @@ import { Button } from '../../ui/button.js';
31
31
  }
32
32
  `;
33
33
 
34
- export function getAllChargesHref(filter?: ChargeFilter | null, page?: number): string {
35
- const params = new URLSearchParams();
36
- if (page) {
37
- params.append('page', String(page));
38
- }
39
-
40
- const chargesFilters = encodeChargesFilters(filter);
41
- if (chargesFilters) {
42
- // Add it as a single encoded parameter
43
- params.append('chargesFilters', chargesFilters);
44
- }
45
-
46
- const queryParams = params.size > 0 ? `?${params}` : '';
47
- return `/charges${queryParams}`;
48
- }
49
-
50
34
  export const AllCharges = (): ReactElement => {
51
35
  const { setFiltersContext } = useContext(FiltersContext);
52
36
  const [editChargeId, setEditChargeId] = useState<
@@ -20,10 +20,6 @@ import {
20
20
  }
21
21
  `;
22
22
 
23
- export function getChargeHref(chargeId: string): string {
24
- return `/charges/${chargeId}`;
25
- }
26
-
27
23
  type Props = {
28
24
  chargeId?: string;
29
25
  };
@@ -25,7 +25,6 @@ import {
25
25
  import {
26
26
  BALANCE_REPORT_FILTERS_QUERY_PARAM,
27
27
  BalanceReportFilters,
28
- encodeBalanceReportFilters,
29
28
  Periods,
30
29
  type BalanceReportFilter,
31
30
  type Period,
@@ -60,19 +59,6 @@ import { ExtendedTransactionsCard } from './extended-transactions.jsx';
60
59
  }
61
60
  `;
62
61
 
63
- export function getBalanceReportHref(filter?: BalanceReportFilter | null): string {
64
- const params = new URLSearchParams();
65
-
66
- const balanceReportFilters = encodeBalanceReportFilters(filter);
67
- if (balanceReportFilters) {
68
- // Add it as a single encoded parameter
69
- params.append(BALANCE_REPORT_FILTERS_QUERY_PARAM, balanceReportFilters);
70
- }
71
-
72
- const queryParams = params.size > 0 ? `?${params}` : '';
73
- return `/reports/balance${queryParams}`;
74
- }
75
-
76
62
  const chartConfig = {
77
63
  income: {
78
64
  label: 'Income',
@@ -22,7 +22,6 @@ import { DepreciationRecordRow } from './depreciation-record-row.js';
22
22
  import {
23
23
  DEPRECIATION_REPORT_FILTERS_QUERY_PARAM,
24
24
  DepreciationReportFilters,
25
- encodeDepreciationReportFilters,
26
25
  } from './depreciation-report-filters.js';
27
26
  import { DepreciationSummaryRow } from './depreciation-summary-row.js';
28
27
 
@@ -76,19 +75,6 @@ import { DepreciationSummaryRow } from './depreciation-summary-row.js';
76
75
  }
77
76
  `;
78
77
 
79
- export function getDepreciationReportHref(filter?: DepreciationReportFilter | null): string {
80
- const params = new URLSearchParams();
81
-
82
- const depreciationReportFilters = encodeDepreciationReportFilters(filter);
83
- if (depreciationReportFilters) {
84
- // Add it as a single encoded parameter
85
- params.append(DEPRECIATION_REPORT_FILTERS_QUERY_PARAM, depreciationReportFilters);
86
- }
87
-
88
- const queryParams = params.size > 0 ? `?${params}` : '';
89
- return `/reports/depreciation${queryParams}`;
90
- }
91
-
92
78
  export const DepreciationReport = (): ReactElement => {
93
79
  const { setFiltersContext } = useContext(FiltersContext);
94
80
  const { userContext } = useContext(UserContext);
@@ -1,11 +1,9 @@
1
1
  import { useCallback, useState, type ReactElement } from 'react';
2
2
  import { CheckIcon } from 'lucide-react';
3
3
  import { Link } from 'react-router-dom';
4
- import type { ChargeFilter } from '../../../gql/graphql.js';
4
+ import { ROUTES } from '@/router/routes.js';
5
5
  import { useGetBusinesses } from '../../../hooks/use-get-businesses.js';
6
6
  import { useUpdateTransaction } from '../../../hooks/use-update-transaction.js';
7
- import { useUrlQuery } from '../../../hooks/use-url-query.js';
8
- import { getBusinessTransactionsHref } from '../../business-transactions/index.js';
9
7
  import { SelectWithSearch, Tooltip } from '../../common/index.js';
10
8
  import { InsertBusiness } from '../../common/modals/insert-business.jsx';
11
9
  import { SimilarTransactionsModal } from '../../common/modals/similar-transactions-modal.jsx';
@@ -18,7 +16,6 @@ type Props = {
18
16
  };
19
17
 
20
18
  export function Counterparty({ transaction, onChange }: Props): ReactElement {
21
- const { get } = useUrlQuery();
22
19
  const {
23
20
  id,
24
21
  counterparty,
@@ -58,24 +55,6 @@ export function Counterparty({ transaction, onChange }: Props): ReactElement {
58
55
  [updateBusiness, onChange],
59
56
  );
60
57
 
61
- const encodedFilters = get('chargesFilters');
62
-
63
- const getHref = useCallback(
64
- (businessID: string) => {
65
- const currentFilters = encodedFilters
66
- ? (JSON.parse(decodeURIComponent(encodedFilters as string)) as ChargeFilter)
67
- : {};
68
-
69
- return getBusinessTransactionsHref({
70
- fromDate: currentFilters.fromDate,
71
- toDate: currentFilters.toDate,
72
- ownerIds: currentFilters.byOwners,
73
- businessIDs: [businessID],
74
- });
75
- },
76
- [encodedFilters],
77
- );
78
-
79
58
  const { selectableBusinesses: selectOptions, fetching: businessesLoading } = useGetBusinesses();
80
59
 
81
60
  const [selectedBusinessId, setSelectedBusinessId] = useState<string | null>(suggestedId ?? null);
@@ -87,7 +66,7 @@ export function Counterparty({ transaction, onChange }: Props): ReactElement {
87
66
  <div className="flex flex-wrap flex-col justify-center">
88
67
  {counterparty?.id ? (
89
68
  <Link
90
- to={getHref(counterparty.id)}
69
+ to={ROUTES.BUSINESSES.DETAIL(counterparty.id)}
91
70
  target="_blank"
92
71
  rel="noreferrer"
93
72
  onClick={event => event.stopPropagation()}
@@ -1,15 +1,11 @@
1
1
  import { useCallback, useState, type ReactElement } from 'react';
2
2
  import { CheckIcon } from 'lucide-react';
3
3
  import { Link } from 'react-router-dom';
4
- import {
5
- TransactionsTableEntityFieldsFragmentDoc,
6
- type ChargeFilter,
7
- } from '../../../gql/graphql.js';
4
+ import { ROUTES } from '@/router/routes.js';
5
+ import { TransactionsTableEntityFieldsFragmentDoc } from '../../../gql/graphql.js';
8
6
  import { getFragmentData, type FragmentType } from '../../../gql/index.js';
9
7
  import { useGetBusinesses } from '../../../hooks/use-get-businesses.js';
10
8
  import { useUpdateTransaction } from '../../../hooks/use-update-transaction.js';
11
- import { useUrlQuery } from '../../../hooks/use-url-query.js';
12
- import { getBusinessTransactionsHref } from '../../business-transactions/index.js';
13
9
  import { SelectWithSearch, Tooltip } from '../../common/index.js';
14
10
  import { InsertBusiness } from '../../common/modals/insert-business.js';
15
11
  import { SimilarTransactionsModal } from '../../common/modals/similar-transactions-modal.js';
@@ -40,7 +36,6 @@ type Props = {
40
36
  };
41
37
 
42
38
  export function Counterparty({ data, onChange, enableEdit }: Props): ReactElement {
43
- const { get } = useUrlQuery();
44
39
  const {
45
40
  id,
46
41
  counterparty,
@@ -79,24 +74,6 @@ export function Counterparty({ data, onChange, enableEdit }: Props): ReactElemen
79
74
  [updateBusiness, onChange],
80
75
  );
81
76
 
82
- const encodedFilters = get('chargesFilters');
83
-
84
- const getHref = useCallback(
85
- (businessID: string) => {
86
- const currentFilters = encodedFilters
87
- ? (JSON.parse(decodeURIComponent(encodedFilters as string)) as ChargeFilter)
88
- : {};
89
-
90
- return getBusinessTransactionsHref({
91
- fromDate: currentFilters.fromDate,
92
- toDate: currentFilters.toDate,
93
- ownerIds: currentFilters.byOwners,
94
- businessIDs: [businessID],
95
- });
96
- },
97
- [encodedFilters],
98
- );
99
-
100
77
  const { selectableBusinesses: selectOptions, fetching: businessesLoading } = useGetBusinesses();
101
78
 
102
79
  const [selectedBusinessId, setSelectedBusinessId] = useState<string | null>(suggestedId ?? null);
@@ -108,7 +85,7 @@ export function Counterparty({ data, onChange, enableEdit }: Props): ReactElemen
108
85
  <div className="flex flex-wrap gap-1 items-center justify-center">
109
86
  {counterparty?.id ? (
110
87
  <Link
111
- to={getHref(counterparty.id)}
88
+ to={ROUTES.BUSINESSES.DETAIL(counterparty.id)}
112
89
  target="_blank"
113
90
  rel="noreferrer"
114
91
  onClick={event => event.stopPropagation()}
package/src/gql/gql.ts CHANGED
@@ -26,7 +26,7 @@ type Documents = {
26
26
  "\n query BusinessChargesSection($page: Int, $limit: Int, $filters: ChargeFilter) {\n allCharges(page: $page, limit: $limit, filters: $filters) {\n nodes {\n id\n ...ChargesTableFields\n }\n pageInfo {\n totalPages\n }\n }\n }\n": typeof types.BusinessChargesSectionDocument,
27
27
  "\n fragment BusinessConfigurationSection on Business {\n __typename\n id\n pcn874RecordType\n irsCode\n isActive\n ... on LtdFinancialEntity {\n optionalVAT\n exemptDealer\n isReceiptEnough\n isDocumentsOptional\n sortCode {\n id\n key\n defaultIrsCode\n }\n taxCategory {\n id\n }\n suggestions {\n phrases\n emails\n tags {\n id\n }\n description\n emailListener {\n internalEmailLinks\n emailBody\n attachments\n }\n }\n clientInfo {\n id\n }\n }\n }\n": typeof types.BusinessConfigurationSectionFragmentDoc,
28
28
  "\n fragment BusinessContactSection on Business {\n __typename\n id\n ... on LtdFinancialEntity {\n name\n hebrewName\n country\n governmentId\n address\n email\n # localAddress\n phoneNumber\n website\n clientInfo {\n id\n emails\n }\n }\n }\n": typeof types.BusinessContactSectionFragmentDoc,
29
- "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n operationsLimit\n }\n }\n": typeof types.ClientContractsSectionDocument,
29
+ "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n }\n }\n": typeof types.ClientContractsSectionDocument,
30
30
  "\n fragment BusinessPage on Business {\n id\n ... on LtdFinancialEntity {\n clientInfo {\n id\n }\n adminInfo {\n id\n }\n }\n ...ClientIntegrationsSection\n ...BusinessHeader\n ...BusinessContactSection\n ...BusinessConfigurationSection\n ...BusinessAdminSection\n }\n": typeof types.BusinessPageFragmentDoc,
31
31
  "\n fragment ClientIntegrationsSection on LtdFinancialEntity {\n id\n clientInfo {\n id\n greenInvoiceId\n hiveId\n }\n }\n": typeof types.ClientIntegrationsSectionFragmentDoc,
32
32
  "\n query ClientIntegrationsSectionGreenInvoice($clientId: UUID!) {\n greenInvoiceClient(clientId: $clientId) {\n id\n country\n emails\n name\n phone\n taxId\n address\n city\n zip\n fax\n mobile\n }\n }\n": typeof types.ClientIntegrationsSectionGreenInvoiceDocument,
@@ -278,7 +278,7 @@ const documents: Documents = {
278
278
  "\n query BusinessChargesSection($page: Int, $limit: Int, $filters: ChargeFilter) {\n allCharges(page: $page, limit: $limit, filters: $filters) {\n nodes {\n id\n ...ChargesTableFields\n }\n pageInfo {\n totalPages\n }\n }\n }\n": types.BusinessChargesSectionDocument,
279
279
  "\n fragment BusinessConfigurationSection on Business {\n __typename\n id\n pcn874RecordType\n irsCode\n isActive\n ... on LtdFinancialEntity {\n optionalVAT\n exemptDealer\n isReceiptEnough\n isDocumentsOptional\n sortCode {\n id\n key\n defaultIrsCode\n }\n taxCategory {\n id\n }\n suggestions {\n phrases\n emails\n tags {\n id\n }\n description\n emailListener {\n internalEmailLinks\n emailBody\n attachments\n }\n }\n clientInfo {\n id\n }\n }\n }\n": types.BusinessConfigurationSectionFragmentDoc,
280
280
  "\n fragment BusinessContactSection on Business {\n __typename\n id\n ... on LtdFinancialEntity {\n name\n hebrewName\n country\n governmentId\n address\n email\n # localAddress\n phoneNumber\n website\n clientInfo {\n id\n emails\n }\n }\n }\n": types.BusinessContactSectionFragmentDoc,
281
- "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n operationsLimit\n }\n }\n": types.ClientContractsSectionDocument,
281
+ "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n }\n }\n": types.ClientContractsSectionDocument,
282
282
  "\n fragment BusinessPage on Business {\n id\n ... on LtdFinancialEntity {\n clientInfo {\n id\n }\n adminInfo {\n id\n }\n }\n ...ClientIntegrationsSection\n ...BusinessHeader\n ...BusinessContactSection\n ...BusinessConfigurationSection\n ...BusinessAdminSection\n }\n": types.BusinessPageFragmentDoc,
283
283
  "\n fragment ClientIntegrationsSection on LtdFinancialEntity {\n id\n clientInfo {\n id\n greenInvoiceId\n hiveId\n }\n }\n": types.ClientIntegrationsSectionFragmentDoc,
284
284
  "\n query ClientIntegrationsSectionGreenInvoice($clientId: UUID!) {\n greenInvoiceClient(clientId: $clientId) {\n id\n country\n emails\n name\n phone\n taxId\n address\n city\n zip\n fax\n mobile\n }\n }\n": types.ClientIntegrationsSectionGreenInvoiceDocument,
@@ -583,7 +583,7 @@ export function graphql(source: "\n fragment BusinessContactSection on Business
583
583
  /**
584
584
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
585
585
  */
586
- export function graphql(source: "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n operationsLimit\n }\n }\n"): (typeof documents)["\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n operationsLimit\n }\n }\n"];
586
+ export function graphql(source: "\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n }\n }\n"): (typeof documents)["\n query ClientContractsSection($clientId: UUID!) {\n contractsByClient(clientId: $clientId) {\n id\n purchaseOrder\n startDate\n endDate\n amount {\n raw\n currency\n }\n billingCycle\n isActive\n product\n documentType\n remarks\n plan\n msCloud\n }\n }\n"];
587
587
  /**
588
588
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
589
589
  */