feffery_antd_components 0.4.4 → 0.4.5

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 (590) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +121 -0
  3. package/.github/FUNDING.yml +1 -0
  4. package/.github/workflows/test.yml +86 -0
  5. package/.prettierrc +6 -0
  6. package/.pylintrc +556 -0
  7. package/.pytest_cache/README.md +8 -0
  8. package/DESCRIPTION +4 -4
  9. package/LICENSE +1 -1
  10. package/NAMESPACE +110 -110
  11. package/Project.toml +1 -1
  12. package/README-en_US.md +4 -4
  13. package/README.md +6 -6
  14. package/feffery_antd_components/AntdAccordion.py +136 -108
  15. package/feffery_antd_components/AntdAffix.py +57 -33
  16. package/feffery_antd_components/AntdAlert.py +76 -44
  17. package/feffery_antd_components/AntdAnchor.py +84 -48
  18. package/feffery_antd_components/AntdAvatar.py +110 -70
  19. package/feffery_antd_components/AntdAvatarGroup.py +96 -74
  20. package/feffery_antd_components/AntdBackTop.py +57 -33
  21. package/feffery_antd_components/AntdBadge.py +111 -79
  22. package/feffery_antd_components/AntdBreadcrumb.py +120 -100
  23. package/feffery_antd_components/AntdButton.py +176 -101
  24. package/feffery_antd_components/AntdCalendar.py +119 -85
  25. package/feffery_antd_components/AntdCard.py +169 -131
  26. package/feffery_antd_components/AntdCardGrid.py +49 -29
  27. package/feffery_antd_components/AntdCardMeta.py +49 -29
  28. package/feffery_antd_components/AntdCarousel.py +96 -61
  29. package/feffery_antd_components/AntdCascader.py +207 -112
  30. package/feffery_antd_components/AntdCenter.py +49 -29
  31. package/feffery_antd_components/AntdCheckCard.py +93 -53
  32. package/feffery_antd_components/AntdCheckCardGroup.py +107 -57
  33. package/feffery_antd_components/AntdCheckableTag.py +53 -31
  34. package/feffery_antd_components/AntdCheckbox.py +92 -52
  35. package/feffery_antd_components/AntdCheckboxGroup.py +98 -62
  36. package/feffery_antd_components/AntdCol.py +209 -169
  37. package/feffery_antd_components/AntdCollapse.py +112 -82
  38. package/feffery_antd_components/AntdColorPicker.py +139 -90
  39. package/feffery_antd_components/AntdComment.py +152 -101
  40. package/feffery_antd_components/AntdCompact.py +50 -30
  41. package/feffery_antd_components/AntdConfigProvider.py +105 -82
  42. package/feffery_antd_components/AntdContent.py +32 -24
  43. package/feffery_antd_components/AntdCopyText.py +64 -38
  44. package/feffery_antd_components/AntdCountdown.py +79 -52
  45. package/feffery_antd_components/AntdCountup.py +70 -40
  46. package/feffery_antd_components/AntdCustomSkeleton.py +76 -44
  47. package/feffery_antd_components/AntdDatePicker.py +276 -184
  48. package/feffery_antd_components/AntdDateRangePicker.py +276 -180
  49. package/feffery_antd_components/AntdDescriptionItem.py +71 -59
  50. package/feffery_antd_components/AntdDescriptions.py +162 -128
  51. package/feffery_antd_components/AntdDivider.py +94 -54
  52. package/feffery_antd_components/AntdDraggerUpload.py +305 -227
  53. package/feffery_antd_components/AntdDrawer.py +158 -104
  54. package/feffery_antd_components/AntdDropdown.py +215 -137
  55. package/feffery_antd_components/AntdEmpty.py +98 -72
  56. package/feffery_antd_components/AntdFlex.py +68 -38
  57. package/feffery_antd_components/AntdFloatButton.py +101 -56
  58. package/feffery_antd_components/AntdFloatButtonGroup.py +107 -60
  59. package/feffery_antd_components/AntdFooter.py +32 -24
  60. package/feffery_antd_components/AntdForm.py +121 -79
  61. package/feffery_antd_components/AntdFormItem.py +127 -83
  62. package/feffery_antd_components/AntdFormRender.py +618 -543
  63. package/feffery_antd_components/AntdHappyProvider.py +19 -19
  64. package/feffery_antd_components/AntdHeader.py +32 -24
  65. package/feffery_antd_components/AntdIcon.py +59 -35
  66. package/feffery_antd_components/AntdImage.py +113 -77
  67. package/feffery_antd_components/AntdImageGroup.py +104 -72
  68. package/feffery_antd_components/AntdInput.py +246 -160
  69. package/feffery_antd_components/AntdInputNumber.py +168 -92
  70. package/feffery_antd_components/AntdLayout.py +32 -24
  71. package/feffery_antd_components/AntdMentions.py +132 -91
  72. package/feffery_antd_components/AntdMenu.py +153 -89
  73. package/feffery_antd_components/AntdMessage.py +60 -36
  74. package/feffery_antd_components/AntdModal.py +311 -213
  75. package/feffery_antd_components/AntdNotification.py +108 -77
  76. package/feffery_antd_components/AntdOTP.py +95 -55
  77. package/feffery_antd_components/AntdPageHeader.py +65 -37
  78. package/feffery_antd_components/AntdPagination.py +136 -76
  79. package/feffery_antd_components/AntdParagraph.py +105 -67
  80. package/feffery_antd_components/AntdPictureUpload.py +333 -258
  81. package/feffery_antd_components/AntdPopconfirm.py +249 -175
  82. package/feffery_antd_components/AntdPopover.py +140 -86
  83. package/feffery_antd_components/AntdPopupCard.py +162 -102
  84. package/feffery_antd_components/AntdProgress.py +183 -147
  85. package/feffery_antd_components/AntdQRCode.py +104 -66
  86. package/feffery_antd_components/AntdRadioGroup.py +128 -80
  87. package/feffery_antd_components/AntdRate.py +100 -56
  88. package/feffery_antd_components/AntdResult.py +61 -35
  89. package/feffery_antd_components/AntdRibbon.py +54 -32
  90. package/feffery_antd_components/AntdRow.py +87 -59
  91. package/feffery_antd_components/AntdSegmented.py +131 -89
  92. package/feffery_antd_components/AntdSegmentedColoring.py +143 -86
  93. package/feffery_antd_components/AntdSelect.py +300 -168
  94. package/feffery_antd_components/AntdSider.py +75 -43
  95. package/feffery_antd_components/AntdSkeleton.py +125 -88
  96. package/feffery_antd_components/AntdSkeletonAvatar.py +54 -32
  97. package/feffery_antd_components/AntdSkeletonButton.py +55 -33
  98. package/feffery_antd_components/AntdSkeletonImage.py +21 -21
  99. package/feffery_antd_components/AntdSkeletonInput.py +36 -27
  100. package/feffery_antd_components/AntdSlider.py +191 -129
  101. package/feffery_antd_components/AntdSpace.py +87 -65
  102. package/feffery_antd_components/AntdSpin.py +98 -56
  103. package/feffery_antd_components/AntdSplitter.py +91 -76
  104. package/feffery_antd_components/AntdSpoiler.py +80 -46
  105. package/feffery_antd_components/AntdStatistic.py +86 -54
  106. package/feffery_antd_components/AntdSteps.py +117 -77
  107. package/feffery_antd_components/AntdSwitch.py +118 -72
  108. package/feffery_antd_components/AntdTable.py +1215 -938
  109. package/feffery_antd_components/AntdTabs.py +225 -156
  110. package/feffery_antd_components/AntdTag.py +69 -39
  111. package/feffery_antd_components/AntdText.py +97 -62
  112. package/feffery_antd_components/AntdTimePicker.py +198 -116
  113. package/feffery_antd_components/AntdTimeRangePicker.py +179 -99
  114. package/feffery_antd_components/AntdTimeline.py +86 -57
  115. package/feffery_antd_components/AntdTitle.py +92 -52
  116. package/feffery_antd_components/AntdTooltip.py +142 -99
  117. package/feffery_antd_components/AntdTour.py +186 -144
  118. package/feffery_antd_components/AntdTransfer.py +186 -120
  119. package/feffery_antd_components/AntdTree.py +267 -159
  120. package/feffery_antd_components/AntdTreeSelect.py +301 -162
  121. package/feffery_antd_components/AntdUpload.py +338 -262
  122. package/feffery_antd_components/AntdWatermark.py +93 -51
  123. package/feffery_antd_components/Fragment.py +19 -19
  124. package/feffery_antd_components/__init__.py +22 -17
  125. package/feffery_antd_components/_imports_.py +187 -187
  126. package/feffery_antd_components/alias.py +187 -187
  127. package/feffery_antd_components/async-antd_table.js +2 -2
  128. package/feffery_antd_components/async-data_display.js +1 -1
  129. package/feffery_antd_components/async-data_entry.js +4 -4
  130. package/feffery_antd_components/async-upload.js +2 -2
  131. package/feffery_antd_components/feffery_antd_components.min.js +8 -8
  132. package/feffery_antd_components/metadata.json +1 -1
  133. package/feffery_antd_components/package-info.json +15 -9
  134. package/{tests → legacy_tests}/dash3.0tests/AntdQRCode/347/273/204/344/273/266loading/347/212/266/346/200/201/351/207/215/346/236/204/test.py +3 -1
  135. package/{tests → legacy_tests}/dash3.0tests/AntdTable/345/207/275/346/225/260/345/274/217/346/224/271/351/200/240/test.py +5 -5
  136. package/{tests → legacy_tests}/dash3.0tests/_dashprivate_layout/346/224/271/345/212/250/346/265/213/350/257/225/test.py +3 -4
  137. package/{tests → legacy_tests}/dash3.0tests/loading_state/346/224/271/345/212/250/346/265/213/350/257/225/test.py +3 -1
  138. package/{tests → legacy_tests}/dash3.0tests//345/207/275/346/225/260/345/274/217/347/273/204/344/273/266/351/273/230/350/256/244/345/200/274/351/207/215/346/236/204/test.py +2 -1
  139. package/{tests → legacy_tests}/dash3.0tests//345/212/240/350/275/275/345/212/250/347/224/273/347/261/273/347/273/204/344/273/266/351/207/215/346/236/204/346/265/213/350/257/225/test.py +3 -1
  140. package/{tests → legacy_tests}/dash3.0tests//347/273/204/344/273/266/345/261/236/346/200/247/345/237/272/347/241/200/346/214/201/344/271/205/345/214/226/351/207/215/346/236/204/346/265/213/350/257/225/test.py +2 -1
  141. package/{tests → legacy_tests}/dataDisplay/AntdAccordion/feat_size.py +3 -4
  142. package/{tests → legacy_tests}/dataDisplay/AntdAccordion/feat_styles.py +3 -4
  143. package/{tests → legacy_tests}/dataDisplay/AntdCard/refactor_delete_props.py +7 -24
  144. package/{tests → legacy_tests}/dataDisplay/AntdCarousel/feat_auto_play_dot_duration.py +2 -1
  145. package/{tests → legacy_tests}/dataDisplay/AntdCollapse/feat_size.py +2 -1
  146. package/{tests → legacy_tests}/dataDisplay/AntdCollapse/feat_styles.py +2 -1
  147. package/{tests → legacy_tests}/dataDisplay/AntdCountdown/feat_finish_event.py +6 -7
  148. package/{tests → legacy_tests}/dataDisplay/AntdCountdown/refactor_to_timer.py +8 -14
  149. package/{tests → legacy_tests}/dataDisplay/AntdCountup/refactor_to_timer.py +8 -14
  150. package/{tests → legacy_tests}/dataDisplay/AntdDescriptions/feat_span_filled.py +2 -1
  151. package/{tests → legacy_tests}/dataDisplay/AntdImage/debug_preview_toolbar.py +2 -1
  152. package/{tests → legacy_tests}/dataDisplay/AntdSegmented/feat_shape.py +2 -1
  153. package/{tests → legacy_tests}/dataDisplay/AntdSegmented/feat_simple_options.py +2 -1
  154. package/{tests → legacy_tests}/dataDisplay/AntdSegmented/feat_vertical.py +2 -1
  155. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_button_mode_like_dcc_link.py +6 -10
  156. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_button_mode_refactor.py +10 -20
  157. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_button_mode_tooltip.py +2 -3
  158. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_columns_fixed_bool.py +3 -8
  159. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_columns_min_width.py +6 -8
  160. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_columns_sort_order.py +8 -14
  161. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_editable_disabled_keys.py +4 -4
  162. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_header_align.py +2 -7
  163. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_link_mode_like_dcc_link.py +1 -0
  164. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_loading.py +7 -17
  165. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_mini_chart_color.py +8 -25
  166. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_row_class_name.py +4 -8
  167. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_row_class_name_func.py +5 -11
  168. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_select_mode_show_search.py +4 -7
  169. package/legacy_tests/dataDisplay/AntdTable/feat_sticky_header.py +75 -0
  170. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_table_scroll.py +3 -1
  171. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_tag_mode_tooltip.py +3 -6
  172. package/{tests → legacy_tests}/dataDisplay/AntdTable/feat_title_popover_nodes.py +4 -9
  173. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_context_locale.py +3 -6
  174. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_field_bool.py +3 -1
  175. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_max_width_height_ghost_row.py +3 -14
  176. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_nested_editable.py +5 -5
  177. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_select_with_editable.py +6 -10
  178. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_server_side_mode_filter_search.py +18 -50
  179. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_summary.py +5 -12
  180. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_summary_multi_level_header.py +2 -7
  181. package/{tests → legacy_tests}/dataDisplay/AntdTable/fix_zero_value_filter.py +2 -3
  182. package/{tests → legacy_tests}/dataDisplay/AntdTable/perf_button_mode_auto_wrap.py +3 -11
  183. package/{tests → legacy_tests}/dataDisplay/AntdTable/perf_editable_column_format_constrait_message.py +2 -1
  184. package/{tests → legacy_tests}/dataDisplay/AntdTable/refactor_mini_progress_mode.py +3 -5
  185. package/{tests → legacy_tests}/dataDisplay/AntdTable/rollback_title_popover_info.py +2 -4
  186. package/{tests → legacy_tests}/dataDisplay/AntdTabs/feat_item_icon.py +3 -4
  187. package/{tests → legacy_tests}/dataDisplay/AntdTabs/feat_placeholder.py +10 -21
  188. package/{tests → legacy_tests}/dataDisplay/AntdTabs/feat_tab_bar_style.py +3 -4
  189. package/{tests → legacy_tests}/dataDisplay/AntdTree/feat_async_data_load.py +4 -2
  190. package/{tests → legacy_tests}/dataDisplay/descriptions/AntdDescriptions/feat_extra.py +3 -4
  191. package/{tests → legacy_tests}/dataEntry/AntdCalendar/feat_custom_cells.py +5 -12
  192. package/{tests → legacy_tests}/dataEntry/AntdCascader/feat_prefix.py +1 -0
  193. package/{tests → legacy_tests}/dataEntry/AntdCascader/feat_suffix_icon.py +1 -0
  194. package/{tests → legacy_tests}/dataEntry/AntdCascader/fix_read_only.py +2 -1
  195. package/{tests → legacy_tests}/dataEntry/AntdDatePicker/feat_custom_cells.py +1 -0
  196. package/{tests → legacy_tests}/dataEntry/AntdDatePicker/feat_picker_value.py +2 -1
  197. package/{tests/dataEntry/AntdTimePicker → legacy_tests/dataEntry/AntdDatePicker}/feat_prefix.py +2 -5
  198. package/{tests/dataEntry/AntdTimePicker → legacy_tests/dataEntry/AntdDatePicker}/feat_suffix_icon.py +2 -5
  199. package/{tests → legacy_tests}/dataEntry/AntdDateRangePicker/feat_custom_cells.py +1 -0
  200. package/{tests → legacy_tests}/dataEntry/AntdDateRangePicker/feat_picker_value.py +2 -1
  201. package/{tests/dataEntry/AntdDatePicker → legacy_tests/dataEntry/AntdDateRangePicker}/feat_prefix.py +2 -5
  202. package/{tests/dataEntry/AntdDatePicker → legacy_tests/dataEntry/AntdDateRangePicker}/feat_suffix_icon.py +2 -5
  203. package/{tests → legacy_tests}/dataEntry/AntdForm/feat_batch_control_tooltips.py +2 -5
  204. package/{tests → legacy_tests}/dataEntry/AntdForm/feat_optional_batch_control.py +7 -12
  205. package/{tests → legacy_tests}/dataEntry/AntdForm/fix_checkbox.py +3 -4
  206. package/{tests → legacy_tests}/dataEntry/AntdRadioGroup/feat_block.py +2 -1
  207. package/{tests → legacy_tests}/dataEntry/AntdSelect/feat_locale_ru.py +2 -1
  208. package/{tests → legacy_tests}/dataEntry/AntdSelect/feat_max_count.py +2 -4
  209. package/{tests → legacy_tests}/dataEntry/AntdSelect/feat_prefix.py +2 -4
  210. package/{tests → legacy_tests}/dataEntry/AntdSelect/feat_show_search.py +2 -1
  211. package/{tests → legacy_tests}/dataEntry/AntdSelect/feat_suffix_icon.py +2 -3
  212. package/{tests → legacy_tests}/dataEntry/AntdSelect/fix_read_only.py +4 -9
  213. package/{tests → legacy_tests}/dataEntry/AntdSelect/fix_read_only_with_allow_clear.py +3 -5
  214. package/{tests → legacy_tests}/dataEntry/AntdSlider/feat_range_editable.py +3 -1
  215. package/legacy_tests/dataEntry/AntdTimePicker/feat_prefix.py +18 -0
  216. package/legacy_tests/dataEntry/AntdTimePicker/feat_suffix_icon.py +18 -0
  217. package/legacy_tests/dataEntry/AntdTimeRangePicker/feat_prefix.py +18 -0
  218. package/legacy_tests/dataEntry/AntdTimeRangePicker/feat_suffix_icon.py +18 -0
  219. package/{tests → legacy_tests}/dataEntry/AntdTreeSelect/feat_async_data_load.py +4 -2
  220. package/{tests → legacy_tests}/dataEntry/AntdTreeSelect/feat_max_count.py +2 -4
  221. package/{tests → legacy_tests}/dataEntry/AntdTreeSelect/feat_prefix.py +1 -0
  222. package/{tests → legacy_tests}/dataEntry/AntdTreeSelect/fix_read_only.py +1 -0
  223. package/{tests → legacy_tests}/dataEntry/AntdUpload/feat_pastable.py +3 -6
  224. package/{tests → legacy_tests}/dataEntry/AntdUpload/fix_follow_theme.py +2 -1
  225. package/{tests → legacy_tests}/feat_variant_underlined.py +3 -4
  226. package/{tests → legacy_tests}/feedback/AntdAlert/feat_icon.py +2 -1
  227. package/{tests → legacy_tests}/feedback/AntdMessage/fix_follow_config_provider.py +2 -1
  228. package/{tests → legacy_tests}/feedback/AntdModal/feat_force_render.py +5 -8
  229. package/{tests → legacy_tests}/feedback/AntdModal/feat_loading_title.py +2 -7
  230. package/{tests → legacy_tests}/feedback/AntdModal/feat_prevent_close.py +3 -2
  231. package/{tests → legacy_tests}/feedback/AntdModal/feat_responsive_width.py +2 -1
  232. package/{tests → legacy_tests}/feedback/AntdNotification/feat_component_content.py +2 -1
  233. package/{tests → legacy_tests}/feedback/AntdNotification/feat_number_of_stack.py +2 -1
  234. package/{tests → legacy_tests}/feedback/AntdNotification/feat_show_progress.py +2 -1
  235. package/{tests → legacy_tests}/feedback/AntdNotification/fix_follow_config_provider.py +2 -1
  236. package/{tests → legacy_tests}/feedback/AntdPopupCard/feat_force_render.py +3 -2
  237. package/{tests → legacy_tests}/feedback/AntdProgress/feat_percent_position.py +2 -1
  238. package/{tests → legacy_tests}/feedback/AntdProgress/perf_size.py +2 -1
  239. package/{tests → legacy_tests}/feedback/AntdProgress/perf_steps.py +2 -1
  240. package/{tests → legacy_tests}/feedback/AntdProgress/perf_stroke_color.py +2 -1
  241. package/{tests → legacy_tests}/feedback/AntdResult/feat_extra.py +3 -4
  242. package/{tests → legacy_tests}/feedback/AntdSkeleton/fix_dash3.py +4 -6
  243. package/{tests → legacy_tests}/general/AntdButton/feat_color_and_variant.py +2 -1
  244. package/{tests → legacy_tests}/general/AntdButton/feat_preset_color.py +2 -1
  245. package/legacy_tests/general/AntdFloatButtonGroup/feat_placement.py +60 -0
  246. package/{tests → legacy_tests}/general/AntdFloatButtonGroup/feat_tooltip.py +3 -4
  247. package/{tests → legacy_tests}/general/AntdIcon/feat_iconfont.py +2 -1
  248. package/{tests → legacy_tests}/layout/AntdCenter/feat_use_token.py +2 -1
  249. package/{tests → legacy_tests}/layout/AntdDivider/feat_plain.py +2 -1
  250. package/{tests → legacy_tests}/layout/AntdDivider/feat_size.py +2 -1
  251. package/{tests → legacy_tests}/layout/AntdSplitter/feat_AntdSplitter.py +4 -4
  252. package/{tests → legacy_tests}/layout/AntdSplitter/feat_lazy.py +2 -1
  253. package/{tests → legacy_tests}/layout/AntdSplitter/refactor.py +18 -49
  254. package/{tests → legacy_tests}/navigation/AntdAnchor/feat_current_anchor.py +2 -1
  255. package/{tests → legacy_tests}/navigation/AntdAnchor/feat_direction.py +2 -1
  256. package/{tests → legacy_tests}/navigation/AntdAnchor/feat_replace.py +2 -1
  257. package/{tests → legacy_tests}/navigation/AntdBreadcrumb/feat_menu_item_event.py +3 -1
  258. package/{tests → legacy_tests}/navigation/AntdBreadcrumb/refactor_items.py +3 -1
  259. package/{tests → legacy_tests}/navigation/AntdDropdown/feat_extra.py +2 -1
  260. package/legacy_tests/navigation/AntdDropdown/test_cascading_dropdown.py +107 -0
  261. package/{tests → legacy_tests}/navigation/AntdMenu/feat_currentItem.py +3 -1
  262. package/{tests → legacy_tests}/navigation/AntdMenu/feat_currentItemPath.py +3 -1
  263. package/{tests → legacy_tests}/navigation/AntdMenu/feat_currentKeyPath.py +3 -1
  264. package/{tests → legacy_tests}/navigation/AntdMenu/feat_custom_icon.py +1 -0
  265. package/{tests → legacy_tests}/navigation/AntdMenu/feat_expandIcon.py +5 -8
  266. package/{tests → legacy_tests}/navigation/AntdMenu/feat_triggerSubMenuAction.py +4 -7
  267. package/{tests → legacy_tests}/navigation/AntdMenu/fix_onlyExpandCurrentSubMenu.py +2 -1
  268. package/{tests → legacy_tests}/navigation/AntdMenu/fix_with_sider.py +1 -0
  269. package/{tests → legacy_tests}/navigation/AntdPagination/feat_align.py +5 -10
  270. package/{tests → legacy_tests}/other/AntdAffix/feat_listen_affixed.py +2 -1
  271. package/{tests → legacy_tests}/other/AntdBackTop/refactor.py +2 -1
  272. package/legacy_tests/other/AntdConfigProvider/feat_use_css.py +67 -0
  273. package/{tests → legacy_tests}/other/AntdCopyText/feat_copy_table.py +7 -17
  274. package/{tests → legacy_tests}/other/AntdCopyText/feat_tooltips.py +5 -10
  275. package/{tests → legacy_tests}/other/AntdHappyProvider/feat_component.py +6 -13
  276. package/{tests → legacy_tests}/other/Fragment/feat_use_token.py +2 -1
  277. package/package.json +15 -9
  278. package/requirements.txt +7 -1
  279. package/ruff.toml +17 -1
  280. package/setup.py +12 -13
  281. package/src/lib/components/dataDisplay/AntdAccordion.react.js +22 -22
  282. package/src/lib/components/dataDisplay/AntdAvatar.react.js +18 -16
  283. package/src/lib/components/dataDisplay/AntdAvatarGroup.react.js +18 -16
  284. package/src/lib/components/dataDisplay/AntdBadge.react.js +24 -16
  285. package/src/lib/components/dataDisplay/AntdCarousel.react.js +17 -15
  286. package/src/lib/components/dataDisplay/AntdCheckableTag.react.js +15 -13
  287. package/src/lib/components/dataDisplay/AntdCollapse.react.js +40 -40
  288. package/src/lib/components/dataDisplay/AntdComment.react.js +19 -17
  289. package/src/lib/components/dataDisplay/AntdCountdown.react.js +15 -13
  290. package/src/lib/components/dataDisplay/AntdCountup.react.js +15 -13
  291. package/src/lib/components/dataDisplay/AntdEmpty.react.js +21 -24
  292. package/src/lib/components/dataDisplay/AntdImage.react.js +22 -26
  293. package/src/lib/components/dataDisplay/AntdImageGroup.react.js +19 -17
  294. package/src/lib/components/dataDisplay/AntdPopover.react.js +30 -17
  295. package/src/lib/components/dataDisplay/AntdQRCode.react.js +19 -17
  296. package/src/lib/components/dataDisplay/AntdRibbon.react.js +15 -13
  297. package/src/lib/components/dataDisplay/AntdSegmented.react.js +24 -30
  298. package/src/lib/components/dataDisplay/AntdSpoiler.react.js +19 -20
  299. package/src/lib/components/dataDisplay/AntdStatistic.react.js +28 -23
  300. package/src/lib/components/dataDisplay/AntdTable.react.js +241 -142
  301. package/src/lib/components/dataDisplay/AntdTabs.react.js +22 -23
  302. package/src/lib/components/dataDisplay/AntdTag.react.js +15 -13
  303. package/src/lib/components/dataDisplay/AntdTimeline.react.js +16 -14
  304. package/src/lib/components/dataDisplay/AntdTooltip.react.js +30 -23
  305. package/src/lib/components/dataDisplay/AntdTree.react.js +60 -32
  306. package/src/lib/components/dataDisplay/card/AntdCard.react.js +19 -17
  307. package/src/lib/components/dataDisplay/card/AntdCardGrid.react.js +15 -13
  308. package/src/lib/components/dataDisplay/card/AntdCardMeta.react.js +15 -13
  309. package/src/lib/components/dataDisplay/descriptions/AntdDescriptionItem.react.js +17 -15
  310. package/src/lib/components/dataDisplay/descriptions/AntdDescriptions.react.js +21 -19
  311. package/src/lib/components/dataEntry/AntdCalendar.react.js +22 -20
  312. package/src/lib/components/dataEntry/AntdCascader.react.js +44 -50
  313. package/src/lib/components/dataEntry/AntdCheckbox.react.js +18 -16
  314. package/src/lib/components/dataEntry/AntdCheckboxGroup.react.js +22 -23
  315. package/src/lib/components/dataEntry/AntdColorPicker.react.js +27 -22
  316. package/src/lib/components/dataEntry/AntdDatePicker.react.js +61 -33
  317. package/src/lib/components/dataEntry/AntdDateRangePicker.react.js +61 -38
  318. package/src/lib/components/dataEntry/AntdInput.react.js +28 -21
  319. package/src/lib/components/dataEntry/AntdInputNumber.react.js +30 -41
  320. package/src/lib/components/dataEntry/AntdMentions.react.js +24 -17
  321. package/src/lib/components/dataEntry/AntdOTP.react.js +25 -21
  322. package/src/lib/components/dataEntry/AntdRadioGroup.react.js +23 -27
  323. package/src/lib/components/dataEntry/AntdRate.react.js +19 -19
  324. package/src/lib/components/dataEntry/AntdSegmentedColoring.react.js +22 -15
  325. package/src/lib/components/dataEntry/AntdSelect.react.js +50 -47
  326. package/src/lib/components/dataEntry/AntdSlider.react.js +24 -22
  327. package/src/lib/components/dataEntry/AntdSwitch.react.js +19 -17
  328. package/src/lib/components/dataEntry/AntdTimePicker.react.js +35 -23
  329. package/src/lib/components/dataEntry/AntdTimeRangePicker.react.js +32 -20
  330. package/src/lib/components/dataEntry/AntdTransfer.react.js +46 -54
  331. package/src/lib/components/dataEntry/AntdTreeSelect.react.js +51 -43
  332. package/src/lib/components/dataEntry/check-card/AntdCheckCard.react.js +19 -20
  333. package/src/lib/components/dataEntry/check-card/AntdCheckCardGroup.react.js +24 -34
  334. package/src/lib/components/dataEntry/form/AntdForm.react.js +17 -21
  335. package/src/lib/components/dataEntry/form/AntdFormItem.react.js +23 -22
  336. package/src/lib/components/dataEntry/upload/AntdDraggerUpload.react.js +27 -28
  337. package/src/lib/components/dataEntry/upload/AntdPictureUpload.react.js +38 -26
  338. package/src/lib/components/dataEntry/upload/AntdUpload.react.js +36 -27
  339. package/src/lib/components/feedback/AntdAlert.react.js +34 -22
  340. package/src/lib/components/feedback/AntdDrawer.react.js +41 -44
  341. package/src/lib/components/feedback/AntdMessage.react.js +27 -34
  342. package/src/lib/components/feedback/AntdModal.react.js +71 -58
  343. package/src/lib/components/feedback/AntdNotification.react.js +51 -41
  344. package/src/lib/components/feedback/AntdPopconfirm.react.js +66 -42
  345. package/src/lib/components/feedback/AntdPopupCard.react.js +102 -87
  346. package/src/lib/components/feedback/AntdProgress.react.js +44 -41
  347. package/src/lib/components/feedback/AntdResult.react.js +28 -19
  348. package/src/lib/components/feedback/AntdSpin.react.js +77 -38
  349. package/src/lib/components/feedback/skeleton/AntdCustomSkeleton.react.js +44 -20
  350. package/src/lib/components/feedback/skeleton/AntdSkeleton.react.js +52 -34
  351. package/src/lib/components/feedback/skeleton/AntdSkeletonAvatar.react.js +14 -13
  352. package/src/lib/components/feedback/skeleton/AntdSkeletonButton.react.js +13 -12
  353. package/src/lib/components/feedback/skeleton/AntdSkeletonImage.react.js +13 -12
  354. package/src/lib/components/feedback/skeleton/AntdSkeletonInput.react.js +13 -12
  355. package/src/lib/components/formRender/AntdFormRender.react.js +585 -518
  356. package/src/lib/components/general/AntdButton.react.js +56 -35
  357. package/src/lib/components/general/AntdFloatButton.react.js +28 -14
  358. package/src/lib/components/general/AntdFloatButtonGroup.react.js +31 -15
  359. package/src/lib/components/general/AntdIcon.react.js +48 -36
  360. package/src/lib/components/general/typography/AntdParagraph.react.js +23 -21
  361. package/src/lib/components/general/typography/AntdText.react.js +22 -20
  362. package/src/lib/components/general/typography/AntdTitle.react.js +22 -20
  363. package/src/lib/components/icons.react.js +18 -22
  364. package/src/lib/components/layout/AntdCenter.react.js +24 -24
  365. package/src/lib/components/layout/AntdCompact.react.js +16 -14
  366. package/src/lib/components/layout/AntdContent.react.js +16 -14
  367. package/src/lib/components/layout/AntdDivider.react.js +26 -27
  368. package/src/lib/components/layout/AntdFlex.react.js +18 -19
  369. package/src/lib/components/layout/AntdFooter.react.js +16 -14
  370. package/src/lib/components/layout/AntdHeader.react.js +16 -14
  371. package/src/lib/components/layout/AntdLayout.react.js +16 -14
  372. package/src/lib/components/layout/AntdSider.react.js +18 -19
  373. package/src/lib/components/layout/AntdSpace.react.js +42 -27
  374. package/src/lib/components/layout/AntdSplitter.react.js +24 -35
  375. package/src/lib/components/layout/grid/AntdCol.react.js +29 -30
  376. package/src/lib/components/layout/grid/AntdRow.react.js +23 -17
  377. package/src/lib/components/locales.react.js +96 -35
  378. package/src/lib/components/navigation/AntdAnchor.react.js +24 -23
  379. package/src/lib/components/navigation/AntdBreadcrumb.react.js +93 -100
  380. package/src/lib/components/navigation/AntdDropdown.react.js +132 -124
  381. package/src/lib/components/navigation/AntdMenu.react.js +248 -201
  382. package/src/lib/components/navigation/AntdPageHeader.react.js +19 -17
  383. package/src/lib/components/navigation/AntdPagination.react.js +38 -35
  384. package/src/lib/components/navigation/AntdSteps.react.js +21 -16
  385. package/src/lib/components/other/AntdAffix.react.js +15 -14
  386. package/src/lib/components/other/AntdBackTop.react.js +20 -20
  387. package/src/lib/components/other/AntdConfigProvider.react.js +80 -85
  388. package/src/lib/components/other/AntdCopyText.react.js +21 -19
  389. package/src/lib/components/other/AntdHappyProvider.react.js +5 -8
  390. package/src/lib/components/other/AntdTour.react.js +63 -47
  391. package/src/lib/components/other/AntdWatermark.react.js +11 -8
  392. package/src/lib/components/other/Fragment.react.js +4 -5
  393. package/src/lib/components/utils.js +23 -13
  394. package/src/lib/contexts/FormContext.js +2 -2
  395. package/src/lib/contexts/FormItemContext.js +2 -2
  396. package/src/lib/contexts/PropsContext.js +2 -2
  397. package/src/lib/fragments/AntdTable.react.js +1965 -1197
  398. package/src/lib/fragments/dataDisplay/AntdAccordion.react.js +41 -37
  399. package/src/lib/fragments/dataDisplay/AntdAvatar.react.js +64 -51
  400. package/src/lib/fragments/dataDisplay/AntdAvatarGroup.react.js +19 -9
  401. package/src/lib/fragments/dataDisplay/AntdBadge.react.js +20 -10
  402. package/src/lib/fragments/dataDisplay/AntdCarousel.react.js +25 -9
  403. package/src/lib/fragments/dataDisplay/AntdCheckableTag.react.js +19 -12
  404. package/src/lib/fragments/dataDisplay/AntdComment.react.js +105 -52
  405. package/src/lib/fragments/dataDisplay/AntdCountdown.react.js +43 -28
  406. package/src/lib/fragments/dataDisplay/AntdCountup.react.js +29 -17
  407. package/src/lib/fragments/dataDisplay/AntdEmpty.react.js +21 -13
  408. package/src/lib/fragments/dataDisplay/AntdImage.react.js +142 -113
  409. package/src/lib/fragments/dataDisplay/AntdImageGroup.react.js +28 -20
  410. package/src/lib/fragments/dataDisplay/AntdPopover.react.js +38 -21
  411. package/src/lib/fragments/dataDisplay/AntdQRCode.react.js +30 -20
  412. package/src/lib/fragments/dataDisplay/AntdRibbon.react.js +19 -9
  413. package/src/lib/fragments/dataDisplay/AntdSegmented.react.js +50 -47
  414. package/src/lib/fragments/dataDisplay/AntdSpoiler.react.js +49 -36
  415. package/src/lib/fragments/dataDisplay/AntdTabs.react.js +82 -71
  416. package/src/lib/fragments/dataDisplay/AntdTag.react.js +27 -12
  417. package/src/lib/fragments/dataDisplay/AntdTimeline.react.js +24 -21
  418. package/src/lib/fragments/dataDisplay/AntdTooltip.react.js +24 -17
  419. package/src/lib/fragments/dataDisplay/AntdTree.react.js +355 -271
  420. package/src/lib/fragments/dataDisplay/card/AntdCard.react.js +44 -31
  421. package/src/lib/fragments/dataDisplay/card/AntdCardGrid.react.js +18 -9
  422. package/src/lib/fragments/dataDisplay/card/AntdCardMeta.react.js +18 -10
  423. package/src/lib/fragments/dataDisplay/descriptions/AntdDescriptionItem.react.js +18 -9
  424. package/src/lib/fragments/dataDisplay/descriptions/AntdDescriptions.react.js +75 -54
  425. package/src/lib/fragments/dataEntry/AntdCalendar.react.js +104 -75
  426. package/src/lib/fragments/dataEntry/AntdCascader.react.js +137 -98
  427. package/src/lib/fragments/dataEntry/AntdCheckbox.react.js +43 -31
  428. package/src/lib/fragments/dataEntry/AntdCheckboxGroup.react.js +45 -35
  429. package/src/lib/fragments/dataEntry/AntdColorPicker.react.js +95 -86
  430. package/src/lib/fragments/dataEntry/AntdDatePicker.react.js +171 -135
  431. package/src/lib/fragments/dataEntry/AntdDateRangePicker.react.js +242 -173
  432. package/src/lib/fragments/dataEntry/AntdInput.react.js +176 -168
  433. package/src/lib/fragments/dataEntry/AntdInputNumber.react.js +63 -54
  434. package/src/lib/fragments/dataEntry/AntdMentions.react.js +65 -63
  435. package/src/lib/fragments/dataEntry/AntdOTP.react.js +45 -34
  436. package/src/lib/fragments/dataEntry/AntdRadioGroup.react.js +92 -68
  437. package/src/lib/fragments/dataEntry/AntdRate.react.js +44 -33
  438. package/src/lib/fragments/dataEntry/AntdSegmentedColoring.react.js +194 -151
  439. package/src/lib/fragments/dataEntry/AntdSelect.react.js +232 -169
  440. package/src/lib/fragments/dataEntry/AntdSlider.react.js +58 -45
  441. package/src/lib/fragments/dataEntry/AntdSwitch.react.js +43 -33
  442. package/src/lib/fragments/dataEntry/AntdTimePicker.react.js +68 -47
  443. package/src/lib/fragments/dataEntry/AntdTimeRangePicker.react.js +105 -64
  444. package/src/lib/fragments/dataEntry/AntdTransfer.react.js +75 -59
  445. package/src/lib/fragments/dataEntry/AntdTreeSelect.react.js +154 -135
  446. package/src/lib/fragments/dataEntry/check-card/AntdCheckCard.react.js +34 -25
  447. package/src/lib/fragments/dataEntry/check-card/AntdCheckCardGroup.react.js +35 -26
  448. package/src/lib/fragments/dataEntry/form/AntdForm.react.js +45 -31
  449. package/src/lib/fragments/dataEntry/form/AntdFormItem.react.js +21 -10
  450. package/src/lib/fragments/formRender/AntdFormRender.react.js +45 -49
  451. package/src/lib/fragments/upload/AntdDraggerUpload.react.js +548 -339
  452. package/src/lib/fragments/upload/AntdPictureUpload.react.js +417 -282
  453. package/src/lib/fragments/upload/AntdUpload.react.js +554 -336
  454. package/src/lib/hooks/useCss.js +1 -1
  455. package/src/lib/hooks/useStickyOffset.js +103 -84
  456. package/src/lib/index.js +3 -5
  457. package/src/lib/internal_components/UtilsLink.react.js +10 -5
  458. package/src/lib/store/formStore.js +52 -45
  459. package/tests/__init__.py +0 -0
  460. package/tests/requirements.txt +5 -0
  461. package/tests/test_basic_usage.py +19 -0
  462. package/tests/test_locale_french.py +33 -0
  463. package/usage.py +3 -4
  464. package/webpack.config.js +6 -15
  465. package/bug_fix.py +0 -21
  466. package/feffery_antd_components/utils.py +0 -262
  467. package/release-to-test-pypi.sh +0 -1
  468. package/review_checklist.md +0 -47
  469. package/src/jl/'feffery'_antdaccordion.jl +0 -56
  470. package/src/jl/'feffery'_antdaffix.jl +0 -35
  471. package/src/jl/'feffery'_antdalert.jl +0 -37
  472. package/src/jl/'feffery'_antdanchor.jl +0 -39
  473. package/src/jl/'feffery'_antdavatar.jl +0 -45
  474. package/src/jl/'feffery'_antdavatargroup.jl +0 -49
  475. package/src/jl/'feffery'_antdbacktop.jl +0 -31
  476. package/src/jl/'feffery'_antdbadge.jl +0 -53
  477. package/src/jl/'feffery'_antdbreadcrumb.jl +0 -51
  478. package/src/jl/'feffery'_antdbutton.jl +0 -72
  479. package/src/jl/'feffery'_antdcalendar.jl +0 -50
  480. package/src/jl/'feffery'_antdcard.jl +0 -70
  481. package/src/jl/'feffery'_antdcardgrid.jl +0 -34
  482. package/src/jl/'feffery'_antdcardmeta.jl +0 -26
  483. package/src/jl/'feffery'_antdcarousel.jl +0 -56
  484. package/src/jl/'feffery'_antdcascader.jl +0 -75
  485. package/src/jl/'feffery'_antdcenter.jl +0 -34
  486. package/src/jl/'feffery'_antdcheckabletag.jl +0 -28
  487. package/src/jl/'feffery'_antdcheckbox.jl +0 -44
  488. package/src/jl/'feffery'_antdcheckboxgroup.jl +0 -44
  489. package/src/jl/'feffery'_antdcheckcard.jl +0 -49
  490. package/src/jl/'feffery'_antdcheckcardgroup.jl +0 -52
  491. package/src/jl/'feffery'_antdcol.jl +0 -82
  492. package/src/jl/'feffery'_antdcollapse.jl +0 -57
  493. package/src/jl/'feffery'_antdcolorpicker.jl +0 -61
  494. package/src/jl/'feffery'_antdcomment.jl +0 -66
  495. package/src/jl/'feffery'_antdcompact.jl +0 -34
  496. package/src/jl/'feffery'_antdconfigprovider.jl +0 -52
  497. package/src/jl/'feffery'_antdcontent.jl +0 -30
  498. package/src/jl/'feffery'_antdcopytext.jl +0 -31
  499. package/src/jl/'feffery'_antdcountdown.jl +0 -35
  500. package/src/jl/'feffery'_antdcountup.jl +0 -32
  501. package/src/jl/'feffery'_antdcustomskeleton.jl +0 -42
  502. package/src/jl/'feffery'_antddatepicker.jl +0 -99
  503. package/src/jl/'feffery'_antddaterangepicker.jl +0 -98
  504. package/src/jl/'feffery'_antddescriptionitem.jl +0 -41
  505. package/src/jl/'feffery'_antddescriptions.jl +0 -71
  506. package/src/jl/'feffery'_antddivider.jl +0 -47
  507. package/src/jl/'feffery'_antddraggerupload.jl +0 -117
  508. package/src/jl/'feffery'_antddrawer.jl +0 -72
  509. package/src/jl/'feffery'_antddropdown.jl +0 -91
  510. package/src/jl/'feffery'_antdempty.jl +0 -47
  511. package/src/jl/'feffery'_antdflex.jl +0 -41
  512. package/src/jl/'feffery'_antdfloatbutton.jl +0 -39
  513. package/src/jl/'feffery'_antdfloatbuttongroup.jl +0 -44
  514. package/src/jl/'feffery'_antdfooter.jl +0 -30
  515. package/src/jl/'feffery'_antdform.jl +0 -53
  516. package/src/jl/'feffery'_antdformitem.jl +0 -55
  517. package/src/jl/'feffery'_antdformrender.jl +0 -229
  518. package/src/jl/'feffery'_antdhappyprovider.jl +0 -28
  519. package/src/jl/'feffery'_antdheader.jl +0 -30
  520. package/src/jl/'feffery'_antdicon.jl +0 -31
  521. package/src/jl/'feffery'_antdimage.jl +0 -49
  522. package/src/jl/'feffery'_antdimagegroup.jl +0 -53
  523. package/src/jl/'feffery'_antdinput.jl +0 -94
  524. package/src/jl/'feffery'_antdinputnumber.jl +0 -67
  525. package/src/jl/'feffery'_antdlayout.jl +0 -30
  526. package/src/jl/'feffery'_antdmentions.jl +0 -56
  527. package/src/jl/'feffery'_antdmenu.jl +0 -58
  528. package/src/jl/'feffery'_antdmessage.jl +0 -31
  529. package/src/jl/'feffery'_antdmodal.jl +0 -128
  530. package/src/jl/'feffery'_antdnotification.jl +0 -52
  531. package/src/jl/'feffery'_antdotp.jl +0 -43
  532. package/src/jl/'feffery'_antdpageheader.jl +0 -40
  533. package/src/jl/'feffery'_antdpagination.jl +0 -61
  534. package/src/jl/'feffery'_antdparagraph.jl +0 -48
  535. package/src/jl/'feffery'_antdpictureupload.jl +0 -137
  536. package/src/jl/'feffery'_antdpopconfirm.jl +0 -105
  537. package/src/jl/'feffery'_antdpopover.jl +0 -60
  538. package/src/jl/'feffery'_antdpopupcard.jl +0 -67
  539. package/src/jl/'feffery'_antdprogress.jl +0 -71
  540. package/src/jl/'feffery'_antdqrcode.jl +0 -51
  541. package/src/jl/'feffery'_antdradiogroup.jl +0 -55
  542. package/src/jl/'feffery'_antdrate.jl +0 -47
  543. package/src/jl/'feffery'_antdresult.jl +0 -29
  544. package/src/jl/'feffery'_antdribbon.jl +0 -34
  545. package/src/jl/'feffery'_antdrow.jl +0 -44
  546. package/src/jl/'feffery'_antdsegmented.jl +0 -56
  547. package/src/jl/'feffery'_antdsegmentedcoloring.jl +0 -59
  548. package/src/jl/'feffery'_antdselect.jl +0 -102
  549. package/src/jl/'feffery'_antdsider.jl +0 -43
  550. package/src/jl/'feffery'_antdskeleton.jl +0 -62
  551. package/src/jl/'feffery'_antdskeletonavatar.jl +0 -29
  552. package/src/jl/'feffery'_antdskeletonbutton.jl +0 -31
  553. package/src/jl/'feffery'_antdskeletonimage.jl +0 -23
  554. package/src/jl/'feffery'_antdskeletoninput.jl +0 -27
  555. package/src/jl/'feffery'_antdslider.jl +0 -73
  556. package/src/jl/'feffery'_antdspace.jl +0 -46
  557. package/src/jl/'feffery'_antdspin.jl +0 -49
  558. package/src/jl/'feffery'_antdsplitter.jl +0 -44
  559. package/src/jl/'feffery'_antdspoiler.jl +0 -44
  560. package/src/jl/'feffery'_antdstatistic.jl +0 -37
  561. package/src/jl/'feffery'_antdsteps.jl +0 -49
  562. package/src/jl/'feffery'_antdswitch.jl +0 -51
  563. package/src/jl/'feffery'_antdtable.jl +0 -447
  564. package/src/jl/'feffery'_antdtabs.jl +0 -84
  565. package/src/jl/'feffery'_antdtag.jl +0 -34
  566. package/src/jl/'feffery'_antdtext.jl +0 -46
  567. package/src/jl/'feffery'_antdtimeline.jl +0 -35
  568. package/src/jl/'feffery'_antdtimepicker.jl +0 -79
  569. package/src/jl/'feffery'_antdtimerangepicker.jl +0 -73
  570. package/src/jl/'feffery'_antdtitle.jl +0 -44
  571. package/src/jl/'feffery'_antdtooltip.jl +0 -64
  572. package/src/jl/'feffery'_antdtour.jl +0 -68
  573. package/src/jl/'feffery'_antdtransfer.jl +0 -71
  574. package/src/jl/'feffery'_antdtree.jl +0 -96
  575. package/src/jl/'feffery'_antdtreeselect.jl +0 -101
  576. package/src/jl/'feffery'_antdupload.jl +0 -131
  577. package/src/jl/'feffery'_antdwatermark.jl +0 -48
  578. package/src/jl/'feffery'_fragment.jl +0 -27
  579. package/tests/dataDisplay/AntdTable/feat_sticky_header.py +0 -81
  580. package/tests/dataEntry/AntdDateRangePicker/feat_prefix.py +0 -21
  581. package/tests/dataEntry/AntdDateRangePicker/feat_suffix_icon.py +0 -21
  582. package/tests/dataEntry/AntdTimeRangePicker/feat_prefix.py +0 -21
  583. package/tests/dataEntry/AntdTimeRangePicker/feat_suffix_icon.py +0 -21
  584. package/tests/general/AntdFloatButtonGroup/feat_placement.py +0 -83
  585. package/tests/other/AntdConfigProvider/feat_use_css.py +0 -67
  586. /package/{fac-logo.svg → imgs/fac-logo.svg} +0 -0
  587. /package/{images → imgs}//345/205/254/344/274/227/345/217/267.png" +0 -0
  588. /package/{images → imgs}//345/233/275/351/231/205/345/214/226/347/244/272/344/276/213_de-de.png" +0 -0
  589. /package/{images → imgs}//345/233/275/351/231/205/345/214/226/347/244/272/344/276/213_en-us.png" +0 -0
  590. /package/{images → imgs}//347/237/245/350/257/206/346/230/237/347/220/203.jpg" +0 -0
