@akinon/ai-modal-table 1.0.0

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 (185) hide show
  1. package/dist/cjs/__tests__/index.test.d.ts +2 -0
  2. package/dist/cjs/__tests__/index.test.d.ts.map +1 -0
  3. package/dist/cjs/__tests__/index.test.js +82 -0
  4. package/dist/cjs/__tests__/index.test.tsx +94 -0
  5. package/dist/cjs/ai-modal-table/__tests__/index.test.d.ts +2 -0
  6. package/dist/cjs/ai-modal-table/__tests__/index.test.d.ts.map +1 -0
  7. package/dist/cjs/ai-modal-table/__tests__/index.test.js +59 -0
  8. package/dist/cjs/ai-modal-table/__tests__/index.test.tsx +98 -0
  9. package/dist/cjs/ai-modal-table/index.d.ts +4 -0
  10. package/dist/cjs/ai-modal-table/index.d.ts.map +1 -0
  11. package/dist/cjs/ai-modal-table/index.js +54 -0
  12. package/dist/cjs/ai-table/__tests__/index.test.d.ts +2 -0
  13. package/dist/cjs/ai-table/__tests__/index.test.d.ts.map +1 -0
  14. package/dist/cjs/ai-table/__tests__/index.test.js +348 -0
  15. package/dist/cjs/ai-table/__tests__/index.test.tsx +572 -0
  16. package/dist/cjs/ai-table/components/__tests__/content.test.d.ts +2 -0
  17. package/dist/cjs/ai-table/components/__tests__/content.test.d.ts.map +1 -0
  18. package/dist/cjs/ai-table/components/__tests__/content.test.js +1349 -0
  19. package/dist/cjs/ai-table/components/__tests__/content.test.tsx +1637 -0
  20. package/dist/cjs/ai-table/components/__tests__/filters.test.d.ts +2 -0
  21. package/dist/cjs/ai-table/components/__tests__/filters.test.d.ts.map +1 -0
  22. package/dist/cjs/ai-table/components/__tests__/filters.test.js +400 -0
  23. package/dist/cjs/ai-table/components/__tests__/filters.test.tsx +534 -0
  24. package/dist/cjs/ai-table/components/__tests__/footer.test.d.ts +2 -0
  25. package/dist/cjs/ai-table/components/__tests__/footer.test.d.ts.map +1 -0
  26. package/dist/cjs/ai-table/components/__tests__/footer.test.js +465 -0
  27. package/dist/cjs/ai-table/components/__tests__/footer.test.tsx +597 -0
  28. package/dist/cjs/ai-table/components/__tests__/mapper.test.d.ts +2 -0
  29. package/dist/cjs/ai-table/components/__tests__/mapper.test.d.ts.map +1 -0
  30. package/dist/cjs/ai-table/components/__tests__/mapper.test.js +453 -0
  31. package/dist/cjs/ai-table/components/__tests__/mapper.test.tsx +601 -0
  32. package/dist/cjs/ai-table/components/__tests__/pagination.test.d.ts +2 -0
  33. package/dist/cjs/ai-table/components/__tests__/pagination.test.d.ts.map +1 -0
  34. package/dist/cjs/ai-table/components/__tests__/pagination.test.js +430 -0
  35. package/dist/cjs/ai-table/components/__tests__/pagination.test.tsx +629 -0
  36. package/dist/cjs/ai-table/components/__tests__/row-actions.test.d.ts +2 -0
  37. package/dist/cjs/ai-table/components/__tests__/row-actions.test.d.ts.map +1 -0
  38. package/dist/cjs/ai-table/components/__tests__/row-actions.test.js +382 -0
  39. package/dist/cjs/ai-table/components/__tests__/row-actions.test.tsx +507 -0
  40. package/dist/cjs/ai-table/components/content.d.ts +11 -0
  41. package/dist/cjs/ai-table/components/content.d.ts.map +1 -0
  42. package/dist/cjs/ai-table/components/content.js +309 -0
  43. package/dist/cjs/ai-table/components/filters.d.ts +10 -0
  44. package/dist/cjs/ai-table/components/filters.d.ts.map +1 -0
  45. package/dist/cjs/ai-table/components/filters.js +55 -0
  46. package/dist/cjs/ai-table/components/footer.d.ts +12 -0
  47. package/dist/cjs/ai-table/components/footer.d.ts.map +1 -0
  48. package/dist/cjs/ai-table/components/footer.js +24 -0
  49. package/dist/cjs/ai-table/components/mapper.d.ts +11 -0
  50. package/dist/cjs/ai-table/components/mapper.d.ts.map +1 -0
  51. package/dist/cjs/ai-table/components/mapper.js +21 -0
  52. package/dist/cjs/ai-table/components/pagination.d.ts +11 -0
  53. package/dist/cjs/ai-table/components/pagination.d.ts.map +1 -0
  54. package/dist/cjs/ai-table/components/pagination.js +106 -0
  55. package/dist/cjs/ai-table/components/row-actions.d.ts +14 -0
  56. package/dist/cjs/ai-table/components/row-actions.d.ts.map +1 -0
  57. package/dist/cjs/ai-table/components/row-actions.js +52 -0
  58. package/dist/cjs/ai-table/constants/index.d.ts +17 -0
  59. package/dist/cjs/ai-table/constants/index.d.ts.map +1 -0
  60. package/dist/cjs/ai-table/constants/index.js +19 -0
  61. package/dist/cjs/ai-table/i18n/index.d.ts +3 -0
  62. package/dist/cjs/ai-table/i18n/index.d.ts.map +1 -0
  63. package/dist/cjs/ai-table/i18n/index.js +14 -0
  64. package/dist/cjs/ai-table/i18n/translations/en.d.ts +8 -0
  65. package/dist/cjs/ai-table/i18n/translations/en.d.ts.map +1 -0
  66. package/dist/cjs/ai-table/i18n/translations/en.js +9 -0
  67. package/dist/cjs/ai-table/i18n/translations/tr.d.ts +8 -0
  68. package/dist/cjs/ai-table/i18n/translations/tr.d.ts.map +1 -0
  69. package/dist/cjs/ai-table/i18n/translations/tr.js +9 -0
  70. package/dist/cjs/ai-table/index.d.ts +4 -0
  71. package/dist/cjs/ai-table/index.d.ts.map +1 -0
  72. package/dist/cjs/ai-table/index.js +71 -0
  73. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.d.ts +2 -0
  74. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.d.ts.map +1 -0
  75. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.js +146 -0
  76. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.ts +184 -0
  77. package/dist/cjs/ai-table/utils/data-format/index.d.ts +7 -0
  78. package/dist/cjs/ai-table/utils/data-format/index.d.ts.map +1 -0
  79. package/dist/cjs/ai-table/utils/data-format/index.js +43 -0
  80. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts +2 -0
  81. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts.map +1 -0
  82. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.js +291 -0
  83. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.tsx +399 -0
  84. package/dist/cjs/ai-table/utils/render-mapper-fields/index.d.ts +10 -0
  85. package/dist/cjs/ai-table/utils/render-mapper-fields/index.d.ts.map +1 -0
  86. package/dist/cjs/ai-table/utils/render-mapper-fields/index.js +48 -0
  87. package/dist/cjs/index.d.ts +4 -0
  88. package/dist/cjs/index.d.ts.map +1 -0
  89. package/dist/cjs/index.js +7 -0
  90. package/dist/cjs/types/index.d.ts +134 -0
  91. package/dist/cjs/types/index.d.ts.map +1 -0
  92. package/dist/cjs/types/index.js +2 -0
  93. package/dist/esm/__tests__/index.test.d.ts +2 -0
  94. package/dist/esm/__tests__/index.test.d.ts.map +1 -0
  95. package/dist/esm/__tests__/index.test.js +80 -0
  96. package/dist/esm/__tests__/index.test.tsx +94 -0
  97. package/dist/esm/ai-modal-table/__tests__/index.test.d.ts +2 -0
  98. package/dist/esm/ai-modal-table/__tests__/index.test.d.ts.map +1 -0
  99. package/dist/esm/ai-modal-table/__tests__/index.test.js +57 -0
  100. package/dist/esm/ai-modal-table/__tests__/index.test.tsx +98 -0
  101. package/dist/esm/ai-modal-table/index.d.ts +4 -0
  102. package/dist/esm/ai-modal-table/index.d.ts.map +1 -0
  103. package/dist/esm/ai-modal-table/index.js +50 -0
  104. package/dist/esm/ai-table/__tests__/index.test.d.ts +2 -0
  105. package/dist/esm/ai-table/__tests__/index.test.d.ts.map +1 -0
  106. package/dist/esm/ai-table/__tests__/index.test.js +346 -0
  107. package/dist/esm/ai-table/__tests__/index.test.tsx +572 -0
  108. package/dist/esm/ai-table/components/__tests__/content.test.d.ts +2 -0
  109. package/dist/esm/ai-table/components/__tests__/content.test.d.ts.map +1 -0
  110. package/dist/esm/ai-table/components/__tests__/content.test.js +1347 -0
  111. package/dist/esm/ai-table/components/__tests__/content.test.tsx +1637 -0
  112. package/dist/esm/ai-table/components/__tests__/filters.test.d.ts +2 -0
  113. package/dist/esm/ai-table/components/__tests__/filters.test.d.ts.map +1 -0
  114. package/dist/esm/ai-table/components/__tests__/filters.test.js +398 -0
  115. package/dist/esm/ai-table/components/__tests__/filters.test.tsx +534 -0
  116. package/dist/esm/ai-table/components/__tests__/footer.test.d.ts +2 -0
  117. package/dist/esm/ai-table/components/__tests__/footer.test.d.ts.map +1 -0
  118. package/dist/esm/ai-table/components/__tests__/footer.test.js +463 -0
  119. package/dist/esm/ai-table/components/__tests__/footer.test.tsx +597 -0
  120. package/dist/esm/ai-table/components/__tests__/mapper.test.d.ts +2 -0
  121. package/dist/esm/ai-table/components/__tests__/mapper.test.d.ts.map +1 -0
  122. package/dist/esm/ai-table/components/__tests__/mapper.test.js +451 -0
  123. package/dist/esm/ai-table/components/__tests__/mapper.test.tsx +601 -0
  124. package/dist/esm/ai-table/components/__tests__/pagination.test.d.ts +2 -0
  125. package/dist/esm/ai-table/components/__tests__/pagination.test.d.ts.map +1 -0
  126. package/dist/esm/ai-table/components/__tests__/pagination.test.js +428 -0
  127. package/dist/esm/ai-table/components/__tests__/pagination.test.tsx +629 -0
  128. package/dist/esm/ai-table/components/__tests__/row-actions.test.d.ts +2 -0
  129. package/dist/esm/ai-table/components/__tests__/row-actions.test.d.ts.map +1 -0
  130. package/dist/esm/ai-table/components/__tests__/row-actions.test.js +380 -0
  131. package/dist/esm/ai-table/components/__tests__/row-actions.test.tsx +507 -0
  132. package/dist/esm/ai-table/components/content.d.ts +11 -0
  133. package/dist/esm/ai-table/components/content.d.ts.map +1 -0
  134. package/dist/esm/ai-table/components/content.js +305 -0
  135. package/dist/esm/ai-table/components/filters.d.ts +10 -0
  136. package/dist/esm/ai-table/components/filters.d.ts.map +1 -0
  137. package/dist/esm/ai-table/components/filters.js +51 -0
  138. package/dist/esm/ai-table/components/footer.d.ts +12 -0
  139. package/dist/esm/ai-table/components/footer.d.ts.map +1 -0
  140. package/dist/esm/ai-table/components/footer.js +20 -0
  141. package/dist/esm/ai-table/components/mapper.d.ts +11 -0
  142. package/dist/esm/ai-table/components/mapper.d.ts.map +1 -0
  143. package/dist/esm/ai-table/components/mapper.js +17 -0
  144. package/dist/esm/ai-table/components/pagination.d.ts +11 -0
  145. package/dist/esm/ai-table/components/pagination.d.ts.map +1 -0
  146. package/dist/esm/ai-table/components/pagination.js +102 -0
  147. package/dist/esm/ai-table/components/row-actions.d.ts +14 -0
  148. package/dist/esm/ai-table/components/row-actions.d.ts.map +1 -0
  149. package/dist/esm/ai-table/components/row-actions.js +48 -0
  150. package/dist/esm/ai-table/constants/index.d.ts +17 -0
  151. package/dist/esm/ai-table/constants/index.d.ts.map +1 -0
  152. package/dist/esm/ai-table/constants/index.js +16 -0
  153. package/dist/esm/ai-table/i18n/index.d.ts +3 -0
  154. package/dist/esm/ai-table/i18n/index.d.ts.map +1 -0
  155. package/dist/esm/ai-table/i18n/index.js +11 -0
  156. package/dist/esm/ai-table/i18n/translations/en.d.ts +8 -0
  157. package/dist/esm/ai-table/i18n/translations/en.d.ts.map +1 -0
  158. package/dist/esm/ai-table/i18n/translations/en.js +7 -0
  159. package/dist/esm/ai-table/i18n/translations/tr.d.ts +8 -0
  160. package/dist/esm/ai-table/i18n/translations/tr.d.ts.map +1 -0
  161. package/dist/esm/ai-table/i18n/translations/tr.js +7 -0
  162. package/dist/esm/ai-table/index.d.ts +4 -0
  163. package/dist/esm/ai-table/index.d.ts.map +1 -0
  164. package/dist/esm/ai-table/index.js +67 -0
  165. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.d.ts +2 -0
  166. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.d.ts.map +1 -0
  167. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.js +144 -0
  168. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.ts +184 -0
  169. package/dist/esm/ai-table/utils/data-format/index.d.ts +7 -0
  170. package/dist/esm/ai-table/utils/data-format/index.d.ts.map +1 -0
  171. package/dist/esm/ai-table/utils/data-format/index.js +38 -0
  172. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts +2 -0
  173. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts.map +1 -0
  174. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.js +289 -0
  175. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.tsx +399 -0
  176. package/dist/esm/ai-table/utils/render-mapper-fields/index.d.ts +10 -0
  177. package/dist/esm/ai-table/utils/render-mapper-fields/index.d.ts.map +1 -0
  178. package/dist/esm/ai-table/utils/render-mapper-fields/index.js +44 -0
  179. package/dist/esm/index.d.ts +4 -0
  180. package/dist/esm/index.d.ts.map +1 -0
  181. package/dist/esm/index.js +2 -0
  182. package/dist/esm/types/index.d.ts +134 -0
  183. package/dist/esm/types/index.d.ts.map +1 -0
  184. package/dist/esm/types/index.js +1 -0
  185. package/package.json +60 -0
