@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,382 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ require("@testing-library/jest-dom/vitest");
15
+ const react_1 = require("@testing-library/react");
16
+ const react_2 = require("react");
17
+ const vitest_1 = require("vitest");
18
+ const constants_1 = require("../../constants");
19
+ const row_actions_1 = require("../row-actions");
20
+ vitest_1.vi.mock('@akinon/ui-button', () => ({
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ Button: (_a) => {
23
+ var { children, icon, onClick, className, disabled } = _a, props = __rest(_a, ["children", "icon", "onClick", "className", "disabled"]);
24
+ return (react_2.default.createElement("button", Object.assign({ onClick: onClick, className: className, disabled: disabled, "data-testid": `button-${icon}`, "data-icon": icon }, props), children));
25
+ }
26
+ }));
27
+ vitest_1.vi.mock('@akinon/ui-layout', () => ({
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ Flex: (_a) => {
30
+ var { children } = _a, props = __rest(_a, ["children"]);
31
+ return (react_2.default.createElement("div", Object.assign({ "data-testid": "flex" }, props), children));
32
+ }
33
+ }));
34
+ vitest_1.vi.mock('@akinon/ui-theme', () => ({
35
+ useToken: () => ({
36
+ token: { colorBorder: '#ccc' },
37
+ hashId: 'hash-id'
38
+ }),
39
+ getPrefixCls: vitest_1.vi.fn(cls => `ant-${cls}`)
40
+ }));
41
+ vitest_1.vi.mock('@ant-design/cssinjs', () => ({
42
+ useStyleRegister: vitest_1.vi.fn((_config, cb) => {
43
+ cb();
44
+ return (node) => node;
45
+ })
46
+ }));
47
+ (0, vitest_1.describe)('ActionButtons', () => {
48
+ const defaultProps = {
49
+ hasEdit: false,
50
+ isEditing: false,
51
+ isSelected: false,
52
+ rowId: 1,
53
+ setIsEditingPk: vitest_1.vi.fn(),
54
+ onToggleSelection: vitest_1.vi.fn(),
55
+ customActionButtons: undefined
56
+ };
57
+ (0, vitest_1.beforeEach)(() => {
58
+ vitest_1.vi.clearAllMocks();
59
+ });
60
+ const renderComponent = (props = {}) => {
61
+ return (0, react_1.render)(react_2.default.createElement(row_actions_1.ActionButtons, Object.assign({}, defaultProps, props)));
62
+ };
63
+ (0, vitest_1.describe)('Rendering', () => {
64
+ (0, vitest_1.it)('should render flex container', () => {
65
+ renderComponent();
66
+ (0, vitest_1.expect)(react_1.screen.getByTestId('flex')).toBeInTheDocument();
67
+ });
68
+ (0, vitest_1.it)('should always render selection button', () => {
69
+ renderComponent();
70
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
71
+ });
72
+ (0, vitest_1.it)('should render edit button when hasEdit is true', () => {
73
+ renderComponent({ hasEdit: true });
74
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-edit')).toBeInTheDocument();
75
+ });
76
+ (0, vitest_1.it)('should not render edit button when hasEdit is false', () => {
77
+ renderComponent({ hasEdit: false });
78
+ (0, vitest_1.expect)(react_1.screen.queryByTestId('button-edit')).not.toBeInTheDocument();
79
+ });
80
+ (0, vitest_1.it)('should render custom action buttons when provided', () => {
81
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("div", { "data-testid": "custom-button" }, "Custom Action")));
82
+ renderComponent({ customActionButtons });
83
+ (0, vitest_1.expect)(react_1.screen.getByTestId('custom-button')).toBeInTheDocument();
84
+ (0, vitest_1.expect)(customActionButtons).toHaveBeenCalledWith(1);
85
+ });
86
+ (0, vitest_1.it)('should not render custom action buttons when not provided', () => {
87
+ renderComponent({ customActionButtons: undefined });
88
+ (0, vitest_1.expect)(react_1.screen.queryByTestId('custom-button')).not.toBeInTheDocument();
89
+ });
90
+ (0, vitest_1.it)('should render multiple buttons in correct order', () => {
91
+ renderComponent({ hasEdit: true });
92
+ const buttons = react_1.screen.getAllByRole('button');
93
+ // Should have edit button and selection button
94
+ (0, vitest_1.expect)(buttons.length).toBeGreaterThanOrEqual(2);
95
+ });
96
+ });
97
+ (0, vitest_1.describe)('Selection Button', () => {
98
+ (0, vitest_1.it)('should call onToggleSelection when selection button is clicked', () => {
99
+ const onToggleSelection = vitest_1.vi.fn();
100
+ renderComponent({ onToggleSelection, rowId: 1 });
101
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
102
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith(1);
103
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledTimes(1);
104
+ });
105
+ (0, vitest_1.it)('should pass correct rowId to onToggleSelection', () => {
106
+ const onToggleSelection = vitest_1.vi.fn();
107
+ renderComponent({ onToggleSelection, rowId: 'custom-id' });
108
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
109
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith('custom-id');
110
+ });
111
+ (0, vitest_1.it)('should apply selected styles when isSelected is true', () => {
112
+ renderComponent({ isSelected: true });
113
+ const button = react_1.screen.getByTestId('button-katalogkontrol');
114
+ (0, vitest_1.expect)(button).toHaveClass('bg-green-600');
115
+ (0, vitest_1.expect)(button).toHaveClass('border-green-600');
116
+ });
117
+ (0, vitest_1.it)('should not apply selected styles when isSelected is false', () => {
118
+ renderComponent({ isSelected: false });
119
+ const button = react_1.screen.getByTestId('button-katalogkontrol');
120
+ (0, vitest_1.expect)(button).not.toHaveClass('bg-green-600');
121
+ (0, vitest_1.expect)(button).not.toHaveClass('border-green-600');
122
+ });
123
+ (0, vitest_1.it)('should have proper default styles for selection button', () => {
124
+ renderComponent({ isSelected: false });
125
+ const button = react_1.screen.getByTestId('button-katalogkontrol');
126
+ (0, vitest_1.expect)(button).toHaveClass('border');
127
+ (0, vitest_1.expect)(button).toHaveClass('border-ebonyClay-200');
128
+ (0, vitest_1.expect)(button).toHaveClass('bg-ebonyClay-400');
129
+ (0, vitest_1.expect)(button).toHaveClass('h-7');
130
+ });
131
+ });
132
+ (0, vitest_1.describe)('Edit Button', () => {
133
+ (0, vitest_1.it)('should call setIsEditingPk with rowId when edit button is clicked and not editing', () => {
134
+ const setIsEditingPk = vitest_1.vi.fn();
135
+ renderComponent({
136
+ hasEdit: true,
137
+ isEditing: false,
138
+ rowId: 1,
139
+ setIsEditingPk
140
+ });
141
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
142
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(1);
143
+ });
144
+ (0, vitest_1.it)('should call setIsEditingPk with IS_EDITING_INITIAL_VALUE when edit button is clicked and already editing', () => {
145
+ const setIsEditingPk = vitest_1.vi.fn();
146
+ renderComponent({
147
+ hasEdit: true,
148
+ isEditing: true,
149
+ rowId: 1,
150
+ setIsEditingPk
151
+ });
152
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
153
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(constants_1.IS_EDITING_INITIAL_VALUE);
154
+ });
155
+ (0, vitest_1.it)('should pass correct rowId to setIsEditingPk', () => {
156
+ const setIsEditingPk = vitest_1.vi.fn();
157
+ renderComponent({
158
+ hasEdit: true,
159
+ isEditing: false,
160
+ rowId: 'custom-id',
161
+ setIsEditingPk
162
+ });
163
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
164
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith('custom-id');
165
+ });
166
+ (0, vitest_1.it)('should have proper styles for edit button', () => {
167
+ renderComponent({ hasEdit: true });
168
+ const button = react_1.screen.getByTestId('button-edit');
169
+ (0, vitest_1.expect)(button).toHaveClass('border');
170
+ (0, vitest_1.expect)(button).toHaveClass('border-ebonyClay-200');
171
+ (0, vitest_1.expect)(button).toHaveClass('bg-ebonyClay-400');
172
+ (0, vitest_1.expect)(button).toHaveClass('h-7');
173
+ });
174
+ (0, vitest_1.it)('should have correct icon for edit button', () => {
175
+ renderComponent({ hasEdit: true });
176
+ const button = react_1.screen.getByTestId('button-edit');
177
+ (0, vitest_1.expect)(button).toHaveAttribute('data-icon', 'edit');
178
+ });
179
+ (0, vitest_1.it)('should have correct icon for selection button', () => {
180
+ renderComponent();
181
+ const button = react_1.screen.getByTestId('button-katalogkontrol');
182
+ (0, vitest_1.expect)(button).toHaveAttribute('data-icon', 'katalogkontrol');
183
+ });
184
+ });
185
+ (0, vitest_1.describe)('Event Handling', () => {
186
+ (0, vitest_1.it)('should stop event propagation on selection button click', () => {
187
+ const onToggleSelection = vitest_1.vi.fn();
188
+ renderComponent({ onToggleSelection });
189
+ const button = react_1.screen.getByTestId('button-katalogkontrol');
190
+ react_1.fireEvent.click(button);
191
+ // Event propagation should be stopped (via fireEvent behavior)
192
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalled();
193
+ });
194
+ (0, vitest_1.it)('should only call onToggleSelection, not setIsEditingPk on selection button click', () => {
195
+ const onToggleSelection = vitest_1.vi.fn();
196
+ const setIsEditingPk = vitest_1.vi.fn();
197
+ renderComponent({ onToggleSelection, setIsEditingPk, hasEdit: true });
198
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
199
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledTimes(1);
200
+ (0, vitest_1.expect)(setIsEditingPk).not.toHaveBeenCalled();
201
+ });
202
+ });
203
+ (0, vitest_1.describe)('Multiple Row IDs', () => {
204
+ (0, vitest_1.it)('should handle numeric rowId', () => {
205
+ const onToggleSelection = vitest_1.vi.fn();
206
+ renderComponent({ rowId: 42, onToggleSelection });
207
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
208
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith(42);
209
+ });
210
+ (0, vitest_1.it)('should handle string rowId', () => {
211
+ const onToggleSelection = vitest_1.vi.fn();
212
+ renderComponent({ rowId: 'row-uuid-123', onToggleSelection });
213
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
214
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith('row-uuid-123');
215
+ });
216
+ (0, vitest_1.it)('should handle rowId in edit button click', () => {
217
+ const setIsEditingPk = vitest_1.vi.fn();
218
+ renderComponent({
219
+ rowId: 'uuid-edit',
220
+ hasEdit: true,
221
+ isEditing: false,
222
+ setIsEditingPk
223
+ });
224
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
225
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith('uuid-edit');
226
+ });
227
+ });
228
+ (0, vitest_1.describe)('Custom Action Buttons', () => {
229
+ (0, vitest_1.it)('should call customActionButtons with correct rowId', () => {
230
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("div", { "data-testid": "custom" }, "Custom")));
231
+ renderComponent({ customActionButtons, rowId: 'test-row' });
232
+ (0, vitest_1.expect)(customActionButtons).toHaveBeenCalledWith('test-row');
233
+ });
234
+ (0, vitest_1.it)('should render custom buttons before edit button when both exist', () => {
235
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("button", { "data-testid": "custom-btn" }, "Custom")));
236
+ renderComponent({ customActionButtons, hasEdit: true });
237
+ const customBtn = react_1.screen.getByTestId('custom-btn');
238
+ const editBtn = react_1.screen.getByTestId('button-edit');
239
+ (0, vitest_1.expect)(customBtn).toBeInTheDocument();
240
+ (0, vitest_1.expect)(editBtn).toBeInTheDocument();
241
+ // Custom button should come before edit button in DOM
242
+ (0, vitest_1.expect)(customBtn.compareDocumentPosition(editBtn)).toBe(Node.DOCUMENT_POSITION_FOLLOWING);
243
+ });
244
+ (0, vitest_1.it)('should not break when customActionButtons returns null', () => {
245
+ const customActionButtons = vitest_1.vi.fn(() => null);
246
+ renderComponent({ customActionButtons });
247
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
248
+ });
249
+ });
250
+ (0, vitest_1.describe)('Editing State', () => {
251
+ (0, vitest_1.it)('should toggle editing state on edit button click', () => {
252
+ const setIsEditingPk = vitest_1.vi.fn();
253
+ const { rerender } = renderComponent({
254
+ hasEdit: true,
255
+ isEditing: false,
256
+ rowId: 1,
257
+ setIsEditingPk
258
+ });
259
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
260
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(1);
261
+ // Simulate editing state change
262
+ rerender(react_2.default.createElement(row_actions_1.ActionButtons, Object.assign({}, defaultProps, { hasEdit: true, isEditing: true, rowId: 1, setIsEditingPk: setIsEditingPk })));
263
+ // Click again to exit editing
264
+ setIsEditingPk.mockClear();
265
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
266
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(constants_1.IS_EDITING_INITIAL_VALUE);
267
+ });
268
+ });
269
+ (0, vitest_1.describe)('Integration Tests', () => {
270
+ (0, vitest_1.it)('should handle all button interactions together', () => {
271
+ const setIsEditingPk = vitest_1.vi.fn();
272
+ const onToggleSelection = vitest_1.vi.fn();
273
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("button", { "data-testid": "custom" }, "Custom")));
274
+ renderComponent({
275
+ hasEdit: true,
276
+ isEditing: false,
277
+ isSelected: false,
278
+ rowId: 'integration-test',
279
+ setIsEditingPk,
280
+ onToggleSelection,
281
+ customActionButtons
282
+ });
283
+ // Click custom button
284
+ react_1.fireEvent.click(react_1.screen.getByTestId('custom'));
285
+ // Click edit button
286
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
287
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith('integration-test');
288
+ // Click selection button
289
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
290
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith('integration-test');
291
+ // Verify all callbacks were called correctly
292
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledTimes(1);
293
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledTimes(1);
294
+ });
295
+ (0, vitest_1.it)('should render correctly with all features enabled', () => {
296
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("button", { "data-testid": "custom" }, "Action")));
297
+ renderComponent({
298
+ hasEdit: true,
299
+ isEditing: false,
300
+ isSelected: true,
301
+ customActionButtons
302
+ });
303
+ (0, vitest_1.expect)(react_1.screen.getByTestId('custom')).toBeInTheDocument();
304
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-edit')).toBeInTheDocument();
305
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
306
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toHaveClass('bg-green-600');
307
+ });
308
+ (0, vitest_1.it)('should render correctly with minimal features', () => {
309
+ renderComponent({
310
+ hasEdit: false,
311
+ customActionButtons: undefined
312
+ });
313
+ (0, vitest_1.expect)(react_1.screen.queryByTestId('button-edit')).not.toBeInTheDocument();
314
+ (0, vitest_1.expect)(react_1.screen.queryByTestId('custom')).not.toBeInTheDocument();
315
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toBeInTheDocument();
316
+ });
317
+ });
318
+ (0, vitest_1.describe)('Styling', () => {
319
+ (0, vitest_1.it)('should apply correct button size class', () => {
320
+ renderComponent({ hasEdit: true });
321
+ const editBtn = react_1.screen.getByTestId('button-edit');
322
+ const selectionBtn = react_1.screen.getByTestId('button-katalogkontrol');
323
+ (0, vitest_1.expect)(editBtn).toHaveClass('h-7');
324
+ (0, vitest_1.expect)(selectionBtn).toHaveClass('h-7');
325
+ });
326
+ (0, vitest_1.it)('should apply correct border classes', () => {
327
+ renderComponent({ hasEdit: true });
328
+ const editBtn = react_1.screen.getByTestId('button-edit');
329
+ const selectionBtn = react_1.screen.getByTestId('button-katalogkontrol');
330
+ (0, vitest_1.expect)(editBtn).toHaveClass('border', 'border-ebonyClay-200');
331
+ (0, vitest_1.expect)(selectionBtn).toHaveClass('border', 'border-ebonyClay-200');
332
+ });
333
+ (0, vitest_1.it)('should apply background color correctly', () => {
334
+ renderComponent({ hasEdit: true, isSelected: false });
335
+ const editBtn = react_1.screen.getByTestId('button-edit');
336
+ const selectionBtn = react_1.screen.getByTestId('button-katalogkontrol');
337
+ (0, vitest_1.expect)(editBtn).toHaveClass('bg-ebonyClay-400');
338
+ (0, vitest_1.expect)(selectionBtn).toHaveClass('bg-ebonyClay-400');
339
+ });
340
+ (0, vitest_1.it)('should override background when selected', () => {
341
+ renderComponent({ isSelected: true });
342
+ const selectionBtn = react_1.screen.getByTestId('button-katalogkontrol');
343
+ (0, vitest_1.expect)(selectionBtn).toHaveClass('bg-green-600');
344
+ (0, vitest_1.expect)(selectionBtn).toHaveClass('border-green-600');
345
+ });
346
+ });
347
+ (0, vitest_1.describe)('Props Combinations', () => {
348
+ (0, vitest_1.it)('should handle edit=true, select=true combination', () => {
349
+ renderComponent({ hasEdit: true, isSelected: true });
350
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-edit')).toHaveClass('bg-ebonyClay-400');
351
+ (0, vitest_1.expect)(react_1.screen.getByTestId('button-katalogkontrol')).toHaveClass('bg-green-600');
352
+ });
353
+ (0, vitest_1.it)('should handle edit=true, editing=true combination', () => {
354
+ const setIsEditingPk = vitest_1.vi.fn();
355
+ renderComponent({
356
+ hasEdit: true,
357
+ isEditing: true,
358
+ setIsEditingPk
359
+ });
360
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
361
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(constants_1.IS_EDITING_INITIAL_VALUE);
362
+ });
363
+ (0, vitest_1.it)('should handle custom, edit, and select all together', () => {
364
+ const onToggleSelection = vitest_1.vi.fn();
365
+ const setIsEditingPk = vitest_1.vi.fn();
366
+ const customActionButtons = vitest_1.vi.fn(() => (react_2.default.createElement("button", { "data-testid": "custom" }, "Custom")));
367
+ renderComponent({
368
+ hasEdit: true,
369
+ isEditing: false,
370
+ isSelected: false,
371
+ onToggleSelection,
372
+ setIsEditingPk,
373
+ customActionButtons
374
+ });
375
+ react_1.fireEvent.click(react_1.screen.getByTestId('custom'));
376
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-edit'));
377
+ react_1.fireEvent.click(react_1.screen.getByTestId('button-katalogkontrol'));
378
+ (0, vitest_1.expect)(setIsEditingPk).toHaveBeenCalledWith(vitest_1.expect.anything());
379
+ (0, vitest_1.expect)(onToggleSelection).toHaveBeenCalledWith(vitest_1.expect.anything());
380
+ });
381
+ });
382
+ });