@@ -1,10 +1,5 @@
1
1
  // react核心
2
- import React, {
3
- useContext,
4
- useState,
5
- useEffect,
6
- useRef
7
- } from 'react';
2
+ import React, { useContext, useState, useEffect, useRef } from 'react';
8
3
  // antd核心
9
4
  import {
10
5
  Table,
@@ -28,23 +23,31 @@ import {
28
23
  Select,
29
24
  Divider,
30
25
  Tooltip,
31
- Progress
26
+ Progress,
32
27
  } from 'antd';
33
28
  import {
34
29
  TinyLine,
35
30
  TinyArea,
36
31
  TinyColumn,
37
- RingProgress
32
+ RingProgress,
38
33
  } from '@ant-design/plots';
39
34
  import AntdIcon from '../components/general/AntdIcon.react';
40
35
  import {
41
36
  SearchOutlined,
42
37
  QuestionCircleOutlined,
43
- DownOutlined
38
+ DownOutlined,
44
39
  } from '@ant-design/icons';
45
40
  // 辅助库
46
41
  import Highlighter from 'react-highlight-words';
47
- import { isNumber, isEqual, isString, isBoolean, isEmpty, omitBy, isUndefined } from 'lodash';
42
+ import {
43
+ isNumber,
44
+ isEqual,
45
+ isString,
46
+ isBoolean,
47
+ isEmpty,
48
+ omitBy,
49
+ isUndefined,
50
+ } from 'lodash';
48
51
  import { pickBy } from 'ramda';
49
52
  import { str2Locale, locale2text } from '../components/locales.react';
50
53
  import { useLoading } from '../components/utils';
@@ -52,7 +55,10 @@ import useStickyOffset from '../hooks/useStickyOffset';
52
55
  // 上下文
53
56
  import PropsContext from '../contexts/PropsContext';
54
57
  // 参数类型
55
- import { propTypes, defaultProps } from '../components/dataDisplay/AntdTable.react';
58
+ import {
59
+ propTypes,
60
+ defaultProps,
61
+ } from '../components/dataDisplay/AntdTable.react';
56
62
  // 内部组件
57
63
  import { UtilsLink } from '../internal_components/UtilsLink.react';
58
64
 
@@ -62,52 +68,72 @@ const insertNewColumnNode = (column, group, currentLevel, currentNode) => {
62
68
  // 若当前递归到的层级小于group数组长度
63
69
  if (currentLevel < group.length) {
64
70
  // 尝试在currentNode中搜索dataIndex等于当前group层级的元素
65
- let matchColumnIdx = currentNode.findIndex(item => item.dataIndex === group[currentLevel])
71
+ const matchColumnIdx = currentNode.findIndex(
72
+ (item) => item.dataIndex === group[currentLevel]
73
+ );
66
74
  // 若未在currentNode中搜索到当前group层级对应元素
67
75
  if (matchColumnIdx === -1) {
68
76
  // 向currentNode中push当前group层级对应元素
69
77
  currentNode.push({
70
78
  dataIndex: group[currentLevel],
71
79
  title: group[currentLevel],
72
- children: []
73
- })
80
+ children: [],
81
+ });
74
82
  // 继续向下一层级递归
75
- insertNewColumnNode(column, group, currentLevel + 1, currentNode[currentNode.length - 1].children)
83
+ insertNewColumnNode(
84
+ column,
85
+ group,
86
+ currentLevel + 1,
87
+ currentNode[currentNode.length - 1].children
88
+ );
76
89
  } else {
77
90
  // 若在currentNode中搜索到当前group层级对应元素
78
91
  // 继续向下一层级递归
79
- insertNewColumnNode(column, group, currentLevel + 1, currentNode[matchColumnIdx].children)
92
+ insertNewColumnNode(
93
+ column,
94
+ group,
95
+ currentLevel + 1,
96
+ currentNode[matchColumnIdx].children
97
+ );
80
98
  }
81
99
  } else {
82
100
  // 否则则视作到达最深层
83
- currentNode.push({ ...column })
101
+ currentNode.push({ ...column });
84
102
  }
