@spaceinvoices/react-ui 0.4.3 → 0.4.4

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 (218) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/src/common/autocomplete.tsx +18 -2
  4. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +0 -1
  5. package/src/components/advance-invoices/create/locales/de.ts +2 -0
  6. package/src/components/advance-invoices/create/locales/es.ts +2 -0
  7. package/src/components/advance-invoices/create/locales/fr.ts +2 -0
  8. package/src/components/advance-invoices/create/locales/hr.ts +1 -0
  9. package/src/components/advance-invoices/create/locales/it.ts +2 -0
  10. package/src/components/advance-invoices/create/locales/nl.ts +2 -0
  11. package/src/components/advance-invoices/create/locales/pl.ts +1 -0
  12. package/src/components/advance-invoices/create/locales/pt.ts +1 -0
  13. package/src/components/advance-invoices/create/locales/sl.ts +1 -0
  14. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +0 -1
  15. package/src/components/advance-invoices/list/list-table.tsx +80 -50
  16. package/src/components/advance-invoices/list/locales/de.ts +5 -0
  17. package/src/components/advance-invoices/list/locales/en.ts +4 -0
  18. package/src/components/advance-invoices/list/locales/es.ts +5 -0
  19. package/src/components/advance-invoices/list/locales/fr.ts +5 -0
  20. package/src/components/advance-invoices/list/locales/hr.ts +5 -0
  21. package/src/components/advance-invoices/list/locales/it.ts +5 -0
  22. package/src/components/advance-invoices/list/locales/nl.ts +5 -0
  23. package/src/components/advance-invoices/list/locales/pl.ts +5 -0
  24. package/src/components/advance-invoices/list/locales/pt.ts +5 -0
  25. package/src/components/advance-invoices/list/locales/sl.ts +5 -0
  26. package/src/components/credit-notes/create/create-credit-note-form.tsx +114 -3
  27. package/src/components/credit-notes/create/locales/de.ts +2 -0
  28. package/src/components/credit-notes/create/locales/es.ts +2 -0
  29. package/src/components/credit-notes/create/locales/fr.ts +2 -0
  30. package/src/components/credit-notes/create/locales/hr.ts +1 -0
  31. package/src/components/credit-notes/create/locales/it.ts +2 -0
  32. package/src/components/credit-notes/create/locales/nl.ts +2 -0
  33. package/src/components/credit-notes/create/locales/pl.ts +1 -0
  34. package/src/components/credit-notes/create/locales/pt.ts +1 -0
  35. package/src/components/credit-notes/create/locales/sl.ts +1 -0
  36. package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
  37. package/src/components/credit-notes/list/list-table.tsx +77 -30
  38. package/src/components/credit-notes/list/locales/de.ts +5 -0
  39. package/src/components/credit-notes/list/locales/en.ts +4 -0
  40. package/src/components/credit-notes/list/locales/es.ts +5 -0
  41. package/src/components/credit-notes/list/locales/fr.ts +5 -0
  42. package/src/components/credit-notes/list/locales/hr.ts +5 -0
  43. package/src/components/credit-notes/list/locales/it.ts +5 -0
  44. package/src/components/credit-notes/list/locales/nl.ts +5 -0
  45. package/src/components/credit-notes/list/locales/pl.ts +5 -0
  46. package/src/components/credit-notes/list/locales/pt.ts +5 -0
  47. package/src/components/credit-notes/list/locales/sl.ts +5 -0
  48. package/src/components/customers/customer-list-table/customer-list-table.tsx +0 -3
  49. package/src/components/customers/customer-list-table/locales/de.ts +1 -0
  50. package/src/components/customers/customer-list-table/locales/es.ts +1 -0
  51. package/src/components/customers/customer-list-table/locales/fr.ts +1 -0
  52. package/src/components/customers/customer-list-table/locales/hr.ts +1 -0
  53. package/src/components/customers/customer-list-table/locales/it.ts +1 -0
  54. package/src/components/customers/customer-list-table/locales/nl.ts +1 -0
  55. package/src/components/customers/customer-list-table/locales/pl.ts +1 -0
  56. package/src/components/customers/customer-list-table/locales/pt.ts +1 -0
  57. package/src/components/customers/customer-list-table/locales/sl.ts +1 -0
  58. package/src/components/delivery-notes/list/list-row-actions.tsx +20 -1
  59. package/src/components/delivery-notes/list/list-table.tsx +41 -8
  60. package/src/components/delivery-notes/list/locales/de.ts +4 -0
  61. package/src/components/delivery-notes/list/locales/en.ts +2 -0
  62. package/src/components/delivery-notes/list/locales/es.ts +4 -0
  63. package/src/components/delivery-notes/list/locales/fr.ts +4 -0
  64. package/src/components/delivery-notes/list/locales/hr.ts +4 -0
  65. package/src/components/delivery-notes/list/locales/it.ts +4 -0
  66. package/src/components/delivery-notes/list/locales/nl.ts +4 -0
  67. package/src/components/delivery-notes/list/locales/pl.ts +4 -0
  68. package/src/components/delivery-notes/list/locales/pt.ts +4 -0
  69. package/src/components/delivery-notes/list/locales/sl.ts +4 -0
  70. package/src/components/documents/create/document-details-section.tsx +41 -27
  71. package/src/components/documents/create/linked-documents-info.tsx +82 -0
  72. package/src/components/documents/create/live-preview.tsx +1 -1
  73. package/src/components/documents/types.ts +2 -2
  74. package/src/components/documents/view/document-activities-list.tsx +65 -47
  75. package/src/components/documents/view/document-details-card.tsx +99 -74
  76. package/src/components/documents/view/document-payments-list.tsx +99 -65
  77. package/src/components/documents/view/document-relations-list.tsx +43 -28
  78. package/src/components/documents/view/document-sidebar.tsx +151 -0
  79. package/src/components/documents/view/index.ts +2 -0
  80. package/src/components/documents/view/locales/de.ts +2 -0
  81. package/src/components/documents/view/locales/es.ts +2 -0
  82. package/src/components/documents/view/locales/fr.ts +2 -0
  83. package/src/components/documents/view/locales/hr.ts +2 -0
  84. package/src/components/documents/view/locales/it.ts +2 -0
  85. package/src/components/documents/view/locales/nl.ts +2 -0
  86. package/src/components/documents/view/locales/pl.ts +2 -0
  87. package/src/components/documents/view/locales/pt.ts +2 -0
  88. package/src/components/documents/view/locales/sl.ts +2 -0
  89. package/src/components/documents/view/use-document-download.ts +3 -2
  90. package/src/components/entities/create-entity-form.tsx +165 -13
  91. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +101 -1
  92. package/src/components/entities/entity-settings-form/locales/de.ts +9 -0
  93. package/src/components/entities/entity-settings-form/locales/es.ts +9 -0
  94. package/src/components/entities/entity-settings-form/locales/fr.ts +9 -0
  95. package/src/components/entities/entity-settings-form/locales/hr.ts +9 -0
  96. package/src/components/entities/entity-settings-form/locales/it.ts +9 -0
  97. package/src/components/entities/entity-settings-form/locales/nl.ts +9 -0
  98. package/src/components/entities/entity-settings-form/locales/pl.ts +9 -0
  99. package/src/components/entities/entity-settings-form/locales/pt.ts +9 -0
  100. package/src/components/entities/entity-settings-form/locales/sl.ts +9 -0
  101. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +6 -6
  102. package/src/components/entities/fina-settings-form/locales/de.ts +2 -2
  103. package/src/components/entities/fina-settings-form/locales/en.ts +2 -2
  104. package/src/components/entities/fina-settings-form/locales/es.ts +2 -2
  105. package/src/components/entities/fina-settings-form/locales/fr.ts +2 -2
  106. package/src/components/entities/fina-settings-form/locales/hr.ts +2 -2
  107. package/src/components/entities/fina-settings-form/locales/it.ts +2 -2
  108. package/src/components/entities/fina-settings-form/locales/nl.ts +2 -2
  109. package/src/components/entities/fina-settings-form/locales/pl.ts +2 -2
  110. package/src/components/entities/fina-settings-form/locales/pt.ts +2 -2
  111. package/src/components/entities/fina-settings-form/locales/sl.ts +2 -2
  112. package/src/components/entities/furs-settings-form/locales/en.ts +0 -1
  113. package/src/components/entities/settings/pdf-template-selector/locales/de.ts +3 -1
  114. package/src/components/entities/settings/pdf-template-selector/locales/es.ts +3 -1
  115. package/src/components/entities/settings/pdf-template-selector/locales/fr.ts +4 -1
  116. package/src/components/entities/settings/pdf-template-selector/locales/hr.ts +4 -1
  117. package/src/components/entities/settings/pdf-template-selector/locales/it.ts +3 -1
  118. package/src/components/entities/settings/pdf-template-selector/locales/nl.ts +3 -1
  119. package/src/components/entities/settings/pdf-template-selector/locales/pl.ts +3 -1
  120. package/src/components/entities/settings/pdf-template-selector/locales/pt.ts +3 -1
  121. package/src/components/entities/settings/pdf-template-selector/locales/sl.ts +3 -1
  122. package/src/components/entities/settings/pdf-template-selector/pdf-template-cards.tsx +1 -0
  123. package/src/components/estimates/create/create-estimate-form.tsx +29 -2
  124. package/src/components/estimates/list/list-table.tsx +3 -6
  125. package/src/components/estimates/list/locales/de.ts +1 -0
  126. package/src/components/estimates/list/locales/es.ts +1 -0
  127. package/src/components/estimates/list/locales/fr.ts +1 -0
  128. package/src/components/estimates/list/locales/hr.ts +1 -0
  129. package/src/components/estimates/list/locales/it.ts +1 -0
  130. package/src/components/estimates/list/locales/nl.ts +1 -0
  131. package/src/components/estimates/list/locales/pl.ts +1 -0
  132. package/src/components/estimates/list/locales/pt.ts +1 -0
  133. package/src/components/estimates/list/locales/sl.ts +1 -0
  134. package/src/components/export/document-export-form.tsx +9 -2
  135. package/src/components/export/index.ts +2 -0
  136. package/src/components/export/sales-per-item-export-form.tsx +223 -0
  137. package/src/components/invoices/create/create-invoice-form.tsx +48 -1
  138. package/src/components/invoices/create/locales/de.ts +11 -0
  139. package/src/components/invoices/create/locales/es.ts +11 -0
  140. package/src/components/invoices/create/locales/fr.ts +11 -0
  141. package/src/components/invoices/create/locales/hr.ts +10 -0
  142. package/src/components/invoices/create/locales/it.ts +11 -0
  143. package/src/components/invoices/create/locales/nl.ts +11 -0
  144. package/src/components/invoices/create/locales/pl.ts +10 -0
  145. package/src/components/invoices/create/locales/pt.ts +10 -0
  146. package/src/components/invoices/create/locales/sl.ts +10 -0
  147. package/src/components/invoices/invoices-furs.hooks.ts +4 -1
  148. package/src/components/invoices/list/list-table.tsx +77 -31
  149. package/src/components/invoices/list/locales/de.ts +5 -0
  150. package/src/components/invoices/list/locales/en.ts +4 -0
  151. package/src/components/invoices/list/locales/es.ts +5 -0
  152. package/src/components/invoices/list/locales/fr.ts +5 -0
  153. package/src/components/invoices/list/locales/hr.ts +5 -0
  154. package/src/components/invoices/list/locales/it.ts +5 -0
  155. package/src/components/invoices/list/locales/nl.ts +5 -0
  156. package/src/components/invoices/list/locales/pl.ts +5 -0
  157. package/src/components/invoices/list/locales/pt.ts +5 -0
  158. package/src/components/invoices/list/locales/sl.ts +5 -0
  159. package/src/components/invoices/view/fiscalization-status-card.tsx +42 -24
  160. package/src/components/items/item-combobox.tsx +5 -3
  161. package/src/components/items/item-list-table/item-list-header.tsx +4 -17
  162. package/src/components/items/item-list-table/item-list-table.tsx +3 -3
  163. package/src/components/items/item-list-table/locales/de.ts +1 -0
  164. package/src/components/items/item-list-table/locales/es.ts +1 -0
  165. package/src/components/items/item-list-table/locales/fr.ts +1 -0
  166. package/src/components/items/item-list-table/locales/hr.ts +1 -0
  167. package/src/components/items/item-list-table/locales/it.ts +1 -0
  168. package/src/components/items/item-list-table/locales/nl.ts +1 -0
  169. package/src/components/items/item-list-table/locales/pl.ts +1 -0
  170. package/src/components/items/item-list-table/locales/pt.ts +1 -0
  171. package/src/components/items/item-list-table/locales/sl.ts +1 -0
  172. package/src/components/payments/list/list-table.tsx +0 -4
  173. package/src/components/payments/list/locales/de.ts +1 -0
  174. package/src/components/payments/list/locales/es.ts +1 -0
  175. package/src/components/payments/list/locales/fr.ts +1 -0
  176. package/src/components/payments/list/locales/hr.ts +1 -0
  177. package/src/components/payments/list/locales/it.ts +1 -0
  178. package/src/components/payments/list/locales/nl.ts +1 -0
  179. package/src/components/payments/list/locales/pl.ts +1 -0
  180. package/src/components/payments/list/locales/pt.ts +1 -0
  181. package/src/components/payments/list/locales/sl.ts +1 -0
  182. package/src/components/recurring-invoices/list/list-table.tsx +0 -7
  183. package/src/components/recurring-invoices/list/locales/de.ts +1 -0
  184. package/src/components/recurring-invoices/list/locales/es.ts +1 -0
  185. package/src/components/recurring-invoices/list/locales/fr.ts +1 -0
  186. package/src/components/recurring-invoices/list/locales/hr.ts +1 -0
  187. package/src/components/recurring-invoices/list/locales/it.ts +1 -0
  188. package/src/components/recurring-invoices/list/locales/nl.ts +1 -0
  189. package/src/components/recurring-invoices/list/locales/pl.ts +1 -0
  190. package/src/components/recurring-invoices/list/locales/pt.ts +1 -0
  191. package/src/components/recurring-invoices/list/locales/sl.ts +1 -0
  192. package/src/components/request-logs/request-log-list-table.tsx +0 -3
  193. package/src/components/table/README.md +14 -121
  194. package/src/components/table/data-table.tsx +22 -37
  195. package/src/components/table/hooks/use-table-state.ts +3 -27
  196. package/src/components/table/index.ts +0 -2
  197. package/src/components/table/selection-toolbar.tsx +35 -1
  198. package/src/components/table/table-empty-state.tsx +6 -3
  199. package/src/components/table/table-no-results.tsx +10 -5
  200. package/src/components/table/types.ts +0 -5
  201. package/src/components/taxes/tax-list-table/locales/de.ts +1 -0
  202. package/src/components/taxes/tax-list-table/locales/es.ts +1 -0
  203. package/src/components/taxes/tax-list-table/locales/fr.ts +1 -0
  204. package/src/components/taxes/tax-list-table/locales/hr.ts +1 -0
  205. package/src/components/taxes/tax-list-table/locales/it.ts +1 -0
  206. package/src/components/taxes/tax-list-table/locales/nl.ts +1 -0
  207. package/src/components/taxes/tax-list-table/locales/pl.ts +1 -0
  208. package/src/components/taxes/tax-list-table/locales/pt.ts +1 -0
  209. package/src/components/taxes/tax-list-table/locales/sl.ts +1 -0
  210. package/src/components/taxes/tax-list-table/tax-list-header.tsx +3 -14
  211. package/src/components/taxes/tax-list-table/tax-list-table.tsx +3 -3
  212. package/src/components/ui/popover.tsx +3 -1
  213. package/src/components/ui/tooltip.tsx +3 -1
  214. package/src/generated/schemas/index.ts +1 -1
  215. package/src/hooks/use-duplicate-document.ts +40 -5
  216. package/src/lib/fiscalization.ts +12 -0
  217. package/src/lib/schemas/advance-invoice.ts +0 -1
  218. package/src/components/table/sortable-header.tsx +0 -56
