@wix/patterns 1.497.0 → 1.499.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/cjs/components/CardContainer/CardContainer.st.css.js +2 -2
  2. package/dist/cjs/components/CardContainer/CardContainer.st.css.js.map +1 -1
  3. package/dist/cjs/components/CmsFieldManagement/CmsFieldForm.st.css.js +3 -3
  4. package/dist/cjs/components/CmsFieldManagement/CmsFieldForm.st.css.js.map +1 -1
  5. package/dist/cjs/components/CmsFieldManagement/CmsFieldModal.st.css.js +3 -3
  6. package/dist/cjs/components/CmsFieldManagement/CmsFieldModal.st.css.js.map +1 -1
  7. package/dist/cjs/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +3 -3
  8. package/dist/cjs/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js.map +1 -1
  9. package/dist/cjs/components/Collapse/Collapse.st.css.js +3 -3
  10. package/dist/cjs/components/Collapse/Collapse.st.css.js.map +1 -1
  11. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  12. package/dist/cjs/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  13. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +3 -3
  14. package/dist/cjs/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js.map +1 -1
  15. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js +2 -2
  16. package/dist/cjs/components/CollectionTable/CollectionTable.st.css.js.map +1 -1
  17. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  18. package/dist/cjs/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  19. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js +5 -5
  20. package/dist/cjs/components/CollectionToolbar/CollectionToolbar.st.css.js.map +1 -1
  21. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +4 -4
  22. package/dist/cjs/components/CollectionToolbar/SearchOrCustomFilter.st.css.js.map +1 -1
  23. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  24. package/dist/cjs/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js.map +1 -1
  25. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  26. package/dist/cjs/components/CollectionViewsDropdown/ViewsDropdown.st.css.js.map +1 -1
  27. package/dist/cjs/components/CustomFieldModal/CustomFieldFormPiiFields.st.css.js +3 -3
  28. package/dist/cjs/components/CustomFieldModal/CustomFieldFormPiiFields.st.css.js.map +1 -1
  29. package/dist/cjs/components/DragHandle/DragHandle.st.css.js +2 -2
  30. package/dist/cjs/components/DragHandle/DragHandle.st.css.js.map +1 -1
  31. package/dist/cjs/components/EditableTable/EditableCell.st.css.js +6 -6
  32. package/dist/cjs/components/EditableTable/EditableCell.st.css.js.map +1 -1
  33. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  34. package/dist/cjs/components/EditableTable/HeaderActionsPopover.st.css.js.map +1 -1
  35. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  36. package/dist/cjs/components/EditableTable/cellTypes/CellViewLayout.st.css.js.map +1 -1
  37. package/dist/cjs/components/EditableTable/cellTypes/JsonInputEdit.st.css.js +3 -3
  38. package/dist/cjs/components/EditableTable/cellTypes/JsonInputEdit.st.css.js.map +1 -1
  39. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js +3 -3
  40. package/dist/cjs/components/EditableTable/cellTypes/address/Edit.st.css.js.map +1 -1
  41. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js +3 -3
  42. package/dist/cjs/components/EditableTable/cellTypes/boolean/Edit.st.css.js.map +1 -1
  43. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js +3 -3
  44. package/dist/cjs/components/EditableTable/cellTypes/boolean/View.st.css.js.map +1 -1
  45. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  46. package/dist/cjs/components/EditableTable/cellTypes/color/Edit.st.css.js.map +1 -1
  47. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js +3 -3
  48. package/dist/cjs/components/EditableTable/cellTypes/date/Edit.st.css.js.map +1 -1
  49. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  50. package/dist/cjs/components/EditableTable/cellTypes/date/View.st.css.js.map +1 -1
  51. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js +8 -8
  52. package/dist/cjs/components/EditableTable/cellTypes/datetime/Edit.st.css.js.map +1 -1
  53. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js +7 -7
  54. package/dist/cjs/components/EditableTable/cellTypes/datetime/View.st.css.js.map +1 -1
  55. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js +3 -3
  56. package/dist/cjs/components/EditableTable/cellTypes/email/Edit.st.css.js.map +1 -1
  57. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  58. package/dist/cjs/components/EditableTable/cellTypes/email/View.st.css.js.map +1 -1
  59. package/dist/cjs/components/EditableTable/cellTypes/mediaImage/Edit.st.css.js +2 -2
  60. package/dist/cjs/components/EditableTable/cellTypes/mediaImage/Edit.st.css.js.map +1 -1
  61. package/dist/cjs/components/EditableTable/cellTypes/multiDocument/Edit.st.css.js +3 -3
  62. package/dist/cjs/components/EditableTable/cellTypes/multiDocument/Edit.st.css.js.map +1 -1
  63. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js +3 -3
  64. package/dist/cjs/components/EditableTable/cellTypes/number/Edit.st.css.js.map +1 -1
  65. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js +3 -3
  66. package/dist/cjs/components/EditableTable/cellTypes/number/View.st.css.js.map +1 -1
  67. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  68. package/dist/cjs/components/EditableTable/cellTypes/object/View.st.css.js.map +1 -1
  69. package/dist/cjs/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.js +6 -6
  70. package/dist/cjs/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.js.map +1 -1
  71. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js +3 -3
  72. package/dist/cjs/components/EditableTable/cellTypes/select/Edit.st.css.js.map +1 -1
  73. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js +4 -4
  74. package/dist/cjs/components/EditableTable/cellTypes/text/Edit.st.css.js.map +1 -1
  75. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  76. package/dist/cjs/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  77. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js +4 -4
  78. package/dist/cjs/components/EditableTable/cellTypes/time/Edit.st.css.js.map +1 -1
  79. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js +3 -3
  80. package/dist/cjs/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  81. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js +5 -5
  82. package/dist/cjs/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  83. package/dist/cjs/components/EmptyState/EmptyStateBase.st.css.js +2 -2
  84. package/dist/cjs/components/EmptyState/EmptyStateBase.st.css.js.map +1 -1
  85. package/dist/cjs/components/EntityPage/EntityPageActionsBar.js +1 -1
  86. package/dist/cjs/components/EntityPage/EntityPageActionsBar.js.map +1 -1
  87. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  88. package/dist/cjs/components/EntityPage/EntityPagePlain.st.css.js.map +1 -1
  89. package/dist/cjs/components/EntityPageFields/EntityPageField.st.css.js +3 -3
  90. package/dist/cjs/components/EntityPageFields/EntityPageField.st.css.js.map +1 -1
  91. package/dist/cjs/components/EntityPageFields/EntityPageFields.js +9 -8
  92. package/dist/cjs/components/EntityPageFields/EntityPageFields.js.map +1 -1
  93. package/dist/cjs/components/EntityPageFields/EntityPageReferenceValue.js +49 -7
  94. package/dist/cjs/components/EntityPageFields/EntityPageReferenceValue.js.map +1 -1
  95. package/dist/cjs/components/EntityPageFields/EntityPageReferenceValue.st.css +17 -0
  96. package/dist/cjs/components/EntityPageFields/EntityPageReferenceValue.st.css.js +26 -0
  97. package/dist/cjs/components/EntityPageFields/EntityPageReferenceValue.st.css.js.map +1 -0
  98. package/dist/cjs/components/Fade/Fade.st.css.js +2 -2
  99. package/dist/cjs/components/Fade/Fade.st.css.js.map +1 -1
  100. package/dist/cjs/components/Heading/Heading.st.css.js +2 -2
  101. package/dist/cjs/components/Heading/Heading.st.css.js.map +1 -1
  102. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js +3 -3
  103. package/dist/cjs/components/ImportButton/ImportStepUpload.st.css.js.map +1 -1
  104. package/dist/cjs/components/ImportButton/SchemaImportFieldEditor.js +2 -13
  105. package/dist/cjs/components/ImportButton/SchemaImportFieldEditor.js.map +1 -1
  106. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js +2 -2
  107. package/dist/cjs/components/InputOverflow/InputOverflow.st.css.js.map +1 -1
  108. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js +3 -3
  109. package/dist/cjs/components/LoadingRow/LoadingRow.st.css.js.map +1 -1
  110. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  111. package/dist/cjs/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  112. package/dist/cjs/components/MaxLines/MaxLines.st.css.js +2 -2
  113. package/dist/cjs/components/MaxLines/MaxLines.st.css.js.map +1 -1
  114. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +5 -5
  115. package/dist/cjs/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  116. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  117. package/dist/cjs/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js.map +1 -1
  118. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js +5 -5
  119. package/dist/cjs/components/NestedTable/NestedTableRow.st.css.js.map +1 -1
  120. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  121. package/dist/cjs/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js.map +1 -1
  122. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  123. package/dist/cjs/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  124. package/dist/cjs/components/PickerContent/PickerContent.st.css.js +2 -2
  125. package/dist/cjs/components/PickerContent/PickerContent.st.css.js.map +1 -1
  126. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js +4 -4
  127. package/dist/cjs/components/PickerContent/PickerContentAdditionalStep.st.css.js.map +1 -1
  128. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  129. package/dist/cjs/components/PickerTableListItem/PickerTableListItem.st.css.js.map +1 -1
  130. package/dist/cjs/components/SchemaSource/schemaFieldActions.js.map +1 -1
  131. package/dist/cjs/components/SchemaSource/schemaFieldManagement.js.map +1 -1
  132. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  133. package/dist/cjs/components/ScrollableContent/ScrollableContent.st.css.js.map +1 -1
  134. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js +10 -10
  135. package/dist/cjs/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  136. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js +3 -3
  137. package/dist/cjs/components/SkeletonCard/SkeletonCard.st.css.js.map +1 -1
  138. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js +2 -2
  139. package/dist/cjs/components/SlidingModal/SlidingModal.st.css.js.map +1 -1
  140. package/dist/cjs/components/Table/AddFieldColumnHeader.st.css.js +6 -6
  141. package/dist/cjs/components/Table/AddFieldColumnHeader.st.css.js.map +1 -1
  142. package/dist/cjs/components/Table/NumberCell.st.css.js +2 -2
  143. package/dist/cjs/components/Table/NumberCell.st.css.js.map +1 -1
  144. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js +3 -3
  145. package/dist/cjs/components/TabsFilter/TabsFilter.st.css.js.map +1 -1
  146. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  147. package/dist/cjs/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js.map +1 -1
  148. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  149. package/dist/cjs/components/ToolbarItem/ToolbarItem.st.css.js.map +1 -1
  150. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  151. package/dist/cjs/components/ToolbarItemBox/ToolbarItemBox.st.css.js.map +1 -1
  152. package/dist/cjs/components/common.st.css.js +4 -4
  153. package/dist/cjs/components/common.st.css.js.map +1 -1
  154. package/dist/cjs/model/itemAccess.js +21 -0
  155. package/dist/cjs/model/itemAccess.js.map +1 -0
  156. package/dist/cjs/schema/syncSourcePermissions.js +9 -4
  157. package/dist/cjs/schema/syncSourcePermissions.js.map +1 -1
  158. package/dist/cjs/schema/useEntityPage.js +17 -3
  159. package/dist/cjs/schema/useEntityPage.js.map +1 -1
  160. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js +3 -3
  161. package/dist/cjs/state/CollectionPage/CollectionPageHeader.st.css.js.map +1 -1
  162. package/dist/cjs/state/CollectionPage/MobilePrimaryActionBar.st.css.js +2 -2
  163. package/dist/cjs/state/CollectionPage/MobilePrimaryActionBar.st.css.js.map +1 -1
  164. package/dist/cjs/state/CollectionPage/TitleBadges.st.css.js +4 -4
  165. package/dist/cjs/state/CollectionPage/TitleBadges.st.css.js.map +1 -1
  166. package/dist/cjs/state/EditableTable/CellValueState.js +154 -7
  167. package/dist/cjs/state/EditableTable/CellValueState.js.map +1 -1
  168. package/dist/cjs/state/EditableTable/ClipboardState.js +30 -14
  169. package/dist/cjs/state/EditableTable/ClipboardState.js.map +1 -1
  170. package/dist/cjs/state/EditableTable/EditableTableState.js +1 -1
  171. package/dist/cjs/state/EditableTable/EditableTableState.js.map +1 -1
  172. package/dist/cjs/state/EditableTable/MutationState.js +31 -7
  173. package/dist/cjs/state/EditableTable/MutationState.js.map +1 -1
  174. package/dist/cjs/state/EntityPage/EntityPageDeleteActionState.js +5 -5
  175. package/dist/cjs/state/EntityPage/EntityPageDeleteActionState.js.map +1 -1
  176. package/dist/cjs/state/EntityPage/EntityPageState.js +57 -8
  177. package/dist/cjs/state/EntityPage/EntityPageState.js.map +1 -1
  178. package/dist/cjs/state/EntityPage/sourceSave.js +16 -0
  179. package/dist/cjs/state/EntityPage/sourceSave.js.map +1 -0
  180. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js +2 -2
  181. package/dist/cjs/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  182. package/dist/cjs/styles.global.css +2 -2
  183. package/dist/cjs/version.js +1 -1
  184. package/dist/cjs/version.js.map +1 -1
  185. package/dist/docs/Table.md +3 -1
  186. package/dist/docs/index.json +2 -2
  187. package/dist/docs/useEntity.md +1 -1
  188. package/dist/dts-bundle/hooks/schema/useEntityPage.d.ts +5 -4
  189. package/dist/dts-bundle/hooks/useEntityPage.d.ts +5 -4
  190. package/dist/dts-bundle/hooks/usePickerModal.d.ts +3 -0
  191. package/dist/dts-bundle/index.json +25 -25
  192. package/dist/dts-bundle/index.txt +8 -8
  193. package/dist/dts-bundle/types/CellType.d.ts +3 -0
  194. package/dist/dts-bundle/types/EntityPageState.d.ts +10 -4
  195. package/dist/dts-bundle/types/EntityPageStateParams.d.ts +5 -4
  196. package/dist/dts-bundle/types/OnSaveParams.d.ts +5 -4
  197. package/dist/dts-bundle/types/UseEntityPageParams.d.ts +5 -4
  198. package/dist/esm/components/CardContainer/CardContainer.st.css.js +2 -2
  199. package/dist/esm/components/CmsFieldManagement/CmsFieldForm.st.css.js +2 -2
  200. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js +2 -2
  201. package/dist/esm/components/CmsFieldManagement/CmsFieldModal.st.css.js.map +1 -1
  202. package/dist/esm/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.js +2 -2
  203. package/dist/esm/components/Collapse/Collapse.st.css.js +2 -2
  204. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js +2 -2
  205. package/dist/esm/components/CollectionPageNew/CollectionPage.st.css.js.map +1 -1
  206. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js +2 -2
  207. package/dist/esm/components/CollectionSectionHeader/CollectionSectionHeader.st.css.js.map +1 -1
  208. package/dist/esm/components/CollectionTable/CollectionTable.st.css.js +2 -2
  209. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js +2 -2
  210. package/dist/esm/components/CollectionTable/CollectionTableWSRTable.st.css.js.map +1 -1
  211. package/dist/esm/components/CollectionToolbar/CollectionToolbar.st.css.js +2 -2
  212. package/dist/esm/components/CollectionToolbar/SearchOrCustomFilter.st.css.js +2 -2
  213. package/dist/esm/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.js +2 -2
  214. package/dist/esm/components/CollectionViewsDropdown/ViewsDropdown.st.css.js +2 -2
  215. package/dist/esm/components/CustomFieldModal/CustomFieldFormPiiFields.st.css.js +2 -2
  216. package/dist/esm/components/DragHandle/DragHandle.st.css.js +2 -2
  217. package/dist/esm/components/EditableTable/EditableCell.st.css.js +2 -2
  218. package/dist/esm/components/EditableTable/HeaderActionsPopover.st.css.js +2 -2
  219. package/dist/esm/components/EditableTable/cellTypes/CellViewLayout.st.css.js +2 -2
  220. package/dist/esm/components/EditableTable/cellTypes/CellViewLayout.st.css.js.map +1 -1
  221. package/dist/esm/components/EditableTable/cellTypes/JsonInputEdit.st.css.js +2 -2
  222. package/dist/esm/components/EditableTable/cellTypes/address/Edit.st.css.js +2 -2
  223. package/dist/esm/components/EditableTable/cellTypes/address/Edit.st.css.js.map +1 -1
  224. package/dist/esm/components/EditableTable/cellTypes/boolean/Edit.st.css.js +2 -2
  225. package/dist/esm/components/EditableTable/cellTypes/boolean/View.st.css.js +2 -2
  226. package/dist/esm/components/EditableTable/cellTypes/color/Edit.st.css.js +2 -2
  227. package/dist/esm/components/EditableTable/cellTypes/date/Edit.st.css.js +2 -2
  228. package/dist/esm/components/EditableTable/cellTypes/date/View.st.css.js +2 -2
  229. package/dist/esm/components/EditableTable/cellTypes/datetime/Edit.st.css.js +2 -2
  230. package/dist/esm/components/EditableTable/cellTypes/datetime/View.st.css.js +2 -2
  231. package/dist/esm/components/EditableTable/cellTypes/email/Edit.st.css.js +2 -2
  232. package/dist/esm/components/EditableTable/cellTypes/email/View.st.css.js +2 -2
  233. package/dist/esm/components/EditableTable/cellTypes/mediaImage/Edit.st.css.js +2 -2
  234. package/dist/esm/components/EditableTable/cellTypes/multiDocument/Edit.st.css.js +2 -2
  235. package/dist/esm/components/EditableTable/cellTypes/multiDocument/Edit.st.css.js.map +1 -1
  236. package/dist/esm/components/EditableTable/cellTypes/number/Edit.st.css.js +2 -2
  237. package/dist/esm/components/EditableTable/cellTypes/number/View.st.css.js +2 -2
  238. package/dist/esm/components/EditableTable/cellTypes/object/View.st.css.js +2 -2
  239. package/dist/esm/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.js +2 -2
  240. package/dist/esm/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.js.map +1 -1
  241. package/dist/esm/components/EditableTable/cellTypes/select/Edit.st.css.js +2 -2
  242. package/dist/esm/components/EditableTable/cellTypes/text/Edit.st.css.js +2 -2
  243. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js +2 -2
  244. package/dist/esm/components/EditableTable/cellTypes/text/View.st.css.js.map +1 -1
  245. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js +2 -2
  246. package/dist/esm/components/EditableTable/cellTypes/time/Edit.st.css.js.map +1 -1
  247. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js +2 -2
  248. package/dist/esm/components/EditableTable/cellTypes/url/Edit.st.css.js.map +1 -1
  249. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js +2 -2
  250. package/dist/esm/components/EditableTable/cellTypes/url/View.st.css.js.map +1 -1
  251. package/dist/esm/components/EmptyState/EmptyStateBase.st.css.js +2 -2
  252. package/dist/esm/components/EntityPage/EntityPageActionsBar.js +1 -1
  253. package/dist/esm/components/EntityPage/EntityPageActionsBar.js.map +1 -1
  254. package/dist/esm/components/EntityPage/EntityPagePlain.st.css.js +2 -2
  255. package/dist/esm/components/EntityPageFields/EntityPageField.st.css.js +2 -2
  256. package/dist/esm/components/EntityPageFields/EntityPageFields.js +3 -1
  257. package/dist/esm/components/EntityPageFields/EntityPageFields.js.map +1 -1
  258. package/dist/esm/components/EntityPageFields/EntityPageReferenceValue.js +19 -2
  259. package/dist/esm/components/EntityPageFields/EntityPageReferenceValue.js.map +1 -1
  260. package/dist/esm/components/EntityPageFields/EntityPageReferenceValue.st.css +17 -0
  261. package/dist/esm/components/EntityPageFields/EntityPageReferenceValue.st.css.js +15 -0
  262. package/dist/esm/components/EntityPageFields/EntityPageReferenceValue.st.css.js.map +1 -0
  263. package/dist/esm/components/Fade/Fade.st.css.js +2 -2
  264. package/dist/esm/components/Fade/Fade.st.css.js.map +1 -1
  265. package/dist/esm/components/Heading/Heading.st.css.js +2 -2
  266. package/dist/esm/components/ImportButton/ImportStepUpload.st.css.js +2 -2
  267. package/dist/esm/components/ImportButton/SchemaImportFieldEditor.js +2 -12
  268. package/dist/esm/components/ImportButton/SchemaImportFieldEditor.js.map +1 -1
  269. package/dist/esm/components/InputOverflow/InputOverflow.st.css.js +2 -2
  270. package/dist/esm/components/LoadingRow/LoadingRow.st.css.js +3 -3
  271. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js +2 -2
  272. package/dist/esm/components/MaxHeightText/MaxHeightText.st.css.js.map +1 -1
  273. package/dist/esm/components/MaxLines/MaxLines.st.css.js +2 -2
  274. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js +2 -2
  275. package/dist/esm/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.js.map +1 -1
  276. package/dist/esm/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.js +2 -2
  277. package/dist/esm/components/NestedTable/NestedTableRow.st.css.js +2 -2
  278. package/dist/esm/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.js +2 -2
  279. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js +2 -2
  280. package/dist/esm/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.js.map +1 -1
  281. package/dist/esm/components/PickerContent/PickerContent.st.css.js +2 -2
  282. package/dist/esm/components/PickerContent/PickerContent.st.css.js.map +1 -1
  283. package/dist/esm/components/PickerContent/PickerContentAdditionalStep.st.css.js +2 -2
  284. package/dist/esm/components/PickerTableListItem/PickerTableListItem.st.css.js +2 -2
  285. package/dist/esm/components/SchemaSource/schemaFieldActions.js +2 -1
  286. package/dist/esm/components/SchemaSource/schemaFieldActions.js.map +1 -1
  287. package/dist/esm/components/SchemaSource/schemaFieldManagement.js.map +1 -1
  288. package/dist/esm/components/ScrollableContent/ScrollableContent.st.css.js +2 -2
  289. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js +2 -2
  290. package/dist/esm/components/SetupWidget/SetupWidget.st.css.js.map +1 -1
  291. package/dist/esm/components/SkeletonCard/SkeletonCard.st.css.js +2 -2
  292. package/dist/esm/components/SlidingModal/SlidingModal.st.css.js +2 -2
  293. package/dist/esm/components/Table/AddFieldColumnHeader.st.css.js +2 -2
  294. package/dist/esm/components/Table/NumberCell.st.css.js +2 -2
  295. package/dist/esm/components/TabsFilter/TabsFilter.st.css.js +2 -2
  296. package/dist/esm/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.js +2 -2
  297. package/dist/esm/components/ToolbarItem/ToolbarItem.st.css.js +2 -2
  298. package/dist/esm/components/ToolbarItemBox/ToolbarItemBox.st.css.js +2 -2
  299. package/dist/esm/components/common.st.css.js +2 -2
  300. package/dist/esm/model/itemAccess.js +17 -0
  301. package/dist/esm/model/itemAccess.js.map +1 -0
  302. package/dist/esm/schema/syncSourcePermissions.js +6 -5
  303. package/dist/esm/schema/syncSourcePermissions.js.map +1 -1
  304. package/dist/esm/schema/useEntityPage.js +11 -4
  305. package/dist/esm/schema/useEntityPage.js.map +1 -1
  306. package/dist/esm/state/CollectionPage/CollectionPageHeader.st.css.js +2 -2
  307. package/dist/esm/state/CollectionPage/MobilePrimaryActionBar.st.css.js +2 -2
  308. package/dist/esm/state/CollectionPage/TitleBadges.st.css.js +2 -2
  309. package/dist/esm/state/CollectionPage/TitleBadges.st.css.js.map +1 -1
  310. package/dist/esm/state/EditableTable/CellValueState.js +146 -7
  311. package/dist/esm/state/EditableTable/CellValueState.js.map +1 -1
  312. package/dist/esm/state/EditableTable/ClipboardState.js +16 -15
  313. package/dist/esm/state/EditableTable/ClipboardState.js.map +1 -1
  314. package/dist/esm/state/EditableTable/EditableTableState.js +1 -1
  315. package/dist/esm/state/EditableTable/EditableTableState.js.map +1 -1
  316. package/dist/esm/state/EditableTable/MutationState.js +28 -7
  317. package/dist/esm/state/EditableTable/MutationState.js.map +1 -1
  318. package/dist/esm/state/EntityPage/EntityPageDeleteActionState.js +4 -2
  319. package/dist/esm/state/EntityPage/EntityPageDeleteActionState.js.map +1 -1
  320. package/dist/esm/state/EntityPage/EntityPageState.js +45 -1
  321. package/dist/esm/state/EntityPage/EntityPageState.js.map +1 -1
  322. package/dist/esm/state/EntityPage/sourceSave.js +11 -0
  323. package/dist/esm/state/EntityPage/sourceSave.js.map +1 -0
  324. package/dist/esm/state/FormPage/FormPageHeader.st.css.js +2 -2
  325. package/dist/esm/state/FormPage/FormPageHeader.st.css.js.map +1 -1
  326. package/dist/esm/styles.global.css +2 -2
  327. package/dist/esm/version.js +1 -1
  328. package/dist/examples/Table/mobile-columns.tsx +66 -98
  329. package/dist/types/components/CmsFieldManagement/CmsFieldModal.st.css.d.ts.map +1 -1
  330. package/dist/types/components/CollectionPageNew/CollectionPage.st.css.d.ts.map +1 -1
  331. package/dist/types/components/CollectionSectionHeader/CollectionSectionHeader.st.css.d.ts.map +1 -1
  332. package/dist/types/components/CollectionTable/CollectionTableWSRTable.st.css.d.ts.map +1 -1
  333. package/dist/types/components/EditableTable/cellTypes/CellViewLayout.st.css.d.ts.map +1 -1
  334. package/dist/types/components/EditableTable/cellTypes/address/Edit.st.css.d.ts.map +1 -1
  335. package/dist/types/components/EditableTable/cellTypes/multiDocument/Edit.st.css.d.ts.map +1 -1
  336. package/dist/types/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.d.ts.map +1 -1
  337. package/dist/types/components/EditableTable/cellTypes/text/View.st.css.d.ts.map +1 -1
  338. package/dist/types/components/EditableTable/cellTypes/time/Edit.st.css.d.ts.map +1 -1
  339. package/dist/types/components/EditableTable/cellTypes/url/Edit.st.css.d.ts.map +1 -1
  340. package/dist/types/components/EditableTable/cellTypes/url/View.st.css.d.ts.map +1 -1
  341. package/dist/types/components/EntityPageFields/EntityPageFields.d.ts.map +1 -1
  342. package/dist/types/components/EntityPageFields/EntityPageReferenceValue.d.ts.map +1 -1
  343. package/dist/types/components/EntityPageFields/EntityPageReferenceValue.st.css.d.ts +17 -0
  344. package/dist/types/components/EntityPageFields/EntityPageReferenceValue.st.css.d.ts.map +1 -0
  345. package/dist/types/components/Fade/Fade.st.css.d.ts.map +1 -1
  346. package/dist/types/components/ImportButton/SchemaImportFieldEditor.d.ts.map +1 -1
  347. package/dist/types/components/MaxHeightText/MaxHeightText.st.css.d.ts.map +1 -1
  348. package/dist/types/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.d.ts.map +1 -1
  349. package/dist/types/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.d.ts.map +1 -1
  350. package/dist/types/components/PickerContent/PickerContent.st.css.d.ts.map +1 -1
  351. package/dist/types/components/SchemaSource/schemaFieldActions.d.ts.map +1 -1
  352. package/dist/types/components/SchemaSource/schemaFieldManagement.d.ts.map +1 -1
  353. package/dist/types/components/SetupWidget/SetupWidget.st.css.d.ts.map +1 -1
  354. package/dist/types/model/itemAccess.d.ts +16 -0
  355. package/dist/types/model/itemAccess.d.ts.map +1 -0
  356. package/dist/types/schema/syncSourcePermissions.d.ts.map +1 -1
  357. package/dist/types/schema/useEntityPage.d.ts.map +1 -1
  358. package/dist/types/state/CollectionPage/TitleBadges.st.css.d.ts.map +1 -1
  359. package/dist/types/state/EditableTable/CellValueState.d.ts +40 -6
  360. package/dist/types/state/EditableTable/CellValueState.d.ts.map +1 -1
  361. package/dist/types/state/EditableTable/ClipboardState.d.ts +1 -1
  362. package/dist/types/state/EditableTable/ClipboardState.d.ts.map +1 -1
  363. package/dist/types/state/EditableTable/MutationState.d.ts +18 -1
  364. package/dist/types/state/EditableTable/MutationState.d.ts.map +1 -1
  365. package/dist/types/state/EntityPage/EntityPageDeleteActionState.d.ts.map +1 -1
  366. package/dist/types/state/EntityPage/EntityPageState.d.ts +10 -4
  367. package/dist/types/state/EntityPage/EntityPageState.d.ts.map +1 -1
  368. package/dist/types/state/EntityPage/sourceSave.d.ts +3 -0
  369. package/dist/types/state/EntityPage/sourceSave.d.ts.map +1 -0
  370. package/dist/types/state/FormPage/FormPageHeader.st.css.d.ts.map +1 -1
  371. package/dist/types/version.d.ts +1 -1
  372. package/package.json +7 -7
  373. package/src/components/CardContainer/CardContainer.st.css.ts +2 -2
  374. package/src/components/CmsFieldManagement/CmsFieldForm.st.css.ts +2 -2
  375. package/src/components/CmsFieldManagement/CmsFieldModal.st.css.ts +2 -2
  376. package/src/components/CmsFieldManagement/Sections/ValidationAndDefaultsSection.st.css.ts +2 -2
  377. package/src/components/Collapse/Collapse.st.css.ts +2 -2
  378. package/src/components/CollectionPageNew/CollectionPage.st.css.ts +2 -2
  379. package/src/components/CollectionSectionHeader/CollectionSectionHeader.st.css.ts +2 -2
  380. package/src/components/CollectionTable/CollectionTable.st.css.ts +2 -2
  381. package/src/components/CollectionTable/CollectionTableWSRTable.st.css.ts +2 -2
  382. package/src/components/CollectionToolbar/CollectionToolbar.st.css.ts +2 -2
  383. package/src/components/CollectionToolbar/SearchOrCustomFilter.st.css.ts +2 -2
  384. package/src/components/CollectionViewsDropdown/AutoCompleteReadonly.st.css.ts +2 -2
  385. package/src/components/CollectionViewsDropdown/ViewsDropdown.st.css.ts +2 -2
  386. package/src/components/CustomFieldModal/CustomFieldFormPiiFields.st.css.ts +2 -2
  387. package/src/components/DragHandle/DragHandle.st.css.ts +2 -2
  388. package/src/components/EditableTable/EditableCell.st.css.ts +2 -2
  389. package/src/components/EditableTable/HeaderActionsPopover.st.css.ts +2 -2
  390. package/src/components/EditableTable/cellTypes/CellViewLayout.st.css.ts +2 -2
  391. package/src/components/EditableTable/cellTypes/JsonInputEdit.st.css.ts +2 -2
  392. package/src/components/EditableTable/cellTypes/address/Edit.st.css.ts +2 -2
  393. package/src/components/EditableTable/cellTypes/boolean/Edit.st.css.ts +2 -2
  394. package/src/components/EditableTable/cellTypes/boolean/View.st.css.ts +2 -2
  395. package/src/components/EditableTable/cellTypes/color/Edit.st.css.ts +2 -2
  396. package/src/components/EditableTable/cellTypes/date/Edit.st.css.ts +2 -2
  397. package/src/components/EditableTable/cellTypes/date/View.st.css.ts +2 -2
  398. package/src/components/EditableTable/cellTypes/datetime/Edit.st.css.ts +2 -2
  399. package/src/components/EditableTable/cellTypes/datetime/View.st.css.ts +2 -2
  400. package/src/components/EditableTable/cellTypes/email/Edit.st.css.ts +2 -2
  401. package/src/components/EditableTable/cellTypes/email/View.st.css.ts +2 -2
  402. package/src/components/EditableTable/cellTypes/mediaImage/Edit.st.css.ts +2 -2
  403. package/src/components/EditableTable/cellTypes/multiDocument/Edit.st.css.ts +2 -2
  404. package/src/components/EditableTable/cellTypes/number/Edit.st.css.ts +2 -2
  405. package/src/components/EditableTable/cellTypes/number/View.st.css.ts +2 -2
  406. package/src/components/EditableTable/cellTypes/object/View.st.css.ts +2 -2
  407. package/src/components/EditableTable/cellTypes/reference/EmptyReferenceView.st.css.ts +2 -2
  408. package/src/components/EditableTable/cellTypes/select/Edit.st.css.ts +2 -2
  409. package/src/components/EditableTable/cellTypes/text/Edit.st.css.ts +2 -2
  410. package/src/components/EditableTable/cellTypes/text/View.st.css.ts +2 -2
  411. package/src/components/EditableTable/cellTypes/time/Edit.st.css.ts +2 -2
  412. package/src/components/EditableTable/cellTypes/url/Edit.st.css.ts +2 -2
  413. package/src/components/EditableTable/cellTypes/url/View.st.css.ts +2 -2
  414. package/src/components/EmptyState/EmptyStateBase.st.css.ts +2 -2
  415. package/src/components/EntityPage/EntityPageActionsBar.tsx +1 -1
  416. package/src/components/EntityPage/EntityPagePlain.st.css.ts +2 -2
  417. package/src/components/EntityPageFields/EntityPageField.st.css.ts +2 -2
  418. package/src/components/EntityPageFields/EntityPageFields.tsx +5 -1
  419. package/src/components/EntityPageFields/EntityPageReferenceValue.st.css +17 -0
  420. package/src/components/EntityPageFields/EntityPageReferenceValue.st.css.ts +25 -0
  421. package/src/components/EntityPageFields/EntityPageReferenceValue.tsx +43 -6
  422. package/src/components/Fade/Fade.st.css.ts +2 -2
  423. package/src/components/Heading/Heading.st.css.ts +2 -2
  424. package/src/components/ImportButton/ImportStepUpload.st.css.ts +2 -2
  425. package/src/components/ImportButton/SchemaImportFieldEditor.tsx +1 -20
  426. package/src/components/InputOverflow/InputOverflow.st.css.ts +2 -2
  427. package/src/components/LoadingRow/LoadingRow.st.css.ts +3 -3
  428. package/src/components/MaxHeightText/MaxHeightText.st.css.ts +2 -2
  429. package/src/components/MaxLines/MaxLines.st.css.ts +2 -2
  430. package/src/components/MultiBulkActionToolbar/MultiBulkActionToolbar.st.css.ts +2 -2
  431. package/src/components/NestedTable/NestedTablePlaceholderStatesRow.st.css.ts +2 -2
  432. package/src/components/NestedTable/NestedTableRow.st.css.ts +2 -2
  433. package/src/components/NestedTableDragAndDrop/MultipleDragOverlayEffect.st.css.ts +2 -2
  434. package/src/components/NestedTableDragAndDrop/NestedTableDragAndDropRow.st.css.ts +2 -2
  435. package/src/components/PickerContent/PickerContent.st.css.ts +2 -2
  436. package/src/components/PickerContent/PickerContentAdditionalStep.st.css.ts +2 -2
  437. package/src/components/PickerTableListItem/PickerTableListItem.st.css.ts +2 -2
  438. package/src/components/SchemaSource/schemaFieldActions.ts +4 -1
  439. package/src/components/SchemaSource/schemaFieldManagement.ts +3 -1
  440. package/src/components/ScrollableContent/ScrollableContent.st.css.ts +2 -2
  441. package/src/components/SetupWidget/SetupWidget.st.css.ts +2 -2
  442. package/src/components/SkeletonCard/SkeletonCard.st.css.ts +2 -2
  443. package/src/components/SlidingModal/SlidingModal.st.css.ts +2 -2
  444. package/src/components/Table/AddFieldColumnHeader.st.css.ts +2 -2
  445. package/src/components/Table/NumberCell.st.css.ts +2 -2
  446. package/src/components/TabsFilter/TabsFilter.st.css.ts +2 -2
  447. package/src/components/Tags/ManageTags/ManageTagsModal/ManageTagsModal.st.css.ts +2 -2
  448. package/src/components/ToolbarItem/ToolbarItem.st.css.ts +2 -2
  449. package/src/components/ToolbarItemBox/ToolbarItemBox.st.css.ts +2 -2
  450. package/src/components/common.st.css.ts +2 -2
  451. package/src/model/itemAccess.ts +36 -0
  452. package/src/schema/syncSourcePermissions.ts +6 -6
  453. package/src/schema/useEntityPage.ts +17 -4
  454. package/src/state/CollectionPage/CollectionPageHeader.st.css.ts +2 -2
  455. package/src/state/CollectionPage/MobilePrimaryActionBar.st.css.ts +2 -2
  456. package/src/state/CollectionPage/TitleBadges.st.css.ts +2 -2
  457. package/src/state/EditableTable/CellValueState.ts +197 -8
  458. package/src/state/EditableTable/ClipboardState.ts +24 -22
  459. package/src/state/EditableTable/EditableTableState.ts +1 -1
  460. package/src/state/EditableTable/MutationState.ts +56 -7
  461. package/src/state/EntityPage/EntityPageDeleteActionState.ts +4 -2
  462. package/src/state/EntityPage/EntityPageState.ts +61 -5
  463. package/src/state/EntityPage/sourceSave.ts +12 -0
  464. package/src/state/FormPage/FormPageHeader.st.css.ts +2 -2
  465. package/src/styles.global.css +2 -2
  466. package/src/version.ts +1 -1