85
- }
103
+ };
86
104
 
87
- const splitSummaryRowContents = (summaryRowContents, columnCount, blankColumns) => {
88
- let summaryGroups = (
89
- blankColumns > 0 ?
90
- [Array.from({ length: blankColumns }, () => ({ empty: true }))] :
91
- [[]]
92
- );
105
+ const splitSummaryRowContents = (
106
+ summaryRowContents,
107
+ columnCount,
108
+ blankColumns
109
+ ) => {
110
+ const summaryGroups =
111
+ blankColumns > 0
112
+ ? [Array.from({ length: blankColumns }, () => ({ empty: true }))]
113
+ : [[]];
93
114
  let currentGroupSpans = 0;
94
- for (let item of summaryRowContents) {
115
+ for (const item of summaryRowContents) {
95
116
  // 检查当前字段追加到末尾分组后,是否超出总列数
96
117
  if (currentGroupSpans + (item.colSpan || 1) > columnCount) {
97
- currentGroupSpans = (item.colSpan || 1);
118
+ currentGroupSpans = item.colSpan || 1;
98
119
  // 处理前置空白列填充
99
120
  if (blankColumns > 0) {
100
- summaryGroups.push([...Array.from({ length: blankColumns }, () => ({ empty: true })), item])
121
+ summaryGroups.push([
122
+ ...Array.from({ length: blankColumns }, () => ({
123
+ empty: true,
124
+ })),
125
+ item,
126
+ ]);
101
127
  } else {
102
- summaryGroups.push([item])
128
+ summaryGroups.push([item]);
103
129
  }
104
130
  } else {
105
- currentGroupSpans += (item.colSpan || 1)
106
- summaryGroups[summaryGroups.length - 1].push(item)
131
+ currentGroupSpans += item.colSpan || 1;
132
+ summaryGroups[summaryGroups.length - 1].push(item);
107
133
  }
108
134
  }
109
135
  return summaryGroups;
110
- }
136
+ };
111
137
 
112
138
  const findItemByKey = (array, key) => {
113
139
  let foundItem = null;
@@ -140,13 +166,13 @@ const replaceItemByKey = (array, key, replacement) => {
140
166
  }
141
167
 
142
168
  return false;
143
- }
169
+ };
144
170
 
145
171
  // 定义不触发重绘的参数数组
146
172
  const preventUpdateProps = [
147
173
  'recentlyMouseEnterColumnDataIndex',
148
174
  'recentlyMouseEnterRowKey',
149
- 'recentlyMouseEnterRow'
175
+ 'recentlyMouseEnterRow',
150
176
  ];
151
177
 