@@ -2,29 +2,16 @@ import { TableHead, TableHeader, TableRow } from "@/ui/components/ui/table";
2
2
  import type { ComponentTranslationProps } from "@/ui/lib/translation";
3
3
  import { createTranslation } from "@/ui/lib/translation";
4
4
 
5
- import { SortableHeader } from "../../table/sortable-header";
5
+ type ItemListHeaderProps = ComponentTranslationProps;
6
6
 
7
- type ItemListHeaderProps = {
8
- orderBy?: string;
9
- onSort?: (order: string | null) => void;
10
- } & ComponentTranslationProps;
11
-
12
- export default function ItemListHeader({ orderBy, onSort, ...i18nProps }: ItemListHeaderProps) {
7
+ export default function ItemListHeader({ ...i18nProps }: ItemListHeaderProps) {
13
8
  const t = createTranslation(i18nProps);
14
9
 
15
10
  return (
16
11
  <TableHeader>
17
12
  <TableRow>
18
- <TableHead>
19
- <SortableHeader field="name" currentOrder={orderBy} onSort={onSort}>
20
- {t("Name")}
21
- </SortableHeader>
22
- </TableHead>
23
- <TableHead>
24
- <SortableHeader field="description" currentOrder={orderBy} onSort={onSort}>
25
- {t("Description")}
26
- </SortableHeader>
27
- </TableHead>
13
+ <TableHead>{t("Name")}</TableHead>
14
+ <TableHead>{t("Description")}</TableHead>
28
15
  <TableHead className="text-right">{t("Price")}</TableHead>
29
16
  <TableHead className="w-[42px] text-right" />
30
17
  </TableRow>
@@ -63,8 +63,8 @@ export default function ItemListTable({
63
63
  return (
64
64
  <DataTable
65
65
  columns={[
66
- { id: "name", header: t("Name"), sortable: true },
67
- { id: "description", header: t("Description"), sortable: true },
66
+ { id: "name", header: t("Name") },
67
+ { id: "description", header: t("Description") },
68
68
  { id: "unit", header: t("Unit") },
69
69
  { id: "price", header: t("Price"), align: "right" },
70
70
  { id: "actions", header: "", align: "right" },
@@ -72,7 +72,7 @@ export default function ItemListTable({
72
72
  renderRow={(item) => (
73
73
  <ItemListRow item={item} key={item.id} onRowClick={(item) => onRowClick?.(item)} onView={onView} t={t} />
74
74
  )}
75
- renderHeader={(headerProps) => <ItemListHeader orderBy={headerProps.orderBy} onSort={headerProps.onSort} t={t} />}
75
+ renderHeader={() => <ItemListHeader t={t} />}
76
76
  queryParams={queryParams}
77
77
  resourceName="item"
78
78
  cacheKey={ITEMS_CACHE_KEY}
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Keine Artikel gefunden",
14
14
  "Try adjusting your search criteria": "Versuchen Sie, Ihre Suchkriterien anzupassen",
15
15
  "Clear search": "Suche zurücksetzen",
16
+ "Clear all": "Alles zurücksetzen",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "No se encontraron artículos",
14
14
  "Try adjusting your search criteria": "Intente ajustar sus criterios de búsqueda",
15
15
  "Clear search": "Limpiar búsqueda",
16
+ "Clear all": "Borrar todo",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Aucun article trouvé",
14
14
  "Try adjusting your search criteria": "Essayez de modifier vos critères de recherche",
15
15
  "Clear search": "Effacer la recherche",
16
+ "Clear all": "Tout effacer",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Nisu pronađeni artikli",
14
14
  "Try adjusting your search criteria": "Pokušajte prilagoditi kriterije pretrage",
15
15
  "Clear search": "Očisti pretragu",
16
+ "Clear all": "Očisti sve",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Nessun articolo trovato",
14
14
  "Try adjusting your search criteria": "Prova a modificare i criteri di ricerca",
15
15
  "Clear search": "Cancella ricerca",
16
+ "Clear all": "Cancella tutto",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Geen artikelen gevonden",
14
14
  "Try adjusting your search criteria": "Probeer uw zoekcriteria aan te passen",
15
15
  "Clear search": "Zoekopdracht wissen",
16
+ "Clear all": "Alles wissen",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Nie znaleziono pozycji",
14
14
  "Try adjusting your search criteria": "Spróbuj dostosować kryteria wyszukiwania",
15
15
  "Clear search": "Wyczyść wyszukiwanie",
16
+ "Clear all": "Wyczyść wszystko",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Nenhum artigo encontrado",
14
14
  "Try adjusting your search criteria": "Tente ajustar os seus critérios de pesquisa",
15
15
  "Clear search": "Limpar pesquisa",
16
+ "Clear all": "Limpar tudo",
16
17
  };
@@ -13,4 +13,5 @@ export default {
13
13
  "No results found": "Ni najdenih izdelkov",
14
14
  "Try adjusting your search criteria": "Poskusite prilagoditi iskalne kriterije",
15
15
  "Clear search": "Počisti iskanje",
16
+ "Clear all": "Počisti vse",
16
17
  };
@@ -77,7 +77,6 @@ export default function PaymentListTable({
77
77
  limit: params.limit,
78
78
  next_cursor: params.next_cursor,
79
79
  prev_cursor: params.prev_cursor,
80
- order_by: params.order_by,
81
80
  search: params.search,
82
81
  query: params.query,
83
82
  });
@@ -100,20 +99,17 @@ export default function PaymentListTable({
100
99
  {
101
100
  id: "date",
102
101
  header: t("Date"),
103
- sortable: true,
104
102
  cell: (payment) => <FormattedDate date={payment.date} />,
105
103
  },
106
104
  {
107
105
  id: "amount",
108
106
  header: t("Amount"),
109
- sortable: true,
110
107
  align: "right",
111
108
  cell: (payment) => <span className="font-medium">{payment.amount.toFixed(2)}</span>,
112
109
  },
113
110
  {
114
111
  id: "type",
115
112
  header: t("Type"),
116
- sortable: true,
117
113
  cell: (payment) => typeLabels[payment.type] ?? payment.type,
118
114
  },
119
115
  {
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Keine Zahlungen gefunden",
23
23
  "Try adjusting your search criteria": "Versuchen Sie, Ihre Suchkriterien anzupassen",
24
24
  "Clear search": "Suche zurücksetzen",
25
+ "Clear all": "Alles zurücksetzen",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "No se encontraron pagos",
23
23
  "Try adjusting your search criteria": "Intente ajustar sus criterios de búsqueda",
24
24
  "Clear search": "Limpiar búsqueda",
25
+ "Clear all": "Borrar todo",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Aucun paiement trouvé",
23
23
  "Try adjusting your search criteria": "Essayez de modifier vos critères de recherche",
24
24
  "Clear search": "Effacer la recherche",
25
+ "Clear all": "Tout effacer",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Nisu pronađena plaćanja",
23
23
  "Try adjusting your search criteria": "Pokušajte prilagoditi kriterije pretrage",
24
24
  "Clear search": "Očisti pretragu",
25
+ "Clear all": "Očisti sve",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Nessun pagamento trovato",
23
23
  "Try adjusting your search criteria": "Prova a modificare i criteri di ricerca",
24
24
  "Clear search": "Cancella ricerca",
25
+ "Clear all": "Cancella tutto",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Geen betalingen gevonden",
23
23
  "Try adjusting your search criteria": "Probeer uw zoekcriteria aan te passen",
24
24
  "Clear search": "Zoekopdracht wissen",
25
+ "Clear all": "Alles wissen",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Nie znaleziono płatności",
23
23
  "Try adjusting your search criteria": "Spróbuj dostosować kryteria wyszukiwania",
24
24
  "Clear search": "Wyczyść wyszukiwanie",
25
+ "Clear all": "Wyczyść wszystko",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Nenhum pagamento encontrado",
23
23
  "Try adjusting your search criteria": "Tente ajustar os seus critérios de pesquisa",
24
24
  "Clear search": "Limpar pesquisa",
25
+ "Clear all": "Limpar tudo",
25
26
  } as const;
@@ -22,4 +22,5 @@ export default {
22
22
  "No results found": "Ni najdenih plačil",
23
23
  "Try adjusting your search criteria": "Poskusite prilagoditi iskalne kriterije",
24
24
  "Clear search": "Počisti iskanje",
25
+ "Clear all": "Počisti vse",
25
26
  } as const;
@@ -79,7 +79,6 @@ export default function RecurringInvoiceListTable({
79
79
  limit: params.limit,
80
80
  next_cursor: params.next_cursor,
81
81
  prev_cursor: params.prev_cursor,
82
- order_by: params.order_by,
83
82
  search: params.search,
84
83
  query: params.query,
85
84
  });
@@ -101,13 +100,11 @@ export default function RecurringInvoiceListTable({
101
100
  {
102
101
  id: "name",
103
102
  header: t("Name"),
104
- sortable: true,
105
103
  cell: (ri) => <span className="font-medium">{ri.name}</span>,
106
104
  },
107
105
  {
108
106
  id: "frequency",
109
107
  header: t("Frequency"),
110
- sortable: true,
111
108
  cell: (ri) => {
112
109
  const label = frequencyLabels[ri.frequency] ?? ri.frequency;
113
110
  return ri.interval > 1 ? `${t("Every")} ${ri.interval} ${label.toLowerCase()}` : label;
@@ -116,13 +113,11 @@ export default function RecurringInvoiceListTable({
116
113
  {
117
114
  id: "status",
118
115
  header: t("Status"),
119
- sortable: true,
120
116
  cell: (ri) => <Badge variant={statusVariant(ri.status)}>{t(`status.${ri.status}`)}</Badge>,
121
117
  },
122
118
  {
123
119
  id: "next_run_date",
124
120
  header: t("Next Run"),
125
- sortable: true,
126
121
  cell: (ri) =>
127
122
  ri.next_run_date ? (
128
123
  <FormattedDate date={ri.next_run_date} />
@@ -133,14 +128,12 @@ export default function RecurringInvoiceListTable({
133
128
  {
134
129
  id: "invoices_generated",
135
130
  header: t("Generated"),
136
- sortable: true,
137
131
  align: "right",
138
132
  cell: (ri) => ri.invoices_generated,
139
133
  },
140
134
  {
141
135
  id: "created_at",
142
136
  header: t("Created"),
143
- sortable: true,
144
137
  cell: (ri) => <FormattedDate date={ri.created_at} />,
145
138
  },
146
139
  {
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Ihre Liste der wiederkehrenden Rechnungen ist leer",
25
25
  "Get started by creating your first entry": "Erstellen Sie Ihren ersten wiederkehrenden Plan",
26
26
  "No results found": "Keine wiederkehrenden Rechnungen gefunden",
27
+ "Clear all": "Alles zurücksetzen",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Su lista de facturas recurrentes está vacía",
25
25
  "Get started by creating your first entry": "Comience creando su primer programa recurrente",
26
26
  "No results found": "No se encontraron facturas recurrentes",
27
+ "Clear all": "Borrar todo",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Votre liste de factures récurrentes est vide",
25
25
  "Get started by creating your first entry": "Commencez par créer votre premier programme récurrent",
26
26
  "No results found": "Aucune facture récurrente trouvée",
27
+ "Clear all": "Tout effacer",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Vaš popis ponavljajućih računa je prazan",
25
25
  "Get started by creating your first entry": "Počnite kreiranjem prvog ponavljajućeg rasporeda",
26
26
  "No results found": "Nisu pronađeni ponavljajući računi",
27
+ "Clear all": "Očisti sve",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "La lista delle fatture ricorrenti è vuota",
25
25
  "Get started by creating your first entry": "Inizia creando il tuo primo programma ricorrente",
26
26
  "No results found": "Nessuna fattura ricorrente trovata",
27
+ "Clear all": "Cancella tutto",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Uw lijst met terugkerende facturen is leeg",
25
25
  "Get started by creating your first entry": "Begin met het maken van uw eerste terugkerend schema",
26
26
  "No results found": "Geen terugkerende facturen gevonden",
27
+ "Clear all": "Alles wissen",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Twoja lista faktur cyklicznych jest pusta",
25
25
  "Get started by creating your first entry": "Zacznij od utworzenia pierwszego harmonogramu cyklicznego",
26
26
  "No results found": "Nie znaleziono faktur cyklicznych",
27
+ "Clear all": "Wyczyść wszystko",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "A sua lista de faturas recorrentes está vazia",
25
25
  "Get started by creating your first entry": "Comece criando o seu primeiro agendamento recorrente",
26
26
  "No results found": "Nenhuma fatura recorrente encontrada",
27
+ "Clear all": "Limpar tudo",
27
28
  } as const;
@@ -24,4 +24,5 @@ export default {
24
24
  "Your list is empty": "Vaš seznam ponavljajočih računov je prazen",
25
25
  "Get started by creating your first entry": "Začnite z ustvarjanjem prvega ponavljajočega urnika",
26
26
  "No results found": "Ni najdenih ponavljajočih računov",
27
+ "Clear all": "Počisti vse",
27
28
  } as const;
@@ -209,8 +209,6 @@ export function RequestLogListTable({
209
209
  id: "created_at",
210
210
  header: "Time",
211
211
  align: "right",
212
- sortable: true,
213
- sortField: "created_at",
214
212
  cell: (log) => (
215
213
  <span className="text-muted-foreground text-xs">
216
214
  {formatDistanceToNow(new Date(log.created_at), { addSuffix: true })}
@@ -243,7 +241,6 @@ export function RequestLogListTable({
243
241
  entityId={entityId}
244
242
  filterConfig={filterConfig}
245
243
  onRowClick={(log) => onSelectLog?.(log)}
246
- defaultOrderBy="-created_at"
247
244
  />
248
245
 
249
246
  <Sheet open={!!selectedLog} onOpenChange={(open) => !open && onSelectLog?.(null)}>
@@ -1,6 +1,6 @@
1
1
  # Table Component Library
2
2
 
3
- A comprehensive, type-safe table system with built-in sorting, search, pagination, and loading states.
3
+ A comprehensive, type-safe table system with built-in search, pagination, and loading states.
4
4
 
5
5
  ## Features
6
6
 
@@ -32,7 +32,6 @@ function InvoiceTable() {
32
32
  {
33
33
  id: "number",
34
34
  header: "Invoice #",
35
- sortable: true,
36
35
  cell: (invoice) => (
37
36
  <a href={`/invoices/${invoice.id}`} className="underline">
38
37
  {invoice.number}
@@ -47,14 +46,12 @@ function InvoiceTable() {
47
46
  {
48
47
  id: "date",
49
48
  header: "Date",
50
- sortable: true,
51
49
  cell: (invoice) => <FormattedDate date={invoice.date} />,
52
50
  },
53
51
  {
54
52
  id: "total",
55
53
  header: "Total",
56
54
  align: "right",
57
- sortable: true,
58
55
  cell: (invoice) => `$${invoice.total}`,
59
56
  },
60
57
  ]}
@@ -81,17 +78,12 @@ function InvoiceTable() {
81
78
  return (
82
79
  <DataTable<Invoice>
83
80
  columns={[
84
- { field: "number", header: "Number", sortable: true },
85
- { field: "customer", header: "Customer" },
86
- { field: "date", header: "Date", sortable: true },
87
- { field: "total", header: "Total", sortable: true, align: "right" },
81
+ { id: "number", header: "Number" },
82
+ { id: "customer", header: "Customer" },
83
+ { id: "date", header: "Date" },
84
+ { id: "total", header: "Total", align: "right" },
88
85
  ]}
89
- renderHeader={(props) => (
90
- <InvoiceListHeader
91
- orderBy={props.orderBy}
92
- onSort={props.onSort}
93
- />
94
- )}
86
+ renderHeader={() => <InvoiceListHeader />}
95
87
  renderRow={(invoice) => (
96
88
  <InvoiceListRow
97
89
  key={invoice.id}
@@ -117,7 +109,6 @@ function InvoiceTable() {
117
109
  | `cacheKey` | `string` | Yes | Unique key for react-query cache |
118
110
  | `onFetch` | `(params) => Promise<Response>` | Yes | Data fetch function |
119
111
  | `resourceName` | `string` | Yes | Resource name for empty states |
120
- | `defaultOrderBy` | `string` | No | Default sort order (e.g., "-id") |
121
112
  | `queryParams` | `TableQueryParams` | No | External query parameters |
122
113
  | `onChangeParams` | `(params) => void` | No | Callback for param changes |
123
114
  | `entityId` | `string` | No | Entity ID for multi-tenant filtering |
@@ -125,7 +116,7 @@ function InvoiceTable() {
125
116
  | `createNewTrigger` | `ReactNode` | No | Custom create action |
126
117
  | `onRowClick` | `(item: T) => void` | No | Row click handler |
127
118
  | `renderRow` | `(item: T) => ReactNode` | No | Custom row renderer |
128
- | `renderHeader` | `(props) => ReactNode` | No | Custom header renderer |
119
+ | `renderHeader` | `() => ReactNode` | No | Custom header renderer |
129
120
 
130
121
  ### Column Definition
131
122
 
@@ -133,8 +124,6 @@ function InvoiceTable() {
133
124
  type Column<T> = {
134
125
  id: string; // Unique column identifier
135
126
  header: ReactNode; // Header label or component
136
- sortField?: string; // Field name for sorting (if different from id)
137
- sortable?: boolean; // Enable sorting
138
127
  align?: "left" | "center" | "right"; // Text alignment
139
128
  cell?: (item: T) => ReactNode; // Cell renderer function
140
129
  className?: string; // Optional CSS classes
@@ -150,9 +139,8 @@ Manages table state internally with optional URL sync:
150
139
  ```tsx
151
140
  import { useTableState } from "@space-invoices/ui";
152
141
 
153
- const { params, handleSort, handleSearch, handlePageChange } = useTableState({
154
- initialParams: { order_by: "-created_at" },
155
- defaultOrderBy: "-id",
142
+ const { params, handleSearch, handlePageChange } = useTableState({
143
+ initialParams: {},
156
144
  onChangeParams: (params) => {
157
145
  // Optional: sync with router or external state
158
146
  navigate({ search: params });
@@ -170,7 +158,7 @@ import { useTableQuery } from "@space-invoices/ui";
170
158
  const { data, isFetching } = useTableQuery({
171
159
  cacheKey: "customers",
172
160
  fetchFn: (params) => sdk.customers.getCustomers(params),
173
- params: { order_by: "-id", search: "acme" },
161
+ params: { search: "acme" },
174
162
  entityId: "entity-123",
175
163
  });
176
164
  ```
@@ -203,21 +191,6 @@ Search input with optional debouncing:
203
191
  />
204
192
  ```
205
193
 
206
- ### SortableHeader
207
-
208
- Sortable column header with visual indicators:
209
-
210
- ```tsx
211
- <SortableHeader
212
- field="name"
213
- currentOrder="-name"
214
- onSort={(order) => console.log(order)}
215
- align="left"
216
- >
217
- Customer Name
218
- </SortableHeader>
219
- ```
220
-
221
194
  ### Pagination
222
195
 
223
196
  Cursor-based pagination controls:
@@ -259,7 +232,6 @@ For straightforward tables, define columns with cell renderers:
259
232
  {
260
233
  id: "name",
261
234
  header: "Name",
262
- sortable: true,
263
235
  cell: (item) => item.name,
264
236
  },
265
237
  {
@@ -281,14 +253,14 @@ For advanced tables with complex row/header components:
281
253
  ```tsx
282
254
  <DataTable
283
255
  columns={[
284
- { id: "name", header: "Name", sortable: true },
256
+ { id: "name", header: "Name" },
285
257
  { id: "email", header: "Email" },
286
258
  ]}
287
259
  renderRow={(item) => (
288
260
  <CustomRow key={item.id} item={item} />
289
261
  )}
290
- renderHeader={(props) => (
291
- <CustomHeader {...props} />
262
+ renderHeader={() => (
263
+ <CustomHeader />
292
264
  )}
293
265
  cacheKey="users"
294
266
  resourceName="user"
@@ -296,84 +268,6 @@ For advanced tables with complex row/header components:
296
268
  />
297
269
  ```
298
270
 
299
- ## Key Improvements
300
-
301
- ### 1. Simplified State Management
302
-
303
- **Before:**
304
- - Manual `useState` for params
305
- - Manual URL sync with `updateQueryParams`
306
- - Complex callback chains
307
-
308
- **After:**
309
- - `useTableState` hook handles everything
310
- - Automatic URL sync
311
- - Single source of truth
312
-
313
- ### 2. Cleaner Hooks
314
-
315
- **Before:**
316
- ```tsx
317
- const { data, isFetching } = useTableQuery({
318
- cacheKey,
319
- fetchFn,
320
- params,
321
- entityId,
322
- });
323
-
324
- // Unnecessary isMounted ref logic
325
- const isMounted = useRef(true);
326
- ```
327
-
328
- **After:**
329
- ```tsx
330
- // Simplified, no ref needed
331
- const { data, isFetching } = useTableQuery({
332
- cacheKey,
333
- fetchFn,
334
- params,
335
- entityId,
336
- });
337
- ```
338
-
339
- ### 3. Better Column API
340
-
341
- **Before:**
342
- - Column definitions not used for rendering
343
- - Must implement custom row/header components
344
-
345
- **After:**
346
- - Column definitions drive rendering
347
- - Optional custom renderers for flexibility
348
- - Built-in cell renderers via `cell` prop
349
-
350
- ### 4. Improved Type Safety
351
-
352
- **Before:**
353
- ```typescript
354
- // Loose typing on columns
355
- columns: { field: string; header: React.ReactNode }[]
356
- ```
357
-
358
- **After:**
359
- ```typescript
360
- // Strongly typed with generics
361
- columns: Column<T>[]
362
- // T is your data type (e.g., Invoice, Customer)
363
- ```
364
-
365
- ### 5. Better UX
366
-
367
- **Before:**
368
- - Basic search input
369
- - Minimal empty states
370
-
371
- **After:**
372
- - Search with clear button
373
- - Rich empty states with icons
374
- - Better error handling in date formatter
375
- - Improved accessibility
376
-
377
271
  ## Best Practices
378
272
 
379
273
  1. **Use column definitions for simple tables**: Less code, easier to maintain
@@ -382,8 +276,7 @@ columns: Column<T>[]
382
276
  4. **Handle loading states**: The component handles this automatically
383
277
  5. **Provide meaningful resource names**: Used in empty states
384
278
  6. **Use FormattedDate**: Consistent date formatting with error handling
385
- 7. **Enable sorting selectively**: Not all columns need sorting
386
- 8. **Use proper TypeScript types**: Import from `@spaceinvoices/js-sdk`
279
+ 7. **Use proper TypeScript types**: Import from `@spaceinvoices/js-sdk`
387
280
 
388
281
  ## Testing
389
282