@@ -239,21 +239,45 @@ class MutationState {
239
239
  errorToast: this._retryableToast('cairo.editableTable.deleteItem.error.toast', 'Delete')
240
240
  });
241
241
  }
242
- updateItems(updatedItems, changedFieldIdsByItem) {
243
- const t = this._parent.collection.translate;
244
- if (updatedItems.length === 0) {
242
+
243
+ /** With `batchWait`, core runs a batch with the last update's `submit` and
244
+ * toast only, so an earlier update's Undo and `onKept` would be lost. */
245
+ get updatesAreBatched() {
246
+ return Boolean(this._optimisticActions.executor.batchWait);
247
+ }
248
+ updateItems(updatedItems, changedFieldIdsByItem, {
249
+ successToast,
250
+ undo
251
+ } = {}) {
252
+ // With its own toast, an empty update still runs, to show the toast for
253
+ // values that stayed local (invalid cells, unsaved rows).
254
+ if (updatedItems.length === 0 && typeof successToast !== 'string') {
245
255
  return;
246
256
  }
247
257
  const contexts = this._updateContexts(updatedItems, changedFieldIdsByItem);
248
258
  this._optimisticActions.updateMany(updatedItems, {
249
259
  keepPosition: true,
250
- submit: items => this._submitUpdate(items, updatedItems, contexts),
251
- successToast: t('cairo.editableTable.updateItem.success.toast', {
252
- count: updatedItems.length
253
- }),
260
+ // With undo, core calls this when the toast closes or times out without
261
+ // Undo. Retry calls it again.
262
+ submit: items => {
263
+ undo == null || undo.onKept();
264
+ // With `batchWait`, `items` also holds the other updates of the batch.
265
+ return items.length > 0 ? this._submitUpdate(items, updatedItems, contexts) : Promise.resolve();
266
+ },
267
+ successToast: this._updateSuccessToast(successToast, updatedItems.length),
268
+ showUndoToast: undo !== undefined,
269
+ onUndo: undo == null ? void 0 : undo.onUndo,
254
270
  errorToast: this._retryableToast('cairo.editableTable.updateItem.error.toast', 'Update')
255
271
  });
256
272
  }
273
+ _updateSuccessToast(successToast, count) {
274
+ if (successToast === null) {
275
+ return undefined;
276
+ }
277
+ return successToast ?? this._parent.collection.translate('cairo.editableTable.updateItem.success.toast', {
278
+ count
279
+ });
280
+ }
257
281
 
258
282
  /** Wraps the create submit so the outcome is reported once the server answers
259
283
  * — the optimistic action itself has no completion callback. */
@@ -1 +1 @@
1
- {"version":3,"names":["_mobx","require","MutationState","constructor","parent","handlers","createOptimisticActions","_defineProperty2","default","Map","Set","items","createdItems","_handlers","submitCreate","itemKey","_parent","collection","runInAction","forEach","createdItem","index","submittedItem","oldKey","newKey","_pendingCreateKeys","delete","rowKey","draft","_drafts","afterItemKey","set","cellInteraction","replaceRowKey","_optimisticActions","makeObservable","observable","shallow","addItem","action","commitNewRow","deleteItems","init","_mergeDraftRows","keyedItems","size","draftBelow","key","item","merged","pushDraftsBelow","anchorKey","get","push","id","length","pageIndex","indexWithinPage","undefined","keyedItem","keys","origin","bi","rowCreationStart","newItem","createItem","isLocalNewRow","has","t","translate","_serverAnchorFor","add","createOne","submit","_reportedCreate","successToast","errorToast","_retryableToast","duplicateItem","find","ki","sourceItem","newId","sourceId","duplicate","k","Object","String","rowKeys","deleted","_survivingAnchorAbove","serverRowKeys","cellValue","dropRowCellState","map","_this$_parent$keyedIt","filter","deleteMany","submitDelete","count","updateItems","updatedItems","changedFieldIdsByItem","contexts","_updateContexts","updateMany","keepPosition","_submitUpdate","result","_submitCreate","rowCreationEnd","resultType","itemIds","error","messageKey","actionName","_err","retry","message","onClick","tryAgainClicked","text","sameItems","every","submitUpdate","_this$_parent$collect","previousItem","changedFieldIds","changedFieldIdsFromItems","start","findIndex","i","_isPatchCreatedRow","state","patches","some","patch","actionType","patchedItems","exports","updatedItem","isRecord","Array","from","fieldId","is","value"],"sources":["../../../../src/state/EditableTable/MutationState.ts"],"sourcesContent":["import { action, makeObservable, observable, runInAction } from 'mobx';\nimport type {\n CollectionOptimisticActions,\n CollectionUpdateContext,\n CollectionState,\n FiltersMap,\n KeyedItem,\n} from '@wix/bex-core';\nimport type { EditableTableState } from './EditableTableState';\nimport type {\n RetryActionName,\n RowCreationOrigin,\n} from './EditableTableStateBIReporter';\n\nexport interface EditableTableMutationHandlers<T> {\n /** Factory to create a new empty item with a fresh ID */\n createItem: () => T;\n /** Submit updated items to the server */\n submitUpdate: (\n items: T[],\n contexts?: CollectionUpdateContext<T>[],\n ) => Promise<T[] | void>;\n /** Submit newly created items to the server */\n submitCreate: (items: T[]) => Promise<T[] | void>;\n /** Submit item deletions to the server */\n submitDelete: (items: T[]) => Promise<void>;\n}\n\ntype DraftRow<T> = {\n item: T;\n afterItemKey?: string;\n origin: RowCreationOrigin;\n};\n\nexport class MutationState<T, F extends FiltersMap> {\n private readonly _handlers: EditableTableMutationHandlers<T>;\n private readonly _optimisticActions: CollectionOptimisticActions<T, F>;\n private readonly _parent: EditableTableState<T, F>;\n\n /**\n * Rows added locally and not yet created on the server, by row key.\n * `afterItemKey` is the key of the row directly above the draft\n * (undefined = top of the list). `addItem` keeps this exact, so at most\n * one draft is anchored on any given row.\n */\n readonly _drafts = new Map<string, DraftRow<T>>();\n\n /**\n * Row keys of creates still in flight. Their rows are already in the\n * collection result (optimistic patch), but their keys change when the\n * server responds, so nothing may anchor on them.\n */\n private readonly _pendingCreateKeys = new Set<string>();\n\n constructor(\n parent: EditableTableState<T, F>,\n handlers: EditableTableMutationHandlers<T>,\n createOptimisticActions: (\n collection: CollectionState<T, F>,\n ) => CollectionOptimisticActions<T, F>,\n ) {\n this._parent = parent;\n this._handlers = handlers;\n this._optimisticActions = createOptimisticActions(parent.collection);\n makeObservable(this, {\n _drafts: observable.shallow,\n addItem: action,\n commitNewRow: action,\n deleteItems: action,\n });\n }\n\n init() {\n return this._optimisticActions.init();\n }\n\n /**\n * Merge draft rows into the collection's keyed items for rendering.\n * Every draft renders directly below the row it is anchored on, so a\n * draft anchored on another draft follows it down the list. Drafts whose\n * anchor left the list (filtered out, deleted) stay visible at the end.\n */\n _mergeDraftRows(keyedItems: KeyedItem<T>[]): KeyedItem<T>[] {\n if (this._drafts.size === 0) {\n return keyedItems;\n }\n\n const draftBelow = new Map<string | undefined, { key: string; item: T }>();\n for (const [rowKey, draft] of this._drafts) {\n draftBelow.set(draft.afterItemKey, { key: rowKey, item: draft.item });\n }\n\n const merged: KeyedItem<T>[] = [];\n const pushDraftsBelow = (rowKey: string | undefined) => {\n let anchorKey = rowKey;\n let draft = draftBelow.get(anchorKey);\n while (draft) {\n draftBelow.delete(anchorKey);\n merged.push({\n item: draft.item,\n key: draft.key,\n id: draft.key,\n index: merged.length,\n pageIndex: -1,\n indexWithinPage: -1,\n });\n anchorKey = draft.key;\n draft = draftBelow.get(anchorKey);\n }\n };\n\n pushDraftsBelow(undefined);\n for (const keyedItem of keyedItems) {\n merged.push(keyedItem);\n pushDraftsBelow(keyedItem.key);\n }\n for (const anchorKey of [...draftBelow.keys()]) {\n pushDraftsBelow(anchorKey);\n }\n return merged;\n }\n\n addItem(\n afterItemKey?: string,\n origin: RowCreationOrigin = 'Card CTA',\n ): string {\n // The add-row button reports through `onAddItemClick`; context-menu\n // entries report here so each origin stays distinct.\n if (origin !== 'Card CTA') {\n this._parent.bi.rowCreationStart(origin);\n }\n\n const newItem = this._handlers.createItem();\n const rowKey = this._parent.collection.itemKey(newItem);\n // The new row lands directly below its anchor, pushing down whichever\n // draft sat there — that draft is now anchored on the new row.\n for (const [key, draft] of this._drafts) {\n if (draft.afterItemKey === afterItemKey) {\n this._drafts.set(key, { ...draft, afterItemKey: rowKey });\n }\n }\n this._drafts.set(rowKey, { item: newItem, afterItemKey, origin });\n return rowKey;\n }\n\n isLocalNewRow(rowKey: string): boolean {\n return this._drafts.has(rowKey);\n }\n\n /** Create a local new row on the server, with its edited values merged in. */\n commitNewRow(rowKey: string, item: T) {\n const t = this._parent.collection.translate;\n const draft = this._drafts.get(rowKey);\n if (!draft) {\n return;\n }\n\n // The create's optimistic patch can only anchor on a real server row —\n // not a draft, not another row created through this table's patches.\n const afterItemKey = this._serverAnchorFor(rowKey);\n const { origin } = draft;\n\n this._drafts.delete(rowKey);\n this._pendingCreateKeys.add(rowKey);\n this._optimisticActions.createOne(item, {\n submit: this._reportedCreate(origin),\n afterItemKey,\n successToast: t('cairo.editableTable.createItem.success.toast'),\n errorToast: this._retryableToast(\n 'cairo.editableTable.createItem.error.toast',\n 'Create',\n ),\n });\n }\n\n duplicateItem(rowKey: string) {\n const t = this._parent.collection.translate;\n const keyedItem = this._parent.keyedItems.find((ki) => ki.key === rowKey);\n if (!keyedItem) {\n return;\n }\n\n const origin: RowCreationOrigin = 'Row Context Menu - Duplicate';\n this._parent.bi.rowCreationStart(origin);\n\n const sourceItem = keyedItem.item;\n const newItem = this._handlers.createItem();\n const { itemKey } = this._parent.collection;\n const newId = itemKey(newItem);\n const sourceId = itemKey(sourceItem);\n const duplicate = { ...sourceItem } as any;\n for (const k of Object.keys(duplicate)) {\n if (String(duplicate[k]) === sourceId) {\n duplicate[k] = newId;\n break;\n }\n }\n this._pendingCreateKeys.add(newId);\n this._optimisticActions.createOne(duplicate as T, {\n submit: this._reportedCreate(origin),\n afterItemKey: rowKey,\n successToast: t('cairo.editableTable.duplicateItem.success.toast'),\n errorToast: this._retryableToast(\n 'cairo.editableTable.duplicateItem.error.toast',\n 'Duplicate',\n ),\n });\n }\n\n deleteItems(rowKeys: string[]) {\n const t = this._parent.collection.translate;\n const deleted = new Set(rowKeys);\n\n // Surviving drafts anchored on a deleted row move up to the nearest\n // surviving row, so they don't fall to the end of the list.\n for (const [rowKey, draft] of this._drafts) {\n if (\n deleted.has(rowKey) ||\n draft.afterItemKey == null ||\n !deleted.has(draft.afterItemKey)\n ) {\n continue;\n }\n this._drafts.set(rowKey, {\n ...draft,\n afterItemKey: this._survivingAnchorAbove(draft.afterItemKey, deleted),\n });\n }\n\n const serverRowKeys: string[] = [];\n for (const rowKey of rowKeys) {\n if (this._drafts.has(rowKey)) {\n // Never created on the server — dropping the draft is the whole\n // delete.\n this._drafts.delete(rowKey);\n this._parent.cellValue.dropRowCellState(rowKey);\n } else {\n serverRowKeys.push(rowKey);\n }\n }\n\n const items = serverRowKeys\n .map((key) => this._parent.keyedItems.find((ki) => ki.key === key)?.item)\n .filter((item): item is T => item != null);\n if (items.length === 0) {\n return;\n }\n\n this._optimisticActions.deleteMany(items, {\n submit: this._handlers.submitDelete,\n successToast: t('cairo.editableTable.deleteItem.success.toast', {\n count: items.length,\n }),\n errorToast: this._retryableToast(\n 'cairo.editableTable.deleteItem.error.toast',\n 'Delete',\n ),\n });\n }\n\n updateItems(updatedItems: T[], changedFieldIdsByItem?: string[][]) {\n const t = this._parent.collection.translate;\n if (updatedItems.length === 0) {\n return;\n }\n const contexts = this._updateContexts(updatedItems, changedFieldIdsByItem);\n this._optimisticActions.updateMany(updatedItems, {\n keepPosition: true,\n submit: (items) => this._submitUpdate(items, updatedItems, contexts),\n successToast: t('cairo.editableTable.updateItem.success.toast', {\n count: updatedItems.length,\n }),\n errorToast: this._retryableToast(\n 'cairo.editableTable.updateItem.error.toast',\n 'Update',\n ),\n });\n }\n\n /** Wraps the create submit so the outcome is reported once the server answers\n * — the optimistic action itself has no completion callback. */\n private _reportedCreate(origin: RowCreationOrigin) {\n return async (items: T[]) => {\n try {\n const result = await this._submitCreate(items);\n const { itemKey } = this._parent.collection;\n this._parent.bi.rowCreationEnd({\n origin,\n resultType: 'success',\n itemIds: (result ?? items).map(itemKey),\n });\n return result;\n } catch (error) {\n this._parent.bi.rowCreationEnd({ origin, resultType: 'failure' });\n throw error;\n }\n };\n }\n\n private _retryableToast(\n messageKey:\n | 'cairo.editableTable.createItem.error.toast'\n | 'cairo.editableTable.duplicateItem.error.toast'\n | 'cairo.editableTable.deleteItem.error.toast'\n | 'cairo.editableTable.updateItem.error.toast',\n actionName: RetryActionName,\n ) {\n const t = this._parent.collection.translate;\n return (_err: unknown, { retry }: { retry: () => void }) => ({\n message: t(messageKey),\n action: {\n onClick: () => {\n this._parent.bi.tryAgainClicked(actionName);\n retry();\n },\n text: t('cairo.editableTable.retry.toast.CTA'),\n },\n });\n }\n\n private _submitUpdate(\n items: T[],\n updatedItems: T[],\n contexts: CollectionUpdateContext<T>[],\n ) {\n const sameItems =\n items.length === updatedItems.length &&\n items.every((item, index) => item === updatedItems[index]);\n\n return this._handlers.submitUpdate(items, sameItems ? contexts : undefined);\n }\n\n private _updateContexts(\n updatedItems: T[],\n changedFieldIdsByItem?: string[][],\n ): CollectionUpdateContext<T>[] {\n return updatedItems.map((item, index) => {\n const key = this._parent.collection.itemKey(item);\n const previousItem =\n this._parent.collection.result.get(key)?.item ?? item;\n return {\n previousItem,\n changedFieldIds:\n changedFieldIdsByItem?.[index] ??\n changedFieldIdsFromItems(previousItem, item),\n };\n });\n }\n\n /**\n * Nearest row above `rowKey` that a create can anchor on: a server row\n * that is not a draft and not itself a created row still living as an\n * optimistic patch. Anchoring one create on another strands the new row\n * at the top of the table — the core merge repositions created patches\n * newest-first, so the anchor moves away after the new row is placed.\n */\n private _serverAnchorFor(rowKey: string): string | undefined {\n const keyedItems = this._parent.keyedItems;\n const start = keyedItems.findIndex((ki) => ki.key === rowKey);\n for (let i = start - 1; i >= 0; i--) {\n const key = keyedItems[i].key;\n if (\n !this._drafts.has(key) &&\n !this._pendingCreateKeys.has(key) &&\n !this._isPatchCreatedRow(key)\n ) {\n return key;\n }\n }\n return undefined;\n }\n\n private _isPatchCreatedRow(key: string): boolean {\n return this._optimisticActions.state.patches.some(\n (patch) =>\n patch.actionType === 'createMany' && patch.patchedItems.has(key),\n );\n }\n\n private _survivingAnchorAbove(\n key: string,\n deleted: Set<string>,\n ): string | undefined {\n const keyedItems = this._parent.keyedItems;\n const start = keyedItems.findIndex((ki) => ki.key === key);\n for (let i = start - 1; i >= 0; i--) {\n const k = keyedItems[i].key;\n if (!deleted.has(k)) {\n return k;\n }\n }\n return undefined;\n }\n\n private readonly _submitCreate = async (items: T[]) => {\n const createdItems = await this._handlers.submitCreate(items);\n if (!createdItems) {\n return createdItems;\n }\n\n const { itemKey } = this._parent.collection;\n runInAction(() => {\n createdItems.forEach((createdItem, index) => {\n const submittedItem = items[index];\n if (!submittedItem) {\n return;\n }\n\n const oldKey = itemKey(submittedItem);\n const newKey = itemKey(createdItem);\n this._pendingCreateKeys.delete(oldKey);\n // The server assigned the row a new key — drafts anchored on the\n // old key must follow the row under its new key.\n for (const [rowKey, draft] of this._drafts) {\n if (draft.afterItemKey === oldKey) {\n this._drafts.set(rowKey, { ...draft, afterItemKey: newKey });\n }\n }\n this._parent.cellInteraction.replaceRowKey(oldKey, newKey);\n });\n });\n\n return createdItems;\n };\n}\n\nconst changedFieldIdsFromItems = <T>(\n previousItem: T,\n updatedItem: T,\n): string[] => {\n if (!isRecord(previousItem) || !isRecord(updatedItem)) {\n return [];\n }\n\n return Array.from(\n new Set([...Object.keys(previousItem), ...Object.keys(updatedItem)]),\n ).filter(\n (fieldId) => !Object.is(previousItem[fieldId], updatedItem[fieldId]),\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_mobx","require","MutationState","constructor","parent","handlers","createOptimisticActions","_defineProperty2","default","Map","Set","items","createdItems","_handlers","submitCreate","itemKey","_parent","collection","runInAction","forEach","createdItem","index","submittedItem","oldKey","newKey","_pendingCreateKeys","delete","rowKey","draft","_drafts","afterItemKey","set","cellInteraction","replaceRowKey","_optimisticActions","makeObservable","observable","shallow","addItem","action","commitNewRow","deleteItems","init","_mergeDraftRows","keyedItems","size","draftBelow","key","item","merged","pushDraftsBelow","anchorKey","get","push","id","length","pageIndex","indexWithinPage","undefined","keyedItem","keys","origin","bi","rowCreationStart","newItem","createItem","isLocalNewRow","has","t","translate","_serverAnchorFor","add","createOne","submit","_reportedCreate","successToast","errorToast","_retryableToast","duplicateItem","find","ki","sourceItem","newId","sourceId","duplicate","k","Object","String","rowKeys","deleted","_survivingAnchorAbove","serverRowKeys","cellValue","dropRowCellState","map","_this$_parent$keyedIt","filter","deleteMany","submitDelete","count","updatesAreBatched","Boolean","executor","batchWait","updateItems","updatedItems","changedFieldIdsByItem","undo","contexts","_updateContexts","updateMany","keepPosition","onKept","_submitUpdate","Promise","resolve","_updateSuccessToast","showUndoToast","onUndo","result","_submitCreate","rowCreationEnd","resultType","itemIds","error","messageKey","actionName","_err","retry","message","onClick","tryAgainClicked","text","sameItems","every","submitUpdate","_this$_parent$collect","previousItem","changedFieldIds","changedFieldIdsFromItems","start","findIndex","i","_isPatchCreatedRow","state","patches","some","patch","actionType","patchedItems","exports","updatedItem","isRecord","Array","from","fieldId","is","value"],"sources":["../../../../src/state/EditableTable/MutationState.ts"],"sourcesContent":["import { action, makeObservable, observable, runInAction } from 'mobx';\nimport type {\n CollectionOptimisticActions,\n CollectionUpdateContext,\n CollectionState,\n FiltersMap,\n KeyedItem,\n} from '@wix/bex-core';\nimport type { EditableTableState } from './EditableTableState';\nimport type {\n RetryActionName,\n RowCreationOrigin,\n} from './EditableTableStateBIReporter';\n\nexport interface EditableTableMutationHandlers<T> {\n /** Factory to create a new empty item with a fresh ID */\n createItem: () => T;\n /** Submit updated items to the server */\n submitUpdate: (\n items: T[],\n contexts?: CollectionUpdateContext<T>[],\n ) => Promise<T[] | void>;\n /** Submit newly created items to the server */\n submitCreate: (items: T[]) => Promise<T[] | void>;\n /** Submit item deletions to the server */\n submitDelete: (items: T[]) => Promise<void>;\n}\n\nexport interface UpdateOptions {\n /** Missing: the \"Item updated\" toast. A string: this text instead. `null`:\n * no success toast. */\n successToast?: string | null;\n /** Adds Undo to the success toast. The server call waits until the toast\n * closes or times out. */\n undo?: {\n /** Runs when the user clicks Undo, after the rows are rolled back. */\n onUndo: () => void;\n /** Runs when the toast closes or times out without Undo. */\n onKept: () => void;\n };\n}\n\ntype DraftRow<T> = {\n item: T;\n afterItemKey?: string;\n origin: RowCreationOrigin;\n};\n\nexport class MutationState<T, F extends FiltersMap> {\n private readonly _handlers: EditableTableMutationHandlers<T>;\n private readonly _optimisticActions: CollectionOptimisticActions<T, F>;\n private readonly _parent: EditableTableState<T, F>;\n\n /**\n * Rows added locally and not yet created on the server, by row key.\n * `afterItemKey` is the key of the row directly above the draft\n * (undefined = top of the list). `addItem` keeps this exact, so at most\n * one draft is anchored on any given row.\n */\n readonly _drafts = new Map<string, DraftRow<T>>();\n\n /**\n * Row keys of creates still in flight. Their rows are already in the\n * collection result (optimistic patch), but their keys change when the\n * server responds, so nothing may anchor on them.\n */\n private readonly _pendingCreateKeys = new Set<string>();\n\n constructor(\n parent: EditableTableState<T, F>,\n handlers: EditableTableMutationHandlers<T>,\n createOptimisticActions: (\n collection: CollectionState<T, F>,\n ) => CollectionOptimisticActions<T, F>,\n ) {\n this._parent = parent;\n this._handlers = handlers;\n this._optimisticActions = createOptimisticActions(parent.collection);\n makeObservable(this, {\n _drafts: observable.shallow,\n addItem: action,\n commitNewRow: action,\n deleteItems: action,\n });\n }\n\n init() {\n return this._optimisticActions.init();\n }\n\n /**\n * Merge draft rows into the collection's keyed items for rendering.\n * Every draft renders directly below the row it is anchored on, so a\n * draft anchored on another draft follows it down the list. Drafts whose\n * anchor left the list (filtered out, deleted) stay visible at the end.\n */\n _mergeDraftRows(keyedItems: KeyedItem<T>[]): KeyedItem<T>[] {\n if (this._drafts.size === 0) {\n return keyedItems;\n }\n\n const draftBelow = new Map<string | undefined, { key: string; item: T }>();\n for (const [rowKey, draft] of this._drafts) {\n draftBelow.set(draft.afterItemKey, { key: rowKey, item: draft.item });\n }\n\n const merged: KeyedItem<T>[] = [];\n const pushDraftsBelow = (rowKey: string | undefined) => {\n let anchorKey = rowKey;\n let draft = draftBelow.get(anchorKey);\n while (draft) {\n draftBelow.delete(anchorKey);\n merged.push({\n item: draft.item,\n key: draft.key,\n id: draft.key,\n index: merged.length,\n pageIndex: -1,\n indexWithinPage: -1,\n });\n anchorKey = draft.key;\n draft = draftBelow.get(anchorKey);\n }\n };\n\n pushDraftsBelow(undefined);\n for (const keyedItem of keyedItems) {\n merged.push(keyedItem);\n pushDraftsBelow(keyedItem.key);\n }\n for (const anchorKey of [...draftBelow.keys()]) {\n pushDraftsBelow(anchorKey);\n }\n return merged;\n }\n\n addItem(\n afterItemKey?: string,\n origin: RowCreationOrigin = 'Card CTA',\n ): string {\n // The add-row button reports through `onAddItemClick`; context-menu\n // entries report here so each origin stays distinct.\n if (origin !== 'Card CTA') {\n this._parent.bi.rowCreationStart(origin);\n }\n\n const newItem = this._handlers.createItem();\n const rowKey = this._parent.collection.itemKey(newItem);\n // The new row lands directly below its anchor, pushing down whichever\n // draft sat there — that draft is now anchored on the new row.\n for (const [key, draft] of this._drafts) {\n if (draft.afterItemKey === afterItemKey) {\n this._drafts.set(key, { ...draft, afterItemKey: rowKey });\n }\n }\n this._drafts.set(rowKey, { item: newItem, afterItemKey, origin });\n return rowKey;\n }\n\n isLocalNewRow(rowKey: string): boolean {\n return this._drafts.has(rowKey);\n }\n\n /** Create a local new row on the server, with its edited values merged in. */\n commitNewRow(rowKey: string, item: T) {\n const t = this._parent.collection.translate;\n const draft = this._drafts.get(rowKey);\n if (!draft) {\n return;\n }\n\n // The create's optimistic patch can only anchor on a real server row —\n // not a draft, not another row created through this table's patches.\n const afterItemKey = this._serverAnchorFor(rowKey);\n const { origin } = draft;\n\n this._drafts.delete(rowKey);\n this._pendingCreateKeys.add(rowKey);\n this._optimisticActions.createOne(item, {\n submit: this._reportedCreate(origin),\n afterItemKey,\n successToast: t('cairo.editableTable.createItem.success.toast'),\n errorToast: this._retryableToast(\n 'cairo.editableTable.createItem.error.toast',\n 'Create',\n ),\n });\n }\n\n duplicateItem(rowKey: string) {\n const t = this._parent.collection.translate;\n const keyedItem = this._parent.keyedItems.find((ki) => ki.key === rowKey);\n if (!keyedItem) {\n return;\n }\n\n const origin: RowCreationOrigin = 'Row Context Menu - Duplicate';\n this._parent.bi.rowCreationStart(origin);\n\n const sourceItem = keyedItem.item;\n const newItem = this._handlers.createItem();\n const { itemKey } = this._parent.collection;\n const newId = itemKey(newItem);\n const sourceId = itemKey(sourceItem);\n const duplicate = { ...sourceItem } as any;\n for (const k of Object.keys(duplicate)) {\n if (String(duplicate[k]) === sourceId) {\n duplicate[k] = newId;\n break;\n }\n }\n this._pendingCreateKeys.add(newId);\n this._optimisticActions.createOne(duplicate as T, {\n submit: this._reportedCreate(origin),\n afterItemKey: rowKey,\n successToast: t('cairo.editableTable.duplicateItem.success.toast'),\n errorToast: this._retryableToast(\n 'cairo.editableTable.duplicateItem.error.toast',\n 'Duplicate',\n ),\n });\n }\n\n deleteItems(rowKeys: string[]) {\n const t = this._parent.collection.translate;\n const deleted = new Set(rowKeys);\n\n // Surviving drafts anchored on a deleted row move up to the nearest\n // surviving row, so they don't fall to the end of the list.\n for (const [rowKey, draft] of this._drafts) {\n if (\n deleted.has(rowKey) ||\n draft.afterItemKey == null ||\n !deleted.has(draft.afterItemKey)\n ) {\n continue;\n }\n this._drafts.set(rowKey, {\n ...draft,\n afterItemKey: this._survivingAnchorAbove(draft.afterItemKey, deleted),\n });\n }\n\n const serverRowKeys: string[] = [];\n for (const rowKey of rowKeys) {\n if (this._drafts.has(rowKey)) {\n // Never created on the server — dropping the draft is the whole\n // delete.\n this._drafts.delete(rowKey);\n this._parent.cellValue.dropRowCellState(rowKey);\n } else {\n serverRowKeys.push(rowKey);\n }\n }\n\n const items = serverRowKeys\n .map((key) => this._parent.keyedItems.find((ki) => ki.key === key)?.item)\n .filter((item): item is T => item != null);\n if (items.length === 0) {\n return;\n }\n\n this._optimisticActions.deleteMany(items, {\n submit: this._handlers.submitDelete,\n successToast: t('cairo.editableTable.deleteItem.success.toast', {\n count: items.length,\n }),\n errorToast: this._retryableToast(\n 'cairo.editableTable.deleteItem.error.toast',\n 'Delete',\n ),\n });\n }\n\n /** With `batchWait`, core runs a batch with the last update's `submit` and\n * toast only, so an earlier update's Undo and `onKept` would be lost. */\n get updatesAreBatched(): boolean {\n return Boolean(this._optimisticActions.executor.batchWait);\n }\n\n updateItems(\n updatedItems: T[],\n changedFieldIdsByItem?: string[][],\n { successToast, undo }: UpdateOptions = {},\n ) {\n // With its own toast, an empty update still runs, to show the toast for\n // values that stayed local (invalid cells, unsaved rows).\n if (updatedItems.length === 0 && typeof successToast !== 'string') {\n return;\n }\n const contexts = this._updateContexts(updatedItems, changedFieldIdsByItem);\n this._optimisticActions.updateMany(updatedItems, {\n keepPosition: true,\n // With undo, core calls this when the toast closes or times out without\n // Undo. Retry calls it again.\n submit: (items) => {\n undo?.onKept();\n // With `batchWait`, `items` also holds the other updates of the batch.\n return items.length > 0\n ? this._submitUpdate(items, updatedItems, contexts)\n : Promise.resolve();\n },\n successToast: this._updateSuccessToast(successToast, updatedItems.length),\n showUndoToast: undo !== undefined,\n onUndo: undo?.onUndo,\n errorToast: this._retryableToast(\n 'cairo.editableTable.updateItem.error.toast',\n 'Update',\n ),\n });\n }\n\n private _updateSuccessToast(\n successToast: UpdateOptions['successToast'],\n count: number,\n ) {\n if (successToast === null) {\n return undefined;\n }\n return (\n successToast ??\n this._parent.collection.translate(\n 'cairo.editableTable.updateItem.success.toast',\n { count },\n )\n );\n }\n\n /** Wraps the create submit so the outcome is reported once the server answers\n * — the optimistic action itself has no completion callback. */\n private _reportedCreate(origin: RowCreationOrigin) {\n return async (items: T[]) => {\n try {\n const result = await this._submitCreate(items);\n const { itemKey } = this._parent.collection;\n this._parent.bi.rowCreationEnd({\n origin,\n resultType: 'success',\n itemIds: (result ?? items).map(itemKey),\n });\n return result;\n } catch (error) {\n this._parent.bi.rowCreationEnd({ origin, resultType: 'failure' });\n throw error;\n }\n };\n }\n\n private _retryableToast(\n messageKey:\n | 'cairo.editableTable.createItem.error.toast'\n | 'cairo.editableTable.duplicateItem.error.toast'\n | 'cairo.editableTable.deleteItem.error.toast'\n | 'cairo.editableTable.updateItem.error.toast',\n actionName: RetryActionName,\n ) {\n const t = this._parent.collection.translate;\n return (_err: unknown, { retry }: { retry: () => void }) => ({\n message: t(messageKey),\n action: {\n onClick: () => {\n this._parent.bi.tryAgainClicked(actionName);\n retry();\n },\n text: t('cairo.editableTable.retry.toast.CTA'),\n },\n });\n }\n\n private _submitUpdate(\n items: T[],\n updatedItems: T[],\n contexts: CollectionUpdateContext<T>[],\n ) {\n const sameItems =\n items.length === updatedItems.length &&\n items.every((item, index) => item === updatedItems[index]);\n\n return this._handlers.submitUpdate(items, sameItems ? contexts : undefined);\n }\n\n private _updateContexts(\n updatedItems: T[],\n changedFieldIdsByItem?: string[][],\n ): CollectionUpdateContext<T>[] {\n return updatedItems.map((item, index) => {\n const key = this._parent.collection.itemKey(item);\n const previousItem =\n this._parent.collection.result.get(key)?.item ?? item;\n return {\n previousItem,\n changedFieldIds:\n changedFieldIdsByItem?.[index] ??\n changedFieldIdsFromItems(previousItem, item),\n };\n });\n }\n\n /**\n * Nearest row above `rowKey` that a create can anchor on: a server row\n * that is not a draft and not itself a created row still living as an\n * optimistic patch. Anchoring one create on another strands the new row\n * at the top of the table — the core merge repositions created patches\n * newest-first, so the anchor moves away after the new row is placed.\n */\n private _serverAnchorFor(rowKey: string): string | undefined {\n const keyedItems = this._parent.keyedItems;\n const start = keyedItems.findIndex((ki) => ki.key === rowKey);\n for (let i = start - 1; i >= 0; i--) {\n const key = keyedItems[i].key;\n if (\n !this._drafts.has(key) &&\n !this._pendingCreateKeys.has(key) &&\n !this._isPatchCreatedRow(key)\n ) {\n return key;\n }\n }\n return undefined;\n }\n\n private _isPatchCreatedRow(key: string): boolean {\n return this._optimisticActions.state.patches.some(\n (patch) =>\n patch.actionType === 'createMany' && patch.patchedItems.has(key),\n );\n }\n\n private _survivingAnchorAbove(\n key: string,\n deleted: Set<string>,\n ): string | undefined {\n const keyedItems = this._parent.keyedItems;\n const start = keyedItems.findIndex((ki) => ki.key === key);\n for (let i = start - 1; i >= 0; i--) {\n const k = keyedItems[i].key;\n if (!deleted.has(k)) {\n return k;\n }\n }\n return undefined;\n }\n\n private readonly _submitCreate = async (items: T[]) => {\n const createdItems = await this._handlers.submitCreate(items);\n if (!createdItems) {\n return createdItems;\n }\n\n const { itemKey } = this._parent.collection;\n runInAction(() => {\n createdItems.forEach((createdItem, index) => {\n const submittedItem = items[index];\n if (!submittedItem) {\n return;\n }\n\n const oldKey = itemKey(submittedItem);\n const newKey = itemKey(createdItem);\n this._pendingCreateKeys.delete(oldKey);\n // The server assigned the row a new key — drafts anchored on the\n // old key must follow the row under its new key.\n for (const [rowKey, draft] of this._drafts) {\n if (draft.afterItemKey === oldKey) {\n this._drafts.set(rowKey, { ...draft, afterItemKey: newKey });\n }\n }\n this._parent.cellInteraction.replaceRowKey(oldKey, newKey);\n });\n });\n\n return createdItems;\n };\n}\n\nconst changedFieldIdsFromItems = <T>(\n previousItem: T,\n updatedItem: T,\n): string[] => {\n if (!isRecord(previousItem) || !isRecord(updatedItem)) {\n return [];\n }\n\n return Array.from(\n new Set([...Object.keys(previousItem), ...Object.keys(updatedItem)]),\n ).filter(\n (fieldId) => !Object.is(previousItem[fieldId], updatedItem[fieldId]),\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ exports.EntityPageDeleteActionState = void 0;
6
6
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
7
  var _bexCore = require("@wix/bex-core");
8
8
  var _mobx = require("mobx");
9
+ var _itemAccess = require("../../model/itemAccess");
9
10
  class EntityPageDeleteActionState {
10
11
  constructor(params) {
11
12
  (0, _defineProperty2.default)(this, "container", void 0);
@@ -58,14 +59,13 @@ class EntityPageDeleteActionState {
58
59
  return undefined;
59
60
  }
60
61
  get canShow() {
61
- var _this$getLoadedSchema2;
62
- const itemPermissions = (_this$getLoadedSchema2 = this.getLoadedSchema()) == null ? void 0 : _this$getLoadedSchema2.schema.itemPermissions;
63
- return !!this.getEntity() && !!this.config && this.isEnabled && !!this.getDeleteHandler() && ((itemPermissions == null ? void 0 : itemPermissions.deleteItem) ?? true);
62
+ const loaded = this.getLoadedSchema();
63
+ return !!this.getEntity() && !!this.config && this.isEnabled && !!this.getDeleteHandler() && (0, _itemAccess.getItemAccess)(loaded == null ? void 0 : loaded.schema.itemPermissions, loaded == null ? void 0 : loaded.backend).permitted.delete;
64
64
  }
65
65
  get disabledReason() {
66
- var _this$getLoadedSchema3;
66
+ var _this$getLoadedSchema2;
67
67
  const entity = this.getEntity();
68
- const itemPermissions = (_this$getLoadedSchema3 = this.getLoadedSchema()) == null ? void 0 : _this$getLoadedSchema3.schema.itemPermissions;
68
+ const itemPermissions = (_this$getLoadedSchema2 = this.getLoadedSchema()) == null ? void 0 : _this$getLoadedSchema2.schema.itemPermissions;
69
69
  const disabledResult = entity && itemPermissions != null && itemPermissions.isRemoveItemDisabled ? itemPermissions.isRemoveItemDisabled(entity) : undefined;
70
70
  if (!(disabledResult != null && disabledResult.disabled)) {
71
71
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_bexCore","require","_mobx","EntityPageDeleteActionState","constructor","params","_defineProperty2","default","TaskState","container","deleteAction","schemaSource","getEntity","getLoadedSchema","transformEntityToCollectionItem","onDeleted","emitDelete","emitDeleteError","makeObservable","canShow","computed","disabledReason","config","isEnabled","_this$config","enabled","getDeleteHandler","_this$getLoadedSchema","undefined","onDelete","backendDelete","backend","delete","entity","itemKey","_this$getLoadedSchema2","itemPermissions","schema","deleteItem","_this$getLoadedSchema3","disabledResult","isRemoveItemDisabled","disabled","reason","translate","getItemName","_this$config2","_this$schemaSource","itemName","num","showSuccessToast","deletedEntity","_this$config3","_this$container$showT","_this$container","successToast","message","showToast","call","type","biName","showErrorToast","err","_this$config4","_this$container$showT2","_this$container2","errorToast","retry","deleteEntity","showTryAgain","tryAgain","action","uiType","text","onClick","removeToastOnClick","task","status","isLoading","deleteHandler","caughtError","run","errorMonitor","captureException","exports"],"sources":["../../../../src/state/EntityPage/EntityPageDeleteActionState.ts"],"sourcesContent":["import { TaskState } from '@wix/bex-core';\nimport type {\n LoadedSchema,\n SchemaSource,\n ToastConfig,\n WixPatternsContainer,\n} from '@wix/bex-core';\nimport { computed, makeObservable } from 'mobx';\n\ntype DeleteErrorToast = (\n err: unknown,\n params: { retry: () => void },\n) =>\n | {\n message?: string;\n tryAgain?: boolean;\n action?: { text: string; onClick: () => void };\n }\n | string;\n\nexport interface EntityPageDeleteActionConfig<T> {\n enabled?: boolean;\n onDelete?: (entity: T) => Promise<void>;\n successToast?: Pick<ToastConfig, 'message'> | string;\n errorToast?: DeleteErrorToast;\n itemName?: (entity: T) => string;\n}\n\nexport type EntityPageDeleteAction<T> =\n | boolean\n | EntityPageDeleteActionConfig<T>;\n\nexport interface EntityPageDeleteActionStateParams<T> {\n container: WixPatternsContainer;\n deleteAction?: EntityPageDeleteAction<T>;\n schemaSource?: SchemaSource<T>;\n getEntity: () => T | null;\n getLoadedSchema: () => LoadedSchema<T> | null;\n transformEntityToCollectionItem: (entity: T) => any;\n onDeleted: (deletedCollectionItem: any) => void;\n emitDelete: () => void;\n emitDeleteError: (err: unknown) => void;\n}\n\nexport class EntityPageDeleteActionState<T> {\n readonly container: WixPatternsContainer;\n readonly deleteAction?: EntityPageDeleteAction<T>;\n readonly schemaSource?: SchemaSource<T>;\n readonly getEntity: () => T | null;\n readonly getLoadedSchema: () => LoadedSchema<T> | null;\n readonly transformEntityToCollectionItem: (entity: T) => any;\n readonly onDeleted: (deletedCollectionItem: any) => void;\n readonly emitDelete: () => void;\n readonly emitDeleteError: (err: unknown) => void;\n\n readonly task = new TaskState<void>();\n\n constructor(params: EntityPageDeleteActionStateParams<T>) {\n this.container = params.container;\n this.deleteAction = params.deleteAction;\n this.schemaSource = params.schemaSource;\n this.getEntity = params.getEntity;\n this.getLoadedSchema = params.getLoadedSchema;\n this.transformEntityToCollectionItem =\n params.transformEntityToCollectionItem;\n this.onDeleted = params.onDeleted;\n this.emitDelete = params.emitDelete;\n this.emitDeleteError = params.emitDeleteError;\n\n makeObservable(this, {\n canShow: computed,\n disabledReason: computed,\n });\n }\n\n private get config(): EntityPageDeleteActionConfig<T> | null {\n if (!this.deleteAction) {\n return null;\n }\n\n return typeof this.deleteAction === 'boolean' ? {} : this.deleteAction;\n }\n\n private get isEnabled() {\n return this.config?.enabled !== false;\n }\n\n private getDeleteHandler(): ((entity: T) => Promise<void>) | undefined {\n const config = this.config;\n if (!config || !this.isEnabled) {\n return undefined;\n }\n\n if (config.onDelete) {\n return config.onDelete;\n }\n\n const backendDelete = this.getLoadedSchema()?.backend.delete;\n if (this.schemaSource && backendDelete) {\n return (entity) => backendDelete(this.schemaSource!.itemKey(entity));\n }\n\n return undefined;\n }\n\n get canShow() {\n const itemPermissions = this.getLoadedSchema()?.schema.itemPermissions;\n return (\n !!this.getEntity() &&\n !!this.config &&\n this.isEnabled &&\n !!this.getDeleteHandler() &&\n (itemPermissions?.deleteItem ?? true)\n );\n }\n\n get disabledReason() {\n const entity = this.getEntity();\n const itemPermissions = this.getLoadedSchema()?.schema.itemPermissions;\n const disabledResult =\n entity && itemPermissions?.isRemoveItemDisabled\n ? itemPermissions.isRemoveItemDisabled(entity)\n : undefined;\n\n if (!disabledResult?.disabled) {\n return undefined;\n }\n\n return disabledResult.reason ?? this.container.translate('cairo.disabled');\n }\n\n getItemName(entity: T) {\n const itemName =\n this.config?.itemName?.(entity) ?? this.schemaSource?.itemName(entity);\n\n return (\n itemName ||\n this.container.translate('cairo.entity.item', {\n num: 1,\n })\n );\n }\n\n private showSuccessToast(deletedEntity: T) {\n const successToast = this.config?.successToast;\n const message =\n typeof successToast === 'string' ? successToast : successToast?.message;\n\n this.container.showToast?.({\n type: 'SUCCESS',\n biName: 'cairo-entity-page-delete-success-toast',\n message:\n message ??\n this.container.translate('cairo.deleteSuccess', {\n itemName: this.getItemName(deletedEntity),\n }),\n });\n }\n\n private showErrorToast(err: unknown) {\n const errorToast = this.config?.errorToast?.(err, {\n retry: () => this.deleteEntity(),\n });\n const message =\n typeof errorToast === 'string' ? errorToast : errorToast?.message;\n const showTryAgain =\n typeof errorToast === 'string' ? true : errorToast?.tryAgain !== false;\n const action =\n typeof errorToast === 'string' ? undefined : errorToast?.action;\n\n this.container.showToast?.({\n type: 'ERROR',\n biName: 'cairo-entity-page-delete-error-toast',\n message:\n message ?? this.container.translate('cairo.technical.error.text'),\n action:\n action || showTryAgain\n ? {\n uiType: 'LINK',\n text:\n action?.text ?? this.container.translate('cairo.toast.retry'),\n onClick: () => {\n if (action?.onClick) {\n action.onClick();\n } else {\n this.deleteEntity();\n }\n },\n removeToastOnClick: true,\n }\n : undefined,\n });\n }\n\n async deleteEntity() {\n if (this.task.status.isLoading || !this.canShow || this.disabledReason) {\n return;\n }\n\n const entity = this.getEntity();\n const deleteHandler = this.getDeleteHandler();\n if (!entity || !deleteHandler) {\n return;\n }\n\n this.emitDelete();\n\n let caughtError: unknown;\n await this.task.run(\n async () => {\n await deleteHandler(entity);\n },\n (err) => {\n caughtError = err;\n },\n );\n\n if (caughtError) {\n this.showErrorToast(caughtError);\n this.container.errorMonitor.captureException(caughtError);\n this.emitDeleteError(caughtError);\n throw caughtError;\n }\n\n this.showSuccessToast(entity);\n this.onDeleted(this.transformEntityToCollectionItem(entity));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_bexCore","require","_mobx","_itemAccess","EntityPageDeleteActionState","constructor","params","_defineProperty2","default","TaskState","container","deleteAction","schemaSource","getEntity","getLoadedSchema","transformEntityToCollectionItem","onDeleted","emitDelete","emitDeleteError","makeObservable","canShow","computed","disabledReason","config","isEnabled","_this$config","enabled","getDeleteHandler","_this$getLoadedSchema","undefined","onDelete","backendDelete","backend","delete","entity","itemKey","loaded","getItemAccess","schema","itemPermissions","permitted","_this$getLoadedSchema2","disabledResult","isRemoveItemDisabled","disabled","reason","translate","getItemName","_this$config2","_this$schemaSource","itemName","num","showSuccessToast","deletedEntity","_this$config3","_this$container$showT","_this$container","successToast","message","showToast","call","type","biName","showErrorToast","err","_this$config4","_this$container$showT2","_this$container2","errorToast","retry","deleteEntity","showTryAgain","tryAgain","action","uiType","text","onClick","removeToastOnClick","task","status","isLoading","deleteHandler","caughtError","run","errorMonitor","captureException","exports"],"sources":["../../../../src/state/EntityPage/EntityPageDeleteActionState.ts"],"sourcesContent":["import { TaskState } from '@wix/bex-core';\nimport type {\n LoadedSchema,\n SchemaSource,\n ToastConfig,\n WixPatternsContainer,\n} from '@wix/bex-core';\nimport { computed, makeObservable } from 'mobx';\nimport { getItemAccess } from '../../model/itemAccess';\n\ntype DeleteErrorToast = (\n err: unknown,\n params: { retry: () => void },\n) =>\n | {\n message?: string;\n tryAgain?: boolean;\n action?: { text: string; onClick: () => void };\n }\n | string;\n\nexport interface EntityPageDeleteActionConfig<T> {\n enabled?: boolean;\n onDelete?: (entity: T) => Promise<void>;\n successToast?: Pick<ToastConfig, 'message'> | string;\n errorToast?: DeleteErrorToast;\n itemName?: (entity: T) => string;\n}\n\nexport type EntityPageDeleteAction<T> =\n | boolean\n | EntityPageDeleteActionConfig<T>;\n\nexport interface EntityPageDeleteActionStateParams<T> {\n container: WixPatternsContainer;\n deleteAction?: EntityPageDeleteAction<T>;\n schemaSource?: SchemaSource<T>;\n getEntity: () => T | null;\n getLoadedSchema: () => LoadedSchema<T> | null;\n transformEntityToCollectionItem: (entity: T) => any;\n onDeleted: (deletedCollectionItem: any) => void;\n emitDelete: () => void;\n emitDeleteError: (err: unknown) => void;\n}\n\nexport class EntityPageDeleteActionState<T> {\n readonly container: WixPatternsContainer;\n readonly deleteAction?: EntityPageDeleteAction<T>;\n readonly schemaSource?: SchemaSource<T>;\n readonly getEntity: () => T | null;\n readonly getLoadedSchema: () => LoadedSchema<T> | null;\n readonly transformEntityToCollectionItem: (entity: T) => any;\n readonly onDeleted: (deletedCollectionItem: any) => void;\n readonly emitDelete: () => void;\n readonly emitDeleteError: (err: unknown) => void;\n\n readonly task = new TaskState<void>();\n\n constructor(params: EntityPageDeleteActionStateParams<T>) {\n this.container = params.container;\n this.deleteAction = params.deleteAction;\n this.schemaSource = params.schemaSource;\n this.getEntity = params.getEntity;\n this.getLoadedSchema = params.getLoadedSchema;\n this.transformEntityToCollectionItem =\n params.transformEntityToCollectionItem;\n this.onDeleted = params.onDeleted;\n this.emitDelete = params.emitDelete;\n this.emitDeleteError = params.emitDeleteError;\n\n makeObservable(this, {\n canShow: computed,\n disabledReason: computed,\n });\n }\n\n private get config(): EntityPageDeleteActionConfig<T> | null {\n if (!this.deleteAction) {\n return null;\n }\n\n return typeof this.deleteAction === 'boolean' ? {} : this.deleteAction;\n }\n\n private get isEnabled() {\n return this.config?.enabled !== false;\n }\n\n private getDeleteHandler(): ((entity: T) => Promise<void>) | undefined {\n const config = this.config;\n if (!config || !this.isEnabled) {\n return undefined;\n }\n\n if (config.onDelete) {\n return config.onDelete;\n }\n\n const backendDelete = this.getLoadedSchema()?.backend.delete;\n if (this.schemaSource && backendDelete) {\n return (entity) => backendDelete(this.schemaSource!.itemKey(entity));\n }\n\n return undefined;\n }\n\n get canShow() {\n const loaded = this.getLoadedSchema();\n return (\n !!this.getEntity() &&\n !!this.config &&\n this.isEnabled &&\n !!this.getDeleteHandler() &&\n getItemAccess(loaded?.schema.itemPermissions, loaded?.backend).permitted\n .delete\n );\n }\n\n get disabledReason() {\n const entity = this.getEntity();\n const itemPermissions = this.getLoadedSchema()?.schema.itemPermissions;\n const disabledResult =\n entity && itemPermissions?.isRemoveItemDisabled\n ? itemPermissions.isRemoveItemDisabled(entity)\n : undefined;\n\n if (!disabledResult?.disabled) {\n return undefined;\n }\n\n return disabledResult.reason ?? this.container.translate('cairo.disabled');\n }\n\n getItemName(entity: T) {\n const itemName =\n this.config?.itemName?.(entity) ?? this.schemaSource?.itemName(entity);\n\n return (\n itemName ||\n this.container.translate('cairo.entity.item', {\n num: 1,\n })\n );\n }\n\n private showSuccessToast(deletedEntity: T) {\n const successToast = this.config?.successToast;\n const message =\n typeof successToast === 'string' ? successToast : successToast?.message;\n\n this.container.showToast?.({\n type: 'SUCCESS',\n biName: 'cairo-entity-page-delete-success-toast',\n message:\n message ??\n this.container.translate('cairo.deleteSuccess', {\n itemName: this.getItemName(deletedEntity),\n }),\n });\n }\n\n private showErrorToast(err: unknown) {\n const errorToast = this.config?.errorToast?.(err, {\n retry: () => this.deleteEntity(),\n });\n const message =\n typeof errorToast === 'string' ? errorToast : errorToast?.message;\n const showTryAgain =\n typeof errorToast === 'string' ? true : errorToast?.tryAgain !== false;\n const action =\n typeof errorToast === 'string' ? undefined : errorToast?.action;\n\n this.container.showToast?.({\n type: 'ERROR',\n biName: 'cairo-entity-page-delete-error-toast',\n message:\n message ?? this.container.translate('cairo.technical.error.text'),\n action:\n action || showTryAgain\n ? {\n uiType: 'LINK',\n text:\n action?.text ?? this.container.translate('cairo.toast.retry'),\n onClick: () => {\n if (action?.onClick) {\n action.onClick();\n } else {\n this.deleteEntity();\n }\n },\n removeToastOnClick: true,\n }\n : undefined,\n });\n }\n\n async deleteEntity() {\n if (this.task.status.isLoading || !this.canShow || this.disabledReason) {\n return;\n }\n\n const entity = this.getEntity();\n const deleteHandler = this.getDeleteHandler();\n if (!entity || !deleteHandler) {\n return;\n }\n\n this.emitDelete();\n\n let caughtError: unknown;\n await this.task.run(\n async () => {\n await deleteHandler(entity);\n },\n (err) => {\n caughtError = err;\n },\n );\n\n if (caughtError) {\n this.showErrorToast(caughtError);\n this.container.errorMonitor.captureException(caughtError);\n this.emitDeleteError(caughtError);\n throw caughtError;\n }\n\n this.showSuccessToast(entity);\n this.onDeleted(this.transformEntityToCollectionItem(entity));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,8 @@ var _schemaFieldsContainer = require("../../model/schemaFieldsContainer");
10
10
  var _EntityPageStateBIReporter = require("./EntityPageStateBIReporter");
11
11
  var _events = require("@wix/bex-core/events");
12
12
  var _EntityPageDeleteActionState = require("./EntityPageDeleteActionState");
13
+ var _sourceSave = require("./sourceSave");
14
+ var _itemAccess = require("../../model/itemAccess");
13
15
  class EntityPageState {
14
16
  /**
15
17
  * The container the page's field renderers are built with — the one the schema
@@ -23,6 +25,7 @@ class EntityPageState {
23
25
  constructor(params) {
24
26
  (0, _defineProperty2.default)(this, "fetch", void 0);
25
27
  (0, _defineProperty2.default)(this, "onSave", void 0);
28
+ (0, _defineProperty2.default)(this, "_usesSourceSave", void 0);
26
29
  (0, _defineProperty2.default)(this, "saveSuccessToast", void 0);
27
30
  (0, _defineProperty2.default)(this, "saveErrorToast", void 0);
28
31
  (0, _defineProperty2.default)(this, "transformEntityToCollectionItem", void 0);
@@ -61,6 +64,7 @@ class EntityPageState {
61
64
  (0, _defineProperty2.default)(this, "events", new _events.EventEmitter());
62
65
  this.fetch = params.fetch;
63
66
  this.onSave = params.onSave;
67
+ this._usesSourceSave = (0, _sourceSave.isSourceSave)(params.onSave);
64
68
  this.saveSuccessToast = params.saveSuccessToast;
65
69
  this.saveErrorToast = params.saveErrorToast;
66
70
  this.formPage = new _bexCore.FormPageState({
@@ -114,6 +118,8 @@ class EntityPageState {
114
118
  holdSave: _mobx.action,
115
119
  isSaveHeld: _mobx.computed,
116
120
  isFormDirty: _mobx.computed,
121
+ areFieldsReadOnly: _mobx.computed,
122
+ resolvedActionsBarConfig: _mobx.computed,
117
123
  _withinRouter: _mobx.computed
118
124
  });
119
125
  }
@@ -218,6 +224,45 @@ class EntityPageState {
218
224
  });
219
225
  this.navigateToParent();
220
226
  }
227
+ get areFieldsReadOnly() {
228
+ var _ref;
229
+ const loaded = this.loadedSchema;
230
+ if (this.schemaSource && !loaded) {
231
+ return true;
232
+ }
233
+ const permissions = (_ref = (loaded == null ? void 0 : loaded.schema) ?? this.schema) == null ? void 0 : _ref.itemPermissions;
234
+ const {
235
+ permitted,
236
+ supported
237
+ } = (0, _itemAccess.getItemAccess)(permissions, loaded == null ? void 0 : loaded.backend);
238
+ // A custom save doesn't go through the backend, so it needs no write method.
239
+ const requiresBackendWrite = this._usesSourceSave && !!loaded;
240
+ if (this._isExistingEntity) {
241
+ return !permitted.update || requiresBackendWrite && !supported.update;
242
+ }
243
+ return !permitted.create || requiresBackendWrite && !supported.create || !!(permissions != null && permissions.isCreateItemDisabled != null && permissions.isCreateItemDisabled().disabled);
244
+ }
245
+
246
+ /** `actionsBarConfig` with Save and its secondary actions disabled while the
247
+ * fields are read-only. */
248
+ get resolvedActionsBarConfig() {
249
+ var _config$saveCta;
250
+ const config = this.actionsBarConfig;
251
+ if (!this.areFieldsReadOnly) {
252
+ return config;
253
+ }
254
+ return {
255
+ ...config,
256
+ saveCta: {
257
+ ...(config == null ? void 0 : config.saveCta),
258
+ disabled: true,
259
+ secondaryActions: config == null || (_config$saveCta = config.saveCta) == null || (_config$saveCta = _config$saveCta.secondaryActions) == null ? void 0 : _config$saveCta.map(item => ({
260
+ ...item,
261
+ disabled: true
262
+ }))
263
+ }
264
+ };
265
+ }
221
266
  get _isExistingEntity() {
222
267
  const isNewEntity = typeof this._isNewEntity === 'function' ? this._isNewEntity() : this._isNewEntity;
223
268
  const isRouteKnown = isNewEntity !== undefined;
@@ -303,8 +348,8 @@ class EntityPageState {
303
348
  return this._saveHolds.size > 0;
304
349
  }
305
350
  async handleSubmit(e) {
306
- var _this$actionsBarConfi2;
307
- if (this.formPage.submitTask.status.isLoading || this.isSaveHeld || (_this$actionsBarConfi2 = this.actionsBarConfig) != null && (_this$actionsBarConfi2 = _this$actionsBarConfi2.saveCta) != null && _this$actionsBarConfi2.disabled) {
351
+ var _this$resolvedActions;
352
+ if (this.formPage.submitTask.status.isLoading || this.isSaveHeld || (_this$resolvedActions = this.resolvedActionsBarConfig) != null && (_this$resolvedActions = _this$resolvedActions.saveCta) != null && _this$resolvedActions.disabled) {
308
353
  return;
309
354
  }
310
355
  this.events.emit('save');
@@ -313,11 +358,11 @@ class EntityPageState {
313
358
  data: widgetsFormData
314
359
  } = await this.formPage.validate();
315
360
  if (!isValid) {
316
- var _this$actionsBarConfi3;
361
+ var _this$actionsBarConfi2;
317
362
  this.bi.reportButtonClick({
318
363
  ctaName: 'Save',
319
364
  isValid: false,
320
- additionalInfo: (_this$actionsBarConfi3 = this.actionsBarConfig) == null || (_this$actionsBarConfi3 = _this$actionsBarConfi3.saveCta) == null ? void 0 : _this$actionsBarConfi3.biAdditionalInfo
365
+ additionalInfo: (_this$actionsBarConfi2 = this.actionsBarConfig) == null || (_this$actionsBarConfi2 = _this$actionsBarConfi2.saveCta) == null ? void 0 : _this$actionsBarConfi2.biAdditionalInfo
321
366
  });
322
367
  return;
323
368
  }
@@ -332,11 +377,15 @@ class EntityPageState {
332
377
  let savedEntity;
333
378
  let submitSuccessful = false;
334
379
  await form.handleSubmit(async () => {
335
- var _this$actionsBarConfi4;
380
+ var _this$actionsBarConfi3;
381
+ // The permission can be revoked while the form validates.
382
+ if (this.areFieldsReadOnly) {
383
+ return;
384
+ }
336
385
  bi.reportButtonClick({
337
386
  ctaName: 'Save',
338
387
  isValid: true,
339
- additionalInfo: (_this$actionsBarConfi4 = this.actionsBarConfig) == null || (_this$actionsBarConfi4 = _this$actionsBarConfi4.saveCta) == null ? void 0 : _this$actionsBarConfi4.biAdditionalInfo
388
+ additionalInfo: (_this$actionsBarConfi3 = this.actionsBarConfig) == null || (_this$actionsBarConfi3 = _this$actionsBarConfi3.saveCta) == null ? void 0 : _this$actionsBarConfi3.biAdditionalInfo
340
389
  });
341
390
  try {
342
391
  if (!this.isFetching) {
@@ -357,11 +406,11 @@ class EntityPageState {
357
406
  form.setError('root.serverError', {}); // https://react-hook-form.com/docs/useform/seterror
358
407
  }
359
408
  }, () => {
360
- var _this$actionsBarConfi5;
409
+ var _this$actionsBarConfi4;
361
410
  bi.reportButtonClick({
362
411
  ctaName: 'Save',
363
412
  isValid: false,
364
- additionalInfo: (_this$actionsBarConfi5 = this.actionsBarConfig) == null || (_this$actionsBarConfi5 = _this$actionsBarConfi5.saveCta) == null ? void 0 : _this$actionsBarConfi5.biAdditionalInfo
413
+ additionalInfo: (_this$actionsBarConfi4 = this.actionsBarConfig) == null || (_this$actionsBarConfi4 = _this$actionsBarConfi4.saveCta) == null ? void 0 : _this$actionsBarConfi4.biAdditionalInfo
365
414
  });
366
415
  } // can be used to report validation errors
367
416
  )(e);