@@ -0,0 +1,507 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+
3
+ import { fireEvent, render, screen } from '@testing-library/react';
4
+ import React from 'react';
5
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
6
+
7
+ import { IS_EDITING_INITIAL_VALUE } from '../../constants';
8
+ import { ActionButtons } from '../row-actions';
9
+
10
+ vi.mock('@akinon/ui-button', () => ({
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ Button: ({ children, icon, onClick, className, disabled, ...props }: any) => (
13
+ <button
14
+ onClick={onClick}
15
+ className={className}
16
+ disabled={disabled}
17
+ data-testid={`button-${icon}`}
18
+ data-icon={icon}
19
+ {...props}
20
+ >
21
+ {children}
22
+ </button>
23
+ )
24
+ }));
25
+
26
+ vi.mock('@akinon/ui-layout', () => ({
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ Flex: ({ children, ...props }: any) => (
29
+ <div data-testid="flex" {...props}>
30
+ {children}
31
+ </div>
32
+ )
33
+ }));
34
+
35
+ vi.mock('@akinon/ui-theme', () => ({
36
+ useToken: () => ({
37
+ token: { colorBorder: '#ccc' },
38
+ hashId: 'hash-id'
39
+ }),
40
+ getPrefixCls: vi.fn(cls => `ant-${cls}`)
41
+ }));
42
+
43
+ vi.mock('@ant-design/cssinjs', () => ({
44
+ useStyleRegister: vi.fn((_config, cb) => {
45
+ cb();
46
+ return (node: React.ReactNode) => node;
47
+ })
48
+ }));
49
+
50
+ describe('ActionButtons', () => {
51
+ const defaultProps = {
52
+ hasEdit: false,
53
+ isEditing: false,
54
+ isSelected: false,
55
+ rowId: 1,
56
+ setIsEditingPk: vi.fn(),
57
+ onToggleSelection: vi.fn(),
58
+ customActionButtons: undefined
59
+ };
60
+
61
+ beforeEach(() => {
62
+ vi.clearAllMocks();
63
+ });
64
+
65
+ const renderComponent = (props = {}) => {
66
+ return render(<ActionButtons {...defaultProps} {...props} />);
67
+ };
68
+
69
+ describe('Rendering', () => {
70
+ it('should render flex container', () => {
71
+ renderComponent();
72
+ expect(screen.getByTestId('flex')).toBeInTheDocument();
73
+ });
74
+
75
+ it('should always render selection button', () => {
76
+ renderComponent();
77
+ expect(screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
78
+ });
79
+
80
+ it('should render edit button when hasEdit is true', () => {
81
+ renderComponent({ hasEdit: true });
82
+ expect(screen.getByTestId('button-edit')).toBeInTheDocument();
83
+ });
84
+
85
+ it('should not render edit button when hasEdit is false', () => {
86
+ renderComponent({ hasEdit: false });
87
+ expect(screen.queryByTestId('button-edit')).not.toBeInTheDocument();
88
+ });
89
+
90
+ it('should render custom action buttons when provided', () => {
91
+ const customActionButtons = vi.fn(() => (
92
+ <div data-testid="custom-button">Custom Action</div>
93
+ ));
94
+ renderComponent({ customActionButtons });
95
+
96
+ expect(screen.getByTestId('custom-button')).toBeInTheDocument();
97
+ expect(customActionButtons).toHaveBeenCalledWith(1);
98
+ });
99
+
100
+ it('should not render custom action buttons when not provided', () => {
101
+ renderComponent({ customActionButtons: undefined });
102
+ expect(screen.queryByTestId('custom-button')).not.toBeInTheDocument();
103
+ });
104
+
105
+ it('should render multiple buttons in correct order', () => {
106
+ renderComponent({ hasEdit: true });
107
+
108
+ const buttons = screen.getAllByRole('button');
109
+ // Should have edit button and selection button
110
+ expect(buttons.length).toBeGreaterThanOrEqual(2);
111
+ });
112
+ });
113
+
114
+ describe('Selection Button', () => {
115
+ it('should call onToggleSelection when selection button is clicked', () => {
116
+ const onToggleSelection = vi.fn();
117
+ renderComponent({ onToggleSelection, rowId: 1 });
118
+
119
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
120
+
121
+ expect(onToggleSelection).toHaveBeenCalledWith(1);
122
+ expect(onToggleSelection).toHaveBeenCalledTimes(1);
123
+ });
124
+
125
+ it('should pass correct rowId to onToggleSelection', () => {
126
+ const onToggleSelection = vi.fn();
127
+ renderComponent({ onToggleSelection, rowId: 'custom-id' });
128
+
129
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
130
+
131
+ expect(onToggleSelection).toHaveBeenCalledWith('custom-id');
132
+ });
133
+
134
+ it('should apply selected styles when isSelected is true', () => {
135
+ renderComponent({ isSelected: true });
136
+
137
+ const button = screen.getByTestId('button-katalogkontrol');
138
+ expect(button).toHaveClass('bg-green-600');
139
+ expect(button).toHaveClass('border-green-600');
140
+ });
141
+
142
+ it('should not apply selected styles when isSelected is false', () => {
143
+ renderComponent({ isSelected: false });
144
+
145
+ const button = screen.getByTestId('button-katalogkontrol');
146
+ expect(button).not.toHaveClass('bg-green-600');
147
+ expect(button).not.toHaveClass('border-green-600');
148
+ });
149
+
150
+ it('should have proper default styles for selection button', () => {
151
+ renderComponent({ isSelected: false });
152
+
153
+ const button = screen.getByTestId('button-katalogkontrol');
154
+ expect(button).toHaveClass('border');
155
+ expect(button).toHaveClass('border-ebonyClay-200');
156
+ expect(button).toHaveClass('bg-ebonyClay-400');
157
+ expect(button).toHaveClass('h-7');
158
+ });
159
+ });
160
+
161
+ describe('Edit Button', () => {
162
+ it('should call setIsEditingPk with rowId when edit button is clicked and not editing', () => {
163
+ const setIsEditingPk = vi.fn();
164
+ renderComponent({
165
+ hasEdit: true,
166
+ isEditing: false,
167
+ rowId: 1,
168
+ setIsEditingPk
169
+ });
170
+
171
+ fireEvent.click(screen.getByTestId('button-edit'));
172
+
173
+ expect(setIsEditingPk).toHaveBeenCalledWith(1);
174
+ });
175
+
176
+ it('should call setIsEditingPk with IS_EDITING_INITIAL_VALUE when edit button is clicked and already editing', () => {
177
+ const setIsEditingPk = vi.fn();
178
+ renderComponent({
179
+ hasEdit: true,
180
+ isEditing: true,
181
+ rowId: 1,
182
+ setIsEditingPk
183
+ });
184
+
185
+ fireEvent.click(screen.getByTestId('button-edit'));
186
+
187
+ expect(setIsEditingPk).toHaveBeenCalledWith(IS_EDITING_INITIAL_VALUE);
188
+ });
189
+
190
+ it('should pass correct rowId to setIsEditingPk', () => {
191
+ const setIsEditingPk = vi.fn();
192
+ renderComponent({
193
+ hasEdit: true,
194
+ isEditing: false,
195
+ rowId: 'custom-id',
196
+ setIsEditingPk
197
+ });
198
+
199
+ fireEvent.click(screen.getByTestId('button-edit'));
200
+
201
+ expect(setIsEditingPk).toHaveBeenCalledWith('custom-id');
202
+ });
203
+
204
+ it('should have proper styles for edit button', () => {
205
+ renderComponent({ hasEdit: true });
206
+
207
+ const button = screen.getByTestId('button-edit');
208
+ expect(button).toHaveClass('border');
209
+ expect(button).toHaveClass('border-ebonyClay-200');
210
+ expect(button).toHaveClass('bg-ebonyClay-400');
211
+ expect(button).toHaveClass('h-7');
212
+ });
213
+
214
+ it('should have correct icon for edit button', () => {
215
+ renderComponent({ hasEdit: true });
216
+
217
+ const button = screen.getByTestId('button-edit');
218
+ expect(button).toHaveAttribute('data-icon', 'edit');
219
+ });
220
+
221
+ it('should have correct icon for selection button', () => {
222
+ renderComponent();
223
+
224
+ const button = screen.getByTestId('button-katalogkontrol');
225
+ expect(button).toHaveAttribute('data-icon', 'katalogkontrol');
226
+ });
227
+ });
228
+
229
+ describe('Event Handling', () => {
230
+ it('should stop event propagation on selection button click', () => {
231
+ const onToggleSelection = vi.fn();
232
+
233
+ renderComponent({ onToggleSelection });
234
+
235
+ const button = screen.getByTestId('button-katalogkontrol');
236
+ fireEvent.click(button);
237
+
238
+ // Event propagation should be stopped (via fireEvent behavior)
239
+ expect(onToggleSelection).toHaveBeenCalled();
240
+ });
241
+
242
+ it('should only call onToggleSelection, not setIsEditingPk on selection button click', () => {
243
+ const onToggleSelection = vi.fn();
244
+ const setIsEditingPk = vi.fn();
245
+ renderComponent({ onToggleSelection, setIsEditingPk, hasEdit: true });
246
+
247
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
248
+
249
+ expect(onToggleSelection).toHaveBeenCalledTimes(1);
250
+ expect(setIsEditingPk).not.toHaveBeenCalled();
251
+ });
252
+ });
253
+
254
+ describe('Multiple Row IDs', () => {
255
+ it('should handle numeric rowId', () => {
256
+ const onToggleSelection = vi.fn();
257
+ renderComponent({ rowId: 42, onToggleSelection });
258
+
259
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
260
+
261
+ expect(onToggleSelection).toHaveBeenCalledWith(42);
262
+ });
263
+
264
+ it('should handle string rowId', () => {
265
+ const onToggleSelection = vi.fn();
266
+ renderComponent({ rowId: 'row-uuid-123', onToggleSelection });
267
+
268
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
269
+
270
+ expect(onToggleSelection).toHaveBeenCalledWith('row-uuid-123');
271
+ });
272
+
273
+ it('should handle rowId in edit button click', () => {
274
+ const setIsEditingPk = vi.fn();
275
+ renderComponent({
276
+ rowId: 'uuid-edit',
277
+ hasEdit: true,
278
+ isEditing: false,
279
+ setIsEditingPk
280
+ });
281
+
282
+ fireEvent.click(screen.getByTestId('button-edit'));
283
+
284
+ expect(setIsEditingPk).toHaveBeenCalledWith('uuid-edit');
285
+ });
286
+ });
287
+
288
+ describe('Custom Action Buttons', () => {
289
+ it('should call customActionButtons with correct rowId', () => {
290
+ const customActionButtons = vi.fn(() => (
291
+ <div data-testid="custom">Custom</div>
292
+ ));
293
+ renderComponent({ customActionButtons, rowId: 'test-row' });
294
+
295
+ expect(customActionButtons).toHaveBeenCalledWith('test-row');
296
+ });
297
+
298
+ it('should render custom buttons before edit button when both exist', () => {
299
+ const customActionButtons = vi.fn(() => (
300
+ <button data-testid="custom-btn">Custom</button>
301
+ ));
302
+ renderComponent({ customActionButtons, hasEdit: true });
303
+
304
+ const customBtn = screen.getByTestId('custom-btn');
305
+ const editBtn = screen.getByTestId('button-edit');
306
+
307
+ expect(customBtn).toBeInTheDocument();
308
+ expect(editBtn).toBeInTheDocument();
309
+
310
+ // Custom button should come before edit button in DOM
311
+ expect(customBtn.compareDocumentPosition(editBtn)).toBe(
312
+ Node.DOCUMENT_POSITION_FOLLOWING
313
+ );
314
+ });
315
+
316
+ it('should not break when customActionButtons returns null', () => {
317
+ const customActionButtons = vi.fn(() => null);
318
+ renderComponent({ customActionButtons });
319
+
320
+ expect(screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
321
+ });
322
+ });
323
+
324
+ describe('Editing State', () => {
325
+ it('should toggle editing state on edit button click', () => {
326
+ const setIsEditingPk = vi.fn();
327
+ const { rerender } = renderComponent({
328
+ hasEdit: true,
329
+ isEditing: false,
330
+ rowId: 1,
331
+ setIsEditingPk
332
+ });
333
+
334
+ fireEvent.click(screen.getByTestId('button-edit'));
335
+ expect(setIsEditingPk).toHaveBeenCalledWith(1);
336
+
337
+ // Simulate editing state change
338
+ rerender(
339
+ <ActionButtons
340
+ {...defaultProps}
341
+ hasEdit={true}
342
+ isEditing={true}
343
+ rowId={1}
344
+ setIsEditingPk={setIsEditingPk}
345
+ />
346
+ );
347
+
348
+ // Click again to exit editing
349
+ setIsEditingPk.mockClear();
350
+ fireEvent.click(screen.getByTestId('button-edit'));
351
+ expect(setIsEditingPk).toHaveBeenCalledWith(IS_EDITING_INITIAL_VALUE);
352
+ });
353
+ });
354
+
355
+ describe('Integration Tests', () => {
356
+ it('should handle all button interactions together', () => {
357
+ const setIsEditingPk = vi.fn();
358
+ const onToggleSelection = vi.fn();
359
+ const customActionButtons = vi.fn(() => (
360
+ <button data-testid="custom">Custom</button>
361
+ ));
362
+
363
+ renderComponent({
364
+ hasEdit: true,
365
+ isEditing: false,
366
+ isSelected: false,
367
+ rowId: 'integration-test',
368
+ setIsEditingPk,
369
+ onToggleSelection,
370
+ customActionButtons
371
+ });
372
+
373
+ // Click custom button
374
+ fireEvent.click(screen.getByTestId('custom'));
375
+
376
+ // Click edit button
377
+ fireEvent.click(screen.getByTestId('button-edit'));
378
+ expect(setIsEditingPk).toHaveBeenCalledWith('integration-test');
379
+
380
+ // Click selection button
381
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
382
+ expect(onToggleSelection).toHaveBeenCalledWith('integration-test');
383
+
384
+ // Verify all callbacks were called correctly
385
+ expect(setIsEditingPk).toHaveBeenCalledTimes(1);
386
+ expect(onToggleSelection).toHaveBeenCalledTimes(1);
387
+ });
388
+
389
+ it('should render correctly with all features enabled', () => {
390
+ const customActionButtons = vi.fn(() => (
391
+ <button data-testid="custom">Action</button>
392
+ ));
393
+
394
+ renderComponent({
395
+ hasEdit: true,
396
+ isEditing: false,
397
+ isSelected: true,
398
+ customActionButtons
399
+ });
400
+
401
+ expect(screen.getByTestId('custom')).toBeInTheDocument();
402
+ expect(screen.getByTestId('button-edit')).toBeInTheDocument();
403
+ expect(screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
404
+ expect(screen.getByTestId('button-katalogkontrol')).toHaveClass(
405
+ 'bg-green-600'
406
+ );
407
+ });
408
+
409
+ it('should render correctly with minimal features', () => {
410
+ renderComponent({
411
+ hasEdit: false,
412
+ customActionButtons: undefined
413
+ });
414
+
415
+ expect(screen.queryByTestId('button-edit')).not.toBeInTheDocument();
416
+ expect(screen.queryByTestId('custom')).not.toBeInTheDocument();
417
+ expect(screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
418
+ });
419
+ });
420
+
421
+ describe('Styling', () => {
422
+ it('should apply correct button size class', () => {
423
+ renderComponent({ hasEdit: true });
424
+
425
+ const editBtn = screen.getByTestId('button-edit');
426
+ const selectionBtn = screen.getByTestId('button-katalogkontrol');
427
+
428
+ expect(editBtn).toHaveClass('h-7');
429
+ expect(selectionBtn).toHaveClass('h-7');
430
+ });
431
+
432
+ it('should apply correct border classes', () => {
433
+ renderComponent({ hasEdit: true });
434
+
435
+ const editBtn = screen.getByTestId('button-edit');
436
+ const selectionBtn = screen.getByTestId('button-katalogkontrol');
437
+
438
+ expect(editBtn).toHaveClass('border', 'border-ebonyClay-200');
439
+ expect(selectionBtn).toHaveClass('border', 'border-ebonyClay-200');
440
+ });
441
+
442
+ it('should apply background color correctly', () => {
443
+ renderComponent({ hasEdit: true, isSelected: false });
444
+
445
+ const editBtn = screen.getByTestId('button-edit');
446
+ const selectionBtn = screen.getByTestId('button-katalogkontrol');
447
+
448
+ expect(editBtn).toHaveClass('bg-ebonyClay-400');
449
+ expect(selectionBtn).toHaveClass('bg-ebonyClay-400');
450
+ });
451
+
452
+ it('should override background when selected', () => {
453
+ renderComponent({ isSelected: true });
454
+
455
+ const selectionBtn = screen.getByTestId('button-katalogkontrol');
456
+ expect(selectionBtn).toHaveClass('bg-green-600');
457
+ expect(selectionBtn).toHaveClass('border-green-600');
458
+ });
459
+ });
460
+
461
+ describe('Props Combinations', () => {
462
+ it('should handle edit=true, select=true combination', () => {
463
+ renderComponent({ hasEdit: true, isSelected: true });
464
+
465
+ expect(screen.getByTestId('button-edit')).toHaveClass('bg-ebonyClay-400');
466
+ expect(screen.getByTestId('button-katalogkontrol')).toHaveClass(
467
+ 'bg-green-600'
468
+ );
469
+ });
470
+
471
+ it('should handle edit=true, editing=true combination', () => {
472
+ const setIsEditingPk = vi.fn();
473
+ renderComponent({
474
+ hasEdit: true,
475
+ isEditing: true,
476
+ setIsEditingPk
477
+ });
478
+
479
+ fireEvent.click(screen.getByTestId('button-edit'));
480
+ expect(setIsEditingPk).toHaveBeenCalledWith(IS_EDITING_INITIAL_VALUE);
481
+ });
482
+
483
+ it('should handle custom, edit, and select all together', () => {
484
+ const onToggleSelection = vi.fn();
485
+ const setIsEditingPk = vi.fn();
486
+ const customActionButtons = vi.fn(() => (
487
+ <button data-testid="custom">Custom</button>
488
+ ));
489
+
490
+ renderComponent({
491
+ hasEdit: true,
492
+ isEditing: false,
493
+ isSelected: false,
494
+ onToggleSelection,
495
+ setIsEditingPk,
496
+ customActionButtons
497
+ });
498
+
499
+ fireEvent.click(screen.getByTestId('custom'));
500
+ fireEvent.click(screen.getByTestId('button-edit'));
501
+ fireEvent.click(screen.getByTestId('button-katalogkontrol'));
502
+
503
+ expect(setIsEditingPk).toHaveBeenCalledWith(expect.anything());
504
+ expect(onToggleSelection).toHaveBeenCalledWith(expect.anything());
505
+ });
506
+ });
507
+ });
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import type { TableBaseProps } from '../../types';
3
+ interface TableContentProps extends Omit<TableBaseProps, 'onChangeSelectedRows' | 'filters' | 'rowKey'> {
4
+ onToggleSelection: (rowId: number | string) => void;
5
+ expandedRows: Array<number | string>;
6
+ onToggleExpand: (rowId: number | string) => void;
7
+ rowKey: string;
8
+ }
9
+ export declare const TableContent: ({ columns, customActionButtons, data, editDataIndexes, expandedRows, onEdit, onToggleExpand, onToggleSelection, rowKey, selectedRows, mapperConfig }: TableContentProps) => React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/content.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAA8B,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ9E,UAAU,iBACR,SAAQ,IAAI,CAAC,cAAc,EAAE,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3E,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,GAAI,sJAY1B,iBAAiB,sBAihBnB,CAAC"}