152
178
  /**
@@ -216,8 +242,8 @@ const AntdTable = (props) => {
216
242
  ...others
217
243
  } = props;
218
244
 
219
- const context = useContext(PropsContext)
220
- locale = (context && context.locale) || locale
245
+ const context = useContext(PropsContext);
246
+ locale = (context && context.locale) || locale;
221
247
 
222
248
  useEffect(() => {
223
249
  // 处理pagination参数的默认值问题
@@ -226,29 +252,34 @@ const AntdTable = (props) => {
226
252
  setProps({
227
253
  pagination: {
228
254
  ...pagination,
229
- current: pagination?.current ? pagination?.current : 1
230
- }
231
- })
255
+ current: pagination?.current ? pagination?.current : 1,
256
+ },
257
+ });
232
258
  }
233
259
  }, []);
234
260
 
235
261
  const [searchText, setSearchText] = useState('');
236
262
  const [searchedColumn, setSearchedColumn] = useState('');
237
263
 
238
- const stickyObj = (sticky && typeof sticky === 'object') ? sticky : {};
264
+ const stickyObj = sticky && typeof sticky === 'object' ? sticky : {};
239
265
  const belowSelector = stickyObj.belowSelector ?? undefined;
240
266
  const offsetHeader = Number(stickyObj.offsetHeader || 0);
241
- const autoMeasuredOffset = belowSelector ? useStickyOffset({ selector: belowSelector, extra: offsetHeader }) : offsetHeader;
242
- const { belowSelector: _rm1,
267
+ const autoMeasuredOffset = belowSelector
268
+ ? useStickyOffset({ selector: belowSelector, extra: offsetHeader })
269
+ : offsetHeader;
270
+ const {
271
+ belowSelector: _rm1,
243
272
  offsetHeader: _rm2,
244
273
  ...stickyRest
245
274
  } = stickyObj;
246
- const computedSticky = sticky === true || belowSelector || (sticky && typeof sticky === 'object')
247
- ? { ...stickyRest, offsetHeader: autoMeasuredOffset }
248
- : undefined;
275
+ const computedSticky =
276
+ sticky === true ||
277
+ belowSelector ||
278
+ (sticky && typeof sticky === 'object')
279
+ ? { ...stickyRest, offsetHeader: autoMeasuredOffset }
280
+ : undefined;
249
281
 
250
282
  const onPageChange = (pagination, filter, sorter, currentData) => {
251
-
252
283
  // 当本次事件由翻页操作引发时
253
284
  if (currentData.action === 'paginate') {
254
285
  setProps({
@@ -256,85 +287,102 @@ const AntdTable = (props) => {
256
287
  ...pagination,
257
288
  pageSize: pagination.pageSize,
258
289
  current: pagination.current,
259
- position: pagination.position ?
260
- (
261
- Array.isArray(pagination.position) ?
262
- pagination.position[0] :
263
- pagination.position
264
- ) :
265
- pagination.position
290
+ position: pagination.position
291
+ ? Array.isArray(pagination.position)
292
+ ? pagination.position[0]
293
+ : pagination.position
294
+ : pagination.position,
266
295
  },
267
- currentData: currentData.currentDataSource
268
- })
296
+ currentData: currentData.currentDataSource,
297
+ });
269
298
  } else if (currentData.action === 'sort') {
270
299
  // 当sorter为数组时,即为多字段组合排序方式时
271
300
  if (Array.isArray(sorter)) {
272
- setProps(
273
- {
274
- sorter: {
275
- columns: sorter.map(item => item.column.dataIndex),
276
- orders: sorter.map(item => item.order)
277
- }
278
- }
279
- )
301
+ setProps({
302
+ sorter: {
303
+ columns: sorter.map((item) => item.column.dataIndex),
304
+ orders: sorter.map((item) => item.order),
305
+ },
306
+ });
280
307
  } else if (sorter.order) {
281
308
  // 单字段排序方式
282
- setProps(
283
- {
284
- sorter: {
285
- columns: [sorter.column.dataIndex],
286
- orders: [sorter.order]
287
- }
288
- }
289
- )
309
+ setProps({
310
+ sorter: {
311
+ columns: [sorter.column.dataIndex],
312
+ orders: [sorter.order],
313
+ },
314
+ });
290
315
  } else {
291
316
  // 非排序状态
292
- setProps(
293
- {
294
- sorter: {
295
- columns: [],
296
- orders: []
297
- }
298
- }
299
- )
317
+ setProps({
318
+ sorter: {
319
+ columns: [],
320
+ orders: [],
321
+ },
322
+ });
300
323
  }
301
324
  } else if (currentData.action === 'filter') {
302
- setProps({ filter: filter })
325
+ setProps({ filter: filter });
303
326
  }
304
- }
327
+ };
305
328
 
306
329
  // 自定义关键词搜索过滤模式
307
330
  let searchInput;
308
331
  const getColumnSearchProps = (dataIndex, title) => ({
309
- filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (
332
+ filterDropdown: ({
333
+ setSelectedKeys,
334
+ selectedKeys,
335
+ confirm,
336
+ clearFilters,
337
+ }) => (
310
338
  <div style={{ padding: 8 }}>
311
339
  <Input
312
- ref={node => {
340
+ ref={(node) => {
313
341
  searchInput = node;
314
342
  }}
315
343
  placeholder={`${locale2text.AntdTable[locale].filterKeywordPlaceholder} ${title}`}
316
344
  value={selectedKeys[0]}
317
- onChange={e => setSelectedKeys(e.target.value ? [e.target.value] : [])}
318
- onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}
345
+ onChange={(e) =>
346
+ setSelectedKeys(e.target.value ? [e.target.value] : [])
347
+ }
348
+ onPressEnter={() =>
349
+ handleSearch(selectedKeys, confirm, dataIndex)
350
+ }
319
351
  style={{ marginBottom: 8, display: 'block' }}
320
352
  />
321
353
  <Space>
322
354
  <Button
323
355
  type="primary"
324
- onClick={() => handleSearch(selectedKeys, confirm, dataIndex)}
356
+ onClick={() =>
357
+ handleSearch(selectedKeys, confirm, dataIndex)
358
+ }
325
359
  icon={<SearchOutlined />}
326
360
  size="small"
327
361
  style={{ width: 90 }}
328
362
  >
329
- {locale2text.AntdTable[locale].filterKeywordSearchButtonText}
363
+ {
364
+ locale2text.AntdTable[locale]
365
+ .filterKeywordSearchButtonText
366
+ }
330
367
  </Button>
331
- <Button onClick={() => handleSearchReset(clearFilters)} size="small" style={{ width: 90 }}>
332
- {locale2text.AntdTable[locale].filterKeywordResetButtonText}
368
+ <Button
369
+ onClick={() => handleSearchReset(clearFilters)}
370
+ size="small"
371
+ style={{ width: 90 }}
372
+ >
373
+ {
374
+ locale2text.AntdTable[locale]
375
+ .filterKeywordResetButtonText
376
+ }
333
377
  </Button>
334
378
  </Space>
335
379
  </div>
336
380
  ),
337
- filterIcon: filtered => <SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />,
381
+ filterIcon: (filtered) => (
382
+ <SearchOutlined
383
+ style={{ color: filtered ? '#1890ff' : undefined }}
384
+ />
385
+ ),
338
386
  // 搜索筛选
339
387
  onFilter: (value, record) => {
340
388
  if (mode === 'client-side') {
@@ -342,46 +390,69 @@ const AntdTable = (props) => {
342
390
  if (record[dataIndex] && !Array.isArray(record[dataIndex])) {
343
391
  // 判断当前记录是否有content属性
344
392
  if (record[dataIndex]?.content) {
345
- return record[dataIndex].content.toString().toLowerCase().includes(value?.toLowerCase())
393
+ return record[dataIndex].content
394
+ .toString()
395
+ .toLowerCase()
396
+ .includes(value?.toLowerCase());
346
397
  } else if (record[dataIndex]?.text) {
347
- return record[dataIndex].text.toString().toLowerCase().includes(value?.toLowerCase())
398
+ return record[dataIndex].text
399
+ .toString()
400
+ .toLowerCase()
401
+ .includes(value?.toLowerCase());
348
402
  } else if (record[dataIndex]?.label) {
349
- return record[dataIndex].label.toString().toLowerCase().includes(value?.toLowerCase())
403
+ return record[dataIndex].label
404
+ .toString()
405
+ .toLowerCase()
406
+ .includes(value?.toLowerCase());
350
407
  } else if (record[dataIndex]?.tag) {
351
- return record[dataIndex].tag.toString().toLowerCase().includes(value?.toLowerCase())
408
+ return record[dataIndex].tag
409
+ .toString()
410
+ .toLowerCase()
411
+ .includes(value?.toLowerCase());
352
412
  } else if (record[dataIndex]?.toString) {
353
- return record[dataIndex].toString().toLowerCase().includes(value?.toLowerCase())
413
+ return record[dataIndex]
414
+ .toString()
415
+ .toLowerCase()
416
+ .includes(value?.toLowerCase());
354
417
  }
355
418
  } else if (Array.isArray(record[dataIndex])) {
356
419
  // 若当前记录为数组,分别检查数组元素对象是否具有content、tag、title属性
357
- if (record[dataIndex].some(item => item?.content)) {
420
+ if (record[dataIndex].some((item) => item?.content)) {
358
421
  // 检查当前记录数组中是否至少有一个对象的content属性命中关键词
359
- return record[dataIndex].some(
360
- item => item?.content.toString().toLowerCase().includes(value?.toLowerCase())
361
- )
362
- } else if (record[dataIndex].some(item => item?.tag)) {
422
+ return record[dataIndex].some((item) =>
423
+ item?.content
424
+ .toString()
425
+ .toLowerCase()
426
+ .includes(value?.toLowerCase())
427
+ );
428
+ } else if (record[dataIndex].some((item) => item?.tag)) {
363
429
  // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词
364
- return record[dataIndex].some(
365
- item => item?.tag.toString().toLowerCase().includes(value?.toLowerCase())
366
- )
367
- } else if (record[dataIndex].some(item => item?.title)) {
430
+ return record[dataIndex].some((item) =>
431
+ item?.tag
432
+ .toString()
433
+ .toLowerCase()
434
+ .includes(value?.toLowerCase())
435
+ );
436
+ } else if (record[dataIndex].some((item) => item?.title)) {
368
437
  // 检查当前记录数组中是否至少有一个对象的title属性命中关键词
369
- return record[dataIndex].some(
370
- item => item?.title.toString().toLowerCase().includes(value?.toLowerCase())
371
- )
438
+ return record[dataIndex].some((item) =>
439
+ item?.title
440
+ .toString()
441
+ .toLowerCase()
442
+ .includes(value?.toLowerCase())
443
+ );
372
444
  }
373
445
  }
374
446
  return false;
375
- } else {
376
- return true
377
447
  }
448
+ return true;
378
449
  },
379
- onFilterDropdownVisibleChange: visible => {
450
+ onFilterDropdownVisibleChange: (visible) => {
380
451
  if (visible) {
381
452
  setTimeout(() => searchInput.select(), 100);
382
453
  }
383
454
  },
384
- render: text =>
455
+ render: (text) =>
385
456
  searchedColumn === dataIndex ? (
386
457
  <Highlighter
387
458
  highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}
@@ -400,42 +471,45 @@ const AntdTable = (props) => {
400
471
  setSearchedColumn(dataIndex);
401
472
  };
402
473
 
403
- const handleSearchReset = clearFilters => {
474
+ const handleSearchReset = (clearFilters) => {
404
475
  clearFilters();
405
476
  setSearchText('');
406
477
  };
407
478
 
408
479
  if (!data) {
409
- data = []
480
+ data = [];
410
481
  }
411
482
 
412
483
  // 当未设置行key时,自动以自增1的字符型结果作为key
413
- for (let i in data) {
484
+ for (const i in data) {
414
485
  if (!data[i].hasOwnProperty('key')) {
415
- data[i]['key'] = i.toString()
486
+ data[i].key = i.toString();
416
487
  }
417
488
  }
418
489
 
419
490
  // 为pagination补充默认参数值
420
491
  if (isBoolean(pagination) && !pagination) {
421
-
422
492
  } else {
423
493
  pagination = {
424
494
  ...pagination,
425
- showTotalPrefix: pagination?.showTotalPrefix || locale2text.AntdTable[locale].showTotalPrefix,
426
- showTotalSuffix: pagination?.showTotalSuffix || locale2text.AntdTable[locale].showTotalSuffix
427
- }
495
+ showTotalPrefix:
496
+ pagination?.showTotalPrefix ||
497
+ locale2text.AntdTable[locale].showTotalPrefix,
498
+ showTotalSuffix:
499
+ pagination?.showTotalSuffix ||
500
+ locale2text.AntdTable[locale].showTotalSuffix,
501
+ };
428
502
  }
429
503
 
430
504
  // 根据columns中的hidden属性控制是否忽略对应字段
431
- columns = columns.filter(item => !item.hidden)
505
+ columns = columns.filter((item) => !item.hidden);
432
506
 
433
507
  // 为columns配置默认align参数
434
- for (let i in columns) {
508
+ for (const i in columns) {
435
509
  columns[i] = {
436
510
  align: 'center',
437
- ...columns[i]
438
- }
511
+ ...columns[i],
512
+ };
439
513
  }
440
514
 
441
515
  // 自定义可编辑单元格
@@ -476,32 +550,47 @@ const AntdTable = (props) => {
476
550
  });
477
551
  };
478
552
 
479
- const [dataSource, setDataSource] = useState(data)
553
+ const [dataSource, setDataSource] = useState(data);
480
554
 
481
555
  // 负责监听单元格内容修改动作从而进行相关值的更新
482
556
  const handleSave = (row, setProps, dataSource, setDataSource) => {
483
-
484
557
  const newData = [...dataSource];
485
- const item = findItemByKey(newData, row.key)
558
+ const item = findItemByKey(newData, row.key);
486
559
 
487
- const rowColumns = Object.getOwnPropertyNames(row)
560
+ const rowColumns = Object.getOwnPropertyNames(row);
488
561
 
489
562
  // 循环取出属性名,再判断属性值是否一致
490
563
  for (let i = 0; i < rowColumns.length; i++) {
491
564
  // 找到发生值修改的字段
492
- if (row[rowColumns[i]] !== item[rowColumns[i]] &&
565
+ if (
566
+ row[rowColumns[i]] !== item[rowColumns[i]] &&
493
567
  columnsFormatConstraint &&
494
568
  columnsFormatConstraint[rowColumns[i]] &&
495
- columnsFormatConstraint[rowColumns[i]].rule) {
569
+ columnsFormatConstraint[rowColumns[i]].rule
570
+ ) {
496
571
  // 检查是否满足预设的正则表达式规则
497
- if (!eval(`/${columnsFormatConstraint[rowColumns[i]].rule}/`).test(row[rowColumns[i]])) {
572
+ if (
573
+ !eval(
574
+ `/${columnsFormatConstraint[rowColumns[i]].rule}/`
575
+ ).test(row[rowColumns[i]])
576
+ ) {
498
577
  message.error(
499
- columnsFormatConstraint[rowColumns[i]]?.content ?
500
- columnsFormatConstraint[rowColumns[i]]?.content.replace('[VALUE]', row[rowColumns[i]]) :
501
- locale2text.AntdTable[locale].columnEditableFormatConstraintMessage.replace('[VALUE]', row[rowColumns[i]])
578
+ columnsFormatConstraint[rowColumns[i]]?.content
579
+ ? columnsFormatConstraint[
580
+ rowColumns[i]
581
+ ]?.content.replace(
582
+ '[VALUE]',
583
+ row[rowColumns[i]]
584
+ )
585
+ : locale2text.AntdTable[
586
+ locale
587
+ ].columnEditableFormatConstraintMessage.replace(
588
+ '[VALUE]',
589
+ row[rowColumns[i]]
590
+ )
502
591
  );
503
592
  // 提前终止函数
504
- return
593
+ return;
505
594
  }
506
595
  }
507
596
  }
@@ -510,37 +599,45 @@ const AntdTable = (props) => {
510
599
  let _changedColumn = null;
511
600
  for (let i = 0; i < rowColumns.length; i++) {
512
601
  if (row[rowColumns[i]] !== item[rowColumns[i]]) {
513
- _changedColumn = rowColumns[i]
602
+ _changedColumn = rowColumns[i];
514
603
  }
515
604
  }
516
605
 
517
- replaceItemByKey(newData, row.key, { ...item, ...row })
606
+ replaceItemByKey(newData, row.key, { ...item, ...row });
518
607
 
519
608
  setDataSource(newData);
520
609
 
521
610
  setProps({
522
611
  currentData: newData,
523
612
  // 忽略组件型字段键值对
524
- recentlyChangedRow: omitBy(row, value => value?.$$typeof),
613
+ recentlyChangedRow: omitBy(row, (value) => value?.$$typeof),
525
614
  recentlyChangedColumn: _changedColumn,
526
- data: newData
527
- })
615
+ data: newData,
616
+ });
528
617
  };
529
618
 
530
619
  const save = async () => {
531
620
  try {
532
621
  const values = await form.validateFields();
533
622
  toggleEdit();
534
- handleSave({ ...record, ...values }, setProps, dataSource, setDataSource);
623
+ handleSave(
624
+ { ...record, ...values },
625
+ setProps,
626
+ dataSource,
627
+ setDataSource
628
+ );
535
629
  } catch (errInfo) {
536
- console.log(errInfo)
630
+ console.log(errInfo);
537
631
  }
538
632
  };
539
633
 
540
634
  let childNode = children;
541
635
 
542
636
  if (editable) {
543
- let recordDisabled = (columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.disabledKeys || []).includes(record.key)
637
+ const recordDisabled = (
638
+ columns.filter((e) => e.dataIndex === dataIndex)[0].editOptions
639
+ ?.disabledKeys || []
640
+ ).includes(record.key);
544
641
  childNode = editing ? (
545
642
  <Form.Item
546
643
  style={{
@@ -554,42 +651,63 @@ const AntdTable = (props) => {
554
651
  },
555
652
  ]}
556
653
  >
557
- {
558
- columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.mode === 'text-area' ?
559
- <Input.TextArea
560
- autoSize={columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.autoSize}
561
- maxLength={columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.maxLength}
562
- placeholder={columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.placeholder}
563
- ref={inputRef}
564
- onBlur={save}
565
- onFocus={() => {
566
- // 移动光标至内容末尾
567
- inputRef.current?.focus({
568
- cursor: 'end',
569
- })
570
- }}
571
- disabled={recordDisabled}
572
- /> :
573
- <Input
574
- maxLength={columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.maxLength}
575
- placeholder={columns.filter(e => e.dataIndex === dataIndex)[0].editOptions?.placeholder}
576
- ref={inputRef}
577
- onPressEnter={save}
578
- onBlur={save}
579
- disabled={recordDisabled}
580
- />
581
- }
654
+ {columns.filter((e) => e.dataIndex === dataIndex)[0]
655
+ .editOptions?.mode === 'text-area' ? (
656
+ <Input.TextArea
657
+ autoSize={
658
+ columns.filter(
659
+ (e) => e.dataIndex === dataIndex
660
+ )[0].editOptions?.autoSize
661
+ }
662
+ maxLength={
663
+ columns.filter(
664
+ (e) => e.dataIndex === dataIndex
665
+ )[0].editOptions?.maxLength
666
+ }
667
+ placeholder={
668
+ columns.filter(
669
+ (e) => e.dataIndex === dataIndex
670
+ )[0].editOptions?.placeholder
671
+ }
672
+ ref={inputRef}
673
+ onBlur={save}
674
+ onFocus={() => {
675
+ // 移动光标至内容末尾
676
+ inputRef.current?.focus({
677
+ cursor: 'end',
678
+ });
679
+ }}
680
+ disabled={recordDisabled}
681
+ />
682
+ ) : (
683
+ <Input
684
+ maxLength={
685
+ columns.filter(
686
+ (e) => e.dataIndex === dataIndex
687
+ )[0].editOptions?.maxLength
688
+ }
689
+ placeholder={
690
+ columns.filter(
691
+ (e) => e.dataIndex === dataIndex
692
+ )[0].editOptions?.placeholder
693
+ }
694
+ ref={inputRef}
695
+ onPressEnter={save}
696
+ onBlur={save}
697
+ disabled={recordDisabled}
698
+ />
699
+ )}
582
700
  </Form.Item>
583
701
  ) : (
584
702
  <div
585
703
  className="editable-cell-value-wrap"
586
704
  style={{
587
705
  whiteSpace: 'break-spaces',
588
- ...(recordDisabled ? { cursor: 'no-drop' } : {})
706
+ ...(recordDisabled ? { cursor: 'no-drop' } : {}),
589
707
  }}
590
708
  onClick={recordDisabled ? undefined : toggleEdit}
591
709
  >
592
- {(children[1] || children[1] === 0) ? children : ' '}
710
+ {children[1] || children[1] === 0 ? children : ' '}
593
711
  </div>
594
712
  );
595
713
  }
@@ -603,53 +721,56 @@ const AntdTable = (props) => {
603
721
  return -1;
604
722
  } else if (x.value > y.value) {
605
723
  return 1;
606
- } else {
607
- return 0;
608
724
  }
609
- }
725
+ return 0;
726
+ };
610
727
 
611
728
  // 多模式值筛选选项自动生成策略
612
729
  const generateFilterOptions = (inputData, columnDataIndex) => {
613
- let filterOptions = []
614
- for (let item of inputData) {
730
+ let filterOptions = [];
731
+ for (const item of inputData) {
615
732
  // 若当前记录不为数组
616
- if ((item[columnDataIndex] || item[columnDataIndex] === 0) && !Array.isArray(item[columnDataIndex])) {
733
+ if (
734
+ (item[columnDataIndex] || item[columnDataIndex] === 0) &&
735
+ !Array.isArray(item[columnDataIndex])
736
+ ) {
617
737
  if (item[columnDataIndex]?.content) {
618
- filterOptions.push(item[columnDataIndex].content)
738
+ filterOptions.push(item[columnDataIndex].content);
619
739
  } else if (item[columnDataIndex]?.text) {
620
- filterOptions.push(item[columnDataIndex].text)
740
+ filterOptions.push(item[columnDataIndex].text);
621
741
  } else if (item[columnDataIndex]?.label) {
622
- filterOptions.push(item[columnDataIndex].label)
742
+ filterOptions.push(item[columnDataIndex].label);
623
743
  } else if (item[columnDataIndex]?.tag) {
624
- filterOptions.push(item[columnDataIndex].tag)
744
+ filterOptions.push(item[columnDataIndex].tag);
625
745
  } else if (item[columnDataIndex]?.toString) {
626
- filterOptions.push(item[columnDataIndex])
746
+ filterOptions.push(item[columnDataIndex]);
627
747
  }
628
748
  } else if (Array.isArray(item[columnDataIndex])) {
629
749
  // 若当前记录为数组,提取数组元素对象中存在的content或tag属性
630
- if (item[columnDataIndex].some(_item => _item?.content)) {
750
+ if (item[columnDataIndex].some((_item) => _item?.content)) {
631
751
  filterOptions = filterOptions.concat(
632
752
  item[columnDataIndex]
633
- .filter(_item => _item?.content)
634
- .map(_item => _item.content)
635
- )
636
- } else if (item[columnDataIndex].some(_item => _item?.tag)) {
753
+ .filter((_item) => _item?.content)
754
+ .map((_item) => _item.content)
755
+ );
756
+ } else if (item[columnDataIndex].some((_item) => _item?.tag)) {
637
757
  filterOptions = filterOptions.concat(
638
758
  item[columnDataIndex]
639
- .filter(_item => _item?.tag)
640
- .map(_item => _item.tag)
641
- )
759
+ .filter((_item) => _item?.tag)
760
+ .map((_item) => _item.tag)
761
+ );
642
762
  }
643
763
  }
644
764
  }
645
765
 
646
766
  // 将提取到的合法筛选值去重结构化并排序
647
- return Array.from(
648
- new Set(filterOptions)
649
- ).map(
650
- value => ({ text: (value || value === 0) ? value.toString() : '', value: value })
651
- ).sort(compareNumeric)
652
- }
767
+ return Array.from(new Set(filterOptions))
768
+ .map((value) => ({
769
+ text: value || value === 0 ? value.toString() : '',
770
+ value: value,
771
+ }))
772
+ .sort(compareNumeric);
773
+ };
653
774
 
654
775
  // 处理可筛选特性
655
776
  // 若为前端渲染模式,在filterOptions中每个字段filterCustomItems缺失的情况下
@@ -658,64 +779,141 @@ const AntdTable = (props) => {
658
779
  // 为filterOptions.filterDataIndexes中定义的每个字段添加过滤功能
659
780
  for (let i = 0; i < columns.length; i++) {
660
781
  // 若当前字段在filterOptions的keys()中
661
- if (Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1) {
782
+ if (
783
+ Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1
784
+ ) {
662
785
  // 若当前字段对应filterOptions子元素有filterMode.filterMode为'keyword'
663
- if (filterOptions[columns[i].dataIndex].filterMode === 'keyword') {
786
+ if (
787
+ filterOptions[columns[i].dataIndex].filterMode === 'keyword'
788
+ ) {
664
789
  columns[i] = {
665
790
  ...columns[i],
666
- ...getColumnSearchProps(columns[i].dataIndex, columns[i].title)
667
- }
668
- } else if (filterOptions[columns[i].dataIndex].filterMode === 'tree') {
791
+ ...getColumnSearchProps(
792
+ columns[i].dataIndex,
793
+ columns[i].title
794
+ ),
795
+ };
796
+ } else if (
797
+ filterOptions[columns[i].dataIndex].filterMode === 'tree'
798
+ ) {
669
799
  // 若当前字段筛选模式为'tree'模式
670
800
  // 若当前字段对应filterOptions子元素下有filterCustomTreeItems属性
671
801
  // 则为其添加自定义树形选项
672
- if (filterOptions[columns[i].dataIndex].filterCustomTreeItems) {
802
+ if (
803
+ filterOptions[columns[i].dataIndex]
804
+ .filterCustomTreeItems
805
+ ) {
673
806
  columns[i] = {
674
807
  ...columns[i],
675
- defaultFilteredValue: defaultFilteredValues[columns[i].dataIndex],
808
+ defaultFilteredValue:
809
+ defaultFilteredValues[columns[i].dataIndex],
676
810
  filterMode: 'tree',
677
811
  // 直接使用自定义树形筛选菜单结构
678
- filters: filterOptions[columns[i].dataIndex].filterCustomTreeItems,
812
+ filters:
813
+ filterOptions[columns[i].dataIndex]
814
+ .filterCustomTreeItems,
679
815
  // 针对不同再渲染模式设计值筛选逻辑
680
816
  onFilter: (value, record) => {
681
817
  // 仅支持非数组型合法输入值,对象型输入支持对content、text、label、tag属性进行值筛选
682
- if ((record[columns[i].dataIndex] || record[columns[i].dataIndex] === 0) && !Array.isArray(record[columns[i].dataIndex])) {
818
+ if (
819
+ (record[columns[i].dataIndex] ||
820
+ record[columns[i].dataIndex] === 0) &&
821
+ !Array.isArray(record[columns[i].dataIndex])
822
+ ) {
683
823
  // 判断当前记录是否有content属性
684
824
  if (record[columns[i].dataIndex]?.content) {
685
- return record[columns[i].dataIndex].content === value;
686
- } else if (record[columns[i].dataIndex]?.text) {
687
- return record[columns[i].dataIndex].text === value;
688
- } else if (record[columns[i].dataIndex]?.label) {
689
- return record[columns[i].dataIndex].label === value;
690
- } else if (record[columns[i].dataIndex]?.tag) {
691
- return record[columns[i].dataIndex].tag === value;
692
- } else if (record[columns[i].dataIndex]?.toString) {
825
+ return (
826
+ record[columns[i].dataIndex]
827
+ .content === value
828
+ );
829
+ } else if (
830
+ record[columns[i].dataIndex]?.text
831
+ ) {
832
+ return (
833
+ record[columns[i].dataIndex]
834
+ .text === value
835
+ );
836
+ } else if (
837
+ record[columns[i].dataIndex]?.label
838
+ ) {
839
+ return (
840
+ record[columns[i].dataIndex]
841
+ .label === value
842
+ );
843
+ } else if (
844
+ record[columns[i].dataIndex]?.tag
845
+ ) {
846
+ return (
847
+ record[columns[i].dataIndex].tag ===
848
+ value
849
+ );
850
+ } else if (
851
+ record[columns[i].dataIndex]?.toString
852
+ ) {
693
853
  // 确保字符型、数值型均可稳定进行筛选
694
- return record[columns[i].dataIndex].toString() === value.toString();
854
+ return (
855
+ record[
856
+ columns[i].dataIndex
857
+ ].toString() === value.toString()
858
+ );
695
859
  }
696
- } else if (Array.isArray(record[columns[i].dataIndex])) {
860
+ } else if (
861
+ Array.isArray(record[columns[i].dataIndex])
862
+ ) {
697
863
  // 若当前记录为数组,分别检查数组元素对象是否具有content、tag、title属性
698
- if (record[columns[i].dataIndex].some(item => item?.content)) {
864
+ if (
865
+ record[columns[i].dataIndex].some(
866
+ (item) => item?.content
867
+ )
868
+ ) {
699
869
  // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value
700
- return record[columns[i].dataIndex].some(
701
- item => item?.content.toString().toLowerCase() === value?.toLowerCase()
870
+ return record[
871
+ columns[i].dataIndex
872
+ ].some(
873
+ (item) =>
874
+ item?.content
875
+ .toString()
876
+ .toLowerCase() ===
877
+ value?.toLowerCase()
878
+ );
879
+ } else if (
880
+ record[columns[i].dataIndex].some(
881
+ (item) => item?.tag
702
882
  )
703
- } else if (record[columns[i].dataIndex].some(item => item?.tag)) {
883
+ ) {
704
884
  // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词
705
- return record[columns[i].dataIndex].some(
706
- item => item?.tag.toString().toLowerCase() === value?.toLowerCase()
885
+ return record[
886
+ columns[i].dataIndex
887
+ ].some(
888
+ (item) =>
889
+ item?.tag
890
+ .toString()
891
+ .toLowerCase() ===
892
+ value?.toLowerCase()
893
+ );
894
+ } else if (
895
+ record[columns[i].dataIndex].some(
896
+ (item) => item?.title
707
897
  )
708
- } else if (record[columns[i].dataIndex].some(item => item?.title)) {
898
+ ) {
709
899
  // 检查当前记录数组中是否至少有一个对象的title属性命中关键词
710
- return record[columns[i].dataIndex].some(
711
- item => item?.title.toString().toLowerCase() === value?.toLowerCase()
712
- )
900
+ return record[
901
+ columns[i].dataIndex
902
+ ].some(
903
+ (item) =>
904
+ item?.title
905
+ .toString()
906
+ .toLowerCase() ===
907
+ value?.toLowerCase()
908
+ );
713
909
  }
714
910
  }
715
911
  return false;
716
912
  },
717
- filterSearch: filterOptions[columns[i].dataIndex].filterSearch
718
- }
913
+ filterSearch:
914
+ filterOptions[columns[i].dataIndex]
915
+ .filterSearch,
916
+ };
719
917
  }
720
918
  } else {
721
919
  // 否则则一律视为'checkbox'模式
@@ -724,96 +922,236 @@ const AntdTable = (props) => {
724
922
  if (filterOptions[columns[i].dataIndex].filterCustomItems) {
725
923
  columns[i] = {
726
924
  ...columns[i],
727
- defaultFilteredValue: defaultFilteredValues[columns[i].dataIndex],
728
- filters: filterOptions[columns[i].dataIndex].filterCustomItems
729
- .map(value => ({ text: (value || value === 0) ? value.toString() : '', value: value })),
925
+ defaultFilteredValue:
926
+ defaultFilteredValues[columns[i].dataIndex],
927
+ filters: filterOptions[
928
+ columns[i].dataIndex
929
+ ].filterCustomItems.map((value) => ({
930
+ text:
931
+ value || value === 0
932
+ ? value.toString()
933
+ : '',
934
+ value: value,
935
+ })),
730
936
  // 针对不同再渲染模式设计值筛选逻辑
731
937
  onFilter: (value, record) => {
732
938
  // 仅支持非数组型合法输入值,对象型输入支持对content、text、label、tag属性进行值筛选
733
- if ((record[columns[i].dataIndex] || record[columns[i].dataIndex] === 0) && !Array.isArray(record[columns[i].dataIndex])) {
939
+ if (
940
+ (record[columns[i].dataIndex] ||
941
+ record[columns[i].dataIndex] === 0) &&
942
+ !Array.isArray(record[columns[i].dataIndex])
943
+ ) {
734
944
  // 判断当前记录是否有content属性
735
945
  if (record[columns[i].dataIndex]?.content) {
736
- return record[columns[i].dataIndex].content === value;
737
- } else if (record[columns[i].dataIndex]?.text) {
738
- return record[columns[i].dataIndex].text === value;
739
- } else if (record[columns[i].dataIndex]?.label) {
740
- return record[columns[i].dataIndex].label === value;
741
- } else if (record[columns[i].dataIndex]?.tag) {
742
- return record[columns[i].dataIndex].tag === value;
743
- } else if (record[columns[i].dataIndex]?.toString) {
946
+ return (
947
+ record[columns[i].dataIndex]
948
+ .content === value
949
+ );
950
+ } else if (
951
+ record[columns[i].dataIndex]?.text
952
+ ) {
953
+ return (
954
+ record[columns[i].dataIndex]
955
+ .text === value
956
+ );
957
+ } else if (
958
+ record[columns[i].dataIndex]?.label
959
+ ) {
960
+ return (
961
+ record[columns[i].dataIndex]
962
+ .label === value
963
+ );
964
+ } else if (
965
+ record[columns[i].dataIndex]?.tag
966
+ ) {
967
+ return (
968
+ record[columns[i].dataIndex].tag ===
969
+ value
970
+ );
971
+ } else if (
972
+ record[columns[i].dataIndex]?.toString
973
+ ) {
744
974
  // 确保字符型、数值型均可稳定进行筛选
745
- return record[columns[i].dataIndex].toString() === value.toString();
975
+ return (
976
+ record[
977
+ columns[i].dataIndex
978
+ ].toString() === value.toString()
979
+ );
746
980
  }
747
- } else if (Array.isArray(record[columns[i].dataIndex])) {
981
+ } else if (
982
+ Array.isArray(record[columns[i].dataIndex])
983
+ ) {
748
984
  // 若当前记录为数组,分别检查数组元素对象是否具有content、tag、title属性
749
- if (record[columns[i].dataIndex].some(item => item?.content)) {
985
+ if (
986
+ record[columns[i].dataIndex].some(
987
+ (item) => item?.content
988
+ )
989
+ ) {
750
990
  // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value
751
- return record[columns[i].dataIndex].some(
752
- item => item?.content.toString().toLowerCase() === value?.toLowerCase()
991
+ return record[
992
+ columns[i].dataIndex
993
+ ].some(
994
+ (item) =>
995
+ item?.content
996
+ .toString()
997
+ .toLowerCase() ===
998
+ value?.toLowerCase()
999
+ );
1000
+ } else if (
1001
+ record[columns[i].dataIndex].some(
1002
+ (item) => item?.tag
753
1003
  )
754
- } else if (record[columns[i].dataIndex].some(item => item?.tag)) {
1004
+ ) {
755
1005
  // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词
756
- return record[columns[i].dataIndex].some(
757
- item => item?.tag.toString().toLowerCase() === value?.toLowerCase()
1006
+ return record[
1007
+ columns[i].dataIndex
1008
+ ].some(
1009
+ (item) =>
1010
+ item?.tag
1011
+ .toString()
1012
+ .toLowerCase() ===
1013
+ value?.toLowerCase()
1014
+ );
1015
+ } else if (
1016
+ record[columns[i].dataIndex].some(
1017
+ (item) => item?.title
758
1018
  )
759
- } else if (record[columns[i].dataIndex].some(item => item?.title)) {
1019
+ ) {
760
1020
  // 检查当前记录数组中是否至少有一个对象的title属性命中关键词
761
- return record[columns[i].dataIndex].some(
762
- item => item?.title.toString().toLowerCase() === value?.toLowerCase()
763
- )
1021
+ return record[
1022
+ columns[i].dataIndex
1023
+ ].some(
1024
+ (item) =>
1025
+ item?.title
1026
+ .toString()
1027
+ .toLowerCase() ===
1028
+ value?.toLowerCase()
1029
+ );
764
1030
  }
765
1031
  }
766
1032
  return false;
767
1033
  },
768
- filterMultiple: filterOptions[columns[i].dataIndex].filterMultiple,
769
- filterSearch: filterOptions[columns[i].dataIndex].filterSearch
770
- }
1034
+ filterMultiple:
1035
+ filterOptions[columns[i].dataIndex]
1036
+ .filterMultiple,
1037
+ filterSearch:
1038
+ filterOptions[columns[i].dataIndex]
1039
+ .filterSearch,
1040
+ };
771
1041
  } else {
772
1042
  // 否则自动基于数据中的唯一值生成选项列表
773
1043
  columns[i] = {
774
1044
  ...columns[i],
775
- defaultFilteredValue: defaultFilteredValues[columns[i].dataIndex],
776
- filters: generateFilterOptions(data, columns[i].dataIndex),
1045
+ defaultFilteredValue:
1046
+ defaultFilteredValues[columns[i].dataIndex],
1047
+ filters: generateFilterOptions(
1048
+ data,
1049
+ columns[i].dataIndex
1050
+ ),
777
1051
  // 针对不同再渲染模式设计值筛选逻辑
778
1052
  onFilter: (value, record) => {
779
1053
  // 仅支持非数组型合法输入值,对象型输入支持对content、text、label、tag属性进行值筛选
780
- if ((record[columns[i].dataIndex] || record[columns[i].dataIndex] === 0) && !Array.isArray(record[columns[i].dataIndex])) {
1054
+ if (
1055
+ (record[columns[i].dataIndex] ||
1056
+ record[columns[i].dataIndex] === 0) &&
1057
+ !Array.isArray(record[columns[i].dataIndex])
1058
+ ) {
781
1059
  if (record[columns[i].dataIndex]?.content) {
782
- return record[columns[i].dataIndex].content === value;
783
- } else if (record[columns[i].dataIndex]?.text) {
784
- return record[columns[i].dataIndex].text === value;
785
- } else if (record[columns[i].dataIndex]?.label) {
786
- return record[columns[i].dataIndex].label === value;
787
- } else if (record[columns[i].dataIndex]?.tag) {
788
- return record[columns[i].dataIndex].tag === value;
789
- } else if (record[columns[i].dataIndex]?.toString) {
1060
+ return (
1061
+ record[columns[i].dataIndex]
1062
+ .content === value
1063
+ );
1064
+ } else if (
1065
+ record[columns[i].dataIndex]?.text
1066
+ ) {
1067
+ return (
1068
+ record[columns[i].dataIndex]
1069
+ .text === value
1070
+ );
1071
+ } else if (
1072
+ record[columns[i].dataIndex]?.label
1073
+ ) {
1074
+ return (
1075
+ record[columns[i].dataIndex]
1076
+ .label === value
1077
+ );
1078
+ } else if (
1079
+ record[columns[i].dataIndex]?.tag
1080
+ ) {
1081
+ return (
1082
+ record[columns[i].dataIndex].tag ===
1083
+ value
1084
+ );
1085
+ } else if (
1086
+ record[columns[i].dataIndex]?.toString
1087
+ ) {
790
1088
  // 确保字符型、数值型均可稳定进行筛选
791
- return record[columns[i].dataIndex].toString() === value.toString();
1089
+ return (
1090
+ record[
1091
+ columns[i].dataIndex
1092
+ ].toString() === value.toString()
1093
+ );
792
1094
  }
793
- } else if (Array.isArray(record[columns[i].dataIndex])) {
1095
+ } else if (
1096
+ Array.isArray(record[columns[i].dataIndex])
1097
+ ) {
794
1098
  // 若当前记录为数组,分别检查数组元素对象是否具有content、tag、title属性
795
- if (record[columns[i].dataIndex].some(item => item?.content)) {
1099
+ if (
1100
+ record[columns[i].dataIndex].some(
1101
+ (item) => item?.content
1102
+ )
1103
+ ) {
796
1104
  // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value
797
- return record[columns[i].dataIndex].some(
798
- item => item?.content.toString().toLowerCase() === value?.toLowerCase()
1105
+ return record[
1106
+ columns[i].dataIndex
1107
+ ].some(
1108
+ (item) =>
1109
+ item?.content
1110
+ .toString()
1111
+ .toLowerCase() ===
1112
+ value?.toLowerCase()
1113
+ );
1114
+ } else if (
1115
+ record[columns[i].dataIndex].some(
1116
+ (item) => item?.tag
799
1117
  )
800
- } else if (record[columns[i].dataIndex].some(item => item?.tag)) {
1118
+ ) {
801
1119
  // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词
802
- return record[columns[i].dataIndex].some(
803
- item => item?.tag.toString().toLowerCase() === value?.toLowerCase()
1120
+ return record[
1121
+ columns[i].dataIndex
1122
+ ].some(
1123
+ (item) =>
1124
+ item?.tag
1125
+ .toString()
1126
+ .toLowerCase() ===
1127
+ value?.toLowerCase()
1128
+ );
1129
+ } else if (
1130
+ record[columns[i].dataIndex].some(
1131
+ (item) => item?.title
804
1132
  )
805
- } else if (record[columns[i].dataIndex].some(item => item?.title)) {
1133
+ ) {
806
1134
  // 检查当前记录数组中是否至少有一个对象的title属性命中关键词
807
- return record[columns[i].dataIndex].some(
808
- item => item?.title.toString().toLowerCase() === value?.toLowerCase()
809
- )
1135
+ return record[
1136
+ columns[i].dataIndex
1137
+ ].some(
1138
+ (item) =>
1139
+ item?.title
1140
+ .toString()
1141
+ .toLowerCase() ===
1142
+ value?.toLowerCase()
1143
+ );
810
1144
  }
811
1145
  }
812
1146
  return false;
813
1147
  },
814
- filterMultiple: filterOptions[columns[i].dataIndex]?.filterMultiple,
815
- filterSearch: filterOptions[columns[i].dataIndex]?.filterSearch
816
- }
1148
+ filterMultiple:
1149
+ filterOptions[columns[i].dataIndex]
1150
+ ?.filterMultiple,
1151
+ filterSearch:
1152
+ filterOptions[columns[i].dataIndex]
1153
+ ?.filterSearch,
1154
+ };
817
1155
  }
818
1156
  }
819
1157
  }
@@ -825,52 +1163,83 @@ const AntdTable = (props) => {
825
1163
  // 为filterOptions.filterDataIndexes中定义的每个字段添加过滤功能
826
1164
  for (let i = 0; i < columns.length; i++) {
827
1165
  // 若当前字段在filterOptions的keys()中
828
- if (Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1) {
1166
+ if (
1167
+ Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1
1168
+ ) {
829
1169
  // 若当前字段对应filterOptions子元素有filterMode属性且filterMode属性为'keyword'
830
- if (filterOptions[columns[i].dataIndex].filterMode === 'keyword') {
1170
+ if (
1171
+ filterOptions[columns[i].dataIndex].filterMode === 'keyword'
1172
+ ) {
831
1173
  columns[i] = {
832
1174
  ...columns[i],
833
- ...getColumnSearchProps(columns[i].dataIndex, columns[i].title)
834
- }
835
- } else if (filterOptions[columns[i].dataIndex].filterMode === 'tree') {
1175
+ ...getColumnSearchProps(
1176
+ columns[i].dataIndex,
1177
+ columns[i].title
1178
+ ),
1179
+ };
1180
+ } else if (
1181
+ filterOptions[columns[i].dataIndex].filterMode === 'tree'
1182
+ ) {
836
1183
  // 若当前字段筛选模式为'tree'模式
837
1184
  // 若当前字段对应filterOptions子元素下有filterCustomTreeItems属性
838
1185
  // 则为其添加自定义树形选项
839
- if (filterOptions[columns[i].dataIndex].filterCustomTreeItems) {
1186
+ if (
1187
+ filterOptions[columns[i].dataIndex]
1188
+ .filterCustomTreeItems
1189
+ ) {
840
1190
  columns[i] = {
841
1191
  ...columns[i],
842
- defaultFilteredValue: defaultFilteredValues[columns[i].dataIndex],
1192
+ defaultFilteredValue:
1193
+ defaultFilteredValues[columns[i].dataIndex],
843
1194
  filterMode: 'tree',
844
- filters: filterOptions[columns[i].dataIndex].filterCustomTreeItems,
845
- onFilter: (value, record) => true // 契合后端刷新模式
846
- }
1195
+ filters:
1196
+ filterOptions[columns[i].dataIndex]
1197
+ .filterCustomTreeItems,
1198
+ onFilter: (value, record) => true, // 契合后端刷新模式
1199
+ };
847
1200
  } else {
848
1201
  columns[i] = {
849
1202
  ...columns[i],
850
1203
  filters: [],
851
- onFilter: (value, record) => true
852
- }
1204
+ onFilter: (value, record) => true,
1205
+ };
853
1206
  }
854
1207
  } else {
855
1208
  // 否则则一律视为'checkbox'模式
856
1209
  // 若当前字段对应filterOptions子元素下有filterCustomItems属性
857
1210
  // 则为其添加自定义选项
858
- if (filterOptions[columns[i].dataIndex].hasOwnProperty('filterCustomItems')) {
1211
+ if (
1212
+ filterOptions[columns[i].dataIndex].hasOwnProperty(
1213
+ 'filterCustomItems'
1214
+ )
1215
+ ) {
859
1216
  columns[i] = {
860
1217
  ...columns[i],
861
- defaultFilteredValue: defaultFilteredValues[columns[i].dataIndex],
862
- filters: filterOptions[columns[i].dataIndex].filterCustomItems
863
- .map(value => ({ text: (value || value === 0) ? value.toString() : '', value: value })),
1218
+ defaultFilteredValue:
1219
+ defaultFilteredValues[columns[i].dataIndex],
1220
+ filters: filterOptions[
1221
+ columns[i].dataIndex
1222
+ ].filterCustomItems.map((value) => ({
1223
+ text:
1224
+ value || value === 0
1225
+ ? value.toString()
1226
+ : '',
1227
+ value: value,
1228
+ })),
864
1229
  onFilter: (value, record) => true, // 契合后端刷新模式
865
- filterMultiple: filterOptions[columns[i].dataIndex].filterMultiple,
866
- filterSearch: filterOptions[columns[i].dataIndex].filterSearch
867
- }
1230
+ filterMultiple:
1231
+ filterOptions[columns[i].dataIndex]
1232
+ .filterMultiple,
1233
+ filterSearch:
1234
+ filterOptions[columns[i].dataIndex]
1235
+ .filterSearch,
1236
+ };
868
1237
  } else {
869
1238
  columns[i] = {
870
1239
  ...columns[i],
871
1240
  filters: [],
872
- onFilter: (value, record) => true
873
- }
1241
+ onFilter: (value, record) => true,
1242
+ };
874
1243
  }
875
1244
  }
876
1245
  }
@@ -883,8 +1252,8 @@ const AntdTable = (props) => {
883
1252
  multiple: false,
884
1253
  forceCompareModes: {},
885
1254
  customOrders: {},
886
- ...sortOptions
887
- }
1255
+ ...sortOptions,
1256
+ };
888
1257
 
889
1258
  // 配置字段排序参数
890
1259
  for (let i = 0; i < sortOptions.sortDataIndexes.length; i++) {
@@ -892,82 +1261,113 @@ const AntdTable = (props) => {
892
1261
  // 若sortOptions与data中本轮迭代到的dataIndex一致
893
1262
  if (sortOptions.sortDataIndexes[i] === columns[j].dataIndex) {
894
1263
  // 根据是否组合排序模式来决定当前字段的排序参数设置
895
- columns[j]['sorter'] = {
1264
+ columns[j].sorter = {
896
1265
  compare: (a, b) => {
897
1266
  // 当渲染模式为server-side时,禁用前端排序操作
898
1267
  if (mode === 'server-side') {
899
- return 0
900
- } else {
901
- // 初始化排序直接比较值
902
- let valueA = null
903
- let valueB = null
904
- // 兼容各种具有单个值的再渲染模式,提取待比较的成对数据
905
- if (a[columns[j].dataIndex]?.content || b[columns[j].dataIndex]?.content) {
906
- valueA = a[columns[j].dataIndex]?.content
907
- valueB = b[columns[j].dataIndex]?.content
908
- } else if (a[columns[j].dataIndex]?.text || b[columns[j].dataIndex]?.text) {
909
- valueA = a[columns[j].dataIndex]?.text
910
- valueB = b[columns[j].dataIndex]?.text
911
- } else if (a[columns[j].dataIndex]?.label || b[columns[j].dataIndex]?.label) {
912
- valueA = a[columns[j].dataIndex]?.label
913
- valueB = b[columns[j].dataIndex]?.label
914
- } else if (a[columns[j].dataIndex]?.tag || b[columns[j].dataIndex]?.tag) {
915
- valueA = a[columns[j].dataIndex]?.tag
916
- valueB = b[columns[j].dataIndex]?.tag
917
- } else if (a[columns[j].dataIndex]?.toString || b[columns[j].dataIndex]?.toString) {
918
- valueA = a[columns[j].dataIndex]
919
- valueB = b[columns[j].dataIndex]
920
- }
921
- // 根据valueA、valueB的数据类型返回不同逻辑的判断结果
922
- // 若valueA、valueB至少有1个为数值型,则视作数值型比较
923
- // 若当前字段使用了强制比较模式
924
- if (sortOptions.forceCompareModes[columns[j].dataIndex]) {
925
- // 数值比较模式
926
- if (sortOptions.forceCompareModes[columns[j].dataIndex] === 'number') {
927
- // 强制转换比较值为数值型
928
- let numberA = Number(valueA)
929
- let numberB = Number(valueB)
930
- if (numberA < numberB) {
931
- return -1;
932
- } else if (numberA > numberB) {
933
- return 1;
934
- }
935
- return 0;
936
- } else if (sortOptions.forceCompareModes[columns[j].dataIndex] === 'custom' &&
937
- sortOptions.customOrders[columns[j].dataIndex]) {
938
- // 自定义顺序模式
939
- // 查询比较值在对应的自定义顺序中的索引
940
- let orderA = sortOptions.customOrders[columns[j].dataIndex].indexOf(valueA)
941
- let orderB = sortOptions.customOrders[columns[j].dataIndex].indexOf(valueB)
942
- if (orderA < orderB) {
943
- return 1;
944
- } else if (orderA > orderB) {
945
- return -1;
946
- }
947
- return 0;
1268
+ return 0;
1269
+ }
1270
+ // 初始化排序直接比较值
1271
+ let valueA = null;
1272
+ let valueB = null;
1273
+ // 兼容各种具有单个值的再渲染模式,提取待比较的成对数据
1274
+ if (
1275
+ a[columns[j].dataIndex]?.content ||
1276
+ b[columns[j].dataIndex]?.content
1277
+ ) {
1278
+ valueA = a[columns[j].dataIndex]?.content;
1279
+ valueB = b[columns[j].dataIndex]?.content;
1280
+ } else if (
1281
+ a[columns[j].dataIndex]?.text ||
1282
+ b[columns[j].dataIndex]?.text
1283
+ ) {
1284
+ valueA = a[columns[j].dataIndex]?.text;
1285
+ valueB = b[columns[j].dataIndex]?.text;
1286
+ } else if (
1287
+ a[columns[j].dataIndex]?.label ||
1288
+ b[columns[j].dataIndex]?.label
1289
+ ) {
1290
+ valueA = a[columns[j].dataIndex]?.label;
1291
+ valueB = b[columns[j].dataIndex]?.label;
1292
+ } else if (
1293
+ a[columns[j].dataIndex]?.tag ||
1294
+ b[columns[j].dataIndex]?.tag
1295
+ ) {
1296
+ valueA = a[columns[j].dataIndex]?.tag;
1297
+ valueB = b[columns[j].dataIndex]?.tag;
1298
+ } else if (
1299
+ a[columns[j].dataIndex]?.toString ||
1300
+ b[columns[j].dataIndex]?.toString
1301
+ ) {
1302
+ valueA = a[columns[j].dataIndex];
1303
+ valueB = b[columns[j].dataIndex];
1304
+ }
1305
+ // 根据valueA、valueB的数据类型返回不同逻辑的判断结果
1306
+ // 若valueA、valueB至少有1个为数值型,则视作数值型比较
1307
+ // 若当前字段使用了强制比较模式
1308
+ if (
1309
+ sortOptions.forceCompareModes[columns[j].dataIndex]
1310
+ ) {
1311
+ // 数值比较模式
1312
+ if (
1313
+ sortOptions.forceCompareModes[
1314
+ columns[j].dataIndex
1315
+ ] === 'number'
1316
+ ) {
1317
+ // 强制转换比较值为数值型
1318
+ const numberA = Number(valueA);
1319
+ const numberB = Number(valueB);
1320
+ if (numberA < numberB) {
1321
+ return -1;
1322
+ } else if (numberA > numberB) {
1323
+ return 1;
948
1324
  }
949
- } else {
950
- // 默认自动判断
951
- if (isNumber(valueA) || isNumber(valueB)) {
952
- return valueA - valueB
953
- } else {
954
- // 否则均视作字符型比较
955
- let stringA = valueA?.toString().toUpperCase()
956
- let stringB = valueB?.toString().toUpperCase()
957
- if (stringA < stringB) {
958
- return -1;
959
- } else if (stringA > stringB) {
960
- return 1;
961
- }
962
- return 0;
1325
+ return 0;
1326
+ } else if (
1327
+ sortOptions.forceCompareModes[
1328
+ columns[j].dataIndex
1329
+ ] === 'custom' &&
1330
+ sortOptions.customOrders[columns[j].dataIndex]
1331
+ ) {
1332
+ // 自定义顺序模式
1333
+ // 查询比较值在对应的自定义顺序中的索引
1334
+ const orderA =
1335
+ sortOptions.customOrders[
1336
+ columns[j].dataIndex
1337
+ ].indexOf(valueA);
1338
+ const orderB =
1339
+ sortOptions.customOrders[
1340
+ columns[j].dataIndex
1341
+ ].indexOf(valueB);
1342
+ if (orderA < orderB) {
1343
+ return 1;
1344
+ } else if (orderA > orderB) {
1345
+ return -1;
963
1346
  }
1347
+ return 0;
1348
+ }
1349
+ } else {
1350
+ // 默认自动判断
1351
+ if (isNumber(valueA) || isNumber(valueB)) {
1352
+ return valueA - valueB;
964
1353
  }
1354
+ // 否则均视作字符型比较
1355
+ const stringA = valueA?.toString().toUpperCase();
1356
+ const stringB = valueB?.toString().toUpperCase();
1357
+ if (stringA < stringB) {
1358
+ return -1;
1359
+ } else if (stringA > stringB) {
1360
+ return 1;
1361
+ }
1362
+ return 0;
965
1363
  }
966
1364
  },
967
- multiple: sortOptions['multiple'] ?
968
- (sortOptions['multiple'] === 'auto' ? 1 : sortOptions.sortDataIndexes.length - i) :
969
- undefined
970
- }
1365
+ multiple: sortOptions.multiple
1366
+ ? sortOptions.multiple === 'auto'
1367
+ ? 1
1368
+ : sortOptions.sortDataIndexes.length - i
1369
+ : undefined,
1370
+ };
971
1371
  }
972
1372
  }
973
1373
  }
@@ -975,291 +1375,427 @@ const AntdTable = (props) => {
975
1375
  // 配置各种再渲染模式
976
1376
  for (let i = 0; i < columns.length; i++) {
977
1377
  // 当前字段具有renderOptions参数时且renderOptions参数是字典时
978
- if (columns[i]['renderOptions'] && columns[i]['renderOptions']['renderType']) {
1378
+ if (columns[i].renderOptions && columns[i].renderOptions.renderType) {
979
1379
  // ellipsis模式
980
- if (columns[i]['renderOptions']['renderType'] === 'ellipsis') {
981
- columns[i]['ellipsis'] = {
982
- showTitle: false
983
- }
984
- columns[i]['render'] = content => (
985
- <Text ellipsis={{ tooltip: content }}>
986
- {content}
987
- </Text>
988
- )
1380
+ if (columns[i].renderOptions.renderType === 'ellipsis') {
1381
+ columns[i].ellipsis = {
1382
+ showTitle: false,
1383
+ };
1384
+ columns[i].render = (content) => (
1385
+ <Text ellipsis={{ tooltip: content }}>{content}</Text>
1386
+ );
989
1387
  }
990
1388
  // row-merge模式
991
- else if (columns[i]['renderOptions']['renderType'] === 'row-merge') {
992
- columns[i]['render'] = (content, record, index) => {
1389
+ else if (columns[i].renderOptions.renderType === 'row-merge') {
1390
+ columns[i].render = (content, record, index) => {
993
1391
  return {
994
1392
  children: content.content,
995
1393
  props: {
996
- rowSpan: content.rowSpan
997
- }
1394
+ rowSpan: content.rowSpan,
1395
+ },
998
1396
  };
999
- }
1397
+ };
1000
1398
  }
1001
1399
  // link模式
1002
- else if (columns[i]['renderOptions']['renderType'] === 'link') {
1400
+ else if (columns[i].renderOptions.renderType === 'link') {
1003
1401
  // 检查renderLinkText参数是否定义
1004
- if (columns[i]['renderOptions']['renderLinkText']) {
1005
- columns[i]['render'] = content => {
1006
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1402
+ if (columns[i].renderOptions.renderLinkText) {
1403
+ columns[i].render = (content) => {
1404
+ if (
1405
+ (!content || isEmpty(content)) &&
1406
+ content !== 0 &&
1407
+ content !== ''
1408
+ ) {
1007
1409
  return null;
1008
1410
  }
1009
- return (
1010
- columns[i]['renderOptions']['likeDccLink'] ?
1011
- (
1012
- <UtilsLink href={content.disabled ? undefined : content.href}
1013
- target={content.target ? content.target : '_blank'}
1014
- disabled={content.disabled}>
1015
- {content.content ? content.content : columns[i]['renderOptions']['renderLinkText']}
1016
- </UtilsLink>
1017
- ) :
1018
- (
1019
- <a href={content.disabled ? undefined : content.href}
1020
- target={content.target ? content.target : '_blank'}
1021
- disabled={content.disabled}>
1022
- {content.content ? content.content : columns[i]['renderOptions']['renderLinkText']}
1023
- </a>
1024
- )
1411
+ return columns[i].renderOptions.likeDccLink ? (
1412
+ <UtilsLink
1413
+ href={
1414
+ content.disabled ? undefined : content.href
1415
+ }
1416
+ target={
1417
+ content.target ? content.target : '_blank'
1418
+ }
1419
+ disabled={content.disabled}
1420
+ >
1421
+ {content.content
1422
+ ? content.content
1423
+ : columns[i].renderOptions.renderLinkText}
1424
+ </UtilsLink>
1425
+ ) : (
1426
+ <a
1427
+ href={
1428
+ content.disabled ? undefined : content.href
1429
+ }
1430
+ target={
1431
+ content.target ? content.target : '_blank'
1432
+ }
1433
+ disabled={content.disabled}
1434
+ >
1435
+ {content.content
1436
+ ? content.content
1437
+ : columns[i].renderOptions.renderLinkText}
1438
+ </a>
1025
1439
  );
1026
- }
1440
+ };
1027
1441
  } else {
1028
- columns[i]['render'] = content => {
1029
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1442
+ columns[i].render = (content) => {
1443
+ if (
1444
+ (!content || isEmpty(content)) &&
1445
+ content !== 0 &&
1446
+ content !== ''
1447
+ ) {
1030
1448
  return null;
1031
1449
  }
1032
- return (
1033
- columns[i]['renderOptions']['likeDccLink'] ?
1034
- (
1035
- <UtilsLink href={content.disabled ? undefined : content.href}
1036
- target={content.target ? content.target : '_blank'}
1037
- disabled={content.disabled}>
1038
- {content.content ? content.content : ' '}
1039
- </UtilsLink>
1040
- ) :
1041
- (
1042
- <a href={content.disabled ? undefined : content.href}
1043
- target={content.target ? content.target : '_blank'}
1044
- disabled={content.disabled}>
1045
- {content.content ? content.content : ' '}
1046
- </a>
1047
- )
1450
+ return columns[i].renderOptions.likeDccLink ? (
1451
+ <UtilsLink
1452
+ href={
1453
+ content.disabled ? undefined : content.href
1454
+ }
1455
+ target={
1456
+ content.target ? content.target : '_blank'
1457
+ }
1458
+ disabled={content.disabled}
1459
+ >
1460
+ {content.content ? content.content : ' '}
1461
+ </UtilsLink>
1462
+ ) : (
1463
+ <a
1464
+ href={
1465
+ content.disabled ? undefined : content.href
1466
+ }
1467
+ target={
1468
+ content.target ? content.target : '_blank'
1469
+ }
1470
+ disabled={content.disabled}
1471
+ >
1472
+ {content.content ? content.content : ' '}
1473
+ </a>
1048
1474
  );
1049
- }
1475
+ };
1050
1476
  }
1051
1477
  }
1052
1478
  // copyable模式
1053
- else if (columns[i]['renderOptions']['renderType'] === 'copyable') {
1054
- columns[i]['render'] = content => {
1055
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1479
+ else if (columns[i].renderOptions.renderType === 'copyable') {
1480
+ columns[i].render = (content) => {
1481
+ if (
1482
+ (!content || isEmpty(content)) &&
1483
+ content !== 0 &&
1484
+ content !== ''
1485
+ ) {
1056
1486
  return null;
1057
1487
  }
1058
- return (
1059
- <Text copyable={true}>
1060
- {content}
1061
- </Text>
1062
- )
1063
- }
1488
+ return <Text copyable={true}>{content}</Text>;
1489
+ };
1064
1490
  }
1065
1491
  // dropdown模式
1066
- else if (columns[i]['renderOptions']['renderType'] === 'dropdown') {
1067
- columns[i]['render'] = (menuItems, record) => {
1492
+ else if (columns[i].renderOptions.renderType === 'dropdown') {
1493
+ columns[i].render = (menuItems, record) => {
1068
1494
  // 针对空值进行错误处理
1069
- menuItems = menuItems || []
1495
+ menuItems = menuItems || [];
1070
1496
  return (
1071
1497
  <Dropdown
1072
1498
  overlay={
1073
- <Menu onClick={(item, key, keyPath, domEvent) => {
1074
- setTimeout(function () {
1075
- setProps({
1076
- nClicksDropdownItem: nClicksDropdownItem + 1,
1077
- recentlyClickedDropdownItemTitle: item.key,
1078
- recentlyDropdownItemClickedDataIndex: columns[i].dataIndex,
1079
- // 忽略组件型字段键值对
1080
- recentlyDropdownItemClickedRow: omitBy(record, value => value?.$$typeof)
1081
- })
1082
- }, 200);
1083
- }}>
1084
- {
1085
- menuItems.map(
1086
- menuItem => (
1087
- menuItem ?
1088
- // 判断isDivider参数是否不为false
1089
- (
1090
- menuItem.isDivider ?
1091
- <Menu.Divider /> :
1092
- <Menu.Item
1499
+ <Menu
1500
+ onClick={(item, key, keyPath, domEvent) => {
1501
+ setTimeout(function () {
1502
+ setProps({
1503
+ nClicksDropdownItem:
1504
+ nClicksDropdownItem + 1,
1505
+ recentlyClickedDropdownItemTitle:
1506
+ item.key,
1507
+ recentlyDropdownItemClickedDataIndex:
1508
+ columns[i].dataIndex,
1509
+ // 忽略组件型字段键值对
1510
+ recentlyDropdownItemClickedRow:
1511
+ omitBy(
1512
+ record,
1513
+ (value) =>
1514
+ value?.$$typeof
1515
+ ),
1516
+ });
1517
+ }, 200);
1518
+ }}
1519
+ >
1520
+ {menuItems.map((menuItem) =>
1521
+ menuItem ? (
1522
+ // 判断isDivider参数是否不为false
1523
+ menuItem.isDivider ? (
1524
+ <Menu.Divider />
1525
+ ) : (
1526
+ <Menu.Item
1527
+ icon={
1528
+ menuItem.icon &&
1529
+ (menuItem.iconRenderer ===
1530
+ 'fontawesome' ? (
1531
+ React.createElement(
1532
+ 'i',
1533
+ {
1534
+ className:
1535
+ menuItem.icon,
1536
+ }
1537
+ )
1538
+ ) : (
1539
+ <AntdIcon
1093
1540
  icon={
1094
- menuItem.icon && (
1095
- menuItem.iconRenderer === 'fontawesome' ?
1096
- (
1097
- React.createElement(
1098
- 'i',
1099
- {
1100
- className: menuItem.icon
1101
- }
1102
- )
1103
- ) :
1104
- (
1105
- <AntdIcon icon={menuItem.icon} />
1106
- )
1107
- )
1541
+ menuItem.icon
1108
1542
  }
1109
- disabled={menuItem.disabled}
1110
- key={menuItem.title}>
1111
- <a >{menuItem.title}</a>
1112
- </Menu.Item>
1113
- ) :
1114
- null
1543
+ />
1544
+ ))
1545
+ }
1546
+ disabled={menuItem.disabled}
1547
+ key={menuItem.title}
1548
+ >
1549
+ <a>{menuItem.title}</a>
1550
+ </Menu.Item>
1115
1551
  )
1116
- )
1117
- }
1552
+ ) : null
1553
+ )}
1118
1554
  </Menu>
1119
1555
  }
1120
- arrow={columns[i]['renderOptions']?.dropdownProps?.arrow}
1121
- disabled={columns[i]['renderOptions']?.dropdownProps?.disabled || menuItems.length === 0}
1122
- overlayClassName={columns[i]['renderOptions']?.dropdownProps?.overlayClassName}
1123
- overlayStyle={columns[i]['renderOptions']?.dropdownProps?.overlayStyle}
1124
- placement={columns[i]['renderOptions']?.dropdownProps?.placement}
1556
+ arrow={
1557
+ columns[i].renderOptions?.dropdownProps?.arrow
1558
+ }
1559
+ disabled={
1560
+ columns[i].renderOptions?.dropdownProps
1561
+ ?.disabled || menuItems.length === 0
1562
+ }
1563
+ overlayClassName={
1564
+ columns[i].renderOptions?.dropdownProps
1565
+ ?.overlayClassName
1566
+ }
1567
+ overlayStyle={
1568
+ columns[i].renderOptions?.dropdownProps
1569
+ ?.overlayStyle
1570
+ }
1571
+ placement={
1572
+ columns[i].renderOptions?.dropdownProps
1573
+ ?.placement
1574
+ }
1125
1575
  trigger={
1126
- columns[i]['renderOptions']?.dropdownProps?.trigger ?
1127
- [columns[i]['renderOptions'].dropdownProps.trigger] : ['hover']
1576
+ columns[i].renderOptions?.dropdownProps?.trigger
1577
+ ? [
1578
+ columns[i].renderOptions.dropdownProps
1579
+ .trigger,
1580
+ ]
1581
+ : ['hover']
1128
1582
  }
1129
- getPopupContainer={containerId ? () => (document.getElementById(containerId) ? document.getElementById(containerId) : document.body) : undefined}>
1130
- <a className="ant-dropdown-link"
1131
- onClick={e => e.preventDefault()}>
1132
- {columns[i]['renderOptions']?.dropdownProps?.title} <DownOutlined />
1583
+ getPopupContainer={
1584
+ containerId
1585
+ ? () =>
1586
+ document.getElementById(containerId)
1587
+ ? document.getElementById(
1588
+ containerId
1589
+ )
1590
+ : document.body
1591
+ : undefined
1592
+ }
1593
+ >
1594
+ <a
1595
+ className="ant-dropdown-link"
1596
+ onClick={(e) => e.preventDefault()}
1597
+ >
1598
+ {columns[i].renderOptions?.dropdownProps?.title}{' '}
1599
+ <DownOutlined />
1133
1600
  </a>
1134
1601
  </Dropdown>
1135
1602
  );
1136
- }
1603
+ };
1137
1604
  }
1138
1605
  // dropdown-links模式
1139
- else if (columns[i]['renderOptions']['renderType'] === 'dropdown-links') {
1140
- columns[i]['render'] = menuItems => {
1606
+ else if (columns[i].renderOptions.renderType === 'dropdown-links') {
1607
+ columns[i].render = (menuItems) => {
1141
1608
  // 针对空值进行错误处理
1142
- menuItems = menuItems || []
1609
+ menuItems = menuItems || [];
1143
1610
  return (
1144
1611
  <Dropdown
1145
1612
  overlay={
1146
1613
  <Menu>
1147
- {
1148
- menuItems.map(
1149
- menuItem => (
1150
- menuItem ?
1151
- // 判断isDivider参数是否不为false
1152
- (
1153
- menuItem.isDivider ?
1154
- <Menu.Divider /> :
1155
- <Menu.Item
1614
+ {menuItems.map((menuItem) =>
1615
+ menuItem ? (
1616
+ // 判断isDivider参数是否不为false
1617
+ menuItem.isDivider ? (
1618
+ <Menu.Divider />
1619
+ ) : (
1620
+ <Menu.Item
1621
+ icon={
1622
+ menuItem.icon &&
1623
+ (menuItem.iconRenderer ===
1624
+ 'fontawesome' ? (
1625
+ React.createElement(
1626
+ 'i',
1627
+ {
1628
+ className:
1629
+ menuItem.icon,
1630
+ }
1631
+ )
1632
+ ) : (
1633
+ <AntdIcon
1156
1634
  icon={
1157
- menuItem.icon && (
1158
- menuItem.iconRenderer === 'fontawesome' ?
1159
- (
1160
- React.createElement(
1161
- 'i',
1162
- {
1163
- className: menuItem.icon
1164
- }
1165
- )
1166
- ) :
1167
- (
1168
- <AntdIcon icon={menuItem.icon} />
1169
- )
1170
- )
1635
+ menuItem.icon
1171
1636
  }
1172
- disabled={menuItem.disabled}
1173
- key={menuItem.title}>
1174
- <a href={menuItem.href}
1175
- target={'_blank'}>
1176
- {menuItem.title}
1177
- </a>
1178
- </Menu.Item>
1179
- ) :
1180
- null
1637
+ />
1638
+ ))
1639
+ }
1640
+ disabled={menuItem.disabled}
1641
+ key={menuItem.title}
1642
+ >
1643
+ <a
1644
+ href={menuItem.href}
1645
+ target={'_blank'}
1646
+ >
1647
+ {menuItem.title}
1648
+ </a>
1649
+ </Menu.Item>
1181
1650
  )
1182
- )
1183
- }
1651
+ ) : null
1652
+ )}
1184
1653
  </Menu>
1185
1654
  }
1186
- arrow={columns[i]['renderOptions']?.dropdownProps?.arrow}
1187
- disabled={columns[i]['renderOptions']?.dropdownProps?.disabled || menuItems.length === 0}
1188
- overlayClassName={columns[i]['renderOptions']?.dropdownProps?.overlayClassName}
1189
- overlayStyle={columns[i]['renderOptions']?.dropdownProps?.overlayStyle}
1190
- placement={columns[i]['renderOptions']?.dropdownProps?.placement}
1655
+ arrow={
1656
+ columns[i].renderOptions?.dropdownProps?.arrow
1657
+ }
1658
+ disabled={
1659
+ columns[i].renderOptions?.dropdownProps
1660
+ ?.disabled || menuItems.length === 0
1661
+ }
1662
+ overlayClassName={
1663
+ columns[i].renderOptions?.dropdownProps
1664
+ ?.overlayClassName
1665
+ }
1666
+ overlayStyle={
1667
+ columns[i].renderOptions?.dropdownProps
1668
+ ?.overlayStyle
1669
+ }
1670
+ placement={
1671
+ columns[i].renderOptions?.dropdownProps
1672
+ ?.placement
1673
+ }
1191
1674
  trigger={
1192
- columns[i]['renderOptions']?.dropdownProps?.trigger ?
1193
- [columns[i]['renderOptions'].dropdownProps.trigger] : ['hover']
1675
+ columns[i].renderOptions?.dropdownProps?.trigger
1676
+ ? [
1677
+ columns[i].renderOptions.dropdownProps
1678
+ .trigger,
1679
+ ]
1680
+ : ['hover']
1681
+ }
1682
+ getPopupContainer={
1683
+ containerId
1684
+ ? () =>
1685
+ document.getElementById(containerId)
1686
+ ? document.getElementById(
1687
+ containerId
1688
+ )
1689
+ : document.body
1690
+ : undefined
1194
1691
  }
1195
- getPopupContainer={containerId ? () => (document.getElementById(containerId) ? document.getElementById(containerId) : document.body) : undefined}>
1196
- <a className="ant-dropdown-link"
1197
- onClick={e => e.preventDefault()}>
1198
- {columns[i]['renderOptions']?.dropdownProps?.title} <DownOutlined />
1692
+ >
1693
+ <a
1694
+ className="ant-dropdown-link"
1695
+ onClick={(e) => e.preventDefault()}
1696
+ >
1697
+ {columns[i].renderOptions?.dropdownProps?.title}{' '}
1698
+ <DownOutlined />
1199
1699
  </a>
1200
1700
  </Dropdown>
1201
1701
  );
1202
- }
1702
+ };
1203
1703
  }
1204
1704
  // ellipsis-copyable模式
1205
- else if (columns[i]['renderOptions']['renderType'] === 'ellipsis-copyable') {
1206
- columns[i]['ellipsis'] = {
1207
- showTitle: false
1208
- }
1209
- columns[i]['render'] = content => {
1210
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1705
+ else if (
1706
+ columns[i].renderOptions.renderType === 'ellipsis-copyable'
1707
+ ) {
1708
+ columns[i].ellipsis = {
1709
+ showTitle: false,
1710
+ };
1711
+ columns[i].render = (content) => {
1712
+ if (
1713
+ (!content || isEmpty(content)) &&
1714
+ content !== 0 &&
1715
+ content !== ''
1716
+ ) {
1211
1717
  return null;
1212
1718
  }
1213
1719
  return (
1214
1720
  <Text copyable={true} ellipsis={{ tooltip: content }}>
1215
1721
  {content}
1216
1722
  </Text>
1217
- )
1218
- }
1723
+ );
1724
+ };
1219
1725
  }
1220
1726
  // corner-mark模式
1221
- else if (columns[i]['renderOptions']['renderType'] === 'corner-mark') {
1222
- columns[i]['render'] = content => {
1223
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1727
+ else if (columns[i].renderOptions.renderType === 'corner-mark') {
1728
+ columns[i].render = (content) => {
1729
+ if (
1730
+ (!content || isEmpty(content)) &&
1731
+ content !== 0 &&
1732
+ content !== ''
1733
+ ) {
1224
1734
  return null;
1225
1735
  }
1226
1736
  return (
1227
- <div className={content.placement ? 'ant-corner-mark-' + content.placement : 'ant-corner-mark-top-right'}
1737
+ <div
1738
+ className={
1739
+ content.placement
1740
+ ? 'ant-corner-mark-' + content.placement
1741
+ : 'ant-corner-mark-top-right'
1742
+ }
1228
1743
  style={{
1229
- '--ant-corner-mark-color': content.hide ? 'transparent' : (content.color ? content.color : '#1890ff'),
1230
- '--ant-corner-mark-transform': `translate(${content.offsetX ? content.offsetX : 0}px, ${content.offsetY ? content.offsetY : 0}px)`
1231
- }}>
1744
+ '--ant-corner-mark-color': content.hide
1745
+ ? 'transparent'
1746
+ : content.color
1747
+ ? content.color
1748
+ : '#1890ff',
1749
+ '--ant-corner-mark-transform': `translate(${content.offsetX ? content.offsetX : 0}px, ${content.offsetY ? content.offsetY : 0}px)`,
1750
+ }}
1751
+ >
1232
1752
  {content.content}
1233
1753
  </div>
1234
- )
1235
- }
1754
+ );
1755
+ };
1236
1756
  }
1237
1757
  // status-badge模式
1238
- else if (columns[i]['renderOptions']['renderType'] === 'status-badge') {
1239
- columns[i]['render'] = content => {
1240
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1758
+ else if (columns[i].renderOptions.renderType === 'status-badge') {
1759
+ columns[i].render = (content) => {
1760
+ if (
1761
+ (!content || isEmpty(content)) &&
1762
+ content !== 0 &&
1763
+ content !== ''
1764
+ ) {
1241
1765
  return null;
1242
1766
  }
1243
1767
  return (
1244
1768
  <Badge status={content.status} text={content.text} />
1245
- )
1246
- }
1769
+ );
1770
+ };
1247
1771
  }
1248
1772
  // image模式
1249
- else if (columns[i]['renderOptions']['renderType'] === 'image') {
1250
- columns[i]['render'] = content => {
1251
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1773
+ else if (columns[i].renderOptions.renderType === 'image') {
1774
+ columns[i].render = (content) => {
1775
+ if (
1776
+ (!content || isEmpty(content)) &&
1777
+ content !== 0 &&
1778
+ content !== ''
1779
+ ) {
1252
1780
  return null;
1253
1781
  }
1254
1782
  return (
1255
- <Image src={content.src} height={content.height} preview={content.preview} />
1256
- )
1257
- }
1783
+ <Image
1784
+ src={content.src}
1785
+ height={content.height}
1786
+ preview={content.preview}
1787
+ />
1788
+ );
1789
+ };
1258
1790
  }
1259
1791
  // image-avatar模式
1260
- else if (columns[i]['renderOptions']['renderType'] === 'image-avatar') {
1261
- columns[i]['render'] = content => {
1262
- if ((!content || isEmpty(content)) && content !== 0 && content !== '') {
1792
+ else if (columns[i].renderOptions.renderType === 'image-avatar') {
1793
+ columns[i].render = (content) => {
1794
+ if (
1795
+ (!content || isEmpty(content)) &&
1796
+ content !== 0 &&
1797
+ content !== ''
1798
+ ) {
1263
1799
  return null;
1264
1800
  }
1265
1801
  return (
@@ -1268,15 +1804,16 @@ const AntdTable = (props) => {
1268
1804
  size={content?.size}
1269
1805
  shape={content?.shape}
1270
1806
  />
1271
- )
1272
- }
1807
+ );
1808
+ };
1273
1809
  }
1274
1810
  // checkbox模式
1275
- else if (columns[i]['renderOptions']['renderType'] === 'checkbox') {
1276
- columns[i]['render'] = (content, record) => {
1277
- const currentDataIndex = columns[i]['dataIndex']
1811
+ else if (columns[i].renderOptions.renderType === 'checkbox') {
1812
+ columns[i].render = (content, record) => {
1813
+ const currentDataIndex = columns[i].dataIndex;
1278
1814
  return (
1279
- <Checkbox checked={content.checked}
1815
+ <Checkbox
1816
+ checked={content.checked}
1280
1817
  disabled={content.disabled}
1281
1818
  onChange={(e) => {
1282
1819
  // 修改对应行对应字段item.checked值
@@ -1286,36 +1823,41 @@ const AntdTable = (props) => {
1286
1823
  if (item.key === record.key) {
1287
1824
  data[i][currentDataIndex] = {
1288
1825
  ...record[currentDataIndex],
1289
- checked: e.target.checked
1290
- }
1291
- throw new Error("目标已修改");
1826
+ checked: e.target.checked,
1827
+ };
1828
+ throw new Error('目标已修改');
1292
1829
  }
1293
1830
  });
1294
- } catch (e) {
1295
- };
1831
+ } catch (e) {}
1296
1832
 
1297
1833
  setTimeout(function () {
1298
1834
  setProps({
1299
1835
  data: data,
1300
1836
  // 忽略组件型字段键值对
1301
- recentlyCheckedRow: omitBy(record, value => value?.$$typeof),
1837
+ recentlyCheckedRow: omitBy(
1838
+ record,
1839
+ (value) => value?.$$typeof
1840
+ ),
1302
1841
  recentlyCheckedLabel: content.label,
1303
- recentlyCheckedDataIndex: columns[i]['dataIndex'],
1304
- recentlyCheckedStatus: e.target.checked
1305
- })
1842
+ recentlyCheckedDataIndex:
1843
+ columns[i].dataIndex,
1844
+ recentlyCheckedStatus: e.target.checked,
1845
+ });
1306
1846
  }, 200);
1307
- }}>
1847
+ }}
1848
+ >
1308
1849
  {content.label}
1309
1850
  </Checkbox>
1310
1851
  );
1311
- }
1852
+ };
1312
1853
  }
1313
1854
  // switch模式
1314
- else if (columns[i]['renderOptions']['renderType'] === 'switch') {
1315
- columns[i]['render'] = (content, record) => {
1316
- const currentDataIndex = columns[i]['dataIndex']
1855
+ else if (columns[i].renderOptions.renderType === 'switch') {
1856
+ columns[i].render = (content, record) => {
1857
+ const currentDataIndex = columns[i].dataIndex;
1317
1858
  return (
1318
- <Switch checked={content.checked}
1859
+ <Switch
1860
+ checked={content.checked}
1319
1861
  disabled={content.disabled}
1320
1862
  checkedChildren={content.checkedChildren}
1321
1863
  unCheckedChildren={content.unCheckedChildren}
@@ -1327,42 +1869,50 @@ const AntdTable = (props) => {
1327
1869
  if (item.key === record.key) {
1328
1870
  data[i][currentDataIndex] = {
1329
1871
  ...record[currentDataIndex],
1330
- checked: checked
1331
- }
1332
- throw new Error("目标已修改");
1872
+ checked: checked,
1873
+ };
1874
+ throw new Error('目标已修改');
1333
1875
  }
1334
1876
  });
1335
- } catch (e) {
1336
- };
1877
+ } catch (e) {}
1337
1878
 
1338
1879
  setTimeout(function () {
1339
1880
  setProps({
1340
1881
  data: data,
1341
1882
  // 忽略组件型字段键值对
1342
- recentlySwitchRow: omitBy(record, value => value?.$$typeof),
1343
- recentlySwitchDataIndex: columns[i]['dataIndex'],
1344
- recentlySwitchStatus: checked
1345
- })
1883
+ recentlySwitchRow: omitBy(
1884
+ record,
1885
+ (value) => value?.$$typeof
1886
+ ),
1887
+ recentlySwitchDataIndex:
1888
+ columns[i].dataIndex,
1889
+ recentlySwitchStatus: checked,
1890
+ });
1346
1891
  }, 200);
1347
- }} />
1892
+ }}
1893
+ />
1348
1894
  );
1349
- }
1895
+ };
1350
1896
  }
1351
1897
  // select模式
1352
- else if (columns[i]['renderOptions']['renderType'] === 'select') {
1353
- columns[i]['render'] = (content, record) => {
1354
- const currentDataIndex = columns[i]['dataIndex']
1898
+ else if (columns[i].renderOptions.renderType === 'select') {
1899
+ columns[i].render = (content, record) => {
1900
+ const currentDataIndex = columns[i].dataIndex;
1355
1901
  // 针对空值进行错误处理
1356
- content = content || {}
1902
+ content = content || {};
1357
1903
  return (
1358
1904
  <Select
1359
1905
  className={content.className}
1360
1906
  style={{
1361
1907
  width: '100%',
1362
1908
  textAlign: 'left',
1363
- ...content.style
1909
+ ...content.style,
1364
1910
  }}
1365
- showSearch={isUndefined(content.showSearch) ? true : content.showSearch}
1911
+ showSearch={
1912
+ isUndefined(content.showSearch)
1913
+ ? true
1914
+ : content.showSearch
1915
+ }
1366
1916
  options={content.options}
1367
1917
  listHeight={content.listHeight}
1368
1918
  mode={content.mode}
@@ -1383,259 +1933,321 @@ const AntdTable = (props) => {
1383
1933
  if (item.key === record.key) {
1384
1934
  data[i][currentDataIndex] = {
1385
1935
  ...record[currentDataIndex],
1386
- value: value
1387
- }
1936
+ value: value,
1937
+ };
1388
1938
  // 提前打断循环过程
1389
- throw new Error("目标已修改");
1939
+ throw new Error('目标已修改');
1390
1940
  }
1391
1941
  });
1392
- } catch (e) {
1393
- };
1394
-
1395
- setTimeout(
1396
- () => {
1397
- setProps({
1398
- data: data,
1399
- // 忽略组件型字段键值对
1400
- recentlySelectRow: omitBy(record, value => value?.$$typeof),
1401
- recentlySelectDataIndex: columns[i]['dataIndex'],
1402
- recentlySelectValue: value
1403
- })
1404
- },
1405
- 200
1406
- );
1407
- }} />
1942
+ } catch (e) {}
1943
+
1944
+ setTimeout(() => {
1945
+ setProps({
1946
+ data: data,
1947
+ // 忽略组件型字段键值对
1948
+ recentlySelectRow: omitBy(
1949
+ record,
1950
+ (value) => value?.$$typeof
1951
+ ),
1952
+ recentlySelectDataIndex:
1953
+ columns[i].dataIndex,
1954
+ recentlySelectValue: value,
1955
+ });
1956
+ }, 200);
1957
+ }}
1958
+ />
1408
1959
  );
1409
- }
1960
+ };
1410
1961
  }
1411
1962
  // button模式
1412
- else if (columns[i]['renderOptions']['renderType'] === 'button') {
1963
+ else if (columns[i].renderOptions.renderType === 'button') {
1413
1964
  // 根据参数配置生成按钮
1414
- columns[i]['render'] = (content, record) => {
1965
+ columns[i].render = (content, record) => {
1415
1966
  // 合并单按钮/多按钮渲染逻辑
1416
1967
  content = Array.isArray(content) ? content : [content];
1417
1968
  return (
1418
- <Space split={columns[i]['renderOptions'].renderButtonSplit && <Divider type={"vertical"} />} wrap={true}>
1419
- {
1420
- content.map(
1421
- (content_, idx) => {
1422
- // 若当前按钮需要附带气泡确认框
1423
- if (columns[i]['renderOptions']['renderButtonPopConfirmProps'] || content_['popConfirmProps']) {
1424
- let popConfirmProps = columns[i]['renderOptions']['renderButtonPopConfirmProps'] || content_['popConfirmProps'];
1425
- let buttonElement = (
1426
- <Button
1427
- size={'small'}
1428
- type={content_.type}
1429
- color={content_.color}
1430
- variant={content_.variant}
1431
- danger={content_.danger}
1432
- disabled={content_.disabled}
1433
- style={content_.style}
1434
- icon={
1435
- content_.icon && (
1436
- content_.iconRenderer === 'fontawesome' ?
1437
- (
1438
- React.createElement(
1439
- 'i',
1440
- {
1441
- className: content_.icon
1442
- }
1443
- )
1444
- ) :
1445
- (
1446
- <AntdIcon icon={content_.icon} />
1969
+ <Space
1970
+ split={
1971
+ columns[i].renderOptions.renderButtonSplit && (
1972
+ <Divider type={'vertical'} />
1973
+ )
1974
+ }
1975
+ wrap={true}
1976
+ >
1977
+ {content.map((content_, idx) => {
1978
+ // 若当前按钮需要附带气泡确认框
1979
+ if (
1980
+ columns[i].renderOptions
1981
+ .renderButtonPopConfirmProps ||
1982
+ content_.popConfirmProps
1983
+ ) {
1984
+ const popConfirmProps =
1985
+ columns[i].renderOptions
1986
+ .renderButtonPopConfirmProps ||
1987
+ content_.popConfirmProps;
1988
+ const buttonElement = (
1989
+ <Button
1990
+ size={'small'}
1991
+ type={content_.type}
1992
+ color={content_.color}
1993
+ variant={content_.variant}
1994
+ danger={content_.danger}
1995
+ disabled={content_.disabled}
1996
+ style={content_.style}
1997
+ icon={
1998
+ content_.icon &&
1999
+ (content_.iconRenderer ===
2000
+ 'fontawesome' ? (
2001
+ React.createElement('i', {
2002
+ className:
2003
+ content_.icon,
2004
+ })
2005
+ ) : (
2006
+ <AntdIcon
2007
+ icon={content_.icon}
2008
+ />
2009
+ ))
2010
+ }
2011
+ onClick={(e) => {
2012
+ // 阻止事件冒泡
2013
+ e.stopPropagation();
2014
+ }}
2015
+ >
2016
+ {content_.content}
2017
+ </Button>
2018
+ );
2019
+ return (
2020
+ <Popconfirm
2021
+ key={idx}
2022
+ title={popConfirmProps.title}
2023
+ okText={popConfirmProps.okText}
2024
+ cancelText={
2025
+ popConfirmProps.cancelText
2026
+ }
2027
+ disabled={content_.disabled}
2028
+ getPopupContainer={
2029
+ containerId
2030
+ ? () =>
2031
+ document.getElementById(
2032
+ containerId
2033
+ )
2034
+ ? document.getElementById(
2035
+ containerId
1447
2036
  )
1448
- )
2037
+ : document.body
2038
+ : undefined
2039
+ }
2040
+ onConfirm={(e) => {
2041
+ // 阻止事件冒泡
2042
+ e.stopPropagation();
2043
+ setProps({
2044
+ // 忽略组件型字段键值对
2045
+ recentlyButtonClickedRow:
2046
+ omitBy(
2047
+ record,
2048
+ (value) =>
2049
+ value?.$$typeof
2050
+ ),
2051
+ nClicksButton:
2052
+ nClicksButton + 1,
2053
+ clickedContent:
2054
+ content_.content,
2055
+ clickedCustom:
2056
+ content_.custom,
2057
+ recentlyButtonClickedDataIndex:
2058
+ columns[i].dataIndex,
2059
+ });
2060
+ }}
2061
+ onCancel={(e) => {
2062
+ // 阻止事件冒泡
2063
+ e.stopPropagation();
2064
+ }}
2065
+ >
2066
+ {content_.tooltip ? (
2067
+ <Tooltip
2068
+ title={
2069
+ content_.tooltip?.title
1449
2070
  }
1450
- onClick={(e) => {
1451
- // 阻止事件冒泡
1452
- e.stopPropagation();
1453
- }}>
1454
- {content_.content}
1455
- </Button>
1456
- );
1457
- return (
1458
- <Popconfirm
1459
- key={idx}
1460
- title={popConfirmProps.title}
1461
- okText={popConfirmProps.okText}
1462
- cancelText={popConfirmProps.cancelText}
1463
- disabled={content_.disabled}
1464
- getPopupContainer={containerId ? () => (document.getElementById(containerId) ? document.getElementById(containerId) : document.body) : undefined}
1465
- onConfirm={(e) => {
1466
- // 阻止事件冒泡
1467
- e.stopPropagation();
1468
- setProps({
1469
- // 忽略组件型字段键值对
1470
- recentlyButtonClickedRow: omitBy(record, value => value?.$$typeof),
1471
- nClicksButton: nClicksButton + 1,
1472
- clickedContent: content_.content,
1473
- clickedCustom: content_.custom,
1474
- recentlyButtonClickedDataIndex: columns[i].dataIndex
1475
- })
1476
- }}
1477
- onCancel={(e) => {
1478
- // 阻止事件冒泡
1479
- e.stopPropagation();
1480
- }}>
1481
- {
1482
- content_.tooltip ?
1483
- (
1484
- <Tooltip title={content_.tooltip?.title} placement={content_.tooltip?.placement}>
1485
- {buttonElement}
1486
- </Tooltip>
1487
- ) :
1488
- (
1489
- buttonElement
1490
- )
2071
+ placement={
2072
+ content_.tooltip
2073
+ ?.placement
1491
2074
  }
1492
- </Popconfirm>
1493
- );
2075
+ >
2076
+ {buttonElement}
2077
+ </Tooltip>
2078
+ ) : (
2079
+ buttonElement
2080
+ )}
2081
+ </Popconfirm>
2082
+ );
2083
+ }
2084
+ const buttonElement = (
2085
+ <Button
2086
+ key={idx}
2087
+ onClick={(e) => {
2088
+ // 阻止事件冒泡
2089
+ if (
2090
+ !columns[i].renderOptions
2091
+ .likeDccLink
2092
+ ) {
2093
+ e.stopPropagation();
2094
+ }
2095
+ setProps({
2096
+ // 忽略组件型字段键值对
2097
+ recentlyButtonClickedRow:
2098
+ omitBy(
2099
+ record,
2100
+ (value) =>
2101
+ value?.$$typeof
2102
+ ),
2103
+ nClicksButton:
2104
+ nClicksButton + 1,
2105
+ clickedContent:
2106
+ content_.content,
2107
+ clickedCustom: content_.custom,
2108
+ recentlyButtonClickedDataIndex:
2109
+ columns[i].dataIndex,
2110
+ });
2111
+ }}
2112
+ size={'small'}
2113
+ type={content_.type}
2114
+ color={content_.color}
2115
+ variant={content_.variant}
2116
+ danger={content_.danger}
2117
+ disabled={content_.disabled}
2118
+ href={
2119
+ columns[i].renderOptions.likeDccLink
2120
+ ? undefined
2121
+ : content_.href
2122
+ }
2123
+ target={content_.target}
2124
+ style={content_.style}
2125
+ icon={
2126
+ content_.icon &&
2127
+ (content_.iconRenderer ===
2128
+ 'fontawesome' ? (
2129
+ React.createElement('i', {
2130
+ className: content_.icon,
2131
+ })
2132
+ ) : (
2133
+ <AntdIcon
2134
+ icon={content_.icon}
2135
+ />
2136
+ ))
1494
2137
  }
1495
- let buttonElement = (
1496
- <Button
2138
+ >
2139
+ {content_.content}
2140
+ </Button>
2141
+ );
2142
+ // 否则仅渲染按钮
2143
+ return content_.tooltip ? (
2144
+ <Tooltip
2145
+ title={content_.tooltip?.title}
2146
+ placement={content_.tooltip?.placement}
2147
+ >
2148
+ {columns[i].renderOptions
2149
+ .likeDccLink ? (
2150
+ <UtilsLink
1497
2151
  key={idx}
1498
- onClick={(e) => {
1499
- // 阻止事件冒泡
1500
- if ( !columns[i]['renderOptions']['likeDccLink'] ) {
1501
- e.stopPropagation();
1502
- }
1503
- setProps({
1504
- // 忽略组件型字段键值对
1505
- recentlyButtonClickedRow: omitBy(record, value => value?.$$typeof),
1506
- nClicksButton: nClicksButton + 1,
1507
- clickedContent: content_.content,
1508
- clickedCustom: content_.custom,
1509
- recentlyButtonClickedDataIndex: columns[i].dataIndex
1510
- })
1511
- }}
1512
- size={'small'}
1513
- type={content_.type}
1514
- color={content_.color}
1515
- variant={content_.variant}
1516
- danger={content_.danger}
1517
- disabled={content_.disabled}
1518
- href={columns[i]['renderOptions']['likeDccLink'] ? undefined : content_.href}
1519
- target={content_.target}
1520
- style={content_.style}
1521
- icon={
1522
- content_.icon && (
1523
- content_.iconRenderer === 'fontawesome' ?
1524
- (
1525
- React.createElement(
1526
- 'i',
1527
- {
1528
- className: content_.icon
1529
- }
1530
- )
1531
- ) :
1532
- (
1533
- <AntdIcon icon={content_.icon} />
1534
- )
1535
- )
1536
- }>
1537
- {content_.content}
1538
- </Button>
1539
- );
1540
- // 否则仅渲染按钮
1541
- return (
1542
- content_.tooltip ?
1543
- (
1544
- <Tooltip title={content_.tooltip?.title} placement={content_.tooltip?.placement}>
1545
- {
1546
- (
1547
- columns[i]['renderOptions']['likeDccLink'] ?
1548
- (
1549
- <UtilsLink key={idx} href={content_.href}>{buttonElement}</UtilsLink>
1550
- ) :
1551
- buttonElement
1552
- )
1553
- }
1554
- </Tooltip>
1555
- ) :
1556
- (
1557
- columns[i]['renderOptions']['likeDccLink'] ?
1558
- (
1559
- <UtilsLink key={idx} href={content_.href}>{buttonElement}</UtilsLink>
1560
- ) :
1561
- buttonElement
1562
- )
1563
- );
1564
- }
1565
- )
1566
- }
2152
+ href={content_.href}
2153
+ >
2154
+ {buttonElement}
2155
+ </UtilsLink>
2156
+ ) : (
2157
+ buttonElement
2158
+ )}
2159
+ </Tooltip>
2160
+ ) : columns[i].renderOptions.likeDccLink ? (
2161
+ <UtilsLink key={idx} href={content_.href}>
2162
+ {buttonElement}
2163
+ </UtilsLink>
2164
+ ) : (
2165
+ buttonElement
2166
+ );
2167
+ })}
1567
2168
  </Space>
1568
2169
  );
1569
- }
2170
+ };
1570
2171
  }
1571
2172
  // tags模式
1572
- else if (columns[i]['renderOptions']['renderType'] === 'tags') {
1573
-
1574
- columns[i]['render'] = tags => {
2173
+ else if (columns[i].renderOptions.renderType === 'tags') {
2174
+ columns[i].render = (tags) => {
1575
2175
  if ((!tags || isEmpty(tags)) && tags !== 0 && tags !== '') {
1576
2176
  return null;
1577
2177
  }
1578
2178
  return (
1579
2179
  // 兼容单标签/多标签输入
1580
2180
  <>
1581
- {(Array.isArray(tags) ? tags : [tags]).map(tag => {
1582
- const tagElement = (
1583
- <Tag color={tag.color}>
1584
- {tag.tag}
1585
- </Tag>
1586
- );
1587
- // 若当前标签需要附带文字提示
1588
- return tag.tooltip ? (
1589
- <Tooltip title={tag.tooltip?.title} placement={tag.tooltip?.placement}>
1590
- {tagElement}
1591
- </Tooltip>
1592
- ) : (
1593
- tagElement
1594
- );
1595
- })}
2181
+ {(Array.isArray(tags) ? tags : [tags]).map(
2182
+ (tag) => {
2183
+ const tagElement = (
2184
+ <Tag color={tag.color}>{tag.tag}</Tag>
2185
+ );
2186
+ // 若当前标签需要附带文字提示
2187
+ return tag.tooltip ? (
2188
+ <Tooltip
2189
+ title={tag.tooltip?.title}
2190
+ placement={tag.tooltip?.placement}
2191
+ >
2192
+ {tagElement}
2193
+ </Tooltip>
2194
+ ) : (
2195
+ tagElement
2196
+ );
2197
+ }
2198
+ )}
1596
2199
  </>
1597
- )
1598
- }
2200
+ );
2201
+ };
1599
2202
  }
1600
2203
  // custom-format模式
1601
- else if (columns[i]['renderOptions']['renderType'] === 'custom-format') {
2204
+ else if (columns[i].renderOptions.renderType === 'custom-format') {
1602
2205
  // 若customFormatFuncs对应当前字段的属性值存在
1603
- if (customFormatFuncs[columns[i]['dataIndex']]) {
1604
- columns[i]['render'] = eval(customFormatFuncs[columns[i]['dataIndex']])
2206
+ if (customFormatFuncs[columns[i].dataIndex]) {
2207
+ columns[i].render = eval(
2208
+ customFormatFuncs[columns[i].dataIndex]
2209
+ );
1605
2210
  }
1606
2211
  }
1607
2212
  // mini-line模式
1608
- else if (columns[i]['renderOptions']['renderType'] === 'mini-line') {
1609
- columns[i]['render'] = data => {
2213
+ else if (columns[i].renderOptions.renderType === 'mini-line') {
2214
+ columns[i].render = (data) => {
1610
2215
  let config = {
1611
2216
  autoFit: true,
1612
2217
  padding: 0,
1613
2218
  data: data,
1614
2219
  animation: miniChartAnimation,
1615
- smooth: true
2220
+ smooth: true,
1616
2221
  };
1617
2222
  // 检查是否设置了tooltipCustomContent参数
1618
- if (columns[i]['renderOptions']?.tooltipCustomContent) {
2223
+ if (columns[i].renderOptions?.tooltipCustomContent) {
1619
2224
  config = {
1620
2225
  ...config,
1621
2226
  tooltip: {
1622
- customContent: eval(columns[i]['renderOptions'].tooltipCustomContent)
1623
- }
1624
- }
2227
+ customContent: eval(
2228
+ columns[i].renderOptions
2229
+ .tooltipCustomContent
2230
+ ),
2231
+ },
2232
+ };
1625
2233
  }
1626
2234
  // 检查是否设置了miniChartColor参数
1627
- if (columns[i]['renderOptions']?.miniChartColor) {
2235
+ if (columns[i].renderOptions?.miniChartColor) {
1628
2236
  config = {
1629
2237
  ...config,
1630
- color: columns[i]['renderOptions'].miniChartColor
1631
- }
2238
+ color: columns[i].renderOptions.miniChartColor,
2239
+ };
1632
2240
  }
1633
- return <div style={{ height: miniChartHeight }}><TinyLine {...config} /></div>;
1634
- }
2241
+ return (
2242
+ <div style={{ height: miniChartHeight }}>
2243
+ <TinyLine {...config} />
2244
+ </div>
2245
+ );
2246
+ };
1635
2247
  }
1636
2248
  // mini-bar模式
1637
- else if (columns[i]['renderOptions']['renderType'] === 'mini-bar') {
1638
- columns[i]['render'] = data => {
2249
+ else if (columns[i].renderOptions.renderType === 'mini-bar') {
2250
+ columns[i].render = (data) => {
1639
2251
  let config = {
1640
2252
  padding: 0,
1641
2253
  autoFit: true,
@@ -1643,86 +2255,133 @@ const AntdTable = (props) => {
1643
2255
  animation: miniChartAnimation,
1644
2256
  };
1645
2257
  // 检查是否设置了tooltipCustomContent参数
1646
- if (columns[i]['renderOptions']?.tooltipCustomContent) {
2258
+ if (columns[i].renderOptions?.tooltipCustomContent) {
1647
2259
  config = {
1648
2260
  ...config,
1649
2261
  tooltip: {
1650
- customContent: eval(columns[i]['renderOptions'].tooltipCustomContent)
1651
- }
1652
- }
2262
+ customContent: eval(
2263
+ columns[i].renderOptions
2264
+ .tooltipCustomContent
2265
+ ),
2266
+ },
2267
+ };
1653
2268
  }
1654
2269
  // 检查是否设置了miniChartColor参数
1655
- if (columns[i]['renderOptions']?.miniChartColor) {
2270
+ if (columns[i].renderOptions?.miniChartColor) {
1656
2271
  config = {
1657
2272
  ...config,
1658
- color: columns[i]['renderOptions'].miniChartColor
1659
- }
2273
+ color: columns[i].renderOptions.miniChartColor,
2274
+ };
1660
2275
  }
1661
- return <div style={{ height: miniChartHeight }}><TinyColumn {...config} /></div>;
1662
- }
2276
+ return (
2277
+ <div style={{ height: miniChartHeight }}>
2278
+ <TinyColumn {...config} />
2279
+ </div>
2280
+ );
2281
+ };
1663
2282
  }
1664
2283
  // mini-progress模式
1665
- else if (columns[i]['renderOptions']['renderType'] === 'mini-progress') {
1666
- columns[i]['render'] = data => {
2284
+ else if (columns[i].renderOptions.renderType === 'mini-progress') {
2285
+ columns[i].render = (data) => {
1667
2286
  return (
1668
- <div style={{ height: miniChartHeight, alignItems: 'center', display: 'flex' }}>
1669
- <Progress percent={(data * 100)}
1670
- format={
1671
- (percent) => {
1672
- if (isUndefined(columns[i]['renderOptions']['progressPercentPrecision'])) {
1673
- return percent + '%';
1674
- }
1675
- return percent.toFixed(columns[i]['renderOptions']['progressPercentPrecision']) + '%';
2287
+ <div
2288
+ style={{
2289
+ height: miniChartHeight,
2290
+ alignItems: 'center',
2291
+ display: 'flex',
2292
+ }}
2293
+ >
2294
+ <Progress
2295
+ percent={data * 100}
2296
+ format={(percent) => {
2297
+ if (
2298
+ isUndefined(
2299
+ columns[i].renderOptions
2300
+ .progressPercentPrecision
2301
+ )
2302
+ ) {
2303
+ return percent + '%';
1676
2304
  }
1677
- }
2305
+ return (
2306
+ percent.toFixed(
2307
+ columns[i].renderOptions
2308
+ .progressPercentPrecision
2309
+ ) + '%'
2310
+ );
2311
+ }}
1678
2312
  strokeColor={
1679
- data * 100 === 100 ?
1680
- columns[i]['renderOptions']['progressOneHundredPercentColor'] :
1681
- columns[i]['renderOptions']['progressColor']
2313
+ data * 100 === 100
2314
+ ? columns[i].renderOptions
2315
+ .progressOneHundredPercentColor
2316
+ : columns[i].renderOptions.progressColor
1682
2317
  }
1683
2318
  trailColor={'#E8EDF3'}
1684
- status={data * 100 >= 100 ? undefined : 'normal'}
1685
- showInfo={Boolean(columns[i]['renderOptions']['progressShowPercent'])}
1686
- strokeLinecap={columns[i]['renderOptions']['progressStrokeLinecap'] || 'square'}
2319
+ status={
2320
+ data * 100 >= 100 ? undefined : 'normal'
2321
+ }
2322
+ showInfo={Boolean(
2323
+ columns[i].renderOptions.progressShowPercent
2324
+ )}
2325
+ strokeLinecap={
2326
+ columns[i].renderOptions
2327
+ .progressStrokeLinecap || 'square'
2328
+ }
1687
2329
  size={
1688
- columns[i]['renderOptions']['progressSize'] ?
1689
- ['100%', columns[i]['renderOptions']['progressSize']] :
1690
- ['100%', 15]
2330
+ columns[i].renderOptions.progressSize
2331
+ ? [
2332
+ '100%',
2333
+ columns[i].renderOptions
2334
+ .progressSize,
2335
+ ]
2336
+ : ['100%', 15]
2337
+ }
2338
+ percentPosition={
2339
+ columns[i].renderOptions
2340
+ .progressPercentPosition
1691
2341
  }
1692
- percentPosition={columns[i]['renderOptions']['progressPercentPosition']}
1693
2342
  />
1694
2343
  </div>
1695
2344
  );
1696
- }
2345
+ };
1697
2346
  }
1698
2347
  // mini-ring-progress模式
1699
- else if (columns[i]['renderOptions']['renderType'] === 'mini-ring-progress') {
1700
- columns[i]['render'] = data => {
1701
- let config = {
2348
+ else if (
2349
+ columns[i].renderOptions.renderType === 'mini-ring-progress'
2350
+ ) {
2351
+ columns[i].render = (data) => {
2352
+ const config = {
1702
2353
  autoFit: true,
1703
2354
  padding: 0,
1704
2355
  percent: data,
1705
2356
  animation: miniChartAnimation,
1706
2357
  color: [
1707
- data === 1 ?
1708
- (columns[i]['renderOptions']['progressOneHundredPercentColor'] || '#52c41a') :
1709
- '#5B8FF9',
1710
- '#E8EDF3'
2358
+ data === 1
2359
+ ? columns[i].renderOptions
2360
+ .progressOneHundredPercentColor ||
2361
+ '#52c41a'
2362
+ : '#5B8FF9',
2363
+ '#E8EDF3',
1711
2364
  ],
1712
2365
  statistic: {
1713
2366
  content: {
1714
2367
  style: {
1715
- fontSize: columns[i]['renderOptions']['ringProgressFontSize']
1716
- }
1717
- }
1718
- }
2368
+ fontSize:
2369
+ columns[i].renderOptions
2370
+ .ringProgressFontSize,
2371
+ },
2372
+ },
2373
+ },
1719
2374
  };
1720
- return <div style={{ height: miniChartHeight }}><RingProgress {...config} /></div>;
1721
- }
2375
+ return (
2376
+ <div style={{ height: miniChartHeight }}>
2377
+ <RingProgress {...config} />
2378
+ </div>
2379
+ );
2380
+ };
1722
2381
  }
1723
2382
  // mini-area模式
1724
- else if (columns[i]['renderOptions']['renderType'] === 'mini-area') {
1725
- columns[i]['render'] = data => {
2383
+ else if (columns[i].renderOptions.renderType === 'mini-area') {
2384
+ columns[i].render = (data) => {
1726
2385
  let config = {
1727
2386
  autoFit: true,
1728
2387
  padding: 0,
@@ -1731,29 +2390,36 @@ const AntdTable = (props) => {
1731
2390
  smooth: true,
1732
2391
  };
1733
2392
  // 检查是否设置了tooltipCustomContent参数
1734
- if (columns[i]['renderOptions']?.tooltipCustomContent) {
2393
+ if (columns[i].renderOptions?.tooltipCustomContent) {
1735
2394
  config = {
1736
2395
  ...config,
1737
2396
  tooltip: {
1738
- customContent: eval(columns[i]['renderOptions'].tooltipCustomContent)
1739
- }
1740
- }
2397
+ customContent: eval(
2398
+ columns[i].renderOptions
2399
+ .tooltipCustomContent
2400
+ ),
2401
+ },
2402
+ };
1741
2403
  }
1742
2404
  // 检查是否设置了miniChartColor参数
1743
- if (columns[i]['renderOptions']?.miniChartColor) {
2405
+ if (columns[i].renderOptions?.miniChartColor) {
1744
2406
  config = {
1745
2407
  ...config,
1746
2408
  areaStyle: {
1747
- fill: columns[i]['renderOptions'].miniChartColor,
1748
- fillOpacity: 0.4
2409
+ fill: columns[i].renderOptions.miniChartColor,
2410
+ fillOpacity: 0.4,
1749
2411
  },
1750
2412
  line: {
1751
- color: columns[i]['renderOptions'].miniChartColor
1752
- }
1753
- }
2413
+ color: columns[i].renderOptions.miniChartColor,
2414
+ },
2415
+ };
1754
2416
  }
1755
- return <div style={{ height: miniChartHeight }}><TinyArea {...config} /></div>;
1756
- }
2417
+ return (
2418
+ <div style={{ height: miniChartHeight }}>
2419
+ <TinyArea {...config} />
2420
+ </div>
2421
+ );
2422
+ };
1757
2423
  }
1758
2424
  }
1759
2425
  }
@@ -1761,72 +2427,106 @@ const AntdTable = (props) => {
1761
2427
  if (titlePopoverInfo) {
1762
2428
  for (let i = 0; i < columns.length; i++) {
1763
2429
  if (Object.keys(titlePopoverInfo).includes(columns[i].dataIndex)) {
1764
-
1765
2430
  if (!columns[i].title_) {
1766
- columns[i]['title_'] = columns[i]['title']
1767
- }
1768
- columns[i]['title'] = () => {
1769
- return <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
1770
- {columns[i].title_}
1771
- <Popover
1772
- title={titlePopoverInfo[columns[i].dataIndex].title}
1773
- content={<div style={{
1774
- maxWidth: '250px',
1775
- wordWrap: 'break-word',
1776
- whiteSpace: 'normal',
1777
- wordBreak: 'break-all'
1778
- }}>{titlePopoverInfo[columns[i].dataIndex].content}</div>}
1779
- overlayStyle={titlePopoverInfo[columns[i].dataIndex].overlayStyle}
1780
- placement={titlePopoverInfo[columns[i].dataIndex].placement || 'bottom'}
1781
- getPopupContainer={containerId ? () => (document.getElementById(containerId) ? document.getElementById(containerId) : document.body) : undefined}>
1782
- <QuestionCircleOutlined
1783
- style={{
1784
- color: '#8c8c8c',
1785
- paddingLeft: '4px',
1786
- cursor: 'pointer'
1787
- }} />
1788
- </Popover>
1789
- </div>
2431
+ columns[i].title_ = columns[i].title;
1790
2432
  }
2433
+ columns[i].title = () => {
2434
+ return (
2435
+ <div
2436
+ style={{
2437
+ display: 'flex',
2438
+ alignItems: 'center',
2439
+ justifyContent: 'center',
2440
+ }}
2441
+ >
2442
+ {columns[i].title_}
2443
+ <Popover
2444
+ title={
2445
+ titlePopoverInfo[columns[i].dataIndex].title
2446
+ }
2447
+ content={
2448
+ <div
2449
+ style={{
2450
+ maxWidth: '250px',
2451
+ wordWrap: 'break-word',
2452
+ whiteSpace: 'normal',
2453
+ wordBreak: 'break-all',
2454
+ }}
2455
+ >
2456
+ {
2457
+ titlePopoverInfo[
2458
+ columns[i].dataIndex
2459
+ ].content
2460
+ }
2461
+ </div>
2462
+ }
2463
+ overlayStyle={
2464
+ titlePopoverInfo[columns[i].dataIndex]
2465
+ .overlayStyle
2466
+ }
2467
+ placement={
2468
+ titlePopoverInfo[columns[i].dataIndex]
2469
+ .placement || 'bottom'
2470
+ }
2471
+ getPopupContainer={
2472
+ containerId
2473
+ ? () =>
2474
+ document.getElementById(
2475
+ containerId
2476
+ )
2477
+ ? document.getElementById(
2478
+ containerId
2479
+ )
2480
+ : document.body
2481
+ : undefined
2482
+ }
2483
+ >
2484
+ <QuestionCircleOutlined
2485
+ style={{
2486
+ color: '#8c8c8c',
2487
+ paddingLeft: '4px',
2488
+ cursor: 'pointer',
2489
+ }}
2490
+ />
2491
+ </Popover>
2492
+ </div>
2493
+ );
2494
+ };
1791
2495
  }
1792
2496
  }
1793
2497
  }
1794
2498
 
1795
2499
  // 添加表头单元格监听事件
1796
- columns = columns.map(
1797
- (item, idx) => (
1798
- {
1799
- ...item,
1800
- ...{
1801
- onHeaderCell: (e) => {
1802
- return {
1803
- islast: idx - (columns.length - 1),
1804
- ...(
1805
- enableHoverListen ?
1806
- {
1807
- onMouseEnter: event => { setProps({ recentlyMouseEnterColumnDataIndex: e.dataIndex }) }
1808
- } :
1809
- {}
1810
- ),
1811
- // 独立控制表头对齐
1812
- ...(
1813
- e.headerAlign ?
1814
- {
1815
- style: { textAlign: e.headerAlign }
1816
- } :
1817
- {}
1818
- )
1819
- };
1820
- }
1821
- }
1822
- }
1823
- )
1824
- )
2500
+ columns = columns.map((item, idx) => ({
2501
+ ...item,
2502
+ ...{
2503
+ onHeaderCell: (e) => {
2504
+ return {
2505
+ islast: idx - (columns.length - 1),
2506
+ ...(enableHoverListen
2507
+ ? {
2508
+ onMouseEnter: (event) => {
2509
+ setProps({
2510
+ recentlyMouseEnterColumnDataIndex:
2511
+ e.dataIndex,
2512
+ });
2513
+ },
2514
+ }
2515
+ : {}),
2516
+ // 独立控制表头对齐
2517
+ ...(e.headerAlign
2518
+ ? {
2519
+ style: { textAlign: e.headerAlign },
2520
+ }
2521
+ : {}),
2522
+ };
2523
+ },
2524
+ },
2525
+ }));
1825
2526
 
1826
- let rowSelection
2527
+ let rowSelection;
1827
2528
  // 处理行选择功能设置
1828
2529
  if (rowSelectionType) {
1829
-
1830
2530
  rowSelection = {
1831
2531
  columnWidth: rowSelectionWidth,
1832
2532
  checkStrictly: rowSelectionCheckStrictly,
@@ -1836,203 +2536,232 @@ const AntdTable = (props) => {
1836
2536
  selections: [
1837
2537
  Table.SELECTION_ALL,
1838
2538
  Table.SELECTION_INVERT,
1839
- Table.SELECTION_NONE
2539
+ Table.SELECTION_NONE,
1840
2540
  ],
1841
2541
  onChange: (selectedRowKeys, selectedRows) => {
1842
2542
  setProps({
1843
- selectedRowKeys: (
2543
+ selectedRowKeys:
1844
2544
  // 排除被忽略选择的行
1845
- rowSelectionIgnoreRowKeys ?
1846
- selectedRowKeys.filter(item => !rowSelectionIgnoreRowKeys.includes(item)) :
1847
- selectedRowKeys
1848
- ),
1849
- selectedRows: (
2545
+ rowSelectionIgnoreRowKeys
2546
+ ? selectedRowKeys.filter(
2547
+ (item) =>
2548
+ !rowSelectionIgnoreRowKeys.includes(item)
2549
+ )
2550
+ : selectedRowKeys,
2551
+ selectedRows:
1850
2552
  // 排除被忽略选择的行
1851
- rowSelectionIgnoreRowKeys ?
1852
- selectedRows.map(
1853
- // 忽略组件型字段键值对
1854
- record => omitBy(record, value => value?.$$typeof)
1855
- ).filter(
1856
- record => !rowSelectionIgnoreRowKeys.includes(record.key)
1857
- ) :
1858
- selectedRows.map(
1859
- record => omitBy(record, value => value?.$$typeof)
1860
- )
1861
- )
1862
- })
2553
+ rowSelectionIgnoreRowKeys
2554
+ ? selectedRows
2555
+ .map(
2556
+ // 忽略组件型字段键值对
2557
+ (record) =>
2558
+ omitBy(
2559
+ record,
2560
+ (value) => value?.$$typeof
2561
+ )
2562
+ )
2563
+ .filter(
2564
+ (record) =>
2565
+ !rowSelectionIgnoreRowKeys.includes(
2566
+ record.key
2567
+ )
2568
+ )
2569
+ : selectedRows.map((record) =>
2570
+ omitBy(record, (value) => value?.$$typeof)
2571
+ ),
2572
+ });
1863
2573
  },
1864
2574
  renderCell: (checked, record, index, originNode) => {
1865
2575
  // 排除不可选择的行
1866
- if (rowSelectionIgnoreRowKeys && rowSelectionIgnoreRowKeys.includes(record.key)) {
2576
+ if (
2577
+ rowSelectionIgnoreRowKeys &&
2578
+ rowSelectionIgnoreRowKeys.includes(record.key)
2579
+ ) {
1867
2580
  return null;
1868
2581
  }
1869
2582
  return originNode;
1870
- }
1871
- }
2583
+ },
2584
+ };
1872
2585
  }
1873
2586
 
1874
2587
  // 处理行可展开内容功能
1875
- let rowExpandedRowRender
2588
+ let rowExpandedRowRender;
1876
2589
  if (expandedRowKeyToContent && Array.isArray(expandedRowKeyToContent)) {
1877
2590
  rowExpandedRowRender = new Map(
1878
- expandedRowKeyToContent.map(
1879
- item => [item.key, item.content]
1880
- )
1881
- )
2591
+ expandedRowKeyToContent.map((item) => [item.key, item.content])
2592
+ );
1882
2593
  }
1883
2594
 
1884
2595
  // 检查当前是否至少有一个字段是可编辑的
1885
- let atLeastOneColumnEditable = columns.some(item => item.editable)
2596
+ const atLeastOneColumnEditable = columns.some((item) => item.editable);
1886
2597
 
1887
2598
  // 减少不必要的单元格重绘
1888
2599
  if (cellUpdateOptimize) {
1889
- columns = columns.map(
1890
- item => {
1891
- return {
1892
- ...item,
1893
- // 减少不必要的单元格重绘
1894
- shouldCellUpdate: (record, prevRecord) => {
1895
- if (isEqual(record, prevRecord)) {
1896
- return false;
1897
- }
1898
- return true;
2600
+ columns = columns.map((item) => {
2601
+ return {
2602
+ ...item,
2603
+ // 减少不必要的单元格重绘
2604
+ shouldCellUpdate: (record, prevRecord) => {
2605
+ if (isEqual(record, prevRecord)) {
2606
+ return false;
1899
2607
  }
1900
- };
1901
- }
1902
- )
2608
+ return true;
2609
+ },
2610
+ };
2611
+ });
1903
2612
  }
1904
2613
 
1905
2614
  // 配置自定义组件
1906
- const components = {}
2615
+ const components = {};
1907
2616
 
1908
2617
  // 若至少有一个字段开启编辑功能
1909
2618
  if (atLeastOneColumnEditable) {
1910
2619
  components.body = {
1911
2620
  row: EditableRow,
1912
2621
  cell: EditableCell,
1913
- }
2622
+ };
1914
2623
  }
1915
2624
 
1916
2625
  // 统一合并处理onCell自定义函数逻辑
1917
- columns = [...columns].map(
1918
- item => {
1919
- return {
1920
- ...item,
1921
- ...{
1922
- onCell: (record, index) => {
1923
- // 初始化onCell返回值
1924
- let returnValue = {}
1925
- // 处理自定义样式特性
1926
- if (conditionalStyleFuncs && conditionalStyleFuncs[item.dataIndex]) {
1927
- try {
1928
- returnValue = {
1929
- ...returnValue,
1930
- ...eval(conditionalStyleFuncs[item.dataIndex])(record, index)
1931
- }
1932
- } catch (e) {
1933
- console.error(e)
1934
- }
2626
+ columns = [...columns].map((item) => {
2627
+ return {
2628
+ ...item,
2629
+ ...{
2630
+ onCell: (record, index) => {
2631
+ // 初始化onCell返回值
2632
+ let returnValue = {};
2633
+ // 处理自定义样式特性
2634
+ if (
2635
+ conditionalStyleFuncs &&
2636
+ conditionalStyleFuncs[item.dataIndex]
2637
+ ) {
2638
+ try {
2639
+ returnValue = {
2640
+ ...returnValue,
2641
+ ...eval(conditionalStyleFuncs[item.dataIndex])(
2642
+ record,
2643
+ index
2644
+ ),
2645
+ };
2646
+ } catch (e) {
2647
+ console.error(e);
1935
2648
  }
1936
- // 处理单元格单击、双击、右键事件
1937
- if (enableCellClickListenColumns && enableCellClickListenColumns.includes(item.dataIndex)) {
1938
- try {
1939
- returnValue = {
1940
- ...returnValue,
1941
- onClick: e => {
1942
- setProps({
1943
- recentlyCellClickColumn: item.dataIndex,
1944
- recentlyCellClickRecord: omitBy(record, value => value?.$$typeof),
1945
- nClicksCell: nClicksCell + 1,
1946
- cellClickEvent: {
1947
- pageX: e.pageX,
1948
- pageY: e.pageY,
1949
- clientX: e.clientX,
1950
- clientY: e.clientY,
1951
- screenX: e.screenX,
1952
- screenY: e.screenY,
1953
- timestamp: Date.now()
1954
- }
1955
- })
1956
- },
1957
- onDoubleClick: e => {
1958
- setProps({
1959
- recentlyCellDoubleClickColumn: item.dataIndex,
1960
- recentlyCellDoubleClickRecord: omitBy(record, value => value?.$$typeof),
1961
- nDoubleClicksCell: nDoubleClicksCell + 1,
1962
- cellDoubleClickEvent: {
1963
- pageX: e.pageX,
1964
- pageY: e.pageY,
1965
- clientX: e.clientX,
1966
- clientY: e.clientY,
1967
- screenX: e.screenX,
1968
- screenY: e.screenY,
1969
- timestamp: Date.now()
1970
- }
1971
- })
1972
- },
1973
- onContextMenu: e => {
1974
- // 阻止浏览器默认右键菜单
1975
- e.preventDefault()
1976
- setProps({
1977
- recentlyContextMenuClickColumn: item.dataIndex,
1978
- recentlyContextMenuClickRecord: omitBy(record, value => value?.$$typeof),
1979
- nContextMenuClicksCell: nContextMenuClicksCell + 1,
1980
- cellContextMenuClickEvent: {
1981
- pageX: e.pageX,
1982
- pageY: e.pageY,
1983
- clientX: e.clientX,
1984
- clientY: e.clientY,
1985
- screenX: e.screenX,
1986
- screenY: e.screenY,
1987
- timestamp: Date.now()
1988
- }
1989
- })
1990
- }
1991
- }
1992
- } catch (e) {
1993
- console.error(e)
1994
- }
2649
+ }
2650
+ // 处理单元格单击、双击、右键事件
2651
+ if (
2652
+ enableCellClickListenColumns &&
2653
+ enableCellClickListenColumns.includes(item.dataIndex)
2654
+ ) {
2655
+ try {
2656
+ returnValue = {
2657
+ ...returnValue,
2658
+ onClick: (e) => {
2659
+ setProps({
2660
+ recentlyCellClickColumn: item.dataIndex,
2661
+ recentlyCellClickRecord: omitBy(
2662
+ record,
2663
+ (value) => value?.$$typeof
2664
+ ),
2665
+ nClicksCell: nClicksCell + 1,
2666
+ cellClickEvent: {
2667
+ pageX: e.pageX,
2668
+ pageY: e.pageY,
2669
+ clientX: e.clientX,
2670
+ clientY: e.clientY,
2671
+ screenX: e.screenX,
2672
+ screenY: e.screenY,
2673
+ timestamp: Date.now(),
2674
+ },
2675
+ });
2676
+ },
2677
+ onDoubleClick: (e) => {
2678
+ setProps({
2679
+ recentlyCellDoubleClickColumn:
2680
+ item.dataIndex,
2681
+ recentlyCellDoubleClickRecord: omitBy(
2682
+ record,
2683
+ (value) => value?.$$typeof
2684
+ ),
2685
+ nDoubleClicksCell:
2686
+ nDoubleClicksCell + 1,
2687
+ cellDoubleClickEvent: {
2688
+ pageX: e.pageX,
2689
+ pageY: e.pageY,
2690
+ clientX: e.clientX,
2691
+ clientY: e.clientY,
2692
+ screenX: e.screenX,
2693
+ screenY: e.screenY,
2694
+ timestamp: Date.now(),
2695
+ },
2696
+ });
2697
+ },
2698
+ onContextMenu: (e) => {
2699
+ // 阻止浏览器默认右键菜单
2700
+ e.preventDefault();
2701
+ setProps({
2702
+ recentlyContextMenuClickColumn:
2703
+ item.dataIndex,
2704
+ recentlyContextMenuClickRecord: omitBy(
2705
+ record,
2706
+ (value) => value?.$$typeof
2707
+ ),
2708
+ nContextMenuClicksCell:
2709
+ nContextMenuClicksCell + 1,
2710
+ cellContextMenuClickEvent: {
2711
+ pageX: e.pageX,
2712
+ pageY: e.pageY,
2713
+ clientX: e.clientX,
2714
+ clientY: e.clientY,
2715
+ screenX: e.screenX,
2716
+ screenY: e.screenY,
2717
+ timestamp: Date.now(),
2718
+ },
2719
+ });
2720
+ },
2721
+ };
2722
+ } catch (e) {
2723
+ console.error(e);
1995
2724
  }
2725
+ }
1996
2726
 
1997
- // 处理可编辑特性
1998
- if (item.editable) {
1999
- try {
2000
- returnValue = {
2001
- ...returnValue,
2002
- record,
2003
- editable: item.editable,
2004
- dataIndex: item.dataIndex,
2005
- title: item.title
2006
- }
2007
- } catch (e) {
2008
- console.error(e)
2009
- }
2727
+ // 处理可编辑特性
2728
+ if (item.editable) {
2729
+ try {
2730
+ returnValue = {
2731
+ ...returnValue,
2732
+ record,
2733
+ editable: item.editable,
2734
+ dataIndex: item.dataIndex,
2735
+ title: item.title,
2736
+ };
2737
+ } catch (e) {
2738
+ console.error(e);
2010
2739
  }
2011
-
2012
- return returnValue;
2013
2740
  }
2014
- }
2015
- };
2016
- }
2017
- )
2741
+
2742
+ return returnValue;
2743
+ },
2744
+ },
2745
+ };
2746
+ });
2018
2747
 
2019
2748
  // 若存在至少一个字段有group参数,则对columns进行重构以支持多层表头
2020
- let tempColumns = []
2021
- if (columns.some(e => e.group)) {
2749
+ let tempColumns = [];
2750
+ if (columns.some((e) => e.group)) {
2022
2751
  // 新逻辑
2023
- for (let column of columns) {
2752
+ for (const column of columns) {
2024
2753
  if (column.group) {
2025
2754
  if (isString(column.group)) {
2026
- insertNewColumnNode(column, [column.group], 0, tempColumns)
2755
+ insertNewColumnNode(column, [column.group], 0, tempColumns);
2027
2756
  } else {
2028
- insertNewColumnNode(column, column.group, 0, tempColumns)
2757
+ insertNewColumnNode(column, column.group, 0, tempColumns);
2029
2758
  }
2030
2759
  } else {
2031
- tempColumns.push(column)
2760
+ tempColumns.push(column);
2032
2761
  }
2033
2762
  }
2034
2763
  } else {
2035
- tempColumns = [...columns]
2764
+ tempColumns = [...columns];
2036
2765
  }
2037
2766
 
2038
2767
  return (
@@ -2042,30 +2771,37 @@ const AntdTable = (props) => {
2042
2771
  >
2043
2772
  <Table
2044
2773
  // 提取具有data-*或aria-*通配格式的属性
2045
- {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
2774
+ {...pickBy(
2775
+ (_, k) => k.startsWith('data-') || k.startsWith('aria-'),
2776
+ others
2777
+ )}
2046
2778
  id={id}
2047
2779
  className={className}
2048
2780
  style={style}
2049
2781
  key={key}
2050
2782
  components={components}
2051
2783
  rowClassName={
2052
- rowClassName ?
2053
- (record, index) => {
2054
- // 初始化rowClassName返回值
2055
- let _rowClassName = atLeastOneColumnEditable ? 'editable-row' : '';
2056
- // 若rowClassName参数通过func进行javascript函数定义
2057
- if (rowClassName.func) {
2058
- _rowClassName += ` ${eval(rowClassName.func)(record, index)}`
2059
- } else {
2060
- _rowClassName += ` ${rowClassName}`
2061
- }
2062
- return _rowClassName.trimStart()
2063
- } :
2064
- (atLeastOneColumnEditable ? () => 'editable-row' : undefined)
2784
+ rowClassName
2785
+ ? (record, index) => {
2786
+ // 初始化rowClassName返回值
2787
+ let _rowClassName = atLeastOneColumnEditable
2788
+ ? 'editable-row'
2789
+ : '';
2790
+ // rowClassName参数通过func进行javascript函数定义
2791
+ if (rowClassName.func) {
2792
+ _rowClassName += ` ${eval(rowClassName.func)(record, index)}`;
2793
+ } else {
2794
+ _rowClassName += ` ${rowClassName}`;
2795
+ }
2796
+ return _rowClassName.trimStart();
2797
+ }
2798
+ : atLeastOneColumnEditable
2799
+ ? () => 'editable-row'
2800
+ : undefined
2065
2801
  }
2066
2802
  dataSource={
2067
2803
  // 根据hiddenRowKeys参数情况进行指定行记录的隐藏
2068
- data.filter(e => !hiddenRowKeys.includes(e.key))
2804
+ data.filter((e) => !hiddenRowKeys.includes(e.key))
2069
2805
  }
2070
2806
  columns={tempColumns}
2071
2807
  showHeader={showHeader}
@@ -2076,79 +2812,104 @@ const AntdTable = (props) => {
2076
2812
  sticky={computedSticky}
2077
2813
  pagination={
2078
2814
  // 确保pagination=false生效
2079
- pagination &&
2080
- {
2815
+ pagination && {
2081
2816
  ...pagination,
2082
2817
  ...{
2083
- showTotal: total => `${pagination.showTotalPrefix} ${total} ${pagination.showTotalSuffix}`
2818
+ showTotal: (total) =>
2819
+ `${pagination.showTotalPrefix} ${total} ${pagination.showTotalSuffix}`,
2084
2820
  },
2085
- position: (pagination.position && !Array.isArray(pagination.position))
2086
- ? [pagination.position] : pagination.position
2821
+ position:
2822
+ pagination.position &&
2823
+ !Array.isArray(pagination.position)
2824
+ ? [pagination.position]
2825
+ : pagination.position,
2087
2826
  }
2088
2827
  }
2089
2828
  bordered={bordered}
2090
- scroll={{ x: maxWidth, y: maxHeight, scrollToFirstRowOnChange: scrollToFirstRowOnChange }}
2829
+ scroll={{
2830
+ x: maxWidth,
2831
+ y: maxHeight,
2832
+ scrollToFirstRowOnChange: scrollToFirstRowOnChange,
2833
+ }}
2091
2834
  onChange={onPageChange}
2092
2835
  onRow={
2093
- enableHoverListen ?
2094
- (record, index) => {
2095
- return {
2096
- onMouseEnter: event => {
2097
- setProps({
2098
- recentlyMouseEnterRowKey: record.key,
2099
- // 忽略组件型字段键值对
2100
- recentlyMouseEnterRow: omitBy(record, value => value?.$$typeof)
2101
- })
2102
- }, // 鼠标移入行
2103
- };
2104
- } : undefined
2836
+ enableHoverListen
2837
+ ? (record, index) => {
2838
+ return {
2839
+ onMouseEnter: (event) => {
2840
+ setProps({
2841
+ recentlyMouseEnterRowKey: record.key,
2842
+ // 忽略组件型字段键值对
2843
+ recentlyMouseEnterRow: omitBy(
2844
+ record,
2845
+ (value) => value?.$$typeof
2846
+ ),
2847
+ });
2848
+ }, // 鼠标移入行
2849
+ };
2850
+ }
2851
+ : undefined
2852
+ }
2853
+ summary={
2854
+ summaryRowContents
2855
+ ? () => (
2856
+ <Table.Summary fixed={summaryRowFixed}>
2857
+ {splitSummaryRowContents(
2858
+ summaryRowContents,
2859
+ columns.length,
2860
+ summaryRowBlankColumns
2861
+ ).map((group, idx) => (
2862
+ <Table.Summary.Row key={idx}>
2863
+ {group.map((item, i) =>
2864
+ item.empty ? (
2865
+ <Table.Summary.Cell
2866
+ index={i}
2867
+ />
2868
+ ) : (
2869
+ <Table.Summary.Cell
2870
+ index={i}
2871
+ colSpan={item.colSpan}
2872
+ align={item.align}
2873
+ >
2874
+ {item.content}
2875
+ </Table.Summary.Cell>
2876
+ )
2877
+ )}
2878
+ </Table.Summary.Row>
2879
+ ))}
2880
+ </Table.Summary>
2881
+ )
2882
+ : undefined
2105
2883
  }
2106
- summary={summaryRowContents ? () => (
2107
- <Table.Summary fixed={summaryRowFixed}>
2108
- {
2109
- splitSummaryRowContents(summaryRowContents, columns.length, summaryRowBlankColumns).map(
2110
- (group, idx) => (
2111
- <Table.Summary.Row key={idx}>
2112
- {group.map((item, i) =>
2113
- (
2114
- item.empty ?
2115
- (
2116
- <Table.Summary.Cell index={i} />
2117
- ) :
2118
- (
2119
- <Table.Summary.Cell index={i} colSpan={item.colSpan} align={item.align}>
2120
- {item.content}
2121
- </Table.Summary.Cell>
2122
- )
2123
- )
2124
- )}
2125
- </Table.Summary.Row>
2126
- )
2127
- )
2128
- }
2129
- </Table.Summary>
2130
- ) : undefined}
2131
2884
  expandable={
2132
- rowExpandedRowRender ? {
2133
- defaultExpandedRowKeys: defaultExpandedRowKeys,
2134
- expandedRowKeys: expandedRowKeys || defaultExpandedRowKeys,
2135
- expandedRowRender: (record) => rowExpandedRowRender.get(record.key),
2136
- rowExpandable: (record) => rowExpandedRowRender.has(record.key),
2137
- columnWidth: expandedRowWidth,
2138
- expandRowByClick: expandRowByClick,
2139
- onExpandedRowsChange: (e) => setProps({
2140
- expandedRowKeys: e
2141
- })
2142
- } : {
2143
- // 兼容行记录自带children的自动展开情况
2144
- defaultExpandedRowKeys: defaultExpandedRowKeys,
2145
- expandedRowKeys: expandedRowKeys || defaultExpandedRowKeys,
2146
- columnWidth: expandedRowWidth,
2147
- expandRowByClick: expandRowByClick,
2148
- onExpandedRowsChange: (e) => setProps({
2149
- expandedRowKeys: e
2150
- })
2151
- }
2885
+ rowExpandedRowRender
2886
+ ? {
2887
+ defaultExpandedRowKeys: defaultExpandedRowKeys,
2888
+ expandedRowKeys:
2889
+ expandedRowKeys || defaultExpandedRowKeys,
2890
+ expandedRowRender: (record) =>
2891
+ rowExpandedRowRender.get(record.key),
2892
+ rowExpandable: (record) =>
2893
+ rowExpandedRowRender.has(record.key),
2894
+ columnWidth: expandedRowWidth,
2895
+ expandRowByClick: expandRowByClick,
2896
+ onExpandedRowsChange: (e) =>
2897
+ setProps({
2898
+ expandedRowKeys: e,
2899
+ }),
2900
+ }
2901
+ : {
2902
+ // 兼容行记录自带children的自动展开情况
2903
+ defaultExpandedRowKeys: defaultExpandedRowKeys,
2904
+ expandedRowKeys:
2905
+ expandedRowKeys || defaultExpandedRowKeys,
2906
+ columnWidth: expandedRowWidth,
2907
+ expandRowByClick: expandRowByClick,
2908
+ onExpandedRowsChange: (e) =>
2909
+ setProps({
2910
+ expandedRowKeys: e,
2911
+ }),
2912
+ }
2152
2913
  }
2153
2914
  virtual={virtual}
2154
2915
  title={title && (() => title)}
@@ -2156,61 +2917,68 @@ const AntdTable = (props) => {
2156
2917
  data-dash-is-loading={useLoading()}
2157
2918
  loading={loading}
2158
2919
  getPopupContainer={
2159
- containerId ?
2160
- () => (
2161
- document.getElementById(containerId) ?
2162
- document.getElementById(containerId) :
2163
- document.body
2164
- ) :
2165
- undefined}
2166
- showSorterTooltip={showSorterTooltip && showSorterTooltipTarget ? { target: showSorterTooltipTarget } : showSorterTooltip}
2920
+ containerId
2921
+ ? () =>
2922
+ document.getElementById(containerId)
2923
+ ? document.getElementById(containerId)
2924
+ : document.body
2925
+ : undefined
2926
+ }
2927
+ showSorterTooltip={
2928
+ showSorterTooltip && showSorterTooltipTarget
2929
+ ? { target: showSorterTooltipTarget }
2930
+ : showSorterTooltip
2931
+ }
2167
2932
  />
2168
2933
  </ConfigProvider>
2169
2934
  );
2170
2935
  };
2171
2936
 
2172
- export default React.memo(
2173
- AntdTable,
2174
- (prevProps, nextProps) => {
2175
- // 计算发生变化的参数名
2176
- const changedProps = Object.keys(nextProps)
2177
- .filter(key => !isEqual(prevProps[key], nextProps[key]))
2178
-
2179
- // 特殊处理:
2180
- // 当recentlySelectValue发生变动且不涉及data变动时时,阻止本次重绘
2181
- if (changedProps.includes('recentlySelectValue') && !changedProps.includes('data') && !changedProps.includes('currentData')) {
2182
- return true;
2183
- }
2184
-
2185
- // #80
2186
- // selectedRowsSyncWithData=true时,当data发生更新,在selectedRowKeys有效时,对selectedRows进行同步更新
2187
- if (
2188
- nextProps['selectedRowsSyncWithData'] &&
2189
- nextProps['selectedRowKeys'] &&
2190
- changedProps.includes('data')
2191
- ) {
2192
- // 同步更新selectedRows的值
2193
- nextProps.setProps({
2194
- // 忽略组件型字段键值对
2195
- selectedRows: nextProps['data'].filter(item => nextProps['selectedRowKeys'].includes(item.key))
2196
- .map(
2197
- record => omitBy(record, value => value?.$$typeof)
2198
- )
2199
- })
2200
- }
2937
+ export default React.memo(AntdTable, (prevProps, nextProps) => {
2938
+ // 计算发生变化的参数名
2939
+ const changedProps = Object.keys(nextProps).filter(
2940
+ (key) => !isEqual(prevProps[key], nextProps[key])
2941
+ );
2201
2942
 
2202
- // // 判断当前轮次变更的prop是否均在preventUpdateProps中
2203
- // console.log({ changedProps })
2204
- // console.log(
2205
- // '免重绘props:',
2206
- // changedProps.every(propName => preventUpdateProps.includes(propName))
2207
- // )
2943
+ // 特殊处理:
2944
+ // 当recentlySelectValue发生变动且不涉及data变动时时,阻止本次重绘
2945
+ if (
2946
+ changedProps.includes('recentlySelectValue') &&
2947
+ !changedProps.includes('data') &&
2948
+ !changedProps.includes('currentData')
2949
+ ) {
2950
+ return true;
2951
+ }
2208
2952
 
2209
- // changedProps中全部变化的prop都在preventUpdateProps中声明时
2210
- // 阻止本次重绘
2211
- return changedProps.every(propName => preventUpdateProps.includes(propName));
2953
+ // #80
2954
+ // selectedRowsSyncWithData=true时,当data发生更新,在selectedRowKeys有效时,对selectedRows进行同步更新
2955
+ if (
2956
+ nextProps.selectedRowsSyncWithData &&
2957
+ nextProps.selectedRowKeys &&
2958
+ changedProps.includes('data')
2959
+ ) {
2960
+ // 同步更新selectedRows的值
2961
+ nextProps.setProps({
2962
+ // 忽略组件型字段键值对
2963
+ selectedRows: nextProps.data
2964
+ .filter((item) => nextProps.selectedRowKeys.includes(item.key))
2965
+ .map((record) => omitBy(record, (value) => value?.$$typeof)),
2966
+ });
2212
2967
  }
2213
- );
2968
+
2969
+ // // 判断当前轮次变更的prop是否均在preventUpdateProps中
2970
+ // console.log({ changedProps })
2971
+ // console.log(
2972
+ // '免重绘props:',
2973
+ // changedProps.every(propName => preventUpdateProps.includes(propName))
2974
+ // )
2975
+
2976
+ // changedProps中全部变化的prop都在preventUpdateProps中声明时
2977
+ // 阻止本次重绘
2978
+ return changedProps.every((propName) =>
2979
+ preventUpdateProps.includes(propName)
2980
+ );
2981
+ });
2214
2982
 
2215
2983
  AntdTable.defaultProps = defaultProps;
2216
- AntdTable.propTypes = propTypes;
2984
+ AntdTable.propTypes = propTypes;